According to the 2.6 User Guide, it is possible to have Synchronous Data Confirm (i.e. Return the results immediately, rather than the results being posted as a deferred confirm sometime later).
See Section 3.8.3. (User Guide 2.6) or page 18 (stack API v1.7).
Regardless of this description, no explanation is given on how to achieve this. The example JN-AN-1174 only uses deferred confirms.
Here is what I tried, please check what is after vAppApiMcpsRequest.
PRIVATE void vTransmitDataPacket(uint8 *pu8Data, uint8 u8Len, uint16 u16DestAdr)
{
MAC_McpsReqRsp_s sMcpsReqRsp;
MAC_McpsSyncCfm_s sMcpsSyncCfm;
uint8 *pu8Payload, i = 0;
sMcpsReqRsp.u8Type = MAC_MCPS_REQ_DATA;
sMcpsReqRsp.u8ParamLength = sizeof(MAC_McpsReqData_s);
sMcpsReqRsp.uParam.sReqData.u8Handle = 0;
sMcpsReqRsp.uParam.sReqData.sFrame.sSrcAddr.u8AddrMode = 2;
sMcpsReqRsp.uParam.sReqData.sFrame.sSrcAddr.u16PanId = PAN_ID;
sMcpsReqRsp.uParam.sReqData.sFrame.sSrcAddr.uAddr.u16Short = sEndDeviceData.u16Address;
sMcpsReqRsp.uParam.sReqData.sFrame.sDstAddr.u8AddrMode = 2;
sMcpsReqRsp.uParam.sReqData.sFrame.sDstAddr.u16PanId = PAN_ID;
sMcpsReqRsp.uParam.sReqData.sFrame.sDstAddr.uAddr.u16Short = u16DestAdr;
sMcpsReqRsp.uParam.sReqData.sFrame.u8TxOptions = 0;
pu8Payload = sMcpsReqRsp.uParam.sReqData.sFrame.au8Sdu;
pu8Payload [0] = 0x00;
pu8Payload [1] = 0x01;
pu8Payload [2] = 0x02;
pu8Payload [3] = 0x03;
sMcpsReqRsp.uParam.sReqData.sFrame.u8SduLength = 4;
uint32 currentTime = vGetMicroSeconds();
DBG_vPrintf(TRUE,"%d MicroSec | Transmit Request with size %d \n",currentTime,sMcpsReqRsp.uParam.sReqData.sFrame.u8SduLength);
vAppApiMcpsRequest(&sMcpsReqRsp, &sMcpsSyncCfm);
DBG_vPrintf(TRUE,"syncfmstatus %d \n",sMcpsSyncCfm.u8Status);
if (sMcpsSyncCfm.u8Status != MAC_MCPS_CFM_DEFERRED){
if (sMcpsSyncCfm.uParam.sCfmData.u8Status == MAC_ENUM_SUCCESS)
{
uint32 time1 = vGetMicroSeconds();
DBG_vPrintf(TRUE,"%d MicroSec | Sync Data transmit confirm \n",time1);
}
}
}
Any way to achieve this synchronous MCPS-DATA.request - confirm?
Any help is much appreciated.
Regards,
Al