USB composite device example program, drag-and-drop flash writer.

Dependencies:   SWD USBDevice mbed BaseDAP

Committer:
va009039
Date:
Sat Sep 28 03:21:14 2013 +0000
Revision:
1:ea8e179320d7
add USBMSD_Drop class. add CDC(Virtual COM) and HID(for example CMSIS-DAP), but KL25Z not work.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 1:ea8e179320d7 1 // test_USBMSD2_HID.cpp 2013/9/28
va009039 1:ea8e179320d7 2 #if 0
va009039 1:ea8e179320d7 3 #include "mbed.h"
va009039 1:ea8e179320d7 4 #include "USBMSD_Drop.h"
va009039 1:ea8e179320d7 5 #include "BaseDAP.h"
va009039 1:ea8e179320d7 6 #define MY_DEBUG 1
va009039 1:ea8e179320d7 7 #include "mydebug.h"
va009039 1:ea8e179320d7 8 #include "mytest.h"
va009039 1:ea8e179320d7 9
va009039 1:ea8e179320d7 10 Serial pc(USBTX, USBRX);
va009039 1:ea8e179320d7 11
va009039 1:ea8e179320d7 12 #ifdef TARGET_LPC1768
va009039 1:ea8e179320d7 13 Serial target_uart(p9,p10); // RXD(dp15),TXD(dp16)
va009039 1:ea8e179320d7 14 SWD swd(p21,p22,p17); // SWDIO(dp12),SWCLK(dp3),nReset(dp23)
va009039 1:ea8e179320d7 15 DigitalOut connected(LED1);
va009039 1:ea8e179320d7 16 DigitalOut running(LED2);
va009039 1:ea8e179320d7 17 class myDAP : public BaseDAP {
va009039 1:ea8e179320d7 18 public:
va009039 1:ea8e179320d7 19 myDAP(SWD* swd):BaseDAP(swd){};
va009039 1:ea8e179320d7 20 virtual void infoLED(int select, int value) {
va009039 1:ea8e179320d7 21 switch(select) {
va009039 1:ea8e179320d7 22 case 0: connected = value; break;
va009039 1:ea8e179320d7 23 case 1: running = value; break;
va009039 1:ea8e179320d7 24 }
va009039 1:ea8e179320d7 25 }
va009039 1:ea8e179320d7 26 };
va009039 1:ea8e179320d7 27 #endif
va009039 1:ea8e179320d7 28
va009039 1:ea8e179320d7 29 #ifdef TARGET_KL25Z
va009039 1:ea8e179320d7 30 SWD swd(PTB8,PTB9,PTB10); // SWDIO(dp12),SWCLK(dp3),nReset(dp23)
va009039 1:ea8e179320d7 31 DigitalOut connected(LED_GREEN);
va009039 1:ea8e179320d7 32 DigitalOut running(LED_RED);
va009039 1:ea8e179320d7 33 class myDAP : public BaseDAP {
va009039 1:ea8e179320d7 34 public:
va009039 1:ea8e179320d7 35 myDAP(SWD* swd):BaseDAP(swd){};
va009039 1:ea8e179320d7 36 virtual void infoLED(int select, int value) {
va009039 1:ea8e179320d7 37 switch(select) {
va009039 1:ea8e179320d7 38 case 0:
va009039 1:ea8e179320d7 39 connected = value^1;
va009039 1:ea8e179320d7 40 running = 1;
va009039 1:ea8e179320d7 41 break;
va009039 1:ea8e179320d7 42 case 1:
va009039 1:ea8e179320d7 43 running = value^1;
va009039 1:ea8e179320d7 44 connected = 1;
va009039 1:ea8e179320d7 45 break;
va009039 1:ea8e179320d7 46 }
va009039 1:ea8e179320d7 47 }
va009039 1:ea8e179320d7 48 };
va009039 1:ea8e179320d7 49 #endif
va009039 1:ea8e179320d7 50
va009039 1:ea8e179320d7 51 class myUSBMSD_Drop : public USBMSD_Drop {
va009039 1:ea8e179320d7 52 public:
va009039 1:ea8e179320d7 53 virtual void Drop(const uint8_t* data, int len, int offset, int total) {
va009039 1:ea8e179320d7 54 TEST_PRINT("offset=%d, total=%d", offset, total);
va009039 1:ea8e179320d7 55 }
va009039 1:ea8e179320d7 56 };
va009039 1:ea8e179320d7 57
va009039 1:ea8e179320d7 58 HID_REPORT send_report;
va009039 1:ea8e179320d7 59 HID_REPORT recv_report;
va009039 1:ea8e179320d7 60
va009039 1:ea8e179320d7 61 myDAP* dap;
va009039 1:ea8e179320d7 62 myUSBMSD_Drop* hid;
va009039 1:ea8e179320d7 63
va009039 1:ea8e179320d7 64 TEST(USBMSD2_HID,test1) {
va009039 1:ea8e179320d7 65 dap = new myDAP(&swd);
va009039 1:ea8e179320d7 66 hid = new myUSBMSD_Drop();
va009039 1:ea8e179320d7 67 }
va009039 1:ea8e179320d7 68
va009039 1:ea8e179320d7 69 #if 0
va009039 1:ea8e179320d7 70 TEST(USBMSD2_HID,test2) {
va009039 1:ea8e179320d7 71 while(1) { // forever
va009039 1:ea8e179320d7 72 if(hid->readNB(&recv_report)) {
va009039 1:ea8e179320d7 73 dap->Command(recv_report.data, send_report.data);
va009039 1:ea8e179320d7 74 send_report.length = 64;
va009039 1:ea8e179320d7 75 hid->send(&send_report);
va009039 1:ea8e179320d7 76 }
va009039 1:ea8e179320d7 77 }
va009039 1:ea8e179320d7 78 }
va009039 1:ea8e179320d7 79 #endif
va009039 1:ea8e179320d7 80
va009039 1:ea8e179320d7 81 TEST(USBMSD2_HID,test3) {
va009039 1:ea8e179320d7 82 while(1) { // forever
va009039 1:ea8e179320d7 83 if(hid->readNB(&recv_report)) {
va009039 1:ea8e179320d7 84 dap->Command(recv_report.data, send_report.data);
va009039 1:ea8e179320d7 85 send_report.length = 64;
va009039 1:ea8e179320d7 86 hid->send(&send_report);
va009039 1:ea8e179320d7 87 }
va009039 1:ea8e179320d7 88 #ifdef TARGET_LPC1768
va009039 1:ea8e179320d7 89 if (target_uart.readable()) {
va009039 1:ea8e179320d7 90 hid->putc(target_uart.getc());
va009039 1:ea8e179320d7 91 }
va009039 1:ea8e179320d7 92 if(hid->readable()) {
va009039 1:ea8e179320d7 93 target_uart.putc(hid->getc());
va009039 1:ea8e179320d7 94 }
va009039 1:ea8e179320d7 95 #endif
va009039 1:ea8e179320d7 96 }
va009039 1:ea8e179320d7 97 }
va009039 1:ea8e179320d7 98
va009039 1:ea8e179320d7 99 int main() {
va009039 1:ea8e179320d7 100 pc.baud(921600);
va009039 1:ea8e179320d7 101 //pc.baud(9600);
va009039 1:ea8e179320d7 102 DBG("%s", __FILE__);
va009039 1:ea8e179320d7 103
va009039 1:ea8e179320d7 104 RUN_ALL_TESTS();
va009039 1:ea8e179320d7 105 exit(0);
va009039 1:ea8e179320d7 106 }
va009039 1:ea8e179320d7 107 #endif