/*********************************************************************************** * @fn CC2520_REGWR24 * * @brief Write three register bytes * * @param uint8 addr * uint32 value * * @return none */ void CC2520_REGWR24(uint8 addr, uint32 value) { CC2520_SPI_BEGIN(); CC2520_SPI_TXRX(CC2520_INS_REGWR | addr); CC2520_SPI_TXRX(LO_UINT16(LO_UINT32(value))); CC2520_SPI_TXRX(HI_UINT16(LO_UINT32(value))); CC2520_SPI_TXRX(LO_UINT16(HI_UINT32(value))); CC2520_SPI_END(); }
/*********************************************************************************** * @fn CC2520_MEMWR24 * * @brief Write memory 24 bits * * @param uint16 addr * uint32 value * * @return uint8 - status byte */ uint8 CC2520_MEMWR24(uint16 addr, uint32 value) { uint8 s; CC2520_SPI_BEGIN(); s = CC2520_SPI_TXRX(CC2520_INS_MEMWR | HI_UINT16(addr)); CC2520_SPI_TXRX(LO_UINT16(addr)); CC2520_SPI_TXRX(LO_UINT16(LO_UINT32(value))); CC2520_SPI_TXRX(HI_UINT16(LO_UINT32(value))); CC2520_SPI_TXRX(LO_UINT16(HI_UINT32(value))); CC2520_SPI_END(); return s; }
/*********************************************************************************** * @fn basicRfBuildHeader * * @brief Builds packet header according to IEEE 802.15.4 frame format * * @param buffer - Pointer to buffer to write the header * destAddr - destination short address * payloadLength - length of higher layer payload * * @return uint8 - length of header */ static uint8 basicRfBuildHeader(uint8* buffer, uint16 destAddr, uint8 payloadLength) { basicRfPktHdr_t *pHdr; uint16 fcf; pHdr= (basicRfPktHdr_t*)buffer; // Populate packet header pHdr->packetLength = payloadLength + BASIC_RF_PACKET_OVERHEAD_SIZE; //pHdr->frameControlField = pConfig->ackRequest ? BASIC_RF_FCF_ACK : BASIC_RF_FCF_NOACK; fcf= pConfig->ackRequest ? BASIC_RF_FCF_ACK : BASIC_RF_FCF_NOACK; pHdr->fcf0 = LO_UINT16(fcf); pHdr->fcf1 = HI_UINT16(fcf); pHdr->seqNumber= txState.txSeqNumber; pHdr->panId= pConfig->panId; pHdr->destAddr= destAddr; pHdr->srcAddr= pConfig->myAddr; #ifdef SECURITY_CCM // Add security to FCF, length and security header pHdr->fcf0 |= BASIC_RF_SEC_ENABLED_FCF_BM_L; pHdr->packetLength += PKT_LEN_MIC; pHdr->packetLength += BASIC_RF_AUX_HDR_LENGTH; pHdr->securityControl= SECURITY_CONTROL; pHdr->frameCounter[0]= LO_UINT16(LO_UINT32(txState.frameCounter)); pHdr->frameCounter[1]= HI_UINT16(LO_UINT32(txState.frameCounter)); pHdr->frameCounter[2]= LO_UINT16(HI_UINT32(txState.frameCounter)); pHdr->frameCounter[3]= HI_UINT16(HI_UINT32(txState.frameCounter)); #endif // Make sure bytefields are network byte order UINT16_HTON(pHdr->panId); UINT16_HTON(pHdr->destAddr); UINT16_HTON(pHdr->srcAddr); return BASIC_RF_HDR_SIZE; }