Android Open Accessory Library化してみました。 バルク転送の使い方が分かっていないため、相変わらず動作は不安定。 I do not understand the usage of the bulk transfer. Please teach someone.

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers demokit.cpp Source File

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 }