![](/media/cache/profiles/ddcbe25988981920c872c1787382f04d.50x50_q85.jpg)
Android Open Accessory Library化してみました。 バルク転送の使い方が分かっていないため、相変わらず動作は不安定。 I do not understand the usage of the bulk transfer. Please teach someone.
demokit.cpp
00001 00002 #include "mbed.h" 00003 #include "USBHost.h" 00004 #include "AndroidAccessory.h" 00005 00006 00007 //device setup 00008 00009 PwmOut led1(LED1); 00010 PwmOut led2(LED2); 00011 PwmOut led3(LED3); 00012 PwmOut led4(LED4); 00013 00014 InterruptIn sw1(p21); 00015 InterruptIn sw2(p22); 00016 InterruptIn sw3(p23); 00017 00018 00019 /* 00020 DigitalIn sw1(p21); 00021 DigitalIn sw2(p22); 00022 DigitalIn sw3(p23); 00023 */ 00024 00025 00026 00027 class Demokit :public AndroidAccessory { 00028 public: 00029 Demokit():AndroidAccessory(3,3, 00030 "Google, Inc.", 00031 "DemoKit", 00032 "DemoKit Arduino Board", 00033 "1.0", 00034 "http://www.android.com", 00035 "0000000012345678") {}; 00036 virtual int callbackRead(u8 *buff, int len); 00037 virtual void setupDevice(); 00038 virtual void resetDevice(); 00039 void switchchk(); 00040 private: 00041 00042 u8 sw1b,sw2b,sw3b; //swich data 00043 }; 00044 00045 00046 00047 void Demokit::setupDevice() { 00048 sw1.mode(PullUp); 00049 sw2.mode(PullUp); 00050 sw3.mode(PullUp); 00051 sw1.rise(this,&Demokit::switchchk); 00052 sw1.fall(this,&Demokit::switchchk); 00053 sw2.rise(this,&Demokit::switchchk); 00054 sw2.fall(this,&Demokit::switchchk); 00055 sw3.rise(this,&Demokit::switchchk); 00056 sw3.fall(this,&Demokit::switchchk); 00057 sw1b=sw2b=sw3b=sw1; 00058 00059 } 00060 00061 00062 void Demokit::resetDevice() { 00063 led1=0; 00064 led2=0; 00065 led3=0; 00066 led4=0; 00067 } 00068 00069 int Demokit::callbackRead(u8 *buf, int len) { 00070 00071 00072 if (buf[0] == 0x2) { 00073 if (buf[1] == 0x0) { 00074 log("led1=%d\r\n",buf[2]); 00075 led1=((float)buf[2])/255.0; 00076 } else if (buf[1]==0x3) { 00077 led2=((float)buf[2])/255.0; 00078 } else if (buf[1]==0x6) { 00079 led3=((float)buf[2])/255.0; 00080 } 00081 } else if (buf[0] ==0x3) { 00082 if (buf[1] == 0x0) { 00083 led4=buf[2]? 1.0:0.0; 00084 } 00085 } 00086 00087 return 0; 00088 } 00089 00090 void Demokit::switchchk() { 00091 log("Demokit::switchchk()\r\n"); 00092 //int ret; 00093 __disable_irq(); 00094 00095 00096 u8* wbuf=_writebuff; 00097 wbuf[0]=0x01; 00098 //switch1 00099 if (sw1!=sw1b) { 00100 log("sw1=%d\r\n",sw1.read()); 00101 wbuf[1]=0; 00102 wbuf[2]=!sw1; 00103 this->write(); 00104 wait_ms(4); 00105 sw1b=sw1; 00106 //w_flag=true; 00107 } 00108 //switch2 00109 else if (sw2!=sw2b) { 00110 log("sw2=%d\r\n",sw2.read()); 00111 wbuf[1]=1; 00112 wbuf[2]=!sw2; 00113 this->write(); 00114 wait_ms(4); 00115 sw2b=sw2; 00116 //w_flag=true; 00117 } 00118 //switch3 00119 else if (sw3!=sw3b) { 00120 log("sw3=%d\r\n",sw3.read()); 00121 wbuf[1]=2; 00122 wbuf[2]=!sw3; 00123 this->write(); 00124 wait_ms(4); 00125 sw3b=sw3; 00126 // w_flag=true; 00127 } 00128 00129 else { 00130 wbuf[0]=wbuf[1]=wbuf[2]=0; 00131 this->write(); 00132 wait_ms(4); 00133 } 00134 00135 __enable_irq(); 00136 } 00137 00138 00139 00140 Demokit demokit; 00141 00142 int main() { 00143 printf("Android Development Kit: start\r\n"); 00144 USBInit(); 00145 while (1) { 00146 USBLoop(); 00147 //if(demokit.read(demokit._readbuff,demokit._readbuffsize)<0)demokit.adkEnd(); 00148 } 00149 00150 }
Generated on Thu Jul 14 2022 06:30:46 by
![doxygen](doxygen.png)