oneshot interface: max_delay method should return time in a standard struct timespec form.
This commit is contained in:
parent
89135c55e4
commit
82b86cdcf3
@ -80,7 +80,7 @@ struct sam_oneshot_lowerhalf_s
|
|||||||
static void sam_oneshot_handler(void *arg);
|
static void sam_oneshot_handler(void *arg);
|
||||||
|
|
||||||
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR uint64_t *usec);
|
FAR struct timespec *ts);
|
||||||
static int sam_start(FAR struct oneshot_lowerhalf_s *lower,
|
static int sam_start(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
oneshot_callback_t callback, FAR void *arg,
|
oneshot_callback_t callback, FAR void *arg,
|
||||||
FAR const struct timespec *ts);
|
FAR const struct timespec *ts);
|
||||||
@ -159,8 +159,7 @@ static void sam_oneshot_handler(void *arg)
|
|||||||
* lower An instance of the lower-half oneshot state structure. This
|
* lower An instance of the lower-half oneshot state structure. This
|
||||||
* structure must have been previously initialized via a call to
|
* structure must have been previously initialized via a call to
|
||||||
* oneshot_initialize();
|
* oneshot_initialize();
|
||||||
* usec The user-provided location in which to return the maxumum delay
|
* ts The location in which to return the maxumum delay.
|
||||||
* in microseconds.
|
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* Zero (OK) is returned on success; a negated errno value is returned
|
* Zero (OK) is returned on success; a negated errno value is returned
|
||||||
@ -169,13 +168,25 @@ static void sam_oneshot_handler(void *arg)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR uint64_t *usec)
|
FAR struct timespec *ts)
|
||||||
{
|
{
|
||||||
FAR struct sam_oneshot_lowerhalf_s *priv =
|
FAR struct sam_oneshot_lowerhalf_s *priv =
|
||||||
(FAR struct sam_oneshot_lowerhalf_s *)lower;
|
(FAR struct sam_oneshot_lowerhalf_s *)lower;
|
||||||
|
uint64_t usecs;
|
||||||
|
int ret;
|
||||||
|
|
||||||
DEBUGASSERT(priv != NULL && usec != NULL);
|
DEBUGASSERT(priv != NULL && ts != NULL);
|
||||||
return sam_oneshot_max_delay(&priv->oneshot, usec);
|
ret = sam_oneshot_max_delay(&priv->oneshot, &usecs);
|
||||||
|
if (ret >= 0)
|
||||||
|
{
|
||||||
|
uint64_t sec = usecs / 1000000;
|
||||||
|
usecs -= 1000000 * sec;
|
||||||
|
|
||||||
|
ts->tv_sec = (time_t)sec;
|
||||||
|
ts->tv_nsec = (long)(usecs * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
@ -81,7 +82,7 @@ struct sam_oneshot_lowerhalf_s
|
|||||||
static void sam_oneshot_handler(void *arg);
|
static void sam_oneshot_handler(void *arg);
|
||||||
|
|
||||||
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR uint64_t *usec);
|
FAR struct timespec *ts);
|
||||||
static int sam_start(FAR struct oneshot_lowerhalf_s *lower,
|
static int sam_start(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
oneshot_callback_t callback, FAR void *arg,
|
oneshot_callback_t callback, FAR void *arg,
|
||||||
FAR const struct timespec *ts);
|
FAR const struct timespec *ts);
|
||||||
@ -160,8 +161,7 @@ static void sam_oneshot_handler(void *arg)
|
|||||||
* lower An instance of the lower-half oneshot state structure. This
|
* lower An instance of the lower-half oneshot state structure. This
|
||||||
* structure must have been previously initialized via a call to
|
* structure must have been previously initialized via a call to
|
||||||
* oneshot_initialize();
|
* oneshot_initialize();
|
||||||
* usec The user-provided location in which to return the maxumum delay
|
* ts The location in which to return the maxumum delay.
|
||||||
* in microseconds.
|
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* Zero (OK) is returned on success; a negated errno value is returned
|
* Zero (OK) is returned on success; a negated errno value is returned
|
||||||
@ -170,12 +170,13 @@ static void sam_oneshot_handler(void *arg)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR uint64_t *usec)
|
FAR struct timespec *ts)
|
||||||
{
|
{
|
||||||
DEBUGASSERT(priv != NULL && usec != NULL);
|
DEBUGASSERT(priv != NULL && ts != NULL);
|
||||||
|
|
||||||
#warning Missing logic
|
#warning Missing logic
|
||||||
*usec = UINT64_MAX;
|
ts->tv_sec = INT_MAX;
|
||||||
|
ts->tv_nsec = LONG_MAX;
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ struct sam_oneshot_lowerhalf_s
|
|||||||
static void sam_oneshot_handler(void *arg);
|
static void sam_oneshot_handler(void *arg);
|
||||||
|
|
||||||
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR uint64_t *usec);
|
FAR struct timespec *ts);
|
||||||
static int sam_start(FAR struct oneshot_lowerhalf_s *lower,
|
static int sam_start(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
oneshot_callback_t callback, FAR void *arg,
|
oneshot_callback_t callback, FAR void *arg,
|
||||||
FAR const struct timespec *ts);
|
FAR const struct timespec *ts);
|
||||||
@ -159,8 +159,7 @@ static void sam_oneshot_handler(void *arg)
|
|||||||
* lower An instance of the lower-half oneshot state structure. This
|
* lower An instance of the lower-half oneshot state structure. This
|
||||||
* structure must have been previously initialized via a call to
|
* structure must have been previously initialized via a call to
|
||||||
* oneshot_initialize();
|
* oneshot_initialize();
|
||||||
* usec The user-provided location in which to return the maxumum delay
|
* ts The location in which to return the maxumum delay.
|
||||||
* in microseconds.
|
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* Zero (OK) is returned on success; a negated errno value is returned
|
* Zero (OK) is returned on success; a negated errno value is returned
|
||||||
@ -169,13 +168,25 @@ static void sam_oneshot_handler(void *arg)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
static int sam_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR uint64_t *usec)
|
FAR struct timespec *ts)
|
||||||
{
|
{
|
||||||
FAR struct sam_oneshot_lowerhalf_s *priv =
|
FAR struct sam_oneshot_lowerhalf_s *priv =
|
||||||
(FAR struct sam_oneshot_lowerhalf_s *)lower;
|
(FAR struct sam_oneshot_lowerhalf_s *)lower;
|
||||||
|
uint64_t usecs;
|
||||||
|
int ret;
|
||||||
|
|
||||||
DEBUGASSERT(priv != NULL && usec != NULL);
|
DEBUGASSERT(priv != NULL && ts != NULL);
|
||||||
return sam_oneshot_max_delay(&priv->oneshot, usec);
|
ret = sam_oneshot_max_delay(&priv->oneshot, &usecs);
|
||||||
|
if (ret >= 0)
|
||||||
|
{
|
||||||
|
uint64_t sec = usecs / 1000000;
|
||||||
|
usecs -= 1000000 * sec;
|
||||||
|
|
||||||
|
ts->tv_sec = (time_t)sec;
|
||||||
|
ts->tv_nsec = (long)(usecs * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -80,7 +80,7 @@ struct stm32_oneshot_lowerhalf_s
|
|||||||
static void stm32_oneshot_handler(void *arg);
|
static void stm32_oneshot_handler(void *arg);
|
||||||
|
|
||||||
static int stm32_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
static int stm32_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR uint64_t *usec);
|
FAR struct timespec *ts);
|
||||||
static int stm32_start(FAR struct oneshot_lowerhalf_s *lower,
|
static int stm32_start(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
oneshot_callback_t callback, FAR void *arg,
|
oneshot_callback_t callback, FAR void *arg,
|
||||||
FAR const struct timespec *ts);
|
FAR const struct timespec *ts);
|
||||||
@ -159,8 +159,7 @@ static void stm32_oneshot_handler(void *arg)
|
|||||||
* lower An instance of the lower-half oneshot state structure. This
|
* lower An instance of the lower-half oneshot state structure. This
|
||||||
* structure must have been previously initialized via a call to
|
* structure must have been previously initialized via a call to
|
||||||
* oneshot_initialize();
|
* oneshot_initialize();
|
||||||
* usec The user-provided location in which to return the maxumum delay
|
* ts The location in which to return the maxumum delay.
|
||||||
* in microseconds.
|
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* Zero (OK) is returned on success; a negated errno value is returned
|
* Zero (OK) is returned on success; a negated errno value is returned
|
||||||
@ -169,13 +168,25 @@ static void stm32_oneshot_handler(void *arg)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static int stm32_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
static int stm32_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR uint64_t *usec)
|
FAR struct timespec *ts)
|
||||||
{
|
{
|
||||||
FAR struct stm32_oneshot_lowerhalf_s *priv =
|
FAR struct stm32_oneshot_lowerhalf_s *priv =
|
||||||
(FAR struct stm32_oneshot_lowerhalf_s *)lower;
|
(FAR struct stm32_oneshot_lowerhalf_s *)lower;
|
||||||
|
uint64_t usecs;
|
||||||
|
int ret;
|
||||||
|
|
||||||
DEBUGASSERT(priv != NULL && usec != NULL);
|
DEBUGASSERT(priv != NULL && ts != NULL);
|
||||||
return stm32_oneshot_max_delay(&priv->oneshot, usec);
|
ret = stm32_oneshot_max_delay(&priv->oneshot, &usecs);
|
||||||
|
if (ret >= 0)
|
||||||
|
{
|
||||||
|
uint64_t sec = usecs / 1000000;
|
||||||
|
usecs -= 1000000 * sec;
|
||||||
|
|
||||||
|
ts->tv_sec = (time_t)sec;
|
||||||
|
ts->tv_nsec = (long)(usecs * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -80,12 +80,12 @@ struct stm32l4_oneshot_lowerhalf_s
|
|||||||
static void stm32l4_oneshot_handler(void *arg);
|
static void stm32l4_oneshot_handler(void *arg);
|
||||||
|
|
||||||
static int stm32l4_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
static int stm32l4_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR uint64_t *usec);
|
FAR struct timespec *ts);
|
||||||
static int stm32l4_start(FAR struct oneshot_lowerhalf_s *lower,
|
static int stm32l4_start(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
oneshot_callback_t callback, FAR void *arg,
|
oneshot_callback_t callback, FAR void *arg,
|
||||||
FAR const struct timespec *ts);
|
FAR const struct timespec *ts);
|
||||||
static int stm32l4_cancel(FAR struct oneshot_lowerhalf_s *lower,
|
static int stm32l4_cancel(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR struct timespec *ts);
|
FAR struct timespec *ts);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
@ -159,8 +159,7 @@ static void stm32l4_oneshot_handler(void *arg)
|
|||||||
* lower An instance of the lower-half oneshot state structure. This
|
* lower An instance of the lower-half oneshot state structure. This
|
||||||
* structure must have been previously initialized via a call to
|
* structure must have been previously initialized via a call to
|
||||||
* oneshot_initialize();
|
* oneshot_initialize();
|
||||||
* usec The user-provided location in which to return the maxumum delay
|
* ts The location in which to return the maxumum delay.
|
||||||
* in microseconds.
|
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* Zero (OK) is returned on success; a negated errno value is returned
|
* Zero (OK) is returned on success; a negated errno value is returned
|
||||||
@ -169,13 +168,25 @@ static void stm32l4_oneshot_handler(void *arg)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static int stm32l4_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
static int stm32l4_max_delay(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR uint64_t *usec)
|
FAR struct timespec *ts)
|
||||||
{
|
{
|
||||||
FAR struct stm32l4_oneshot_lowerhalf_s *priv =
|
FAR struct stm32l4_oneshot_lowerhalf_s *priv =
|
||||||
(FAR struct stm32l4_oneshot_lowerhalf_s *)lower;
|
(FAR struct stm32l4_oneshot_lowerhalf_s *)lower;
|
||||||
|
uint64_t usecs;
|
||||||
|
int ret;
|
||||||
|
|
||||||
DEBUGASSERT(priv != NULL && usec != NULL);
|
DEBUGASSERT(priv != NULL && ts != NULL);
|
||||||
return stm32l4_oneshot_max_delay(&priv->oneshot, usec);
|
ret = stm32l4_oneshot_max_delay(&priv->oneshot, &usecs);
|
||||||
|
if (ret >= 0)
|
||||||
|
{
|
||||||
|
uint64_t sec = usecs / 1000000;
|
||||||
|
usecs -= 1000000 * sec;
|
||||||
|
|
||||||
|
ts->tv_sec = (time_t)sec;
|
||||||
|
ts->tv_nsec = (long)(usecs * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -188,6 +188,7 @@ static ssize_t oneshot_read(FAR struct file *filep, FAR char *buffer, size_t buf
|
|||||||
/* Return zero -- usually meaning end-of-file */
|
/* Return zero -- usually meaning end-of-file */
|
||||||
|
|
||||||
tmrinfo("buflen=%ld\n", (unsigned long)buflen);
|
tmrinfo("buflen=%ld\n", (unsigned long)buflen);
|
||||||
|
DEBUGASSERT(filep != NULL && filep->f_inode != NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,6 +206,7 @@ static ssize_t oneshot_write(FAR struct file *filep, FAR const char *buffer,
|
|||||||
/* Return a failure */
|
/* Return a failure */
|
||||||
|
|
||||||
tmrinfo("buflen=%ld\n", (unsigned long)buflen);
|
tmrinfo("buflen=%ld\n", (unsigned long)buflen);
|
||||||
|
DEBUGASSERT(filep != NULL && filep->f_inode != NULL);
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,21 +252,10 @@ static int oneshot_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
|
|||||||
|
|
||||||
case OSIOC_MAXDELAY:
|
case OSIOC_MAXDELAY:
|
||||||
{
|
{
|
||||||
FAR struct timespec *ts;
|
FAR struct timespec *ts = (FAR struct timespec *)((uintptr_t)arg);
|
||||||
uint64_t usecs;
|
|
||||||
|
|
||||||
ts = (FAR struct timespec *)((uintptr_t)arg);
|
|
||||||
DEBUGASSERT(ts != NULL);
|
DEBUGASSERT(ts != NULL);
|
||||||
|
|
||||||
ret = ONESHOT_MAX_DELAY(priv->od_lower, &usecs);
|
ret = ONESHOT_MAX_DELAY(priv->od_lower, ts);
|
||||||
if (ret >= 0)
|
|
||||||
{
|
|
||||||
uint64_t sec = usecs / 1000000;
|
|
||||||
usecs -= 1000000 * sec;
|
|
||||||
|
|
||||||
ts->tv_sec = (time_t)sec;
|
|
||||||
ts->tv_nsec = (long)(usecs * 1000);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -90,8 +90,7 @@
|
|||||||
* lower An instance of the lower-half oneshot state structure. This
|
* lower An instance of the lower-half oneshot state structure. This
|
||||||
* structure must have been previously initialized via a call to
|
* structure must have been previously initialized via a call to
|
||||||
* oneshot_initialize();
|
* oneshot_initialize();
|
||||||
* usec The user-provided location in which to return the maxumum delay
|
* ts The location in which to return the maxumum delay.
|
||||||
* in microseconds.
|
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* Zero (OK) is returned on success; a negated errno value is returned
|
* Zero (OK) is returned on success; a negated errno value is returned
|
||||||
@ -99,7 +98,7 @@
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#define ONESHOT_MAX_DELAY(l,u) ((l)->ops->max_delay(l,u))
|
#define ONESHOT_MAX_DELAY(l,t) ((l)->ops->max_delay(l,t))
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: ONESHOT_START
|
* Name: ONESHOT_START
|
||||||
@ -170,7 +169,7 @@ struct timespec;
|
|||||||
struct oneshot_operations_s
|
struct oneshot_operations_s
|
||||||
{
|
{
|
||||||
CODE int (*max_delay)(FAR struct oneshot_lowerhalf_s *lower,
|
CODE int (*max_delay)(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
FAR uint64_t *usec);
|
FAR struct timespec *ts);
|
||||||
CODE int (*start)(FAR struct oneshot_lowerhalf_s *lower,
|
CODE int (*start)(FAR struct oneshot_lowerhalf_s *lower,
|
||||||
oneshot_callback_t callback, FAR void *arg,
|
oneshot_callback_t callback, FAR void *arg,
|
||||||
FAR const struct timespec *ts);
|
FAR const struct timespec *ts);
|
||||||
|
Loading…
Reference in New Issue
Block a user