Skip to content

Commit

Permalink
Merge pull request #2 from amarotica/main
Browse files Browse the repository at this point in the history
Added proximity sensing support
  • Loading branch information
beegee-tokyo authored Jul 9, 2024
2 parents e778c7b + 7a3c5e6 commit 21dbcd5
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 0 deletions.
51 changes: 51 additions & 0 deletions src/CAP1293.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -979,4 +979,55 @@ void CAP1293::writeRegisters(CAP1293_Register reg, byte *buffer, byte len)
for (int i = 0; i < len; i++)
_i2cPort->write(buffer[i]);
_i2cPort->endTransmission(); // Stop transmitting
}

void CAP1293::enableSignalGuard(uint8_t sensorInput, bool enable) {
SIGNAL_GUARD_ENABLE_REG reg;
reg.SIGNAL_GUARD_ENABLE_COMBINED = readRegister(SIGNAL_GUARD_ENABLE_REGISTER);

if (sensorInput == 1) {
reg.SIGNAL_GUARD_ENABLE_FIELDS.CS1_SG_EN = enable ? 1 : 0;
} else if (sensorInput == 3) {
reg.SIGNAL_GUARD_ENABLE_FIELDS.CS3_SG_EN = enable ? 1 : 0;
}

writeRegister(SIGNAL_GUARD_ENABLE_REGISTER, reg.SIGNAL_GUARD_ENABLE_COMBINED);
}

int8_t CAP1293::readRawData(uint8_t sensorInput) {

switch (sensorInput) {
case 1:
return readRegister(CS1_RAW_DATA_REGISTER);
break;
case 2:
return readRegister(CS2_RAW_DATA_REGISTER);
break;
case 3:
return readRegister(CS3_RAW_DATA_REGISTER);
break;
default:
return 0; // Invalid sensor input
}
}

void CAP1293::setCalibrationSensitivity(uint8_t sensorInput, uint8_t gain) {
CALIBRATION_SENSITIVITY_REG reg;
reg.CALIBRATION_SENSITIVITY_COMBINED = readRegister(CALIBRATION_SENSITIVITY_REGISTER);

switch (sensorInput) {
case 1:
reg.CALIBRATION_SENSITIVITY_FIELDS.CALSEN1 = gain;
break;
case 2:
reg.CALIBRATION_SENSITIVITY_FIELDS.CALSEN2 = gain;
break;
case 3:
reg.CALIBRATION_SENSITIVITY_FIELDS.CALSEN3 = gain;
break;
default:
return; // Invalid sensor input
}

writeRegister(CALIBRATION_SENSITIVITY_REGISTER, reg.CALIBRATION_SENSITIVITY_COMBINED);
}
26 changes: 26 additions & 0 deletions src/CAP1293.h
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,28 @@ typedef union
uint8_t MULTIPLE_TOUCH_PATTERN_COMBINED;
} MULTIPLE_TOUCH_PATTERN_REG;

// Structures to represent register fields
typedef union {
uint8_t SIGNAL_GUARD_ENABLE_COMBINED;
struct {
uint8_t CS1_SG_EN : 1;
uint8_t reserved : 1;
uint8_t CS3_SG_EN : 1;
uint8_t reserved2 : 5;
} SIGNAL_GUARD_ENABLE_FIELDS;
} SIGNAL_GUARD_ENABLE_REG;

// Register address for calibration sensitivity configuration
typedef union {
uint8_t CALIBRATION_SENSITIVITY_COMBINED;
struct {
uint8_t CALSEN1 : 2;
uint8_t CALSEN2 : 2;
uint8_t CALSEN3 : 2;
uint8_t reserved : 2;
} CALIBRATION_SENSITIVITY_FIELDS;
} CALIBRATION_SENSITIVITY_REG;

////////////////////////////////
// CAP1293 Class Declaration //
////////////////////////////////
Expand Down Expand Up @@ -291,6 +313,10 @@ class CAP1293
void setReleaseInterruptEnabled();
bool isReleaseInterruptEnabled();

void enableSignalGuard(uint8_t sensorInput, bool enable);
int8_t readRawData(uint8_t sensorInput);
void setCalibrationSensitivity(uint8_t sensorInput, uint8_t gain);

private:
TwoWire *_i2cPort = NULL; //The generic connection to user's chosen I2C hardware
uint8_t _deviceAddress; //Keeps track of I2C address. setI2CAddress changes this.
Expand Down
5 changes: 5 additions & 0 deletions src/CAP1293_Registers.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ enum CAP1293_Register
PROD_ID = 0xFD,
MANUFACTURE_ID = 0xFE,
REVISION = 0xFF,
SIGNAL_GUARD_ENABLE_REGISTER = 0x29,
CS1_RAW_DATA_REGISTER = 0x10,
CS2_RAW_DATA_REGISTER = 0x11,
CS3_RAW_DATA_REGISTER = 0x12,
CALIBRATION_SENSITIVITY_REGISTER = 0x80,
};

#endif // __CAP1293_REGISTERS_H__

0 comments on commit 21dbcd5

Please sign in to comment.