touch screen handler for the microchip AR1020

Committer:
hlipka
Date:
Thu Feb 24 14:00:17 2011 +0000
Revision:
4:510ea5b28a05
Parent:
3:b7eb3b3fe79f
Child:
5:a5eba88e8c3e
better documentation
added power handling (AR1020 is switched on by this library now)
added touch area handler for easier creation of menus and the like

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hlipka 0:cf4dd04052e3 1 /*
hlipka 0:cf4dd04052e3 2 * mbed AR1020 library
hlipka 0:cf4dd04052e3 3 * Copyright (c) 2010 Hendrik Lipka
hlipka 0:cf4dd04052e3 4 *
hlipka 0:cf4dd04052e3 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
hlipka 0:cf4dd04052e3 6 * of this software and associated documentation files (the "Software"), to deal
hlipka 0:cf4dd04052e3 7 * in the Software without restriction, including without limitation the rights
hlipka 0:cf4dd04052e3 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
hlipka 0:cf4dd04052e3 9 * copies of the Software, and to permit persons to whom the Software is
hlipka 0:cf4dd04052e3 10 * furnished to do so, subject to the following conditions:
hlipka 0:cf4dd04052e3 11 *
hlipka 0:cf4dd04052e3 12 * The above copyright notice and this permission notice shall be included in
hlipka 0:cf4dd04052e3 13 * all copies or substantial portions of the Software.
hlipka 0:cf4dd04052e3 14 *
hlipka 0:cf4dd04052e3 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
hlipka 0:cf4dd04052e3 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
hlipka 0:cf4dd04052e3 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
hlipka 0:cf4dd04052e3 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
hlipka 0:cf4dd04052e3 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
hlipka 0:cf4dd04052e3 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
hlipka 0:cf4dd04052e3 21 * THE SOFTWARE.
hlipka 0:cf4dd04052e3 22 */
hlipka 0:cf4dd04052e3 23
hlipka 0:cf4dd04052e3 24 #include "ar1020.h"
hlipka 0:cf4dd04052e3 25 #include "wait_api.h"
hlipka 0:cf4dd04052e3 26
hlipka 4:510ea5b28a05 27 AR1020::AR1020(PinName mosi, PinName miso, PinName clk, PinName enable, PinName siq, PinName power) {
hlipka 0:cf4dd04052e3 28 _mosi=new DigitalOut(mosi);
hlipka 0:cf4dd04052e3 29 _miso=new DigitalIn(miso);
hlipka 0:cf4dd04052e3 30 _clk=new DigitalOut(clk);
hlipka 0:cf4dd04052e3 31 _clk->write(0);
hlipka 0:cf4dd04052e3 32
hlipka 0:cf4dd04052e3 33 _enable=new DigitalOut(enable);
hlipka 0:cf4dd04052e3 34 _enable->write(1);
hlipka 4:510ea5b28a05 35 _irq=new InterruptIn(siq);
hlipka 4:510ea5b28a05 36 _siq=new DigitalIn(siq);
hlipka 0:cf4dd04052e3 37 _x=-1;
hlipka 0:cf4dd04052e3 38 _y=-1;
hlipka 0:cf4dd04052e3 39 _pen=0;
hlipka 0:cf4dd04052e3 40 _oldPen=false;
hlipka 0:cf4dd04052e3 41 _led=new DigitalOut(LED1);
hlipka 1:264ad2a00fd9 42 _power=new DigitalOut(power);
hlipka 1:264ad2a00fd9 43 _power->write(0);
hlipka 0:cf4dd04052e3 44 }
hlipka 0:cf4dd04052e3 45
hlipka 2:1a436d154c84 46 AR1020::~AR1020() {
hlipka 0:cf4dd04052e3 47 delete _enable;
hlipka 0:cf4dd04052e3 48 delete _irq;
hlipka 0:cf4dd04052e3 49 }
hlipka 0:cf4dd04052e3 50
hlipka 2:1a436d154c84 51 void AR1020::init() {
hlipka 3:b7eb3b3fe79f 52 bool ok=false;
hlipka 3:b7eb3b3fe79f 53 while (!ok)
hlipka 3:b7eb3b3fe79f 54 {
hlipka 3:b7eb3b3fe79f 55 _power->write(0);
hlipka 3:b7eb3b3fe79f 56 wait_ms(200);
hlipka 3:b7eb3b3fe79f 57 _power->write(1);
hlipka 3:b7eb3b3fe79f 58 wait_ms(100);
hlipka 3:b7eb3b3fe79f 59 int r=cmd(0x13,NULL,0);
hlipka 3:b7eb3b3fe79f 60 printf("disable touch=%i\n",r);
hlipka 3:b7eb3b3fe79f 61 if (0!=r)
hlipka 3:b7eb3b3fe79f 62 continue;
hlipka 3:b7eb3b3fe79f 63
hlipka 3:b7eb3b3fe79f 64 int regStart=cmd(0x22,NULL,0);
hlipka 3:b7eb3b3fe79f 65 printf("reg offset=%i\n",regStart);
hlipka 3:b7eb3b3fe79f 66
hlipka 3:b7eb3b3fe79f 67 if (regStart<0)
hlipka 3:b7eb3b3fe79f 68 continue;
hlipka 3:b7eb3b3fe79f 69
hlipka 3:b7eb3b3fe79f 70 char cid2[4]={0x00,0x0d+regStart,0x01,0x01};
hlipka 3:b7eb3b3fe79f 71 r=cmd(0x21,cid2,4);
hlipka 3:b7eb3b3fe79f 72 printf("set mode=1 => %i\n",r);
hlipka 3:b7eb3b3fe79f 73 if (0!=r)
hlipka 3:b7eb3b3fe79f 74 continue;
hlipka 3:b7eb3b3fe79f 75
hlipka 3:b7eb3b3fe79f 76 r=cmd(0x12,NULL,0);
hlipka 3:b7eb3b3fe79f 77 printf("enable touch=%i\n",r);
hlipka 3:b7eb3b3fe79f 78 if (0!=r)
hlipka 3:b7eb3b3fe79f 79 continue;
hlipka 3:b7eb3b3fe79f 80 ok=true;
hlipka 3:b7eb3b3fe79f 81 }
hlipka 0:cf4dd04052e3 82 _irq->rise(this, &AR1020::read);
hlipka 0:cf4dd04052e3 83 }
hlipka 0:cf4dd04052e3 84
hlipka 2:1a436d154c84 85 int AR1020::x() {
hlipka 0:cf4dd04052e3 86 return _x;
hlipka 0:cf4dd04052e3 87 }
hlipka 0:cf4dd04052e3 88
hlipka 2:1a436d154c84 89 int AR1020::y() {
hlipka 0:cf4dd04052e3 90 return _y;
hlipka 0:cf4dd04052e3 91 }
hlipka 0:cf4dd04052e3 92
hlipka 2:1a436d154c84 93 int AR1020::pen() {
hlipka 0:cf4dd04052e3 94 return _pen;
hlipka 0:cf4dd04052e3 95 }
hlipka 0:cf4dd04052e3 96
hlipka 0:cf4dd04052e3 97
hlipka 2:1a436d154c84 98 void AR1020::read() {
hlipka 4:510ea5b28a05 99 while (1==_siq->read()) {
hlipka 2:1a436d154c84 100 _led->write(1);
hlipka 2:1a436d154c84 101 _enable->write(0);
hlipka 2:1a436d154c84 102 wait_us(60);
hlipka 2:1a436d154c84 103
hlipka 2:1a436d154c84 104 int pen=readByte();
hlipka 2:1a436d154c84 105 wait_us(60);
hlipka 2:1a436d154c84 106
hlipka 2:1a436d154c84 107 int xlo=readByte();
hlipka 2:1a436d154c84 108 wait_us(60);
hlipka 2:1a436d154c84 109
hlipka 2:1a436d154c84 110 int xhi=readByte();
hlipka 2:1a436d154c84 111 wait_us(60);
hlipka 2:1a436d154c84 112
hlipka 2:1a436d154c84 113 int ylo=readByte();
hlipka 2:1a436d154c84 114 wait_us(60);
hlipka 2:1a436d154c84 115
hlipka 2:1a436d154c84 116 int yhi=readByte();
hlipka 2:1a436d154c84 117 _enable->write(1);
hlipka 0:cf4dd04052e3 118
hlipka 0:cf4dd04052e3 119 // printf("0x%x|0x%x|0x%x|0x%x|0x%x\n", pen,xlo,xhi,ylo,yhi);
hlipka 2:1a436d154c84 120 if (0x4d==pen || 0==pen || 255==pen) {
hlipka 2:1a436d154c84 121 // ignore invalid stuff, do nothing...
hlipka 2:1a436d154c84 122 } else if (0x81!=pen&0x81) { // pen set?
hlipka 2:1a436d154c84 123 _pen=0;
hlipka 2:1a436d154c84 124 int x=xlo+(xhi<<7);
hlipka 2:1a436d154c84 125 int y=ylo+(yhi<<7);
hlipka 2:1a436d154c84 126 if (0!=x&&0!=y) {
hlipka 2:1a436d154c84 127 _x=x;
hlipka 2:1a436d154c84 128 _y=y;
hlipka 2:1a436d154c84 129 }
hlipka 2:1a436d154c84 130 } else {
hlipka 2:1a436d154c84 131 _pen=1;
hlipka 2:1a436d154c84 132 int x=xlo+(xhi<<7);
hlipka 2:1a436d154c84 133 int y=ylo+(yhi<<7);
hlipka 2:1a436d154c84 134 if (0!=x&&0!=y) {
hlipka 2:1a436d154c84 135 _x=x;
hlipka 2:1a436d154c84 136 _y=y;
hlipka 2:1a436d154c84 137 }
hlipka 0:cf4dd04052e3 138 }
hlipka 2:1a436d154c84 139 _event.x=_x;
hlipka 2:1a436d154c84 140 _event.y=_y;
hlipka 2:1a436d154c84 141 _event.pen=_pen;
hlipka 2:1a436d154c84 142 if (_pen==1 && _oldPen==false) { // pen down
hlipka 2:1a436d154c84 143 _callbackPD.call((uint32_t)&_event);
hlipka 2:1a436d154c84 144 } else if (_pen==1 && _oldPen==true) { // pen moved
hlipka 2:1a436d154c84 145 _callbackPM.call((uint32_t)&_event);
hlipka 2:1a436d154c84 146 } else if (_pen==0 && _oldPen==true) { // pen up
hlipka 2:1a436d154c84 147 _callbackPU.call((uint32_t)&_event);
hlipka 2:1a436d154c84 148 } else {
hlipka 2:1a436d154c84 149 // happens on the first touch (the first report is send with pen=0).
hlipka 2:1a436d154c84 150 }
hlipka 2:1a436d154c84 151 _oldPen=(_pen==1);
hlipka 2:1a436d154c84 152 _led->write(0);
hlipka 4:510ea5b28a05 153 if (1==_siq->read())
hlipka 2:1a436d154c84 154 wait_ms(5);
hlipka 0:cf4dd04052e3 155 }
hlipka 0:cf4dd04052e3 156 }
hlipka 0:cf4dd04052e3 157
hlipka 2:1a436d154c84 158 int AR1020::cmd(char cmd,char* data, int len, bool doEnable) {
hlipka 2:1a436d154c84 159 if (doEnable) {
hlipka 2:1a436d154c84 160 _enable->write(1);
hlipka 2:1a436d154c84 161 wait_us(1000);
hlipka 2:1a436d154c84 162 _enable->write(0);
hlipka 2:1a436d154c84 163 }
hlipka 2:1a436d154c84 164
hlipka 0:cf4dd04052e3 165 wait_us(10);
hlipka 2:1a436d154c84 166
hlipka 0:cf4dd04052e3 167 writeByte(0x55);
hlipka 0:cf4dd04052e3 168 wait_us(100);
hlipka 2:1a436d154c84 169
hlipka 0:cf4dd04052e3 170 writeByte(len+1);
hlipka 0:cf4dd04052e3 171 wait_us(100);
hlipka 2:1a436d154c84 172
hlipka 0:cf4dd04052e3 173 writeByte(cmd);
hlipka 0:cf4dd04052e3 174 wait_us(100);
hlipka 2:1a436d154c84 175
hlipka 2:1a436d154c84 176 for (int i=0;i<len;i++) {
hlipka 0:cf4dd04052e3 177 writeByte(data[i]);
hlipka 0:cf4dd04052e3 178 wait_us(100);
hlipka 0:cf4dd04052e3 179 }
hlipka 0:cf4dd04052e3 180 Timer t;
hlipka 0:cf4dd04052e3 181 t.start();
hlipka 2:1a436d154c84 182 while (true) {
hlipka 2:1a436d154c84 183 wait_us(100);
hlipka 4:510ea5b28a05 184 if (1==_siq->read())
hlipka 2:1a436d154c84 185 break;
hlipka 2:1a436d154c84 186 if (t.read_ms()>1)
hlipka 2:1a436d154c84 187 break;
hlipka 0:cf4dd04052e3 188 }
hlipka 0:cf4dd04052e3 189 char rhead=readByte();
hlipka 0:cf4dd04052e3 190 wait_us(100);
hlipka 2:1a436d154c84 191 if (rhead!=0x55) {
hlipka 2:1a436d154c84 192 if (doEnable)
hlipka 2:1a436d154c84 193 _enable->write(1);
hlipka 0:cf4dd04052e3 194 printf("rh=0x%x\n",rhead);
hlipka 0:cf4dd04052e3 195 return -1000;
hlipka 0:cf4dd04052e3 196 }
hlipka 0:cf4dd04052e3 197 char rlen=readByte();
hlipka 0:cf4dd04052e3 198 wait_us(100);
hlipka 2:1a436d154c84 199 if (rlen==2) {
hlipka 0:cf4dd04052e3 200 char r=readByte();
hlipka 0:cf4dd04052e3 201 wait_us(100);
hlipka 0:cf4dd04052e3 202 char rc=readByte();
hlipka 0:cf4dd04052e3 203 wait_us(100);
hlipka 2:1a436d154c84 204 if (doEnable)
hlipka 2:1a436d154c84 205 _enable->write(1);
hlipka 0:cf4dd04052e3 206 if (rc!=cmd)
hlipka 0:cf4dd04052e3 207 return -2000;
hlipka 0:cf4dd04052e3 208 return -r;
hlipka 2:1a436d154c84 209 } else if (rlen==3) {
hlipka 0:cf4dd04052e3 210 char r=readByte();
hlipka 0:cf4dd04052e3 211 wait_us(100);
hlipka 0:cf4dd04052e3 212 char rc=readByte();
hlipka 0:cf4dd04052e3 213 wait_us(100);
hlipka 2:1a436d154c84 214 if (rc!=cmd) {
hlipka 2:1a436d154c84 215 if (doEnable)
hlipka 2:1a436d154c84 216 _enable->write(1);
hlipka 0:cf4dd04052e3 217 return -3000;
hlipka 0:cf4dd04052e3 218 }
hlipka 0:cf4dd04052e3 219 char rd=readByte();
hlipka 0:cf4dd04052e3 220 wait_us(100);
hlipka 2:1a436d154c84 221 if (doEnable)
hlipka 2:1a436d154c84 222 _enable->write(1);
hlipka 0:cf4dd04052e3 223 if (r==0)
hlipka 0:cf4dd04052e3 224 return rd;
hlipka 0:cf4dd04052e3 225 return -r;
hlipka 2:1a436d154c84 226 } else {
hlipka 2:1a436d154c84 227 if (doEnable)
hlipka 2:1a436d154c84 228 _enable->write(1);
hlipka 0:cf4dd04052e3 229 return -4000;
hlipka 0:cf4dd04052e3 230 }
hlipka 0:cf4dd04052e3 231 }
hlipka 2:1a436d154c84 232 void AR1020::calibrate() {
hlipka 0:cf4dd04052e3 233 _irq->rise(NULL);
hlipka 0:cf4dd04052e3 234
hlipka 0:cf4dd04052e3 235 DigitalOut led1(LED1);
hlipka 0:cf4dd04052e3 236 DigitalOut led2(LED2);
hlipka 0:cf4dd04052e3 237 DigitalOut led3(LED3);
hlipka 0:cf4dd04052e3 238 DigitalOut led4(LED4);
hlipka 2:1a436d154c84 239 led1=0;
hlipka 2:1a436d154c84 240 led2=0;
hlipka 2:1a436d154c84 241 led3=1;
hlipka 2:1a436d154c84 242 led4=1;
hlipka 2:1a436d154c84 243
hlipka 2:1a436d154c84 244 int r=cmd(0x13,NULL,0);
hlipka 0:cf4dd04052e3 245 printf("disable touch=%i\n",r);
hlipka 0:cf4dd04052e3 246 wait_ms(100);
hlipka 0:cf4dd04052e3 247 if (r<0)
hlipka 0:cf4dd04052e3 248 return;
hlipka 0:cf4dd04052e3 249 led4=0;
hlipka 2:1a436d154c84 250
hlipka 0:cf4dd04052e3 251 int regStart=cmd(0x22,NULL,0);
hlipka 0:cf4dd04052e3 252 printf("reg offset=%i\n",regStart);
hlipka 0:cf4dd04052e3 253
hlipka 0:cf4dd04052e3 254 char cid[3]={0x00,0x0d+regStart,0x01};
hlipka 0:cf4dd04052e3 255 int mode=cmd(0x20,cid,3);
hlipka 0:cf4dd04052e3 256 printf("mode=%i\n",mode);
hlipka 0:cf4dd04052e3 257
hlipka 0:cf4dd04052e3 258 if (regStart<0)
hlipka 0:cf4dd04052e3 259 return;
hlipka 0:cf4dd04052e3 260 printf("start calibrate\n");
hlipka 2:1a436d154c84 261 led3=0;
hlipka 0:cf4dd04052e3 262 char cid2[4]={0x00,0x0e+regStart,0x01,0x19};
hlipka 0:cf4dd04052e3 263 r=cmd(0x21,cid2,4);
hlipka 0:cf4dd04052e3 264 printf("set inset=%i\n",r);
hlipka 0:cf4dd04052e3 265 if (r<0)
hlipka 0:cf4dd04052e3 266 return;
hlipka 0:cf4dd04052e3 267
hlipka 0:cf4dd04052e3 268 _enable->write(1);
hlipka 2:1a436d154c84 269 wait_us(100);
hlipka 0:cf4dd04052e3 270 _enable->write(0);
hlipka 0:cf4dd04052e3 271 wait_us(10);
hlipka 2:1a436d154c84 272 char cid3[1]={0x04};
hlipka 2:1a436d154c84 273 cmd(0x14,cid3,1,false);
hlipka 2:1a436d154c84 274
hlipka 2:1a436d154c84 275 wait_ms(1);
hlipka 0:cf4dd04052e3 276
hlipka 0:cf4dd04052e3 277 int resp=readCalibResponse();
hlipka 0:cf4dd04052e3 278 printf("status=%i\n",resp);
hlipka 0:cf4dd04052e3 279 printf("start OK, press upper left");
hlipka 0:cf4dd04052e3 280 led1=1;
hlipka 0:cf4dd04052e3 281 resp=readCalibResponse();
hlipka 0:cf4dd04052e3 282 printf("status=%i\n",resp);
hlipka 0:cf4dd04052e3 283 printf("press upper right");
hlipka 0:cf4dd04052e3 284 led2=1;
hlipka 0:cf4dd04052e3 285 resp=readCalibResponse();
hlipka 0:cf4dd04052e3 286 printf("status=%i\n",resp);
hlipka 0:cf4dd04052e3 287 printf("press lower right");
hlipka 0:cf4dd04052e3 288 led3=1;
hlipka 0:cf4dd04052e3 289 resp=readCalibResponse();
hlipka 0:cf4dd04052e3 290 printf("status=%i\n",resp);
hlipka 0:cf4dd04052e3 291 printf("press lower left");
hlipka 0:cf4dd04052e3 292 led4=1;
hlipka 0:cf4dd04052e3 293 resp=readCalibResponse();
hlipka 0:cf4dd04052e3 294 printf("status=%i\n",resp);
hlipka 2:1a436d154c84 295
hlipka 2:1a436d154c84 296 _enable->write(1);
hlipka 2:1a436d154c84 297
hlipka 2:1a436d154c84 298 r=cmd(0x23,NULL,0);
hlipka 2:1a436d154c84 299 printf("save registers=%i\n",r);
hlipka 2:1a436d154c84 300
hlipka 2:1a436d154c84 301 r=cmd(0x12,NULL,0);
hlipka 0:cf4dd04052e3 302 printf("enable touch=%i\n",r);
hlipka 2:1a436d154c84 303
hlipka 0:cf4dd04052e3 304 _irq->rise(this, &AR1020::read);
hlipka 2:1a436d154c84 305
hlipka 0:cf4dd04052e3 306 }
hlipka 0:cf4dd04052e3 307
hlipka 2:1a436d154c84 308 int AR1020::readCalibResponse() {
hlipka 2:1a436d154c84 309 while (true) {
hlipka 0:cf4dd04052e3 310 int r=readByte();
hlipka 2:1a436d154c84 311 if (r!=0x55) {
hlipka 2:1a436d154c84 312 // printf("1=0x%x\n",r);
hlipka 0:cf4dd04052e3 313 wait_ms(100);
hlipka 0:cf4dd04052e3 314 continue;
hlipka 0:cf4dd04052e3 315 }
hlipka 0:cf4dd04052e3 316
hlipka 0:cf4dd04052e3 317 r=readByte();
hlipka 0:cf4dd04052e3 318 wait_us(100);
hlipka 2:1a436d154c84 319 if (r!=0x02) {
hlipka 0:cf4dd04052e3 320 printf("2=0x%x\n",r);
hlipka 0:cf4dd04052e3 321 continue;
hlipka 0:cf4dd04052e3 322 }
hlipka 2:1a436d154c84 323
hlipka 0:cf4dd04052e3 324 r=readByte();
hlipka 0:cf4dd04052e3 325 wait_us(100);
hlipka 2:1a436d154c84 326 if (r!=0x00) {
hlipka 0:cf4dd04052e3 327 printf("3=0x%x\n",r);
hlipka 0:cf4dd04052e3 328 continue;
hlipka 0:cf4dd04052e3 329 }
hlipka 0:cf4dd04052e3 330 int rc=readByte();
hlipka 0:cf4dd04052e3 331 wait_us(100);
hlipka 2:1a436d154c84 332 if (rc!=0x14) {
hlipka 0:cf4dd04052e3 333 printf("4=0x%x\n",r);
hlipka 0:cf4dd04052e3 334 continue;
hlipka 0:cf4dd04052e3 335 }
hlipka 2:1a436d154c84 336
hlipka 0:cf4dd04052e3 337 return r;
hlipka 0:cf4dd04052e3 338 }
hlipka 0:cf4dd04052e3 339 }
hlipka 0:cf4dd04052e3 340
hlipka 2:1a436d154c84 341 int AR1020::readByte() {
hlipka 0:cf4dd04052e3 342 _clk->write(0);
hlipka 0:cf4dd04052e3 343 wait_us(10);
hlipka 0:cf4dd04052e3 344 int r=0;
hlipka 2:1a436d154c84 345 for (int i=0;i<8;i++) {
hlipka 0:cf4dd04052e3 346 r=r<<1;
hlipka 0:cf4dd04052e3 347 _clk->write(1);
hlipka 0:cf4dd04052e3 348 wait_us(10);
hlipka 0:cf4dd04052e3 349 _clk->write(0);
hlipka 0:cf4dd04052e3 350 wait_us(10);
hlipka 0:cf4dd04052e3 351 int bit=_miso->read();
hlipka 0:cf4dd04052e3 352 r+=bit;
hlipka 0:cf4dd04052e3 353 }
hlipka 0:cf4dd04052e3 354 // printf("<-%i\n",r);
hlipka 0:cf4dd04052e3 355 return r;
hlipka 0:cf4dd04052e3 356 }
hlipka 0:cf4dd04052e3 357
hlipka 2:1a436d154c84 358 void AR1020::writeByte(char byte) {
hlipka 0:cf4dd04052e3 359 _clk->write(0);
hlipka 0:cf4dd04052e3 360 wait_us(10);
hlipka 0:cf4dd04052e3 361 // printf("->0x%x\n",byte);
hlipka 2:1a436d154c84 362 for (int i=0;i<8;i++) {
hlipka 0:cf4dd04052e3 363 int bit=byte>127;
hlipka 0:cf4dd04052e3 364 // printf("%i",bit);
hlipka 0:cf4dd04052e3 365 _clk->write(1);
hlipka 0:cf4dd04052e3 366 wait_us(10);
hlipka 0:cf4dd04052e3 367 _mosi->write(bit);
hlipka 0:cf4dd04052e3 368 wait_us(10);
hlipka 0:cf4dd04052e3 369 _clk->write(0);
hlipka 0:cf4dd04052e3 370 wait_us(10);
hlipka 0:cf4dd04052e3 371 byte=(char)(byte<<1);
hlipka 0:cf4dd04052e3 372
hlipka 0:cf4dd04052e3 373 }
hlipka 0:cf4dd04052e3 374 // printf("\n");
hlipka 0:cf4dd04052e3 375 }