Android Open Accessory Library化してみました。 バルク転送の使い方が分かっていないため、相変わらず動作は不安定。 I do not understand the usage of the bulk transfer. Please teach someone.
Diff: demokit.cpp
- Revision:
- 0:4fcfc05943ff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/demokit.cpp Fri Jun 03 17:43:15 2011 +0000 @@ -0,0 +1,150 @@ + +#include "mbed.h" +#include "USBHost.h" +#include "AndroidAccessory.h" + + +//device setup + +PwmOut led1(LED1); +PwmOut led2(LED2); +PwmOut led3(LED3); +PwmOut led4(LED4); + +InterruptIn sw1(p21); +InterruptIn sw2(p22); +InterruptIn sw3(p23); + + +/* +DigitalIn sw1(p21); +DigitalIn sw2(p22); +DigitalIn sw3(p23); +*/ + + + +class Demokit :public AndroidAccessory { +public: + Demokit():AndroidAccessory(3,3, + "Google, Inc.", + "DemoKit", + "DemoKit Arduino Board", + "1.0", + "http://www.android.com", + "0000000012345678") {}; + virtual int callbackRead(u8 *buff, int len); + virtual void setupDevice(); + virtual void resetDevice(); + void switchchk(); +private: + + u8 sw1b,sw2b,sw3b; //swich data +}; + + + +void Demokit::setupDevice() { + sw1.mode(PullUp); + sw2.mode(PullUp); + sw3.mode(PullUp); + sw1.rise(this,&Demokit::switchchk); + sw1.fall(this,&Demokit::switchchk); + sw2.rise(this,&Demokit::switchchk); + sw2.fall(this,&Demokit::switchchk); + sw3.rise(this,&Demokit::switchchk); + sw3.fall(this,&Demokit::switchchk); + sw1b=sw2b=sw3b=sw1; + +} + + +void Demokit::resetDevice() { + led1=0; + led2=0; + led3=0; + led4=0; +} + +int Demokit::callbackRead(u8 *buf, int len) { + + + if (buf[0] == 0x2) { + if (buf[1] == 0x0) { + log("led1=%d\r\n",buf[2]); + led1=((float)buf[2])/255.0; + } else if (buf[1]==0x3) { + led2=((float)buf[2])/255.0; + } else if (buf[1]==0x6) { + led3=((float)buf[2])/255.0; + } + } else if (buf[0] ==0x3) { + if (buf[1] == 0x0) { + led4=buf[2]? 1.0:0.0; + } + } + + return 0; +} + +void Demokit::switchchk() { + log("Demokit::switchchk()\r\n"); + //int ret; + __disable_irq(); + + + u8* wbuf=_writebuff; + wbuf[0]=0x01; + //switch1 + if (sw1!=sw1b) { + log("sw1=%d\r\n",sw1.read()); + wbuf[1]=0; + wbuf[2]=!sw1; + this->write(); + wait_ms(4); + sw1b=sw1; + //w_flag=true; + } + //switch2 + else if (sw2!=sw2b) { + log("sw2=%d\r\n",sw2.read()); + wbuf[1]=1; + wbuf[2]=!sw2; + this->write(); + wait_ms(4); + sw2b=sw2; + //w_flag=true; + } + //switch3 + else if (sw3!=sw3b) { + log("sw3=%d\r\n",sw3.read()); + wbuf[1]=2; + wbuf[2]=!sw3; + this->write(); + wait_ms(4); + sw3b=sw3; + // w_flag=true; + } + + else { + wbuf[0]=wbuf[1]=wbuf[2]=0; + this->write(); + wait_ms(4); + } + + __enable_irq(); +} + + + +Demokit demokit; + +int main() { + printf("Android Development Kit: start\r\n"); + USBInit(); + while (1) { + USBLoop(); + //if(demokit.read(demokit._readbuff,demokit._readbuffsize)<0)demokit.adkEnd(); + } + +}