|
|
@@ -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;
|
|
|
}
|