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.
Fork of GA-Test_copy by
DecaWave/DecaWave.cpp@2:5adf0b785944, 2018-01-10 (annotated)
- Committer:
- bberabi
- Date:
- Wed Jan 10 16:14:49 2018 +0000
- Revision:
- 2:5adf0b785944
- Parent:
- 0:a3b83d366423
milc
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 |