コード例 #1
0
bool XBeeMACLayer::sendAtCommand() {
  for(int i=0; i<AT_REQUEST_MAX_ATTEMPTS; ++i){
    // send the command
    xbee.send(atRequest);
  
    //TEMPORARILY, we send the request and wait for the attempt several times until we got it. This is because we can receive other packets that will be placed in the same buffer and they must be ignored until getting our AT response
    for(int i=0; i<AT_RESPONSE_MAX_ATTEMPTS; ++i){
      
      // wait up to 3 seconds for the status response
      if (xbee.readPacket(1000)) {
        // got a response!
    
        // should be an AT command response
        if (xbee.getResponse().getApiId() == AT_COMMAND_RESPONSE) {
          xbee.getResponse().getAtCommandResponse(atResponse);
    
          if (atResponse.isOk()) {
            if (atRequest.getCommand() == shCmd || atRequest.getCommand() == slCmd){
              return getResponseMAC();
            }else{
              if (atRequest.getCommand() == ecCmd){
                 return getResponseCCAFailure();
              }
            }
          } 
        } 
      } 
    }
  }
  return false;
}
コード例 #2
0
bool XBeeUtil::getRadioAddress(XBee* xbee, int32_t& msb, int32_t& lsb, Stream* debug_stream){

	bool toRet = true;
	XBeeUtil::debug_stream = debug_stream;

	AtCommandRequest atRequest = AtCommandRequest();
	AtCommandResponse atResponse = AtCommandResponse();

	uint8_t SH_cmd[] = { 'S', 'H' };
	uint8_t SL_cmd[] = { 'S', 'L' };


	atRequest.setCommand(SH_cmd);
	if (XBeeUtil::atCommand(xbee, atRequest, atResponse) && atResponse.getValueLength() == 4
			&& XBeeUtil::readAtResponseInt(xbee, atResponse, msb)) {
	} else {
		toRet = false;
	}

	atRequest.setCommand(SL_cmd);
	if (XBeeUtil::atCommand(xbee, atRequest, atResponse) && atResponse.getValueLength() == 4
			&& XBeeUtil::readAtResponseInt(xbee, atResponse, lsb)) {
	} else {
		toRet = false;
	}


	return toRet;
}
コード例 #3
0
int XBeeMACLayer::getNumberOfTransmissions(){
      atRequest.setCommand(ecCmd); 
      atRequest.setCommandValue((uint8_t*) &ecCommandValue);
      if (!sendAtCommand())
        return CCA_RETRIES_FAIL; 
      return cca_retries;
}
コード例 #4
0
/**	EXPERT FUNCTION: Sends an ATCommand and returns the response as a 32-bit integer.
	If you specify a value of waitForResponse, the program will wait
	for the amount of ms specified by waitForResponse and immediately
	process the AT response. If you don't specify a value or specify 0
	the program will call the general readXbee() and process the response
	there and write it to the corresponding variables.
	This function will then return 0.	**/
