TEAMUSB
/
TEAMUSB_SLAVE
TEAMUSB_SLAVE
Fork of USBHostKeyboard_HelloWorld by
main.cpp@10:54ffd94e075c, 2015-04-03 (annotated)
- Committer:
- armdran
- Date:
- Fri Apr 03 13:21:03 2015 +0000
- Revision:
- 10:54ffd94e075c
- Parent:
- 9:8bcd70b26084
- Child:
- 11:e12aae7de530
communication with spi added (should work)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
samux | 0:88d52e197201 | 1 | #include "mbed.h" |
samux | 0:88d52e197201 | 2 | #include "USBHostKeyboard.h" |
wlangenkamp | 7:be82ac3c4821 | 3 | #include "rtos.h" |
samux | 0:88d52e197201 | 4 | |
samux | 0:88d52e197201 | 5 | DigitalOut led(LED1); |
armdran | 9:8bcd70b26084 | 6 | SPISlave device(D11, D12, D13, D10); |
armdran | 9:8bcd70b26084 | 7 | uint8_t keyReg = 0x0; |
samux | 0:88d52e197201 | 8 | |
armdran | 8:f8122ca2f58f | 9 | void onKeyMod(uint8_t key, uint8_t modifier) { |
armdran | 9:8bcd70b26084 | 10 | printf("Key: %x modifier: %x\r\n", key, modifier); |
armdran | 9:8bcd70b26084 | 11 | keyReg = key; |
armdran | 8:f8122ca2f58f | 12 | } |
armdran | 8:f8122ca2f58f | 13 | |
armdran | 8:f8122ca2f58f | 14 | |
samux | 0:88d52e197201 | 15 | void keyboard_task(void const *) { |
samux | 0:88d52e197201 | 16 | |
samux | 0:88d52e197201 | 17 | USBHostKeyboard keyboard; |
samux | 0:88d52e197201 | 18 | |
samux | 0:88d52e197201 | 19 | while(1) { |
armdran | 8:f8122ca2f58f | 20 | |
armdran | 8:f8122ca2f58f | 21 | printf("trying to connect\r\n"); |
armdran | 8:f8122ca2f58f | 22 | |
samux | 0:88d52e197201 | 23 | // try to connect a USB keyboard |
armdran | 8:f8122ca2f58f | 24 | while(!keyboard.connect()) { |
samux | 0:88d52e197201 | 25 | Thread::wait(500); |
armdran | 8:f8122ca2f58f | 26 | } |
armdran | 8:f8122ca2f58f | 27 | |
armdran | 8:f8122ca2f58f | 28 | printf("connected\r\n"); |
armdran | 8:f8122ca2f58f | 29 | |
samux | 0:88d52e197201 | 30 | |
samux | 0:88d52e197201 | 31 | // when connected, attach handler called on keyboard event |
armdran | 9:8bcd70b26084 | 32 | //keyboard.attach(onKey); |
armdran | 8:f8122ca2f58f | 33 | keyboard.attach(onKeyMod); |
armdran | 8:f8122ca2f58f | 34 | |
armdran | 8:f8122ca2f58f | 35 | printf("eventhandler attached\r\n"); |
samux | 0:88d52e197201 | 36 | |
samux | 0:88d52e197201 | 37 | // wait until the keyboard is disconnected |
armdran | 8:f8122ca2f58f | 38 | while(keyboard.connected()) { |
armdran | 8:f8122ca2f58f | 39 | USBHost::poll(); |
armdran | 8:f8122ca2f58f | 40 | } |
armdran | 8:f8122ca2f58f | 41 | |
armdran | 8:f8122ca2f58f | 42 | printf("disconnected\r\n"); |
armdran | 8:f8122ca2f58f | 43 | |
samux | 0:88d52e197201 | 44 | } |
samux | 0:88d52e197201 | 45 | } |
samux | 0:88d52e197201 | 46 | |
samux | 0:88d52e197201 | 47 | int main() { |
samux | 0:88d52e197201 | 48 | Thread keyboardTask(keyboard_task, NULL, osPriorityNormal, 256 * 4); |
armdran | 9:8bcd70b26084 | 49 | device.frequency(1000000); |
armdran | 10:54ffd94e075c | 50 | //device.format(8, 1); |
armdran | 10:54ffd94e075c | 51 | device.format(8, 3); |
armdran | 8:f8122ca2f58f | 52 | |
armdran | 9:8bcd70b26084 | 53 | //while(1) { |
armdran | 9:8bcd70b26084 | 54 | //Thread::wait(1000); |
armdran | 9:8bcd70b26084 | 55 | //printf("waiting...\r\n"); |
armdran | 9:8bcd70b26084 | 56 | //} |
armdran | 9:8bcd70b26084 | 57 | |
armdran | 9:8bcd70b26084 | 58 | int i = 0; |
armdran | 9:8bcd70b26084 | 59 | |
samux | 0:88d52e197201 | 60 | while(1) { |
armdran | 9:8bcd70b26084 | 61 | |
armdran | 9:8bcd70b26084 | 62 | //get instruciton |
armdran | 10:54ffd94e075c | 63 | printf("first poll\r\n"); |
armdran | 9:8bcd70b26084 | 64 | device.reply(0x00); |
armdran | 9:8bcd70b26084 | 65 | while(!device.receive()) { |
armdran | 9:8bcd70b26084 | 66 | if(i++ % 10000 == 0) { |
armdran | 9:8bcd70b26084 | 67 | printf("."); |
armdran | 9:8bcd70b26084 | 68 | } |
armdran | 9:8bcd70b26084 | 69 | } |
armdran | 9:8bcd70b26084 | 70 | |
armdran | 9:8bcd70b26084 | 71 | uint8_t instruction = device.read(); |
armdran | 9:8bcd70b26084 | 72 | |
armdran | 10:54ffd94e075c | 73 | if(instruction != 0xFE) { |
armdran | 10:54ffd94e075c | 74 | printf("received %x on first poll\r\n", instruction ); |
armdran | 10:54ffd94e075c | 75 | continue; |
armdran | 10:54ffd94e075c | 76 | } |
armdran | 9:8bcd70b26084 | 77 | |
armdran | 10:54ffd94e075c | 78 | printf("second step\r\n"); |
armdran | 9:8bcd70b26084 | 79 | device.reply(keyReg); |
armdran | 9:8bcd70b26084 | 80 | |
armdran | 9:8bcd70b26084 | 81 | while(!device.receive()) { |
armdran | 9:8bcd70b26084 | 82 | if(i++ % 10000 == 0) { |
armdran | 9:8bcd70b26084 | 83 | printf("."); |
armdran | 9:8bcd70b26084 | 84 | } |
armdran | 9:8bcd70b26084 | 85 | } |
armdran | 9:8bcd70b26084 | 86 | |
armdran | 9:8bcd70b26084 | 87 | device.read(); |
armdran | 9:8bcd70b26084 | 88 | |
armdran | 10:54ffd94e075c | 89 | printf("third step\r\n"); |
armdran | 9:8bcd70b26084 | 90 | device.reply(0x00); |
armdran | 9:8bcd70b26084 | 91 | |
armdran | 9:8bcd70b26084 | 92 | while(!device.receive()) { |
armdran | 9:8bcd70b26084 | 93 | if(i++ % 10000 == 0) { |
armdran | 9:8bcd70b26084 | 94 | printf("."); |
armdran | 9:8bcd70b26084 | 95 | } |
armdran | 9:8bcd70b26084 | 96 | } |
armdran | 9:8bcd70b26084 | 97 | |
armdran | 9:8bcd70b26084 | 98 | int response = device.read(); |
armdran | 9:8bcd70b26084 | 99 | |
armdran | 10:54ffd94e075c | 100 | printf("Sent Keystroke %x over SPI. response was %x\r\n", keyReg, response); |
armdran | 9:8bcd70b26084 | 101 | |
armdran | 9:8bcd70b26084 | 102 | if(response == keyReg) { |
armdran | 9:8bcd70b26084 | 103 | keyReg = 0; |
armdran | 9:8bcd70b26084 | 104 | } |
armdran | 9:8bcd70b26084 | 105 | |
samux | 0:88d52e197201 | 106 | } |
armdran | 9:8bcd70b26084 | 107 | |
samux | 0:88d52e197201 | 108 | } |