EasyLink_Status EasyLink_transmit_CBeacon(EasyLink_CBeacon *txPacket,EasyLink_TimeStamp TimeStamp) { unsigned char bitArray[8] = {0}; EasyLink_Status status = EasyLink_Status_Tx_Error; if ( (!configured) || suspended) { return EasyLink_Status_Config_Error; } if (Semaphore_pend(busyMutex, 0) == FALSE) //Check and take the busyMutex { return EasyLink_Status_Busy_Error; } if (sizeof(bitArray) > EASYLINK_MAX_DATA_LENGTH) { return EasyLink_Status_Param_Error; } //usprintf_mng("DSRList:%x\n",txPacket->fDBeacon.DSRList); /*****************************************/ bitArray[7]|=txPacket->fCBeacon.TimeStamp; //Make any bit 32 TimeStamp bitArray[6]|=txPacket->fCBeacon.TimeStamp>>8; bitArray[5]|=txPacket->fCBeacon.TimeStamp>>16; bitArray[4]|=txPacket->fCBeacon.TimeStamp>>24; bitArray[3]|=txPacket->fCBeacon.InitialState; //Make any bit 1 InitialState bitArray[3]|=txPacket->fCBeacon.DCHChannelNum<<1; //Make any bit 6 DCHChannelNum bitArray[3]|=txPacket->fCBeacon.DutyCycling<<7; //Make any bit 2 DutyCycling bitArray[2]|=txPacket->fCBeacon.DutyCycling>>1; bitArray[2]|=txPacket->fCBeacon.InterferenceMitigation<<1; //Make any bit 1 InterferenceMitigation bitArray[2]|=txPacket->fCBeacon.Reserved<<2; //Make any bit 1 Reserved bitArray[2]|=txPacket->fCBeacon.TimeSlots<<3; //Make any bit 10 TimeSlots bitArray[1]|=txPacket->fCBeacon.TimeSlots>>5; bitArray[1]|=txPacket->fCBeacon.SlotLen<<5; //Make any bit 3 SlotLen bitArray[0]|=txPacket->fCBeacon.HubAddr; //Make any bit 8 HubAddr /*****************************************/ usprintf_mng("TransCB:%02x %02x %02x %02x %02x %02x %02x %02x\n", bitArray[0],bitArray[1],bitArray[2],bitArray[3],bitArray[4],bitArray[5],bitArray[6],bitArray[7]); EasyLink_cmdPropTx.pktLen = sizeof(bitArray); EasyLink_cmdPropTx.pPkt = bitArray; //EasyLink_cmdPropTx.startTrigger.triggerType = TRIG_NOW; //EasyLink_cmdPropTx.startTrigger.pastTrig = 1; //EasyLink_cmdPropTx.startTime = 0; EasyLink_cmdPropTx.startTrigger.triggerType = TRIG_ABSTIME; EasyLink_cmdPropTx.startTrigger.pastTrig = 1; EasyLink_cmdPropTx.startTime = TimeStamp.StartTime; // Send packet RF_CmdHandle cmdHdl = RF_postCmd(rfHandle, (RF_Op*)&EasyLink_cmdPropTx, RF_PriorityNormal, 0, EASYLINK_RF_EVENT_MASK); // Wait for Command to complete RF_EventMask result = RF_pendCmd(rfHandle, cmdHdl, (RF_EventLastCmdDone | RF_EventCmdError)); if (result & RF_EventLastCmdDone) { status = EasyLink_Status_Success; } Semaphore_post(busyMutex); return status; }