adxl362 csv output format

Committer:
APS_Lab
Date:
Thu May 16 07:02:24 2019 +0000
Revision:
0:813b34a76f24
adxl362

Who changed what in which revision?

UserRevisionLine numberNew contents of line
APS_Lab 0:813b34a76f24 1 #include "ADXL362.h"
APS_Lab 0:813b34a76f24 2
APS_Lab 0:813b34a76f24 3 #define WAIT_US(value) (0.000001 * ((float)value))
APS_Lab 0:813b34a76f24 4
APS_Lab 0:813b34a76f24 5 #define REGADDR_WRITE (0x80)
APS_Lab 0:813b34a76f24 6 #define REGADDR_WR_L (0x00)
APS_Lab 0:813b34a76f24 7 #define REGADDR_WR_H (0x01)
APS_Lab 0:813b34a76f24 8
APS_Lab 0:813b34a76f24 9 #define GET_VAL_L(value) ((value >> 0) & 0xFF)
APS_Lab 0:813b34a76f24 10 #define GET_VAL_H(value) ((value >> 8) & 0xFF)
APS_Lab 0:813b34a76f24 11
APS_Lab 0:813b34a76f24 12 // define for EV-COG-AD3029LZ
APS_Lab 0:813b34a76f24 13 #define SPI_CS SPI1_CS3
APS_Lab 0:813b34a76f24 14
APS_Lab 0:813b34a76f24 15 /** ==========================================
APS_Lab 0:813b34a76f24 16 * Public ( initializing )
APS_Lab 0:813b34a76f24 17 * ========================================== */
APS_Lab 0:813b34a76f24 18 ADXL362::ADXL362(Serial *setUart, SPI* spi1) {
APS_Lab 0:813b34a76f24 19 int check;
APS_Lab 0:813b34a76f24 20
APS_Lab 0:813b34a76f24 21 uart = setUart;
APS_Lab 0:813b34a76f24 22 _spi = spi1;
APS_Lab 0:813b34a76f24 23 _cs = new DigitalOut(SPI_CS);
APS_Lab 0:813b34a76f24 24
APS_Lab 0:813b34a76f24 25 _spi->format(8,3);
APS_Lab 0:813b34a76f24 26 _spi->frequency(1000000);
APS_Lab 0:813b34a76f24 27
APS_Lab 0:813b34a76f24 28 chipSelOff();
APS_Lab 0:813b34a76f24 29
APS_Lab 0:813b34a76f24 30 /* start */
APS_Lab 0:813b34a76f24 31 check = regRD(DEVID_AD);
APS_Lab 0:813b34a76f24 32 if (check != DEVID_AD_ADXL362) {
APS_Lab 0:813b34a76f24 33 return;
APS_Lab 0:813b34a76f24 34 }
APS_Lab 0:813b34a76f24 35 check = regRD(DEVID_MST);
APS_Lab 0:813b34a76f24 36 if (check != DEVID_MST_ADXL362) {
APS_Lab 0:813b34a76f24 37 return;
APS_Lab 0:813b34a76f24 38 }
APS_Lab 0:813b34a76f24 39 check = regRD(PARTID);
APS_Lab 0:813b34a76f24 40 if (check != PARTID_ADXL362) {
APS_Lab 0:813b34a76f24 41 return;
APS_Lab 0:813b34a76f24 42 }
APS_Lab 0:813b34a76f24 43
APS_Lab 0:813b34a76f24 44 /* init MIN/MAX store */
APS_Lab 0:813b34a76f24 45 initMinMax(&minStore, &maxStore);
APS_Lab 0:813b34a76f24 46 /* set convert parameter */
APS_Lab 0:813b34a76f24 47 SoftReset();
APS_Lab 0:813b34a76f24 48
APS_Lab 0:813b34a76f24 49 scaleAccel = PARAM_ADXL362_SCALE_ACCEL;
APS_Lab 0:813b34a76f24 50 scaleThermal = PARAM_ADXL362_SCALE_THERMAL;
APS_Lab 0:813b34a76f24 51 offsetThermal = PARAM_ADXL362_THERMAL_OFFSET;
APS_Lab 0:813b34a76f24 52
APS_Lab 0:813b34a76f24 53 //SetMesureParam(POWER_CTL_PARAM_LOWNOISE_ULTRA);
APS_Lab 0:813b34a76f24 54 //StartMesure();
APS_Lab 0:813b34a76f24 55 }
APS_Lab 0:813b34a76f24 56
APS_Lab 0:813b34a76f24 57 ADXL362::~ADXL362() {
APS_Lab 0:813b34a76f24 58 delete this->_cs;
APS_Lab 0:813b34a76f24 59 }
APS_Lab 0:813b34a76f24 60
APS_Lab 0:813b34a76f24 61
APS_Lab 0:813b34a76f24 62 /** ==========================================
APS_Lab 0:813b34a76f24 63 * Private ( Control Pins )
APS_Lab 0:813b34a76f24 64 * ========================================== */
APS_Lab 0:813b34a76f24 65 /* Assert CHIP_SEL = enable */
APS_Lab 0:813b34a76f24 66 void ADXL362::chipSelOn() {
APS_Lab 0:813b34a76f24 67 chipSelDelay();
APS_Lab 0:813b34a76f24 68 *_cs = 0;
APS_Lab 0:813b34a76f24 69 }
APS_Lab 0:813b34a76f24 70
APS_Lab 0:813b34a76f24 71 /* Assert CHIP_SEL = disable */
APS_Lab 0:813b34a76f24 72 void ADXL362::chipSelOff() {
APS_Lab 0:813b34a76f24 73 *_cs = 1;
APS_Lab 0:813b34a76f24 74 }
APS_Lab 0:813b34a76f24 75
APS_Lab 0:813b34a76f24 76 /* delay for CHIP_SEL */
APS_Lab 0:813b34a76f24 77 void ADXL362::chipSelDelay() {
APS_Lab 0:813b34a76f24 78 wait(WAIT_US(0.2));
APS_Lab 0:813b34a76f24 79 }
APS_Lab 0:813b34a76f24 80 /** ==========================================
APS_Lab 0:813b34a76f24 81 * Public ( ADXL Configuration )
APS_Lab 0:813b34a76f24 82 * ========================================== */
APS_Lab 0:813b34a76f24 83 void ADXL362::set_gravity(int g)
APS_Lab 0:813b34a76f24 84 {
APS_Lab 0:813b34a76f24 85 int value;
APS_Lab 0:813b34a76f24 86 unsigned char g_reg;
APS_Lab 0:813b34a76f24 87
APS_Lab 0:813b34a76f24 88 switch(g)
APS_Lab 0:813b34a76f24 89 {
APS_Lab 0:813b34a76f24 90 case GRAVITY_2G:
APS_Lab 0:813b34a76f24 91 ADXL362::gravity = GRAVITY_2G;
APS_Lab 0:813b34a76f24 92 g_reg = 0x00;
APS_Lab 0:813b34a76f24 93 break;
APS_Lab 0:813b34a76f24 94 case GRAVITY_4G:
APS_Lab 0:813b34a76f24 95 ADXL362::gravity = GRAVITY_4G;
APS_Lab 0:813b34a76f24 96 g_reg = 0x40;
APS_Lab 0:813b34a76f24 97 break;
APS_Lab 0:813b34a76f24 98 case GRAVITY_8G:
APS_Lab 0:813b34a76f24 99 ADXL362::gravity = GRAVITY_8G;
APS_Lab 0:813b34a76f24 100 g_reg = 0x80;
APS_Lab 0:813b34a76f24 101 break;
APS_Lab 0:813b34a76f24 102 default:
APS_Lab 0:813b34a76f24 103 ADXL362::gravity = GRAVITY_2G;
APS_Lab 0:813b34a76f24 104 g_reg = 0x00;
APS_Lab 0:813b34a76f24 105 break;
APS_Lab 0:813b34a76f24 106 }
APS_Lab 0:813b34a76f24 107 value = regRD(FILTER_CTL);
APS_Lab 0:813b34a76f24 108 value &= 0x3f;
APS_Lab 0:813b34a76f24 109 value |= g_reg;
APS_Lab 0:813b34a76f24 110 regWR(FILTER_CTL, value);
APS_Lab 0:813b34a76f24 111 set_scalefactor();
APS_Lab 0:813b34a76f24 112 }
APS_Lab 0:813b34a76f24 113
APS_Lab 0:813b34a76f24 114 void ADXL362::set_ODR(int o)
APS_Lab 0:813b34a76f24 115 {
APS_Lab 0:813b34a76f24 116 int value;
APS_Lab 0:813b34a76f24 117 unsigned char o_reg;
APS_Lab 0:813b34a76f24 118
APS_Lab 0:813b34a76f24 119 switch(o)
APS_Lab 0:813b34a76f24 120 {
APS_Lab 0:813b34a76f24 121 case ODR_12:
APS_Lab 0:813b34a76f24 122 odr = ODR_12;
APS_Lab 0:813b34a76f24 123 o_reg = 0x00;
APS_Lab 0:813b34a76f24 124 break;
APS_Lab 0:813b34a76f24 125 case ODR_25:
APS_Lab 0:813b34a76f24 126 odr = ODR_25;
APS_Lab 0:813b34a76f24 127 o_reg = 0x01;
APS_Lab 0:813b34a76f24 128 break;
APS_Lab 0:813b34a76f24 129 case ODR_50:
APS_Lab 0:813b34a76f24 130 odr = ODR_50;
APS_Lab 0:813b34a76f24 131 o_reg = 0x02;
APS_Lab 0:813b34a76f24 132 break;
APS_Lab 0:813b34a76f24 133 case ODR_100:
APS_Lab 0:813b34a76f24 134 odr = ODR_100;
APS_Lab 0:813b34a76f24 135 o_reg = 0x03;
APS_Lab 0:813b34a76f24 136 break;
APS_Lab 0:813b34a76f24 137 case ODR_200:
APS_Lab 0:813b34a76f24 138 odr = ODR_200;
APS_Lab 0:813b34a76f24 139 o_reg = 0x04;
APS_Lab 0:813b34a76f24 140 break;
APS_Lab 0:813b34a76f24 141 case ODR_400:
APS_Lab 0:813b34a76f24 142 odr = ODR_400;
APS_Lab 0:813b34a76f24 143 o_reg = 0x07;
APS_Lab 0:813b34a76f24 144 break;
APS_Lab 0:813b34a76f24 145 default:
APS_Lab 0:813b34a76f24 146 odr = ODR_100;
APS_Lab 0:813b34a76f24 147 o_reg = 0x03;
APS_Lab 0:813b34a76f24 148 break;
APS_Lab 0:813b34a76f24 149 }
APS_Lab 0:813b34a76f24 150 value = regRD(FILTER_CTL);
APS_Lab 0:813b34a76f24 151 value &= 0xf8;
APS_Lab 0:813b34a76f24 152 value |= o_reg;
APS_Lab 0:813b34a76f24 153 regWR(FILTER_CTL, value);
APS_Lab 0:813b34a76f24 154 }
APS_Lab 0:813b34a76f24 155
APS_Lab 0:813b34a76f24 156 void ADXL362::set_powermode(int m)
APS_Lab 0:813b34a76f24 157 {
APS_Lab 0:813b34a76f24 158 ADXL362::SetMesureParam(m);
APS_Lab 0:813b34a76f24 159 }
APS_Lab 0:813b34a76f24 160
APS_Lab 0:813b34a76f24 161 void ADXL362::set_wakeupmode(void)
APS_Lab 0:813b34a76f24 162 {
APS_Lab 0:813b34a76f24 163 regWR(THRESH_ACT_L, 0x50);
APS_Lab 0:813b34a76f24 164 regWR(THRESH_ACT_H, 0x00);
APS_Lab 0:813b34a76f24 165 regWR(TIME_ACT, 0x00);
APS_Lab 0:813b34a76f24 166 regWR(THRESH_INACT_L, 0xff);
APS_Lab 0:813b34a76f24 167 regWR(THRESH_INACT_H, 0x07);
APS_Lab 0:813b34a76f24 168 regWR(TIME_INACT_L, 0x06);
APS_Lab 0:813b34a76f24 169 regWR(TIME_INACT_H, 0x00);
APS_Lab 0:813b34a76f24 170 regWR(ACT_INACT_CTL, 0x1F);
APS_Lab 0:813b34a76f24 171 regWR(INTMAP1, 0xC0);
APS_Lab 0:813b34a76f24 172 regWR(POWER_CTL, 0x0E);
APS_Lab 0:813b34a76f24 173 }
APS_Lab 0:813b34a76f24 174
APS_Lab 0:813b34a76f24 175 void ADXL362::set_scalefactor(void)
APS_Lab 0:813b34a76f24 176 {
APS_Lab 0:813b34a76f24 177 float base, sf;
APS_Lab 0:813b34a76f24 178
APS_Lab 0:813b34a76f24 179 base = (ADXL362::gravity / 2.0f);
APS_Lab 0:813b34a76f24 180 sf = base*(0.001f)*9.80665f;
APS_Lab 0:813b34a76f24 181 scaleAccel = sf;
APS_Lab 0:813b34a76f24 182 }
APS_Lab 0:813b34a76f24 183
APS_Lab 0:813b34a76f24 184 void ADXL362::start(void)
APS_Lab 0:813b34a76f24 185 {
APS_Lab 0:813b34a76f24 186 int value;
APS_Lab 0:813b34a76f24 187 value = regRD(POWER_CTL);
APS_Lab 0:813b34a76f24 188 value &= 0xfc;
APS_Lab 0:813b34a76f24 189 value |= POWER_CTL_MESURE;
APS_Lab 0:813b34a76f24 190 regWR(POWER_CTL, value);
APS_Lab 0:813b34a76f24 191 wait_ms(5);
APS_Lab 0:813b34a76f24 192 GetStatus();
APS_Lab 0:813b34a76f24 193 }
APS_Lab 0:813b34a76f24 194
APS_Lab 0:813b34a76f24 195 void ADXL362::stop(void)
APS_Lab 0:813b34a76f24 196 {
APS_Lab 0:813b34a76f24 197 int value;
APS_Lab 0:813b34a76f24 198 value = regRD(POWER_CTL);
APS_Lab 0:813b34a76f24 199 value &= 0xfc;
APS_Lab 0:813b34a76f24 200 value |= POWER_CTL_STOP;
APS_Lab 0:813b34a76f24 201 regWR(POWER_CTL, value);
APS_Lab 0:813b34a76f24 202 wait_ms(5);
APS_Lab 0:813b34a76f24 203 GetStatus();
APS_Lab 0:813b34a76f24 204 }
APS_Lab 0:813b34a76f24 205
APS_Lab 0:813b34a76f24 206 /** ==========================================
APS_Lab 0:813b34a76f24 207 * Public ( Send Command to Device )
APS_Lab 0:813b34a76f24 208 * ========================================== */
APS_Lab 0:813b34a76f24 209 /* Write 16bit-Aligned Register */
APS_Lab 0:813b34a76f24 210 void ADXL362::SoftReset() {
APS_Lab 0:813b34a76f24 211 regWR(SOFT_RESET, SOFT_RESET_ADXL362);
APS_Lab 0:813b34a76f24 212 wait(0.5);
APS_Lab 0:813b34a76f24 213 }
APS_Lab 0:813b34a76f24 214
APS_Lab 0:813b34a76f24 215 void ADXL362::SetMesureParam(int param) {
APS_Lab 0:813b34a76f24 216 int value;
APS_Lab 0:813b34a76f24 217 value = regRD(POWER_CTL);
APS_Lab 0:813b34a76f24 218 param &= ~(POWER_CTL_MODEMASK);
APS_Lab 0:813b34a76f24 219 value &= POWER_CTL_MODEMASK;
APS_Lab 0:813b34a76f24 220 value |= param;
APS_Lab 0:813b34a76f24 221 regWR(POWER_CTL, value);
APS_Lab 0:813b34a76f24 222 }
APS_Lab 0:813b34a76f24 223
APS_Lab 0:813b34a76f24 224 void ADXL362::StartMesure() {
APS_Lab 0:813b34a76f24 225 int value;
APS_Lab 0:813b34a76f24 226 GetStatus();
APS_Lab 0:813b34a76f24 227 value = regRD(POWER_CTL);
APS_Lab 0:813b34a76f24 228 value &= ~(POWER_CTL_MODEMASK);
APS_Lab 0:813b34a76f24 229 value |= POWER_CTL_MESURE;
APS_Lab 0:813b34a76f24 230 regWR(POWER_CTL, POWER_CTL_MESURE);
APS_Lab 0:813b34a76f24 231 value = regRD(POWER_CTL);
APS_Lab 0:813b34a76f24 232 wait_ms(5);
APS_Lab 0:813b34a76f24 233 GetStatus();
APS_Lab 0:813b34a76f24 234 }
APS_Lab 0:813b34a76f24 235
APS_Lab 0:813b34a76f24 236 int ADXL362::GetStatus() {
APS_Lab 0:813b34a76f24 237 int value;
APS_Lab 0:813b34a76f24 238 value = regRD(STATUS);
APS_Lab 0:813b34a76f24 239 return value;
APS_Lab 0:813b34a76f24 240 }
APS_Lab 0:813b34a76f24 241
APS_Lab 0:813b34a76f24 242 /** ==========================================
APS_Lab 0:813b34a76f24 243 * Public ( Sensing )
APS_Lab 0:813b34a76f24 244 * ========================================== */
APS_Lab 0:813b34a76f24 245 void ADXL362::SensorRead(AccelTemp *pAT) {
APS_Lab 0:813b34a76f24 246 int burstBuf[8];
APS_Lab 0:813b34a76f24 247 /* Xx2 + Yx2 + Zx2 + Tempx2 = 8*/
APS_Lab 0:813b34a76f24 248 regBurstRD(XDATA_L, 8, burstBuf);
APS_Lab 0:813b34a76f24 249 convertSensorData(pAT, burstBuf);
APS_Lab 0:813b34a76f24 250 #if 0
APS_Lab 0:813b34a76f24 251 uart->printf("ADXL362[ax] = 0x%02x\n", pAT->ax);
APS_Lab 0:813b34a76f24 252 uart->printf("ADXL362[ay] = 0x%02x\n", pAT->ay);
APS_Lab 0:813b34a76f24 253 uart->printf("ADXL362[az] = 0x%02x\n", pAT->az);
APS_Lab 0:813b34a76f24 254 uart->printf("ADXL362[tm] = 0x%02x\n", pAT->tm)
APS_Lab 0:813b34a76f24 255 #endif
APS_Lab 0:813b34a76f24 256 updateMinMax(&minStore, &maxStore, pAT);
APS_Lab 0:813b34a76f24 257 }
APS_Lab 0:813b34a76f24 258
APS_Lab 0:813b34a76f24 259 /** ==========================================
APS_Lab 0:813b34a76f24 260 * Public ( Sub Infomation )
APS_Lab 0:813b34a76f24 261 * ========================================== */
APS_Lab 0:813b34a76f24 262 /* Get Internal Store (for Min Info) */
APS_Lab 0:813b34a76f24 263 AccelTemp* ADXL362::GetMinInfo(void) {
APS_Lab 0:813b34a76f24 264 return &minStore;
APS_Lab 0:813b34a76f24 265 }
APS_Lab 0:813b34a76f24 266
APS_Lab 0:813b34a76f24 267 /* Get Internal Store (for Max Info) */
APS_Lab 0:813b34a76f24 268 AccelTemp* ADXL362::GetMaxInfo(void) {
APS_Lab 0:813b34a76f24 269 return &maxStore;
APS_Lab 0:813b34a76f24 270 }
APS_Lab 0:813b34a76f24 271
APS_Lab 0:813b34a76f24 272 /* Convert CtrlValue to Real for Accelerometer */
APS_Lab 0:813b34a76f24 273 float ADXL362::ConvAccel(int ctrlval) {
APS_Lab 0:813b34a76f24 274 return scaleAccel * (float)ctrlval;
APS_Lab 0:813b34a76f24 275 }
APS_Lab 0:813b34a76f24 276
APS_Lab 0:813b34a76f24 277 /* Convert CtrlValue to Real for Thermal Sensor */
APS_Lab 0:813b34a76f24 278 float ADXL362::ConvThermal(int ctrlval) {
APS_Lab 0:813b34a76f24 279 return (scaleThermal * (float)ctrlval) + offsetThermal;
APS_Lab 0:813b34a76f24 280 }
APS_Lab 0:813b34a76f24 281
APS_Lab 0:813b34a76f24 282 /** ==========================================
APS_Lab 0:813b34a76f24 283 * Private ( convert sensing value )
APS_Lab 0:813b34a76f24 284 * ========================================== */
APS_Lab 0:813b34a76f24 285 void ADXL362::convertSensorData(AccelTemp *at, int *buf) {
APS_Lab 0:813b34a76f24 286 at->ax = ext12bitToInt(buf[0], buf[1]);
APS_Lab 0:813b34a76f24 287 at->ay = ext12bitToInt(buf[2], buf[3]);
APS_Lab 0:813b34a76f24 288 at->az = ext12bitToInt(buf[4], buf[5]);
APS_Lab 0:813b34a76f24 289 at->tm = ext12bitToInt(buf[6], buf[7]);
APS_Lab 0:813b34a76f24 290 }
APS_Lab 0:813b34a76f24 291
APS_Lab 0:813b34a76f24 292 int ADXL362::ext12bitToInt(int l, int h)
APS_Lab 0:813b34a76f24 293 {
APS_Lab 0:813b34a76f24 294 h <<= 8;
APS_Lab 0:813b34a76f24 295 h &= 0x0f00;
APS_Lab 0:813b34a76f24 296 h |= l & 0xff;
APS_Lab 0:813b34a76f24 297 if ((h & 0x800) != 0) {
APS_Lab 0:813b34a76f24 298 h |= 0xfffff000;
APS_Lab 0:813b34a76f24 299 }
APS_Lab 0:813b34a76f24 300 return h;
APS_Lab 0:813b34a76f24 301 }
APS_Lab 0:813b34a76f24 302
APS_Lab 0:813b34a76f24 303 /** ==========================================
APS_Lab 0:813b34a76f24 304 * Private ( SPI Communication )
APS_Lab 0:813b34a76f24 305 * ========================================== */
APS_Lab 0:813b34a76f24 306 #define ADXL362_SPI_CMD_WR 0x0A
APS_Lab 0:813b34a76f24 307 #define ADXL362_SPI_CMD_RD 0x0B
APS_Lab 0:813b34a76f24 308 #define ADXL362_SPI_CMD_RD_FIFO 0x0D
APS_Lab 0:813b34a76f24 309
APS_Lab 0:813b34a76f24 310 /* Read Single Register */
APS_Lab 0:813b34a76f24 311 int ADXL362::regRD(int regAddr) {
APS_Lab 0:813b34a76f24 312 int recvData;
APS_Lab 0:813b34a76f24 313 regBurstRD(regAddr, 1, &recvData);
APS_Lab 0:813b34a76f24 314 return recvData;
APS_Lab 0:813b34a76f24 315 }
APS_Lab 0:813b34a76f24 316
APS_Lab 0:813b34a76f24 317 /* Read Multi Register */
APS_Lab 0:813b34a76f24 318 void ADXL362::regBurstRD(int regAddr, int numBurst, int *recvBuf) {
APS_Lab 0:813b34a76f24 319 int cnt;
APS_Lab 0:813b34a76f24 320
APS_Lab 0:813b34a76f24 321 /* SPI Burst Read Loop **
APS_Lab 0:813b34a76f24 322 * Write A -> Write B : Read A -> Write C : Read B -> ... */
APS_Lab 0:813b34a76f24 323 _spi->lock();
APS_Lab 0:813b34a76f24 324 chipSelOn();
APS_Lab 0:813b34a76f24 325 /* WriteADDR[n] and ReadData[n-1] */
APS_Lab 0:813b34a76f24 326 _spi->write(ADXL362_SPI_CMD_RD);
APS_Lab 0:813b34a76f24 327 _spi->write(regAddr);
APS_Lab 0:813b34a76f24 328 for (cnt = 0; cnt < numBurst; cnt++) {
APS_Lab 0:813b34a76f24 329 /* WriteADDR[n] and ReadData[n-1] */
APS_Lab 0:813b34a76f24 330 recvBuf[cnt] = _spi->write(0x00);
APS_Lab 0:813b34a76f24 331 }
APS_Lab 0:813b34a76f24 332 chipSelOff();
APS_Lab 0:813b34a76f24 333 _spi->unlock();
APS_Lab 0:813b34a76f24 334 return;
APS_Lab 0:813b34a76f24 335 }
APS_Lab 0:813b34a76f24 336
APS_Lab 0:813b34a76f24 337 /* Write 16bit-Aligned Register */
APS_Lab 0:813b34a76f24 338 void ADXL362::regWR(int regAddr, int value) {
APS_Lab 0:813b34a76f24 339 _spi->lock();
APS_Lab 0:813b34a76f24 340 chipSelOn();
APS_Lab 0:813b34a76f24 341 _spi->write(ADXL362_SPI_CMD_WR);
APS_Lab 0:813b34a76f24 342 _spi->write(regAddr);
APS_Lab 0:813b34a76f24 343 _spi->write(value);
APS_Lab 0:813b34a76f24 344 chipSelOff();
APS_Lab 0:813b34a76f24 345 _spi->unlock();
APS_Lab 0:813b34a76f24 346 return;
APS_Lab 0:813b34a76f24 347 }
APS_Lab 0:813b34a76f24 348
APS_Lab 0:813b34a76f24 349 /** ==========================================
APS_Lab 0:813b34a76f24 350 * Private ( Control internal Stores )
APS_Lab 0:813b34a76f24 351 * ========================================== */
APS_Lab 0:813b34a76f24 352 /* clear internal Min/Max infomation */
APS_Lab 0:813b34a76f24 353 void ADXL362::initMinMax
APS_Lab 0:813b34a76f24 354 (AccelTemp *minData, AccelTemp *maxData) {
APS_Lab 0:813b34a76f24 355 minData->ax = INT_MAX;
APS_Lab 0:813b34a76f24 356 minData->ay = INT_MAX;
APS_Lab 0:813b34a76f24 357 minData->az = INT_MAX;
APS_Lab 0:813b34a76f24 358 minData->tm = INT_MAX;
APS_Lab 0:813b34a76f24 359
APS_Lab 0:813b34a76f24 360 maxData->ax = INT_MIN;
APS_Lab 0:813b34a76f24 361 maxData->ay = INT_MIN;
APS_Lab 0:813b34a76f24 362 maxData->az = INT_MIN;
APS_Lab 0:813b34a76f24 363 maxData->tm = INT_MIN;
APS_Lab 0:813b34a76f24 364 }
APS_Lab 0:813b34a76f24 365
APS_Lab 0:813b34a76f24 366 /* update internal Min/Max infomation */
APS_Lab 0:813b34a76f24 367 #define TEST_MIN_AND_SET(now, test) (now = (now >= test)? test : now)
APS_Lab 0:813b34a76f24 368 #define TEST_MAX_AND_SET(now, test) (now = (now <= test)? test : now)
APS_Lab 0:813b34a76f24 369 void ADXL362::updateMinMax
APS_Lab 0:813b34a76f24 370 (AccelTemp *minData, AccelTemp *maxData, AccelTemp *getData) {
APS_Lab 0:813b34a76f24 371 TEST_MIN_AND_SET(minData->ax, getData->ax);
APS_Lab 0:813b34a76f24 372 TEST_MIN_AND_SET(minData->ay, getData->ay);
APS_Lab 0:813b34a76f24 373 TEST_MIN_AND_SET(minData->az, getData->az);
APS_Lab 0:813b34a76f24 374 TEST_MIN_AND_SET(minData->tm, getData->tm);
APS_Lab 0:813b34a76f24 375
APS_Lab 0:813b34a76f24 376 TEST_MAX_AND_SET(maxData->ax, getData->ax);
APS_Lab 0:813b34a76f24 377 TEST_MAX_AND_SET(maxData->ay, getData->ay);
APS_Lab 0:813b34a76f24 378 TEST_MAX_AND_SET(maxData->az, getData->az);
APS_Lab 0:813b34a76f24 379 TEST_MAX_AND_SET(maxData->tm, getData->tm);
APS_Lab 0:813b34a76f24 380 }