void ui_process(uint16_t framenumber) { bool b_btn_state; static bool btn_left_last_state = HID_MOUSE_BTN_UP; static bool btn_right_last_state = HID_MOUSE_BTN_UP; static bool btn_middle_last_state = HID_MOUSE_BTN_UP; static uint8_t cpt_sof = 0; if ((framenumber % 1000) == 0) { LED_On(LED1_GPIO); } if ((framenumber % 1000) == 500) { LED_Off(LED1_GPIO); } // Scan process running each 2ms cpt_sof++; if (2 > cpt_sof) { return; } cpt_sof = 0; // Scan buttons on switch 7 (left), 6 (middle), 4 (right) b_btn_state = (gpio_pin_is_low(GPIO_PUSH_BUTTON_7)) ? HID_MOUSE_BTN_DOWN : HID_MOUSE_BTN_UP; if (b_btn_state != btn_left_last_state) { udi_hid_mouse_btnleft(b_btn_state); btn_left_last_state = b_btn_state; } b_btn_state = (gpio_pin_is_low(GPIO_PUSH_BUTTON_6)) ? HID_MOUSE_BTN_DOWN : HID_MOUSE_BTN_UP; if (b_btn_state != btn_middle_last_state) { udi_hid_mouse_btnmiddle(b_btn_state); btn_middle_last_state = b_btn_state; } b_btn_state = (gpio_pin_is_low(GPIO_PUSH_BUTTON_4)) ? HID_MOUSE_BTN_DOWN : HID_MOUSE_BTN_UP; if (b_btn_state != btn_right_last_state) { udi_hid_mouse_btnright(b_btn_state); btn_right_last_state = b_btn_state; } // Scan move on switch 0 (right), 1 (left), 2 (down), 3 (up) if (gpio_pin_is_low(GPIO_PUSH_BUTTON_0)) udi_hid_mouse_moveX(MOUSE_MOVE_RANGE); if (gpio_pin_is_low(GPIO_PUSH_BUTTON_1)) udi_hid_mouse_moveX(-MOUSE_MOVE_RANGE); if (gpio_pin_is_low(GPIO_PUSH_BUTTON_2)) udi_hid_mouse_moveY(MOUSE_MOVE_RANGE); if (gpio_pin_is_low(GPIO_PUSH_BUTTON_3)) udi_hid_mouse_moveY(-MOUSE_MOVE_RANGE); }
/** * @brief Notify the application when ZID report data is received from the paired device. * * @param PairingRef Pairing reference. * @param num_report_records number of Report records. * @param *zid_report_data_record_ptr pointer to the report data received. * @param RxLinkQuality LQI value of the report data frame. * @param RxFlags Receive flags. */ static void zid_report_data_indication(uint8_t PairingRef, uint8_t num_report_records, zid_report_data_record_t *zid_report_data_record_ptr, uint8_t RxLinkQuality, uint8_t RxFlags) { for(uint8_t i=0;i<num_report_records;i++) { switch(zid_report_data_record_ptr->report_desc_identifier) { case MOUSE: { mouse_desc_t *mouse_desc; mouse_desc = (mouse_desc_t *)zid_report_data_record_ptr->report_data; udi_hid_mouse_btnleft(mouse_desc->button0); udi_hid_mouse_btnright(mouse_desc->button1); if((0x80==(mouse_desc->button2))) { udi_hid_mouse_moveScroll((mouse_desc->y_coordinate)); mouse_desc->y_coordinate = 0; } else if(0x01==(mouse_desc->button2)) { udi_hid_mouse_btnmiddle(0x01); } udi_hid_mouse_moveX((mouse_desc->x_coordinate)); udi_hid_mouse_moveY((mouse_desc->y_coordinate)); break; } case KEYBOARD: { if(zid_report_data_record_ptr->report_type == INPUT) { keyboard_input_desc_t *keyboard_input_desc; keyboard_input_desc = (keyboard_input_desc_t *)zid_report_data_record_ptr->report_data; if(main_b_kbd_enable) { if(keyboard_input_desc->modifier_keys) { udi_hid_kbd_modifier_down(keyboard_input_desc->modifier_keys); udi_hid_kbd_modifier_up(keyboard_input_desc->modifier_keys); } for(uint8_t j=0;j<4;j++) { if(keyboard_input_desc->key_code[j]) { udi_hid_kbd_down(keyboard_input_desc->key_code[j]); udi_hid_kbd_up(keyboard_input_desc->key_code[j]); } } uint16_t u_value; u_value= convert_byte_array_to_16_bit(&(keyboard_input_desc->key_code[4])); if(u_value) { udi_hid_mkbd_modifier_down(u_value); udi_hid_mkbd_modifier_up(u_value); } } } else { /* Application can implement for other report types.*/ } break; } default: break; } zid_report_data_record_ptr++; } RxLinkQuality = RxLinkQuality; RxFlags = RxFlags; }