Revision 265dae32
| unittests/periphery-lld/src/ut_alld_AT42QT1050_v1.c | ||
|---|---|---|
| 66 | 66 |
chprintf(stream, " %d", test8 & AT42QT1050_LLD_FINFOUTMAXCALGUARD_GUARD); |
| 67 | 67 |
|
| 68 | 68 |
chprintf(stream, "\n\n\tkey\tgroup\tintegr.\tdelay\tthresh.\tpulse\tscale\n"); |
| 69 |
for (uint8_t key = 0; key < AT42QT1050_LLD_NUM_KEYS; ++key) {
|
|
| 70 |
chprintf(stream, "\t%d\t", key);
|
|
| 71 |
txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_INTEGRATOR_AKS_0, key);
|
|
| 72 |
*status |= at42qt1050_lld_read_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, &test8, ((ut_at42qt1050data_t*)ut->data)->timeout);
|
|
| 73 |
if(!((at42qt1050_lld_detectionintegratoraksreg_t)test8).aks)
|
|
| 74 |
chprintf(stream, "none\t");
|
|
| 75 |
else
|
|
| 76 |
chprintf(stream, "%d\t", ((at42qt1050_lld_detectionintegratoraksreg_t)test8).aks);
|
|
| 77 |
|
|
| 78 |
if(!((at42qt1050_lld_detectionintegratoraksreg_t)test8).detection_integrator)
|
|
| 79 |
chprintf(stream, "off", key);
|
|
| 80 |
else
|
|
| 81 |
chprintf(stream, "%d", ((at42qt1050_lld_detectionintegratoraksreg_t)test8).detection_integrator);
|
|
| 82 |
|
|
| 83 |
txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_CHARGESHAREDELAY_0, key);
|
|
| 84 |
*status |= at42qt1050_lld_read_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, &test8, ((ut_at42qt1050data_t*)ut->data)->timeout);
|
|
| 85 |
chprintf(stream, "\t+%d", test8);
|
|
| 86 |
|
|
| 87 |
txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_NEGATIVETHRESHOLD_0, key);
|
|
| 88 |
*status |= at42qt1050_lld_read_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, &test8, ((ut_at42qt1050data_t*)ut->data)->timeout);
|
|
| 89 |
chprintf(stream, "\t%d", test8);
|
|
| 90 |
|
|
| 91 |
txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_PULSE_SCALE_0, key);
|
|
| 92 |
*status |= at42qt1050_lld_read_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, &test8, ((ut_at42qt1050data_t*)ut->data)->timeout);
|
|
| 93 |
chprintf(stream, "\t%d\t%d\n", key, ((at42qt1050_lld_pulsescalereg_t)test8).pulse, ((at42qt1050_lld_pulsescalereg_t)test8).scale);
|
|
| 69 |
for (uint8_t key = 0; key < AT42QT1050_LLD_NUM_KEYS; ++key) {
|
|
| 70 |
chprintf(stream, "\t%d\t", key); |
|
| 71 |
txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_INTEGRATOR_AKS_0, key); |
|
| 72 |
*status |= at42qt1050_lld_read_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, &test8, ((ut_at42qt1050data_t*)ut->data)->timeout); |
|
| 73 |
if(!((at42qt1050_lld_detectionintegratoraksreg_t)test8).aks) |
|
| 74 |
chprintf(stream, "none\t"); |
|
| 75 |
else |
|
| 76 |
chprintf(stream, "%d\t", ((at42qt1050_lld_detectionintegratoraksreg_t)test8).aks); |
|
| 77 |
|
|
| 78 |
if(!((at42qt1050_lld_detectionintegratoraksreg_t)test8).detection_integrator) |
|
| 79 |
chprintf(stream, "off");
|
|
| 80 |
else |
|
| 81 |
chprintf(stream, "%d", ((at42qt1050_lld_detectionintegratoraksreg_t)test8).detection_integrator); |
|
| 82 |
|
|
| 83 |
txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_CHARGESHAREDELAY_0, key); |
|
| 84 |
*status |= at42qt1050_lld_read_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, &test8, ((ut_at42qt1050data_t*)ut->data)->timeout); |
|
| 85 |
chprintf(stream, "\t+%d", test8); |
|
| 86 |
|
|
| 87 |
txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_NEGATIVETHRESHOLD_0, key); |
|
| 88 |
*status |= at42qt1050_lld_read_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, &test8, ((ut_at42qt1050data_t*)ut->data)->timeout); |
|
| 89 |
chprintf(stream, "\t%d", test8); |
|
| 90 |
|
|
| 91 |
txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_PULSE_SCALE_0, key); |
|
| 92 |
*status |= at42qt1050_lld_read_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, &test8, ((ut_at42qt1050data_t*)ut->data)->timeout); |
|
| 93 |
chprintf(stream, "\t%d\t%d\n", ((at42qt1050_lld_pulsescalereg_t)test8).pulse, ((at42qt1050_lld_pulsescalereg_t)test8).scale);
|
|
| 94 | 94 |
} |
| 95 | 95 |
|
| 96 | 96 |
} |
| ... | ... | |
| 101 | 101 |
apalDbgAssert(first_key<5); |
| 102 | 102 |
|
| 103 | 103 |
event_listener_t event_listener; |
| 104 |
aos_timestamp_t tstart, tcurrent, tend; |
|
| 104 |
aos_timestamp_t tcurrent, tend ,tdemo_end; |
|
| 105 |
|
|
| 106 |
//stop demo after 15 seconds |
|
| 107 |
aosSysGetUptime(&tcurrent); |
|
| 108 |
tdemo_end = tcurrent + 15*MICROSECONDS_PER_SECOND; |
|
| 105 | 109 |
|
| 106 | 110 |
uint8_t keyStatus, detectionStatus; |
| 107 | 111 |
uint16_t signal, reference; |
| 108 | 112 |
uint8_t threshold[AT42QT1050_LLD_NUM_KEYS]; |
| 109 | 113 |
|
| 110 |
chprintf(stream, "key, count, signal, ref, [threshold], \033[31mtouch\n\033[0m");
|
|
| 114 |
chprintf(stream, "key, count, ref, signal, [threshold], \033[31mtouch\n\033[0m");
|
|
| 111 | 115 |
|
| 112 | 116 |
//get thresholds |
| 113 | 117 |
for (uint8_t key = 0; key < AT42QT1050_LLD_NUM_KEYS; ++key) {
|
| ... | ... | |
| 115 | 119 |
*status |= at42qt1050_lld_read_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, &threshold[key], ((ut_at42qt1050data_t*)ut->data)->timeout); |
| 116 | 120 |
} |
| 117 | 121 |
chEvtRegister(((ut_at42qt1050data_t*)ut->data)->evtsource, &event_listener, INTERRUPT_EVENT_ID); |
| 118 |
for(uint16_t i=0;; i++) {
|
|
| 119 |
aosSysGetUptime(&tstart); |
|
| 120 |
//wait 1 second for a touch event |
|
| 121 |
tend = tstart + (MICROSECONDS_PER_SECOND); |
|
| 122 |
while(true) {
|
|
| 123 |
aosSysGetUptime(&tcurrent); |
|
| 122 | 124 |
|
| 123 | 125 |
for (uint8_t key = first_key; key < AT42QT1050_LLD_NUM_KEYS; ++key) {
|
| 124 | 126 |
|
| ... | ... | |
| 153 | 155 |
chprintf(stream, "\n\033[0m"); |
| 154 | 156 |
} |
| 155 | 157 |
|
| 156 |
aosSysGetUptime(&tcurrent);
|
|
| 157 |
// const aos_timestamp_t ttimeout = MICROSECONDS_PER_SECOND - ((tcurrent - tstart) % MICROSECONDS_PER_SECOND);
|
|
| 158 |
const eventmask_t emask = chEvtWaitOneTimeout(EVENT_MASK(INTERRUPT_EVENT_ID), chTimeUS2I(tend));//ttimeout));
|
|
| 158 |
//wait 1/3 second for a touch event
|
|
| 159 |
tend = tcurrent + (MICROSECONDS_PER_SECOND/3);
|
|
| 160 |
const eventmask_t emask = chEvtWaitOneTimeout(EVENT_MASK(INTERRUPT_EVENT_ID), chTimeUS2I(tend)); |
|
| 159 | 161 |
const eventflags_t eflags = chEvtGetAndClearFlags(&event_listener); |
| 160 | 162 |
if (emask == EVENT_MASK(INTERRUPT_EVENT_ID) && eflags == ((ut_at42qt1050data_t*)ut->data)->evtflags) {
|
| 161 | 163 |
// interrupt detected |
| ... | ... | |
| 171 | 173 |
chprintf(stream, "calibrate"); |
| 172 | 174 |
chprintf(stream, "\033[K"); |
| 173 | 175 |
|
| 174 |
if(i>=30)
|
|
| 176 |
if(tcurrent > tdemo_end)
|
|
| 175 | 177 |
break; |
| 176 | 178 |
|
| 177 | 179 |
chprintf(stream, "\033[%dF", 5-first_key); //cursor up |
| ... | ... | |
| 190 | 192 |
// local variables |
| 191 | 193 |
aos_utresult_t result = {0, 0};
|
| 192 | 194 |
apalExitStatus_t status; |
| 193 |
uint8_t test_8;
|
|
| 195 |
uint8_t test_8; |
|
| 194 | 196 |
bool error; |
| 195 | 197 |
|
| 196 | 198 |
chprintf(stream, "read register...\n"); |
| ... | ... | |
| 235 | 237 |
const at42qt1050_lld_register_t txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_INTEGRATOR_AKS_0, key); |
| 236 | 238 |
detectionintegrator.aks = 1; //on touch per group-id simultaneous |
| 237 | 239 |
detectionintegrator.detection_integrator = 4; //4 times > threshold => touchevent |
| 238 |
status |= at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, 0x11 , ((ut_at42qt1050data_t*)ut->data)->timeout);
|
|
| 240 |
status |= at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, detectionintegrator.raw, ((ut_at42qt1050data_t*)ut->data)->timeout);
|
|
| 239 | 241 |
} |
| 240 | 242 |
if (status == APAL_STATUS_SUCCESS) {
|
| 241 | 243 |
aosUtPassed(stream, &result); |
| ... | ... | |
| 278 | 280 |
} |
| 279 | 281 |
|
| 280 | 282 |
status = APAL_STATUS_OK; |
| 281 |
chprintf(stream, "write configuration...\npuls + scale + threshold 16\n");
|
|
| 283 |
chprintf(stream, "write configuration...\npuls + scale + threshold 8\n");
|
|
| 282 | 284 |
at42qt1050_lld_pulsescalereg_t pulse_scale; |
| 283 | 285 |
//values stored as exponent of 2 |
| 284 | 286 |
pulse_scale.pulse = 0; // accumulate #pulses -> increase resolution & time to acquire |
| 285 | 287 |
pulse_scale.scale = 0; // scale = average factor n: NewAvg = (NewData/n) + [OldAvg*(n-1/n)] -> decrease noise |
| 286 | 288 |
status = at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, AT42QT1050_LLD_REG_PULSE_SCALE_0, pulse_scale.raw , ((ut_at42qt1050data_t*)ut->data)->timeout); |
| 287 |
status |= at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, AT42QT1050_LLD_REG_PULSE_SCALE_3, 0x00u , ((ut_at42qt1050data_t*)ut->data)->timeout); |
|
| 289 |
pulse_scale.pulse = 1; |
|
| 290 |
status |= at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, AT42QT1050_LLD_REG_PULSE_SCALE_3, pulse_scale.raw , ((ut_at42qt1050data_t*)ut->data)->timeout); |
|
| 291 |
|
|
| 288 | 292 |
pulse_scale.pulse = 4; |
| 289 | 293 |
status |= at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, AT42QT1050_LLD_REG_PULSE_SCALE_1, pulse_scale.raw , ((ut_at42qt1050data_t*)ut->data)->timeout); |
| 290 | 294 |
status |= at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, AT42QT1050_LLD_REG_PULSE_SCALE_2, pulse_scale.raw , ((ut_at42qt1050data_t*)ut->data)->timeout); |
| 295 |
|
|
| 291 | 296 |
status |= at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, AT42QT1050_LLD_REG_PULSE_SCALE_4, pulse_scale.raw , ((ut_at42qt1050data_t*)ut->data)->timeout); |
| 292 | 297 |
|
| 293 | 298 |
for (uint8_t key = 0; key < AT42QT1050_LLD_NUM_KEYS; ++key) {
|
| 294 | 299 |
const at42qt1050_lld_register_t txbuf = at42qt1050_lld_addr_calc(AT42QT1050_LLD_REG_NEGATIVETHRESHOLD_0, key); |
| 295 |
status |= at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, 16, ((ut_at42qt1050data_t*)ut->data)->timeout);
|
|
| 300 |
status |= at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, txbuf, 8, ((ut_at42qt1050data_t*)ut->data)->timeout);
|
|
| 296 | 301 |
} |
| 297 | 302 |
chprintf(stream, "disable guard key\n"); |
| 298 | 303 |
status |= at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, AT42QT1050_LLD_REG_INTEGRATOR_AKS_0, 0 , ((ut_at42qt1050data_t*)ut->data)->timeout); //disable key |
| ... | ... | |
| 337 | 342 |
|
| 338 | 343 |
chprintf(stream, "shutdown touch\n"); |
| 339 | 344 |
test_8 = 0; //Power down |
| 340 |
status = at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, AT42QT1050_LLD_REG_LOWPOWERMODE, &test_8, ((ut_at42qt1050data_t*)ut->data)->timeout);
|
|
| 345 |
status = at42qt1050_lld_write_reg(((ut_at42qt1050data_t*)ut->data)->at42qt1050d, AT42QT1050_LLD_REG_LOWPOWERMODE, test_8, ((ut_at42qt1050data_t*)ut->data)->timeout); |
|
| 341 | 346 |
if (status == APAL_STATUS_SUCCESS) {
|
| 342 | 347 |
aosUtPassed(stream, &result); |
| 343 | 348 |
} else {
|
Also available in: Unified diff