Commented debug printfs

Dependents:   LoRaWAN-NAMote72-Application-Demo_IoTium LoRaWAN-NAMote72-BVS-confirmed-tester-0-7v1_copy LoRaWAN-NAMote72-Application-Demo-good LoRaWAN-NAMote72-Application-Demo

Fork of lib_mpl3115a2 by wayne roberts

Committer:
mluis
Date:
Mon Dec 14 15:22:46 2015 +0000
Revision:
3:f91c45dac933
Parent:
2:0eb8b0ad292b
Commented debug printfs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudmuck 0:6bba2efea51e 1 #include "mpl3115a2.h"
dudmuck 0:6bba2efea51e 2
dudmuck 0:6bba2efea51e 3 #define MPL3115A_I2C_ADDRESS 0xc0 //0x60
dudmuck 0:6bba2efea51e 4
dudmuck 1:3cd1f21925e8 5 MPL3115A2::MPL3115A2(I2C& r, DigitalIn& int_pin) : m_i2c(r), m_int_pin(int_pin)
dudmuck 0:6bba2efea51e 6 {
dudmuck 1:3cd1f21925e8 7 write(CTRL_REG3, 0x10); // PP_OD1: INT1 to open-drain
dudmuck 0:6bba2efea51e 8 }
dudmuck 0:6bba2efea51e 9
dudmuck 0:6bba2efea51e 10 MPL3115A2::~MPL3115A2()
dudmuck 0:6bba2efea51e 11 {
dudmuck 0:6bba2efea51e 12 }
dudmuck 0:6bba2efea51e 13
dudmuck 0:6bba2efea51e 14 void MPL3115A2::init()
dudmuck 0:6bba2efea51e 15 {
dudmuck 0:6bba2efea51e 16 //MPL3115Reset( );
dudmuck 2:0eb8b0ad292b 17 ctrl_reg1.octet = 0;
dudmuck 2:0eb8b0ad292b 18 ctrl_reg1.bits.RST = 1;
dudmuck 2:0eb8b0ad292b 19 write(CTRL_REG1, /*4*/ ctrl_reg1.octet);
dudmuck 0:6bba2efea51e 20 wait(0.05);
dudmuck 0:6bba2efea51e 21
dudmuck 0:6bba2efea51e 22 do
dudmuck 0:6bba2efea51e 23 { // Wait for the RST bit to clear
dudmuck 2:0eb8b0ad292b 24 wait(0.01);
dudmuck 2:0eb8b0ad292b 25 ctrl_reg1.octet = read(CTRL_REG1);
dudmuck 2:0eb8b0ad292b 26 } while (ctrl_reg1.octet);
dudmuck 0:6bba2efea51e 27
dudmuck 0:6bba2efea51e 28 write( PT_DATA_CFG_REG, 0x07 ); // Enable data flags
dudmuck 0:6bba2efea51e 29 write( CTRL_REG3, 0x11 ); // Open drain, active low interrupts
dudmuck 0:6bba2efea51e 30 write( CTRL_REG4, 0x80 ); // Enable DRDY interrupt
dudmuck 0:6bba2efea51e 31 write( CTRL_REG5, 0x00 ); // DRDY interrupt routed to INT2 - PTD3
dudmuck 2:0eb8b0ad292b 32
dudmuck 2:0eb8b0ad292b 33 ctrl_reg1.bits.ALT = 1; // altitude mode
dudmuck 2:0eb8b0ad292b 34 ctrl_reg1.bits.OS = 5; // OSR = 32
dudmuck 2:0eb8b0ad292b 35 ctrl_reg1.bits.SBYB = 1; // Active
dudmuck 2:0eb8b0ad292b 36 write(CTRL_REG1, ctrl_reg1.octet);
dudmuck 0:6bba2efea51e 37
dudmuck 0:6bba2efea51e 38 SetModeActive( );
dudmuck 0:6bba2efea51e 39 }
dudmuck 0:6bba2efea51e 40
dudmuck 2:0eb8b0ad292b 41 void MPL3115A2::setOSR(uint8_t osr)
dudmuck 2:0eb8b0ad292b 42 {
dudmuck 2:0eb8b0ad292b 43 ctrl_reg1.bits.OS = osr;
dudmuck 2:0eb8b0ad292b 44 write(CTRL_REG1, ctrl_reg1.octet);
dudmuck 2:0eb8b0ad292b 45 }
dudmuck 2:0eb8b0ad292b 46
dudmuck 2:0eb8b0ad292b 47 uint8_t MPL3115A2::getOSR(void)
dudmuck 2:0eb8b0ad292b 48 {
dudmuck 2:0eb8b0ad292b 49 ctrl_reg1.octet = read(CTRL_REG1);
dudmuck 2:0eb8b0ad292b 50 return ctrl_reg1.bits.OS;
dudmuck 2:0eb8b0ad292b 51 }
dudmuck 2:0eb8b0ad292b 52
dudmuck 1:3cd1f21925e8 53 bool MPL3115A2::GetModeActive( )
dudmuck 1:3cd1f21925e8 54 {
dudmuck 2:0eb8b0ad292b 55 ctrl_reg1.octet = read(CTRL_REG1);
dudmuck 2:0eb8b0ad292b 56 return ctrl_reg1.bits.SBYB;
dudmuck 1:3cd1f21925e8 57 }
dudmuck 1:3cd1f21925e8 58
dudmuck 0:6bba2efea51e 59 void MPL3115A2::SetModeActive( )
dudmuck 0:6bba2efea51e 60 {
dudmuck 2:0eb8b0ad292b 61 ctrl_reg1.bits.SBYB = 1;
dudmuck 2:0eb8b0ad292b 62 write(CTRL_REG1, ctrl_reg1.octet);
dudmuck 0:6bba2efea51e 63 }
dudmuck 0:6bba2efea51e 64
dudmuck 0:6bba2efea51e 65 void MPL3115A2::SetModeStandby( )
dudmuck 0:6bba2efea51e 66 {
dudmuck 2:0eb8b0ad292b 67 ctrl_reg1.bits.SBYB = 0;
dudmuck 2:0eb8b0ad292b 68 write(CTRL_REG1, ctrl_reg1.octet);
dudmuck 0:6bba2efea51e 69 }
dudmuck 0:6bba2efea51e 70
dudmuck 0:6bba2efea51e 71 void MPL3115A2::write(uint8_t a, uint8_t d)
dudmuck 0:6bba2efea51e 72 {
dudmuck 0:6bba2efea51e 73 char cmd[2];
dudmuck 0:6bba2efea51e 74
dudmuck 0:6bba2efea51e 75 cmd[0] = a;
dudmuck 0:6bba2efea51e 76 cmd[1] = d;
dudmuck 0:6bba2efea51e 77
dudmuck 0:6bba2efea51e 78 if (m_i2c.write(MPL3115A_I2C_ADDRESS, cmd, 2))
mluis 3:f91c45dac933 79 {
mluis 3:f91c45dac933 80 //printf("MPL write-fail %02x %02x\n", cmd[0], cmd[1]);
mluis 3:f91c45dac933 81 }
dudmuck 1:3cd1f21925e8 82
dudmuck 1:3cd1f21925e8 83 if (a == CTRL_REG4)
dudmuck 1:3cd1f21925e8 84 ctrl_reg4 = d;
dudmuck 0:6bba2efea51e 85 }
dudmuck 0:6bba2efea51e 86
dudmuck 0:6bba2efea51e 87 uint8_t MPL3115A2::read(uint8_t a)
dudmuck 0:6bba2efea51e 88 {
dudmuck 0:6bba2efea51e 89 char cmd[2];
dudmuck 0:6bba2efea51e 90
dudmuck 0:6bba2efea51e 91 cmd[0] = a;
dudmuck 0:6bba2efea51e 92 if (m_i2c.write(MPL3115A_I2C_ADDRESS, cmd, 1, true))
mluis 3:f91c45dac933 93 {
mluis 3:f91c45dac933 94 //printf("MPL write-fail %02x\n", cmd[0]);
mluis 3:f91c45dac933 95 }
dudmuck 0:6bba2efea51e 96 if (m_i2c.read(MPL3115A_I2C_ADDRESS, cmd, 1))
mluis 3:f91c45dac933 97 {
mluis 3:f91c45dac933 98 //printf("MPL read-fail\n");
mluis 3:f91c45dac933 99 }
dudmuck 1:3cd1f21925e8 100
dudmuck 1:3cd1f21925e8 101 if (a == CTRL_REG4)
dudmuck 1:3cd1f21925e8 102 ctrl_reg4 = cmd[0];
dudmuck 1:3cd1f21925e8 103
dudmuck 0:6bba2efea51e 104 return cmd[0];
dudmuck 0:6bba2efea51e 105 }
dudmuck 0:6bba2efea51e 106
dudmuck 2:0eb8b0ad292b 107 float MPL3115A2::ReadBarometer(void)
dudmuck 2:0eb8b0ad292b 108 {
dudmuck 2:0eb8b0ad292b 109 uint32_t pasc;
dudmuck 2:0eb8b0ad292b 110 volatile uint8_t stat;
dudmuck 2:0eb8b0ad292b 111
dudmuck 2:0eb8b0ad292b 112 SetModeBarometer();
dudmuck 2:0eb8b0ad292b 113 ToggleOneShot( );
dudmuck 2:0eb8b0ad292b 114
dudmuck 2:0eb8b0ad292b 115 stat = read(STATUS_REG);
dudmuck 2:0eb8b0ad292b 116 while( (stat & 0x04) != 0x04 ) {
dudmuck 2:0eb8b0ad292b 117 wait(0.01);
dudmuck 2:0eb8b0ad292b 118 stat = read(STATUS_REG);
dudmuck 2:0eb8b0ad292b 119 }
dudmuck 2:0eb8b0ad292b 120
dudmuck 2:0eb8b0ad292b 121 pasc = read(OUT_P_MSB_REG);
dudmuck 2:0eb8b0ad292b 122 pasc <<= 8;
dudmuck 2:0eb8b0ad292b 123 pasc |= read(OUT_P_CSB_REG);
dudmuck 2:0eb8b0ad292b 124 pasc <<= 8;
dudmuck 2:0eb8b0ad292b 125 pasc |= read(OUT_P_LSB_REG);
dudmuck 2:0eb8b0ad292b 126
dudmuck 2:0eb8b0ad292b 127 return pasc / 64.0;
dudmuck 2:0eb8b0ad292b 128 }
dudmuck 2:0eb8b0ad292b 129
dudmuck 0:6bba2efea51e 130 float MPL3115A2::ReadAltitude( void )
dudmuck 0:6bba2efea51e 131 {
dudmuck 0:6bba2efea51e 132 uint8_t counter = 0;
dudmuck 0:6bba2efea51e 133 uint8_t val = 0;
dudmuck 0:6bba2efea51e 134 uint8_t msb = 0, csb = 0, lsb = 0;
dudmuck 0:6bba2efea51e 135 float decimal = 0;
dudmuck 0:6bba2efea51e 136
dudmuck 0:6bba2efea51e 137 /*if( MPL3115Initialized == false )
dudmuck 0:6bba2efea51e 138 {
dudmuck 0:6bba2efea51e 139 return 0;
dudmuck 0:6bba2efea51e 140 }*/
dudmuck 0:6bba2efea51e 141
dudmuck 0:6bba2efea51e 142 SetModeAltimeter( );
dudmuck 0:6bba2efea51e 143 ToggleOneShot( );
dudmuck 0:6bba2efea51e 144
dudmuck 0:6bba2efea51e 145 while( ( val & 0x04 ) != 0x04 )
dudmuck 0:6bba2efea51e 146 {
dudmuck 0:6bba2efea51e 147 val = read( STATUS_REG);
dudmuck 0:6bba2efea51e 148 wait(0.01); //DelayMs( 10 );
dudmuck 0:6bba2efea51e 149 counter++;
dudmuck 0:6bba2efea51e 150
dudmuck 0:6bba2efea51e 151 if( counter > 20 )
dudmuck 0:6bba2efea51e 152 {
dudmuck 0:6bba2efea51e 153 //MPL3115Initialized = false;
dudmuck 0:6bba2efea51e 154 init( );
dudmuck 0:6bba2efea51e 155 SetModeAltimeter( );
dudmuck 0:6bba2efea51e 156 ToggleOneShot( );
dudmuck 0:6bba2efea51e 157 counter = 0;
dudmuck 0:6bba2efea51e 158 while( ( val & 0x04 ) != 0x04 )
dudmuck 0:6bba2efea51e 159 {
dudmuck 0:6bba2efea51e 160 val = read( STATUS_REG);
dudmuck 0:6bba2efea51e 161 wait(0.01); //DelayMs( 10 );
dudmuck 0:6bba2efea51e 162 counter++;
dudmuck 0:6bba2efea51e 163 if( counter > 20 )
dudmuck 0:6bba2efea51e 164 {
dudmuck 1:3cd1f21925e8 165 write( CTRL_REG4, 0x00 );
dudmuck 0:6bba2efea51e 166 return( 0 ); //Error out after max of 512ms for a read
dudmuck 0:6bba2efea51e 167 }
dudmuck 0:6bba2efea51e 168 }
dudmuck 0:6bba2efea51e 169 }
dudmuck 0:6bba2efea51e 170 }
dudmuck 0:6bba2efea51e 171
dudmuck 0:6bba2efea51e 172 msb = read( OUT_P_MSB_REG); // High byte of integer part of altitude,
dudmuck 0:6bba2efea51e 173 csb = read( OUT_P_CSB_REG); // Low byte of integer part of altitude
dudmuck 0:6bba2efea51e 174 lsb = read( OUT_P_LSB_REG); // Decimal part of altitude in bits 7-4
dudmuck 0:6bba2efea51e 175
dudmuck 0:6bba2efea51e 176 decimal = ( ( float )( lsb >> 4 ) ) / 16.0;
dudmuck 0:6bba2efea51e 177 //Altitude = ( float )( ( msb << 8 ) | csb ) + decimal;
dudmuck 0:6bba2efea51e 178 Altitude = ( float )( ( int16_t )( ( msb << 8 ) | csb ) ) + decimal;
dudmuck 1:3cd1f21925e8 179
dudmuck 1:3cd1f21925e8 180 write( CTRL_REG4, 0x00 );
dudmuck 0:6bba2efea51e 181
dudmuck 0:6bba2efea51e 182 return( Altitude );
dudmuck 0:6bba2efea51e 183 }
dudmuck 0:6bba2efea51e 184
dudmuck 0:6bba2efea51e 185 void MPL3115A2::SetModeAltimeter( void )
dudmuck 0:6bba2efea51e 186 {
dudmuck 0:6bba2efea51e 187 SetModeStandby( );
dudmuck 0:6bba2efea51e 188
dudmuck 2:0eb8b0ad292b 189 ctrl_reg1.bits.ALT = 1;
dudmuck 2:0eb8b0ad292b 190 write(CTRL_REG1, ctrl_reg1.octet);
dudmuck 2:0eb8b0ad292b 191
dudmuck 2:0eb8b0ad292b 192 SetModeActive( );
dudmuck 2:0eb8b0ad292b 193 }
dudmuck 0:6bba2efea51e 194
dudmuck 2:0eb8b0ad292b 195 void MPL3115A2::SetModeBarometer(void)
dudmuck 2:0eb8b0ad292b 196 {
dudmuck 2:0eb8b0ad292b 197 SetModeStandby( );
dudmuck 2:0eb8b0ad292b 198
dudmuck 2:0eb8b0ad292b 199 ctrl_reg1.bits.ALT = 0;
dudmuck 2:0eb8b0ad292b 200 write(CTRL_REG1, ctrl_reg1.octet);
dudmuck 2:0eb8b0ad292b 201
dudmuck 2:0eb8b0ad292b 202 SetModeActive( );
dudmuck 0:6bba2efea51e 203 }
dudmuck 0:6bba2efea51e 204
dudmuck 0:6bba2efea51e 205 void MPL3115A2::ToggleOneShot( void )
dudmuck 0:6bba2efea51e 206 {
dudmuck 0:6bba2efea51e 207 SetModeStandby( );
dudmuck 2:0eb8b0ad292b 208
dudmuck 2:0eb8b0ad292b 209 ctrl_reg1.bits.OST = 0;
dudmuck 2:0eb8b0ad292b 210 write(CTRL_REG1, ctrl_reg1.octet);
dudmuck 2:0eb8b0ad292b 211
dudmuck 2:0eb8b0ad292b 212 ctrl_reg1.bits.OST = 1;
dudmuck 2:0eb8b0ad292b 213 write(CTRL_REG1, ctrl_reg1.octet);
dudmuck 0:6bba2efea51e 214
dudmuck 0:6bba2efea51e 215 SetModeActive( );
dudmuck 0:6bba2efea51e 216 }
dudmuck 0:6bba2efea51e 217
dudmuck 0:6bba2efea51e 218 float MPL3115A2::ReadTemperature( void )
dudmuck 0:6bba2efea51e 219 {
dudmuck 0:6bba2efea51e 220 uint8_t counter = 0;
dudmuck 0:6bba2efea51e 221 bool negSign = false;
dudmuck 0:6bba2efea51e 222 uint8_t val = 0;
dudmuck 0:6bba2efea51e 223 uint8_t msb = 0, lsb = 0;
dudmuck 0:6bba2efea51e 224
dudmuck 0:6bba2efea51e 225 /*if( MPL3115Initialized == false )
dudmuck 0:6bba2efea51e 226 {
dudmuck 0:6bba2efea51e 227 return 0;
dudmuck 0:6bba2efea51e 228 }*/
dudmuck 0:6bba2efea51e 229
dudmuck 0:6bba2efea51e 230 ToggleOneShot( );
dudmuck 0:6bba2efea51e 231
dudmuck 0:6bba2efea51e 232 while( ( val & 0x02 ) != 0x02 )
dudmuck 0:6bba2efea51e 233 {
dudmuck 0:6bba2efea51e 234 val = read( STATUS_REG);
dudmuck 0:6bba2efea51e 235 wait(0.01);
dudmuck 0:6bba2efea51e 236 counter++;
dudmuck 0:6bba2efea51e 237
dudmuck 0:6bba2efea51e 238 if( counter > 20 )
dudmuck 0:6bba2efea51e 239 {
dudmuck 0:6bba2efea51e 240 //MPL3115Initialized = false;
dudmuck 0:6bba2efea51e 241 init( );
dudmuck 0:6bba2efea51e 242 ToggleOneShot( );
dudmuck 0:6bba2efea51e 243 counter = 0;
dudmuck 0:6bba2efea51e 244 while( ( val & 0x02 ) != 0x02 )
dudmuck 0:6bba2efea51e 245 {
dudmuck 0:6bba2efea51e 246 val = read( STATUS_REG);
dudmuck 0:6bba2efea51e 247 wait(0.01);
dudmuck 0:6bba2efea51e 248 counter++;
dudmuck 0:6bba2efea51e 249
dudmuck 0:6bba2efea51e 250 if( counter > 20 )
dudmuck 0:6bba2efea51e 251 {
dudmuck 1:3cd1f21925e8 252 write( CTRL_REG4, 0x00 );
dudmuck 0:6bba2efea51e 253 return( 0 ); //Error out after max of 512ms for a read
dudmuck 0:6bba2efea51e 254 }
dudmuck 0:6bba2efea51e 255 }
dudmuck 0:6bba2efea51e 256
dudmuck 0:6bba2efea51e 257 }
dudmuck 0:6bba2efea51e 258 }
dudmuck 0:6bba2efea51e 259
dudmuck 0:6bba2efea51e 260 msb = read( OUT_T_MSB_REG); // Integer part of temperature
dudmuck 0:6bba2efea51e 261 lsb = read( OUT_T_LSB_REG); // Decimal part of temperature in bits 7-4
dudmuck 0:6bba2efea51e 262
dudmuck 0:6bba2efea51e 263 if( msb > 0x7F )
dudmuck 0:6bba2efea51e 264 {
dudmuck 0:6bba2efea51e 265 val = ~( ( msb << 8 ) + lsb ) + 1; //2?s complement
dudmuck 0:6bba2efea51e 266 msb = val >> 8;
dudmuck 0:6bba2efea51e 267 lsb = val & 0x00F0;
dudmuck 0:6bba2efea51e 268 negSign = true;
dudmuck 0:6bba2efea51e 269 }
dudmuck 0:6bba2efea51e 270
dudmuck 0:6bba2efea51e 271 if( negSign == true )
dudmuck 0:6bba2efea51e 272 {
dudmuck 0:6bba2efea51e 273 Temperature = 0 - ( msb + ( float )( ( lsb >> 4 ) / 16.0 ) );
dudmuck 0:6bba2efea51e 274 }
dudmuck 0:6bba2efea51e 275 else
dudmuck 0:6bba2efea51e 276 {
dudmuck 0:6bba2efea51e 277 Temperature = msb + ( float )( ( lsb >> 4 ) / 16.0 );
dudmuck 0:6bba2efea51e 278 }
dudmuck 0:6bba2efea51e 279
dudmuck 0:6bba2efea51e 280 ToggleOneShot( );
dudmuck 0:6bba2efea51e 281
dudmuck 1:3cd1f21925e8 282 write( CTRL_REG4, 0x00 );
dudmuck 1:3cd1f21925e8 283
dudmuck 0:6bba2efea51e 284 return( Temperature );
dudmuck 0:6bba2efea51e 285 }
dudmuck 0:6bba2efea51e 286
dudmuck 1:3cd1f21925e8 287 void MPL3115A2::service()
dudmuck 1:3cd1f21925e8 288 {
dudmuck 1:3cd1f21925e8 289 mpl_int_source_t int_src;
dudmuck 1:3cd1f21925e8 290
dudmuck 1:3cd1f21925e8 291 if ((ctrl_reg4 == 0x00) || m_int_pin) // if no interrupts enabled and no interrupt occuring
dudmuck 1:3cd1f21925e8 292 return;
dudmuck 1:3cd1f21925e8 293
dudmuck 1:3cd1f21925e8 294 int_src.octet = read(INT_SOURCE_REG);
dudmuck 1:3cd1f21925e8 295
dudmuck 1:3cd1f21925e8 296 if (int_src.bits.SRC_TCHG) {
dudmuck 1:3cd1f21925e8 297 }
dudmuck 1:3cd1f21925e8 298 if (int_src.bits.SRC_PCHG) {
dudmuck 1:3cd1f21925e8 299 }
dudmuck 1:3cd1f21925e8 300 if (int_src.bits.SRC_TTH) {
dudmuck 1:3cd1f21925e8 301 }
dudmuck 1:3cd1f21925e8 302 if (int_src.bits.SRC_PTH) {
dudmuck 1:3cd1f21925e8 303 }
dudmuck 1:3cd1f21925e8 304 if (int_src.bits.SRC_TW) {
dudmuck 1:3cd1f21925e8 305 }
dudmuck 1:3cd1f21925e8 306 if (int_src.bits.SRC_PW) {
dudmuck 1:3cd1f21925e8 307 }
dudmuck 1:3cd1f21925e8 308 if (int_src.bits.SRC_FIFO) {
dudmuck 1:3cd1f21925e8 309 read(F_STATUS_REG);
dudmuck 1:3cd1f21925e8 310 }
dudmuck 1:3cd1f21925e8 311 if (int_src.bits.SRC_DRDY) {
dudmuck 1:3cd1f21925e8 312 read(STATUS_REG);
dudmuck 1:3cd1f21925e8 313
dudmuck 1:3cd1f21925e8 314 read( OUT_T_MSB_REG); // Integer part of temperature
dudmuck 1:3cd1f21925e8 315 read( OUT_T_LSB_REG); // Decimal part of temperature in bits 7-4
dudmuck 1:3cd1f21925e8 316
dudmuck 1:3cd1f21925e8 317 read( OUT_P_MSB_REG); // High byte of integer part of altitude,
dudmuck 1:3cd1f21925e8 318 read( OUT_P_CSB_REG); // Low byte of integer part of altitude
dudmuck 1:3cd1f21925e8 319 read( OUT_P_LSB_REG); // Decimal part of altitude in bits 7-4
dudmuck 1:3cd1f21925e8 320 }
dudmuck 1:3cd1f21925e8 321
dudmuck 1:3cd1f21925e8 322 }