Changes in uspace/drv/bus/usb/usbhid/kbd/kbdrepeat.c [5f6e25e:2d1ba51] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbhid/kbd/kbdrepeat.c
r5f6e25e r2d1ba51 45 45 #include "kbddev.h" 46 46 47 48 /** Delay between auto-repeat state checks when no key is being repeated. */49 static unsigned int CHECK_DELAY = 10000;50 51 /*----------------------------------------------------------------------------*/52 47 /** 53 48 * Main loop handling the auto-repeat of keys. … … 60 55 * If the same key is still pressed, it uses the delay between repeats stored 61 56 * in the keyboard structure to wait until the key should be repeated. 62 * 57 * 63 58 * If the currently repeated key is not pressed any more ( 64 * usb_kbd_repeat_stop() was called), it stops repeating it and starts 59 * usb_kbd_repeat_stop() was called), it stops repeating it and starts 65 60 * checking again. 66 61 * 67 62 * @note For accessing the keyboard device auto-repeat information a fibril 68 63 * mutex (repeat_mtx) from the @a kbd structure is used. 69 * 64 * 70 65 * @param kbd Keyboard device structure. 71 66 */ … … 73 68 { 74 69 unsigned int delay = 0; 75 70 76 71 usb_log_debug("Starting autorepeat loop.\n"); 77 72 78 73 while (true) { 79 / / check if the kbd structure is usable74 /* Check if the kbd structure is usable. */ 80 75 if (!usb_kbd_is_initialized(kbd)) { 81 if (usb_kbd_is_ready_to_destroy(kbd)) { 82 usb_kbd_destroy(kbd); 83 } 76 usb_log_warning("kbd not ready, exiting autorepeat.\n"); 84 77 return; 85 78 } 86 87 fibril_mutex_lock( kbd->repeat_mtx);79 80 fibril_mutex_lock(&kbd->repeat_mtx); 88 81 89 82 if (kbd->repeat.key_new > 0) { 90 83 if (kbd->repeat.key_new == kbd->repeat.key_repeated) { 91 usb_log_debug2("Repeating key: %u.\n", 84 usb_log_debug2("Repeating key: %u.\n", 92 85 kbd->repeat.key_repeated); 93 // ugly hack with the NULL 94 usb_kbd_push_ev(NULL, kbd, KEY_PRESS, 86 usb_kbd_push_ev(kbd, KEY_PRESS, 95 87 kbd->repeat.key_repeated); 96 88 delay = kbd->repeat.delay_between; … … 109 101 delay = CHECK_DELAY; 110 102 } 111 fibril_mutex_unlock(kbd->repeat_mtx); 112 103 fibril_mutex_unlock(&kbd->repeat_mtx); 113 104 async_usleep(delay); 114 105 } 115 106 } 116 117 107 /*----------------------------------------------------------------------------*/ 118 108 /** … … 120 110 * 121 111 * Starts the loop for checking changes in auto-repeat. 122 * 112 * 123 113 * @param arg User-specified argument. Expects pointer to the keyboard device 124 114 * structure representing the keyboard. … … 130 120 { 131 121 usb_log_debug("Autorepeat fibril spawned.\n"); 132 122 133 123 if (arg == NULL) { 134 124 usb_log_error("No device!\n"); 135 125 return EINVAL; 136 126 } 137 138 usb_kbd_t *kbd = (usb_kbd_t *)arg;139 127 128 usb_kbd_t *kbd = arg; 129 140 130 usb_kbd_repeat_loop(kbd); 141 131 142 132 return EOK; 143 133 } 144 145 134 /*----------------------------------------------------------------------------*/ 146 135 /** … … 156 145 void usb_kbd_repeat_start(usb_kbd_t *kbd, unsigned int key) 157 146 { 158 fibril_mutex_lock( kbd->repeat_mtx);147 fibril_mutex_lock(&kbd->repeat_mtx); 159 148 kbd->repeat.key_new = key; 160 fibril_mutex_unlock( kbd->repeat_mtx);149 fibril_mutex_unlock(&kbd->repeat_mtx); 161 150 } 162 163 151 /*----------------------------------------------------------------------------*/ 164 152 /** … … 166 154 * 167 155 * @note Only one key is repeated at any time, but this function may be called 168 * even with key that is not currently repeated (in that case nothing 156 * even with key that is not currently repeated (in that case nothing 169 157 * happens). 170 158 * … … 174 162 void usb_kbd_repeat_stop(usb_kbd_t *kbd, unsigned int key) 175 163 { 176 fibril_mutex_lock( kbd->repeat_mtx);164 fibril_mutex_lock(&kbd->repeat_mtx); 177 165 if (key == kbd->repeat.key_new) { 178 166 kbd->repeat.key_new = 0; 179 167 } 180 fibril_mutex_unlock( kbd->repeat_mtx);168 fibril_mutex_unlock(&kbd->repeat_mtx); 181 169 } 182 183 170 /** 184 171 * @}
Note:
See TracChangeset
for help on using the changeset viewer.