usb_status_t UsbGenericHidCallback(class_handle_t handle, uint32_t event, void *param) { usb_status_t error = kStatus_USB_Error; switch (event) { case kUSB_DeviceHidEventSendResponse: break; case kUSB_DeviceHidEventRecvResponse: UsbProtocolHandler(); USB_DeviceHidSend(UsbCompositeDevice.genericHidHandle, USB_GENERIC_HID_ENDPOINT_IN_INDEX, GenericHidOutBuffer, USB_GENERIC_HID_OUT_BUFFER_LENGTH); return UsbReceiveData(); break; case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: case kUSB_DeviceHidEventRequestReportBuffer: error = kStatus_USB_InvalidRequest; break; case kUSB_DeviceHidEventGetIdle: case kUSB_DeviceHidEventGetProtocol: case kUSB_DeviceHidEventSetIdle: case kUSB_DeviceHidEventSetProtocol: break; default: break; } return error; }
static usb_status_t USB_DeviceHidKeyboardAction(void) { static int x = 0U; enum { DOWN, UP }; static uint8_t dir = DOWN; s_UsbDeviceHidKeyboard.buffer[2] = 0x00U; switch (dir) { case DOWN: x++; if (x > 200U) { dir++; s_UsbDeviceHidKeyboard.buffer[2] = KEY_PAGEUP; } break; case UP: x--; if (x < 1U) { dir = DOWN; s_UsbDeviceHidKeyboard.buffer[2] = KEY_PAGEDOWN; } break; default: break; } return USB_DeviceHidSend(s_UsbDeviceComposite->hidKeyboardHandle, USB_HID_KEYBOARD_ENDPOINT_IN, s_UsbDeviceHidKeyboard.buffer, USB_HID_KEYBOARD_REPORT_LENGTH); }
/* Update mouse pointer location. Draw a rectangular rotation*/ static usb_status_t USB_DeviceHidMouseAction(void) { static int8_t x = 0U; static int8_t y = 0U; enum { RIGHT, DOWN, LEFT, UP }; static uint8_t dir = RIGHT; switch (dir) { case RIGHT: /* Move right. Increase X value. */ g_UsbDeviceHidMouse.buffer[1] = 2U; g_UsbDeviceHidMouse.buffer[2] = 0U; x++; if (x > 99U) { dir++; } break; case DOWN: /* Move down. Increase Y value. */ g_UsbDeviceHidMouse.buffer[1] = 0U; g_UsbDeviceHidMouse.buffer[2] = 2U; y++; if (y > 99U) { dir++; } break; case LEFT: /* Move left. Discrease X value. */ g_UsbDeviceHidMouse.buffer[1] = (uint8_t)(-2); g_UsbDeviceHidMouse.buffer[2] = 0U; x--; if (x < 2U) { dir++; } break; case UP: /* Move up. Discrease Y value. */ g_UsbDeviceHidMouse.buffer[1] = 0U; g_UsbDeviceHidMouse.buffer[2] = (uint8_t)(-2); y--; if (y < 2U) { dir = RIGHT; } break; default: break; } /* Send mouse report to the host */ return USB_DeviceHidSend(g_UsbDeviceHidMouse.hidHandle, USB_HID_MOUSE_ENDPOINT_IN, g_UsbDeviceHidMouse.buffer, USB_HID_MOUSE_REPORT_LENGTH); }
/* Update mouse pointer location. */ static usb_status_t USB_DeviceHidMouseAction(void) { if(Ax > SENSITIVITY) { if(xDir==1) { g_UsbDeviceHidMouse.buffer[1] = 2U; }else{ g_UsbDeviceHidMouse.buffer[1] = (uint8_t)-2U; } }else{ g_UsbDeviceHidMouse.buffer[1] = 0; } if(Ay > SENSITIVITY) { if(yDir==1) { g_UsbDeviceHidMouse.buffer[2] = 2U; }else{ g_UsbDeviceHidMouse.buffer[2] = (uint8_t)-2U; } }else{ g_UsbDeviceHidMouse.buffer[2] = 0; } TSI_EnableHardwareTriggerScan(TSI0, false); /* Enable software trigger scan */ TSI_DisableInterrupts(TSI0, kTSI_EndOfScanInterruptEnable); TSI_ClearStatusFlags(TSI0, kTSI_EndOfScanFlag); TSI_SetMeasuredChannelNumber(TSI0, BOARD_TSI_ELECTRODE_2); TSI_StartSoftwareTrigger(TSI0); while (!(TSI_GetStatusFlags(TSI0) & kTSI_EndOfScanFlag)) { } /* Left mouse button */ if(TSI_GetCounter(TSI0) > TOUCH_THRESHHOLD){ g_UsbDeviceHidMouse.buffer[0] |= 1U; }else{ g_UsbDeviceHidMouse.buffer[0] &= ~1U; } TSI_EnableHardwareTriggerScan(TSI0, false); /* Enable software trigger scan */ TSI_DisableInterrupts(TSI0, kTSI_EndOfScanInterruptEnable); TSI_ClearStatusFlags(TSI0, kTSI_EndOfScanFlag); TSI_SetMeasuredChannelNumber(TSI0, BOARD_TSI_ELECTRODE_1); TSI_StartSoftwareTrigger(TSI0); while (!(TSI_GetStatusFlags(TSI0) & kTSI_EndOfScanFlag)) { } /* Right mouse button */ if(TSI_GetCounter(TSI0) > TOUCH_THRESHHOLD){ g_UsbDeviceHidMouse.buffer[0] |= 2U; }else{ g_UsbDeviceHidMouse.buffer[0] &= ~2U; } /* Send mouse report to the host */ return USB_DeviceHidSend(g_UsbDeviceHidMouse.hidHandle, USB_HID_MOUSE_ENDPOINT_IN, g_UsbDeviceHidMouse.buffer, USB_HID_MOUSE_REPORT_LENGTH); }
/* Update mouse pointer location. Draw a rectangular rotation*/ static usb_status_t USB_DeviceHidMouseAction(void) { static int8_t x = 0U; static int8_t y = 0U; enum { RIGHT, DOWN, LEFT, UP }; static uint8_t dir = RIGHT; switch (dir) { case RIGHT: /* Move right. Increase X value. */ s_UsbDeviceHidMouse.buffer[1] = 1U; s_UsbDeviceHidMouse.buffer[2] = 0U; x++; if (x > 99U) { dir++; } break; case DOWN: /* Move down. Increase Y value. */ s_UsbDeviceHidMouse.buffer[1] = 0U; s_UsbDeviceHidMouse.buffer[2] = 1U; y++; if (y > 99U) { dir++; } break; case LEFT: /* Move left. Discrease X value. */ s_UsbDeviceHidMouse.buffer[1] = (uint8_t)(0xFFU); s_UsbDeviceHidMouse.buffer[2] = 0U; x--; if (x < 1U) { dir++; } break; case UP: /* Move up. Discrease Y value. */ s_UsbDeviceHidMouse.buffer[1] = 0U; s_UsbDeviceHidMouse.buffer[2] = (uint8_t)(0xFFU); y--; if (y < 1U) { dir = RIGHT; } break; default: break; } return USB_DeviceHidSend(s_UsbDeviceComposite->hidMouseHandle, USB_HID_MOUSE_ENDPOINT_IN, s_UsbDeviceHidMouse.buffer, USB_HID_MOUSE_REPORT_LENGTH); }