diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-09-27 15:29:53 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-09-27 15:29:53 +0000 |
commit | c3bc22f07cb203c5a577b80467c8469d2a5ae9cb (patch) | |
tree | ef6f6626dbdbf7939d763ff9c2b6bf019b85126f /nuttx/drivers/input/ads7843e.c | |
parent | 9a0be89531cef3fb41ac68412693529607dd0ca3 (diff) | |
download | px4-firmware-c3bc22f07cb203c5a577b80467c8469d2a5ae9cb.tar.gz px4-firmware-c3bc22f07cb203c5a577b80467c8469d2a5ae9cb.tar.bz2 px4-firmware-c3bc22f07cb203c5a577b80467c8469d2a5ae9cb.zip |
Definitions for ARMv7-M AIRCR register, Fixes for ADS7843 and SSD1289 driver, Missing build logic for examples/watchdog
git-svn-id: http://svn.code.sf.net/p/nuttx/code/trunk@5198 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/drivers/input/ads7843e.c')
-rw-r--r-- | nuttx/drivers/input/ads7843e.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/nuttx/drivers/input/ads7843e.c b/nuttx/drivers/input/ads7843e.c index 07e5e515d..679c25113 100644 --- a/nuttx/drivers/input/ads7843e.c +++ b/nuttx/drivers/input/ads7843e.c @@ -555,6 +555,7 @@ static void ads7843e_worker(FAR void *arg) FAR struct ads7843e_dev_s *priv = (FAR struct ads7843e_dev_s *)arg; FAR struct ads7843e_config_s *config; bool pendown; + int ret; ASSERT(priv != NULL); @@ -565,10 +566,26 @@ static void ads7843e_worker(FAR void *arg) config = priv->config; DEBUGASSERT(config != NULL); - /* Disable the watchdog timer */ + /* Disable the watchdog timer. This is safe because it is started only + * by this function and this function is serialized on the worker thread. + */ wd_cancel(priv->wdog); + /* Get exclusive access to the driver data structure */ + + do + { + ret = sem_wait(&priv->devsem); + + /* This should only fail if the wait was canceled by an signal + * (and the worker thread will receive a lot of signals). + */ + + DEBUGASSERT(ret == OK || errno == EINTR); + } + while (ret < 0); + /* Check for pen up or down by reading the PENIRQ GPIO. */ pendown = config->pendown(config); @@ -645,6 +662,10 @@ static void ads7843e_worker(FAR void *arg) errout: (void)ads7843e_sendcmd(priv, ADS7843_CMD_ENABPINIRQ); config->enable(config, true); + + /* Release our lock on the state structure */ + + sem_post(&priv->devsem); } /**************************************************************************** |