Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: ICE-Application/src/Utilities/timerUtils.h
- Revision:
- 0:61364762ee0e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ICE-Application/src/Utilities/timerUtils.h Tue Jan 24 19:05:33 2017 +0000
@@ -0,0 +1,269 @@
+#ifndef __CNTL_TIME_SHEDULE_UTILS_H__
+#define __CNTL_TIME_SHEDULE_UTILS_H__
+/************************************************************************
+ * *
+ * Copyright (c) 2012 Nalco Company. All Rights Reserved. *
+ * *
+ ************************************************************************/
+
+#include <mbed.h>
+#include "rtos.h"
+
+#ifdef __ICCARM__
+struct tm *localtime_r(const time_t *const timep, struct tm *result);
+#endif
+
+typedef char DMSTRING32[32];
+typedef char DMSTRING128[128];
+typedef DMSTRING32 DM_TAG;
+
+#define ERROR -1
+#define OK 0
+
+typedef enum cntl_check_schedule_returns
+{
+ CNTL_SCHED_CHECK_INTERNAL_ERROR = -3, // internal implementation error
+ CNTL_SCHED_CHECK_BAD_PARAMS = -2, // problem with the schedule data passed
+ CNTL_SCHED_CHECK_SCHED_OK = 0, // no problems or conflicts with the schedule
+ CNTL_SCHED_CHECK_OUTPUT_CONFLICT = 1, // conflict on output relay
+ CNTL_SCHED_CHECK_PRODUCT_CONFLICT = 2, // product conflict with another relay timer
+ CNTL_SCHED_CHECK_BLOWDOWN_CONFLICT = 3 // blowdown conflict with another relay timer
+} CNTL_CHECK_SCHEDULE_RETURNS;
+
+#define CNTL_MAX_SCHEDULE_ELEMENTS 64
+#define TSC_ALARM_PRIORITY (90) /* Very high alarm priority so no other alarm can cancel it, i.e. interlock, maintenance mode, etc.*/
+#define TSC_12_HOURS_IN_SECONDS (SECONDS_PER_MINUTE * MINUTES_PER_HOUR * 12 )
+#define TSC_31_DAYS_IN_SECONDS (SECONDS_PER_MINUTE * MINUTES_PER_HOUR * HOURS_PER_DAY * 31)
+
+
+#define SUNDAY_MASK (0x001)
+#define MONDAY_MASK (0x002)
+#define TUESDAY_MASK (0x004)
+#define WEDNESDAY_MASK (0x008)
+#define THURSDAY_MASK (0x010)
+#define FRIDAY_MASK (0x020)
+#define SATURDAY_MASK (0x040)
+#define EVERY_DAY_MASK (0x080)
+#define EVERY_WEEK_DAY_MASK (0x100)
+#define SUN_TO_SAT_MASK (SUNDAY_MASK | MONDAY_MASK | TUESDAY_MASK | WEDNESDAY_MASK | THURSDAY_MASK | FRIDAY_MASK | SATURDAY_MASK)
+
+typedef struct
+{
+ int days;
+ int hours;
+ int minutes;
+ int seconds;
+} UTtimeInterval;
+
+/*
+ * A general date and time struct
+ */
+typedef struct
+{
+ int hour;
+ int minute;
+ int day;
+ int month;
+ int year;
+} UT_DATE_TIME;
+
+typedef struct cntl_date_struct
+{
+ unsigned long month;
+ unsigned long day;
+ unsigned long year;
+} CNTL_DATE_STRUCT;
+
+typedef struct cntl_hr_min_struct
+{
+ unsigned long hour;
+ unsigned long minute;
+ unsigned long second;
+} CNTL_HR_MIN_STRUCT;
+
+#define SECONDS_PER_MINUTE (60)
+#define MINUTES_PER_HOUR (60)
+#define HOURS_PER_DAY (24)
+#define DAYS_PER_WEEK (7)
+#define DAYS_PER_YEAR (365)
+#define HOURS_PER_WEEK (HOURS_PER_DAY * DAYS_PER_WEEK)
+#define MINUTES_PER_DAY (MINUTES_PER_HOUR * HOURS_PER_DAY)
+#define MINUTES_PER_WEEK (MINUTES_PER_HOUR * HOURS_PER_WEEK)
+#define SECONDS_PER_HOUR (SECONDS_PER_MINUTE*MINUTES_PER_HOUR)
+#define SECONDS_PER_DAY (SECONDS_PER_HOUR*HOURS_PER_DAY)
+#define SECONDS_PER_WEEK (SECONDS_PER_HOUR*HOURS_PER_WEEK)
+
+
+#define CNTL_SUNDAY_MASK (0x01)
+#define CNTL_MONDAY_MASK (0x02)
+#define CNTL_TUESDAY_MASK (0x04)
+#define CNTL_WEDNESDAY_MASK (0x08)
+#define CNTL_THURSDAY_MASK (0x10)
+#define CNTL_FRIDAY_MASK (0x20)
+#define CNTL_SATURDAY_MASK (0x40)
+#define CNTL_SUN_TO_SAT_MASK (CNTL_SUNDAY_MASK | CNTL_MONDAY_MASK | CNTL_TUESDAY_MASK | CNTL_WEDNESDAY_MASK | CNTL_THURSDAY_MASK | CNTL_FRIDAY_MASK | CNTL_SATURDAY_MASK)
+#define CNTL_WEEKDAY_MASK (CNTL_MONDAY_MASK | CNTL_TUESDAY_MASK | CNTL_WEDNESDAY_MASK | CNTL_THURSDAY_MASK | CNTL_FRIDAY_MASK)
+
+typedef enum
+{
+ DAY_SCHEDULE_NOT_SPECIFIED = 0x00,
+ DAY_SCHEDULE_SUNDAY_MASK = 0x01,
+ DAY_SCHEDULE_MONDAY_MASK = 0x02,
+ DAY_SCHEDULE_TUESDAY_MASK = 0x04,
+ DAY_SCHEDULE_WEDNESDAY_MASK = 0x08,
+ DAY_SCHEDULE_THURSDAY_MASK = 0x10,
+ DAY_SCHEDULE_FRIDAY_MASK = 0x20,
+ DAY_SCHEDULE_SATURDAY_MASK = 0x40,
+ DAY_SCHEDULE_WEEKDAY_MASK = ( DAY_SCHEDULE_MONDAY_MASK | DAY_SCHEDULE_TUESDAY_MASK | DAY_SCHEDULE_WEDNESDAY_MASK | DAY_SCHEDULE_THURSDAY_MASK | DAY_SCHEDULE_FRIDAY_MASK ),
+ DAY_SCHEDULE_SAT_TO_SUN_MASK = ( DAY_SCHEDULE_SUNDAY_MASK | DAY_SCHEDULE_WEEKDAY_MASK | DAY_SCHEDULE_SATURDAY_MASK )
+} DAY_SCHEDULE;
+
+typedef enum
+{
+ WEEKLY_CHOICE_EVERY_WEEK = 0,
+ WEEKLY_CHOICE_FIRST_WEEK = 1,
+ WEEKLY_CHOICE_SECOND_WEEK = 2,
+ WEEKLY_CHOICE_THIRD_WEEK = 3,
+ WEEKLY_CHOICE_FOURTH_WEEK = 4,
+ WEEKLY_CHOICE_LAST_WEEK = 5,
+ WEEKLY_CHOICE_EVERYOTHER_WEEK = 6,
+ WEEKLY_CHOICE_NOT_SPECIFIED = 7
+} WEEKLY_CHOICES;
+
+
+typedef enum cntl_days_of_wk
+{
+ SUNDAY = 0,
+ MONDAY = 1,
+ TUESDAY = 2,
+ WEDNESDAY = 3,
+ THURSDAY = 4,
+ FRIDAY = 5,
+ SATURDAY = 6
+} CNTL_DAYS_OF_WK;
+
+/*
+ * CNLT_SCHED_STRUCT contains everything needed to specify a schedule
+ */
+typedef struct cntl_sched_struct
+{
+ CNTL_DATE_STRUCT startDate; // always valid, mm/dd/yyyy when schedule starts all schedules have a startDate
+ CNTL_HR_MIN_STRUCT startTime; // always valid, hour and minute when output is activated, all schedules have startTime
+ CNTL_HR_MIN_STRUCT endTime; // always valid, hour and minute when output is activation stops, all schedules have stopTime
+ WEEKLY_CHOICES weeklySchedule; // default is EVERY
+ unsigned char dailySchedule; // default is the current day of the week
+} CNTL_SCHED_STRUCT;
+
+typedef struct
+{
+ CNTL_SCHED_STRUCT schedule; /* the schedule */
+ time_t calTime; /* time in seconds passed to localtime to populate the requestTime structure */
+ struct tm requestTime; /* the broken down time when the request was made, used to determine the initial starting date */
+ unsigned long outputDuty; /* scaled output duty 3 digits 1 decimal 0 <= outputDuty <= 1000 */
+ bool preBleedorLockout; /* the timer specifies preBleed or lockout */
+} TSC_SCHED_ELEM;
+
+#define TSC_NULL_INSTANCE (-1)
+
+/*
+ * To be deprecated
+ */
+typedef enum
+{
+ TSC_UTIL_ONE_OUTPUT = 1,
+ TSC_UTIL_ALL_OUTPUTS = 2,
+} TSC_UTIL_OUTPUT_CHECK;
+
+/*
+ * Tell the general checking function what to look for
+ */
+typedef enum
+{
+ TSC_UTIL_THEOUTPUT_CHECK,
+ TSC_UTIL_BLOWDOWN_CHECK,
+ TSC_UTIL_OXNONOX_CHECK
+} TSC_UTIL_WHAT_TO_CHECK;
+
+/*
+ * The attribute to look for when filtering the list of timer schedules
+ * it's up to the pruning filter functions to include or exclude based upon the
+ * pruning attribute
+ */
+typedef enum
+{
+ TSC_UTIL_PRUNE_PRODUCTS = 1,
+ TSC_UTIL_PRUNE_BLOWDOWN = 2
+} TSC_UTIL_PRUNE_ATTRIBUTE;
+
+/*
+ * attribute indicates if a timer scheduling is for the first time or a reschedule
+ */
+typedef enum
+{
+ TSC_INITIAL_SCHEDULE,
+ TSC_RESCHEDULE
+} TSC_UTIL_SCHED_STATE;
+
+typedef enum tsc_sched_miss_reason
+{
+ TSC_SCHEDULE_NOT_MISSED,
+ TSC_SCHEDULE_MISSED,
+ TSC_SCHEDULE_INTERRUPTED
+} TSC_SCHED_MISS_REASON;
+
+
+/*
+ * renamed utility functions replacing CNTL_xyz functions
+ */
+
+void TSCutilScheduleWithInWeek( TSC_SCHED_ELEM *pSchedElem );
+void TSCutilPreviousScheduleWithInWeek( TSC_SCHED_ELEM *pSchedElem );
+void TSCutilComputeStartDate( TSC_SCHED_ELEM *pSchedElem );
+void TSCutilScheduleOneWeekPerMonth( TSC_SCHED_ELEM *pSchedElem );
+void TSCutilInitFreeLists();
+bool TSCutilWasPreviousScheduleInterrupted( CNTL_SCHED_STRUCT *pElem, TSC_SCHED_MISS_REASON *pReason, unsigned long create_time_stamp, int *pmiss_count, int *pstart_to_end_diff );
+int TSCgetCreateTime( DM_TAG relay, unsigned long starting_hour, unsigned long starting_minute, unsigned long *create_time );
+int TSCnewComputeWaitTimer( CNTL_SCHED_STRUCT *pSchedule, TSC_UTIL_SCHED_STATE scheduleingState, TSC_SCHED_ELEM *pNowTimeDate, unsigned long *pDiffInSeconds );
+bool TSCIsTimerSchedLT12Hr( unsigned long *pGo_Off, DMSTRING32 id_info );
+
+int TSCutilLoadSchedules();
+int TSCutilAddElemToScheduleList( TSC_SCHED_ELEM *pElem );
+int TSCutilPutFreeSchedElem( TSC_SCHED_ELEM *pElem );
+
+
+int TSCutilDeleteSchedElem( TSC_SCHED_ELEM *pElem );
+
+TSC_SCHED_ELEM *TSCutilGetFreeSchedElem( );
+TSC_SCHED_ELEM *TSCutilGetFirstSchedule();
+TSC_SCHED_ELEM *TSCutilGetNextSchedule( TSC_SCHED_ELEM *pElem );
+
+int TSCutilgetScheduleCount();
+int TSCutilCmpStartTimes( TSC_SCHED_ELEM *pNewElem, TSC_SCHED_ELEM *pListElem );
+
+bool TSCutilDoesScheduleConflict( TSC_SCHED_ELEM *pNewElem, TSC_UTIL_OUTPUT_CHECK which_check );
+
+
+
+int Util_addTupleToTimeControl( int instance, TSC_SCHED_ELEM *pElem );
+int Util_addTupleToRLcontrol( int instance, TSC_SCHED_ELEM *pElem, DM_TAG keyTag );
+int Util_dateTimeDiff( CNTL_SCHED_STRUCT *pDateTime1, CNTL_SCHED_STRUCT *pDateTime2, unsigned long *pDiffInSeconds );
+
+
+void Util_displayStartDateTime( CNTL_SCHED_STRUCT *pTimeStruct );
+void Util_displayWeeklySchedule( CNTL_SCHED_STRUCT *pTimeStruct );
+void Util_displayDailySchedule( CNTL_SCHED_STRUCT *pTimeStruct );
+
+int Util_getDayOfWeek( TSC_SCHED_ELEM *pSchedElem, CNTL_DATE_STRUCT *pDate );
+int Util_getMonthWeek( TSC_SCHED_ELEM *pSchedElem, CNTL_DATE_STRUCT *pDate );
+int Util_findAday( int startingDay, unsigned char dailySchedule );
+int Util_getDoWThisMonth( TSC_SCHED_ELEM *pSchedElem, int dom );
+int Util_numDaysInSchedule( unsigned char dailySchedule );
+
+char *Util_getDailyScheduleString( CNTL_SCHED_STRUCT *pTimeStruct );
+char *Util_getWeeklyScheduleString( CNTL_SCHED_STRUCT *pTimeStruct);
+char *Util_getDayString( int dayOfWeek );
+
+int TSCgetNumericSuffix(char* input);
+char * TSCinterruptReasonToString( TSC_SCHED_MISS_REASON reason );
+
+#endif