Add hooks for Boris Astardzhiev's RTC change for STM32L4 to Kinetis. Lower level logic not yet implemented.

This commit is contained in:
Gregory Nutt 2017-09-03 08:38:37 -06:00
parent 9021e1caeb
commit f42a8a38eb
3 changed files with 112 additions and 0 deletions

View file

@ -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
*

View file

@ -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 */

View file

@ -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
****************************************************************************/