Revision 7df78c60
include/AT42QT1050/v1/alld_AT42QT1050_v1.h | ||
---|---|---|
250 | 250 |
float at42qt1050_lld_samples2pulse(const uint16_t samples); |
251 | 251 |
uint16_t at42qt1050_lld_scale2scaling(const uint8_t scale); |
252 | 252 |
float at42qt1050_lld_scaling2scale(const uint16_t factor); |
253 |
|
|
254 |
|
|
255 |
/** |
|
256 |
* @brief Calculates n-th address based on address of register 0. |
|
257 |
* @details Calculation: <scale value> = log2(<scaling factor> |
|
258 |
* ) |
|
259 |
* @param[in] base Base address = frist register |
|
260 |
* @param[in] inc Jump to the next register inc times |
|
261 |
* |
|
262 |
* @return Calculated register address |
|
263 |
*/ |
|
264 |
inline at42qt1050_lld_register_t at42qt1050_lld_addr_calc(const at42qt1050_lld_register_t base, const uint8_t inc) { |
|
265 |
apalDbgAssert(inc < 5); |
|
266 |
|
|
267 |
uint8_t double_result = 0; //16bit access |
|
268 |
|
|
269 |
switch (base) { |
|
270 |
case AT42QT1050_LLD_REG_KEYSIGNAL_0: //2 4 2 2 |
|
271 |
case AT42QT1050_LLD_REG_REFERENCEDATA_0: //2 4 2 2 |
|
272 |
double_result = 1; |
|
273 |
case AT42QT1050_LLD_REG_NEGATIVETHRESHOLD_0: //1 2 1 1 |
|
274 |
case AT42QT1050_LLD_REG_PULSE_SCALE_0: //1 2 1 1 |
|
275 |
case AT42QT1050_LLD_REG_INTEGRATOR_AKS_0: //1 2 1 1 |
|
276 |
case AT42QT1050_LLD_REG_CHARGESHAREDELAY_0: //1 2 1 1 |
|
277 |
{ |
|
278 |
uint8_t increase = ((inc>1)?inc+1:inc); |
|
279 |
return (at42qt1050_lld_register_t) (((uint8_t) base)+(increase << double_result)); |
|
280 |
} |
|
281 |
default: |
|
282 |
{ |
|
283 |
apalDbgPrintf("invalid base register 0x%04X\n", base); |
|
284 |
return (at42qt1050_lld_register_t) 0xFF; //does not exist |
|
285 |
} |
|
286 |
} |
|
287 |
} |
|
288 |
|
|
253 | 289 |
#ifdef __cplusplus |
254 | 290 |
} |
255 | 291 |
#endif |
source/AT42QT1050/v1/alld_AT42QT1050_v1.c | ||
---|---|---|
109 | 109 |
apalDbgAssert(key < AT42QT1050_LLD_NUM_KEYS); |
110 | 110 |
apalDbgAssert(signal != NULL); |
111 | 111 |
|
112 |
const uint8_t txbuf = AT42QT1050_LLD_REG_KEYSIGNAL_0 + (2*key) + ((key > 1) ? 2 : 0);
|
|
112 |
const at42qt1050_lld_register_t txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_KEYSIGNAL_0, key);
|
|
113 | 113 |
uint8_t rxbuf[2]; |
114 | 114 |
const apalExitStatus_t status = apalI2CMasterTransmit(at42qt1050d->i2cd, at42qt1050d->addr, &txbuf, 1, rxbuf, 2, timeout); |
115 | 115 |
*signal = (rxbuf[0] << 8) | rxbuf[1]; |
... | ... | |
132 | 132 |
apalDbgAssert(key < AT42QT1050_LLD_NUM_KEYS); |
133 | 133 |
apalDbgAssert(refdata != NULL); |
134 | 134 |
|
135 |
const uint8_t txbuf = AT42QT1050_LLD_REG_REFERENCEDATA_0 + (2*key) + ((key > 1) ? 2 : 0);
|
|
135 |
const at42qt1050_lld_register_t txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_REFERENCEDATA_0, key);
|
|
136 | 136 |
uint8_t rxbuf[2]; |
137 | 137 |
const apalExitStatus_t status = apalI2CMasterTransmit(at42qt1050d->i2cd, at42qt1050d->addr, &txbuf, 1, rxbuf, 2, timeout); |
138 | 138 |
*refdata = (rxbuf[0] << 8) | rxbuf[1]; |
... | ... | |
168 | 168 |
apalDbgAssert(at42qt1050d != NULL && at42qt1050d->i2cd != NULL); |
169 | 169 |
|
170 | 170 |
const apalExitStatus_t status = at42qt1050_lld_write_reg( |
171 |
at42qt1050d, AT42QT1050_LLD_RESETCALIBRATE_RESET, AT42QT1050_LLD_RESETCALIBRATE_RESET, timeout);
|
|
171 |
at42qt1050d, AT42QT1050_LLD_REG_RESET_CALIBRATE, AT42QT1050_LLD_RESETCALIBRATE_RESET, timeout);
|
|
172 | 172 |
if(wait4wakeup) |
173 |
usleep(AT42QT1050_LLD_WATCHDOGTIME_MAX+AT42QT1050_LLD_INITIALIZATION_TIME_MAX); // watchdog timer+initialization -> datasheet
|
|
173 |
usleep(AT42QT1050_LLD_WATCHDOGTIME_MAX+AT42QT1050_LLD_INITIALIZATION_TIME_MAX+timeout); // watchdog timer+initialization -> datasheet
|
|
174 | 174 |
return status; |
175 | 175 |
} |
176 | 176 |
|
Also available in: Unified diff