Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
DecaWave/DecaWave.cpp@0:a3b83d366423, 2017-12-06 (annotated)
- Committer:
- aungriah
- Date:
- Wed Dec 06 21:35:45 2017 +0000
- Revision:
- 0:a3b83d366423
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
aungriah | 0:a3b83d366423 | 1 | /* |
aungriah | 0:a3b83d366423 | 2 | * DecaWave.cpp |
aungriah | 0:a3b83d366423 | 3 | * |
aungriah | 0:a3b83d366423 | 4 | * Created on: 04.11.2015 |
aungriah | 0:a3b83d366423 | 5 | * Author: kauf |
aungriah | 0:a3b83d366423 | 6 | */ |
aungriah | 0:a3b83d366423 | 7 | |
aungriah | 0:a3b83d366423 | 8 | #include "DecaWave.h" |
aungriah | 0:a3b83d366423 | 9 | //#include "states.h" |
aungriah | 0:a3b83d366423 | 10 | |
aungriah | 0:a3b83d366423 | 11 | extern "C" { |
aungriah | 0:a3b83d366423 | 12 | // TODO: create dedicated struct instead of void pointer |
aungriah | 0:a3b83d366423 | 13 | #pragma Otime |
aungriah | 0:a3b83d366423 | 14 | int writetospi(uint16 headerLength, const uint8 *headerBuffer, |
aungriah | 0:a3b83d366423 | 15 | uint32 bodyLength, const uint8 *bodyBuffer) { |
aungriah | 0:a3b83d366423 | 16 | uint32_t i = 0; |
aungriah | 0:a3b83d366423 | 17 | decaIrqStatus_t stat; |
aungriah | 0:a3b83d366423 | 18 | |
aungriah | 0:a3b83d366423 | 19 | stat = decamutexon(); |
aungriah | 0:a3b83d366423 | 20 | |
aungriah | 0:a3b83d366423 | 21 | // chip select |
aungriah | 0:a3b83d366423 | 22 | decaWaveCs = 0; // set Cable Select pin low to start transmission |
aungriah | 0:a3b83d366423 | 23 | for (i = 0; i < headerLength; i++) { |
aungriah | 0:a3b83d366423 | 24 | decaWaveSpi.write(headerBuffer[i]); |
aungriah | 0:a3b83d366423 | 25 | } |
aungriah | 0:a3b83d366423 | 26 | for (i = 0; i < bodyLength; i++) { |
aungriah | 0:a3b83d366423 | 27 | decaWaveSpi.write(bodyBuffer[i]); |
aungriah | 0:a3b83d366423 | 28 | } |
aungriah | 0:a3b83d366423 | 29 | decaWaveCs = 1; |
aungriah | 0:a3b83d366423 | 30 | |
aungriah | 0:a3b83d366423 | 31 | decamutexoff(stat); |
aungriah | 0:a3b83d366423 | 32 | |
aungriah | 0:a3b83d366423 | 33 | return 0; |
aungriah | 0:a3b83d366423 | 34 | } |
aungriah | 0:a3b83d366423 | 35 | |
aungriah | 0:a3b83d366423 | 36 | #pragma Otime |
aungriah | 0:a3b83d366423 | 37 | int readfromspi(uint16 headerLength, const uint8 *headerBuffer, |
aungriah | 0:a3b83d366423 | 38 | uint32 readLength, uint8 *readBuffer) { |
aungriah | 0:a3b83d366423 | 39 | uint32_t i = 0; |
aungriah | 0:a3b83d366423 | 40 | |
aungriah | 0:a3b83d366423 | 41 | decaIrqStatus_t stat; |
aungriah | 0:a3b83d366423 | 42 | |
aungriah | 0:a3b83d366423 | 43 | stat = decamutexon(); |
aungriah | 0:a3b83d366423 | 44 | |
aungriah | 0:a3b83d366423 | 45 | /* Wait for SPIx Tx buffer empty */ |
aungriah | 0:a3b83d366423 | 46 | //while (port_SPIx_busy_sending()); |
aungriah | 0:a3b83d366423 | 47 | decaWaveCs = 0; |
aungriah | 0:a3b83d366423 | 48 | for (i = 0; i < headerLength; i++) { |
aungriah | 0:a3b83d366423 | 49 | decaWaveSpi.write(headerBuffer[i]); |
aungriah | 0:a3b83d366423 | 50 | } |
aungriah | 0:a3b83d366423 | 51 | for (i = 0; i < readLength; i++) { |
aungriah | 0:a3b83d366423 | 52 | readBuffer[i] = decaWaveSpi.write(0x00); //port_SPIx_receive_data(); //this clears RXNE bit |
aungriah | 0:a3b83d366423 | 53 | } |
aungriah | 0:a3b83d366423 | 54 | decaWaveCs = 1; |
aungriah | 0:a3b83d366423 | 55 | |
aungriah | 0:a3b83d366423 | 56 | decamutexoff(stat); |
aungriah | 0:a3b83d366423 | 57 | |
aungriah | 0:a3b83d366423 | 58 | return 0; |
aungriah | 0:a3b83d366423 | 59 | } |
aungriah | 0:a3b83d366423 | 60 | |
aungriah | 0:a3b83d366423 | 61 | //#pragma Otime |
aungriah | 0:a3b83d366423 | 62 | decaIrqStatus_t decamutexon() { |
aungriah | 0:a3b83d366423 | 63 | decaWaveIrq.disable_irq(); |
aungriah | 0:a3b83d366423 | 64 | return 0; |
aungriah | 0:a3b83d366423 | 65 | } |
aungriah | 0:a3b83d366423 | 66 | |
aungriah | 0:a3b83d366423 | 67 | //#pragma Otime |
aungriah | 0:a3b83d366423 | 68 | void decamutexoff(decaIrqStatus_t s) { |
aungriah | 0:a3b83d366423 | 69 | decaWaveIrq.enable_irq(); |
aungriah | 0:a3b83d366423 | 70 | } |
aungriah | 0:a3b83d366423 | 71 | |
aungriah | 0:a3b83d366423 | 72 | void deca_sleep(unsigned int time_ms) { |
aungriah | 0:a3b83d366423 | 73 | wait_ms(time_ms); |
aungriah | 0:a3b83d366423 | 74 | } |
aungriah | 0:a3b83d366423 | 75 | |
aungriah | 0:a3b83d366423 | 76 | } |
aungriah | 0:a3b83d366423 | 77 | |
aungriah | 0:a3b83d366423 | 78 | DecaWave::DecaWave() |
aungriah | 0:a3b83d366423 | 79 | { |
aungriah | 0:a3b83d366423 | 80 | |
aungriah | 0:a3b83d366423 | 81 | decaWaveCs = 1; // deselect chip |
aungriah | 0:a3b83d366423 | 82 | // decaWaveRst = 1; // make sure that reset pin is high !!!!!!!!!!TODO (haven't the pin definition of the reset pin available |
aungriah | 0:a3b83d366423 | 83 | decaWaveIrq.enable_irq(); |
aungriah | 0:a3b83d366423 | 84 | decaWaveSpi.format(8, 0); // Setup the spi for standard 8 bit data and SPI-Mode 0 (GPIO5, GPIO6 open circuit or ground on DW1000) |
aungriah | 0:a3b83d366423 | 85 | decaWaveSpi.frequency(MIN_SPI_FREQ); // during init phase, only clock at 1 MHz |
aungriah | 0:a3b83d366423 | 86 | |
aungriah | 0:a3b83d366423 | 87 | decaWaveIrq.rise(dwt_isr); // attach interrupt handler to rising edge of interrupt pin from DW1000 |
aungriah | 0:a3b83d366423 | 88 | |
aungriah | 0:a3b83d366423 | 89 | hardreset(); |
aungriah | 0:a3b83d366423 | 90 | dwt_softreset(); |
aungriah | 0:a3b83d366423 | 91 | |
aungriah | 0:a3b83d366423 | 92 | _sequenceNumber = 0; |
aungriah | 0:a3b83d366423 | 93 | } |
aungriah | 0:a3b83d366423 | 94 | |
aungriah | 0:a3b83d366423 | 95 | DecaWave::~DecaWave() { |
aungriah | 0:a3b83d366423 | 96 | // TODO Auto-generated destructor stub |
aungriah | 0:a3b83d366423 | 97 | } |
aungriah | 0:a3b83d366423 | 98 | |
aungriah | 0:a3b83d366423 | 99 | void DecaWave::setup(dwt_config_t configdw, dwt_txconfig_t configdw_tx, |
aungriah | 0:a3b83d366423 | 100 | uint32_t delay, void (*txcallback)(const dwt_cb_data_t *), |
aungriah | 0:a3b83d366423 | 101 | void (*rxcallback)(const dwt_cb_data_t *)) { |
aungriah | 0:a3b83d366423 | 102 | |
aungriah | 0:a3b83d366423 | 103 | _deca_config = configdw; |
aungriah | 0:a3b83d366423 | 104 | _antennadelay = delay; |
aungriah | 0:a3b83d366423 | 105 | // disable interrupts |
aungriah | 0:a3b83d366423 | 106 | decamutexon(); |
aungriah | 0:a3b83d366423 | 107 | |
aungriah | 0:a3b83d366423 | 108 | // inittestapplication |
aungriah | 0:a3b83d366423 | 109 | // setup slow spi |
aungriah | 0:a3b83d366423 | 110 | decaWaveSpi.frequency(MIN_SPI_FREQ); // during init phase, only clock at 1 MHz |
aungriah | 0:a3b83d366423 | 111 | |
aungriah | 0:a3b83d366423 | 112 | // instance init |
aungriah | 0:a3b83d366423 | 113 | dwt_initialise(DWT_LOADUCODE); |
aungriah | 0:a3b83d366423 | 114 | dwt_geteui(_euid); |
aungriah | 0:a3b83d366423 | 115 | |
aungriah | 0:a3b83d366423 | 116 | // setinterrupt, callbacks |
aungriah | 0:a3b83d366423 | 117 | dwt_setinterrupt(DWT_INT_TFRS | DWT_INT_RFCG, 1); |
aungriah | 0:a3b83d366423 | 118 | dwt_setcallbacks(txcallback, rxcallback, NULL, NULL); |
aungriah | 0:a3b83d366423 | 119 | |
aungriah | 0:a3b83d366423 | 120 | // inst config |
aungriah | 0:a3b83d366423 | 121 | dwt_configure(&configdw); |
aungriah | 0:a3b83d366423 | 122 | |
aungriah | 0:a3b83d366423 | 123 | //Configure TX power |
aungriah | 0:a3b83d366423 | 124 | uint32_t power = configdw_tx.power; |
aungriah | 0:a3b83d366423 | 125 | _configTX.PGdly = configdw_tx.PGdly; |
aungriah | 0:a3b83d366423 | 126 | |
aungriah | 0:a3b83d366423 | 127 | //if smart power is used then the value as read from OTP is used directly |
aungriah | 0:a3b83d366423 | 128 | //if smart power is used the user needs to make sure to transmit only one frame per 1ms or TX spectrum power will be violated |
aungriah | 0:a3b83d366423 | 129 | if (configdw.dataRate == DWT_BR_6M8) { |
aungriah | 0:a3b83d366423 | 130 | _configTX.power = power; |
aungriah | 0:a3b83d366423 | 131 | dwt_setsmarttxpower(1); |
aungriah | 0:a3b83d366423 | 132 | } else { //if the smart power is not used, then the low byte value (repeated) is used for the whole TX power register |
aungriah | 0:a3b83d366423 | 133 | uint8 pow = power & 0xFF; |
aungriah | 0:a3b83d366423 | 134 | _configTX.power = (pow | (pow << 8) | (pow << 16) | (pow << 24)); |
aungriah | 0:a3b83d366423 | 135 | dwt_setsmarttxpower(0); |
aungriah | 0:a3b83d366423 | 136 | } |
aungriah | 0:a3b83d366423 | 137 | |
aungriah | 0:a3b83d366423 | 138 | //configure the tx spectrum parameters (power and PG delay) |
aungriah | 0:a3b83d366423 | 139 | dwt_configuretxrf(&_configTX); |
aungriah | 0:a3b83d366423 | 140 | |
aungriah | 0:a3b83d366423 | 141 | _antennadelay += getAntennaDelayOffset(dwt_getpartid()); |
aungriah | 0:a3b83d366423 | 142 | dwt_setrxantennadelay(_antennadelay); |
aungriah | 0:a3b83d366423 | 143 | dwt_settxantennadelay(_antennadelay); |
aungriah | 0:a3b83d366423 | 144 | |
aungriah | 0:a3b83d366423 | 145 | if (configdw.txPreambLength == DWT_PLEN_64) { //if preamble length is 64 |
aungriah | 0:a3b83d366423 | 146 | decaWaveSpi.frequency(MIN_SPI_FREQ); //reduce SPI to < 3MHz |
aungriah | 0:a3b83d366423 | 147 | dwt_loadopsettabfromotp(0); |
aungriah | 0:a3b83d366423 | 148 | decaWaveSpi.frequency(MAX_SPI_FREQ); //increase SPI to max |
aungriah | 0:a3b83d366423 | 149 | } |
aungriah | 0:a3b83d366423 | 150 | wait_ms(10); |
aungriah | 0:a3b83d366423 | 151 | |
aungriah | 0:a3b83d366423 | 152 | autoreenable(); |
aungriah | 0:a3b83d366423 | 153 | |
aungriah | 0:a3b83d366423 | 154 | // enable event counter & clear |
aungriah | 0:a3b83d366423 | 155 | dwt_configeventcounters(1); |
aungriah | 0:a3b83d366423 | 156 | |
aungriah | 0:a3b83d366423 | 157 | decaWaveSpi.frequency(MAX_SPI_FREQ); |
aungriah | 0:a3b83d366423 | 158 | |
aungriah | 0:a3b83d366423 | 159 | // enable interrupts |
aungriah | 0:a3b83d366423 | 160 | decamutexoff(0); |
aungriah | 0:a3b83d366423 | 161 | } |
aungriah | 0:a3b83d366423 | 162 | |
aungriah | 0:a3b83d366423 | 163 | /*! ------------------------------------------------------------------------------------------------------------------ |
aungriah | 0:a3b83d366423 | 164 | * Function: autoreenable() |
aungriah | 0:a3b83d366423 | 165 | * |
aungriah | 0:a3b83d366423 | 166 | * Set the auto-reenable flag |
aungriah | 0:a3b83d366423 | 167 | * |
aungriah | 0:a3b83d366423 | 168 | * arguments: |
aungriah | 0:a3b83d366423 | 169 | * returns: |
aungriah | 0:a3b83d366423 | 170 | */ |
aungriah | 0:a3b83d366423 | 171 | void DecaWave::autoreenable() { |
aungriah | 0:a3b83d366423 | 172 | uint8 byte = 0; |
aungriah | 0:a3b83d366423 | 173 | dwt_readfromdevice(SYS_CFG_ID, 3, 1, &byte); |
aungriah | 0:a3b83d366423 | 174 | |
aungriah | 0:a3b83d366423 | 175 | byte |= (SYS_CFG_RXAUTR >> 24); |
aungriah | 0:a3b83d366423 | 176 | |
aungriah | 0:a3b83d366423 | 177 | dwt_writetodevice(SYS_CFG_ID, 3, 1, &byte) ; |
aungriah | 0:a3b83d366423 | 178 | } |
aungriah | 0:a3b83d366423 | 179 | |
aungriah | 0:a3b83d366423 | 180 | |
aungriah | 0:a3b83d366423 | 181 | /*! ------------------------------------------------------------------------------------------------------------------ |
aungriah | 0:a3b83d366423 | 182 | * Function: sendFrame() |
aungriah | 0:a3b83d366423 | 183 | * |
aungriah | 0:a3b83d366423 | 184 | * Send a pre-composed frame: |
aungriah | 0:a3b83d366423 | 185 | * - Write uint8_t array of with length bytes to register |
aungriah | 0:a3b83d366423 | 186 | * - set length in register |
aungriah | 0:a3b83d366423 | 187 | * - if it is scheduled to be sent at a given timestamp, write 40bit delay in timestamps units |
aungriah | 0:a3b83d366423 | 188 | * - send TX command |
aungriah | 0:a3b83d366423 | 189 | * - if the receiver turns on after a delay, write this delay in us |
aungriah | 0:a3b83d366423 | 190 | * - enable (potentially delay) receiver |
aungriah | 0:a3b83d366423 | 191 | * |
aungriah | 0:a3b83d366423 | 192 | * arguments: pointer to message (uint8 array) with specified length, dtime transmission time (truncated 32bit deca time), delay (us) until RX turn on |
aungriah | 0:a3b83d366423 | 193 | * returns DWT_SUCCESS if process was successful, or DWT_ERROR if TX failed. |
aungriah | 0:a3b83d366423 | 194 | */ |
aungriah | 0:a3b83d366423 | 195 | #pragma Otime |
aungriah | 0:a3b83d366423 | 196 | int8_t DecaWave::sendFrame(uint8_t* message, uint16_t length, uint32_t dtime, |
aungriah | 0:a3b83d366423 | 197 | uint32_t delay) { |
aungriah | 0:a3b83d366423 | 198 | length += 2; // include 2 byte crc in the frame length |
aungriah | 0:a3b83d366423 | 199 | |
aungriah | 0:a3b83d366423 | 200 | dwt_writetxdata(length, message, 0); |
aungriah | 0:a3b83d366423 | 201 | |
aungriah | 0:a3b83d366423 | 202 | dwt_writetxfctrl(length, 0, 1); |
aungriah | 0:a3b83d366423 | 203 | |
aungriah | 0:a3b83d366423 | 204 | if (dtime > 0) { |
aungriah | 0:a3b83d366423 | 205 | dwt_setdelayedtrxtime(dtime); |
aungriah | 0:a3b83d366423 | 206 | } |
aungriah | 0:a3b83d366423 | 207 | |
aungriah | 0:a3b83d366423 | 208 | if (_state == DW_RECEIVE) { |
aungriah | 0:a3b83d366423 | 209 | uint8_t temp = (uint8)SYS_CTRL_TRXOFF ; // This assumes the bit is in the lowest byte |
aungriah | 0:a3b83d366423 | 210 | dwt_writetodevice(SYS_CTRL_ID,0,1,&temp) ; // Disable the radio |
aungriah | 0:a3b83d366423 | 211 | } |
aungriah | 0:a3b83d366423 | 212 | |
aungriah | 0:a3b83d366423 | 213 | uint8_t mode = (dtime>0)*DWT_START_TX_DELAYED + 0*DWT_RESPONSE_EXPECTED; |
aungriah | 0:a3b83d366423 | 214 | _state = DW_TRANSMIT; |
aungriah | 0:a3b83d366423 | 215 | return dwt_starttx(mode); |
aungriah | 0:a3b83d366423 | 216 | } |
aungriah | 0:a3b83d366423 | 217 | |
aungriah | 0:a3b83d366423 | 218 | uint32_t DecaWave::getStatus() { |
aungriah | 0:a3b83d366423 | 219 | uint32_t status; |
aungriah | 0:a3b83d366423 | 220 | // status = dwt_read32bitreg(SYS_STATUS_ID, this); |
aungriah | 0:a3b83d366423 | 221 | dwt_readfromdevice(SYS_STATUS_ID, 0x0, 4, (uint8_t*) &status); |
aungriah | 0:a3b83d366423 | 222 | |
aungriah | 0:a3b83d366423 | 223 | uint32_t temp = SYS_STATUS_MASK_32; |
aungriah | 0:a3b83d366423 | 224 | dwt_writetodevice(SYS_STATUS_ID, 0x00, 4, (uint8_t*)&temp); |
aungriah | 0:a3b83d366423 | 225 | return status; |
aungriah | 0:a3b83d366423 | 226 | } |
aungriah | 0:a3b83d366423 | 227 | |
aungriah | 0:a3b83d366423 | 228 | uint16_t DecaWave::computeFrameLength_us() { |
aungriah | 0:a3b83d366423 | 229 | |
aungriah | 0:a3b83d366423 | 230 | //configure the rx delay receive delay time, it is dependent on the message length |
aungriah | 0:a3b83d366423 | 231 | float msgdatalen = 0; |
aungriah | 0:a3b83d366423 | 232 | float preamblelen = 0; |
aungriah | 0:a3b83d366423 | 233 | int sfdlen = 0; |
aungriah | 0:a3b83d366423 | 234 | int x = 0; |
aungriah | 0:a3b83d366423 | 235 | |
aungriah | 0:a3b83d366423 | 236 | msgdatalen = 16;//sizeof(FrameHeader_t); //TODO add size of header! |
aungriah | 0:a3b83d366423 | 237 | |
aungriah | 0:a3b83d366423 | 238 | |
aungriah | 0:a3b83d366423 | 239 | x = (int) ceil(msgdatalen * 8 / 330.0f); |
aungriah | 0:a3b83d366423 | 240 | |
aungriah | 0:a3b83d366423 | 241 | msgdatalen = msgdatalen * 8 + x * 48; |
aungriah | 0:a3b83d366423 | 242 | |
aungriah | 0:a3b83d366423 | 243 | //assume PHR length is 172308us for 110k and 21539us for 850k/6.81M |
aungriah | 0:a3b83d366423 | 244 | if (_deca_config.dataRate == DWT_BR_110K) { |
aungriah | 0:a3b83d366423 | 245 | msgdatalen *= 8205.13f; |
aungriah | 0:a3b83d366423 | 246 | msgdatalen += 172308; |
aungriah | 0:a3b83d366423 | 247 | |
aungriah | 0:a3b83d366423 | 248 | } else if (_deca_config.dataRate == DWT_BR_850K) { |
aungriah | 0:a3b83d366423 | 249 | msgdatalen *= 1025.64f; |
aungriah | 0:a3b83d366423 | 250 | msgdatalen += 21539; |
aungriah | 0:a3b83d366423 | 251 | } else { |
aungriah | 0:a3b83d366423 | 252 | msgdatalen *= 128.21f; |
aungriah | 0:a3b83d366423 | 253 | msgdatalen += 21539; |
aungriah | 0:a3b83d366423 | 254 | } |
aungriah | 0:a3b83d366423 | 255 | |
aungriah | 0:a3b83d366423 | 256 | //SFD length is 64 for 110k (always) |
aungriah | 0:a3b83d366423 | 257 | //SFD length is 8 for 6.81M, and 16 for 850k, but can vary between 8 and 16 bytes |
aungriah | 0:a3b83d366423 | 258 | sfdlen = dwnsSFDlen[_deca_config.dataRate]; |
aungriah | 0:a3b83d366423 | 259 | |
aungriah | 0:a3b83d366423 | 260 | switch (_deca_config.txPreambLength) { |
aungriah | 0:a3b83d366423 | 261 | case DWT_PLEN_4096: |
aungriah | 0:a3b83d366423 | 262 | preamblelen = 4096.0f; |
aungriah | 0:a3b83d366423 | 263 | break; |
aungriah | 0:a3b83d366423 | 264 | case DWT_PLEN_2048: |
aungriah | 0:a3b83d366423 | 265 | preamblelen = 2048.0f; |
aungriah | 0:a3b83d366423 | 266 | break; |
aungriah | 0:a3b83d366423 | 267 | case DWT_PLEN_1536: |
aungriah | 0:a3b83d366423 | 268 | preamblelen = 1536.0f; |
aungriah | 0:a3b83d366423 | 269 | break; |
aungriah | 0:a3b83d366423 | 270 | case DWT_PLEN_1024: |
aungriah | 0:a3b83d366423 | 271 | preamblelen = 1024.0f; |
aungriah | 0:a3b83d366423 | 272 | break; |
aungriah | 0:a3b83d366423 | 273 | case DWT_PLEN_512: |
aungriah | 0:a3b83d366423 | 274 | preamblelen = 512.0f; |
aungriah | 0:a3b83d366423 | 275 | break; |
aungriah | 0:a3b83d366423 | 276 | case DWT_PLEN_256: |
aungriah | 0:a3b83d366423 | 277 | preamblelen = 256.0f; |
aungriah | 0:a3b83d366423 | 278 | break; |
aungriah | 0:a3b83d366423 | 279 | case DWT_PLEN_128: |
aungriah | 0:a3b83d366423 | 280 | preamblelen = 128.0f; |
aungriah | 0:a3b83d366423 | 281 | break; |
aungriah | 0:a3b83d366423 | 282 | case DWT_PLEN_64: |
aungriah | 0:a3b83d366423 | 283 | preamblelen = 64.0f; |
aungriah | 0:a3b83d366423 | 284 | break; |
aungriah | 0:a3b83d366423 | 285 | } |
aungriah | 0:a3b83d366423 | 286 | |
aungriah | 0:a3b83d366423 | 287 | //preamble = plen * (994 or 1018) depending on 16 or 64 PRF |
aungriah | 0:a3b83d366423 | 288 | if (_deca_config.prf == DWT_PRF_16M) { |
aungriah | 0:a3b83d366423 | 289 | preamblelen = (sfdlen + preamblelen) * 0.99359f; |
aungriah | 0:a3b83d366423 | 290 | } else { |
aungriah | 0:a3b83d366423 | 291 | preamblelen = (sfdlen + preamblelen) * 1.01763f; |
aungriah | 0:a3b83d366423 | 292 | } |
aungriah | 0:a3b83d366423 | 293 | |
aungriah | 0:a3b83d366423 | 294 | //set the frame wait timeout time - total time the frame takes in symbols |
aungriah | 0:a3b83d366423 | 295 | return uint16_t( |
aungriah | 0:a3b83d366423 | 296 | 16 + (int) ((preamblelen + (msgdatalen / 1000.0f)) / 1.0256f)); |
aungriah | 0:a3b83d366423 | 297 | |
aungriah | 0:a3b83d366423 | 298 | } |
aungriah | 0:a3b83d366423 | 299 | |
aungriah | 0:a3b83d366423 | 300 | float DecaWave::getRXLevel(dwt_rxdiag_t *diagnostics) { |
aungriah | 0:a3b83d366423 | 301 | float A; // 115.72 if PRF 16 MHz, 121.74 if PRF 64 MHz |
aungriah | 0:a3b83d366423 | 302 | if (_deca_config.prf == DWT_PRF_16M) { |
aungriah | 0:a3b83d366423 | 303 | A = 115.72f; |
aungriah | 0:a3b83d366423 | 304 | } else { |
aungriah | 0:a3b83d366423 | 305 | A = 121.74f; |
aungriah | 0:a3b83d366423 | 306 | } |
aungriah | 0:a3b83d366423 | 307 | // RXLevel (dBm) is calculated as P = 10 * log10( C * 2^17 ) / N^2 ) - A |
aungriah | 0:a3b83d366423 | 308 | // use magic number: 10*log10(2^17)=51.175 |
aungriah | 0:a3b83d366423 | 309 | return 10 * log10(float(diagnostics->maxGrowthCIR)) + 51.175f - 20 * log10(float(diagnostics->rxPreamCount)) - A; // user manual 4.7.2 p.45 |
aungriah | 0:a3b83d366423 | 310 | } |
aungriah | 0:a3b83d366423 | 311 | |
aungriah | 0:a3b83d366423 | 312 | float DecaWave::getFPLevel() { |
aungriah | 0:a3b83d366423 | 313 | |
aungriah | 0:a3b83d366423 | 314 | uint32_t frameInfo = dwt_read32bitreg(RX_FINFO_ID); |
aungriah | 0:a3b83d366423 | 315 | |
aungriah | 0:a3b83d366423 | 316 | uint64_t frameQuality; |
aungriah | 0:a3b83d366423 | 317 | dwt_readfromdevice(RX_FQUAL_ID, 0, 8, (uint8_t*) &frameQuality); |
aungriah | 0:a3b83d366423 | 318 | |
aungriah | 0:a3b83d366423 | 319 | uint16_t F1; |
aungriah | 0:a3b83d366423 | 320 | dwt_readfromdevice(RX_TIME_ID, 7, 2, (uint8_t*) &F1); |
aungriah | 0:a3b83d366423 | 321 | uint16_t F2 = (frameQuality >> 16) & 0xFFFF; |
aungriah | 0:a3b83d366423 | 322 | uint16_t F3 = (frameQuality >> 32) & 0xFFFF; |
aungriah | 0:a3b83d366423 | 323 | |
aungriah | 0:a3b83d366423 | 324 | float A; // 115.72 if PRF 16 MHz, 121.74 if PRF 64 MHz |
aungriah | 0:a3b83d366423 | 325 | if (_deca_config.prf == DWT_PRF_16M) { |
aungriah | 0:a3b83d366423 | 326 | A = 115.72f; |
aungriah | 0:a3b83d366423 | 327 | } else { |
aungriah | 0:a3b83d366423 | 328 | A = 121.74f; |
aungriah | 0:a3b83d366423 | 329 | } |
aungriah | 0:a3b83d366423 | 330 | uint32_t N = (frameInfo >> 20) & 0x7FF; |
aungriah | 0:a3b83d366423 | 331 | |
aungriah | 0:a3b83d366423 | 332 | // First Path Power Level (dBm) is calculated as P = 10 * log10( F1^2+F2^2+F3^2) / N^2 ) - A |
aungriah | 0:a3b83d366423 | 333 | |
aungriah | 0:a3b83d366423 | 334 | return 10 |
aungriah | 0:a3b83d366423 | 335 | * log10( |
aungriah | 0:a3b83d366423 | 336 | float(F1) * float(F1) + float(F2) * float(F2) |
aungriah | 0:a3b83d366423 | 337 | + float(F3) * float(F3)) - 20 * log10(float(N)) - A; // user manual 4.7.1 p.44 |
aungriah | 0:a3b83d366423 | 338 | } |
aungriah | 0:a3b83d366423 | 339 | |
aungriah | 0:a3b83d366423 | 340 | void DecaWave::reset() { |
aungriah | 0:a3b83d366423 | 341 | decaWaveSpi.frequency(MIN_SPI_FREQ); |
aungriah | 0:a3b83d366423 | 342 | dwt_softreset(); |
aungriah | 0:a3b83d366423 | 343 | decaWaveSpi.frequency(MAX_SPI_FREQ); |
aungriah | 0:a3b83d366423 | 344 | } |
aungriah | 0:a3b83d366423 | 345 | |
aungriah | 0:a3b83d366423 | 346 | void DecaWave::hardreset() {//TODO: Check where the reset-pin is and add it! |
aungriah | 0:a3b83d366423 | 347 | //decaWaveRst = 0; |
aungriah | 0:a3b83d366423 | 348 | wait_ms(10); |
aungriah | 0:a3b83d366423 | 349 | // decaWaveRst = 1; |
aungriah | 0:a3b83d366423 | 350 | } |
aungriah | 0:a3b83d366423 | 351 | |
aungriah | 0:a3b83d366423 | 352 | int8_t DecaWave::turnonrx() { |
aungriah | 0:a3b83d366423 | 353 | int8_t result = dwt_rxenable(0); |
aungriah | 0:a3b83d366423 | 354 | if (result != DWT_ERROR) { |
aungriah | 0:a3b83d366423 | 355 | _state = DW_RECEIVE; |
aungriah | 0:a3b83d366423 | 356 | } else { |
aungriah | 0:a3b83d366423 | 357 | _state = DW_IDLE; |
aungriah | 0:a3b83d366423 | 358 | } |
aungriah | 0:a3b83d366423 | 359 | return result; |
aungriah | 0:a3b83d366423 | 360 | } |
aungriah | 0:a3b83d366423 | 361 | |
aungriah | 0:a3b83d366423 | 362 | void DecaWave::turnoffrx() { |
aungriah | 0:a3b83d366423 | 363 | uint8_t temp = (uint8)SYS_CTRL_TRXOFF ; // This assumes the bit is in the lowest byte |
aungriah | 0:a3b83d366423 | 364 | dwt_writetodevice(SYS_CTRL_ID,0,1,&temp) ; // Disable the radio |
aungriah | 0:a3b83d366423 | 365 | _state = DW_IDLE; |
aungriah | 0:a3b83d366423 | 366 | } |
aungriah | 0:a3b83d366423 | 367 | |
aungriah | 0:a3b83d366423 | 368 | uint8_t DecaWave::getNextSequenceNumber() { |
aungriah | 0:a3b83d366423 | 369 | return ++_sequenceNumber; |
aungriah | 0:a3b83d366423 | 370 | } |
aungriah | 0:a3b83d366423 | 371 | |
aungriah | 0:a3b83d366423 | 372 | uint16_t DecaWave::getAntennaDelay() { |
aungriah | 0:a3b83d366423 | 373 | return _antennadelay; |
aungriah | 0:a3b83d366423 | 374 | } |
aungriah | 0:a3b83d366423 | 375 | |
aungriah | 0:a3b83d366423 | 376 | |
aungriah | 0:a3b83d366423 | 377 | uint8_t DecaWave::getCHAN() { |
aungriah | 0:a3b83d366423 | 378 | return _deca_config.chan; |
aungriah | 0:a3b83d366423 | 379 | } |
aungriah | 0:a3b83d366423 | 380 | |
aungriah | 0:a3b83d366423 | 381 | uint8_t DecaWave::getPRF() { |
aungriah | 0:a3b83d366423 | 382 | return _deca_config.prf; |
aungriah | 0:a3b83d366423 | 383 | } |
aungriah | 0:a3b83d366423 | 384 | |
aungriah | 0:a3b83d366423 | 385 | #define NUM_16M_OFFSET (37) |
aungriah | 0:a3b83d366423 | 386 | #define NUM_16M_OFFSETWB (68) |
aungriah | 0:a3b83d366423 | 387 | #define NUM_64M_OFFSET (26) |
aungriah | 0:a3b83d366423 | 388 | #define NUM_64M_OFFSETWB (59) |
aungriah | 0:a3b83d366423 | 389 | |
aungriah | 0:a3b83d366423 | 390 | const uint8 chan_idxnb[NUM_CH_SUPPORTED] = {0, 0, 1, 2, 0, 3, 0, 0}; // Only channels 1,2,3 and 5 are in the narrow band tables |
aungriah | 0:a3b83d366423 | 391 | const uint8 chan_idxwb[NUM_CH_SUPPORTED] = {0, 0, 0, 0, 0, 0, 0, 1}; // Only channels 4 and 7 are in in the wide band tables |
aungriah | 0:a3b83d366423 | 392 | |
aungriah | 0:a3b83d366423 | 393 | //--------------------------------------------------------------------------------------------------------------------------- |
aungriah | 0:a3b83d366423 | 394 | // Range Bias Correction TABLES of range values in integer units of 25 CM, for 8-bit unsigned storage, MUST END IN 255 !!!!!! |
aungriah | 0:a3b83d366423 | 395 | //--------------------------------------------------------------------------------------------------------------------------- |
aungriah | 0:a3b83d366423 | 396 | |
aungriah | 0:a3b83d366423 | 397 | // offsets to nearest centimetre for index 0, all rest are +1 cm per value |
aungriah | 0:a3b83d366423 | 398 | |
aungriah | 0:a3b83d366423 | 399 | #define CM_OFFSET_16M_NB (-23) // For normal band channels at 16 MHz PRF |
aungriah | 0:a3b83d366423 | 400 | #define CM_OFFSET_16M_WB (-28) // For wider band channels at 16 MHz PRF |
aungriah | 0:a3b83d366423 | 401 | #define CM_OFFSET_64M_NB (-17) // For normal band channels at 64 MHz PRF |
aungriah | 0:a3b83d366423 | 402 | #define CM_OFFSET_64M_WB (-30) // For wider band channels at 64 MHz PRF |
aungriah | 0:a3b83d366423 | 403 | |
aungriah | 0:a3b83d366423 | 404 | |
aungriah | 0:a3b83d366423 | 405 | /*! ------------------------------------------------------------------------------------------------------------------ |
aungriah | 0:a3b83d366423 | 406 | * Function: getAntennaDelayOffset() |
aungriah | 0:a3b83d366423 | 407 | * |
aungriah | 0:a3b83d366423 | 408 | * Get the Offset for the antenna delay |
aungriah | 0:a3b83d366423 | 409 | * |
aungriah | 0:a3b83d366423 | 410 | * arguments: |
aungriah | 0:a3b83d366423 | 411 | * returns: |
aungriah | 0:a3b83d366423 | 412 | */ |
aungriah | 0:a3b83d366423 | 413 | int16_t DecaWave::getAntennaDelayOffset(uint32_t board_id) { |
aungriah | 0:a3b83d366423 | 414 | switch(board_id){ |
aungriah | 0:a3b83d366423 | 415 | // Calibrated on 23.03. outside at 15C, windy. 8m side length |
aungriah | 0:a3b83d366423 | 416 | case 268436898: return -91; |
aungriah | 0:a3b83d366423 | 417 | case 268445167: return -101; |
aungriah | 0:a3b83d366423 | 418 | case 268445155: return -106; |
aungriah | 0:a3b83d366423 | 419 | case 268445158: return -107; |
aungriah | 0:a3b83d366423 | 420 | case 268436604: return -106; |
aungriah | 0:a3b83d366423 | 421 | case 268437112: return -102; |
aungriah | 0:a3b83d366423 | 422 | case 268445165: return -100; |
aungriah | 0:a3b83d366423 | 423 | case 268444882: return -102; |
aungriah | 0:a3b83d366423 | 424 | case 268437817: return -87; |
aungriah | 0:a3b83d366423 | 425 | case 268445163: return -104; |
aungriah | 0:a3b83d366423 | 426 | case 268436897: return -99; |
aungriah | 0:a3b83d366423 | 427 | case 268437656: return -106; |
aungriah | 0:a3b83d366423 | 428 | case 268445154: return -102; |
aungriah | 0:a3b83d366423 | 429 | case 268436603: return -98; |
aungriah | 0:a3b83d366423 | 430 | case 268444886: return -112; |
aungriah | 0:a3b83d366423 | 431 | case 268437847: return -119; |
aungriah | 0:a3b83d366423 | 432 | case 268437825: return -111; |
aungriah | 0:a3b83d366423 | 433 | |
aungriah | 0:a3b83d366423 | 434 | default: return -106; |
aungriah | 0:a3b83d366423 | 435 | } |
aungriah | 0:a3b83d366423 | 436 | } |
aungriah | 0:a3b83d366423 | 437 | |
aungriah | 0:a3b83d366423 | 438 | //--------------------------------------------------------------------------------------------------------------------------- |
aungriah | 0:a3b83d366423 | 439 | // range25cm16PRFnb: Range Bias Correction table for narrow band channels at 16 MHz PRF, NB: !!!! each MUST END IN 255 !!!! |
aungriah | 0:a3b83d366423 | 440 | //--------------------------------------------------------------------------------------------------------------------------- |
aungriah | 0:a3b83d366423 | 441 | |
aungriah | 0:a3b83d366423 | 442 | const uint8 range25cm16PRFnb[4][NUM_16M_OFFSET] = |
aungriah | 0:a3b83d366423 | 443 | { |
aungriah | 0:a3b83d366423 | 444 | // Ch 1 - range25cm16PRFnb |
aungriah | 0:a3b83d366423 | 445 | { |
aungriah | 0:a3b83d366423 | 446 | 1, |
aungriah | 0:a3b83d366423 | 447 | 3, |
aungriah | 0:a3b83d366423 | 448 | 4, |
aungriah | 0:a3b83d366423 | 449 | 5, |
aungriah | 0:a3b83d366423 | 450 | 7, |
aungriah | 0:a3b83d366423 | 451 | 9, |
aungriah | 0:a3b83d366423 | 452 | 11, |
aungriah | 0:a3b83d366423 | 453 | 12, |
aungriah | 0:a3b83d366423 | 454 | 13, |
aungriah | 0:a3b83d366423 | 455 | 15, |
aungriah | 0:a3b83d366423 | 456 | 18, |
aungriah | 0:a3b83d366423 | 457 | 20, |
aungriah | 0:a3b83d366423 | 458 | 23, |
aungriah | 0:a3b83d366423 | 459 | 25, |
aungriah | 0:a3b83d366423 | 460 | 28, |
aungriah | 0:a3b83d366423 | 461 | 30, |
aungriah | 0:a3b83d366423 | 462 | 33, |
aungriah | 0:a3b83d366423 | 463 | 36, |
aungriah | 0:a3b83d366423 | 464 | 40, |
aungriah | 0:a3b83d366423 | 465 | 43, |
aungriah | 0:a3b83d366423 | 466 | 47, |
aungriah | 0:a3b83d366423 | 467 | 50, |
aungriah | 0:a3b83d366423 | 468 | 54, |
aungriah | 0:a3b83d366423 | 469 | 58, |
aungriah | 0:a3b83d366423 | 470 | 63, |
aungriah | 0:a3b83d366423 | 471 | 66, |
aungriah | 0:a3b83d366423 | 472 | 71, |
aungriah | 0:a3b83d366423 | 473 | 76, |
aungriah | 0:a3b83d366423 | 474 | 82, |
aungriah | 0:a3b83d366423 | 475 | 89, |
aungriah | 0:a3b83d366423 | 476 | 98, |
aungriah | 0:a3b83d366423 | 477 | 109, |
aungriah | 0:a3b83d366423 | 478 | 127, |
aungriah | 0:a3b83d366423 | 479 | 155, |
aungriah | 0:a3b83d366423 | 480 | 222, |
aungriah | 0:a3b83d366423 | 481 | 255, |
aungriah | 0:a3b83d366423 | 482 | 255 |
aungriah | 0:a3b83d366423 | 483 | }, |
aungriah | 0:a3b83d366423 | 484 | |
aungriah | 0:a3b83d366423 | 485 | // Ch 2 - range25cm16PRFnb |
aungriah | 0:a3b83d366423 | 486 | { |
aungriah | 0:a3b83d366423 | 487 | 1, |
aungriah | 0:a3b83d366423 | 488 | 2, |
aungriah | 0:a3b83d366423 | 489 | 4, |
aungriah | 0:a3b83d366423 | 490 | 5, |
aungriah | 0:a3b83d366423 | 491 | 6, |
aungriah | 0:a3b83d366423 | 492 | 8, |
aungriah | 0:a3b83d366423 | 493 | 9, |
aungriah | 0:a3b83d366423 | 494 | 10, |
aungriah | 0:a3b83d366423 | 495 | 12, |
aungriah | 0:a3b83d366423 | 496 | 13, |
aungriah | 0:a3b83d366423 | 497 | 15, |
aungriah | 0:a3b83d366423 | 498 | 18, |
aungriah | 0:a3b83d366423 | 499 | 20, |
aungriah | 0:a3b83d366423 | 500 | 22, |
aungriah | 0:a3b83d366423 | 501 | 24, |
aungriah | 0:a3b83d366423 | 502 | 27, |
aungriah | 0:a3b83d366423 | 503 | 29, |
aungriah | 0:a3b83d366423 | 504 | 32, |
aungriah | 0:a3b83d366423 | 505 | 35, |
aungriah | 0:a3b83d366423 | 506 | 38, |
aungriah | 0:a3b83d366423 | 507 | 41, |
aungriah | 0:a3b83d366423 | 508 | 44, |
aungriah | 0:a3b83d366423 | 509 | 47, |
aungriah | 0:a3b83d366423 | 510 | 51, |
aungriah | 0:a3b83d366423 | 511 | 55, |
aungriah | 0:a3b83d366423 | 512 | 58, |
aungriah | 0:a3b83d366423 | 513 | 62, |
aungriah | 0:a3b83d366423 | 514 | 66, |
aungriah | 0:a3b83d366423 | 515 | 71, |
aungriah | 0:a3b83d366423 | 516 | 78, |
aungriah | 0:a3b83d366423 | 517 | 85, |
aungriah | 0:a3b83d366423 | 518 | 96, |
aungriah | 0:a3b83d366423 | 519 | 111, |
aungriah | 0:a3b83d366423 | 520 | 135, |
aungriah | 0:a3b83d366423 | 521 | 194, |
aungriah | 0:a3b83d366423 | 522 | 240, |
aungriah | 0:a3b83d366423 | 523 | 255 |
aungriah | 0:a3b83d366423 | 524 | }, |
aungriah | 0:a3b83d366423 | 525 | |
aungriah | 0:a3b83d366423 | 526 | // Ch 3 - range25cm16PRFnb |
aungriah | 0:a3b83d366423 | 527 | { |
aungriah | 0:a3b83d366423 | 528 | 1, |
aungriah | 0:a3b83d366423 | 529 | 2, |
aungriah | 0:a3b83d366423 | 530 | 3, |
aungriah | 0:a3b83d366423 | 531 | 4, |
aungriah | 0:a3b83d366423 | 532 | 5, |
aungriah | 0:a3b83d366423 | 533 | 7, |
aungriah | 0:a3b83d366423 | 534 | 8, |
aungriah | 0:a3b83d366423 | 535 | 9, |
aungriah | 0:a3b83d366423 | 536 | 10, |
aungriah | 0:a3b83d366423 | 537 | 12, |
aungriah | 0:a3b83d366423 | 538 | 14, |
aungriah | 0:a3b83d366423 | 539 | 16, |
aungriah | 0:a3b83d366423 | 540 | 18, |
aungriah | 0:a3b83d366423 | 541 | 20, |
aungriah | 0:a3b83d366423 | 542 | 22, |
aungriah | 0:a3b83d366423 | 543 | 24, |
aungriah | 0:a3b83d366423 | 544 | 26, |
aungriah | 0:a3b83d366423 | 545 | 28, |
aungriah | 0:a3b83d366423 | 546 | 31, |
aungriah | 0:a3b83d366423 | 547 | 33, |
aungriah | 0:a3b83d366423 | 548 | 36, |
aungriah | 0:a3b83d366423 | 549 | 39, |
aungriah | 0:a3b83d366423 | 550 | 42, |
aungriah | 0:a3b83d366423 | 551 | 45, |
aungriah | 0:a3b83d366423 | 552 | 49, |
aungriah | 0:a3b83d366423 | 553 | 52, |
aungriah | 0:a3b83d366423 | 554 | 55, |
aungriah | 0:a3b83d366423 | 555 | 59, |
aungriah | 0:a3b83d366423 | 556 | 63, |
aungriah | 0:a3b83d366423 | 557 | 69, |
aungriah | 0:a3b83d366423 | 558 | 76, |
aungriah | 0:a3b83d366423 | 559 | 85, |
aungriah | 0:a3b83d366423 | 560 | 98, |
aungriah | 0:a3b83d366423 | 561 | 120, |
aungriah | 0:a3b83d366423 | 562 | 173, |
aungriah | 0:a3b83d366423 | 563 | 213, |
aungriah | 0:a3b83d366423 | 564 | 255 |
aungriah | 0:a3b83d366423 | 565 | }, |
aungriah | 0:a3b83d366423 | 566 | |
aungriah | 0:a3b83d366423 | 567 | // Ch 5 - range25cm16PRFnb |
aungriah | 0:a3b83d366423 | 568 | { |
aungriah | 0:a3b83d366423 | 569 | 1, |
aungriah | 0:a3b83d366423 | 570 | 1, |
aungriah | 0:a3b83d366423 | 571 | 2, |
aungriah | 0:a3b83d366423 | 572 | 3, |
aungriah | 0:a3b83d366423 | 573 | 4, |
aungriah | 0:a3b83d366423 | 574 | 5, |
aungriah | 0:a3b83d366423 | 575 | 6, |
aungriah | 0:a3b83d366423 | 576 | 6, |
aungriah | 0:a3b83d366423 | 577 | 7, |
aungriah | 0:a3b83d366423 | 578 | 8, |
aungriah | 0:a3b83d366423 | 579 | 9, |
aungriah | 0:a3b83d366423 | 580 | 11, |
aungriah | 0:a3b83d366423 | 581 | 12, |
aungriah | 0:a3b83d366423 | 582 | 14, |
aungriah | 0:a3b83d366423 | 583 | 15, |
aungriah | 0:a3b83d366423 | 584 | 16, |
aungriah | 0:a3b83d366423 | 585 | 18, |
aungriah | 0:a3b83d366423 | 586 | 20, |
aungriah | 0:a3b83d366423 | 587 | 21, |
aungriah | 0:a3b83d366423 | 588 | 23, |
aungriah | 0:a3b83d366423 | 589 | 25, |
aungriah | 0:a3b83d366423 | 590 | 27, |
aungriah | 0:a3b83d366423 | 591 | 29, |
aungriah | 0:a3b83d366423 | 592 | 31, |
aungriah | 0:a3b83d366423 | 593 | 34, |
aungriah | 0:a3b83d366423 | 594 | 36, |
aungriah | 0:a3b83d366423 | 595 | 38, |
aungriah | 0:a3b83d366423 | 596 | 41, |
aungriah | 0:a3b83d366423 | 597 | 44, |
aungriah | 0:a3b83d366423 | 598 | 48, |
aungriah | 0:a3b83d366423 | 599 | 53, |
aungriah | 0:a3b83d366423 | 600 | 59, |
aungriah | 0:a3b83d366423 | 601 | 68, |
aungriah | 0:a3b83d366423 | 602 | 83, |
aungriah | 0:a3b83d366423 | 603 | 120, |
aungriah | 0:a3b83d366423 | 604 | 148, |
aungriah | 0:a3b83d366423 | 605 | 255 |
aungriah | 0:a3b83d366423 | 606 | } |
aungriah | 0:a3b83d366423 | 607 | }; // end range25cm16PRFnb |
aungriah | 0:a3b83d366423 | 608 | |
aungriah | 0:a3b83d366423 | 609 | |
aungriah | 0:a3b83d366423 | 610 | //--------------------------------------------------------------------------------------------------------------------------- |
aungriah | 0:a3b83d366423 | 611 | // range25cm16PRFwb: Range Bias Correction table for wide band channels at 16 MHz PRF, NB: !!!! each MUST END IN 255 !!!! |
aungriah | 0:a3b83d366423 | 612 | //--------------------------------------------------------------------------------------------------------------------------- |
aungriah | 0:a3b83d366423 | 613 | |
aungriah | 0:a3b83d366423 | 614 | const uint8 range25cm16PRFwb[2][NUM_16M_OFFSETWB] = |
aungriah | 0:a3b83d366423 | 615 | { |
aungriah | 0:a3b83d366423 | 616 | // Ch 4 - range25cm16PRFwb |
aungriah | 0:a3b83d366423 | 617 | { |
aungriah | 0:a3b83d366423 | 618 | 7, |
aungriah | 0:a3b83d366423 | 619 | 7, |
aungriah | 0:a3b83d366423 | 620 | 8, |
aungriah | 0:a3b83d366423 | 621 | 9, |
aungriah | 0:a3b83d366423 | 622 | 9, |
aungriah | 0:a3b83d366423 | 623 | 10, |
aungriah | 0:a3b83d366423 | 624 | 11, |
aungriah | 0:a3b83d366423 | 625 | 11, |
aungriah | 0:a3b83d366423 | 626 | 12, |
aungriah | 0:a3b83d366423 | 627 | 13, |
aungriah | 0:a3b83d366423 | 628 | 14, |
aungriah | 0:a3b83d366423 | 629 | 15, |
aungriah | 0:a3b83d366423 | 630 | 16, |
aungriah | 0:a3b83d366423 | 631 | 17, |
aungriah | 0:a3b83d366423 | 632 | 18, |
aungriah | 0:a3b83d366423 | 633 | 19, |
aungriah | 0:a3b83d366423 | 634 | 20, |
aungriah | 0:a3b83d366423 | 635 | 21, |
aungriah | 0:a3b83d366423 | 636 | 22, |
aungriah | 0:a3b83d366423 | 637 | 23, |
aungriah | 0:a3b83d366423 | 638 | 24, |
aungriah | 0:a3b83d366423 | 639 | 26, |
aungriah | 0:a3b83d366423 | 640 | 27, |
aungriah | 0:a3b83d366423 | 641 | 28, |
aungriah | 0:a3b83d366423 | 642 | 30, |
aungriah | 0:a3b83d366423 | 643 | 31, |
aungriah | 0:a3b83d366423 | 644 | 32, |
aungriah | 0:a3b83d366423 | 645 | 34, |
aungriah | 0:a3b83d366423 | 646 | 36, |
aungriah | 0:a3b83d366423 | 647 | 38, |
aungriah | 0:a3b83d366423 | 648 | 40, |
aungriah | 0:a3b83d366423 | 649 | 42, |
aungriah | 0:a3b83d366423 | 650 | 44, |
aungriah | 0:a3b83d366423 | 651 | 46, |
aungriah | 0:a3b83d366423 | 652 | 48, |
aungriah | 0:a3b83d366423 | 653 | 50, |
aungriah | 0:a3b83d366423 | 654 | 52, |
aungriah | 0:a3b83d366423 | 655 | 55, |
aungriah | 0:a3b83d366423 | 656 | 57, |
aungriah | 0:a3b83d366423 | 657 | 59, |
aungriah | 0:a3b83d366423 | 658 | 61, |
aungriah | 0:a3b83d366423 | 659 | 63, |
aungriah | 0:a3b83d366423 | 660 | 66, |
aungriah | 0:a3b83d366423 | 661 | 68, |
aungriah | 0:a3b83d366423 | 662 | 71, |
aungriah | 0:a3b83d366423 | 663 | 74, |
aungriah | 0:a3b83d366423 | 664 | 78, |
aungriah | 0:a3b83d366423 | 665 | 81, |
aungriah | 0:a3b83d366423 | 666 | 85, |
aungriah | 0:a3b83d366423 | 667 | 89, |
aungriah | 0:a3b83d366423 | 668 | 94, |
aungriah | 0:a3b83d366423 | 669 | 99, |
aungriah | 0:a3b83d366423 | 670 | 104, |
aungriah | 0:a3b83d366423 | 671 | 110, |
aungriah | 0:a3b83d366423 | 672 | 116, |
aungriah | 0:a3b83d366423 | 673 | 123, |
aungriah | 0:a3b83d366423 | 674 | 130, |
aungriah | 0:a3b83d366423 | 675 | 139, |
aungriah | 0:a3b83d366423 | 676 | 150, |
aungriah | 0:a3b83d366423 | 677 | 164, |
aungriah | 0:a3b83d366423 | 678 | 182, |
aungriah | 0:a3b83d366423 | 679 | 207, |
aungriah | 0:a3b83d366423 | 680 | 238, |
aungriah | 0:a3b83d366423 | 681 | 255, |
aungriah | 0:a3b83d366423 | 682 | 255, |
aungriah | 0:a3b83d366423 | 683 | 255, |
aungriah | 0:a3b83d366423 | 684 | 255, |
aungriah | 0:a3b83d366423 | 685 | 255 |
aungriah | 0:a3b83d366423 | 686 | }, |
aungriah | 0:a3b83d366423 | 687 | |
aungriah | 0:a3b83d366423 | 688 | // Ch 7 - range25cm16PRFwb |
aungriah | 0:a3b83d366423 | 689 | { |
aungriah | 0:a3b83d366423 | 690 | 4, |
aungriah | 0:a3b83d366423 | 691 | 5, |
aungriah | 0:a3b83d366423 | 692 | 5, |
aungriah | 0:a3b83d366423 | 693 | 5, |
aungriah | 0:a3b83d366423 | 694 | 6, |
aungriah | 0:a3b83d366423 | 695 | 6, |
aungriah | 0:a3b83d366423 | 696 | 7, |
aungriah | 0:a3b83d366423 | 697 | 7, |
aungriah | 0:a3b83d366423 | 698 | 7, |
aungriah | 0:a3b83d366423 | 699 | 8, |
aungriah | 0:a3b83d366423 | 700 | 9, |
aungriah | 0:a3b83d366423 | 701 | 9, |
aungriah | 0:a3b83d366423 | 702 | 10, |
aungriah | 0:a3b83d366423 | 703 | 10, |
aungriah | 0:a3b83d366423 | 704 | 11, |
aungriah | 0:a3b83d366423 | 705 | 11, |
aungriah | 0:a3b83d366423 | 706 | 12, |
aungriah | 0:a3b83d366423 | 707 | 13, |
aungriah | 0:a3b83d366423 | 708 | 13, |
aungriah | 0:a3b83d366423 | 709 | 14, |
aungriah | 0:a3b83d366423 | 710 | 15, |
aungriah | 0:a3b83d366423 | 711 | 16, |
aungriah | 0:a3b83d366423 | 712 | 17, |
aungriah | 0:a3b83d366423 | 713 | 17, |
aungriah | 0:a3b83d366423 | 714 | 18, |
aungriah | 0:a3b83d366423 | 715 | 19, |
aungriah | 0:a3b83d366423 | 716 | 20, |
aungriah | 0:a3b83d366423 | 717 | 21, |
aungriah | 0:a3b83d366423 | 718 | 22, |
aungriah | 0:a3b83d366423 | 719 | 23, |
aungriah | 0:a3b83d366423 | 720 | 25, |
aungriah | 0:a3b83d366423 | 721 | 26, |
aungriah | 0:a3b83d366423 | 722 | 27, |
aungriah | 0:a3b83d366423 | 723 | 29, |
aungriah | 0:a3b83d366423 | 724 | 30, |
aungriah | 0:a3b83d366423 | 725 | 31, |
aungriah | 0:a3b83d366423 | 726 | 32, |
aungriah | 0:a3b83d366423 | 727 | 34, |
aungriah | 0:a3b83d366423 | 728 | 35, |
aungriah | 0:a3b83d366423 | 729 | 36, |
aungriah | 0:a3b83d366423 | 730 | 38, |
aungriah | 0:a3b83d366423 | 731 | 39, |
aungriah | 0:a3b83d366423 | 732 | 40, |
aungriah | 0:a3b83d366423 | 733 | 42, |
aungriah | 0:a3b83d366423 | 734 | 44, |
aungriah | 0:a3b83d366423 | 735 | 46, |
aungriah | 0:a3b83d366423 | 736 | 48, |
aungriah | 0:a3b83d366423 | 737 | 50, |
aungriah | 0:a3b83d366423 | 738 | 52, |
aungriah | 0:a3b83d366423 | 739 | 55, |
aungriah | 0:a3b83d366423 | 740 | 58, |
aungriah | 0:a3b83d366423 | 741 | 61, |
aungriah | 0:a3b83d366423 | 742 | 64, |
aungriah | 0:a3b83d366423 | 743 | 68, |
aungriah | 0:a3b83d366423 | 744 | 72, |
aungriah | 0:a3b83d366423 | 745 | 75, |
aungriah | 0:a3b83d366423 | 746 | 80, |
aungriah | 0:a3b83d366423 | 747 | 85, |
aungriah | 0:a3b83d366423 | 748 | 92, |
aungriah | 0:a3b83d366423 | 749 | 101, |
aungriah | 0:a3b83d366423 | 750 | 112, |
aungriah | 0:a3b83d366423 | 751 | 127, |
aungriah | 0:a3b83d366423 | 752 | 147, |
aungriah | 0:a3b83d366423 | 753 | 168, |
aungriah | 0:a3b83d366423 | 754 | 182, |
aungriah | 0:a3b83d366423 | 755 | 194, |
aungriah | 0:a3b83d366423 | 756 | 205, |
aungriah | 0:a3b83d366423 | 757 | 255 |
aungriah | 0:a3b83d366423 | 758 | } |
aungriah | 0:a3b83d366423 | 759 | }; // end range25cm16PRFwb |
aungriah | 0:a3b83d366423 | 760 | |
aungriah | 0:a3b83d366423 | 761 | //--------------------------------------------------------------------------------------------------------------------------- |
aungriah | 0:a3b83d366423 | 762 | // range25cm64PRFnb: Range Bias Correction table for narrow band channels at 64 MHz PRF, NB: !!!! each MUST END IN 255 !!!! |
aungriah | 0:a3b83d366423 | 763 | //--------------------------------------------------------------------------------------------------------------------------- |
aungriah | 0:a3b83d366423 | 764 | |
aungriah | 0:a3b83d366423 | 765 | const uint8 range25cm64PRFnb[4][NUM_64M_OFFSET] = |
aungriah | 0:a3b83d366423 | 766 | { |
aungriah | 0:a3b83d366423 | 767 | // Ch 1 - range25cm64PRFnb |
aungriah | 0:a3b83d366423 | 768 | { |
aungriah | 0:a3b83d366423 | 769 | 1, |
aungriah | 0:a3b83d366423 | 770 | 2, |
aungriah | 0:a3b83d366423 | 771 | 2, |
aungriah | 0:a3b83d366423 | 772 | 3, |
aungriah | 0:a3b83d366423 | 773 | 4, |
aungriah | 0:a3b83d366423 | 774 | 5, |
aungriah | 0:a3b83d366423 | 775 | 7, |
aungriah | 0:a3b83d366423 | 776 | 10, |
aungriah | 0:a3b83d366423 | 777 | 13, |
aungriah | 0:a3b83d366423 | 778 | 16, |
aungriah | 0:a3b83d366423 | 779 | 19, |
aungriah | 0:a3b83d366423 | 780 | 22, |
aungriah | 0:a3b83d366423 | 781 | 24, |
aungriah | 0:a3b83d366423 | 782 | 27, |
aungriah | 0:a3b83d366423 | 783 | 30, |
aungriah | 0:a3b83d366423 | 784 | 32, |
aungriah | 0:a3b83d366423 | 785 | 35, |
aungriah | 0:a3b83d366423 | 786 | 38, |
aungriah | 0:a3b83d366423 | 787 | 43, |
aungriah | 0:a3b83d366423 | 788 | 48, |
aungriah | 0:a3b83d366423 | 789 | 56, |
aungriah | 0:a3b83d366423 | 790 | 78, |
aungriah | 0:a3b83d366423 | 791 | 101, |
aungriah | 0:a3b83d366423 | 792 | 120, |
aungriah | 0:a3b83d366423 | 793 | 157, |
aungriah | 0:a3b83d366423 | 794 | 255 |
aungriah | 0:a3b83d366423 | 795 | }, |
aungriah | 0:a3b83d366423 | 796 | |
aungriah | 0:a3b83d366423 | 797 | // Ch 2 - range25cm64PRFnb |
aungriah | 0:a3b83d366423 | 798 | { |
aungriah | 0:a3b83d366423 | 799 | 1, |
aungriah | 0:a3b83d366423 | 800 | 2, |
aungriah | 0:a3b83d366423 | 801 | 2, |
aungriah | 0:a3b83d366423 | 802 | 3, |
aungriah | 0:a3b83d366423 | 803 | 4, |
aungriah | 0:a3b83d366423 | 804 | 4, |
aungriah | 0:a3b83d366423 | 805 | 6, |
aungriah | 0:a3b83d366423 | 806 | 9, |
aungriah | 0:a3b83d366423 | 807 | 12, |
aungriah | 0:a3b83d366423 | 808 | 14, |
aungriah | 0:a3b83d366423 | 809 | 17, |
aungriah | 0:a3b83d366423 | 810 | 19, |
aungriah | 0:a3b83d366423 | 811 | 21, |
aungriah | 0:a3b83d366423 | 812 | 24, |
aungriah | 0:a3b83d366423 | 813 | 26, |
aungriah | 0:a3b83d366423 | 814 | 28, |
aungriah | 0:a3b83d366423 | 815 | 31, |
aungriah | 0:a3b83d366423 | 816 | 33, |
aungriah | 0:a3b83d366423 | 817 | 37, |
aungriah | 0:a3b83d366423 | 818 | 42, |
aungriah | 0:a3b83d366423 | 819 | 49, |
aungriah | 0:a3b83d366423 | 820 | 68, |
aungriah | 0:a3b83d366423 | 821 | 89, |
aungriah | 0:a3b83d366423 | 822 | 105, |
aungriah | 0:a3b83d366423 | 823 | 138, |
aungriah | 0:a3b83d366423 | 824 | 255 |
aungriah | 0:a3b83d366423 | 825 | }, |
aungriah | 0:a3b83d366423 | 826 | |
aungriah | 0:a3b83d366423 | 827 | // Ch 3 - range25cm64PRFnb |
aungriah | 0:a3b83d366423 | 828 | { |
aungriah | 0:a3b83d366423 | 829 | 1, |
aungriah | 0:a3b83d366423 | 830 | 1, |
aungriah | 0:a3b83d366423 | 831 | 2, |
aungriah | 0:a3b83d366423 | 832 | 3, |
aungriah | 0:a3b83d366423 | 833 | 3, |
aungriah | 0:a3b83d366423 | 834 | 4, |
aungriah | 0:a3b83d366423 | 835 | 5, |
aungriah | 0:a3b83d366423 | 836 | 8, |
aungriah | 0:a3b83d366423 | 837 | 10, |
aungriah | 0:a3b83d366423 | 838 | 13, |
aungriah | 0:a3b83d366423 | 839 | 15, |
aungriah | 0:a3b83d366423 | 840 | 17, |
aungriah | 0:a3b83d366423 | 841 | 19, |
aungriah | 0:a3b83d366423 | 842 | 21, |
aungriah | 0:a3b83d366423 | 843 | 23, |
aungriah | 0:a3b83d366423 | 844 | 25, |
aungriah | 0:a3b83d366423 | 845 | 27, |
aungriah | 0:a3b83d366423 | 846 | 30, |
aungriah | 0:a3b83d366423 | 847 | 33, |
aungriah | 0:a3b83d366423 | 848 | 37, |
aungriah | 0:a3b83d366423 | 849 | 44, |
aungriah | 0:a3b83d366423 | 850 | 60, |
aungriah | 0:a3b83d366423 | 851 | 79, |
aungriah | 0:a3b83d366423 | 852 | 93, |
aungriah | 0:a3b83d366423 | 853 | 122, |
aungriah | 0:a3b83d366423 | 854 | 255 |
aungriah | 0:a3b83d366423 | 855 | }, |
aungriah | 0:a3b83d366423 | 856 | |
aungriah | 0:a3b83d366423 | 857 | // Ch 5 - range25cm64PRFnb |
aungriah | 0:a3b83d366423 | 858 | { |
aungriah | 0:a3b83d366423 | 859 | 1, |
aungriah | 0:a3b83d366423 | 860 | 1, |
aungriah | 0:a3b83d366423 | 861 | 1, |
aungriah | 0:a3b83d366423 | 862 | 2, |
aungriah | 0:a3b83d366423 | 863 | 2, |
aungriah | 0:a3b83d366423 | 864 | 3, |
aungriah | 0:a3b83d366423 | 865 | 4, |
aungriah | 0:a3b83d366423 | 866 | 6, |
aungriah | 0:a3b83d366423 | 867 | 7, |
aungriah | 0:a3b83d366423 | 868 | 9, |
aungriah | 0:a3b83d366423 | 869 | 10, |
aungriah | 0:a3b83d366423 | 870 | 12, |
aungriah | 0:a3b83d366423 | 871 | 13, |
aungriah | 0:a3b83d366423 | 872 | 15, |
aungriah | 0:a3b83d366423 | 873 | 16, |
aungriah | 0:a3b83d366423 | 874 | 17, |
aungriah | 0:a3b83d366423 | 875 | 19, |
aungriah | 0:a3b83d366423 | 876 | 21, |
aungriah | 0:a3b83d366423 | 877 | 23, |
aungriah | 0:a3b83d366423 | 878 | 26, |
aungriah | 0:a3b83d366423 | 879 | 30, |
aungriah | 0:a3b83d366423 | 880 | 42, |
aungriah | 0:a3b83d366423 | 881 | 55, |
aungriah | 0:a3b83d366423 | 882 | 65, |
aungriah | 0:a3b83d366423 | 883 | 85, |
aungriah | 0:a3b83d366423 | 884 | 255 |
aungriah | 0:a3b83d366423 | 885 | } |
aungriah | 0:a3b83d366423 | 886 | }; // end range25cm64PRFnb |
aungriah | 0:a3b83d366423 | 887 | |
aungriah | 0:a3b83d366423 | 888 | //--------------------------------------------------------------------------------------------------------------------------- |
aungriah | 0:a3b83d366423 | 889 | // range25cm64PRFwb: Range Bias Correction table for wide band channels at 64 MHz PRF, NB: !!!! each MUST END IN 255 !!!! |
aungriah | 0:a3b83d366423 | 890 | //--------------------------------------------------------------------------------------------------------------------------- |
aungriah | 0:a3b83d366423 | 891 | |
aungriah | 0:a3b83d366423 | 892 | const uint8 range25cm64PRFwb[2][NUM_64M_OFFSETWB] = |
aungriah | 0:a3b83d366423 | 893 | { |
aungriah | 0:a3b83d366423 | 894 | // Ch 4 - range25cm64PRFwb |
aungriah | 0:a3b83d366423 | 895 | { |
aungriah | 0:a3b83d366423 | 896 | 7, |
aungriah | 0:a3b83d366423 | 897 | 8, |
aungriah | 0:a3b83d366423 | 898 | 8, |
aungriah | 0:a3b83d366423 | 899 | 9, |
aungriah | 0:a3b83d366423 | 900 | 9, |
aungriah | 0:a3b83d366423 | 901 | 10, |
aungriah | 0:a3b83d366423 | 902 | 11, |
aungriah | 0:a3b83d366423 | 903 | 12, |
aungriah | 0:a3b83d366423 | 904 | 13, |
aungriah | 0:a3b83d366423 | 905 | 13, |
aungriah | 0:a3b83d366423 | 906 | 14, |
aungriah | 0:a3b83d366423 | 907 | 15, |
aungriah | 0:a3b83d366423 | 908 | 16, |
aungriah | 0:a3b83d366423 | 909 | 16, |
aungriah | 0:a3b83d366423 | 910 | 17, |
aungriah | 0:a3b83d366423 | 911 | 18, |
aungriah | 0:a3b83d366423 | 912 | 19, |
aungriah | 0:a3b83d366423 | 913 | 19, |
aungriah | 0:a3b83d366423 | 914 | 20, |
aungriah | 0:a3b83d366423 | 915 | 21, |
aungriah | 0:a3b83d366423 | 916 | 22, |
aungriah | 0:a3b83d366423 | 917 | 24, |
aungriah | 0:a3b83d366423 | 918 | 25, |
aungriah | 0:a3b83d366423 | 919 | 27, |
aungriah | 0:a3b83d366423 | 920 | 28, |
aungriah | 0:a3b83d366423 | 921 | 29, |
aungriah | 0:a3b83d366423 | 922 | 30, |
aungriah | 0:a3b83d366423 | 923 | 32, |
aungriah | 0:a3b83d366423 | 924 | 33, |
aungriah | 0:a3b83d366423 | 925 | 34, |
aungriah | 0:a3b83d366423 | 926 | 35, |
aungriah | 0:a3b83d366423 | 927 | 37, |
aungriah | 0:a3b83d366423 | 928 | 39, |
aungriah | 0:a3b83d366423 | 929 | 41, |
aungriah | 0:a3b83d366423 | 930 | 43, |
aungriah | 0:a3b83d366423 | 931 | 45, |
aungriah | 0:a3b83d366423 | 932 | 48, |
aungriah | 0:a3b83d366423 | 933 | 50, |
aungriah | 0:a3b83d366423 | 934 | 53, |
aungriah | 0:a3b83d366423 | 935 | 56, |
aungriah | 0:a3b83d366423 | 936 | 60, |
aungriah | 0:a3b83d366423 | 937 | 64, |
aungriah | 0:a3b83d366423 | 938 | 68, |
aungriah | 0:a3b83d366423 | 939 | 74, |
aungriah | 0:a3b83d366423 | 940 | 81, |
aungriah | 0:a3b83d366423 | 941 | 89, |
aungriah | 0:a3b83d366423 | 942 | 98, |
aungriah | 0:a3b83d366423 | 943 | 109, |
aungriah | 0:a3b83d366423 | 944 | 122, |
aungriah | 0:a3b83d366423 | 945 | 136, |
aungriah | 0:a3b83d366423 | 946 | 146, |
aungriah | 0:a3b83d366423 | 947 | 154, |
aungriah | 0:a3b83d366423 | 948 | 162, |
aungriah | 0:a3b83d366423 | 949 | 178, |
aungriah | 0:a3b83d366423 | 950 | 220, |
aungriah | 0:a3b83d366423 | 951 | 249, |
aungriah | 0:a3b83d366423 | 952 | 255, |
aungriah | 0:a3b83d366423 | 953 | 255, |
aungriah | 0:a3b83d366423 | 954 | 255 |
aungriah | 0:a3b83d366423 | 955 | }, |
aungriah | 0:a3b83d366423 | 956 | |
aungriah | 0:a3b83d366423 | 957 | // Ch 7 - range25cm64PRFwb |
aungriah | 0:a3b83d366423 | 958 | { |
aungriah | 0:a3b83d366423 | 959 | 4, |
aungriah | 0:a3b83d366423 | 960 | 5, |
aungriah | 0:a3b83d366423 | 961 | 5, |
aungriah | 0:a3b83d366423 | 962 | 5, |
aungriah | 0:a3b83d366423 | 963 | 6, |
aungriah | 0:a3b83d366423 | 964 | 6, |
aungriah | 0:a3b83d366423 | 965 | 7, |
aungriah | 0:a3b83d366423 | 966 | 7, |
aungriah | 0:a3b83d366423 | 967 | 8, |
aungriah | 0:a3b83d366423 | 968 | 8, |
aungriah | 0:a3b83d366423 | 969 | 9, |
aungriah | 0:a3b83d366423 | 970 | 9, |
aungriah | 0:a3b83d366423 | 971 | 10, |
aungriah | 0:a3b83d366423 | 972 | 10, |
aungriah | 0:a3b83d366423 | 973 | 10, |
aungriah | 0:a3b83d366423 | 974 | 11, |
aungriah | 0:a3b83d366423 | 975 | 11, |
aungriah | 0:a3b83d366423 | 976 | 12, |
aungriah | 0:a3b83d366423 | 977 | 13, |
aungriah | 0:a3b83d366423 | 978 | 13, |
aungriah | 0:a3b83d366423 | 979 | 14, |
aungriah | 0:a3b83d366423 | 980 | 15, |
aungriah | 0:a3b83d366423 | 981 | 16, |
aungriah | 0:a3b83d366423 | 982 | 16, |
aungriah | 0:a3b83d366423 | 983 | 17, |
aungriah | 0:a3b83d366423 | 984 | 18, |
aungriah | 0:a3b83d366423 | 985 | 19, |
aungriah | 0:a3b83d366423 | 986 | 19, |
aungriah | 0:a3b83d366423 | 987 | 20, |
aungriah | 0:a3b83d366423 | 988 | 21, |
aungriah | 0:a3b83d366423 | 989 | 22, |
aungriah | 0:a3b83d366423 | 990 | 23, |
aungriah | 0:a3b83d366423 | 991 | 24, |
aungriah | 0:a3b83d366423 | 992 | 25, |
aungriah | 0:a3b83d366423 | 993 | 26, |
aungriah | 0:a3b83d366423 | 994 | 28, |
aungriah | 0:a3b83d366423 | 995 | 29, |
aungriah | 0:a3b83d366423 | 996 | 31, |
aungriah | 0:a3b83d366423 | 997 | 33, |
aungriah | 0:a3b83d366423 | 998 | 35, |
aungriah | 0:a3b83d366423 | 999 | 37, |
aungriah | 0:a3b83d366423 | 1000 | 39, |
aungriah | 0:a3b83d366423 | 1001 | 42, |
aungriah | 0:a3b83d366423 | 1002 | 46, |
aungriah | 0:a3b83d366423 | 1003 | 50, |
aungriah | 0:a3b83d366423 | 1004 | 54, |
aungriah | 0:a3b83d366423 | 1005 | 60, |
aungriah | 0:a3b83d366423 | 1006 | 67, |
aungriah | 0:a3b83d366423 | 1007 | 75, |
aungriah | 0:a3b83d366423 | 1008 | 83, |
aungriah | 0:a3b83d366423 | 1009 | 90, |
aungriah | 0:a3b83d366423 | 1010 | 95, |
aungriah | 0:a3b83d366423 | 1011 | 100, |
aungriah | 0:a3b83d366423 | 1012 | 110, |
aungriah | 0:a3b83d366423 | 1013 | 135, |
aungriah | 0:a3b83d366423 | 1014 | 153, |
aungriah | 0:a3b83d366423 | 1015 | 172, |
aungriah | 0:a3b83d366423 | 1016 | 192, |
aungriah | 0:a3b83d366423 | 1017 | 255 |
aungriah | 0:a3b83d366423 | 1018 | } |
aungriah | 0:a3b83d366423 | 1019 | }; // end range25cm64PRFwb |
aungriah | 0:a3b83d366423 | 1020 | |
aungriah | 0:a3b83d366423 | 1021 | |
aungriah | 0:a3b83d366423 | 1022 | /*! ------------------------------------------------------------------------------------------------------------------ |
aungriah | 0:a3b83d366423 | 1023 | * @fn dwt_getrangebias() |
aungriah | 0:a3b83d366423 | 1024 | * |
aungriah | 0:a3b83d366423 | 1025 | * @brief This function is used to return the range bias correction need for TWR with DW1000 units. |
aungriah | 0:a3b83d366423 | 1026 | * |
aungriah | 0:a3b83d366423 | 1027 | * input parameters: |
aungriah | 0:a3b83d366423 | 1028 | * @param chan - specifies the operating channel (e.g. 1, 2, 3, 4, 5, 6 or 7) |
aungriah | 0:a3b83d366423 | 1029 | * @param range - the calculated distance before correction |
aungriah | 0:a3b83d366423 | 1030 | * @param prf - this is the PRF e.g. DWT_PRF_16M or DWT_PRF_64M |
aungriah | 0:a3b83d366423 | 1031 | * |
aungriah | 0:a3b83d366423 | 1032 | * output parameters |
aungriah | 0:a3b83d366423 | 1033 | * |
aungriah | 0:a3b83d366423 | 1034 | * returns correction needed in meters |
aungriah | 0:a3b83d366423 | 1035 | */ |
aungriah | 0:a3b83d366423 | 1036 | double dwt_getrangebias(uint8 chan, float range, uint8 prf) |
aungriah | 0:a3b83d366423 | 1037 | { |
aungriah | 0:a3b83d366423 | 1038 | // First get the lookup index that corresponds to given range for a particular channel at 16M PRF |
aungriah | 0:a3b83d366423 | 1039 | int i = 0 ; |
aungriah | 0:a3b83d366423 | 1040 | int chanIdx ; |
aungriah | 0:a3b83d366423 | 1041 | int cmoffseti ; // Integer number of CM offset |
aungriah | 0:a3b83d366423 | 1042 | |
aungriah | 0:a3b83d366423 | 1043 | double mOffset ; // Final offset result in metres |
aungriah | 0:a3b83d366423 | 1044 | |
aungriah | 0:a3b83d366423 | 1045 | // NB: note we may get some small negitive values e.g. up to -50 cm. |
aungriah | 0:a3b83d366423 | 1046 | |
aungriah | 0:a3b83d366423 | 1047 | int rangeint25cm = (int) (range * 4.00f) ; // Convert range to integer number of 25cm values. |
aungriah | 0:a3b83d366423 | 1048 | |
aungriah | 0:a3b83d366423 | 1049 | if (rangeint25cm > 255) rangeint25cm = 255 ; // Make sure it matches largest value in table (all tables end in 255 !!!!) |
aungriah | 0:a3b83d366423 | 1050 | |
aungriah | 0:a3b83d366423 | 1051 | if (prf == DWT_PRF_16M) |
aungriah | 0:a3b83d366423 | 1052 | { |
aungriah | 0:a3b83d366423 | 1053 | switch(chan) |
aungriah | 0:a3b83d366423 | 1054 | { |
aungriah | 0:a3b83d366423 | 1055 | case 4: |
aungriah | 0:a3b83d366423 | 1056 | case 7: |
aungriah | 0:a3b83d366423 | 1057 | { |
aungriah | 0:a3b83d366423 | 1058 | chanIdx = chan_idxwb[chan]; |
aungriah | 0:a3b83d366423 | 1059 | while (rangeint25cm > range25cm16PRFwb[chanIdx][i]) i++ ; // Find index in table corresponding to range |
aungriah | 0:a3b83d366423 | 1060 | cmoffseti = i + CM_OFFSET_16M_WB ; // Nearest centimetre correction |
aungriah | 0:a3b83d366423 | 1061 | } |
aungriah | 0:a3b83d366423 | 1062 | break; |
aungriah | 0:a3b83d366423 | 1063 | default: |
aungriah | 0:a3b83d366423 | 1064 | { |
aungriah | 0:a3b83d366423 | 1065 | chanIdx = chan_idxnb[chan]; |
aungriah | 0:a3b83d366423 | 1066 | while (rangeint25cm > range25cm16PRFnb[chanIdx][i]) i++ ; // Find index in table corresponding to range |
aungriah | 0:a3b83d366423 | 1067 | cmoffseti = i + CM_OFFSET_16M_NB ; // Nearest centimetre correction |
aungriah | 0:a3b83d366423 | 1068 | } |
aungriah | 0:a3b83d366423 | 1069 | }//end of switch |
aungriah | 0:a3b83d366423 | 1070 | } |
aungriah | 0:a3b83d366423 | 1071 | else // 64M PRF |
aungriah | 0:a3b83d366423 | 1072 | { |
aungriah | 0:a3b83d366423 | 1073 | switch(chan) |
aungriah | 0:a3b83d366423 | 1074 | { |
aungriah | 0:a3b83d366423 | 1075 | case 4: |
aungriah | 0:a3b83d366423 | 1076 | case 7: |
aungriah | 0:a3b83d366423 | 1077 | { |
aungriah | 0:a3b83d366423 | 1078 | chanIdx = chan_idxwb[chan]; |
aungriah | 0:a3b83d366423 | 1079 | while (rangeint25cm > range25cm64PRFwb[chanIdx][i]) i++ ; // Find index in table corresponding to range |
aungriah | 0:a3b83d366423 | 1080 | cmoffseti = i + CM_OFFSET_64M_WB ; // Nearest centimetre correction |
aungriah | 0:a3b83d366423 | 1081 | } |
aungriah | 0:a3b83d366423 | 1082 | break; |
aungriah | 0:a3b83d366423 | 1083 | default: |
aungriah | 0:a3b83d366423 | 1084 | { |
aungriah | 0:a3b83d366423 | 1085 | chanIdx = chan_idxnb[chan]; |
aungriah | 0:a3b83d366423 | 1086 | while (rangeint25cm > range25cm64PRFnb[chanIdx][i]) i++ ; // Find index in table corresponding to range |
aungriah | 0:a3b83d366423 | 1087 | cmoffseti = i + CM_OFFSET_64M_NB ; // Nearest centimetre correction |
aungriah | 0:a3b83d366423 | 1088 | } |
aungriah | 0:a3b83d366423 | 1089 | }//end of switch |
aungriah | 0:a3b83d366423 | 1090 | } // end else |
aungriah | 0:a3b83d366423 | 1091 | |
aungriah | 0:a3b83d366423 | 1092 | |
aungriah | 0:a3b83d366423 | 1093 | mOffset = (float) cmoffseti ; // Offset result in centimetres |
aungriah | 0:a3b83d366423 | 1094 | |
aungriah | 0:a3b83d366423 | 1095 | mOffset *= 0.01 ; // Convert to metres |
aungriah | 0:a3b83d366423 | 1096 | |
aungriah | 0:a3b83d366423 | 1097 | return (mOffset) ; |
aungriah | 0:a3b83d366423 | 1098 | } |
aungriah | 0:a3b83d366423 | 1099 | |
aungriah | 0:a3b83d366423 | 1100 |