TEAMUSB
/
TEAMUSB_SLAVE
TEAMUSB_SLAVE
Fork of USBHostKeyboard_HelloWorld by
main.cpp
- Committer:
- armdran
- Date:
- 2015-04-07
- Revision:
- 11:e12aae7de530
- Parent:
- 10:54ffd94e075c
- Child:
- 12:d32975c44c98
File content as of revision 11:e12aae7de530:
#include "mbed.h" #include "USBHostKeyboard.h" #include "rtos.h" DigitalOut led(LED1); SPISlave device(D11, D12, D13, D10); DigitalOut ir(D9); uint8_t spi_reply_blocking(uint8_t reply = 0x00, bool sendIr = 0) { device.reply(reply); if(sendIr == 1) { wait_ms(100); ir = 1; ir = 0;} while(!device.receive()) {} uint8_t instruction = device.read(); //printf(" send: %x received: %x\r\n", reply, instruction); return instruction; } void onKeyMod(uint8_t key, uint8_t modifier) { printf("got key: %x modifier: %x.\r\n", key, modifier); uint8_t instruction = spi_reply_blocking(key, 1); while(instruction != 0xFE) { printf(" out of sync.\r\n"); //instruction = spi_reply_blocking(key, 1); return; } //printf(" got instruction FE. key sent\r\n"); uint8_t ack_key = spi_reply_blocking(modifier); if(ack_key != key) printf(" key ack failed (is %x, should be %x)!!!\r\n", ack_key, key); else printf(" key ack ok\r\n"); //printf(" mod sent.\r\n"); uint8_t ack_modifier = spi_reply_blocking(); if(ack_modifier != modifier) printf(" mod ack failed(is %x, should be %x)!!!\r\n", ack_modifier, modifier); else printf(" mod ack ok\r\n"); } void keyboard_task(void const *) { USBHostKeyboard keyboard; while(1) { printf("trying to connect\r\n"); // try to connect a USB keyboard while(!keyboard.connect()) { Thread::wait(500); } printf("connected\r\n"); // when connected, attach handler called on keyboard event keyboard.attach(onKeyMod); printf("eventhandler attached\r\n"); // wait until the keyboard is disconnected while(keyboard.connected()) { USBHost::poll(); } printf("disconnected\r\n"); } } int main() { Thread keyboardTask(keyboard_task, NULL, osPriorityNormal, 256 * 4); device.frequency(1000000); device.format(8, 1); while(1) {} }