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:
- 2:02cb20446785
- Parent:
- 1:b2e90cda7a5a
--- a/ICE-Application/src/Utilities/timerUtils.h Tue Jan 24 19:06:45 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,269 +0,0 @@ -#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