Erick / Mbed 2 deprecated ICE-F412

Dependencies:   mbed-rtos mbed

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