Embed:
(wiki syntax)
Show/hide line numbers
USBMouseKeyboard.c
00001 /* Keyboard_RelMouse.c */ 00002 00003 /* USB device example: Keyboard and a relative mouse */ 00004 /* Copyright (c) 2011 ARM Limited. All rights reserved. */ 00005 00006 #include "stdint.h" 00007 00008 #include "USBMouseKeyboard.h" 00009 00010 uint8_t * USBMouseKeyboard::ReportDesc() { 00011 static uint8_t reportDescriptor[] = { 00012 /* Keyboard */ 00013 USAGE_PAGE(1), 0x01, 00014 USAGE(1), 0x06, 00015 COLLECTION(1), 0x01, 00016 REPORT_ID(1), REPORT_ID_KEYBOARD, 00017 USAGE_PAGE(1), 0x07, 00018 USAGE_MINIMUM(1), 0xE0, 00019 USAGE_MAXIMUM(1), 0xE7, 00020 LOGICAL_MINIMUM(1), 0x00, 00021 LOGICAL_MAXIMUM(1), 0x01, 00022 REPORT_SIZE(1), 0x01, 00023 REPORT_COUNT(1), 0x08, 00024 INPUT(1), 0x02, 00025 REPORT_COUNT(1), 0x01, 00026 REPORT_SIZE(1), 0x08, 00027 INPUT(1), 0x01, 00028 REPORT_COUNT(1), 0x05, 00029 REPORT_SIZE(1), 0x01, 00030 USAGE_PAGE(1), 0x08, 00031 USAGE_MINIMUM(1), 0x01, 00032 USAGE_MAXIMUM(1), 0x05, 00033 OUTPUT(1), 0x02, 00034 REPORT_COUNT(1), 0x01, 00035 REPORT_SIZE(1), 0x03, 00036 OUTPUT(1), 0x01, 00037 REPORT_COUNT(1), 0x06, 00038 REPORT_SIZE(1), 0x08, 00039 LOGICAL_MINIMUM(1), 0x00, 00040 LOGICAL_MAXIMUM(2), 0xff, 0x00, 00041 USAGE_PAGE(1), 0x07, 00042 USAGE_MINIMUM(1), 0x00, 00043 USAGE_MAXIMUM(2), 0xff, 0x00, 00044 INPUT(1), 0x00, 00045 END_COLLECTION(0), 00046 00047 /* Mouse */ 00048 USAGE_PAGE(1), 0x01, /* Generic Desktop */ 00049 USAGE(1), 0x02, /* Mouse */ 00050 COLLECTION(1), 0x01, /* Application*/ 00051 USAGE(1), 0x01, /* Pointer */ 00052 COLLECTION(1), 0x00, /* Physical */ 00053 REPORT_ID(1), REPORT_ID_MOUSE, 00054 REPORT_COUNT(1), 0x03, 00055 REPORT_SIZE(1), 0x01, 00056 USAGE_PAGE(1), 0x09, /* Buttons */ 00057 USAGE_MINIMUM(1), 0x1, 00058 USAGE_MAXIMUM(1), 0x3, 00059 LOGICAL_MINIMUM(1), 0x00, 00060 LOGICAL_MAXIMUM(1), 0x01, 00061 INPUT(1), 0x02, 00062 REPORT_COUNT(1), 0x01, 00063 REPORT_SIZE(1), 0x05, 00064 INPUT(1), 0x01, 00065 REPORT_COUNT(1), 0x03, 00066 REPORT_SIZE(1), 0x08, 00067 USAGE_PAGE(1), 0x01, 00068 USAGE(1), 0x30, /* X */ 00069 USAGE(1), 0x31, /* Y */ 00070 USAGE(1), 0x38, /* scroll */ 00071 LOGICAL_MINIMUM(1), 0x81, 00072 LOGICAL_MAXIMUM(1), 0x7f, 00073 INPUT(1), 0x06, 00074 END_COLLECTION(0), 00075 END_COLLECTION(0), 00076 00077 00078 USAGE_PAGE(1), 0x0c, /* USAGE_PAGE (Consumer Devices) */ 00079 USAGE(1), 0x01, /* USAGE (Consumer Control) */ 00080 COLLECTION(1), 0x01, /* COLLECTION (Application) */ 00081 REPORT_ID(1), REPORT_ID_VOLUME, 00082 LOGICAL_MINIMUM(1), 0x00, /* LOGICAL_MINIMUM (0) */ 00083 LOGICAL_MAXIMUM(1), 0x01, /* LOGICAL_MAXIMUM (1) */ 00084 USAGE(1), 0xe9, /* Volume Up */ 00085 USAGE(1), 0xea, /* Volume Down */ 00086 REPORT_SIZE(1), 0x01, 00087 REPORT_COUNT(1), 0x02, 00088 INPUT(1), 0x06, /* INPUT (Data,Var,Rel) */ 00089 USAGE(1), 0xe2, /* Mute */ 00090 REPORT_COUNT(1), 0x01, /* REPORT_COUNT (1) */ 00091 INPUT(1), 0x06, /* INPUT (Data,Var,Rel) */ 00092 REPORT_COUNT(1), 0x05, /* REPORT_COUNT (5) */ 00093 INPUT(1), 0x07, /* INPUT (Cnst,Var,Rel) */ 00094 END_COLLECTION(0), /* END_COLLECTION */ 00095 }; 00096 reportLength = sizeof(reportDescriptor); 00097 return reportDescriptor; 00098 } 00099 00100 00101 bool USBMouseKeyboard::update(int16_t x, int16_t y, uint8_t button, int8_t z) { 00102 while (x > 127) { 00103 if (!mouseWrite(127, 0, button, z)) return false; 00104 x = x - 127; 00105 } 00106 while (x < -128) { 00107 if (!mouseWrite(-128, 0, button, z)) return false; 00108 x = x + 128; 00109 } 00110 while (y > 127) { 00111 if (!mouseWrite(0, 127, button, z)) return false; 00112 y = y - 127; 00113 } 00114 while (y < -128) { 00115 if (!mouseWrite(0, -128, button, z)) return false; 00116 y = y + 128; 00117 } 00118 return mouseWrite(x, y, button, z); 00119 } 00120 00121 bool USBMouseKeyboard::mouseWrite(int8_t x, int8_t y, uint8_t buttons, int8_t z) { 00122 HID_REPORT report; 00123 00124 report.data[0] = REPORT_ID_MOUSE; 00125 report.data[1] = buttons & 0x07; 00126 report.data[2] = x; 00127 report.data[3] = y; 00128 report.data[4] = -z; /* >0 to scroll down, <0 to scroll up */ 00129 00130 report.length = 5; 00131 00132 return USBClass_HID_sendInputReport(EPINT_IN, &report); 00133 }
Generated on Fri Jul 15 2022 02:22:27 by 1.7.2