コード例 #1
0
ファイル: HoofSerial.cpp プロジェクト: Lirben/hoofsoft
CommandPacket HoofSerial::readPacket()
{
  String jsonString = "";
  Rx16Response rx16 = Rx16Response();
  CommandPacket cmdPacket = { COMMAND_PACKAGE_TYPE, "null", "null", "null"};

  if (_xbee.getResponse().getApiId() == RX_16_RESPONSE)
  {
    _xbee.getResponse().getRx16Response(rx16);

    for(int i = 0; i < rx16.getDataLength(); i++)
    {
      char test = rx16.getData(i);
      jsonString += test;
    }
    
    cmdPacket = decodeJson(jsonString);
  
    Serial.print(cmdPacket.type);
    Serial.print(" ");
    Serial.print(cmdPacket.command);
    Serial.print(" ");
    Serial.print(cmdPacket.parameter);
    Serial.print(" ");
    Serial.println(cmdPacket.value);
  }
  return cmdPacket;  
}
コード例 #2
0
bool XBeeMACLayer::receive(uip_lladdr_t* lladdr_src, uip_lladdr_t* lladdr_dest, uint8_t* data, uint16_t* length){
    xbee.readPacket();    
    if (xbee.getResponse().isAvailable()) {
      // got something
      
      if (xbee.getResponse().getApiId() == RX_16_RESPONSE || xbee.getResponse().getApiId() == RX_64_RESPONSE) {
        // got a rx packet
        if (xbee.getResponse().getApiId() == RX_16_RESPONSE) {
          if (UIP_LLADDR_LEN == UIP_802154_SHORTADDR_LEN){
                Rx16Response rx16 = Rx16Response();                
                xbee.getResponse().getRx16Response(rx16);
                memcpy(data, rx16.getData(), rx16.getDataLength());
                *length = rx16.getDataLength();
                
                //get the src and destination addresses
                if(rx16.getOption() == ZB_BROADCAST_PACKET){ //Then packet was a broadcast.. destination address is 0xFFFF, we use an all-zeroes address to represent broadcast
                  lladdr_dest->addr[0] = 0; // Copy all-zeroes address to lladdr_dest
                  lladdr_dest->addr[1] = 0;
                  //lladdr_dest = NULL;

                }else{
                  //get dest address (it is my own)
                  //lladdr_dest = &my_mac;
                  lladdr_dest->addr[0] = my_mac.addr[0]; // Copy my_mac address to lladdr_dest
                  lladdr_dest->addr[1] = my_mac.addr[1];
                }
                
                lladdr_src->addr[0] = rxResp.getRemoteAddress16() >> 8;
                lladdr_src->addr[1] = rxResp.getRemoteAddress16() & 0x00FF;
          }else
            return false;
        } else {           
            if (UIP_LLADDR_LEN == UIP_802154_LONGADDR_LEN){
コード例 #3
0
void XBeeStrategy::run(){


	xbee.readPacket();

	if (xbee.getResponse().isAvailable()) {
		// got something

		if (xbee.getResponse().getApiId() == RX_16_RESPONSE) {
			// got a rx packet
			Rx16Response rx16 = Rx16Response();
			xbee.getResponse().getRx16Response(rx16);

			Serial.println( "**** Incoming transmission ***");
			char destination = rx16.getData(0);
			if(destination == 'a'){

				Serial.println( "Triggering us...");
				char mode = rx16.getData(1);
				if(mode == 'm'){
					Serial.println( "Changing direction");
					int direction = rx16.getData(2);
					int on = rx16.getData(3);
					switch(direction){
						case  'w':
							sputnik.stopMoving();
							sputnik.forward();
							break;
						case  'a':
							sputnik.stopMoving();
							sputnik.turn(1000, 0);
							break;
						case  's':
							sputnik.stopMoving();
							sputnik.backward();
							break;
						case  'd':
							sputnik.stopMoving();
							sputnik.turn(1000, 1);
							break;
						default:
							break;
					}

				}
			}
		}
	}
}
コード例 #4
0
 tXBeePacket * getPkt()
 {
   tXBeePacket * rxPacket;
   
   if (_isDataAvailable)
   {
     Rx16Response rx16 = Rx16Response();
     xbee.getResponse().getRx16Response(rx16);
     rxPacket = new tXBeePacket(rx16);
     _isDataAvailable = false;
   }
   else
   {
     rxPacket = NULL;
   }
   
   return rxPacket;
 }