12 years, 1 month ago.

IS command from FRDM-coordinator to remote xbee

Hi guys, I have got a problem getting a responce from my remote xbee router module. I just get a responce of zeros on my terminal 00 00 00 00 00 00.....I am supposed to get an actual responce with information about the state of my xbee.I use the devices below: xbee coordinator API= (SH = 0013A200) , (SL=409209EF),(MY=0) remote Xbee Router AT = (SH 0013A200) , (SL=408AD9B3),(MY=9D34)

I also attach you my code in case you can see something wrong which i cannot see myselfThank you in advance for your time.

#include "mbed.h"
//Input-output and serial I/O definitions
Serial pc(USBTX, USBRX); // tx, rx     
Serial xbee(PTD3, PTD2); // tx, rx             
DigitalOut  LedPin(LED1);
// Define API "IS" command-packet array here

int packetIS[] = {0x7E,0x00,0x0F,0x17,0x01,0x00,0x13,0xA2,0x00,0x40,0x8A,0xD9,0xB3,0x9D,0x34,0x02,'I','S'};    //0x17 = FRAME TYPE-remote command request,AT Command immediate.0x01 = FRAME ID,identifies the UART data frame for the host to correlate with a subsequent acknowledgement(If set to 0->no responce.0x49(I)/0x53(S) = AT Command=(2 ASCII characters=I,S).  
int  packetISlength = 18;         //array for setting up 8 bytes for the API ND command
const int dataISlength = 40;     //define the number of bytes in array dataND[] for XBee modules
//Define extra variables
unsigned int  bytecount_hi;
unsigned int  bytecount_lo;
unsigned int  bytecount;
unsigned int  counter;
unsigned int  chksum;
unsigned int  calculated_sum = 0; //calculated checksum
int dataIS[dataISlength];   //array which stores the data received from the xbee
int inputdata;
int SerialInput()  // This function reads UART after it has new data
{
    while (xbee.readable() == 0)         //wait for UART to have new data
    {
    }
    return (xbee.getc());               //get new data, return
}

//Main XBee program.This program asks a remote xbee module to reply with information about the state of it's digital and anlog pins
  
int main(void)
{
  LedPin = 1;               //turn test LED off to start
  //Transmit packetIS as requested using for and not while
  counter = 0;
 for (counter = 0; counter < packetISlength; counter++)
     {   
      xbee.putc(packetIS[counter]); // send the API packet
      if (counter > 2)   //we calculate the sum after the length bytes
      { 
      calculated_sum = calculated_sum + packetIS[counter];    // calculate the sum 
      }
     }   
  chksum = 0xFF- (calculated_sum & 0xFF); 
  xbee.putc(chksum) ; //calculate the proper checksum & send it to the xbee
  pc.printf("The checksum of the IS command is: %x",chksum);
  pc.printf("\n\r");         
  wait(1); 
  calculated_sum = 0;                                   
  chksum=0;   //clear the checksum value
              
  //The below program gets serial data sent by the XBee module and saves the data in an array of bytes for each module. 
   inputdata = SerialInput();
   if (xbee.readable())
     {
       if (inputdata == 0x7E)         //start byte of API frame
        {                                            
          bytecount_hi = SerialInput();
          bytecount_lo = SerialInput();
          bytecount = (bytecount_hi * 256) + bytecount_lo;     //number of bytes in message   
            for (counter = 0; counter < bytecount; counter++)    //put XBee data received in array
              {
              dataIS[counter] = SerialInput();
              if (counter > 2)   
                { 
                 calculated_sum = calculated_sum + dataIS[counter];
                }
              } 
          chksum = SerialInput();
         }                             //get checksum--last byte
          if (chksum != (0xFF - (calculated_sum & 0xFF)))        //do checksums match in case something went wrong
           {
           while(1)                                         //NO MATCH, flash LED forever
              {                                             //Error handling could go
              LedPin = 0;                                   //here instead.
              wait(1);
              LedPin = 1;
              wait(0.5);
              }
           }
        }                                                   //IF Checksums match, it proceeds for the next module
         
                                                            //OK, got data for all XBee modules
  LedPin = 0;                                               //turn on LED
  wait(0.5);                                                //half-second delay
  
  //print data in each XBee array as hex characters.Data shows up to the PC terminal
  pc.printf("\n\r");
      for (counter = 0; counter < dataISlength; counter++)
      {    
        pc.printf("%02X  ", dataIS[counter]);  //show up the information received from the remote xbee on our terminal
      }
      pc.printf("\n\r");       //start a new line in  the pc terminal window
 
  while(1)                                                  //end program in an infinite do-nothing
  {                                                         //loop????
  }
}

Be the first to answer this question.