📄 oncealarm.c
字号:
/* system service include file */
#include <services/services.h>
/* real time clock service include file */
#include <services/rtc/adi_rtc.h>
/* system time include file */
#include <time.h>
/* initialization 'sizings' */
#include "adi_ssl_init.h"
/**************************************************************
Below are masks that are OR's into the final result, to
determine what specific things may have failed.
***************************************************************/
#define ADI_TEST_SUCCESSFUL 0
#define ADI_TEST_SSL_INIT_FAILED 0x01
#define ADI_TEST_SET_DATETIME_FAILED 0x04
#define ADI_TEST_GET_DATETIME_FAILED 0x08
#define ADI_TEST_DATETIME_WRONG 0x10
#define ADI_TEST_SSL_TERMINATE_FAILED 0x40
volatile static u32 OnceAlarmCompleteFlag, SecondsCompleteFlag;
/* Callback function */
static void RTCCallback(void *ClientHandle, u32 Event, void *pArg)
{
switch ( (u32)Event )
{
/* one second periodic interrupt */
case ADI_RTC_EVENT_SECONDS:
{
SecondsCompleteFlag = 1;
adi_rtc_RemoveCallback(ADI_RTC_EVENT_SECONDS );
break;
}
/* one minute periodic interrupt */
case ADI_RTC_EVENT_MINUTES :
break;
/* hourly periodic interrupt */
case ADI_RTC_EVENT_HOURS:
break;
/* daily periodic interrupt */
case ADI_RTC_EVENT_DAYS:
break;
/* stopwatch countdown timeout event */
case ADI_RTC_EVENT_STOPWATCH:
break;
/* time of day, daily alarm */
case ADI_RTC_EVENT_EACH_DAY_ALARM:
break;
/* day & time once only alarm */
case ADI_RTC_EVENT_ONCE_ALARM:
{
adi_rtc_RemoveCallback( ADI_RTC_EVENT_ONCE_ALARM );
OnceAlarmCompleteFlag = 1;
break;
}
/* pending register writes complete */
case ADI_RTC_EVENT_WRITES_COMPLETE:
break;
default:
break;
}
return;
}
/* **************************************************************
*
* Main Function of the Application
*
* **************************************************************/
main()
{
/* variables for storing result codes */
u32 TmpResult, FinalResult, NumSeconds;
/* argument for saving critical region data */
void *critical_region_arg = 0;
/* "tm" structure (see 'time.h') */
struct tm DateTime;
/* A pointer to the structure */
struct tm* pDateTime = &DateTime;
/* Start by assuming success. **/
FinalResult = ADI_TEST_SUCCESSFUL;
/* Initialize the system services. */
/* Use temporary result code to check whether system services */
/* were successfully initialized - see 'ssl_init.c' */
if(( TmpResult = adi_ssl_Init() ) != 0 )
{
/* Add a specific error code to the final result */
FinalResult |= ADI_TEST_SSL_INIT_FAILED;
}
if( FinalResult == 0 )
{
/* set up the fields of the date/time structure for any time */
pDateTime->tm_sec = 33; /* 33 seconds */
pDateTime->tm_min = 22; /* 22 minutes */
pDateTime->tm_hour = 9; /* hour 9 */
pDateTime->tm_mday = 1;
pDateTime->tm_mon = 1;
pDateTime->tm_year = 1900;
/* For the most predictable performance, synchronize the write to the 1 Hz "tick". */
/* zero this flag */
SecondsCompleteFlag = 0;
/* install a callback, that will set the flag */
adi_rtc_InstallCallback(ADI_RTC_EVENT_SECONDS, (void*)NULL, NULL, RTCCallback, (void*)NULL );
/* and set a breakpoint in the callback */
while( SecondsCompleteFlag == 0 );
/* set the date and time */
if( TmpResult = adi_rtc_SetDateTime( &DateTime ) != 0)
{
/* Add a specific error code to the final result */
FinalResult |= ADI_TEST_SET_DATETIME_FAILED;
}
/* synchronize again - zero this flag */
SecondsCompleteFlag = 0;
/* install a callback, that will set the flag */
adi_rtc_InstallCallback(ADI_RTC_EVENT_SECONDS, (void*)NULL, NULL, RTCCallback, (void*)NULL );
/* and set a breakpoint in the callback */
while( SecondsCompleteFlag == 0 );
/* read the date and time */
/* pass a pointer to the second tm structure */
if(( TmpResult = adi_rtc_GetDateTime( pDateTime )) != 0 )
{
/* Add a specific error code to the final result */
FinalResult |= ADI_TEST_GET_DATETIME_FAILED;
}
else
{
/* okay to proceed; use the current time to set an alarm */
/* ALarm will happen in 5 seconds */
NumSeconds = (pDateTime->tm_sec)+5;
/* if we overlapped */
if( NumSeconds >= 60 )
{
/* set seconds accordingly */
pDateTime->tm_sec = NumSeconds-60;
/* use var temporarily to add one to minutes */
NumSeconds = pDateTime->tm_min+1;
/* if minutes wrapped around */
if( NumSeconds >= 60 )
{
/* wrap it around in the struct */
pDateTime->tm_min = 0;
/* use variable temporarily to add one to hours */
NumSeconds = pDateTime->tm_hour+1;
/* if hours wrapped around */
if( NumSeconds == 24 )
{
/* wrap it around in the struct */
pDateTime->tm_hour = 0;
}
/* no need to check for midnight */
}
}
else
{
pDateTime->tm_sec = NumSeconds;
}
}
}
/* zero the flag */
OnceAlarmCompleteFlag = 0;
/* install a once alarm to happen in three seconds */
adi_rtc_InstallCallback(ADI_RTC_EVENT_ONCE_ALARM, (void*)NULL, NULL, RTCCallback, (void*)pDateTime );
/* callback removes the callback */
while( OnceAlarmCompleteFlag == 0 );
/* Terminate the system services */
if(( TmpResult = adi_ssl_Terminate()) != 0 )
{
/* Add a specific error code to the final result */
FinalResult |= ADI_TEST_SSL_TERMINATE_FAILED;
}
/* Here, examine the value of "FinalResult" and see the definitions at
the beginning of this file which describe result, 0 means no errors. */
while( 1 )
{
TmpResult = FinalResult ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -