LCOV - code coverage report
Current view: top level - src/modules/LR2021 - LR2021_cmds_ook.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 0 64 0.0 %
Date: 2026-04-06 12:28:13 Functions: 0 9 0.0 %

          Line data    Source code
       1             : #include "LR2021.h"
       2             : 
       3             : #include "../LR11x0/LR_common.h"
       4             : 
       5             : #include <string.h>
       6             : #include <math.h>
       7             : 
       8             : #if !RADIOLIB_EXCLUDE_LR2021
       9             : 
      10           0 : int16_t LR2021::setOokModulationParams(uint32_t bitRate, uint8_t pulseShape, uint8_t rxBw, uint8_t depth) {
      11             :   uint8_t buff[] = { 
      12           0 :     (uint8_t)((bitRate >> 24) & 0xFF), (uint8_t)((bitRate >> 16) & 0xFF),
      13           0 :     (uint8_t)((bitRate >> 8) & 0xFF), (uint8_t)(bitRate & 0xFF),
      14             :     pulseShape, rxBw, depth,
      15           0 :   };
      16           0 :   return(this->SPIcommand(RADIOLIB_LR2021_CMD_SET_OOK_MODULATION_PARAMS, true, buff, sizeof(buff)));
      17             : }
      18             : 
      19           0 : int16_t LR2021::setOokPacketParams(uint16_t preambleLen, uint8_t addrComp, uint8_t packetFormat, uint16_t payloadLen, uint8_t crc, uint8_t manchester) {
      20             :   uint8_t buff[] = { 
      21           0 :     (uint8_t)((preambleLen >> 8) & 0xFF), (uint8_t)(preambleLen & 0xFF),
      22           0 :     (uint8_t)((addrComp << 2) | ((uint8_t)packetFormat & 0x03)),
      23           0 :     (uint8_t)((payloadLen >> 8) & 0xFF), (uint8_t)(payloadLen & 0xFF),
      24           0 :     (uint8_t)(((crc << 4) & 0xF0) | (manchester & 0x0F)),
      25           0 :   };
      26           0 :   return(this->SPIcommand(RADIOLIB_LR2021_CMD_SET_OOK_PACKET_PARAMS, true, buff, sizeof(buff)));
      27             : }
      28             : 
      29           0 : int16_t LR2021::setOokCrcParams(uint32_t poly, uint32_t init) {
      30             :   uint8_t buff[] = { 
      31           0 :     (uint8_t)((poly >> 24) & 0xFF), (uint8_t)((poly >> 16) & 0xFF),
      32           0 :     (uint8_t)((poly >> 8) & 0xFF), (uint8_t)(poly & 0xFF),
      33           0 :     (uint8_t)((init >> 24) & 0xFF), (uint8_t)((init >> 16) & 0xFF),
      34           0 :     (uint8_t)((init >> 8) & 0xFF), (uint8_t)(init & 0xFF),
      35           0 :   };
      36           0 :   return(this->SPIcommand(RADIOLIB_LR2021_CMD_SET_OOK_CRC_PARAMS, true, buff, sizeof(buff)));
      37             : }
      38             : 
      39           0 : int16_t LR2021::setOokSyncword(const uint8_t* syncWord, size_t syncWordLen, bool msbFirst) {
      40             :   // OOK maximum sync word length is just 32-bits, unlike GFSK
      41           0 :   if(syncWordLen > RADIOLIB_LR2021_OOK_SYNC_WORD_LEN) {
      42           0 :     return(RADIOLIB_ERR_INVALID_SYNC_WORD);
      43             :   }
      44             : 
      45           0 :   uint8_t buff[5] = { 0 };
      46           0 :   for(int8_t i = 3; i >= (int8_t) (RADIOLIB_LR2021_OOK_SYNC_WORD_LEN - syncWordLen); i--) {
      47           0 :     buff[i] = syncWord[i - (int8_t) (RADIOLIB_LR2021_OOK_SYNC_WORD_LEN - syncWordLen)];
      48             :   }
      49           0 :   buff[4] = (uint8_t)msbFirst << 7 | ((syncWordLen*8) & 0x7F);
      50           0 :   return(this->SPIcommand(RADIOLIB_LR2021_CMD_SET_OOK_SYNCWORD, true, buff, sizeof(buff)));
      51             : }
      52             : 
      53           0 : int16_t LR2021::setOokAddress(uint8_t addrNode, uint8_t addrBroadcast) {
      54           0 :   uint8_t buff[] = { addrNode, addrBroadcast };
      55           0 :   return(this->SPIcommand(RADIOLIB_LR2021_CMD_SET_OOK_ADDRESS, true, buff, sizeof(buff)));
      56             : }
      57             : 
      58           0 : int16_t LR2021::getOokRxStats(uint16_t* packetRx, uint16_t* crcError, uint16_t* lenError) {
      59           0 :   uint8_t buff[6] = { 0 };
      60           0 :   int16_t state = this->SPIcommand(RADIOLIB_LR2021_CMD_GET_OOK_RX_STATS, false, buff, sizeof(buff));
      61           0 :   if(packetRx) { *packetRx = ((uint16_t)(buff[0]) << 8) | (uint16_t)buff[1]; }
      62           0 :   if(crcError) { *crcError = ((uint16_t)(buff[2]) << 8) | (uint16_t)buff[3]; }
      63           0 :   if(lenError) { *lenError = ((uint16_t)(buff[4]) << 8) | (uint16_t)buff[5]; }
      64           0 :   return(state);
      65             : }
      66             : 
      67           0 : int16_t LR2021::getOokPacketStatus(uint16_t* packetLen, float* rssiAvg, float* rssiHigh, bool* addrMatchNode, bool* addrMatchBroadcast, float* lqi) {
      68           0 :   uint8_t buff[6] = { 0 };
      69           0 :   int16_t state = this->SPIcommand(RADIOLIB_LR2021_CMD_GET_OOK_PACKET_STATUS, false, buff, sizeof(buff));
      70             :   uint16_t raw;
      71           0 :   if(packetLen) { *packetLen = ((uint16_t)(buff[0]) << 8) | (uint16_t)buff[1]; }
      72           0 :   if(rssiAvg) {
      73           0 :     raw = (uint16_t)buff[2] << 1;
      74           0 :     raw |= (buff[4] & 0x04) >> 2;
      75           0 :     *rssiAvg = (float)raw / -2.0f;
      76             :   }
      77           0 :   if(rssiHigh) {
      78           0 :     raw = (uint16_t)buff[3] << 1;
      79           0 :     raw |= (buff[4] & 0x01);
      80           0 :     *rssiHigh = (float)raw / -2.0f;
      81             :   }
      82           0 :   if(addrMatchNode) { *addrMatchNode = (buff[4] & 0x10); }
      83           0 :   if(addrMatchBroadcast) { *addrMatchBroadcast = (buff[4] & 0x20); }
      84           0 :   if(lqi) { *lqi = buff[5] * 4.0f; }
      85           0 :   return(state);
      86             : }
      87             : 
      88           0 : int16_t LR2021::setOokDetector(uint16_t preamblePattern, uint8_t patternLen, uint8_t patternNumRepeaters, bool syncWordRaw, bool sofDelimiterRising, uint8_t sofDelimiterLen) {
      89             :   uint8_t buff[] = { 
      90           0 :     (uint8_t)((preamblePattern >> 8) & 0xFF), (uint8_t)(preamblePattern & 0xFF),
      91           0 :     (uint8_t)(patternLen & 0x0F), (uint8_t)(patternNumRepeaters & 0x1F),
      92           0 :     (uint8_t)(((uint8_t)syncWordRaw << 5) | ((uint8_t)sofDelimiterRising << 4) | (sofDelimiterLen & 0x0F)),
      93           0 :   };
      94           0 :   return(this->SPIcommand(RADIOLIB_LR2021_CMD_SET_OOK_DETECTOR, true, buff, sizeof(buff)));
      95             : }
      96             : 
      97           0 : int16_t LR2021::setOokWhiteningParams(uint8_t bitIdx, uint16_t poly, uint16_t init) {
      98             :   uint8_t buff[] = {
      99           0 :     (uint8_t)((bitIdx << 4) | ((poly >> 8) & 0x0FF)), (uint8_t)(poly & 0xFF),
     100           0 :      (uint8_t)((init >> 8) & 0xFF), (uint8_t)(init & 0xFF),
     101           0 :   };
     102           0 :   return(this->SPIcommand(RADIOLIB_LR2021_CMD_SET_OOK_WHITENING_PARAMS, true, buff, sizeof(buff)));
     103             : }
     104             : 
     105             : #endif

Generated by: LCOV version 1.14