Exemplo n.º 1
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;
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
int XBeeMACLayer::getNumberOfTransmissions(){
      atRequest.setCommand(ecCmd); 
      atRequest.setCommandValue((uint8_t*) &ecCommandValue);
      if (!sendAtCommand())
        return CCA_RETRIES_FAIL; 
      return cca_retries;
}
/**	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;
}
Exemplo n.º 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;;
	}
}
Exemplo n.º 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;
}
Exemplo n.º 7
0
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);
}
Exemplo n.º 8
0
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;
			}
		}

	}
}