void End() { if(Logged_in==1) Detach(); // clear the lists... clear_mods(); clear_admin(); // close the socket close(sock); }
void End() { if(Logged_in==1) Detach(); // Clean up global vars, free in-use pointers // clear the lists... clear_mods(); clear_admin(); // close the socket closesocket(sock); }
void action_macro_play(const macro_t *macro_p) { macro_t macro = END; uint8_t interval = 0; uint8_t mod_storage = 0; if (!macro_p) return; while (true) { switch (MACRO_READ()) { case KEY_DOWN: MACRO_READ(); dprintf("KEY_DOWN(%02X)\n", macro); if (IS_MOD(macro)) { add_weak_mods(MOD_BIT(macro)); send_keyboard_report(); } else { register_code(macro); } break; case KEY_UP: MACRO_READ(); dprintf("KEY_UP(%02X)\n", macro); if (IS_MOD(macro)) { del_weak_mods(MOD_BIT(macro)); send_keyboard_report(); } else { unregister_code(macro); } break; case WAIT: MACRO_READ(); dprintf("WAIT(%u)\n", macro); { uint8_t ms = macro; while (ms--) wait_ms(1); } break; case INTERVAL: interval = MACRO_READ(); dprintf("INTERVAL(%u)\n", interval); break; case MOD_STORE: mod_storage = get_mods(); break; case MOD_RESTORE: set_mods(mod_storage); send_keyboard_report(); break; case MOD_CLEAR: clear_mods(); send_keyboard_report(); break; case 0x04 ... 0x73: dprintf("DOWN(%02X)\n", macro); register_code(macro); break; case 0x84 ... 0xF3: dprintf("UP(%02X)\n", macro); unregister_code(macro&0x7F); break; case END: default: return; } // interval { uint8_t ms = interval; while (ms--) wait_ms(1); } } }