APP3 / Mbed 2 deprecated com_xbee

Dependencies:   mbed mbed-rtos

Committer:
ShaolinPoutine
Date:
Mon Feb 13 17:42:31 2017 +0000
Revision:
1:318ad4f36a90
Parent:
0:25f9d14d01bd
Child:
2:c6d623a30254
Child:
3:5010d20e681f
Added asynchronous read.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ShaolinPoutine 0:25f9d14d01bd 1 #include "mbed.h"
ShaolinPoutine 0:25f9d14d01bd 2 #define FRAMEDELIMITER 0x7E
ShaolinPoutine 1:318ad4f36a90 3 #include "rtos.h"
ShaolinPoutine 0:25f9d14d01bd 4
ShaolinPoutine 1:318ad4f36a90 5 // 4269
ShaolinPoutine 0:25f9d14d01bd 6 DigitalOut resetswitch(p8);
ShaolinPoutine 0:25f9d14d01bd 7 Serial xbee(p13, p14);
ShaolinPoutine 0:25f9d14d01bd 8 Serial pc(USBTX, USBRX);
ShaolinPoutine 0:25f9d14d01bd 9 DigitalOut myled(LED1);
ShaolinPoutine 0:25f9d14d01bd 10
ShaolinPoutine 0:25f9d14d01bd 11 int StartAPIMode ()
ShaolinPoutine 0:25f9d14d01bd 12 {
ShaolinPoutine 0:25f9d14d01bd 13 char reponse[4] = {42,42,42,'\0'};
ShaolinPoutine 0:25f9d14d01bd 14
ShaolinPoutine 0:25f9d14d01bd 15 wait(1);
ShaolinPoutine 0:25f9d14d01bd 16 xbee.putc('+');
ShaolinPoutine 0:25f9d14d01bd 17 xbee.putc('+');
ShaolinPoutine 0:25f9d14d01bd 18 xbee.putc('+');
ShaolinPoutine 0:25f9d14d01bd 19 wait(0.5);
ShaolinPoutine 0:25f9d14d01bd 20
ShaolinPoutine 0:25f9d14d01bd 21 int i = 0;
ShaolinPoutine 0:25f9d14d01bd 22
ShaolinPoutine 0:25f9d14d01bd 23 while (i < 4)
ShaolinPoutine 0:25f9d14d01bd 24 {
ShaolinPoutine 0:25f9d14d01bd 25 reponse[i] = xbee.getc();
ShaolinPoutine 0:25f9d14d01bd 26 pc.putc(reponse[i]);
ShaolinPoutine 0:25f9d14d01bd 27 i++;
ShaolinPoutine 0:25f9d14d01bd 28 }
ShaolinPoutine 0:25f9d14d01bd 29
ShaolinPoutine 0:25f9d14d01bd 30 return reponse[1];
ShaolinPoutine 0:25f9d14d01bd 31 }
ShaolinPoutine 0:25f9d14d01bd 32
ShaolinPoutine 0:25f9d14d01bd 33 int CalculateChecksum()
ShaolinPoutine 0:25f9d14d01bd 34 {
ShaolinPoutine 0:25f9d14d01bd 35 // Does not include frame delimiter and lenght
ShaolinPoutine 0:25f9d14d01bd 36 return 1;
ShaolinPoutine 0:25f9d14d01bd 37 }
ShaolinPoutine 0:25f9d14d01bd 38
ShaolinPoutine 0:25f9d14d01bd 39 int CalculateLenght()
ShaolinPoutine 0:25f9d14d01bd 40 {
ShaolinPoutine 0:25f9d14d01bd 41 // Calculate the number of bytes in the frame data
ShaolinPoutine 0:25f9d14d01bd 42 return 1;
ShaolinPoutine 0:25f9d14d01bd 43 }
ShaolinPoutine 0:25f9d14d01bd 44
ShaolinPoutine 0:25f9d14d01bd 45 void printhexa(char c)
ShaolinPoutine 0:25f9d14d01bd 46 {
ShaolinPoutine 0:25f9d14d01bd 47 char msb = c >> 4;
ShaolinPoutine 0:25f9d14d01bd 48 char lsb = c & 0xF;
ShaolinPoutine 0:25f9d14d01bd 49
ShaolinPoutine 0:25f9d14d01bd 50 if (msb < 10)
ShaolinPoutine 0:25f9d14d01bd 51 msb += 0x30;
ShaolinPoutine 0:25f9d14d01bd 52 else
ShaolinPoutine 0:25f9d14d01bd 53 msb += 0x37;
ShaolinPoutine 0:25f9d14d01bd 54
ShaolinPoutine 0:25f9d14d01bd 55 if (lsb < 10)
ShaolinPoutine 0:25f9d14d01bd 56 lsb += 0x30;
ShaolinPoutine 0:25f9d14d01bd 57 else
ShaolinPoutine 0:25f9d14d01bd 58 lsb += 0x37;
ShaolinPoutine 0:25f9d14d01bd 59
ShaolinPoutine 0:25f9d14d01bd 60 pc.putc('0');
ShaolinPoutine 0:25f9d14d01bd 61 pc.putc('x');
ShaolinPoutine 0:25f9d14d01bd 62 pc.putc(msb);
ShaolinPoutine 0:25f9d14d01bd 63 pc.putc(lsb);
ShaolinPoutine 0:25f9d14d01bd 64 pc.putc(' ');
ShaolinPoutine 0:25f9d14d01bd 65 }
ShaolinPoutine 0:25f9d14d01bd 66
ShaolinPoutine 0:25f9d14d01bd 67 void GetATResponse()
ShaolinPoutine 0:25f9d14d01bd 68 {
ShaolinPoutine 0:25f9d14d01bd 69 char start = xbee.getc(); // = FRAMEDELIMITER
ShaolinPoutine 0:25f9d14d01bd 70 //assert
ShaolinPoutine 0:25f9d14d01bd 71 char len_msb = xbee.getc();
ShaolinPoutine 0:25f9d14d01bd 72 char len_lsb = xbee.getc();
ShaolinPoutine 1:318ad4f36a90 73
ShaolinPoutine 0:25f9d14d01bd 74 int len = ((int) len_msb << 4) + (int) len_lsb;
ShaolinPoutine 0:25f9d14d01bd 75 char frame_data[len];
ShaolinPoutine 0:25f9d14d01bd 76 int i = 0;
ShaolinPoutine 0:25f9d14d01bd 77 pc.printf("%d : ", len);
ShaolinPoutine 0:25f9d14d01bd 78 while (i < len)
ShaolinPoutine 0:25f9d14d01bd 79 {
ShaolinPoutine 0:25f9d14d01bd 80 if (xbee.readable())
ShaolinPoutine 1:318ad4f36a90 81 {
ShaolinPoutine 0:25f9d14d01bd 82 frame_data[i] = xbee.getc();
ShaolinPoutine 0:25f9d14d01bd 83 printhexa(frame_data[i]);
ShaolinPoutine 1:318ad4f36a90 84 i++;
ShaolinPoutine 0:25f9d14d01bd 85 }
ShaolinPoutine 0:25f9d14d01bd 86 }
ShaolinPoutine 0:25f9d14d01bd 87
ShaolinPoutine 0:25f9d14d01bd 88 char checksum = xbee.getc();
ShaolinPoutine 0:25f9d14d01bd 89 // Verify checksum
ShaolinPoutine 1:318ad4f36a90 90 pc.printf(" checksum = ");
ShaolinPoutine 1:318ad4f36a90 91 printhexa(checksum);
ShaolinPoutine 0:25f9d14d01bd 92 pc.printf("\r\n");
ShaolinPoutine 0:25f9d14d01bd 93 }
ShaolinPoutine 0:25f9d14d01bd 94
ShaolinPoutine 0:25f9d14d01bd 95 void ReadSerial()
ShaolinPoutine 0:25f9d14d01bd 96 {
ShaolinPoutine 0:25f9d14d01bd 97 // 00 13 A2 00
ShaolinPoutine 0:25f9d14d01bd 98 // 40 3E 09 63
ShaolinPoutine 0:25f9d14d01bd 99 char cmdtosend[8];
ShaolinPoutine 0:25f9d14d01bd 100 int i = 0;
ShaolinPoutine 0:25f9d14d01bd 101
ShaolinPoutine 0:25f9d14d01bd 102 cmdtosend[0] = FRAMEDELIMITER;
ShaolinPoutine 0:25f9d14d01bd 103 cmdtosend[1] = 0x00;
ShaolinPoutine 0:25f9d14d01bd 104 cmdtosend[2] = 0x04;
ShaolinPoutine 0:25f9d14d01bd 105 cmdtosend[3] = 0x08;
ShaolinPoutine 0:25f9d14d01bd 106 cmdtosend[4] = 0x52;
ShaolinPoutine 0:25f9d14d01bd 107 cmdtosend[5] = 'S'; // 0x53
ShaolinPoutine 1:318ad4f36a90 108 cmdtosend[6] = 'L'; // 0x48
ShaolinPoutine 0:25f9d14d01bd 109 cmdtosend[7] = 0xFF - (cmdtosend[3]+cmdtosend[4]+cmdtosend[5]+cmdtosend[6]);
ShaolinPoutine 0:25f9d14d01bd 110
ShaolinPoutine 0:25f9d14d01bd 111 while (i < 8)
ShaolinPoutine 0:25f9d14d01bd 112 {
ShaolinPoutine 0:25f9d14d01bd 113 xbee.putc(cmdtosend[i]);
ShaolinPoutine 0:25f9d14d01bd 114 i++;
ShaolinPoutine 0:25f9d14d01bd 115 }
ShaolinPoutine 0:25f9d14d01bd 116
ShaolinPoutine 1:318ad4f36a90 117 wait(0.5);
ShaolinPoutine 1:318ad4f36a90 118 i = 0;
ShaolinPoutine 0:25f9d14d01bd 119 cmdtosend[0] = FRAMEDELIMITER;
ShaolinPoutine 0:25f9d14d01bd 120 cmdtosend[1] = 0x00;
ShaolinPoutine 0:25f9d14d01bd 121 cmdtosend[2] = 0x04;
ShaolinPoutine 0:25f9d14d01bd 122 cmdtosend[3] = 0x08;
ShaolinPoutine 0:25f9d14d01bd 123 cmdtosend[4] = 0x52;
ShaolinPoutine 0:25f9d14d01bd 124 cmdtosend[5] = 'S'; // 0x53
ShaolinPoutine 1:318ad4f36a90 125 cmdtosend[6] = 'H'; // 0x48
ShaolinPoutine 0:25f9d14d01bd 126 cmdtosend[7] = 0xFF - (cmdtosend[3]+cmdtosend[4]+cmdtosend[5]+cmdtosend[6]);
ShaolinPoutine 0:25f9d14d01bd 127
ShaolinPoutine 0:25f9d14d01bd 128 while (i < 8)
ShaolinPoutine 0:25f9d14d01bd 129 {
ShaolinPoutine 0:25f9d14d01bd 130 xbee.putc(cmdtosend[i]);
ShaolinPoutine 0:25f9d14d01bd 131 i++;
ShaolinPoutine 0:25f9d14d01bd 132 }
ShaolinPoutine 0:25f9d14d01bd 133 }
ShaolinPoutine 0:25f9d14d01bd 134
ShaolinPoutine 0:25f9d14d01bd 135
ShaolinPoutine 1:318ad4f36a90 136 void xbee_reader()
ShaolinPoutine 1:318ad4f36a90 137 {
ShaolinPoutine 1:318ad4f36a90 138 while(1)
ShaolinPoutine 1:318ad4f36a90 139 {
ShaolinPoutine 1:318ad4f36a90 140 if (xbee.readable())
ShaolinPoutine 1:318ad4f36a90 141 {
ShaolinPoutine 1:318ad4f36a90 142 GetATResponse();
ShaolinPoutine 1:318ad4f36a90 143 }
ShaolinPoutine 1:318ad4f36a90 144 wait(0.001);
ShaolinPoutine 1:318ad4f36a90 145 }
ShaolinPoutine 1:318ad4f36a90 146 }
ShaolinPoutine 1:318ad4f36a90 147
ShaolinPoutine 1:318ad4f36a90 148 void tick()
ShaolinPoutine 1:318ad4f36a90 149 {
ShaolinPoutine 1:318ad4f36a90 150 myled = !myled;
ShaolinPoutine 1:318ad4f36a90 151 }
ShaolinPoutine 1:318ad4f36a90 152
ShaolinPoutine 0:25f9d14d01bd 153 int main() {
ShaolinPoutine 1:318ad4f36a90 154 Thread thread(xbee_reader);
ShaolinPoutine 1:318ad4f36a90 155 Ticker ticker;
ShaolinPoutine 1:318ad4f36a90 156 ticker.attach(&tick, 1);
ShaolinPoutine 0:25f9d14d01bd 157 pc.printf("\r\n");
ShaolinPoutine 0:25f9d14d01bd 158 resetswitch = 0;
ShaolinPoutine 0:25f9d14d01bd 159 wait(0.4);
ShaolinPoutine 0:25f9d14d01bd 160 resetswitch = 1;
ShaolinPoutine 0:25f9d14d01bd 161
ShaolinPoutine 1:318ad4f36a90 162 wait(3);
ShaolinPoutine 1:318ad4f36a90 163
ShaolinPoutine 0:25f9d14d01bd 164 ReadSerial();
ShaolinPoutine 0:25f9d14d01bd 165
ShaolinPoutine 0:25f9d14d01bd 166 while(1) {
ShaolinPoutine 0:25f9d14d01bd 167 }
ShaolinPoutine 0:25f9d14d01bd 168 }