Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 2:ddaf240af296
- Parent:
- 1:fe18dd0ba172
- Child:
- 3:eda76f539da3
diff -r fe18dd0ba172 -r ddaf240af296 main.cpp
--- a/main.cpp Mon Oct 02 21:58:44 2017 +0000
+++ b/main.cpp Tue Oct 03 04:48:02 2017 +0000
@@ -14,29 +14,73 @@
const uint8_t ZERO = 0x00;
const uint8_t APPLY_CHANGES = 0x02;
const uint8_t FF_CONST = 0xFF;
-const char OPEN_LED[2] = {'D','1'};
+const char OPEN_LED[2] = {'D','5'};
bool atCommand = false;
const int TRANSMIT_REQUEST_DATA = 12;
-uint8_t addresse_64_bit[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+uint8_t addresse_64_bit[8] = {0xcd, 0x2b, 0x0, 0x13, 0xa2, 0x0, 0x40, 0x33};
uint8_t addresse_16_bit[2] = {0xFF,0xFE};
uint8_t pan_id[14]={0x7E, 0x00, 0x0A, 0x08, 0x01, 0x49, 0x44, 0x46, 0x46, 0x39, 0x39, 0x31, 0x31, 0x09};
-void sendAtCommand(){
- pc.printf("trure");
- atCommand = true;
+uint8_t nd_Command[8] = { 0x7E, 0x00, 0x04, 0x08, 0x01, 0x4E, 0x44, 0x64 };
+
+void afficherErreurLed()
+{
+
+ uint8_t d5_command[9] = { 0x7E, 0x00, 0x05, 0x08, 0x01, 'D', '5', 5, 0};
+
+ static bool nextState = true;
+
+ //check sum
+
+ uint8_t checkSum = 0;
+ for(int i = 3; i<9;i++)
+ {
+ checkSum += d5_command[i];
+ }
+
+ if(nextState)
+ {
+ d5_command[7] = 5;
+ }
+ else
+ {
+ d5_command[7] = 4;
+ }
+
+ checkSum = FF_CONST - checkSum;
+ d5_command[8] = checkSum;
+ for(int i = 0 ; i < 9; i++)
+ {
+ xBee.putc(d5_command[i]);
+ }
+
}
-void sendAtCommandPaquet(const char* type){
+void sendNDCommand()
+{
+ for ( int i = 0 ; i < 8; i++ )
+ {
+ xBee.putc(nd_Command[i]);
+ }
+}
+
+void sendRemoteAtCommand(){
+ atCommand = true;
+}
+
+void sendRemoteLedCommandPaquet(){
+ static bool nextState = true;
uint8_t length = 0xF;
uint8_t paquet[25];
uint8_t checkSum= 0x0;
uint8_t LSBLength;
uint8_t MSBLength;
- pc.printf("in");
+
+ char type[2] = { 'D','5'};
LSBLength = length&0xff;
MSBLength = (length &0xff00) >> 8;
@@ -59,8 +103,15 @@
paquet[15] = APPLY_CHANGES; //BroadCast Radius
paquet[16] = type[0];
paquet[17] = type[1];
- paquet[18] = 0x05;
- pc.printf("in2");
+
+ if(nextState)
+ {
+ paquet[18] = 0x05;
+ }
+ else
+ {
+ paquet[18] = 0x04;
+ }
//check sum
@@ -81,8 +132,65 @@
}
+bool checkForError(int length,uint8_t type, uint8_t* data)
+{
+ data[0] = type;
+ uint8_t origCheckSum;
+ uint8_t checkSum = type;
+ for (int i =1; i < length; i++)
+ {
+ data[i] = xBee.getc();
+ checkSum += data[i];
+ }
+ checkSum = 0xFF - checkSum;
+ origCheckSum = xBee.getc();
+
+ return checkSum != origCheckSum;
+}
+
+void receiveAtCommandResponse(int length, uint8_t* data)
+{
+ // 1 Command id
+
+ uint8_t id = data[1];
+
+ // La command est identifie par les deux prochains bits
+ uint16_t command = data[2] << 8;
+ command += data[3];
+
+ pc.printf("\n Command %x\n",command);
+
+ uint8_t status = data[4];
+
+ // Data == 5-length
+ if(status != 0)
+ {
+ pc.printf("erreur");
+ afficherErreurLed();
+ return;
+ }
+ switch(command)
+ {
+
+ case 0x4e44: // Node Discovery AT Command
+ {
+ uint64_t serialNumber = 0;
+ for(int i = 5; i < 13; i++)
+ {
+ serialNumber += data[i] << (8 * (13-i -1) );
+ addresse_64_bit[i-5] = data[i];
+ pc.printf("\nSerial number %i %x\n",i,data[i]);
+ }
+
+ return;
+ }
+ break;
+ }
+
+}
+
void receiveTransmitRequest(int length,uint8_t type){
- uint8_t data[100];
+ uint8_t data[512];
data[0] = type;
uint8_t origCheckSum;
uint8_t checkSum = type;
@@ -98,8 +206,9 @@
if(origCheckSum == checkSum){
for(int i = TRANSMIT_REQUEST_DATA; i <length;i++)
{
- pc.printf("%x", data[i]);
+ pc.printf("%c", data[i]);
}
+ pc.printf("\n");
}
else{
@@ -114,15 +223,32 @@
if(xBee.getc() == START_DELEMITER)
{
+ // MSB
length = (((xBee.getc()) << 8));
+ // LSB
length +=(xBee.getc());
uint8_t frame_type = xBee.getc();
+ uint8_t data[512];
+ data[0] = frame_type;
+
switch (frame_type){
- case 0x90:
+ case 0x90:
receiveTransmitRequest(length, frame_type);
-
-
+ // AT command Response frame
+ break;
+ case 0x88:
+ pc.printf("\nat response : length %i, frame time %i\n",length,frame_type);
+ bool error = checkForError(length, frame_type,data);
+ if(true)
+ {
+ receiveAtCommandResponse(length, data);
+ }
+ else
+ {
+ pc.printf("Transmit or checksum error");
+ }
+ break;
}
@@ -134,30 +260,27 @@
int main() {
- flipper.attach (&sendAtCommand,1);
+ flipper.attach (&sendRemoteAtCommand,1);
reset =0;
wait_ms(500);
reset=1;
wait(1);
xBee.printf("+++");
wait(1);
-
+ sendNDCommand();
//
// for(int i =0;i <14;i++){
// xBee.putc(pan_id[i]);
// }
while(1) {
-
if(xBee.readable()){
receiveNewPaquet();
}
if (atCommand){
atCommand = false;
- sendAtCommandPaquet(OPEN_LED);
- }
-
-
+ sendRemoteLedCommandPaquet();
+ }
}
}
