|
|
@ -26,29 +26,33 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
|
|
* both regular threads and ISRs, unlocked (during resume-from-sleep). |
|
|
|
* In particular, I2C functions (interrupt-driven) should NOT be called from here. |
|
|
|
*/ |
|
|
|
void led_set(uint8_t usb_led) { |
|
|
|
msg_t msg; |
|
|
|
|
|
|
|
if (usb_led & (1<<USB_LED_NUM_LOCK)) { |
|
|
|
chSysUnconditionalLock(); |
|
|
|
msg=(1 << 8) | TOGGLE_NUM_LOCK; |
|
|
|
chMBPostI(&led_mailbox, msg); |
|
|
|
chSysUnconditionalUnlock(); |
|
|
|
} else { |
|
|
|
chSysUnconditionalLock(); |
|
|
|
msg=(0 << 8) | TOGGLE_NUM_LOCK; |
|
|
|
chMBPostI(&led_mailbox, msg); |
|
|
|
chSysUnconditionalUnlock(); |
|
|
|
} |
|
|
|
if (usb_led & (1<<USB_LED_CAPS_LOCK)) { |
|
|
|
chSysUnconditionalLock(); |
|
|
|
msg=(1 << 8) | TOGGLE_CAPS_LOCK; |
|
|
|
chMBPostI(&led_mailbox, msg); |
|
|
|
chSysUnconditionalUnlock(); |
|
|
|
} else { |
|
|
|
chSysUnconditionalLock(); |
|
|
|
msg=(0 << 8) | TOGGLE_CAPS_LOCK; |
|
|
|
chMBPostI(&led_mailbox, msg); |
|
|
|
chSysUnconditionalUnlock(); |
|
|
|
bool led_update_kb(led_t led_state) { |
|
|
|
bool res = led_update_user(led_state); |
|
|
|
if (res) { |
|
|
|
msg_t msg; |
|
|
|
|
|
|
|
if (led_state.num_lock) { |
|
|
|
chSysUnconditionalLock(); |
|
|
|
msg=(1 << 8) | TOGGLE_NUM_LOCK; |
|
|
|
chMBPostI(&led_mailbox, msg); |
|
|
|
chSysUnconditionalUnlock(); |
|
|
|
} else { |
|
|
|
chSysUnconditionalLock(); |
|
|
|
msg=(0 << 8) | TOGGLE_NUM_LOCK; |
|
|
|
chMBPostI(&led_mailbox, msg); |
|
|
|
chSysUnconditionalUnlock(); |
|
|
|
} |
|
|
|
if (led_state.caps_lock) { |
|
|
|
chSysUnconditionalLock(); |
|
|
|
msg=(1 << 8) | TOGGLE_CAPS_LOCK; |
|
|
|
chMBPostI(&led_mailbox, msg); |
|
|
|
chSysUnconditionalUnlock(); |
|
|
|
} else { |
|
|
|
chSysUnconditionalLock(); |
|
|
|
msg=(0 << 8) | TOGGLE_CAPS_LOCK; |
|
|
|
chMBPostI(&led_mailbox, msg); |
|
|
|
chSysUnconditionalUnlock(); |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |