const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function switch(id) { case 0: if (record->event.pressed) { SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } break; } return MACRO_NONE; };
bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QMKBEST: if (record->event.pressed) { // when keycode QMKBEST is pressed SEND_STRING("QMK is the best thing ever!"); } else { // when keycode QMKBEST is released } break; case QMKURL: if (record->event.pressed) { // when keycode QMKURL is pressed SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); } else { // when keycode QMKURL is released } break; } return true; }
bool process_record_user(uint16_t keycode, keyrecord_t *record) { if(record->event.pressed) { switch (keycode) { // Cloud9 macros case CLOUD9_TAB_LEFT: SEND_STRING(SS_LCTRL("[")); return true; break; case CLOUD9_TAB_RIGHT: SEND_STRING(SS_LCTRL("]")); return true; break; case CLOUD9_TAB_CLOSE: SEND_STRING(SS_LALT("w")); return true; break; case CLOUD9_GOTO_SYMBOL: SEND_STRING(SS_LSFT(SS_LCTRL("e"))); return true; break; case CLOUD9_GOTO_LINE: SEND_STRING(SS_LCTRL("g")); return true; break; case CLOUD9_NAVIGATE: SEND_STRING(SS_LCTRL("e")); return true; break; } } return true; }
int serve_infinite(ne_socket *sock, void *ud) { struct infinite *i = ud; CALL(discard_request(sock)); SEND_STRING(sock, i->header); while (server_send(sock, i->repeat, strlen(i->repeat)) == 0) /* nullop */; return OK; }
// No global matrix scan code, so just run keymap's matrix // scan function void matrix_scan_user(void) { static bool has_ran_yet; if (!has_ran_yet) { has_ran_yet = true; startup_user(); } LEADER_DICTIONARY() { leading = false; leader_end(); // Mac Save (Leader -> s) SEQ_ONE_KEY(KC_S) { SEND_STRING(SS_LGUI("s")); } // Mac copy line down (Leader -> d, d) SEQ_TWO_KEYS(KC_D, KC_D) { register_code(KC_LSHIFT); register_code(KC_HOME); unregister_code(KC_HOME); unregister_code(KC_LSHIFT); SEND_STRING(SS_LGUI("c")); tap(KC_END); tap(KC_ENTER); SEND_STRING(SS_LGUI("v")); } // Mac copy line up (Leader -> u, u) SEQ_TWO_KEYS(KC_U, KC_U) { register_code(KC_LSHIFT); register_code(KC_HOME); unregister_code(KC_HOME); unregister_code(KC_LSHIFT); SEND_STRING(SS_LGUI("c")); tap(KC_UP); tap(KC_END); tap(KC_ENTER); SEND_STRING(SS_LGUI("v")); }
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { /* include some kind of library or header */ case 0: if (record->event.pressed) { SEND_STRING("#include <>"); return MACRO( T(LEFT), END); } break; case 1: if (record->event.pressed) { SEND_STRING("git pull"); return MACRO( T(ENT), END ); } break; case 2: if (record->event.pressed){ SEND_STRING("git push"); return MACRO( T(ENT), END ); } break; case 3: if (record->event.pressed){ layer_on(_CAPS); register_code(KC_CAPSLOCK); unregister_code(KC_CAPSLOCK); } break; case 4: if (record->event.pressed){ layer_off(_CAPS); register_code(KC_CAPSLOCK); unregister_code(KC_CAPSLOCK); } break; } return MACRO_NONE; };
/*---------------------------------------------------------------------------*/ static PT_THREAD(generate_404(struct httpd_state *s)) { #if BUF_USES_STACK char buf[BUF_SIZE]; #endif PSOCK_BEGIN(&s->sout); SEND_STRING(&s->sout, TOP); SEND_STRING(&s->sout, BODY); reset_buf(); add_div_home("404"); add("<div id=\"left_home\">"); add("404 : Page not found<br />"); add_div_footer(); add("</div></div>"); SEND_STRING(&s->sout, buf); reset_buf(); SEND_STRING(&s->sout, BOTTOM); PSOCK_END(&s->sout); }
static PT_THREAD(generate_sensors_prr(struct httpd_state *s)) { static int i; PSOCK_BEGIN(&s->sout); SEND_STRING(&s->sout, graph_top); add("['Sensor', 'IP', 'PRR Up', 'PRR Down'],"); for(i = 0; i < UIP_DS6_ROUTE_NB; i++) { if(node_info_table[i].isused && node_info_table[i].messages_sent > 0 && node_info_table[i].replies_sent > 0) { float prr_up = 100.0 * (node_info_table[i].messages_sent - node_info_table[i].up_messages_lost)/node_info_table[i].messages_sent; float prr_down = 100.0 * (node_info_table[i].replies_sent - node_info_table[i].down_messages_lost)/node_info_table[i].replies_sent; #if CETIC_NODE_CONFIG_HAS_NAME if (node_config_loaded) { node_config_t * node_config = node_config_find_by_ip(&node_info_table[i].ipaddr); add("[\"%s\",", node_config_get_name(node_config)); } else #endif { add("[\""); ipaddr_add(&node_info_table[i].ipaddr); add("\","); } add("\""); ipaddr_add(&node_info_table[i].ipaddr); add("\",%.1f,%.1f],", prr_up, prr_down); SEND_STRING(&s->sout, buf); reset_buf(); } } add("]);var options={vAxis:{minValue: 0,maxValue: 100},legend:{position: \"none\"}};"); SEND_STRING(&s->sout, buf); reset_buf(); SEND_STRING(&s->sout,graph_2_column); SEND_STRING(&s->sout,graph_bottom); PSOCK_END(&s->sout); }
/*---------------------------------------------------------------------------*/ static PT_THREAD(handle_command(struct httpd_state *s)) { PSOCK_BEGIN(&s->sout); SEND_STRING(&s->sout, TOP); if(s->filename[1] == '0') { /* Turn off leds */ leds_off(LEDS_ALL); SEND_STRING(&s->sout, "Turned off leds!"); } else if(s->filename[1] == '1') { /* Turn on leds */ leds_on(LEDS_ALL); SEND_STRING(&s->sout, "Turned on leds!"); } else { SEND_STRING(&s->sout, "Unknown command"); } SEND_STRING(&s->sout, BOTTOM); PSOCK_END(&s->sout); }
static PT_THREAD(send_buf(struct httpd_ws_state *s)) { memcpy(s->outbuf, buf, HTTPD_OUTBUF_SIZE); s->outbuf_pos = strlen(buf); buf_lock = 0; PSOCK_BEGIN(&s->sout); if(s->outbuf_pos > 0) { SEND_STRING(&s->sout, s->outbuf, s->outbuf_pos); s->outbuf_pos = 0; } PSOCK_END(&s->sout); }
bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { switch(keycode) { case GIT_ADD: SEND_STRING("git add ."SS_TAP(X_ENTER)); break; case GIT_COMMIT: SEND_STRING("git commit -m "SS_DOWN(X_LSHIFT)SS_TAP(X_QUOTE)SS_UP(X_LSHIFT)); break; case GIT_PUSH: SEND_STRING("git push"SS_TAP(X_ENTER)); break; case MUTE: SEND_STRING(SS_LGUI(SS_LSFT("M"))); break; case DEAFEN: SEND_STRING(SS_LGUI(SS_LSFT("D"))); break; return false; } } return true; };
/*---------------------------------------------------------------------------*/ static PT_THREAD(generate_routes(struct httpd_state *s)) { static int i; static uip_ds6_route_t *r; static uip_ds6_nbr_t *nbr; PSOCK_BEGIN(&s->sout); SEND_STRING(&s->sout, TOP); blen = 0; ADD("Neighbors<pre>"); for(nbr = nbr_table_head(ds6_neighbors); nbr != NULL; nbr = nbr_table_next(ds6_neighbors, nbr)) { ipaddr_add(&nbr->ipaddr;); ADD("\n"); if(blen > sizeof(buf) - 45) { SEND_STRING(&s->sout, buf); blen = 0; } }
static PT_THREAD(generate_sensors_traffic(struct httpd_state *s)) { static int i; PSOCK_BEGIN(&s->sout); SEND_STRING(&s->sout, graph_top); add("['Sensor', 'IP', 'Up', 'Down'],"); for(i = 0; i < UIP_DS6_ROUTE_NB; i++) { if(node_info_table[i].isused) { #if CETIC_NODE_CONFIG_HAS_NAME if (node_config_loaded) { node_config_t * node_config = node_config_find_by_ip(&node_info_table[i].ipaddr); add("[\"%s\",", node_config_get_name(node_config)); } else #endif { add("[\""); ipaddr_add(&node_info_table[i].ipaddr); add("\","); } add("\""); ipaddr_add(&node_info_table[i].ipaddr); add("\",%u,%u],", node_info_table[i].sent.size, node_info_table[i].recv.size); SEND_STRING(&s->sout, buf); reset_buf(); } } add("]);var options={vAxis:{minValue: 0},legend:{position: \"none\"}};"); SEND_STRING(&s->sout, buf); reset_buf(); SEND_STRING(&s->sout,graph_2_column); SEND_STRING(&s->sout,graph_bottom); PSOCK_END(&s->sout); }
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch (id) { case F_PASTE: if (record->event.pressed) { register_code(KC_LCTL); register_code(KC_V); unregister_code(KC_V); unregister_code(KC_LCTL); } break; case RGB_ANI: if (record->event.pressed) { rgb_timer = timer_read(); } else { if (timer_elapsed(rgb_timer) > 300) { rgblight_mode(1); } else { rgblight_step(); } } case CF_EPRM: if (record->event.pressed) { eeconfig_init(); } return false; break; case CF_VERS: if (record->event.pressed) { SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } return false; break; } return MACRO_NONE; };
static int serve_redir(ne_socket *sock, void *ud) { struct redir_args *args = ud; char buf[BUFSIZ]; CALL(discard_request(sock)); ne_snprintf(buf, BUFSIZ, "HTTP/1.0 %d Get Ye Away\r\n" "Content-Length: 0\r\n" "Location: %s\r\n\n", args->code, args->dest); SEND_STRING(sock, buf); return OK; }
bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef RGBLIGHT_ENABLE static uint32_t savedRgbMode; static uint16_t savedHue; static uint8_t savedSat; static uint8_t savedVal; if (keycode == KC_ESC) { if (record->event.pressed) { savedRgbMode = rgblight_get_mode(); savedHue = rgblight_get_hue(); savedSat = rgblight_get_sat(); savedVal = rgblight_get_val(); rgblight_mode(1); rgblight_setrgb(255, 0, 0); } else { rgblight_mode(savedRgbMode); rgblight_sethsv(savedHue, savedSat, savedVal); } } #endif // If console is enabled, it will print the matrix position and status of each key pressed #ifdef CONSOLE_ENABLE xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.row, record->event.key.col, record->event.pressed); #endif //CONSOLE_ENABLE switch (keycode) { case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader if (!record->event.pressed) { SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP #if defined(BOOTLOADER_HALFKAY) ":teensy" #elif defined(BOOTLOADER_CATERINA) ":avrdude" #else ":dfu" #endif SS_TAP(X_ENTER)); } return false; break; } return process_record_keymap(keycode, record); }
bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { // dynamically generate these. case EPRM: if (record->event.pressed) { eeconfig_init(); } return false; break; case VRSN: if (record->event.pressed) { SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } return false; break; } return true; }
static PT_THREAD(send_values(struct httpd_state *s)) { PSOCK_BEGIN(&s->sout); SEND_STRING(&s->sout, TOP); if(strncmp(s->filename, "/index", 6) == 0 || s->filename[1] == '\0') { /* Default page: show latest sensor values as text (does not require Internet connection to Google for charts). */ blen = 0; ADD("<h1>Websense</h1>\n"); #if CONTIKI_TARGET_SKY ADD("<h2>Current readings</h2>\n" "Light: %u<br>" "Temperature: %u° C", get_light(), get_temp()); #endif SEND_STRING(&s->sout, buf); } else if(s->filename[1] == '0') { /* Turn off leds */ leds_off(LEDS_ALL); SEND_STRING(&s->sout, "Turned off leds!"); } else if(s->filename[1] == '1') { /* Turn on leds */ leds_on(LEDS_ALL); SEND_STRING(&s->sout, "Turned on leds!"); } else { #if CONTIKI_TARGET_SKY if(s->filename[1] != 't') { generate_chart("Light", "Light", 0, 500, light1); SEND_STRING(&s->sout, buf); } if(s->filename[1] != 'l') { generate_chart("Temperature", "Celsius", 15, 50, temperature); SEND_STRING(&s->sout, buf); } #endif } SEND_STRING(&s->sout, BOTTOM); PSOCK_END(&s->sout); }
static PT_THREAD(send_values(struct httpd_state *s)) { PSOCK_BEGIN(&s->sout); SEND_STRING(&s->sout, TOP); if(strncmp(s->filename, "/index", 6) == 0 || s->filename[1] == '\0') { /* Default page: show latest sensor values as text (does not require Internet connection to Google for charts). */ blen = 0; float mybatt = get_mybatt(); float mytemp = get_mytemp(); ADD("<h1>Current readings</h1>\n" "Battery: %ld.%03d V<br>" "Temperature: %ld.%03d ° C", (long) mybatt, (unsigned) ((mybatt-floor(mybatt))*1000), (long) mytemp, (unsigned) ((mytemp-floor(mytemp))*1000)); SEND_STRING(&s->sout, buf); } else if(s->filename[1] == '0') { /* Turn off leds */ leds_off(LEDS_ALL); SEND_STRING(&s->sout, "Turned off leds!"); } else if(s->filename[1] == '1') { /* Turn on leds */ leds_on(LEDS_ALL); SEND_STRING(&s->sout, "Turned on leds!"); } else { if(s->filename[1] != 't') { generate_chart("Battery", "mV", 0, 4000, battery1); SEND_STRING(&s->sout, buf); } if(s->filename[1] != 'b') { generate_chart("Temperature", "Celsius", 0, 50, temperature); SEND_STRING(&s->sout, buf); } } SEND_STRING(&s->sout, BOTTOM); PSOCK_END(&s->sout); }
bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case CLEAR: if (record->event.pressed) { SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); } return false; case NUMPAD: if (record->event.pressed) { layer_invert(L_NUMPAD); bool num_lock = host_keyboard_leds() & 1<<USB_LED_NUM_LOCK; if (num_lock != (bool)IS_LAYER_ON(L_NUMPAD)) { tap_code(KC_NLCK); // Toggle Num Lock to match layer state. } } return false; default: return true; } }
/*---------------------------------------------------------------------------*/ static PT_THREAD(generate_routes(struct httpd_state *s)) { static int i; PSOCK_BEGIN(&s->sout); SEND_STRING(&s->sout, TOP); blen = 0; ADD("Neighbors<pre>"); for(i = 0; i < UIP_DS6_NBR_NB; i++) { if(uip_ds6_nbr_cache[i].isused) { ipaddr_add(&uip_ds6_nbr_cache[i].ipaddr); ADD("\n"); if(blen > sizeof(buf) - 45) { SEND_STRING(&s->sout, buf); blen = 0; } } } ADD("</pre>Routes<pre>"); SEND_STRING(&s->sout, buf); blen = 0; for(i = 0; i < UIP_DS6_ROUTE_NB; i++) { if(uip_ds6_routing_table[i].isused) { ipaddr_add(&uip_ds6_routing_table[i].ipaddr); ADD("/%u (via ", uip_ds6_routing_table[i].length); ipaddr_add(&uip_ds6_routing_table[i].nexthop); if(uip_ds6_routing_table[i].state.lifetime < 600) { ADD(") %lus\n", uip_ds6_routing_table[i].state.lifetime); } else { ADD(")\n"); } SEND_STRING(&s->sout, buf); blen = 0; } } ADD("</pre>"); //if(blen > 0) { SEND_STRING(&s->sout, buf); // blen = 0; //} SEND_STRING(&s->sout, BOTTOM); PSOCK_END(&s->sout); }
void dance_toggle (qk_tap_dance_state_t *state, void *user_data) { if (state->count >= 2) { println("Double tapped, switching layers"); if (layer_state_is(LED)) { layer_off(LED); } else { layer_on(LED); } } else { print("Single tapped: "); if (layer_state_is(LED)) { #ifdef RGBLIGHT_ENABLE if (!rgblight_config.enable) { rgblight_enable(); } rgblight_step(); #endif } else { println("Base layer, sending string"); SEND_STRING("This thing is BIG!!\n"); } } }
// Runs for each key down or up event. bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (keycode != TD(TAP_MACRO)) { // That key is processed by the macro_tapdance_fn. Not ignoring it here is // mostly a no-op except that it is recorded in the macros (and uses space). // We can't just return false when the key is a tap dance, because // process_record_user, is called before the tap dance processing (and // returning false would eat the tap dance). if (!process_record_dynamic_macro(keycode, record)) { return false; } if(record->event.pressed) { switch(keycode) { case MC_ARROW: SEND_STRING("=>"); return false; break; } } } return true; // Let QMK send the enter press/release events }
bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case VRSN: if (record->event.pressed) { SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } return false; break; case QWRTY: if (record->event.pressed) { set_single_persistent_default_layer(QWERTY); } return false; break; case CLMK: if (record->event.pressed) { set_single_persistent_default_layer(COLEMAK); } return false; break; case KC_CAPS: if (record->event.pressed) { // Turn LED1 On/Off for Caps Lock if (CAPS_LED) { ergodox_right_led_1_off(); CAPS_LED = false; } else { ergodox_right_led_1_on(); CAPS_LED = true; } } return true; break; } return true; };
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function switch(id) { case 0: if (record->event.pressed) { SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } break; case CTL_SFT_T: if (record->event.pressed) { return MACRO(D(LCTL), D(LSFT), T(T), END); } return MACRO(U(LCTL), U(LSFT), END); break; case CTL_SFT_G: if (record->event.pressed) { return MACRO(D(LCTL), D(LSFT), T(G), END); } return MACRO(U(LCTL), U(LSFT), END); break; case CTL_ALT_H: if (record->event.pressed) { return MACRO(D(LCTL), D(LALT), T(H), END); } return MACRO(U(LCTL), U(LALT), END); break; case CTL_SFT_R: if (record->event.pressed) { return MACRO(D(LCTL), D(LSFT), T(R), END); } return MACRO(U(LCTL), U(LSFT), END); break; } return MACRO_NONE; };
void CAD_finished (qk_tap_dance_state_t *state, void *user_data) { CADtap_state.state = cur_dance(state); switch (CADtap_state.state) { case SINGLE_TAP: //register_code(KC_SPC); SEND_STRING(SS_LGUI("l")); #ifdef BACKLIGHT_ENABLE backlight_level(3); #endif break; case SINGLE_HOLD: //register_code(KC_NO); //take a screenshot of a single window, open Paint and paste SEND_STRING(SS_LALT(SS_TAP(X_PSCREEN)) SS_LGUI("r")); _delay_ms(500); SEND_STRING("mspaint" SS_TAP(X_ENTER)); _delay_ms(700); SEND_STRING(SS_LCTRL("v")); break; //register this keycode when button is held case DOUBLE_TAP: //register_code(KC_ENT); SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_DELETE)))); #ifdef BACKLIGHT_ENABLE backlight_level(0); #endif break; //case DOUBLE_HOLD: register_code(KC_NO); break; //register this keycode when button is tapped and then held case DOUBLE_HOLD: reset_keyboard(); break; //register this keycode when button is tapped and then held case TRIPLE_TAP: SEND_STRING("*****@*****.**"); break; case TRIPLE_HOLD: set_single_persistent_default_layer(1); #ifdef AUDIO_ENABLE stop_all_notes(); PLAY_SONG(lyrup_song); #endif break; } }
static PT_THREAD(generate_statistics(struct httpd_state *s)) { PSOCK_BEGIN(&s->sout); add("<h2>IP</h2>"); #if UIP_STATISTICS add("<h3>IP</h3>"); SEND_STRING(&s->sout, buf); reset_buf(); PRINT_UIP_STAT( ip.recv, "Received packets" ); PRINT_UIP_STAT( ip.sent, "Sent packets" ); PRINT_UIP_STAT( ip.forwarded, "forwarded packets" ); PRINT_UIP_STAT( ip.drop, "Dropped packets" ); SEND_STRING(&s->sout, buf); reset_buf(); PRINT_UIP_STAT( ip.vhlerr, "Wrong IP version or header length" ); PRINT_UIP_STAT( ip.fragerr, "Dropped IP fragments" ); PRINT_UIP_STAT( ip.chkerr, "Checksum errors" ); PRINT_UIP_STAT( ip.protoerr, "Unsupported protocol" ); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); add("<h3>ICMP</h3>"); PRINT_UIP_STAT( icmp.recv, "Received packets" ); PRINT_UIP_STAT( icmp.sent, "Sent packets" ); PRINT_UIP_STAT( icmp.drop, "Dropped packets" ); PRINT_UIP_STAT( icmp.typeerr, "Unsupported type" ); PRINT_UIP_STAT( ip.chkerr, "Checksum errors" ); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); #if UIP_TCP add("<h3>TCP</h3>"); PRINT_UIP_STAT( tcp.recv, "Received packets" ); PRINT_UIP_STAT( tcp.sent, "Sent packets" ); PRINT_UIP_STAT( tcp.drop, "Dropped packets" ); PRINT_UIP_STAT( tcp.chkerr, "Checksum errors" ); SEND_STRING(&s->sout, buf); reset_buf(); PRINT_UIP_STAT( tcp.ackerr, "Ack errors" ); PRINT_UIP_STAT( tcp.rst, "Received RST" ); PRINT_UIP_STAT( tcp.rexmit, "retransmitted segments" ); PRINT_UIP_STAT( tcp.syndrop, "Dropped SYNs" ); PRINT_UIP_STAT( tcp.synrst, "SYNs for closed ports" ); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if UIP_UDP add("<h3>UDP</h3>"); PRINT_UIP_STAT( udp.recv, "Received packets" ); PRINT_UIP_STAT( udp.sent, "Sent packets" ); PRINT_UIP_STAT( udp.drop, "Dropped packets" ); PRINT_UIP_STAT( udp.chkerr, "Checksum errors" ); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); #endif add("<h3>NDP</h3>"); PRINT_UIP_STAT( nd6.recv, "Received packets" ); PRINT_UIP_STAT( nd6.sent, "Sent packets" ); PRINT_UIP_STAT( nd6.drop, "Dropped packets" ); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); #else add("<h3>IP statistics are deactivated</h3>"); #endif /* UIP_STATISTICS */ #if UIP_CONF_IPV6_RPL add("<h2>RPL</h2>"); #if RPL_CONF_STATS PRINT_RPL_STAT( mem_overflows, "Memory overflow"); PRINT_RPL_STAT( local_repairs, "Local repairs"); PRINT_RPL_STAT( global_repairs, "Global repairs"); SEND_STRING(&s->sout, buf); reset_buf(); PRINT_RPL_STAT( malformed_msgs, "Invalid packets"); PRINT_RPL_STAT( resets, "DIO timer resets"); PRINT_RPL_STAT( parent_switch, "Parent switch"); SEND_STRING(&s->sout, buf); reset_buf(); PRINT_RPL_STAT( forward_errors, "Forward errors"); PRINT_RPL_STAT( loop_errors, "Loop errors"); PRINT_RPL_STAT( loop_warnings, "Loop warnings"); PRINT_RPL_STAT( root_repairs, "Root repairs"); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); #else add("<h3>RPL statistics are deactivated</h3>"); #endif #endif /* UIP_CONF_IPV6_RPL */ #if CETIC_CSMA_STATS add("<h2>CSMA</h2>"); add("Allocated packets : %d<br />", csma_allocated_packets()); add("Allocated neighbors : %d<br />", csma_allocated_neighbors()); add("Packet overflow : %d<br />", packet_overflow); add("Neighbor overflow : %d<br />", neighbor_overflow); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); add("Send packets : %d<br />", csma_sent_packets); add("Received packets : %d<br />", csma_received_packets); add("Not acked packets : %d<br />", csma_noack); add("Collisions : %d<br />", csma_collisions); add("Retransmissions : %d<br />", csma_retransmissions); add("Dropped packets : %d<br />", csma_dropped); add("Deferred packets : %d<br />", csma_deferred); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if CETIC_6LBR_LLSEC_STATS if(nvm_data.security_layer == CETIC_6LBR_SECURITY_LAYER_NONCORESEC) { add("<h2>LLSEC</h2>"); add("Invalid level : %d<br />", noncoresec_invalid_level); add("Non authentic frames : %d<br />", noncoresec_nonauthentic); add("Reboot detected : %d<br />", noncoresec_reboot); add("Replayed frames : %d<br />", noncoresec_replayed); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); } #endif add("<h2>RDC</h2>"); #if CONTIKI_TARGET_NATIVE add("Callback count : %d<br />", callback_count); add("Ack timeout : %d<br />", native_rdc_ack_timeout); add("Parse error : %d<br />", native_rdc_parse_error); #endif add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); #if CONTIKI_TARGET_NATIVE add("<h2>SLIP</h2>"); add("Messages sent : %d<br />", slip_message_sent); add("Messages received : %d<br />", slip_message_received); add("Bytes sent : %d<br />", slip_sent); add("Bytes received : %d<br />", slip_received); add("<br />"); #endif SEND_STRING(&s->sout, buf); reset_buf(); PSOCK_END(&s->sout); }
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { case M_ALT_HASH: return MACRO_TAP_SHFT_KEY_HOLD_MOD(record, 3, LALT); case M_GR_DASH: { const macro_t* macro = MACRO_TAP_HOLD_LAYER(record, MACRO(T(MINS)), _GR); update_tri_layer(_NUM, _GR, _ADJ); return macro; } case M_SYM_LPRN: return MACRO_TAP_SHFT_KEY_HOLD_LAYER(record, 9, _SYM); case M_NAV_UNDS: return MACRO_TAP_SHFT_KEY_HOLD_LAYER(record, MINS, _NAV); case M_NUM_RPRN: { const macro_t* macro = MACRO_TAP_SHFT_KEY_HOLD_LAYER(record, 0, _NUM); update_tri_layer(_NUM, _GR, _ADJ); return macro; } case M_CTRL_DLR: return MACRO_TAP_SHFT_KEY_HOLD_MOD(record, 4, LCTL); case M_LCBR_ENT: return MACRODOWN(I(10), D(LSFT), T(LBRC), U(LSFT), T(ENT), END); case M_PLOVER: if (record->event.pressed) { layer_and(0); layer_on(_PLOVER); default_layer_set(_PLOVER); // Starts plover return MACRO(I(10), D(E), D(R), D(F), D(V), D(I), D(K), U(E), U(R), U(F), U(V), U(I), U(K), END); } break; case M_EXT_PLV: if (!record->event.pressed) { layer_off(_PLOVER); default_layer_set(_COLEMAK); //Pauses plover return MACRO(I(10), D(E), D(R), D(F), D(V), D(Y), D(U), U(E), U(R), U(F), U(V), U(Y), U(U), END); } break; case M_WINDOWS: set_unicode_input_mode(UC_WIN); break; case M_LINUX: set_unicode_input_mode(UC_LNX); break; case M_OSX: set_unicode_input_mode(UC_OSX); break; case M_FUNCTION: if (record->event.pressed) { SEND_STRING("function"); } break; case M_THEN: if (record->event.pressed) { SEND_STRING("then"); } break; case M_CATCH: if (record->event.pressed) { SEND_STRING("catch"); } break; } return MACRO_NONE; };
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function switch(id) { case VERSION: if (record->event.pressed) { SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } break; case EEPROM: if (record->event.pressed) { // For resetting EEPROM eeconfig_init(); } break; case DLEFT: if (record->event.pressed) { // Windows move desktop left return MACRO(D(LCTL), D(LGUI), T(LEFT), U(LGUI), U(LCTL), END); } break; case DRIGHT: if (record->event.pressed) { // Windows move desktop right return MACRO(D(LCTL), D(LGUI), T(RIGHT), U(LGUI), U(LCTL), END); } break; case PSCREEN_APP: if (record->event.pressed) { return MACRO(D(LALT), T(PSCR), U(LALT), END); } break; case LSFT_TAB: if (record->event.pressed) { return MACRO(D(LSFT), T(TAB), U(LSFT), END); } case REFACTOR: if (record->event.pressed) { // VS Refactor CTRL+R, R return MACRO(D(LCTL), T(R), U(LCTL), T(R), END); } break; case TEST: if (record->event.pressed) { // VS Run Tests CTRL+R, T return MACRO(D(LCTL), T(R), U(LCTL), T(T), END); } break; case DEBUG_TEST: if (record->event.pressed) { // VS Debug Tests CTRL+R, CTRL+T return MACRO(D(LCTL), T(R), T(T), U(LCTL), END); } break; case FORMAT: if (record->event.pressed) { // VS Format Document, CTRL+K, CTRL+D return MACRO(D(LCTL), T(K), T(D), U(LCTL), END); } break; case BUILD: if (record->event.pressed) { // VS Build. Sends CTRL+SHFT+B return MACRO(D(LCTL), D(LSFT), T(B), U(LSFT), U(LCTL), END); } break; case GO_TO_IMPL: if (record->event.pressed) { // VS Go To Implementation. Sends CTRL+F12 return MACRO(D(LCTL), T(F12), U(LCTL), END); } break; case FIND_ALL_REF: if (record->event.pressed) { // VS Find All References. Sends CTRL+K, R return MACRO(D(LCTL), T(K), U(LCTL), T(R), END); } break; case REMOVE_SORT_USINGS: if (record->event.pressed) { return MACRO(D(LCTL), T(R), T(G), U(LCTL), END); } break; case KEEPASS_OPEN: if (record->event.pressed) { // Keepass open application return MACRO(D(LCTL), D(LALT), T(K), U(LALT), U(LCTL), END); } break; case KEEPASS_TYPE: if (record->event.pressed) { // Keepass autotype return MACRO(D(LCTL), D(LALT), T(A), U(LALT), U(LCTL), END); } break; } return MACRO_NONE; };
static PT_THREAD(generate_config(struct httpd_state *s)) { PSOCK_BEGIN(&s->sout); add("<form action=\"config\" method=\"get\">"); add("<h2>WSN Network</h2>"); #if !CETIC_6LBR_ONE_ITF add("<h3>802.15.4 configuration</h3>"); INPUT_INT("channel", channel, "Channel"); #if !CONTIKI_TARGET_NATIVE INPUT_HEX("panid", pan_id, "PAN ID"); #endif SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h3>802.15.4 Security</h3>"); add("Link-layer security : <select name=\"llsec\">"); SELECT_OPTION(security_layer, CETIC_6LBR_SECURITY_LAYER_NONE, "None"); SELECT_OPTION(security_layer, CETIC_6LBR_SECURITY_LAYER_NONCORESEC, "Pre-shared Key"); add("</select><br />"); SEND_STRING(&s->sout, buf); reset_buf(); add("Link-layer security level : <select name=\"llsec_level\">"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_NO_SECURITY, "No Security"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CBC_MAC_32, "AES-CBC-MAC-32"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CBC_MAC_64, "AES-CBC-MAC-64"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CBC_MAC_128, "AES-CBC-MAC-128"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CTR, "AES-CTR"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CCM_32 , "AES-CCM-32"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CCM_64 , "AES-CCM-64"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CCM_128, "AES-CCM-128"); add("</select><br />"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_KEY("psk", noncoresec_key, 16, "Pre-shared key"); INPUT_FLAG_CB("sec_dis_ar", noncoresec_flags, CETIC_6LBR_NONCORESEC_DISABLE_ANTIREPLAY, "Disable anti-replay"); INPUT_FLAG_CB("sec_ar_wa", noncoresec_flags, CETIC_6LBR_NONCORESEC_ANTIREPLAY_WORKAROUND, "Enable anti-replay workaround"); SEND_STRING(&s->sout, buf); reset_buf(); #if CETIC_6LBR_MAC_WRAPPER add("<br /><h3>MAC</h3>"); add("MAC Layer : <select name=\"mac\">"); SELECT_OPTION(mac_layer, CETIC_6LBR_MAC_LAYER_NONE, "None"); SELECT_OPTION(mac_layer, CETIC_6LBR_MAC_LAYER_CSMA, "CSMA"); add("</select><br />"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #endif add("<br /><h3>IP configuration</h3>"); #if CETIC_6LBR_SMARTBRIDGE || CETIC_6LBR_TRANSPARENTBRIDGE INPUT_FLAG_CB("wait_ra", mode, CETIC_MODE_WAIT_RA_MASK, "Network autoconfiguration"); INPUT_IPADDR("wsn_pre", wsn_net_prefix, "Prefix"); INPUT_INT("wsn_pre_len", wsn_net_prefix_len, "Prefix length"); INPUT_IPADDR("eth_dft", eth_dft_router, "Default router"); SEND_STRING(&s->sout, buf); reset_buf(); #elif CETIC_6LBR_ROUTER INPUT_IPADDR("wsn_pre", wsn_net_prefix, "Prefix"); INPUT_INT("wsn_pre_len", wsn_net_prefix_len, "Prefix length"); #endif INPUT_CONTEXT("wsn_context_0", wsn_6lowpan_context_0, "6LoPWAN context 0"); INPUT_FLAG_CB("wsn_auto", mode, CETIC_MODE_WSN_AUTOCONF, "Address autoconfiguration"); INPUT_IPADDR("wsn_addr", wsn_ip_addr, "Manual address"); SEND_STRING(&s->sout, buf); reset_buf(); add("<h3>Extra configuration</h3>"); #if CETIC_6LBR_SMARTBRIDGE INPUT_FLAG_CB("smart_multi", mode, CETIC_MODE_SMART_MULTI_BR, "Multi-BR support"); #endif INPUT_IPADDR("dns", dns_server, "DNS server"); #if CETIC_NODE_CONFIG INPUT_FLAG_CB("nc_filter", global_flags, CETIC_GLOBAL_FILTER_NODES, "Filter nodes"); #endif SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h2>Eth Network</h2>"); #if CETIC_6LBR_ROUTER add("<h3>IP configuration</h3>"); INPUT_IPADDR("eth_pre", eth_net_prefix, "Prefix"); INPUT_INT("eth_pre_len", eth_net_prefix_len, "Prefix length"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_FLAG_CB("eth_auto", mode, CETIC_MODE_ETH_AUTOCONF, "Address autoconfiguration" ); INPUT_IPADDR("eth_addr", eth_ip_addr, "Manual address"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_IPADDR("eth_dft", eth_dft_router, "Peer router"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if CETIC_6LBR_IP64 add("<br /><h3>IP64</h3>"); INPUT_FLAG_CB("ip64", global_flags, CETIC_GLOBAL_IP64, "IP64" ); INPUT_FLAG_CB("ip64_dhcp", eth_ip64_flags, CETIC_6LBR_IP64_DHCP, "DHCP" ); INPUT_IP4ADDR("ip64_addr", eth_ip64_addr, "Address"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_IP4ADDR("ip64_netmask", eth_ip64_netmask, "Netmask"); INPUT_IP4ADDR("ip64_gateway", eth_ip64_gateway, "Gateway"); INPUT_FLAG_CB("ip64_6052", eth_ip64_flags, CETIC_6LBR_IP64_RFC6052_PREFIX, "RFC 6052 prefix" ); INPUT_FLAG_CB("ip64_port_map", eth_ip64_flags, CETIC_6LBR_IP64_SPECIAL_PORTS, "Static port mapping" ); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if RESOLV_CONF_SUPPORTS_MDNS add("<br /><h3>MDNS</h3>"); INPUT_FLAG_CB("mdns", global_flags, CETIC_GLOBAL_MDNS, "MDNS publishing" ); INPUT_STRING("hostname", dns_host_name, NVM_DATA_DNS_HOST_NAME_SIZE, "Hostname"); #if RESOLV_CONF_SUPPORTS_DNS_SD INPUT_FLAG_CB("dns_sd", dns_flags, CETIC_6LBR_DNS_DNS_SD, "DNS-SD publishing" ); #endif SEND_STRING(&s->sout, buf); reset_buf(); #endif #if CETIC_6LBR_ROUTER add("<br /><h2>RA Daemon</h2>"); INPUT_FLAG("ra_daemon", mode, CETIC_MODE_ROUTER_RA_DAEMON, "RA Daemon", "active", "inactive"); INPUT_INT("ra_lifetime", ra_router_lifetime, "Router lifetime"); SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h3>RA</h3>"); INPUT_INT( "ra_max_interval", ra_max_interval, "Max interval"); INPUT_INT( "ra_min_interval", ra_min_interval, "Min interval"); INPUT_INT( "ra_min_delay", ra_min_delay, "Min delay"); SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h3>RA Prefix</h3>"); INPUT_FLAG_CB( "ra_pio", ra_prefix_flags, CETIC_6LBR_MODE_SEND_PIO, "Send Prefix Information"); INPUT_FLAG_CB( "ra_prefix_o", ra_prefix_flags, UIP_ND6_RA_FLAG_ONLINK, "Prefix on-link"); INPUT_FLAG_CB( "ra_prefix_a", ra_prefix_flags, UIP_ND6_RA_FLAG_AUTONOMOUS, "Allow autoconfiguration"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_INT( "ra_prefix_vtime", ra_prefix_vtime, "Prefix valid time"); INPUT_INT( "ra_prefix_ptime", ra_prefix_ptime, "Prefix preferred time"); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h3>RA Route Information</h3>"); INPUT_FLAG_CB( "ra_rio_en", ra_rio_flags, CETIC_6LBR_MODE_SEND_RIO, "Include RIO"); INPUT_INT( "ra_rio_lifetime", ra_rio_lifetime, "Route lifetime"); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if UIP_CONF_IPV6_RPL && (CETIC_6LBR_ROUTER || CETIC_6LBR_SMARTBRIDGE) add("<br /><h2>RPL Configuration</h2>"); INPUT_INT( "rpl_instance_id", rpl_instance_id, "Instance ID"); INPUT_FLAG_CB( "dodag_manual", rpl_config, CETIC_6LBR_MODE_MANUAL_DODAG, "Manual DODAG ID"); INPUT_IPADDR("dodag_id", rpl_dodag_id, "DODAG ID"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_FLAG_CB( "dodag_global", rpl_config, CETIC_6LBR_MODE_GLOBAL_DODAG, "Global DODAG ID"); INPUT_INT( "rpl_preference", rpl_preference, "Preference"); INPUT_INT( "rpl_dio_intdoubl", rpl_dio_intdoubl, "DIO interval doubling"); INPUT_INT( "rpl_dio_intmin", rpl_dio_intmin, "DIO min interval"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_INT( "rpl_dio_redundancy", rpl_dio_redundancy, "DIO redundancy"); INPUT_INT( "rpl_min_hoprankinc", rpl_min_hoprankinc, "Min rank increment"); INPUT_INT( "rpl_max_rankinc", rpl_max_rankinc, "Max rank increase"); INPUT_INT( "rpl_default_lifetime", rpl_default_lifetime, "Route lifetime"); INPUT_INT( "rpl_lifetime_unit", rpl_lifetime_unit, "Route lifetime unit"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if CETIC_6LBR_ROUTER add("<br /><h2>Packet filtering</h2>"); INPUT_FLAG("rewrite", mode, CETIC_MODE_REWRITE_ADDR_MASK, "Address rewrite", "enabled", "disabled"); #endif if ((nvm_data.global_flags & CETIC_GLOBAL_DISABLE_CONFIG) == 0) { add("<br /><input type=\"submit\" value=\"Submit\"/></form>"); } SEND_STRING(&s->sout, buf); reset_buf(); PSOCK_END(&s->sout); }