Skip to content

Commit 21cefb7

Browse files
committed
Adds comments, adds pin parameter for those functions that can apply to interrupt pin one or two
1 parent 9b2b518 commit 21cefb7

File tree

2 files changed

+204
-49
lines changed

2 files changed

+204
-49
lines changed

src/SparkFun_Qwiic_KX13X.cpp

Lines changed: 199 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ uint8_t QwDevKX13X::getUniqueID()
2222
{
2323
uint8_t tempVal;
2424
int retVal = readRegisterRegion(SFE_KX13X_WHO_AM_I, &tempVal, 1);
25-
Serial.println(tempVal);
2625

2726
if( retVal != 0 )
2827
return 0;
@@ -99,6 +98,12 @@ bool QwDevKX13X::initialize(uint8_t settings)
9998
return true;
10099
}
101100

101+
//////////////////////////////////////////////////
102+
// softwareReset()
103+
//
104+
// Resets the accelerometer
105+
//
106+
102107
bool QwDevKX13X::softwareReset()
103108
{
104109

@@ -107,13 +112,28 @@ bool QwDevKX13X::softwareReset()
107112

108113
retVal = writeRegisterByte(SFE_KX13X_CNTL2, reset);
109114

115+
// Logic is inverted here - if we reset using I2C the
116+
// accelerometer immediately shuts off which results
117+
// in a NACK.
110118
if( retVal != 0 )
111119
return true;
112120

113121
return false;
114122

115123
}
116124

125+
//////////////////////////////////////////////////
126+
// softwareReset()
127+
//
128+
// Enables acceleromter data. In addition
129+
// some settings can only be set when the accelerometer is
130+
// powered down
131+
//
132+
// Parameter:
133+
// enable - enables or disables the accelerometer
134+
//
135+
//
136+
117137
bool QwDevKX13X::enableAccel(bool enable)
118138
{
119139

@@ -136,9 +156,12 @@ bool QwDevKX13X::enableAccel(bool enable)
136156

137157
}
138158

