APP3 / Mbed 2 deprecated com_xbee

Dependencies:   mbed mbed-rtos

Committer:
ShaolinPoutine
Date:
Thu Feb 09 03:27:58 2017 +0000
Revision:
0:25f9d14d01bd
Child:
1:318ad4f36a90
Test

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