ADS7843 cleanup

This commit is contained in:
Tectu 2012-08-16 12:55:18 +02:00
parent b402228265
commit 53000e3c19

View file

@ -19,7 +19,7 @@
*/ */
/** /**
* @file touchpadADS7843/touchpad_lld.c * @file touchpadXPT2046/touchpad_lld.c
* @brief Touchpad Driver subsystem low level driver source. * @brief Touchpad Driver subsystem low level driver source.
* *
* @addtogroup TOUCHPAD * @addtogroup TOUCHPAD
@ -79,10 +79,10 @@
* @notapi * @notapi
*/ */
void tp_lld_init(const TOUCHPADDriver *tp) { void tp_lld_init(const TOUCHPADDriver *tp) {
tpDriver=tp; tpDriver = tp;
if (tpDriver->direct_init) if(tpDriver->direct_init)
spiStart(tpDriver->spip, tpDriver->spicfg); spiStart(tpDriver->spip, tpDriver->spicfg);
} }
@ -99,17 +99,17 @@ void tp_lld_init(const TOUCHPADDriver *tp) {
* @notapi * @notapi
*/ */
uint16_t tp_lld_read_value(uint8_t cmd) { uint16_t tp_lld_read_value(uint8_t cmd) {
static uint8_t txbuf[3]={0}; static uint8_t txbuf[3] = {0};
static uint8_t rxbuf[3]={0}; static uint8_t rxbuf[3] = {0};
uint16_t ret; uint16_t ret;
txbuf[0]=cmd; txbuf[0] = cmd;
spiExchange(tpDriver->spip, 3, txbuf, rxbuf); spiExchange(tpDriver->spip, 3, txbuf, rxbuf);
ret = (rxbuf[1] << 5) | (rxbuf[2] >> 3); ret = (rxbuf[1] << 5) | (rxbuf[2] >> 3);
return ret; return ret;
} }
/** /**
@ -120,20 +120,19 @@ uint16_t tp_lld_read_value(uint8_t cmd) {
* @notapi * @notapi
*/ */
static void tp_lld_filter(void) { static void tp_lld_filter(void) {
uint16_t temp; uint16_t temp;
int i,j; int i,j;
for (i=0; i<4; i++) {
for (j=i; j<7; j++) {
if (sampleBuf[i] > sampleBuf[j]) {
/* Swap the values */
temp=sampleBuf[i];
sampleBuf[i]=sampleBuf[j];
sampleBuf[j]=temp;
}
}
}
for(i = 0; i < 4; i++) {
for(j=i; j < 7; j++) {
if(sampleBuf[i] > sampleBuf[j]) {
/* Swap the values */
temp = sampleBuf[i];
sampleBuf[i] = sampleBuf[j];
sampleBuf[j] = temp;
}
}
}
} }
/** /**
@ -144,92 +143,104 @@ static void tp_lld_filter(void) {
* @notapi * @notapi
*/ */
uint16_t tp_lld_read_x(void) { uint16_t tp_lld_read_x(void) {
int i; int i;
#if defined(SPI_USE_MUTUAL_EXCLUSION) #if defined(SPI_USE_MUTUAL_EXCLUSION)
spiAcquireBus(tpDriver->spip); spiAcquireBus(tpDriver->spip);
#endif #endif
TOUCHPAD_SPI_PROLOGUE(); TOUCHPAD_SPI_PROLOGUE();
palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
/* Discard the first conversion - very noisy and keep the ADC on hereafter /* Discard the first conversion - very noisy and keep the ADC on hereafter
* till we are done with the sampling. Note that PENIRQ is disabled. * till we are done with the sampling. Note that PENIRQ is disabled.
*/ */
tp_lld_read_value(0xD1); tp_lld_read_value(0xD1);
for (i=0;i<7;i++) { for(i = 0; i < 7; i++) {
sampleBuf[i]=tp_lld_read_value(0xD1); sampleBuf[i]=tp_lld_read_value(0xD1);
} }
/* Switch on PENIRQ once again - perform a dummy read */ /* Switch on PENIRQ once again - perform a dummy read */
tp_lld_read_value(0xD0); tp_lld_read_value(0xD0);
palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
TOUCHPAD_SPI_EPILOGUE(); TOUCHPAD_SPI_EPILOGUE();
#if defined(SPI_USE_MUTUAL_EXCLUSION) #if defined(SPI_USE_MUTUAL_EXCLUSION)
spiReleaseBus(tpDriver->spip); spiReleaseBus(tpDriver->spip);
#endif #endif
/* Find the median - use selection sort */ /* Find the median - use selection sort */
tp_lld_filter(); tp_lld_filter();
return sampleBuf[3]; return sampleBuf[3];
} }
/* /*
* @brief Reads out the Y direction. * @brief Reads out the Y direction.
* *
* @notapi * @notapi
*/ */
uint16_t tp_lld_read_y(void) { uint16_t tp_lld_read_y(void) {
int i; int i;
#if defined(SPI_USE_MUTUAL_EXCLUSION) #if defined(SPI_USE_MUTUAL_EXCLUSION)
spiAcquireBus(tpDriver->spip); spiAcquireBus(tpDriver->spip);
#endif #endif
TOUCHPAD_SPI_PROLOGUE(); TOUCHPAD_SPI_PROLOGUE();
palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
/* Discard the first conversion - very noisy and keep the ADC on hereafter /* Discard the first conversion - very noisy and keep the ADC on hereafter
* till we are done with the sampling. Note that PENIRQ is disabled. * till we are done with the sampling. Note that PENIRQ is disabled.
*/ */
tp_lld_read_value(0x91); tp_lld_read_value(0x91);
for (i=0;i<7;i++) { for(i = 0; i < 7; i++) {
sampleBuf[i]=tp_lld_read_value(0x91); sampleBuf[i] = tp_lld_read_value(0x91);
} }
/* Switch on PENIRQ once again - perform a dummy read */ /* Switch on PENIRQ once again - perform a dummy read */
tp_lld_read_value(0x90); tp_lld_read_value(0x90);
palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
TOUCHPAD_SPI_EPILOGUE(); TOUCHPAD_SPI_EPILOGUE();
#ifdef SPI_USE_MUTUAL_EXCLUSION #ifdef SPI_USE_MUTUAL_EXCLUSION
spiReleaseBus(tpDriver->spip); spiReleaseBus(tpDriver->spip);
#endif #endif
/* Find the median - use selection sort */ /* Find the median - use selection sort */
tp_lld_filter(); tp_lld_filter();
return sampleBuf[3]; return sampleBuf[3];
} }
/* ---- Optional Routines ---- */ /* ---- Optional Routines ---- */
#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) #if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__)
/* /*
* @brief for checking if touchpad is pressed or not. * @brief for checking if touchpad is pressed or not.
* *
* @return 1 if pressed / 0 if not pressed * @return 1 if pressed / 0 if not pressed
* *
* @notapi * @notapi
*/ */
uint8_t tp_lld_irq(void) { uint8_t tp_lld_irq(void) {
return (!palReadPad(tpDriver->tpIRQPort, tpDriver->tpIRQPin)); return (!palReadPad(tpDriver->tpIRQPort, tpDriver->tpIRQPin));
} }
#endif
#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__)
/*
* @brief Reads out the Z direction / pressure.
*
* @notapi
*/
uint16_t tp_lld_read_z(void) {
/* ToDo */
return 42;
}
#endif #endif
#endif /* HAL_USE_TOUCHPAD */ #endif /* HAL_USE_TOUCHPAD */