uint32_t LithneClass::sendATCommand( uint8_t * cmd, uint16_t waitForResponse )
{
	uint32_t	atAnswer	=	0;
	
	/*	Create a new AtComand Request and Response	*/
	AtCommandRequest atRequest   	= AtCommandRequest();

	/*	Set the specific command you want to send to the XBee in the atRequest	*/
	atRequest.setCommand( cmd );
	
	/*	Send this request to the xbee	*/
	xbee.send( atRequest );
  
	/*	The processing of the AT response is handled in the readXBee().
		We thus call this function. If we manually tell this function to
		wait for a response, it will skip this and attempt to read the
		information at this point. */
	if( waitForResponse == 0 )
	{
		readXbee();
	}
	else
	{
		if ( xbee.readPacket(waitForResponse) )
		{
			AtCommandResponse atResponse 	= AtCommandResponse();
			/*	If the packet is indeed an AT_COMMAND_RESPONSE,	we write it to the atResponse.	*/
			if (xbee.getResponse().getApiId() == AT_COMMAND_RESPONSE) 
			{
				xbee.getResponse().getAtCommandResponse(atResponse);
				/*	If the atResponse is correct (does not return an error code), we can process it.	*/
				if (atResponse.isOk()) 
				{
					if (atResponse.getValueLength() > 0) 
					{  
						for (int i = 0; i < atResponse.getValueLength(); i++) 
						{
							atAnswer	=	(atAnswer << 8) + atResponse.getValue()[i];
						}
        			}
				}
			}
  		}
		else 
  		{
	    	// at command failed
	    	if (xbee.getResponse().isError()) 
		    {
	//      	Serial.print("Error reading packet.  Error code: ");  
	//  	    Serial.println(xbee.getResponse().getErrorCode());
		    } 
	    	else 
		    {
	//      	Serial.print("No response from radio");  
	    	}
	    }
	}
  return atAnswer;
}
コード例 #5
0
bool XBeeUtil::associate(XBee* xbee)
{
	uint8_t AI_cmd[] = { 'A', 'I' };
	AtCommandRequest atRequest = AtCommandRequest();
	AtCommandResponse atResponse = AtCommandResponse();
	atRequest.setCommand(AI_cmd);
	if (XBeeUtil::atCommand(xbee, atRequest, atResponse) && atResponse.getValueLength() == 1) {
		return true;
	} else {
		return false;;
	}
}
コード例 #6
0
bool XBeeMACLayer::init(){    

	//xbee.begin(9600);
	delay(XBEE_INIT_WAITING_TIME); //wait for the XBEE to initialize

	mac_position = 0;
	if (!sendAtCommand()) return false;	// get SH (Serial High)
	atRequest.setCommand(slCmd);		// Set command to SL
	if (!sendAtCommand()) return false;	// get SL (Serial Low)

	return true;
}
コード例 #7
0
ファイル: XBeeMenu.cpp プロジェクト: XBeeModule/XBee
void XBeeActive::test_arRequestMod()
{
	arRequestMod.setCommand(command);
	arRequestMod.setCommandValue(commandValue);
	arRequestMod.setCommandValueLength(commandValueLength);
	sendAtCommand_ar();
	delay(250);
	atRequest.setCommand(WRCmd);
	sendAtCommand();
	delay(250);
	atRequest.setCommand(assocCmd);
	sendAtCommand();
	arRequestMod.clearCommandValue();
}
コード例 #8
0
ファイル: XBeeMenu.cpp プロジェクト: XBeeModule/XBee
void XBeeActive::XBee_status()
{
  
  unsigned long XBee_data2;
  atRequest.setCommand(shCmd);  
  sendAtCommand();
  delay(100);
  XBee_data2 = (unsigned long&)info_XBee_data1;
  DEBAG.print("SH " );
  DEBAG.println(String(XBee_data2, HEX));
 
  atRequest.setCommand(slCmd);  
  sendAtCommand();
  delay(100);
  XBee_data2 = (unsigned long&)info_XBee_data1;
  DEBAG.print("SL " );
  DEBAG.println(String(XBee_data2, HEX));
  
  atRequest.setCommand(MYCmd);  
  sendAtCommand();
  delay(100);
  XBee_data2 = (unsigned long&)info_XBee_data1;
  DEBAG.print("MY ");
  DEBAG.println(String(XBee_data2, HEX));
//
//  myGLCD.setColor(255, 255, 255);
//  yXBee = yXBee + yDelta;                                        // Форматирование текста, смещение
////  strcpy_P(buffer, (char*)pgm_read_word(&(table_message[12])));  // "Network (MY) = "
//  myGLCD.print("OI", LEFT, yXBee);
//  atRequest.setCommand(OICmd);  
//  sendAtCommand();
//  delay(100);
//  XBee_data2 = (unsigned long&)info_XBee_data1;
//  myGLCD.setColor(VGA_YELLOW);
//  myGLCD.print(String(XBee_data2, HEX), RIGHT, yXBee);
//
//
//
//  myGLCD.setColor(255, 255, 255);
//  yXBee = yXBee + yDelta;                                        // Форматирование текста, смещение
//  strcpy_P(buffer, (char*)pgm_read_word(&(table_message[13])));  // "PAN ID (OP)  = "
//  myGLCD.print(buffer, LEFT, yXBee);
//  atRequest.setCommand(opCmd);  
//  sendAtCommand();
//  delay(100);
//  XBee_data2 = (unsigned long&)info_XBee_data1;
//  myGLCD.setColor(VGA_YELLOW);
//  myGLCD.print(String(XBee_data2, HEX), RIGHT, yXBee);
//  
//  myGLCD.setColor(255, 255, 255);
//  yXBee = yXBee + yDelta;                                        // Форматирование текста, смещение 
//  strcpy_P(buffer, (char*)pgm_read_word(&(table_message[14])));  // "ID (ID)      = "
//  myGLCD.print(buffer, LEFT, yXBee);
//  atRequest.setCommand(IDCmd);  
//  sendAtCommand();
//  delay(100);
//  XBee_data2 = (unsigned long&)info_XBee_data1;
//  myGLCD.setColor(VGA_YELLOW);
//  myGLCD.print(String(XBee_data2, HEX), RIGHT, yXBee);
//
//  myGLCD.setColor(255, 255, 255);
//  yXBee = yXBee + yDelta;// Форматирование текста, смещение
//  strcpy_P(buffer, (char*)pgm_read_word(&(table_message[15])));  // "Chanel (CH)  = "
//  myGLCD.print(buffer, LEFT, yXBee);
//  atRequest.setCommand(CHCmd);  
//  sendAtCommand();
//  XBee_data2 = (unsigned long&)info_XBee_data1;
//  myGLCD.setColor(VGA_YELLOW);
//  myGLCD.print("0x",193, yXBee);
//  myGLCD.print(String(XBee_data2, HEX), RIGHT, yXBee);
//
//  myGLCD.setColor(255, 255, 255);
//  yXBee = yXBee + yDelta;// Форматирование текста, смещение
//  strcpy_P(buffer, (char*)pgm_read_word(&(table_message[16])));  
//  myGLCD.print(buffer, LEFT, yXBee);
//  atRequest.setCommand(assocCmd); 
//  sendAtCommand();
//  XBee_data2 = (unsigned long&)info_XBee_data1;
//  myGLCD.setColor(VGA_YELLOW);
//  myGLCD.print(String(XBee_data2, HEX), RIGHT, yXBee);
//
//
//  myGLCD.setColor(255, 255, 255);
//  yXBee = yXBee + yDelta;// Форматирование текста, смещение
//  strcpy_P(buffer, (char*)pgm_read_word(&(table_message[17])));  
//  myGLCD.print(buffer, LEFT, yXBee);
//  atRequest.setCommand(BDCmd); 
//  sendAtCommand();
//  XBee_data2 = (unsigned long&)info_XBee_data1;
//  myGLCD.setColor(VGA_YELLOW);
//  switch (XBee_data2)
//    {
//    case 0:
//      XBee_data2 = 1200;
//      break;
//    case 1:
//      XBee_data2 = 2400;
//      break;
//    case 2:
//      XBee_data2 = 4800;
//      break;
//    case 3:
//      XBee_data2 = 9600;
//      break;
//    case 4:
//      XBee_data2 = 19200;
//      break;
//    case 5:
//      XBee_data2 = 38400;
//      break;
//    case 6:
//      XBee_data2 = 57600;
//      break;
//    case 7:
//      XBee_data2 = 115200;
//      break;
//      default:
//       XBee_data2 = 000000;
//    }
//
//  myGLCD.print(String(XBee_data2), RIGHT, yXBee);
//
//  myGLCD.setColor(255, 255, 255);
//  yXBee = yXBee + yDelta;// Форматирование текста, смещение
//
//  strcpy_P(buffer, (char*)pgm_read_word(&(table_message[18])));   // "Volt(V) ";
//  myGLCD.print(buffer, LEFT, yXBee);
//  atRequest.setCommand(VoltCmd);   
//  sendAtCommand();
//  XBee_data2 = (unsigned long&)info_XBee_data1;
//  myGLCD.setColor(VGA_YELLOW);
//  float XBee_data3 = XBee_data2;
//  myGLCD.printNumF(XBee_data3/1000,2, RIGHT, yXBee,'.',2);
//  myGLCD.setColor(255, 255, 255);
//  yXBee = yXBee + yDelta;                                             // Форматирование текста, смещение
//  strcpy_P(buffer, (char*)pgm_read_word(&(table_message[27])));       // txt_temperature
//  myGLCD.print(buffer, LEFT, yXBee);
//  atRequest.setCommand(TPCmd);                                        // Температура модуля
//  sendAtCommand();
//  delay(100);
//  XBee_data2 = (unsigned long&)info_XBee_data1;
//  myGLCD.setColor(VGA_YELLOW);
//  myGLCD.print(String(XBee_data2, DEC), RIGHT, yXBee);
//
//  myGLCD.setColor(255, 255, 255);
//  yXBee = yXBee + yDelta;                                             // Форматирование текста, смещение
//  strcpy_P(buffer, (char*)pgm_read_word(&(table_message[75])));       // "TX Power mW"
//  myGLCD.print(buffer, LEFT, yXBee);
//  atRequest.setCommand(PLCmd);                                        // "TX Power mW"
//  sendAtCommand();
//  delay(100);
//  XBee_data2 = (unsigned long&)info_XBee_data1;
//  switch (XBee_data2)
//  {
//  case 0:
//    XBee_data2 = 1;
//    break;
//  case 1:
//    XBee_data2 = 25;
//    break;
//  case 2:
//    XBee_data2 = 100;
//    break;
//  case 3:
//    XBee_data2 = 200;
//    break;
//  case 4:
//    XBee_data2 = 300;
//    break;
//  default:
//    XBee_data2 = 0;
//    break;
//  }
//
//  myGLCD.setColor(VGA_YELLOW);
//  myGLCD.print(String(XBee_data2, DEC), RIGHT, yXBee);
//
//  myGLCD.setColor(0, 0, 255);                                        // Нарисовать прямоугольник для текста
//  myGLCD.fillRoundRect (2, 296, 238, 318);
//  myGLCD.setColor(255, 255, 255);
//  myGLCD.drawRoundRect (2, 296, 238, 318);
//  myGLCD.setBackColor(0, 0, 255);
//  myGLCD.setColor(255, 255, 255);
//  strcpy_P(buffer, (char*)pgm_read_word(&(table_message[19])));
//  myGLCD.print(buffer, CENTER, 299);                                // Завершить просмотр
// 

delay(300);
}
コード例 #9
0
ファイル: XBeeMenu.cpp プロジェクト: XBeeModule/XBee
void XBeeActive::search_XBee()
{
	d0Value[0] = 0xFE;
	commandValueLength = 0x1;
	atRequest.setCommand(NTCmd);
	sendAtCommand();
	delay(250);
	arRequestMod.clearCommandValue();
	delay(100);
	atRequest.setCommand(NDCmd);
	int search_list = 0;
	int i10;
	Serial.println("\nSending command search XBee");
	xbee.send(atRequest);
	while (true)
	{
		if (xbee.readPacket(5000)) // подождите до 5 секунд для ответа состояния
		{
			if (xbee.getResponse().getApiId() == AT_COMMAND_RESPONSE) // Должна быть команда отклика AT
			{
				xbee.getResponse().getAtCommandResponse(atResponse);

				if (atResponse.isOk())
				{
					Serial.print("Command [");
					Serial.print(atResponse.getCommand()[0]);
					Serial.print(atResponse.getCommand()[1]);
					Serial.println("] was successful!");

					if (atResponse.getValueLength() > 0)
					{
						Len_XBee = atResponse.getValueLength();
						Serial.print("Command value length is - ");
						Serial.println(atResponse.getValueLength(), DEC);
						Serial.print("Command value: ");

						for (i10 = 0; i10 < atResponse.getValueLength(); i10++)
						{
							info_XBee_data[i10] = atResponse.getValue()[i10];
							Serial.print(info_XBee_data[i10], HEX);
							Serial.print(" ");
						}
						Serial.println("");
						search_list++;
					}
				}
				else
				{
					Serial.print("Command return error code: ");
					Serial.println(atResponse.getStatus(), HEX);
				}
			}
			else
			{
				Serial.print("Expected AT response but got ");
				Serial.println(xbee.getResponse().getApiId(), HEX);
			}
		}
		else
		{
			if (xbee.getResponse().isError())             // at command failed
			{
				Serial.print("Error reading packet.  Error code: ");
				Serial.println(xbee.getResponse().getErrorCode());
			}
			else
			{
				Serial.println("\nNo response from radio1");
				return;
			}
		}

	}
}