Brian Pearson
/
LPC1768USBIO
USB IO module
main.cpp@0:08e9f3bccfda, 2016-01-05 (annotated)
- Committer:
- BPPearson
- Date:
- Tue Jan 05 16:45:45 2016 +0000
- Revision:
- 0:08e9f3bccfda
USB IO module
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
BPPearson | 0:08e9f3bccfda | 1 | #include "mbed.h" |
BPPearson | 0:08e9f3bccfda | 2 | #include "watchdog.h" |
BPPearson | 0:08e9f3bccfda | 3 | #include "USBHID.h" |
BPPearson | 0:08e9f3bccfda | 4 | #include "ByteOperations.h" |
BPPearson | 0:08e9f3bccfda | 5 | #include "USBHIDProtocol.h" |
BPPearson | 0:08e9f3bccfda | 6 | |
BPPearson | 0:08e9f3bccfda | 7 | #define VERSION 0x01 |
BPPearson | 0:08e9f3bccfda | 8 | |
BPPearson | 0:08e9f3bccfda | 9 | |
BPPearson | 0:08e9f3bccfda | 10 | // define all I/O |
BPPearson | 0:08e9f3bccfda | 11 | DigitalOut led1(LED1); |
BPPearson | 0:08e9f3bccfda | 12 | DigitalOut led2(LED2); |
BPPearson | 0:08e9f3bccfda | 13 | DigitalOut led3(LED3); |
BPPearson | 0:08e9f3bccfda | 14 | DigitalOut led4(LED4); |
BPPearson | 0:08e9f3bccfda | 15 | DigitalIn digIn1(p6); |
BPPearson | 0:08e9f3bccfda | 16 | DigitalIn digIn2(p7); |
BPPearson | 0:08e9f3bccfda | 17 | DigitalIn digIn3(p8); |
BPPearson | 0:08e9f3bccfda | 18 | DigitalIn digIn4(p9); |
BPPearson | 0:08e9f3bccfda | 19 | DigitalIn digIn5(p10); |
BPPearson | 0:08e9f3bccfda | 20 | DigitalIn digIn6(p11); |
BPPearson | 0:08e9f3bccfda | 21 | DigitalIn digIn7(p12); |
BPPearson | 0:08e9f3bccfda | 22 | DigitalIn digIn8(p13); |
BPPearson | 0:08e9f3bccfda | 23 | //DigitalIn digIn9(p13); |
BPPearson | 0:08e9f3bccfda | 24 | //DigitalIn digIn10(p14); |
BPPearson | 0:08e9f3bccfda | 25 | DigitalOut digOut1(p21); |
BPPearson | 0:08e9f3bccfda | 26 | DigitalOut digOut2(p22); |
BPPearson | 0:08e9f3bccfda | 27 | DigitalOut digOut3(p23); |
BPPearson | 0:08e9f3bccfda | 28 | DigitalOut digOut4(p24); |
BPPearson | 0:08e9f3bccfda | 29 | DigitalOut digOut5(p25); |
BPPearson | 0:08e9f3bccfda | 30 | DigitalOut digOut6(p26); |
BPPearson | 0:08e9f3bccfda | 31 | DigitalOut digOut7(p27); |
BPPearson | 0:08e9f3bccfda | 32 | DigitalOut digOut8(p28); |
BPPearson | 0:08e9f3bccfda | 33 | AnalogIn anIn1(p16); |
BPPearson | 0:08e9f3bccfda | 34 | AnalogIn anIn2(p17); |
BPPearson | 0:08e9f3bccfda | 35 | AnalogIn anIn3(p19); |
BPPearson | 0:08e9f3bccfda | 36 | AnalogIn anIn4(p20); |
BPPearson | 0:08e9f3bccfda | 37 | AnalogOut anOut(p18); |
BPPearson | 0:08e9f3bccfda | 38 | |
BPPearson | 0:08e9f3bccfda | 39 | //Serial pc(USBTX, USBRX); |
BPPearson | 0:08e9f3bccfda | 40 | |
BPPearson | 0:08e9f3bccfda | 41 | USBHID *hid; |
BPPearson | 0:08e9f3bccfda | 42 | HID_REPORT send_report __attribute__((aligned (4))); // Aligned for fast access |
BPPearson | 0:08e9f3bccfda | 43 | HID_REPORT recv_report __attribute__((aligned (4))); // Aligned for fast access |
BPPearson | 0:08e9f3bccfda | 44 | |
BPPearson | 0:08e9f3bccfda | 45 | |
BPPearson | 0:08e9f3bccfda | 46 | /** |
BPPearson | 0:08e9f3bccfda | 47 | * @brief Clear buffer contents |
BPPearson | 0:08e9f3bccfda | 48 | * @note Requires 4 byte alignement of data |
BPPearson | 0:08e9f3bccfda | 49 | * @param[in] c Pointer to @p HID_REPORT. |
BPPearson | 0:08e9f3bccfda | 50 | */ |
BPPearson | 0:08e9f3bccfda | 51 | void empty_report(HID_REPORT *data){ |
BPPearson | 0:08e9f3bccfda | 52 | register uint32_t *p = (uint32_t *)data->data; |
BPPearson | 0:08e9f3bccfda | 53 | for( register int i=0; i<((sizeof(HID_REPORT)-1)/4); i++ ){ |
BPPearson | 0:08e9f3bccfda | 54 | *p = 0xFFFFFFFF; |
BPPearson | 0:08e9f3bccfda | 55 | p++; |
BPPearson | 0:08e9f3bccfda | 56 | } |
BPPearson | 0:08e9f3bccfda | 57 | } |
BPPearson | 0:08e9f3bccfda | 58 | |
BPPearson | 0:08e9f3bccfda | 59 | |
BPPearson | 0:08e9f3bccfda | 60 | int main(void) |
BPPearson | 0:08e9f3bccfda | 61 | { |
BPPearson | 0:08e9f3bccfda | 62 | uint16_t channel; |
BPPearson | 0:08e9f3bccfda | 63 | uint16_t value; |
BPPearson | 0:08e9f3bccfda | 64 | |
BPPearson | 0:08e9f3bccfda | 65 | // USB Initialize |
BPPearson | 0:08e9f3bccfda | 66 | static USBHID hid_object(64, 64); |
BPPearson | 0:08e9f3bccfda | 67 | hid = &hid_object; |
BPPearson | 0:08e9f3bccfda | 68 | send_report.length = 64; |
BPPearson | 0:08e9f3bccfda | 69 | |
BPPearson | 0:08e9f3bccfda | 70 | //pc.printf("Start of main\n"); |
BPPearson | 0:08e9f3bccfda | 71 | |
BPPearson | 0:08e9f3bccfda | 72 | // Ready |
BPPearson | 0:08e9f3bccfda | 73 | while(1){ |
BPPearson | 0:08e9f3bccfda | 74 | // insert idle time, since we cant be running USB stuff all the time |
BPPearson | 0:08e9f3bccfda | 75 | wait_us(5000); |
BPPearson | 0:08e9f3bccfda | 76 | |
BPPearson | 0:08e9f3bccfda | 77 | //try to read a msg |
BPPearson | 0:08e9f3bccfda | 78 | if(hid->readNB(&recv_report)){ |
BPPearson | 0:08e9f3bccfda | 79 | // Data packet received, start parsing |
BPPearson | 0:08e9f3bccfda | 80 | int irx=0; |
BPPearson | 0:08e9f3bccfda | 81 | int itx=0; |
BPPearson | 0:08e9f3bccfda | 82 | |
BPPearson | 0:08e9f3bccfda | 83 | send_report.data[itx++] = recv_report.data[0]; |
BPPearson | 0:08e9f3bccfda | 84 | |
BPPearson | 0:08e9f3bccfda | 85 | switch ( recv_report.data[irx++] ){ |
BPPearson | 0:08e9f3bccfda | 86 | case CMD_SYS_CHECK : |
BPPearson | 0:08e9f3bccfda | 87 | send_report.data[itx++] = VERSION; |
BPPearson | 0:08e9f3bccfda | 88 | break; |
BPPearson | 0:08e9f3bccfda | 89 | |
BPPearson | 0:08e9f3bccfda | 90 | case CMD_SYS_RESET : |
BPPearson | 0:08e9f3bccfda | 91 | // Soft reset |
BPPearson | 0:08e9f3bccfda | 92 | empty_report(&recv_report); |
BPPearson | 0:08e9f3bccfda | 93 | break; |
BPPearson | 0:08e9f3bccfda | 94 | |
BPPearson | 0:08e9f3bccfda | 95 | case CMD_LED_OFF : |
BPPearson | 0:08e9f3bccfda | 96 | // CMD_LED_OFF Args, byte led 1..4 |
BPPearson | 0:08e9f3bccfda | 97 | channel = recv_report.data[irx++]; |
BPPearson | 0:08e9f3bccfda | 98 | switch (channel){ |
BPPearson | 0:08e9f3bccfda | 99 | case 1: |
BPPearson | 0:08e9f3bccfda | 100 | led1 = 1; // inverted led |
BPPearson | 0:08e9f3bccfda | 101 | break; |
BPPearson | 0:08e9f3bccfda | 102 | case 2: |
BPPearson | 0:08e9f3bccfda | 103 | led2 = 1; // inverted led |
BPPearson | 0:08e9f3bccfda | 104 | break; |
BPPearson | 0:08e9f3bccfda | 105 | case 3: |
BPPearson | 0:08e9f3bccfda | 106 | led3 = 0; // inverted led |
BPPearson | 0:08e9f3bccfda | 107 | break; |
BPPearson | 0:08e9f3bccfda | 108 | case 4: |
BPPearson | 0:08e9f3bccfda | 109 | led4 = 0; // inverted led |
BPPearson | 0:08e9f3bccfda | 110 | break; |
BPPearson | 0:08e9f3bccfda | 111 | default: |
BPPearson | 0:08e9f3bccfda | 112 | send_report.data[0] = 0xFF; //Failure |
BPPearson | 0:08e9f3bccfda | 113 | } |
BPPearson | 0:08e9f3bccfda | 114 | break; |
BPPearson | 0:08e9f3bccfda | 115 | |
BPPearson | 0:08e9f3bccfda | 116 | case CMD_LED_ON : |
BPPearson | 0:08e9f3bccfda | 117 | // CMD_LED_ON Args, byte led 1..4 |
BPPearson | 0:08e9f3bccfda | 118 | channel = recv_report.data[irx++]; |
BPPearson | 0:08e9f3bccfda | 119 | switch (channel){ |
BPPearson | 0:08e9f3bccfda | 120 | case 1: |
BPPearson | 0:08e9f3bccfda | 121 | led1 = 0; // inverted led |
BPPearson | 0:08e9f3bccfda | 122 | break; |
BPPearson | 0:08e9f3bccfda | 123 | case 2: |
BPPearson | 0:08e9f3bccfda | 124 | led2 = 0; // inverted led |
BPPearson | 0:08e9f3bccfda | 125 | break; |
BPPearson | 0:08e9f3bccfda | 126 | case 3: |
BPPearson | 0:08e9f3bccfda | 127 | led3 = 1; // inverted led |
BPPearson | 0:08e9f3bccfda | 128 | break; |
BPPearson | 0:08e9f3bccfda | 129 | case 4: |
BPPearson | 0:08e9f3bccfda | 130 | led4 = 1; // inverted led |
BPPearson | 0:08e9f3bccfda | 131 | break; |
BPPearson | 0:08e9f3bccfda | 132 | default: |
BPPearson | 0:08e9f3bccfda | 133 | send_report.data[0] = 0xFF; //Failure |
BPPearson | 0:08e9f3bccfda | 134 | } |
BPPearson | 0:08e9f3bccfda | 135 | break; |
BPPearson | 0:08e9f3bccfda | 136 | |
BPPearson | 0:08e9f3bccfda | 137 | case CMD_READ_DIG_INPUT : |
BPPearson | 0:08e9f3bccfda | 138 | // CMD_READ_DIG_INPUT Args, byte channel, return int |
BPPearson | 0:08e9f3bccfda | 139 | channel = recv_report.data[irx++]; |
BPPearson | 0:08e9f3bccfda | 140 | value = 0; |
BPPearson | 0:08e9f3bccfda | 141 | switch (channel){ |
BPPearson | 0:08e9f3bccfda | 142 | case 1: |
BPPearson | 0:08e9f3bccfda | 143 | value = digIn1.read(); |
BPPearson | 0:08e9f3bccfda | 144 | break; |
BPPearson | 0:08e9f3bccfda | 145 | case 2: |
BPPearson | 0:08e9f3bccfda | 146 | value = digIn2.read(); |
BPPearson | 0:08e9f3bccfda | 147 | break; |
BPPearson | 0:08e9f3bccfda | 148 | case 3: |
BPPearson | 0:08e9f3bccfda | 149 | value = digIn3.read(); |
BPPearson | 0:08e9f3bccfda | 150 | break; |
BPPearson | 0:08e9f3bccfda | 151 | case 4: |
BPPearson | 0:08e9f3bccfda | 152 | value = digIn4.read(); |
BPPearson | 0:08e9f3bccfda | 153 | break; |
BPPearson | 0:08e9f3bccfda | 154 | case 5: |
BPPearson | 0:08e9f3bccfda | 155 | value = digIn5.read(); |
BPPearson | 0:08e9f3bccfda | 156 | break; |
BPPearson | 0:08e9f3bccfda | 157 | case 6: |
BPPearson | 0:08e9f3bccfda | 158 | value = digIn6.read(); |
BPPearson | 0:08e9f3bccfda | 159 | break; |
BPPearson | 0:08e9f3bccfda | 160 | case 7: |
BPPearson | 0:08e9f3bccfda | 161 | value = digIn7.read(); |
BPPearson | 0:08e9f3bccfda | 162 | break; |
BPPearson | 0:08e9f3bccfda | 163 | case 8: |
BPPearson | 0:08e9f3bccfda | 164 | value = digIn8.read(); |
BPPearson | 0:08e9f3bccfda | 165 | break; |
BPPearson | 0:08e9f3bccfda | 166 | default: |
BPPearson | 0:08e9f3bccfda | 167 | send_report.data[0] = 0xFF; //Failure |
BPPearson | 0:08e9f3bccfda | 168 | } |
BPPearson | 0:08e9f3bccfda | 169 | write_16_to_8(&itx, send_report.data, value); |
BPPearson | 0:08e9f3bccfda | 170 | break; |
BPPearson | 0:08e9f3bccfda | 171 | |
BPPearson | 0:08e9f3bccfda | 172 | case CMD_READ_ALL_DIG_INPUTS : |
BPPearson | 0:08e9f3bccfda | 173 | // CMD_READ_ALL_DIG_INPUTS No args, return int |
BPPearson | 0:08e9f3bccfda | 174 | value = 0; |
BPPearson | 0:08e9f3bccfda | 175 | value = digIn1.read(); |
BPPearson | 0:08e9f3bccfda | 176 | value |= ((digIn2.read() & 1) << 1); |
BPPearson | 0:08e9f3bccfda | 177 | value |= ((digIn3.read() & 1) << 2); |
BPPearson | 0:08e9f3bccfda | 178 | value |= ((digIn4.read() & 1) << 3); |
BPPearson | 0:08e9f3bccfda | 179 | value |= ((digIn5.read() & 1) << 4); |
BPPearson | 0:08e9f3bccfda | 180 | value |= ((digIn6.read() & 1) << 5); |
BPPearson | 0:08e9f3bccfda | 181 | value |= ((digIn7.read() & 1) << 6); |
BPPearson | 0:08e9f3bccfda | 182 | value |= ((digIn8.read() & 1) << 7); |
BPPearson | 0:08e9f3bccfda | 183 | write_16_to_8(&itx, send_report.data, value); |
BPPearson | 0:08e9f3bccfda | 184 | break; |
BPPearson | 0:08e9f3bccfda | 185 | |
BPPearson | 0:08e9f3bccfda | 186 | case CMD_READ_DIG_OUTPUT : |
BPPearson | 0:08e9f3bccfda | 187 | // CMD_READ_DIG_OUTPUT Args, byte channel, return int |
BPPearson | 0:08e9f3bccfda | 188 | channel = recv_report.data[irx++]; |
BPPearson | 0:08e9f3bccfda | 189 | value = 0; |
BPPearson | 0:08e9f3bccfda | 190 | switch (channel){ |
BPPearson | 0:08e9f3bccfda | 191 | case 1: |
BPPearson | 0:08e9f3bccfda | 192 | value = digOut1.read(); |
BPPearson | 0:08e9f3bccfda | 193 | break; |
BPPearson | 0:08e9f3bccfda | 194 | case 2: |
BPPearson | 0:08e9f3bccfda | 195 | value = digOut2.read(); |
BPPearson | 0:08e9f3bccfda | 196 | break; |
BPPearson | 0:08e9f3bccfda | 197 | case 3: |
BPPearson | 0:08e9f3bccfda | 198 | value = digOut3.read(); |
BPPearson | 0:08e9f3bccfda | 199 | break; |
BPPearson | 0:08e9f3bccfda | 200 | case 4: |
BPPearson | 0:08e9f3bccfda | 201 | value = digOut4.read(); |
BPPearson | 0:08e9f3bccfda | 202 | break; |
BPPearson | 0:08e9f3bccfda | 203 | case 5: |
BPPearson | 0:08e9f3bccfda | 204 | value = digOut5.read(); |
BPPearson | 0:08e9f3bccfda | 205 | break; |
BPPearson | 0:08e9f3bccfda | 206 | case 6: |
BPPearson | 0:08e9f3bccfda | 207 | value = digOut6.read(); |
BPPearson | 0:08e9f3bccfda | 208 | break; |
BPPearson | 0:08e9f3bccfda | 209 | case 7: |
BPPearson | 0:08e9f3bccfda | 210 | value = digOut7.read(); |
BPPearson | 0:08e9f3bccfda | 211 | break; |
BPPearson | 0:08e9f3bccfda | 212 | case 8: |
BPPearson | 0:08e9f3bccfda | 213 | value = digOut8.read(); |
BPPearson | 0:08e9f3bccfda | 214 | break; |
BPPearson | 0:08e9f3bccfda | 215 | default: |
BPPearson | 0:08e9f3bccfda | 216 | send_report.data[0] = 0xFF; //Failure |
BPPearson | 0:08e9f3bccfda | 217 | } |
BPPearson | 0:08e9f3bccfda | 218 | write_16_to_8(&itx, send_report.data, value); |
BPPearson | 0:08e9f3bccfda | 219 | break; |
BPPearson | 0:08e9f3bccfda | 220 | |
BPPearson | 0:08e9f3bccfda | 221 | case CMD_READ_ALL_DIG_OUTPUTS : |
BPPearson | 0:08e9f3bccfda | 222 | // CMD_READ_ALL_DIG_OUTPUTS No args, return int |
BPPearson | 0:08e9f3bccfda | 223 | value = 0; |
BPPearson | 0:08e9f3bccfda | 224 | value = digOut1.read(); |
BPPearson | 0:08e9f3bccfda | 225 | value |= ((digOut2.read() & 1) << 1); |
BPPearson | 0:08e9f3bccfda | 226 | value |= ((digOut3.read() & 1) << 2); |
BPPearson | 0:08e9f3bccfda | 227 | value |= ((digOut4.read() & 1) << 3); |
BPPearson | 0:08e9f3bccfda | 228 | value |= ((digOut5.read() & 1) << 4); |
BPPearson | 0:08e9f3bccfda | 229 | value |= ((digOut6.read() & 1) << 5); |
BPPearson | 0:08e9f3bccfda | 230 | value |= ((digOut7.read() & 1) << 6); |
BPPearson | 0:08e9f3bccfda | 231 | value |= ((digOut8.read() & 1) << 7); |
BPPearson | 0:08e9f3bccfda | 232 | write_16_to_8(&itx, send_report.data, value); |
BPPearson | 0:08e9f3bccfda | 233 | break; |
BPPearson | 0:08e9f3bccfda | 234 | |
BPPearson | 0:08e9f3bccfda | 235 | case CMD_WRITE_DIG_OUTPUT : |
BPPearson | 0:08e9f3bccfda | 236 | // CMD_WRITE_DIG_OUTPUT Args, byte channel, int value |
BPPearson | 0:08e9f3bccfda | 237 | channel = recv_report.data[irx++]; |
BPPearson | 0:08e9f3bccfda | 238 | value = recv_report.data[irx++]; |
BPPearson | 0:08e9f3bccfda | 239 | switch (channel){ |
BPPearson | 0:08e9f3bccfda | 240 | case 1: |
BPPearson | 0:08e9f3bccfda | 241 | digOut1.write(!(value & 1)); |
BPPearson | 0:08e9f3bccfda | 242 | break; |
BPPearson | 0:08e9f3bccfda | 243 | case 2: |
BPPearson | 0:08e9f3bccfda | 244 | digOut2.write(!(value & 1)); |
BPPearson | 0:08e9f3bccfda | 245 | break; |
BPPearson | 0:08e9f3bccfda | 246 | case 3: |
BPPearson | 0:08e9f3bccfda | 247 | digOut3.write(value & 1); |
BPPearson | 0:08e9f3bccfda | 248 | break; |
BPPearson | 0:08e9f3bccfda | 249 | case 4: |
BPPearson | 0:08e9f3bccfda | 250 | digOut4.write(value & 1); |
BPPearson | 0:08e9f3bccfda | 251 | break; |
BPPearson | 0:08e9f3bccfda | 252 | case 5: |
BPPearson | 0:08e9f3bccfda | 253 | digOut5.write(value & 1); |
BPPearson | 0:08e9f3bccfda | 254 | break; |
BPPearson | 0:08e9f3bccfda | 255 | case 6: |
BPPearson | 0:08e9f3bccfda | 256 | digOut6.write(value & 1); |
BPPearson | 0:08e9f3bccfda | 257 | break; |
BPPearson | 0:08e9f3bccfda | 258 | case 7: |
BPPearson | 0:08e9f3bccfda | 259 | digOut7.write(value & 1); |
BPPearson | 0:08e9f3bccfda | 260 | break; |
BPPearson | 0:08e9f3bccfda | 261 | case 8: |
BPPearson | 0:08e9f3bccfda | 262 | digOut8.write(value & 1); |
BPPearson | 0:08e9f3bccfda | 263 | break; |
BPPearson | 0:08e9f3bccfda | 264 | default: |
BPPearson | 0:08e9f3bccfda | 265 | send_report.data[0] = 0xFF; //Failure |
BPPearson | 0:08e9f3bccfda | 266 | } |
BPPearson | 0:08e9f3bccfda | 267 | break; |
BPPearson | 0:08e9f3bccfda | 268 | |
BPPearson | 0:08e9f3bccfda | 269 | case CMD_WRITE_ALL_DIG_OUTPUTS : |
BPPearson | 0:08e9f3bccfda | 270 | // CMD_WRIE_ALL_DIG_OUTPUTS Args, byte output value |
BPPearson | 0:08e9f3bccfda | 271 | uint16_t value = recv_report.data[irx++]; |
BPPearson | 0:08e9f3bccfda | 272 | digOut1.write(value & 1); |
BPPearson | 0:08e9f3bccfda | 273 | digOut2.write((value >> 1) & 1); |
BPPearson | 0:08e9f3bccfda | 274 | digOut3.write((value >> 2) & 1); |
BPPearson | 0:08e9f3bccfda | 275 | digOut4.write((value >> 3) & 1); |
BPPearson | 0:08e9f3bccfda | 276 | digOut5.write((value >> 4) & 1); |
BPPearson | 0:08e9f3bccfda | 277 | digOut6.write((value >> 5) & 1); |
BPPearson | 0:08e9f3bccfda | 278 | digOut7.write((value >> 6) & 1); |
BPPearson | 0:08e9f3bccfda | 279 | digOut8.write((value >> 7) & 1); |
BPPearson | 0:08e9f3bccfda | 280 | break; |
BPPearson | 0:08e9f3bccfda | 281 | |
BPPearson | 0:08e9f3bccfda | 282 | case CMD_READ_ANALOG_INPUT : |
BPPearson | 0:08e9f3bccfda | 283 | // CMD_READ_ANALOG_INPUT Args, byte channel, return int |
BPPearson | 0:08e9f3bccfda | 284 | channel = recv_report.data[irx++]; |
BPPearson | 0:08e9f3bccfda | 285 | //pc.printf("Channel %d\n", channel); |
BPPearson | 0:08e9f3bccfda | 286 | switch (channel){ |
BPPearson | 0:08e9f3bccfda | 287 | case 1: |
BPPearson | 0:08e9f3bccfda | 288 | uint16_t value = anIn1.read_u16(); |
BPPearson | 0:08e9f3bccfda | 289 | write_16_to_8(&itx, send_report.data, value); |
BPPearson | 0:08e9f3bccfda | 290 | //pc.printf("Value %d\n", value ); |
BPPearson | 0:08e9f3bccfda | 291 | break; |
BPPearson | 0:08e9f3bccfda | 292 | case 2: |
BPPearson | 0:08e9f3bccfda | 293 | value = anIn2.read_u16(); |
BPPearson | 0:08e9f3bccfda | 294 | write_16_to_8(&itx, send_report.data, value); |
BPPearson | 0:08e9f3bccfda | 295 | break; |
BPPearson | 0:08e9f3bccfda | 296 | case 3: |
BPPearson | 0:08e9f3bccfda | 297 | value = anIn3.read_u16(); |
BPPearson | 0:08e9f3bccfda | 298 | write_16_to_8(&itx, send_report.data, value); |
BPPearson | 0:08e9f3bccfda | 299 | break; |
BPPearson | 0:08e9f3bccfda | 300 | case 4: |
BPPearson | 0:08e9f3bccfda | 301 | value = anIn4.read_u16(); |
BPPearson | 0:08e9f3bccfda | 302 | write_16_to_8(&itx, send_report.data, value); |
BPPearson | 0:08e9f3bccfda | 303 | break; |
BPPearson | 0:08e9f3bccfda | 304 | default: |
BPPearson | 0:08e9f3bccfda | 305 | send_report.data[0] = 0xFF; //Failure |
BPPearson | 0:08e9f3bccfda | 306 | } |
BPPearson | 0:08e9f3bccfda | 307 | break; |
BPPearson | 0:08e9f3bccfda | 308 | |
BPPearson | 0:08e9f3bccfda | 309 | case CMD_WRITE_ANALOG_OUTPUT : |
BPPearson | 0:08e9f3bccfda | 310 | // CMD_WRITE_ANALOG_OUTPUT Args, int value |
BPPearson | 0:08e9f3bccfda | 311 | value = read_8_to_16(&irx, recv_report.data); |
BPPearson | 0:08e9f3bccfda | 312 | anOut.write_u16(value); |
BPPearson | 0:08e9f3bccfda | 313 | break; |
BPPearson | 0:08e9f3bccfda | 314 | |
BPPearson | 0:08e9f3bccfda | 315 | case 0xEE : { |
BPPearson | 0:08e9f3bccfda | 316 | hid->sendNB(&send_report); |
BPPearson | 0:08e9f3bccfda | 317 | WatchDog_us bello(100); |
BPPearson | 0:08e9f3bccfda | 318 | } |
BPPearson | 0:08e9f3bccfda | 319 | break; |
BPPearson | 0:08e9f3bccfda | 320 | |
BPPearson | 0:08e9f3bccfda | 321 | default: |
BPPearson | 0:08e9f3bccfda | 322 | send_report.data[0] = 0xFF; //Failure |
BPPearson | 0:08e9f3bccfda | 323 | break; |
BPPearson | 0:08e9f3bccfda | 324 | } // Switch |
BPPearson | 0:08e9f3bccfda | 325 | // Return command + optional new args |
BPPearson | 0:08e9f3bccfda | 326 | hid->send(&send_report); |
BPPearson | 0:08e9f3bccfda | 327 | // 0xFF unused bytes |
BPPearson | 0:08e9f3bccfda | 328 | empty_report(&recv_report); |
BPPearson | 0:08e9f3bccfda | 329 | empty_report(&send_report); |
BPPearson | 0:08e9f3bccfda | 330 | } // if packet |
BPPearson | 0:08e9f3bccfda | 331 | } // While |
BPPearson | 0:08e9f3bccfda | 332 | } |
BPPearson | 0:08e9f3bccfda | 333 |