139-
// Address: 0x1B, bit[7]: default value is: 0x00
140-
// This function reads whether the accelerometer is in stand by or an active
141-
// mode.
159+
//////////////////////////////////////////////////
160+
// getOperatingMode()
161+
//
162+
// Retrieves the current operating mode - low/high power mode
163+
//
164+
142165
uint8_t QwDevKX13X::getOperatingMode(){
143166

144167
uint8_t tempVal;
@@ -152,11 +175,16 @@ uint8_t QwDevKX13X::getOperatingMode(){
152175
return (tempVal >> 7);
153176

154177
}
155-
// Address: 0x1B, bit[1:0]: default value is: 0x00 (2g)
156-
// This function sets the acceleration range of the accelerometer outputs.
157-
// Possible KX132 arguments: 0x00 (2g), 0x01 (4g), 0x02 (8g), 0x03 (16g)
158-
// Possible KX134 arguments: 0x00 (8g), 0x01 (16g), 0x02 (32g), 0x03 (64g)
159-
// KX13X needs to be set into standby mode to change this value
178+
179+
//////////////////////////////////////////////////
180+
// setRange()
181+
//
182+
// Sets the operational g-range of the accelerometer.
183+
//
184+
// Parameter:
185+
// range - sets the range of the accelerometer 2g - 32g depending
186+
// on the version.
187+
//
160188
bool QwDevKX13X::setRange(uint8_t range)
161189
{
162190

@@ -174,6 +202,14 @@ bool QwDevKX13X::setRange(uint8_t range)
174202

175203
}
176204

205+
//////////////////////////////////////////////////
206+
// enableDataEngine()
207+
//
208+
// Enables the data ready bit.
209+
//
210+
// Parameter:
211+
// enable - enable/disables the data ready bit.
212+
//
177213
bool QwDevKX13X::enableDataEngine(bool enable)
178214
{
179215
int retVal;
@@ -194,6 +230,14 @@ bool QwDevKX13X::enableDataEngine(bool enable)
194230
return true;
195231
}
196232

233+
//////////////////////////////////////////////////
234+
// enableTapEngine()
235+
//
236+
// Enables the tap and double tap features of the accelerometers
237+
//
238+
// Parameter:
239+
// enable - enables the tap/double tap feature
240+
//
197241
bool QwDevKX13X::enableTapEngine(bool enable)
198242
{
199243
int retVal;
@@ -214,6 +258,15 @@ bool QwDevKX13X::enableTapEngine(bool enable)
214258
return true;
215259
}
216260

261+
262+
//////////////////////////////////////////////////
263+
// enableTiltEngine()
264+
//
265+
// Enables the tilt detection feature.
266+
//
267+
// Parameter:
268+
// enable - enables the tilt feature
269+
//
217270
bool QwDevKX13X::enableTiltEngine(bool enable)
218271
{
219272
int retVal;
@@ -234,9 +287,14 @@ bool QwDevKX13X::enableTiltEngine(bool enable)
234287
return true;
235288
}
236289

237-
//Address: 0x21, bits[3:0] - default value is 0x06 (50Hz)
238-
//Sets the refresh rate of the accelerometer's data.
239-
// 0.781 * (2 * (n)) derived from pg. 26 of Techincal Reference Manual
290+
//////////////////////////////////////////////////
291+
// setOutputDataRate()
292+
//
293+
// Changes the rate at which accelerometer data is generated.
294+
//
295+
// Parameter:
296+
// rate - determines the rate to be applied.
297+
//
240298
bool QwDevKX13X::setOutputDataRate(uint8_t rate)
241299
{
242300

@@ -261,6 +319,14 @@ bool QwDevKX13X::setOutputDataRate(uint8_t rate)
261319
return true;
262320
}
263321

322+
//////////////////////////////////////////////////
323+
// setTapDataRate()
324+
//
325+
// Changes the rate at which tap data is generated.
326+
//
327+
// Parameter:
328+
// rate - determines the rate to be applied.
329+
//
264330
bool QwDevKX13X::setTapDataRate(uint8_t rate)
265331
{
266332

@@ -284,8 +350,12 @@ bool QwDevKX13X::setTapDataRate(uint8_t rate)
284350

285351
return true;
286352
}
287-
// Address:0x21 , bit[3:0]: default value is: 0x06 (50Hz)
288-
// Gets the accelerometer's output data rate.
353+
354+
//////////////////////////////////////////////////
355+
// getOutputDataRate()
356+
//
357+
// Retrieves the output data rate of the acceleromter.
358+
//
289359
float QwDevKX13X::getOutputDataRate()
290360
{
291361
int retVal;
@@ -302,11 +372,15 @@ float QwDevKX13X::getOutputDataRate()
302372
}
303373

304374

305-
// Address: 0x22, bit[7:4] default value is 0000.
306-
// This register controls the various interrupt settings, all of which can be
307-
// set here. Note: trying to set just one will set the others to their default
308-
// state.
309-
// Thish configures all of the bits related to the interrupt pin.
375+
//////////////////////////////////////////////////
376+
// configureInterruptPin()
377+
//
378+
// This allows you to configure the entire interrupt register
379+
//
380+
// Parameter:
381+
// pinVal - register value to set, note that this overwrites
382+
// everything in the register.
383+
//
310384
bool QwDevKX13X::configureInterruptPin(uint8_t pinVal){
311385

312386
int retVal;
@@ -319,6 +393,16 @@ bool QwDevKX13X::configureInterruptPin(uint8_t pinVal){
319393
return true;
320394
}
321395

396+
397+
//////////////////////////////////////////////////
398+
// enablePhysInterrupt()
399+
//
400+
// Enables interrupts to be routed to the interrupt pins.
401+
//
402+
// Parameters:
403+
// enable - Enables interrupts to report to the physical interrupt pins
404+
// pin - This determines which pin to route the interrupts.
405+
//
322406
bool QwDevKX13X::enablePhysInterrupt(bool enable, uint8_t pin)
323407
{
324408
int retVal;
@@ -353,65 +437,136 @@ bool QwDevKX13X::enablePhysInterrupt(bool enable, uint8_t pin)
353437
return true;
354438
}
355439

356-
bool QwDevKX13X::setPinMode(bool activeLow)
440+
//////////////////////////////////////////////////
441+
// setPinMode()
442+
//
443+
// Sets the active state of the physical interupt pins
444+
//
445+
// Parameters:
446+
// enable - Enables interrupts to report to the physical interrupt pins
447+
// pin - This determines which pin to route the interrupts.
448+
//
449+
bool QwDevKX13X::setPinMode(bool activeLow, uint8_t pin)
357450
{
358451
int retVal;
359452
uint8_t tempVal;
360453

361-
retVal = readRegisterRegion(SFE_KX13X_INC1, &tempVal, 1);
362-
363-
if( retVal != 0 )
454+
if( pin > 2 )
364455
return false;
365456

366-
tempVal = tempVal | (activeLow << 5);
457+
if( pin == 1 )
458+
{
459+
retVal = readRegisterRegion(SFE_KX13X_INC1, &tempVal, 1);
367460

368-
retVal = writeRegisterByte(SFE_KX13X_INC1, tempVal);
461+
if( retVal != 0 )
462+
return false;
369463

370-
if( retVal != 0 )
371-
return false;
464+
tempVal = tempVal | (activeLow << 5);
465+
466+
writeRegisterByte(SFE_KX13X_INC1, tempVal);
467+
}
468+
469+
if( pin == 2 )
470+
{
471+
retVal = readRegisterRegion(SFE_KX13X_INC5, &tempVal, 1);
472+
473+
if( retVal != 0 )
474+
return false;
475+
476+
tempVal = tempVal | (activeLow << 5);
477+
478+
writeRegisterByte(SFE_KX13X_INC5, tempVal);
479+
}
372480

373481
return true;
374482
}
375483

376-
bool QwDevKX13X::setLatchControl(bool latch)
484+
//////////////////////////////////////////////////
485+
// setLatchControl()
486+
//
487+
// Determines whether interrupts are pulsed (default) or latched.
488+
// If they are latched then the interrupt must be released by reading
489+
// the INT_REL register - clearInterrupt();
490+
//
491+
// Parameters:
492+
// latch - True enables latch behavior, false enables pulse behavior (default)
493+
//
494+
bool QwDevKX13X::setLatchControl(bool latch, uint8_t pin)
377495
{
378496
int retVal;
379497
uint8_t tempVal;
498+
499+
if( pin > 2 )
500+
return false;
501+
502+
if( pin == 1 )
503+
{
504+
retVal = readRegisterRegion(SFE_KX13X_INC1, &tempVal, 1);
380505

381-
retVal = readRegisterRegion(SFE_KX13X_INC1, &tempVal, 1);
506+
if( retVal != 0 )
507+
return false;
382508

383-
if( retVal != 0 )
384-
return false;
509+
tempVal = tempVal | (latch << 3);
385510

386-
tempVal = tempVal | (latch << 3);
511+
writeRegisterByte(SFE_KX13X_INC1, tempVal);
512+
}
387513

388-
retVal = writeRegisterByte(SFE_KX13X_INC1, tempVal);
389514

390-
if( retVal != 0 )
391-
return false;
515+
if( pin == 2 )
516+
{
517+
retVal = readRegisterRegion(SFE_KX13X_INC5, &tempVal, 1);
518+
519+
if( retVal != 0 )
520+
return false;
521+
522+
tempVal = tempVal | (latch << 3);
523+
524+
writeRegisterByte(SFE_KX13X_INC5, tempVal);
525+
}
392526

393527
return true;
394528
}
395529

396-
bool QwDevKX13X::setPulseWidth(uint8_t width)
530+
//////////////////////////////////////////////////
531+
// setPulseWidth()
532+
//
533+
// Determines the width of the interrupt pulse
534+
//
535+
// Parameters:
536+
// width - The width setting to be applied.
537+
// pin - the pin to be configured.
538+
//
539+
bool QwDevKX13X::setPulseWidth(uint8_t width, uint8_t pin)
397540
{
398541
int retVal;
399542
uint8_t tempVal;
400543

401-
if( width > 4 )
544+
if( width > 4 | pin > 2 )
402545
return false;
403546

404-
retVal = readRegisterRegion(SFE_KX13X_INC1, &tempVal, 1);
547+
if( pin == 1 )
548+
{
549+
retVal = readRegisterRegion(SFE_KX13X_INC1, &tempVal, 1);
405550

406-
if( retVal != 0 )
407-
return false;
551+
if( retVal != 0 )
552+
return false;
408553

409-
tempVal = tempVal | (width << 6);
554+
tempVal = tempVal | (width << 6);
410555

411-
retVal = writeRegisterByte(SFE_KX13X_INC1, tempVal);
556+
writeRegisterByte(SFE_KX13X_INC1, tempVal);
557+
}
412558

413-
if( retVal != 0 )
414-
return false;
559+
if( pin == 2 )
560+
{
561+
retVal = readRegisterRegion(SFE_KX13X_INC5, &tempVal, 1);
562+
563+
if( retVal != 0 )
564+
return false;
565+
566+
tempVal = tempVal | (width << 6);
567+
568+
writeRegisterByte(SFE_KX13X_INC5, tempVal);
569+
}
415570

416571
return true;
417572
}

0 commit comments

Comments
 (0)