summaryrefslogtreecommitdiff
path: root/nuttx/drivers
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-12-20 14:41:32 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-12-20 14:41:32 +0000
commitca038722e88f047a2eb0e35ef0954aebcf932791 (patch)
tree2f408755b3a07b39e65d2336ef3a023c0a412334 /nuttx/drivers
parentc4080df06cc977a0801794b83a51f6739e347379 (diff)
downloadpx4-nuttx-ca038722e88f047a2eb0e35ef0954aebcf932791.tar.gz
px4-nuttx-ca038722e88f047a2eb0e35ef0954aebcf932791.tar.bz2
px4-nuttx-ca038722e88f047a2eb0e35ef0954aebcf932791.zip
First round of PWM driver debug changes
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4204 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/drivers')
-rw-r--r--nuttx/drivers/pwm.c50
1 files changed, 48 insertions, 2 deletions
diff --git a/nuttx/drivers/pwm.c b/nuttx/drivers/pwm.c
index 15447e9be..455e72706 100644
--- a/nuttx/drivers/pwm.c
+++ b/nuttx/drivers/pwm.c
@@ -66,6 +66,20 @@
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
+/* Debug ********************************************************************/
+/* Non-standard debug that may be enabled just for testing PWM */
+
+#ifdef CONFIG_DEBUG_PWM
+# define pwmdbg dbg
+# define pwmvdbg vdbg
+# define pwmlldbg lldbg
+# define pwmllvdbg llvdbg
+#else
+# define pwmdbg(x...)
+# define pwmvdbg(x...)
+# define pwmlldbg(x...)
+# define pwmllvdbg(x...)
+#endif
/****************************************************************************
* Private Type Definitions
@@ -128,6 +142,8 @@ static int pwm_open(FAR struct file *filep)
uint8_t tmp;
int ret;
+ pwmvdbg("crefs: %d\n", upper->crefs);
+
/* Get exclusive access to the device structures */
ret = sem_wait(&upper->sem);
@@ -159,6 +175,9 @@ static int pwm_open(FAR struct file *filep)
/* Yes.. perform one time hardware initialization. */
+ DEBUGASSERT(lower->ops->setup != NULL);
+ pwmvdbg("calling setup\n");
+
ret = lower->ops->setup(lower);
if (ret < 0)
{
@@ -192,6 +211,8 @@ static int pwm_close(FAR struct file *filep)
FAR struct pwm_upperhalf_s *upper = inode->i_private;
int ret;
+ pwmvdbg("crefs: %d\n", upper->crefs);
+
/* Get exclusive access to the device structures */
ret = sem_wait(&upper->sem);
@@ -219,6 +240,9 @@ static int pwm_close(FAR struct file *filep)
/* Disable the PWM device */
+ DEBUGASSERT(lower->ops->shutdown != NULL);
+ pwmvdbg("calling shutdown: %d\n");
+
lower->ops->shutdown(lower);
}
ret = OK;
@@ -275,6 +299,8 @@ static int pwm_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
/* Handle built-in ioctl commands */
+ pwmvdbg("cmd: %d arg: %ld\n", cmd, arg);
+
switch (cmd)
{
/* PWMIOC_SETCHARACTERISTICS - Set the characteristics of the next pulsed
@@ -290,6 +316,11 @@ static int pwm_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
case PWMIOC_SETCHARACTERISTICS:
{
FAR const struct pwm_info_s *info = (FAR const struct pwm_info_s*)((uintptr_t)arg);
+ DEBUGASSERT(info != NULL && lower->ops->start != NULL);
+
+ pwmvdbg("PWMIOC_SETCHARACTERISTICS frequency: %d duty: %08x started: %d\n",
+ info->frequency, info->duty, upper->started);
+
memcpy(&upper->info, info, sizeof(struct pwm_info_s));
if (upper->started)
{
@@ -308,7 +339,11 @@ static int pwm_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
case PWMIOC_GETCHARACTERISTICS:
{
FAR struct pwm_info_s *info = (FAR struct pwm_info_s*)((uintptr_t)arg);
+ DEBUGASSERT(info != NULL);
+
memcpy(info, &upper->info, sizeof(struct pwm_info_s));
+ pwmvdbg("PWMIOC_GETCHARACTERISTICS frequency: %d duty: %08x\n",
+ info->frequency, info->duty);
}
break;
@@ -320,6 +355,11 @@ static int pwm_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
case PWMIOC_START:
{
+ pwmvdbg("PWMIOC_START frequency: %d duty: %08x started: %d\n",
+ upper->info.frequency, upper->info.duty, upper->started);
+
+ DEBUGASSERT(lower->ops->start != NULL);
+
if (!upper->started)
{
ret = lower->ops->start(lower, &upper->info);
@@ -335,6 +375,9 @@ static int pwm_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
case PWMIOC_STOP:
{
+ pwmvdbg("PWMIOC_STOP: started: %d\n", upper->started);
+ DEBUGASSERT(lower->ops->stop != NULL);
+
if (upper->started)
{
ret = lower->ops->stop(lower);
@@ -347,6 +390,8 @@ static int pwm_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
default:
{
+ pwmvdbg("Forwarding unrecognized cmd: %d arg: %ld\n", cmd, arg);
+ DEBUGASSERT(lower->ops->ioctl != NULL);
ret = lower->ops->ioctl(lower, cmd, arg);
}
break;
@@ -392,6 +437,7 @@ int pwm_register(FAR const char *path, FAR struct pwm_lowerhalf_s *dev)
upper = (FAR struct pwm_upperhalf_s *)zalloc(sizeof(struct pwm_upperhalf_s));
if (!upper)
{
+ pwmdbg("Allocation failed\n");
return -ENOMEM;
}
@@ -402,8 +448,8 @@ int pwm_register(FAR const char *path, FAR struct pwm_lowerhalf_s *dev)
/* Register the PWM device */
- vdbg("Registering %s\n", path);
- return register_driver(path, &g_pwmops, 0666, dev);
+ pwmvdbg("Registering %s\n", path);
+ return register_driver(path, &g_pwmops, 0666, upper);
}
#endif /* CONFIG_PWM */