Sample program for the USB Host lib with HID

Dependencies:   USBHost_DISCO-F746NG mbed

Committer:
DieterGraef
Date:
Fri Jun 17 09:01:37 2016 +0000
Revision:
2:ca1b5b911ba8
Parent:
0:af2040964256
Demo program now uses USB Stick on high speed and HID on fast speed interface. Move your mouse!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DieterGraef 0:af2040964256 1 #include "mbed.h"
DieterGraef 0:af2040964256 2 #include "rtos.h"
DieterGraef 0:af2040964256 3 #include "USBHostMouseKeyboard.h"
DieterGraef 2:ca1b5b911ba8 4 #include "USBHostMSD.h"
DieterGraef 0:af2040964256 5 #define FastSpeedInterface 0
DieterGraef 0:af2040964256 6 #define HighSpeedInterface 1
DieterGraef 0:af2040964256 7 DigitalOut led(LED1);
DieterGraef 0:af2040964256 8
DieterGraef 2:ca1b5b911ba8 9 void onMouseEventdev0(uint8_t buttons, int8_t x, int8_t y, int8_t z) {
DieterGraef 2:ca1b5b911ba8 10 printf("0m: %d, x: %d, y: %d, z: %d\r\n", buttons, x, y, z);
DieterGraef 0:af2040964256 11 }
DieterGraef 0:af2040964256 12
DieterGraef 2:ca1b5b911ba8 13 void onKeydev0(uint8_t key) {
DieterGraef 2:ca1b5b911ba8 14 printf("0Key: %c\r\n", key);
DieterGraef 0:af2040964256 15 }
DieterGraef 0:af2040964256 16
DieterGraef 0:af2040964256 17
DieterGraef 0:af2040964256 18 void mouse_task(void const *) {
DieterGraef 0:af2040964256 19 // At the moment only one Interface can be used for the Host due to the use of
DieterGraef 2:ca1b5b911ba8 20 USBHostMouseKb dev0(FastSpeedInterface);
DieterGraef 0:af2040964256 21 while(1) {
DieterGraef 0:af2040964256 22 // try to connect
DieterGraef 2:ca1b5b911ba8 23 while(!dev0.connect())
DieterGraef 0:af2040964256 24 Thread::wait(500);
DieterGraef 0:af2040964256 25 // when connected, attach handler
DieterGraef 2:ca1b5b911ba8 26 dev0.attachMouseEvent(onMouseEventdev0);
DieterGraef 2:ca1b5b911ba8 27 dev0.attachKb(onKeydev0);
DieterGraef 0:af2040964256 28 while(1)
DieterGraef 0:af2040964256 29 {
DieterGraef 2:ca1b5b911ba8 30
DieterGraef 2:ca1b5b911ba8 31 USBHost::poll();
DieterGraef 0:af2040964256 32 Thread::wait(50);
DieterGraef 0:af2040964256 33 }
DieterGraef 0:af2040964256 34
DieterGraef 0:af2040964256 35 }
DieterGraef 0:af2040964256 36 }
DieterGraef 0:af2040964256 37
DieterGraef 2:ca1b5b911ba8 38 void msd_task(void const *) {
DieterGraef 2:ca1b5b911ba8 39
DieterGraef 2:ca1b5b911ba8 40 USBHostMSD msd("usb",HighSpeedInterface);
DieterGraef 2:ca1b5b911ba8 41 int i = 0;
DieterGraef 2:ca1b5b911ba8 42 int res;
DieterGraef 2:ca1b5b911ba8 43 int error=0;
DieterGraef 2:ca1b5b911ba8 44 while(1) {
DieterGraef 2:ca1b5b911ba8 45
DieterGraef 2:ca1b5b911ba8 46 // try to connect a MSD device
DieterGraef 2:ca1b5b911ba8 47 while(!msd.connect()) {
DieterGraef 2:ca1b5b911ba8 48 Thread::wait(500);
DieterGraef 2:ca1b5b911ba8 49 printf("waiting\n");
DieterGraef 2:ca1b5b911ba8 50 }
DieterGraef 2:ca1b5b911ba8 51
DieterGraef 2:ca1b5b911ba8 52 // in a loop, append a file
DieterGraef 2:ca1b5b911ba8 53 // if the device is disconnected, we try to connect it again
DieterGraef 2:ca1b5b911ba8 54 while(1) {
DieterGraef 2:ca1b5b911ba8 55
DieterGraef 2:ca1b5b911ba8 56 // append a file
DieterGraef 2:ca1b5b911ba8 57 FILE * fp = fopen("/usb/test1.txt", "a");
DieterGraef 2:ca1b5b911ba8 58
DieterGraef 2:ca1b5b911ba8 59 if (fp != NULL) {
DieterGraef 2:ca1b5b911ba8 60 res=fprintf(fp, "Hello fun USB Drive World: %d!\r\n", i++);
DieterGraef 2:ca1b5b911ba8 61 printf("Goodbye World!\r\n");
DieterGraef 2:ca1b5b911ba8 62 if (error==1)
DieterGraef 2:ca1b5b911ba8 63 {
DieterGraef 2:ca1b5b911ba8 64 printf("Goodbye New World!\r\n");
DieterGraef 2:ca1b5b911ba8 65 error=0;
DieterGraef 2:ca1b5b911ba8 66 }
DieterGraef 2:ca1b5b911ba8 67 fclose(fp);
DieterGraef 2:ca1b5b911ba8 68 if(res<0)
DieterGraef 2:ca1b5b911ba8 69 {
DieterGraef 2:ca1b5b911ba8 70 printf("FILE write ERROR\r\n");
DieterGraef 2:ca1b5b911ba8 71 msd.unmount();
DieterGraef 2:ca1b5b911ba8 72 wait_ms(5000);
DieterGraef 2:ca1b5b911ba8 73 msd.mount() ;
DieterGraef 2:ca1b5b911ba8 74 error=1;
DieterGraef 2:ca1b5b911ba8 75 }
DieterGraef 2:ca1b5b911ba8 76
DieterGraef 2:ca1b5b911ba8 77 } else {
DieterGraef 2:ca1b5b911ba8 78 printf("FILE == NULL\r\n");
DieterGraef 2:ca1b5b911ba8 79 msd.unmount();
DieterGraef 2:ca1b5b911ba8 80 wait_ms(5000);
DieterGraef 2:ca1b5b911ba8 81 msd.mount() ;
DieterGraef 2:ca1b5b911ba8 82 error=1;
DieterGraef 2:ca1b5b911ba8 83 }
DieterGraef 2:ca1b5b911ba8 84
DieterGraef 2:ca1b5b911ba8 85 Thread::wait(500);
DieterGraef 2:ca1b5b911ba8 86
DieterGraef 2:ca1b5b911ba8 87 // if device disconnected, try to connect again
DieterGraef 2:ca1b5b911ba8 88 if (!msd.connected())
DieterGraef 2:ca1b5b911ba8 89 break;
DieterGraef 2:ca1b5b911ba8 90 }
DieterGraef 2:ca1b5b911ba8 91
DieterGraef 2:ca1b5b911ba8 92 }
DieterGraef 2:ca1b5b911ba8 93 }
DieterGraef 2:ca1b5b911ba8 94
DieterGraef 2:ca1b5b911ba8 95
DieterGraef 2:ca1b5b911ba8 96
DieterGraef 0:af2040964256 97 int main() {
DieterGraef 0:af2040964256 98 Thread mouseTask(mouse_task, NULL, osPriorityNormal, 256 * 4);
DieterGraef 2:ca1b5b911ba8 99 Thread msdTask(msd_task, NULL, osPriorityNormal, 1024 * 4);
DieterGraef 2:ca1b5b911ba8 100
DieterGraef 0:af2040964256 101 while(1) {
DieterGraef 0:af2040964256 102 led=!led;
DieterGraef 0:af2040964256 103 Thread::wait(500);
DieterGraef 0:af2040964256 104 }
DieterGraef 0:af2040964256 105 }
DieterGraef 0:af2040964256 106