mirror of
https://github.com/apache/nuttx.git
synced 2026-09-13 14:10:18 +00:00
Add hooks for Boris Astardzhiev's RTC change for STM32L4 to Kinetis. Lower level logic not yet implemented.
This commit is contained in:
parent
9021e1caeb
commit
f42a8a38eb
3 changed files with 112 additions and 0 deletions
|
|
@ -84,6 +84,14 @@ struct alm_setalarm_s
|
|||
FAR void *as_arg; /* Argument for callback */
|
||||
};
|
||||
|
||||
/* Structure used to pass parameters to query an alarm */
|
||||
|
||||
struct alm_rdalarm_s
|
||||
{
|
||||
int ar_id; /* enum alm_id_e */
|
||||
FAR struct rtc_time *ar_time;/* Argument for storing ALARM RTC time */
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
|
@ -114,6 +122,22 @@ extern "C"
|
|||
|
||||
int kinetis_rtc_setalarm(FAR const struct timespec *tp, alarmcb_t callback);
|
||||
|
||||
/************************************************************************************
|
||||
* Name: kinetis_rtc_rdalarm
|
||||
*
|
||||
* Description:
|
||||
* Query an alarm configured in hardware.
|
||||
*
|
||||
* Input Parameters:
|
||||
* alminfo - Information about the alarm configuration.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno on failure
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
int kinetis_rtc_rdalarm(FAR struct alm_rdalarm_s *alminfo);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: kinetis_rtc_cancelalarm
|
||||
*
|
||||
|
|
|
|||
|
|
@ -584,4 +584,43 @@ int kinetis_rtc_cancelalarm(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Name: kinetis_rtc_rdalarm
|
||||
*
|
||||
* Description:
|
||||
* Query an alarm configured in hardware.
|
||||
*
|
||||
* Input Parameters:
|
||||
* alminfo - Information about the alarm configuration.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno on failure
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
#ifdef CONFIG_RTC_ALARM
|
||||
int kinetis_rtc_rdalarm(FAR struct alm_rdalarm_s *alminfo)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
ASSERT(alminfo != NULL);
|
||||
|
||||
switch (alminfo->ar_id)
|
||||
{
|
||||
case RTC_ALARMA:
|
||||
{
|
||||
#warning Missing logic
|
||||
ret = -ENOSYS;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
rtcerr("ERROR: Invalid ALARM%d\n", alminfo->ar_id);
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* KINETIS_RTC */
|
||||
|
|
|
|||
|
|
@ -109,6 +109,8 @@ static int kinetis_setrelative(FAR struct rtc_lowerhalf_s *lower,
|
|||
FAR const struct lower_setrelative_s *alarminfo);
|
||||
static int kinetis_cancelalarm(FAR struct rtc_lowerhalf_s *lower,
|
||||
int alarmid);
|
||||
static int kinetis_rdalarm(FAR struct rtc_lowerhalf_s *lower,
|
||||
FAR struct lower_rdalarm_s *alarminfo);
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
|
|
@ -126,6 +128,7 @@ static const struct rtc_ops_s g_rtc_ops =
|
|||
.setalarm = kinetis_setalarm,
|
||||
.setrelative = kinetis_setrelative,
|
||||
.cancelalarm = kinetis_cancelalarm,
|
||||
.rdalarm = kinetis_rdalarm,
|
||||
#endif
|
||||
#ifdef CONFIG_RTC_IOCTL
|
||||
.ioctl = NULL,
|
||||
|
|
@ -492,6 +495,52 @@ static int kinetis_cancelalarm(FAR struct rtc_lowerhalf_s *lower, int alarmid)
|
|||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: kinetis_rdalarm
|
||||
*
|
||||
* Description:
|
||||
* Query the RTC alarm.
|
||||
*
|
||||
* Input Parameters:
|
||||
* lower - A reference to RTC lower half driver state structure
|
||||
* alarminfo - Provided information needed to query the alarm
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) is returned on success; a negated errno value is returned
|
||||
* on any failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_RTC_ALARM
|
||||
static int kinetis_rdalarm(FAR struct rtc_lowerhalf_s *lower,
|
||||
FAR struct lower_rdalarm_s *alarminfo)
|
||||
{
|
||||
struct alm_rdalarm_s lowerinfo;
|
||||
int ret = -EINVAL;
|
||||
|
||||
ASSERT(lower != NULL && alarminfo != NULL && alarminfo->time != NULL);
|
||||
DEBUGASSERT(alarminfo->id == RTC_ALARMA);
|
||||
|
||||
if (alarminfo->id == RTC_ALARMA)
|
||||
{
|
||||
/* Disable pre-emption while we do this so that we don't have to worry
|
||||
* about being suspended and working on an old time.
|
||||
*/
|
||||
|
||||
sched_lock();
|
||||
|
||||
lowerinfo.ar_id = alarminfo->id;
|
||||
lowerinfo.ar_time = alarminfo->time;
|
||||
|
||||
ret = kinetis_rtc_rdalarm(&lowerinfo);
|
||||
|
||||
sched_unlock();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue