A simple mbed+Android ADK etch-a-sketch example, see cookbook

Dependencies:  

Committer:
p07gbar
Date:
Mon Aug 01 09:53:08 2011 +0000
Revision:
0:1165b4e29af3
First publish

Who changed what in which revision?

UserRevisionLine numberNew contents of line
p07gbar 0:1165b4e29af3 1
p07gbar 0:1165b4e29af3 2 #include "mbed.h"
p07gbar 0:1165b4e29af3 3 #include "AndroidAccessory.h"
p07gbar 0:1165b4e29af3 4
p07gbar 0:1165b4e29af3 5
p07gbar 0:1165b4e29af3 6 //device setup
p07gbar 0:1165b4e29af3 7
p07gbar 0:1165b4e29af3 8 PwmOut led1(LED1);
p07gbar 0:1165b4e29af3 9 PwmOut led2(LED2);
p07gbar 0:1165b4e29af3 10 PwmOut led3(LED3);
p07gbar 0:1165b4e29af3 11 PwmOut led4(LED4);
p07gbar 0:1165b4e29af3 12
p07gbar 0:1165b4e29af3 13
p07gbar 0:1165b4e29af3 14
p07gbar 0:1165b4e29af3 15 DigitalOut ind(p21);
p07gbar 0:1165b4e29af3 16
p07gbar 0:1165b4e29af3 17
p07gbar 0:1165b4e29af3 18
p07gbar 0:1165b4e29af3 19 #define OUTL 100
p07gbar 0:1165b4e29af3 20 #define INBL 100
p07gbar 0:1165b4e29af3 21
p07gbar 0:1165b4e29af3 22
p07gbar 0:1165b4e29af3 23
p07gbar 0:1165b4e29af3 24
p07gbar 0:1165b4e29af3 25 class AdkTerm :public AndroidAccessory {
p07gbar 0:1165b4e29af3 26 public:
p07gbar 0:1165b4e29af3 27 AdkTerm():AndroidAccessory(INBL,OUTL,
p07gbar 0:1165b4e29af3 28 "ARM",
p07gbar 0:1165b4e29af3 29 "mbed",
p07gbar 0:1165b4e29af3 30 "mbed Terminal",
p07gbar 0:1165b4e29af3 31 "0.1",
p07gbar 0:1165b4e29af3 32 "http://www.mbed.org",
p07gbar 0:1165b4e29af3 33 "0000000012345678"),pc(USBTX,USBRX),Right(p19),Left(p20) {};
p07gbar 0:1165b4e29af3 34 virtual int callbackRead(u8 *buff, int len);
p07gbar 0:1165b4e29af3 35 virtual void setupDevice();
p07gbar 0:1165b4e29af3 36 virtual void resetDevice();
p07gbar 0:1165b4e29af3 37 virtual int callbackWrite();
p07gbar 0:1165b4e29af3 38
p07gbar 0:1165b4e29af3 39 private:
p07gbar 0:1165b4e29af3 40 void serialIRQ();
p07gbar 0:1165b4e29af3 41 void onTick();
p07gbar 0:1165b4e29af3 42 void AttachTick();
p07gbar 0:1165b4e29af3 43 char buffer[OUTL];
p07gbar 0:1165b4e29af3 44 int bcount;
p07gbar 0:1165b4e29af3 45 Serial pc;
p07gbar 0:1165b4e29af3 46 AnalogIn Right;
p07gbar 0:1165b4e29af3 47 AnalogIn Left;
p07gbar 0:1165b4e29af3 48 Ticker tick;
p07gbar 0:1165b4e29af3 49 float right,left,rl,ll;
p07gbar 0:1165b4e29af3 50 int tl,tr;
p07gbar 0:1165b4e29af3 51 Timeout n;
p07gbar 0:1165b4e29af3 52 bool settick;
p07gbar 0:1165b4e29af3 53 };
p07gbar 0:1165b4e29af3 54
p07gbar 0:1165b4e29af3 55
p07gbar 0:1165b4e29af3 56
p07gbar 0:1165b4e29af3 57 void AdkTerm::setupDevice() {
p07gbar 0:1165b4e29af3 58 pc.baud(112500);
p07gbar 0:1165b4e29af3 59 pc.printf("Welcome to adkTerm\n\n\n\n\n\n\r");
p07gbar 0:1165b4e29af3 60 settick = false;
p07gbar 0:1165b4e29af3 61 pc.attach(this, &AdkTerm::serialIRQ, Serial::RxIrq);
p07gbar 0:1165b4e29af3 62 for (int i = 0; i<OUTL; i++) {
p07gbar 0:1165b4e29af3 63 buffer[i] = 0;
p07gbar 0:1165b4e29af3 64 }
p07gbar 0:1165b4e29af3 65 bcount = 0;
p07gbar 0:1165b4e29af3 66 //n.attach(this,&AdkTerm::AttachTick,5);
p07gbar 0:1165b4e29af3 67 //tick.attach(this,&AdkTerm::onTick,0.1);
p07gbar 0:1165b4e29af3 68
p07gbar 0:1165b4e29af3 69
p07gbar 0:1165b4e29af3 70 }
p07gbar 0:1165b4e29af3 71
p07gbar 0:1165b4e29af3 72 void AdkTerm::AttachTick() {
p07gbar 0:1165b4e29af3 73 if(!settick)tick.attach(this,&AdkTerm::onTick,0.04);
p07gbar 0:1165b4e29af3 74 settick = true;
p07gbar 0:1165b4e29af3 75 }
p07gbar 0:1165b4e29af3 76
p07gbar 0:1165b4e29af3 77 void AdkTerm::onTick() {
p07gbar 0:1165b4e29af3 78 right = 1-Right;
p07gbar 0:1165b4e29af3 79 left = 1-Left;
p07gbar 0:1165b4e29af3 80 bool update = false;
p07gbar 0:1165b4e29af3 81 int templ, tempr;
p07gbar 0:1165b4e29af3 82
p07gbar 0:1165b4e29af3 83
p07gbar 0:1165b4e29af3 84
p07gbar 0:1165b4e29af3 85 templ = int(left * 10000);
p07gbar 0:1165b4e29af3 86 tempr = int(right * 10000);
p07gbar 0:1165b4e29af3 87
p07gbar 0:1165b4e29af3 88
p07gbar 0:1165b4e29af3 89
p07gbar 0:1165b4e29af3 90 if (abs(templ-tl)>170) {
p07gbar 0:1165b4e29af3 91 update = true;
p07gbar 0:1165b4e29af3 92 }
p07gbar 0:1165b4e29af3 93 if (abs(tempr-tr)>170) {
p07gbar 0:1165b4e29af3 94 update = true;
p07gbar 0:1165b4e29af3 95 }
p07gbar 0:1165b4e29af3 96 if (update) {
p07gbar 0:1165b4e29af3 97 u8* wbuf = _writebuff;
p07gbar 0:1165b4e29af3 98
p07gbar 0:1165b4e29af3 99 wbuf[0] = 'P';
p07gbar 0:1165b4e29af3 100 wbuf[1] = templ&0xFF;
p07gbar 0:1165b4e29af3 101 wbuf[2] = (templ>>8) & 0xFF;
p07gbar 0:1165b4e29af3 102 wbuf[3] = tempr&0xFF;
p07gbar 0:1165b4e29af3 103 wbuf[4] = (tempr>>8) & 0xFF;
p07gbar 0:1165b4e29af3 104 wbuf[5] = 0;
p07gbar 0:1165b4e29af3 105
p07gbar 0:1165b4e29af3 106 this->write(wbuf,5);
p07gbar 0:1165b4e29af3 107
p07gbar 0:1165b4e29af3 108
p07gbar 0:1165b4e29af3 109 }
p07gbar 0:1165b4e29af3 110 }
p07gbar 0:1165b4e29af3 111
p07gbar 0:1165b4e29af3 112 void AdkTerm::resetDevice() {
p07gbar 0:1165b4e29af3 113 pc.printf("adkTerm reset\n\r");
p07gbar 0:1165b4e29af3 114 for (int i = 0; i<OUTL; i++) {
p07gbar 0:1165b4e29af3 115 buffer[i] = 0;
p07gbar 0:1165b4e29af3 116 }
p07gbar 0:1165b4e29af3 117 bcount = 0;
p07gbar 0:1165b4e29af3 118 }
p07gbar 0:1165b4e29af3 119
p07gbar 0:1165b4e29af3 120 int AdkTerm::callbackRead(u8 *buf, int len) {
p07gbar 0:1165b4e29af3 121 pc.printf("%i %s\n\r\n\n\n",len,buf);
p07gbar 0:1165b4e29af3 122 for (int i = 0; i<INBL; i++) {
p07gbar 0:1165b4e29af3 123 buf[i] = 0;
p07gbar 0:1165b4e29af3 124 }
p07gbar 0:1165b4e29af3 125
p07gbar 0:1165b4e29af3 126 AttachTick();
p07gbar 0:1165b4e29af3 127
p07gbar 0:1165b4e29af3 128 return 0;
p07gbar 0:1165b4e29af3 129 }
p07gbar 0:1165b4e29af3 130
p07gbar 0:1165b4e29af3 131 int AdkTerm::callbackWrite() {
p07gbar 0:1165b4e29af3 132
p07gbar 0:1165b4e29af3 133 ind = false;
p07gbar 0:1165b4e29af3 134 return 0;
p07gbar 0:1165b4e29af3 135 }
p07gbar 0:1165b4e29af3 136
p07gbar 0:1165b4e29af3 137
p07gbar 0:1165b4e29af3 138 void AdkTerm::serialIRQ() {
p07gbar 0:1165b4e29af3 139 buffer[bcount] = pc.getc();
p07gbar 0:1165b4e29af3 140
p07gbar 0:1165b4e29af3 141 pc.putc(buffer[bcount]);
p07gbar 0:1165b4e29af3 142
p07gbar 0:1165b4e29af3 143 if (buffer[bcount] == '\n' || buffer[bcount] == '\r') {
p07gbar 0:1165b4e29af3 144 u8* wbuf = _writebuff;
p07gbar 0:1165b4e29af3 145 for (int i = 0; i<OUTL; i++) {
p07gbar 0:1165b4e29af3 146 wbuf[i] = buffer[i];
p07gbar 0:1165b4e29af3 147 buffer[i] = 0;
p07gbar 0:1165b4e29af3 148 }
p07gbar 0:1165b4e29af3 149 pc.printf("Sending: %s\n\r",wbuf);
p07gbar 0:1165b4e29af3 150 ind = true;
p07gbar 0:1165b4e29af3 151 this->write(wbuf,bcount);
p07gbar 0:1165b4e29af3 152 bcount = 0;
p07gbar 0:1165b4e29af3 153 } else {
p07gbar 0:1165b4e29af3 154 if (buffer[bcount] != 0x08 && buffer[bcount] != 0x7F ) {
p07gbar 0:1165b4e29af3 155 bcount++;
p07gbar 0:1165b4e29af3 156 if (bcount == OUTL) {
p07gbar 0:1165b4e29af3 157 bcount = 0;
p07gbar 0:1165b4e29af3 158 }
p07gbar 0:1165b4e29af3 159 } else {
p07gbar 0:1165b4e29af3 160 bcount--;
p07gbar 0:1165b4e29af3 161 }
p07gbar 0:1165b4e29af3 162 }
p07gbar 0:1165b4e29af3 163
p07gbar 0:1165b4e29af3 164 }
p07gbar 0:1165b4e29af3 165
p07gbar 0:1165b4e29af3 166
p07gbar 0:1165b4e29af3 167
p07gbar 0:1165b4e29af3 168 AdkTerm AdkTerm;
p07gbar 0:1165b4e29af3 169
p07gbar 0:1165b4e29af3 170
p07gbar 0:1165b4e29af3 171
p07gbar 0:1165b4e29af3 172 int main() {
p07gbar 0:1165b4e29af3 173
p07gbar 0:1165b4e29af3 174
p07gbar 0:1165b4e29af3 175
p07gbar 0:1165b4e29af3 176 AdkTerm.setupDevice();
p07gbar 0:1165b4e29af3 177 printf("Android Development Kit: start\r\n");
p07gbar 0:1165b4e29af3 178 USBInit();
p07gbar 0:1165b4e29af3 179 while (1) {
p07gbar 0:1165b4e29af3 180 USBLoop();
p07gbar 0:1165b4e29af3 181 }
p07gbar 0:1165b4e29af3 182
p07gbar 0:1165b4e29af3 183 }