This is a working demo of the AS3935 Lightning detector using the NUCLEO-L013K6.

Dependencies:   mbed

Committer:
madelectroneng
Date:
Tue Jun 20 08:36:25 2017 +0000
Revision:
0:75defe5eed80
Working demo on nucleo-l031k6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
madelectroneng 0:75defe5eed80 1 /*
madelectroneng 0:75defe5eed80 2 AS3935.cpp - AS3935 Franklin Lightning Sensor™ IC by AMS library
madelectroneng 0:75defe5eed80 3 Copyright (c) 2012 Raivis Rengelis (raivis [at] rrkb.lv). All rights reserved.
madelectroneng 0:75defe5eed80 4 Porté sur MBED par Valentin, version I2C
madelectroneng 0:75defe5eed80 5
madelectroneng 0:75defe5eed80 6 This library is free software; you can redistribute it and/or
madelectroneng 0:75defe5eed80 7 modify it under the terms of the GNU Lesser General Public
madelectroneng 0:75defe5eed80 8 License as published by the Free Software Foundation; either
madelectroneng 0:75defe5eed80 9 version 3 of the License, or (at your option) any later version.
madelectroneng 0:75defe5eed80 10
madelectroneng 0:75defe5eed80 11 This library is distributed in the hope that it will be useful,
madelectroneng 0:75defe5eed80 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
madelectroneng 0:75defe5eed80 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
madelectroneng 0:75defe5eed80 14 Lesser General Public License for more details.
madelectroneng 0:75defe5eed80 15
madelectroneng 0:75defe5eed80 16 You should have received a copy of the GNU Lesser General Public
madelectroneng 0:75defe5eed80 17 License along with this library; if not, write to the Free Software
madelectroneng 0:75defe5eed80 18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
madelectroneng 0:75defe5eed80 19 */
madelectroneng 0:75defe5eed80 20
madelectroneng 0:75defe5eed80 21 #include "AS3935.h"
madelectroneng 0:75defe5eed80 22 #include "pinmap.h"
madelectroneng 0:75defe5eed80 23
madelectroneng 0:75defe5eed80 24 unsigned long sgIntrPulseCount = 0;
madelectroneng 0:75defe5eed80 25
madelectroneng 0:75defe5eed80 26
madelectroneng 0:75defe5eed80 27 AS3935::AS3935(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name, int hz) : m_Spi(mosi, miso, sclk), m_Cs(cs, 1), m_FREQ(hz)
madelectroneng 0:75defe5eed80 28 {
madelectroneng 0:75defe5eed80 29
madelectroneng 0:75defe5eed80 30 //Enable the internal pull-up resistor on MISO
madelectroneng 0:75defe5eed80 31 pin_mode(miso, PullUp);
madelectroneng 0:75defe5eed80 32
madelectroneng 0:75defe5eed80 33 //Configure the SPI bus
madelectroneng 0:75defe5eed80 34 m_Spi.format(8, 1);
madelectroneng 0:75defe5eed80 35 printf("spi bus frequency set to %d hz\r\n",hz);
madelectroneng 0:75defe5eed80 36 m_Spi.frequency(hz);
madelectroneng 0:75defe5eed80 37
madelectroneng 0:75defe5eed80 38 }
madelectroneng 0:75defe5eed80 39
madelectroneng 0:75defe5eed80 40 char AS3935::_SPITransfer2(char high, char low)
madelectroneng 0:75defe5eed80 41 {
madelectroneng 0:75defe5eed80 42 m_Cs = 0;
madelectroneng 0:75defe5eed80 43 m_Spi.write(high);
madelectroneng 0:75defe5eed80 44 char regval = m_Spi.write(low);
madelectroneng 0:75defe5eed80 45 m_Cs = 1;
madelectroneng 0:75defe5eed80 46 return regval;
madelectroneng 0:75defe5eed80 47 }
madelectroneng 0:75defe5eed80 48
madelectroneng 0:75defe5eed80 49 char AS3935::_rawRegisterRead(char reg)
madelectroneng 0:75defe5eed80 50 {
madelectroneng 0:75defe5eed80 51 return _SPITransfer2((reg & 0x3F) | 0x40, 0);
madelectroneng 0:75defe5eed80 52 }
madelectroneng 0:75defe5eed80 53
madelectroneng 0:75defe5eed80 54
madelectroneng 0:75defe5eed80 55 char AS3935::_ffsz(char mask)
madelectroneng 0:75defe5eed80 56 {
madelectroneng 0:75defe5eed80 57 char i = 0;
madelectroneng 0:75defe5eed80 58
madelectroneng 0:75defe5eed80 59 while(!(mask & 1)) {
madelectroneng 0:75defe5eed80 60 mask >>= 1;
madelectroneng 0:75defe5eed80 61 i++;
madelectroneng 0:75defe5eed80 62 }
madelectroneng 0:75defe5eed80 63
madelectroneng 0:75defe5eed80 64 return i;
madelectroneng 0:75defe5eed80 65 }
madelectroneng 0:75defe5eed80 66
madelectroneng 0:75defe5eed80 67 void AS3935::registerWrite(char reg, char mask, char data)
madelectroneng 0:75defe5eed80 68 {
madelectroneng 0:75defe5eed80 69
madelectroneng 0:75defe5eed80 70 char regval;
madelectroneng 0:75defe5eed80 71 regval = _rawRegisterRead(reg);
madelectroneng 0:75defe5eed80 72 regval &= ~(mask);
madelectroneng 0:75defe5eed80 73 regval |= (data << (_ffsz(mask)));
madelectroneng 0:75defe5eed80 74 m_Cs = 0;
madelectroneng 0:75defe5eed80 75 m_Spi.write(reg);
madelectroneng 0:75defe5eed80 76 m_Spi.write(regval);
madelectroneng 0:75defe5eed80 77 //printf("raw transfer for reg %x is 0x%02x\r\n", reg, regval);
madelectroneng 0:75defe5eed80 78 m_Cs = 1;
madelectroneng 0:75defe5eed80 79 wait_ms(2);
madelectroneng 0:75defe5eed80 80 }
madelectroneng 0:75defe5eed80 81
madelectroneng 0:75defe5eed80 82 char AS3935::registerRead(char reg, char mask)
madelectroneng 0:75defe5eed80 83 {
madelectroneng 0:75defe5eed80 84 char regval;
madelectroneng 0:75defe5eed80 85 regval = _rawRegisterRead(reg);
madelectroneng 0:75defe5eed80 86 // printf("raw regval is 0x%02x\r\n", regval);
madelectroneng 0:75defe5eed80 87 regval = regval & mask;
madelectroneng 0:75defe5eed80 88 regval >>= (_ffsz(mask));
madelectroneng 0:75defe5eed80 89 return regval;
madelectroneng 0:75defe5eed80 90 }
madelectroneng 0:75defe5eed80 91
madelectroneng 0:75defe5eed80 92 void AS3935::presetDefault()
madelectroneng 0:75defe5eed80 93 {
madelectroneng 0:75defe5eed80 94 m_Cs = 0;
madelectroneng 0:75defe5eed80 95 m_Spi.write(0x3C);
madelectroneng 0:75defe5eed80 96 m_Spi.write(0x96);
madelectroneng 0:75defe5eed80 97 m_Cs = 1;
madelectroneng 0:75defe5eed80 98 wait_ms(2);
madelectroneng 0:75defe5eed80 99 }
madelectroneng 0:75defe5eed80 100
madelectroneng 0:75defe5eed80 101 void AS3935::init()
madelectroneng 0:75defe5eed80 102 {
madelectroneng 0:75defe5eed80 103 presetDefault();
madelectroneng 0:75defe5eed80 104 registerWrite(AS3935_WDTH, 0x04); // set WDTH level to 4
madelectroneng 0:75defe5eed80 105 }
madelectroneng 0:75defe5eed80 106
madelectroneng 0:75defe5eed80 107 void AS3935::powerDown()
madelectroneng 0:75defe5eed80 108 {
madelectroneng 0:75defe5eed80 109 registerWrite(AS3935_PWD,1);
madelectroneng 0:75defe5eed80 110 }
madelectroneng 0:75defe5eed80 111
madelectroneng 0:75defe5eed80 112
madelectroneng 0:75defe5eed80 113
madelectroneng 0:75defe5eed80 114 int AS3935::interruptSource()
madelectroneng 0:75defe5eed80 115 {
madelectroneng 0:75defe5eed80 116 return registerRead(AS3935_INT);
madelectroneng 0:75defe5eed80 117 }
madelectroneng 0:75defe5eed80 118
madelectroneng 0:75defe5eed80 119 void AS3935::disableDisturbers()
madelectroneng 0:75defe5eed80 120 {
madelectroneng 0:75defe5eed80 121 registerWrite(AS3935_MASK_DIST,1);
madelectroneng 0:75defe5eed80 122 }
madelectroneng 0:75defe5eed80 123
madelectroneng 0:75defe5eed80 124 void AS3935::enableDisturbers()
madelectroneng 0:75defe5eed80 125 {
madelectroneng 0:75defe5eed80 126 registerWrite(AS3935_MASK_DIST,0);
madelectroneng 0:75defe5eed80 127 }
madelectroneng 0:75defe5eed80 128
madelectroneng 0:75defe5eed80 129 int AS3935::getMinimumLightnings()
madelectroneng 0:75defe5eed80 130 {
madelectroneng 0:75defe5eed80 131 return registerRead(AS3935_MIN_NUM_LIGH);
madelectroneng 0:75defe5eed80 132 }
madelectroneng 0:75defe5eed80 133
madelectroneng 0:75defe5eed80 134 int AS3935::setMinimumLightnings(int minlightning)
madelectroneng 0:75defe5eed80 135 {
madelectroneng 0:75defe5eed80 136 registerWrite(AS3935_MIN_NUM_LIGH,minlightning);
madelectroneng 0:75defe5eed80 137 return getMinimumLightnings();
madelectroneng 0:75defe5eed80 138 }
madelectroneng 0:75defe5eed80 139
madelectroneng 0:75defe5eed80 140 int AS3935::lightningDistanceKm()
madelectroneng 0:75defe5eed80 141 {
madelectroneng 0:75defe5eed80 142 return registerRead(AS3935_DISTANCE);
madelectroneng 0:75defe5eed80 143 }
madelectroneng 0:75defe5eed80 144
madelectroneng 0:75defe5eed80 145 void AS3935::setIndoors()
madelectroneng 0:75defe5eed80 146 {
madelectroneng 0:75defe5eed80 147 registerWrite(AS3935_AFE_GB,AS3935_AFE_INDOOR);
madelectroneng 0:75defe5eed80 148 }
madelectroneng 0:75defe5eed80 149
madelectroneng 0:75defe5eed80 150 int AS3935::getGain()
madelectroneng 0:75defe5eed80 151 {
madelectroneng 0:75defe5eed80 152 return registerRead(AS3935_AFE_GB);
madelectroneng 0:75defe5eed80 153 }
madelectroneng 0:75defe5eed80 154
madelectroneng 0:75defe5eed80 155 void AS3935::setOutdoors()
madelectroneng 0:75defe5eed80 156 {
madelectroneng 0:75defe5eed80 157 registerWrite(AS3935_AFE_GB,AS3935_AFE_OUTDOOR);
madelectroneng 0:75defe5eed80 158 }
madelectroneng 0:75defe5eed80 159
madelectroneng 0:75defe5eed80 160 int AS3935::getNoiseFloor()
madelectroneng 0:75defe5eed80 161 {
madelectroneng 0:75defe5eed80 162 return registerRead(AS3935_NF_LEV);
madelectroneng 0:75defe5eed80 163 }
madelectroneng 0:75defe5eed80 164
madelectroneng 0:75defe5eed80 165 int AS3935::setNoiseFloor(int noisefloor)
madelectroneng 0:75defe5eed80 166 {
madelectroneng 0:75defe5eed80 167 registerWrite(AS3935_NF_LEV,noisefloor);
madelectroneng 0:75defe5eed80 168 return getNoiseFloor();
madelectroneng 0:75defe5eed80 169 }
madelectroneng 0:75defe5eed80 170
madelectroneng 0:75defe5eed80 171 int AS3935::getSpikeRejection()
madelectroneng 0:75defe5eed80 172 {
madelectroneng 0:75defe5eed80 173 return registerRead(AS3935_SREJ);
madelectroneng 0:75defe5eed80 174 }
madelectroneng 0:75defe5eed80 175
madelectroneng 0:75defe5eed80 176 int AS3935::setSpikeRejection(int srej)
madelectroneng 0:75defe5eed80 177 {
madelectroneng 0:75defe5eed80 178 registerWrite(AS3935_SREJ, srej);
madelectroneng 0:75defe5eed80 179 return getSpikeRejection();
madelectroneng 0:75defe5eed80 180 }
madelectroneng 0:75defe5eed80 181
madelectroneng 0:75defe5eed80 182 int AS3935::getWatchdogThreshold()
madelectroneng 0:75defe5eed80 183 {
madelectroneng 0:75defe5eed80 184 return registerRead(AS3935_WDTH);
madelectroneng 0:75defe5eed80 185 }
madelectroneng 0:75defe5eed80 186
madelectroneng 0:75defe5eed80 187 int AS3935::setWatchdogThreshold(int wdth)
madelectroneng 0:75defe5eed80 188 {
madelectroneng 0:75defe5eed80 189 registerWrite(AS3935_WDTH,wdth);
madelectroneng 0:75defe5eed80 190 return getWatchdogThreshold();
madelectroneng 0:75defe5eed80 191 }
madelectroneng 0:75defe5eed80 192
madelectroneng 0:75defe5eed80 193 int AS3935::getTuneCap()
madelectroneng 0:75defe5eed80 194 {
madelectroneng 0:75defe5eed80 195 return registerRead(AS3935_TUN_CAP);
madelectroneng 0:75defe5eed80 196 }
madelectroneng 0:75defe5eed80 197
madelectroneng 0:75defe5eed80 198 int AS3935::setTuneCap(int cap)
madelectroneng 0:75defe5eed80 199 {
madelectroneng 0:75defe5eed80 200 registerWrite(AS3935_TUN_CAP,cap);
madelectroneng 0:75defe5eed80 201 return getTuneCap();
madelectroneng 0:75defe5eed80 202 }
madelectroneng 0:75defe5eed80 203
madelectroneng 0:75defe5eed80 204 void AS3935::clearStats()
madelectroneng 0:75defe5eed80 205 {
madelectroneng 0:75defe5eed80 206 registerWrite(AS3935_CL_STAT,1);
madelectroneng 0:75defe5eed80 207 registerWrite(AS3935_CL_STAT,0);
madelectroneng 0:75defe5eed80 208 registerWrite(AS3935_CL_STAT,1);
madelectroneng 0:75defe5eed80 209 }
madelectroneng 0:75defe5eed80 210
madelectroneng 0:75defe5eed80 211 static void intrPulseCntr(void) {sgIntrPulseCount++;}
madelectroneng 0:75defe5eed80 212
madelectroneng 0:75defe5eed80 213 int AS3935::calibrateRCOs (InterruptIn &intrIn)
madelectroneng 0:75defe5eed80 214 {
madelectroneng 0:75defe5eed80 215 int rc;
madelectroneng 0:75defe5eed80 216 uint8_t trco;
madelectroneng 0:75defe5eed80 217 uint8_t srco;
madelectroneng 0:75defe5eed80 218 Timer pulseTimer;
madelectroneng 0:75defe5eed80 219 int timeNow;
madelectroneng 0:75defe5eed80 220 unsigned long measFreq;
madelectroneng 0:75defe5eed80 221
madelectroneng 0:75defe5eed80 222 intrIn.rise(intrPulseCntr);
madelectroneng 0:75defe5eed80 223
madelectroneng 0:75defe5eed80 224 _SPITransfer2(0x3D, 0x96); // send command to calibrate the internal RC oscillators
madelectroneng 0:75defe5eed80 225 registerWrite(AS3935_DISP_TRCO, 1); // put TRCO on the IRQ line for measurement
madelectroneng 0:75defe5eed80 226 wait_ms(20); // wait for the chip to output the frequency, ususally ~2 ms
madelectroneng 0:75defe5eed80 227
madelectroneng 0:75defe5eed80 228 pulseTimer.reset();
madelectroneng 0:75defe5eed80 229 pulseTimer.start();
madelectroneng 0:75defe5eed80 230 sgIntrPulseCount = 0; // reset the interrupt counter which serves as our frequency\pulse counter
madelectroneng 0:75defe5eed80 231
madelectroneng 0:75defe5eed80 232 timeNow = 0;
madelectroneng 0:75defe5eed80 233 while (timeNow < 500) // wait for 0.5 seconds
madelectroneng 0:75defe5eed80 234 {
madelectroneng 0:75defe5eed80 235 timeNow = pulseTimer.read_ms();
madelectroneng 0:75defe5eed80 236 }
madelectroneng 0:75defe5eed80 237
madelectroneng 0:75defe5eed80 238 registerWrite(AS3935_DISP_TRCO, 0); // stop the output of the frequncy on IRQ line
madelectroneng 0:75defe5eed80 239 measFreq = sgIntrPulseCount << 1; // calculate the measure frequency based upon period of capture and freq scaler
madelectroneng 0:75defe5eed80 240
madelectroneng 0:75defe5eed80 241 printf("timer RCO: %ld Hz\n\r", measFreq);
madelectroneng 0:75defe5eed80 242
madelectroneng 0:75defe5eed80 243 trco=registerRead(0x3A, 0x80); // Read out Calibration of TRCO done
madelectroneng 0:75defe5eed80 244 srco=registerRead(0x3B, 0x80); // Readout Calibration of SRCO done
madelectroneng 0:75defe5eed80 245 if(trco != 0x00 && srco != 0x00)
madelectroneng 0:75defe5eed80 246 {
madelectroneng 0:75defe5eed80 247 rc = 1;
madelectroneng 0:75defe5eed80 248 printf("cal is done\r\n");
madelectroneng 0:75defe5eed80 249 }
madelectroneng 0:75defe5eed80 250 else
madelectroneng 0:75defe5eed80 251 {
madelectroneng 0:75defe5eed80 252 printf("cal is not done\r\n");
madelectroneng 0:75defe5eed80 253 rc = 0;
madelectroneng 0:75defe5eed80 254 }
madelectroneng 0:75defe5eed80 255
madelectroneng 0:75defe5eed80 256 return rc;
madelectroneng 0:75defe5eed80 257 }
madelectroneng 0:75defe5eed80 258
madelectroneng 0:75defe5eed80 259
madelectroneng 0:75defe5eed80 260 unsigned long AS3935::tuneAntenna(InterruptIn &intrIn)
madelectroneng 0:75defe5eed80 261 {
madelectroneng 0:75defe5eed80 262 #define ANTENA_RES_FREQ (unsigned long)500000
madelectroneng 0:75defe5eed80 263 Timer pulseTimer;
madelectroneng 0:75defe5eed80 264 int timeNow;
madelectroneng 0:75defe5eed80 265 unsigned long measFreq;
madelectroneng 0:75defe5eed80 266 unsigned long measFreqBest = 0;
madelectroneng 0:75defe5eed80 267 unsigned char tunCapCnt = 0;
madelectroneng 0:75defe5eed80 268 unsigned char tunCapBest = 0;
madelectroneng 0:75defe5eed80 269 unsigned long minError = ANTENA_RES_FREQ;
madelectroneng 0:75defe5eed80 270 unsigned long error;
madelectroneng 0:75defe5eed80 271
madelectroneng 0:75defe5eed80 272 intrIn.rise(intrPulseCntr);
madelectroneng 0:75defe5eed80 273 _SPITransfer2(3, 0x80); // set frequency division to 64
madelectroneng 0:75defe5eed80 274
madelectroneng 0:75defe5eed80 275 for (tunCapCnt = 0; tunCapCnt < 16; ++tunCapCnt) // loop for all possible values of the tuning capacitor
madelectroneng 0:75defe5eed80 276 {
madelectroneng 0:75defe5eed80 277 _SPITransfer2(8, 0x80+tunCapCnt); // set the tuning cap and have the frequency output to the IRQ line
madelectroneng 0:75defe5eed80 278 wait_ms(20); // wait for the chip to output the frequency, ususally ~2 ms
madelectroneng 0:75defe5eed80 279
madelectroneng 0:75defe5eed80 280 pulseTimer.reset();
madelectroneng 0:75defe5eed80 281 pulseTimer.start();
madelectroneng 0:75defe5eed80 282 sgIntrPulseCount = 0; // reset the interrupt counter which serves as our frequency\pulse counter
madelectroneng 0:75defe5eed80 283
madelectroneng 0:75defe5eed80 284 timeNow = 0;
madelectroneng 0:75defe5eed80 285 while (timeNow < 500) // wait for 0.5 seconds
madelectroneng 0:75defe5eed80 286 {
madelectroneng 0:75defe5eed80 287 timeNow = pulseTimer.read_ms();
madelectroneng 0:75defe5eed80 288 }
madelectroneng 0:75defe5eed80 289
madelectroneng 0:75defe5eed80 290 _SPITransfer2(8, 0x00); // stop the output of the frequncy on IRQ line
madelectroneng 0:75defe5eed80 291
madelectroneng 0:75defe5eed80 292 measFreq = sgIntrPulseCount << 7; // calulate the measure frequency based upon period of capture and freq scaler
madelectroneng 0:75defe5eed80 293
madelectroneng 0:75defe5eed80 294 if (measFreq < ANTENA_RES_FREQ) // calculate error between actual and desired frequency
madelectroneng 0:75defe5eed80 295 error = ANTENA_RES_FREQ - measFreq;
madelectroneng 0:75defe5eed80 296 else
madelectroneng 0:75defe5eed80 297 error = measFreq - ANTENA_RES_FREQ;
madelectroneng 0:75defe5eed80 298
madelectroneng 0:75defe5eed80 299 if (error < minError) // update the best capacitor tuning so far
madelectroneng 0:75defe5eed80 300 {
madelectroneng 0:75defe5eed80 301 tunCapBest = tunCapCnt;
madelectroneng 0:75defe5eed80 302 minError = error;
madelectroneng 0:75defe5eed80 303 measFreqBest = measFreq;
madelectroneng 0:75defe5eed80 304 }
madelectroneng 0:75defe5eed80 305
madelectroneng 0:75defe5eed80 306 printf("sgIntrCount[%ld] measFreq[%ld] timeNow[%ld] tunCapBest[%d]\n\r", sgIntrPulseCount, measFreq, timeNow, tunCapBest);
madelectroneng 0:75defe5eed80 307 }
madelectroneng 0:75defe5eed80 308 setTuneCap(tunCapBest); // 500kHz); // set the best capacitor tuning that was found
madelectroneng 0:75defe5eed80 309 return measFreqBest;
madelectroneng 0:75defe5eed80 310 }
madelectroneng 0:75defe5eed80 311
madelectroneng 0:75defe5eed80 312
madelectroneng 0:75defe5eed80 313 void AS3935::_rawRegisterRead(unsigned char reg, unsigned char mask, unsigned char *rxBuff, unsigned char numBytes)
madelectroneng 0:75defe5eed80 314 {
madelectroneng 0:75defe5eed80 315 mask = mask; // unused
madelectroneng 0:75defe5eed80 316
madelectroneng 0:75defe5eed80 317 m_Cs = 0;
madelectroneng 0:75defe5eed80 318 m_Spi.write((reg & 0x3F) | 0x40);
madelectroneng 0:75defe5eed80 319
madelectroneng 0:75defe5eed80 320 for (unsigned char idx = 0; idx < numBytes; ++idx)
madelectroneng 0:75defe5eed80 321 {
madelectroneng 0:75defe5eed80 322 rxBuff[idx] = m_Spi.write(0);
madelectroneng 0:75defe5eed80 323 }
madelectroneng 0:75defe5eed80 324 m_Cs = 1;
madelectroneng 0:75defe5eed80 325 }
madelectroneng 0:75defe5eed80 326
madelectroneng 0:75defe5eed80 327 unsigned long AS3935::getEnergy(void)
madelectroneng 0:75defe5eed80 328 {
madelectroneng 0:75defe5eed80 329 unsigned long retVal;
madelectroneng 0:75defe5eed80 330 unsigned char rxBuff[3];
madelectroneng 0:75defe5eed80 331
madelectroneng 0:75defe5eed80 332 #if 0
madelectroneng 0:75defe5eed80 333 rxBuff[0] = registerRead(AS3935_S_LIG_L);
madelectroneng 0:75defe5eed80 334 rxBuff[1] = registerRead(AS3935_S_LIG_M);
madelectroneng 0:75defe5eed80 335 rxBuff[2] = registerRead(AS3935_S_LIG_MM);
madelectroneng 0:75defe5eed80 336 #else
madelectroneng 0:75defe5eed80 337 _rawRegisterRead(AS3935_S_LIG_L, rxBuff, 3);
madelectroneng 0:75defe5eed80 338 #endif
madelectroneng 0:75defe5eed80 339
madelectroneng 0:75defe5eed80 340 retVal = ((unsigned long)rxBuff[2] << 16) | ((unsigned long)rxBuff[1] << 8) | (unsigned long)rxBuff[0];
madelectroneng 0:75defe5eed80 341 retVal &= 0x001fffff;
madelectroneng 0:75defe5eed80 342 return retVal;
madelectroneng 0:75defe5eed80 343 }
madelectroneng 0:75defe5eed80 344
madelectroneng 0:75defe5eed80 345 bool AS3935::getConfigRegisters(unsigned char *pBuff, unsigned char buffLen)
madelectroneng 0:75defe5eed80 346 {
madelectroneng 0:75defe5eed80 347 unsigned char cnt = 0;
madelectroneng 0:75defe5eed80 348
madelectroneng 0:75defe5eed80 349 if (NULL == pBuff)
madelectroneng 0:75defe5eed80 350 return false;
madelectroneng 0:75defe5eed80 351
madelectroneng 0:75defe5eed80 352 for (cnt = 0; cnt < buffLen && cnt < MAX_CONFIG_REGS; ++cnt)
madelectroneng 0:75defe5eed80 353 {
madelectroneng 0:75defe5eed80 354 pBuff[cnt] = _rawRegisterRead(cnt);
madelectroneng 0:75defe5eed80 355 }
madelectroneng 0:75defe5eed80 356 return true;
madelectroneng 0:75defe5eed80 357 }
madelectroneng 0:75defe5eed80 358
madelectroneng 0:75defe5eed80 359
madelectroneng 0:75defe5eed80 360