コード例 #1
0
ファイル: Printers.cpp プロジェクト: Introsys/fresh
void printErrorCb(TxStatusResponse& r, uintptr_t data) {
	Print *p = (Print*)data;
	if (!r.isSuccess()) {
		p->print(F("Error sending packet. Delivery status: "));
		p->println(r.getStatus());
	}
}
コード例 #2
0
ファイル: Printers.cpp プロジェクト: Introsys/fresh
void printResponseCb(TxStatusResponse& status, uintptr_t data) {
	Print *p = (Print*)data;
	p->println(F("TxStatusResponse received:"));
	printField(p, F("  FrameId: 0x"), status.getFrameId());
	printField(p, F("  Status: 0x"), status.getStatus());
}
コード例 #3
0
MACTransmissionStatus XBeeMACLayer::send(const uip_lladdr_t* lladdr_dest, uint8_t* data, uint16_t length, int *number_transmissions){
  unsigned long send_start_time;
  unsigned int sending_time;
  uint8_t status;

  // Broadcast is expressed as an all-zeroes address (rimeaddr_null), we check to see if lladdr_dest is a broadcast address comparing it to rimeaddr_null.
  bool isNotBroadcast = !rimeaddr_cmp((rimeaddr_t*)lladdr_dest, &rimeaddr_null, UIP_LLADDR_LEN); // lladdr_dest != NULL

    if (isNotBroadcast){
      // lladdr_dest is NOT a broadcast address
      if (UIP_LLADDR_LEN == UIP_802154_LONGADDR_LEN){
          ((char*)(&dest))[3] = lladdr_dest->addr[0];
          ((char*)(&dest))[2] = lladdr_dest->addr[1];
          ((char*)(&dest))[1] = lladdr_dest->addr[2];
          ((char*)(&dest))[0] = lladdr_dest->addr[3];
          destAddr64.setMsb(dest);
          ((char*)(&dest))[3] = lladdr_dest->addr[4];
          ((char*)(&dest))[2] = lladdr_dest->addr[5];
          ((char*)(&dest))[1] = lladdr_dest->addr[6];
          ((char*)(&dest))[0] = lladdr_dest->addr[7];
          destAddr64.setLsb(dest);
        Tx64Request longReq(destAddr64, data, length);
        xbeeRequest = &longReq;
      }else{
        ((char*)(&dest))[1] = lladdr_dest->addr[0];
        ((char*)(&dest))[0] = lladdr_dest->addr[1];
        Tx16Request shortReq(dest16, data, length);
        xbeeRequest = &shortReq;
      }
    }else{// lladdr_dest is a broadcast address, we send to broadcast
      Tx16Request shortReq(0xFFFF, data, length);
      xbeeRequest = &shortReq;
    }
    send_start_time = millis();
    xbee.send(*xbeeRequest);


    // after sending a tx request, we expect a status response
    // wait up to 5 seconds for the status response
    for(int i=0; i<AT_RESPONSE_MAX_ATTEMPTS; ++i){
      if (xbee.readPacket(5000)) {
          // got a response!
          // should be a znet tx status            	
      	if (xbee.getResponse().getApiId() == TX_STATUS_RESPONSE) {
      	   xbee.getResponse().getTxStatusResponse(txStatus);
      	   // get the delivery status, the fifth byte
             switch (txStatus.getStatus()) {
               case XBEE_SEND_OK:
                 *number_transmissions = getNumberOfTransmissions();
                 ++number_transmissions;//we have always one (the first one), plus the number of times that we had cca failure (collision)

                 return MAC_TX_STATUS_OK;
               case XBEE_SEND_NO_ACK:
                 return MAC_TX_STATUS_NO_ACK;
               case XBEE_SEND_COLLISION:
                 *number_transmissions = getNumberOfTransmissions();
                 ++number_transmissions;//we have always one (the first one), plus the number of times that we had cca failure (collision)

                 return MAC_TX_STATUS_COLLISION;
               case XBEE_SEND_PURGED:
               default:
                 return MAC_TX_STATUS_ERR;
             }     
          }   
      }
    }
    return MAC_TX_STATUS_ERR;

}