Hi,
basically the wake-on-radio rx mode is working. But there is a continous current offset of 1.8mA. This means that while wake-on-radio is active, the current is not going down to Zero between the rx active intervals. Can there be something wrong with the power policies settings? We are using the nortos version of the lib.
Here is the code to start wake-on-radio:
rfc_dataEntryPartial_t* partialReadEntry1 = (rfc_dataEntryPartial_t*)&rxDataEntryBuffer; rfc_CMD_PROP_RX_SNIFF_t rxSniffCmd; rfc_CMD_FS_t RFCmdFs; partialReadEntry1->length = MAX_LENGTH; partialReadEntry1->config.type = DATA_ENTRY_TYPE_PARTIAL; partialReadEntry1->config.irqIntv = 0; // 0: 16 Bytes partialReadEntry1->status = DATA_ENTRY_PENDING; partialReadEntry1->pNextEntry = (uint8_t*)partialReadEntry1; dataQueue.pCurrEntry = (uint8_t*)partialReadEntry1; dataQueue.pLastEntry = NULL; rfHandle->clientConfig.pRadioSetup->prop_div.formatConf.whitenMode = MKF_VEG_WHITENING_MODE; // Data whitening vom Funkchip machen lassen memcpy( &rxSniffCmd, &RF_cmdPropRx, sizeof( rfc_CMD_PROP_RX_t)); rxSniffCmd.commandNo = CMD_PROP_RX_SNIFF; rxSniffCmd.pQueue = &dataQueue; rxSniffCmd.rxConf.bAutoFlushIgnored = 0; rxSniffCmd.rxConf.bAutoFlushCrcErr = 0; rxSniffCmd.maxPktLen = 0; rxSniffCmd.pktConf.bRepeatOk = 0; rxSniffCmd.pktConf.bRepeatNok = 0; rxSniffCmd.rxConf.bIncludeHdr = 0; rxSniffCmd.rxConf.bIncludeCrc = 0; rxSniffCmd.syncWord = 0x000056C7; rxSniffCmd.csConf.bEnaRssi = 1; rxSniffCmd.csConf.bEnaCorr = 1; rxSniffCmd.csEndTrigger.triggerType = TRIG_REL_START; /* General Carrier Sense configuration */ rxSniffCmd.csConf.idleOp = 1; /* End on channel Idle */ rxSniffCmd.csConf.busyOp = 0; /* End carrier sense on channel Busy (the receiver will continue when carrier sense ends, but it will then not end if channel goes Idle) */ rxSniffCmd.csConf.operation = 1; /* Report Idle if RSSI reports Idle to quickly exit if not above RSSI threshold */ rxSniffCmd.csConf.timeoutRes = 1; /* If the channel is invalid, it will return PROP_DONE_IDLE_TIMEOUT */ /* RSSI configuration */ rxSniffCmd.numRssiIdle = 1; /* One idle RSSI samples signals that the channel is idle */ rxSniffCmd.numRssiBusy = 1; /* One busy RSSI samples signals that the channel is busy */ rxSniffCmd.rssiThr = (int8_t)98; /* Set the RSSI threshold in dBm */ /* PQT configuration */ rxSniffCmd.corrConfig.numCorrBusy = 1; /* One busy PQT samples signals that the channel is busy */ rxSniffCmd.corrConfig.numCorrInv = 1; /* One busy PQT samples signals that the channel is busy */ // Timing gelten momentan nur für vEG /* Set sniff mode timing configuration in sniff command in RAT ticks */ rxSniffCmd.corrPeriod = (uint16_t)RF_convertUsToRatTicks( 480); rxSniffCmd.csEndTime = (uint16_t)RF_convertUsToRatTicks( 450); rxSniffCmd.endTime = (uint32_t)RF_convertMsToRatTicks( 35); /* Set correct trigger types */ rxSniffCmd.endTrigger.triggerType = TRIG_REL_START; rxSniffCmd.startTrigger.triggerType = TRIG_ABSTIME; rxSniffCmd.startTrigger.pastTrig = 1; rxSniffCmd.startTime = RF_getCurrentTime() + (uint32_t)RF_convertMsToRatTicks( 10); /* Set the frequency */ memcpy( &RFCmdFs, &RF_cmdFs, sizeof( RFCmdFs)); RadioModifyFrequency( &RFCmdFs, iDrift); RF_runCmd(rfHandle, (RF_Op*)&RFCmdFs, RF_PriorityNormal, NULL, 0); /* Enter RX mode */ rxcmdhandle = RF_postCmd(rfHandle, (RF_Op*)&rxSniffCmd, RF_PriorityNormal, RadioCallback, RF_EventNDataWritten | RF_EventLastCmdDone);
Here is the code to restart wake on radio interval:
rxSniffCmd.startTime = RF_getCurrentTime() + (uint32_t)RF_convertMsToRatTicks( 29); // Nächstes WOR-Intervall setzen RF_postCmd(rfHandle, (RF_Op*)&rxSniffCmd, RF_PriorityNormal, RadioCallback, RF_EventNDataWritten | RF_EventLastCmdDone);
Thank you.
Stefan