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; }
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){
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; } } } } } }
tXBeePacket * getPkt() { tXBeePacket * rxPacket; if (_isDataAvailable) { Rx16Response rx16 = Rx16Response(); xbee.getResponse().getRx16Response(rx16); rxPacket = new tXBeePacket(rx16); _isDataAvailable = false; } else { rxPacket = NULL; } return rxPacket; }