typedef unsigned size_t; typedef char wchar_t; typedef struct _div_t { int quot, rem; } div_t, ldiv_t; double atof(const char *_st); int atoi(const char *_st); long atol(const char *_st); double strtod(const char *_st, char **_endptr); long strtol(const char *_st, char **_endptr, int _base); unsigned long strtoul(const char *_st, char **_endptr, int _base); int rand(void); void srand(unsigned _seed); void *calloc(size_t _num, size_t _size); void free(void *_ptr); void *malloc(size_t _size); void *bmalloc(size_t _size); void minit(void); void *realloc(void *_ptr, size_t _size); void *calloc8(size_t _num, size_t _size); void free8(void *_ptr); void *malloc8(size_t _size); void *bmalloc8(size_t _size); void minit8(void); void *realloc8(void *_ptr, size_t _size); void *calloc16(size_t _num, size_t _size); void free16(void *_ptr); void *malloc16(size_t _size); void *bmalloc16(size_t _size); void minit16(void); void *realloc16(void *_ptr, size_t _size); void abort(void); void exit(int _status); int atexit(void (*_func)(void)); void *bsearch(const void *_key, const void *_base, size_t _nmemb, size_t _size, int (*_compar)(const void *, const void *)); void qsort(void *_base, size_t _nmemb, size_t _size, int (*_compar)(const void *, const void *)); int abs(int _i); long labs(long _i); div_t div(int _numer, int _denom); div_t ldiv(long _numer, long _denom); char *getenv(const char *_string); int ti_sprintf(char *s, const char *format, ...); extern unsigned char _ctypes_[]; static inline int isalnum(int _c); static inline int isalpha(int _c); static inline int iscntrl(int _c); static inline int isdigit(int _c); static inline int isgraph(int _c); static inline int islower(int _c); static inline int isprint(int _c); static inline int ispunct(int _c); static inline int isspace(int _c); static inline int isupper(int _c); static inline int isxdigit(int _c); static inline int isascii(int _c); static inline int toupper(int _c); static inline int tolower(int _c); static inline int toascii(int _c); static inline int isalnum(int c) { return((_ctypes_[(c)+1] & (0x01 | 0x02 | 0x04))); } static inline int isalpha(int c) { return((_ctypes_[(c)+1] & (0x01 | 0x02))); } static inline int isascii(int c) { return((((c) & ~0x7F) == 0)); } static inline int iscntrl(int c) { return((_ctypes_[(c)+1] & 0x20)); } static inline int isdigit(int c) { return((_ctypes_[(c)+1] & 0x04)); } static inline int isgraph(int c) { return((_ctypes_[(c)+1] & (0x01 | 0x02 | 0x04 | 0x10))); } static inline int islower(int c) { return((_ctypes_[(c)+1] & 0x02)); } static inline int isprint(int c) { return((_ctypes_[(c)+1] & (0x80 | 0x01 | 0x02 | 0x04 | 0x10))); } static inline int ispunct(int c) { return((_ctypes_[(c)+1] & 0x10)); } static inline int isspace(int c) { return((_ctypes_[(c)+1] & 0x08)); } static inline int isupper(int c) { return((_ctypes_[(c)+1] & 0x01)); } static inline int isxdigit(int c) { return((_ctypes_[(c)+1] & 0x40)); } static inline int toascii(int c) { return(((c) & 0x7F)); } static inline int tolower(int ch) { int ch2 = ch + ('a' - 'A'); return ( (unsigned int)(ch - 'A') <= (unsigned int)('Z' - 'A')) ? ch2 : ch; } static inline int toupper(int ch) { int ch2 = ch + ('A' - 'a'); return ( (unsigned int)(ch - 'a') <= (unsigned int)('z' - 'a')) ? ch2 : ch; } static inline void *memchr(const void *_mem, int _ch, size_t _length); static inline int memcmp(const void *_mem1, const void *_mem2, size_t _length); static inline void *memcpy(void *_s1, const void *_s2, size_t _n); void *memmove(void *_s1, const void *_s2, size_t _n); static inline void *memset(void *_s, int _c, size_t _n); static inline char *strcat(char *_string1, const char *_string2); static inline char *strchr(const char *_string, int _ch); static inline int strcmp(const char *_string1, const char *_string2); static inline char *strcpy(char *_to, const char *_from); int strcoll(const char *_string1, const char *_string2); size_t strcspn(const char *_string, const char *_chs); char *strerror(int _errno); static inline size_t strlen(const char *_string); char *strncat(char *_to, const char *_from, size_t _n); int strncmp(const char *_string1, const char *_string2, size_t _n); char *strncpy(char *_to, const char *_from, size_t _n); char *strpbrk(const char *_string, const char *_chs); static inline char *strrchr(const char *_string, int _ch); size_t strspn(const char *_string, const char *_chs); char *strstr(const char *_string1, const char *_string2); char *strtok(char *_str1, const char *_str2); size_t strxfrm(char *_to, const char *_from, size_t _n); static inline void *memchr(const void *cs, int c, size_t n) { size_t length; if ( (length=n) > 0 ) { const unsigned char *mem = cs; unsigned char ch = c; do if ( *mem++ == ch ) return (void *)(mem - 1); while (--length != 0); } return 0; } static inline int memcmp(const void *mem1, const void *mem2, size_t length) { const char *r1 = (char *)mem1 - 1; const char *r2 = (char *)mem2 - 1; for(;;) if ( --length == -1 ) break; else if ( *++r1 != *++r2 ) return *r1 - *r2; return 0; } static inline void *memcpy(void *s, const void *ct, size_t n) { char *from, *to; size_t length; if ( (length=n) > 0 ) { from = (char *)ct; to = (char *)s; do *to++ = *from++; while (--length != 0); } return s; } static inline void *memset(void *s, int c, size_t n) { size_t length; if ( (length=n) > 0 ) { char *mem = s; unsigned char ch = c; do *mem++ = ch; while (--length != 0); } return s; } static inline char *strcat(char *dest, const char *src) { char *r1 = dest - 1; while (*++r1); while (*r1++ = *src++); return dest; } static inline char *strchr(const char *string, int ch) { char *str = (char *)string - 1; int tch; for (;;) if ( (tch = *++str) == ch ) return str; else if ( tch == 0 ) return 0; } static inline int strcmp(const char *string1, const char *string2) { char *r1 = (char *)string1 - 1; char *r2 = (char *)string2 - 1; char cp; while ( (*++r2 == (cp = *++r1)) && cp ); return *r1 - *r2; } static inline char *strcpy(char *dest, const char *src) { char *result = dest; while (*dest++ = *src++); return result; } static inline size_t strlen(const char *string) { const char *r1 = string - 1; while (*++r1); return r1 - string; } static inline char *strrchr(const char *string, int c) { char tch, ch; char *result; --string; ch = c; result = (char *)0; for (;;) { if ((tch = *++string) == ch) result = (char*)string; if (tch == 0) break; } return result; } typedef struct { int fd; unsigned char* buf; unsigned char* pos; unsigned char* bufend; unsigned char* buff_stop; unsigned int flags; int index; } FILE; typedef long fpos_t; typedef struct { char name[9]; unsigned short flags; int (*OPEN) (); int (*CLOSE) (); int (*READ) (); int (*WRITE) (); long (*LSEEK) (); int (*UNLINK) (); int (*RENAME) (); } _DEVICE; extern FILE _ftable[20]; extern char _tmpnams[20][(sizeof("") + 15)]; int remove(const char *_file); extern int rename(const char *_old, const char *_new); extern FILE *tmpfile(void); extern char *tmpnam(char *_s); extern int fclose(FILE *_fp); extern FILE *fopen(const char *_fname, const char *_mode); extern FILE *freopen(const char *_fname, const char *_mode, register FILE *_fp); extern void setbuf(register FILE *_fp, char *_buf); extern int setvbuf(register FILE *_fp, register char *_buf, register int _type, register size_t _size); extern int fflush(register FILE *_fp); extern int fprintf(FILE *_fp, const char *_format, ...); extern int fscanf(FILE *_fp, const char *_fmt, ...); extern int printf(const char *_format, ...); extern int scanf(const char *_fmt, ...); extern int sprintf(char *_string, const char *_format, ...); extern int sscanf(const char *_str, const char *_fmt, ...); extern int vfprintf(FILE *_fp, const char *_format, char *_ap); extern int vprintf(const char *_format, char *_ap); extern int vsprintf(char *_string, const char *_format, char *_ap); extern int fgetc(register FILE *_fp); extern char *fgets(char *_ptr, register int _size, register FILE *_fp); extern int fputc(int _c, register FILE *_fp); extern int fputs(const char *_ptr, register FILE *_fp); extern int getc(FILE *_p); int getchar(void); extern char *gets(char *_ptr); extern int putc(int _x, FILE *_fp); int putchar(int _x); extern int puts(const char *_ptr); extern int ungetc(int _c, register FILE *_fp); extern size_t fread(void *_ptr, size_t _size, size_t _count, FILE *_fp); extern size_t fwrite(const void *_ptr, size_t _size, size_t _count, register FILE *_fp); extern int fgetpos(FILE *_fp, fpos_t *_pos); extern int fseek(register FILE *_fp, long _offset, int _ptrname); extern int fsetpos(FILE *_fp, const fpos_t *_pos); extern long ftell(FILE *_fp); extern void rewind(register FILE *_fp); void clearerr(FILE *_fp); extern int feof(FILE *_fp); int ferror(FILE *_fp); extern void perror(const char *_s); char *getenv(const char *_string); extern int add_device(char *name, unsigned flags, int (*dopen)(), int (*dclose)(), int (*dread)(), int (*dwrite)(), long (*dlseek)(), int (*dunlink)(), int (*drename)()); typedef int ptrdiff_t; typedef unsigned long UNSIGNED; typedef long SIGNED; typedef unsigned char DATA_ELEMENT; typedef DATA_ELEMENT OPTION; typedef int STATUS; typedef unsigned char UNSIGNED_CHAR; typedef char CHAR; typedef int INT; typedef unsigned long * UNSIGNED_PTR; typedef unsigned char * BYTE_PTR; typedef struct NU_VECTOR_STRUCT { UNSIGNED_PTR pointer; } NU_VECTOR; typedef struct NU_TASK_STRUCT { UNSIGNED words[53]; } NU_TASK; typedef struct NU_HISR_STRUCT { UNSIGNED words[31]; } NU_HISR; typedef struct NU_MAILBOX_STRUCT { UNSIGNED words[20]; } NU_MAILBOX; typedef struct NU_QUEUE_STRUCT { UNSIGNED words[25]; } NU_QUEUE; typedef struct NU_PIPE_STRUCT { UNSIGNED words[25]; } NU_PIPE; typedef struct NU_SEMAPHORE_STRUCT { UNSIGNED words[16]; } NU_SEMAPHORE; typedef struct NU_EVENT_GROUP_STRUCT { UNSIGNED words[15]; } NU_EVENT_GROUP; typedef struct NU_PARTITION_POOL_STRUCT { UNSIGNED words[21]; } NU_PARTITION_POOL; typedef struct NU_MEMORY_POOL_STRUCT { UNSIGNED words[23]; } NU_MEMORY_POOL; typedef struct NU_TIMER_STRUCT { UNSIGNED words[23]; } NU_TIMER; typedef struct NU_PROTECT_STRUCT { UNSIGNED words[2]; } NU_PROTECT; struct NU_INITIALIZE_STRUCT { void *nu_io_address; UNSIGNED nu_logical_units; void *nu_memory; INT nu_vector; }; struct NU_ASSIGN_STRUCT { UNSIGNED nu_logical_unit; INT nu_assign_info; }; struct NU_RELEASE_STRUCT { UNSIGNED nu_logical_unit; INT nu_release_info; }; struct NU_INPUT_STRUCT { UNSIGNED nu_logical_unit; UNSIGNED nu_offset; UNSIGNED nu_request_size; UNSIGNED nu_actual_size; void *nu_buffer_ptr; }; struct NU_OUTPUT_STRUCT { UNSIGNED nu_logical_unit; UNSIGNED nu_offset; UNSIGNED nu_request_size; UNSIGNED nu_actual_size; void *nu_buffer_ptr; }; struct NU_STATUS_STRUCT { UNSIGNED nu_logical_unit; void *nu_extra_status; }; struct NU_TERMINATE_STRUCT { UNSIGNED nu_logical_unit; }; typedef struct NU_DRIVER_REQUEST_STRUCT { INT nu_function; UNSIGNED nu_timeout; STATUS nu_status; UNSIGNED nu_supplemental; void *nu_supplemental_ptr; union NU_REQUEST_INFO_UNION { struct NU_INITIALIZE_STRUCT nu_initialize; struct NU_ASSIGN_STRUCT nu_assign; struct NU_RELEASE_STRUCT nu_release; struct NU_INPUT_STRUCT nu_input; struct NU_OUTPUT_STRUCT nu_output; struct NU_STATUS_STRUCT nu_status; struct NU_TERMINATE_STRUCT nu_terminate; } nu_request_info; } NU_DRIVER_REQUEST; typedef struct NU_DRIVER_STRUCT { UNSIGNED words[3]; CHAR nu_driver_name[8]; void *nu_info_ptr; UNSIGNED nu_driver_id; void (*nu_driver_entry)(struct NU_DRIVER_STRUCT *, NU_DRIVER_REQUEST *); } NU_DRIVER; void Application_Initialize(void *first_available_memory); STATUS TCC_Create_Task(NU_TASK *task, CHAR *name, void (*task_entry)(UNSIGNED, void *), UNSIGNED argc, void *argv, void *stack_address, UNSIGNED stack_size, OPTION priority, UNSIGNED time_slice, OPTION preempt, OPTION auto_start); STATUS TCC_Delete_Task(NU_TASK *task); STATUS TCC_Reset_Task(NU_TASK *task, UNSIGNED argc, void *argv); STATUS TCC_Terminate_Task(NU_TASK *task); STATUS TCC_Resume_Service(NU_TASK *task); STATUS TCC_Suspend_Service(NU_TASK *task); void TCC_Relinquish(void); void TCC_Task_Sleep(UNSIGNED ticks); OPTION TCS_Change_Priority(NU_TASK *task, OPTION new_priority); OPTION TCS_Change_Preemption(OPTION preempt); UNSIGNED TCS_Change_Time_Slice(NU_TASK *task, UNSIGNED time_slice); UNSIGNED TCT_Check_Stack(void); NU_TASK *TCC_Current_Task_Pointer(void); UNSIGNED TCF_Established_Tasks(void); STATUS TCF_Task_Information(NU_TASK *task, CHAR *name, DATA_ELEMENT *status, UNSIGNED *scheduled_count, OPTION *priority, OPTION *preempt, UNSIGNED *time_slice, void **stack_base, UNSIGNED *stack_size, UNSIGNED *minimum_stack); UNSIGNED TCF_Task_Pointers(NU_TASK **pointer_list, UNSIGNED maximum_pointers); STATUS MBC_Create_Mailbox(NU_MAILBOX *mailbox, CHAR *name, OPTION suspend_type); STATUS MBC_Delete_Mailbox(NU_MAILBOX *mailbox); STATUS MBS_Reset_Mailbox(NU_MAILBOX *mailbox); STATUS MBC_Send_To_Mailbox(NU_MAILBOX *mailbox, void *message, UNSIGNED suspend); STATUS MBS_Broadcast_To_Mailbox(NU_MAILBOX *mailbox, void *message, UNSIGNED suspend); STATUS MBC_Receive_From_Mailbox(NU_MAILBOX *mailbox, void *message, UNSIGNED suspend); UNSIGNED MBF_Established_Mailboxes(void); STATUS MBF_Mailbox_Information(NU_MAILBOX *mailbox, CHAR *name, OPTION *suspend_type, OPTION *message_present, UNSIGNED *tasks_waiting, NU_TASK **first_task); UNSIGNED MBF_Mailbox_Pointers(NU_MAILBOX **pointer_list, UNSIGNED maximum_pointers); STATUS QUC_Create_Queue(NU_QUEUE *queue, CHAR *name, void *start_address, UNSIGNED queue_size, OPTION message_type, UNSIGNED message_size, OPTION suspend_type); STATUS QUC_Delete_Queue(NU_QUEUE *queue); STATUS QUS_Reset_Queue(NU_QUEUE *queue); STATUS QUS_Send_To_Front_Of_Queue(NU_QUEUE *queue, void *message, UNSIGNED size, UNSIGNED suspend); STATUS QUC_Send_To_Queue(NU_QUEUE *queue, void *message, UNSIGNED size, UNSIGNED suspend); STATUS QUS_Broadcast_To_Queue(NU_QUEUE *queue, void *message, UNSIGNED size, UNSIGNED suspend); STATUS QUC_Receive_From_Queue(NU_QUEUE *queue, void *message, UNSIGNED size, UNSIGNED *actual_size, UNSIGNED suspend); UNSIGNED QUF_Established_Queues(void); STATUS QUF_Queue_Information(NU_QUEUE *queue, CHAR *name, void **start_address, UNSIGNED *queue_size, UNSIGNED *available, UNSIGNED *messages, OPTION *message_type, UNSIGNED *message_size, OPTION *suspend_type, UNSIGNED *tasks_waiting, NU_TASK **first_task); UNSIGNED QUF_Queue_Pointers(NU_QUEUE **pointer_list, UNSIGNED maximum_pointers); STATUS PIC_Create_Pipe(NU_PIPE *pipe, CHAR *name, void *start_address, UNSIGNED pipe_size, OPTION message_type, UNSIGNED message_size, OPTION suspend_type); STATUS PIC_Delete_Pipe(NU_PIPE *pipe); STATUS PIS_Reset_Pipe(NU_PIPE *pipe); STATUS PIS_Send_To_Front_Of_Pipe(NU_PIPE *pipe, void *message, UNSIGNED size, UNSIGNED suspend); STATUS PIC_Send_To_Pipe(NU_PIPE *pipe, void *message, UNSIGNED size, UNSIGNED suspend); STATUS PIS_Broadcast_To_Pipe(NU_PIPE *pipe, void *message, UNSIGNED size, UNSIGNED suspend); STATUS PIC_Receive_From_Pipe(NU_PIPE *pipe, void *message, UNSIGNED size, UNSIGNED *actual_size, UNSIGNED suspend); UNSIGNED PIF_Established_Pipes(void); STATUS PIF_Pipe_Information(NU_PIPE *pipe, CHAR *name, void **start_address, UNSIGNED *pipe_size, UNSIGNED *available, UNSIGNED *messages, OPTION *message_type, UNSIGNED *message_size, OPTION *suspend_type, UNSIGNED *tasks_waiting, NU_TASK **first_task); UNSIGNED PIF_Pipe_Pointers(NU_PIPE **pointer_list, UNSIGNED maximum_pointers); STATUS SMC_Create_Semaphore(NU_SEMAPHORE *semaphore, CHAR *name, UNSIGNED initial_count, OPTION suspend_type); STATUS SMC_Delete_Semaphore(NU_SEMAPHORE *semaphore); STATUS SMS_Reset_Semaphore(NU_SEMAPHORE *semaphore, UNSIGNED initial_count); STATUS SMC_Obtain_Semaphore(NU_SEMAPHORE *semaphore, UNSIGNED suspend); STATUS SMC_Release_Semaphore(NU_SEMAPHORE *semaphore); UNSIGNED SMF_Established_Semaphores(void); STATUS SMF_Semaphore_Information(NU_SEMAPHORE *semaphore, CHAR *name, UNSIGNED *current_count, OPTION *suspend_type, UNSIGNED *tasks_waiting, NU_TASK **first_task); UNSIGNED SMF_Semaphore_Pointers(NU_SEMAPHORE **pointer_list, UNSIGNED maximum_pointers); STATUS EVC_Create_Event_Group(NU_EVENT_GROUP *group, CHAR *name); STATUS EVC_Delete_Event_Group(NU_EVENT_GROUP *group); STATUS EVC_Set_Events(NU_EVENT_GROUP *group, UNSIGNED events, OPTION operation); STATUS EVC_Retrieve_Events(NU_EVENT_GROUP *group, UNSIGNED requested_flags, OPTION operation, UNSIGNED *retrieved_flags, UNSIGNED suspend); UNSIGNED EVF_Established_Event_Groups(void); STATUS EVF_Event_Group_Information(NU_EVENT_GROUP *group, CHAR *name, UNSIGNED *event_flags, UNSIGNED *tasks_waiting, NU_TASK **first_task); UNSIGNED EVF_Event_Group_Pointers(NU_EVENT_GROUP **pointer_list, UNSIGNED maximum_pointers); UNSIGNED TCS_Control_Signals(UNSIGNED signal_enable_mask); UNSIGNED TCS_Receive_Signals(void); STATUS TCS_Register_Signal_Handler(void (*signal_handler)(UNSIGNED)); STATUS TCS_Send_Signals(NU_TASK *task, UNSIGNED signals); STATUS PMC_Create_Partition_Pool(NU_PARTITION_POOL *pool, CHAR *name, void *start_address, UNSIGNED pool_size, UNSIGNED partition_size, OPTION suspend_type); STATUS PMC_Delete_Partition_Pool(NU_PARTITION_POOL *pool); STATUS PMC_Allocate_Partition(NU_PARTITION_POOL *pool, void **return_pointer, UNSIGNED suspend); STATUS PMC_Deallocate_Partition(void *partition); UNSIGNED PMF_Established_Partition_Pools(void); STATUS PMF_Partition_Pool_Information(NU_PARTITION_POOL *pool, CHAR *name, void **start_address, UNSIGNED *pool_size, UNSIGNED *partition_size, UNSIGNED *available, UNSIGNED *allocated, OPTION *suspend_type, UNSIGNED *tasks_waiting, NU_TASK **first_task); UNSIGNED PMF_Partition_Pool_Pointers(NU_PARTITION_POOL **pointer_list, UNSIGNED maximum_pointers); STATUS DMC_Create_Memory_Pool(NU_MEMORY_POOL *pool, CHAR *name, void *start_address, UNSIGNED pool_size, UNSIGNED min_allocation, OPTION suspend_type); STATUS DMC_Delete_Memory_Pool(NU_MEMORY_POOL *pool); STATUS DMC_Allocate_Memory(NU_MEMORY_POOL *pool, void **return_pointer, UNSIGNED size, UNSIGNED suspend); STATUS DMC_Deallocate_Memory(void *memory); UNSIGNED DMF_Established_Memory_Pools(void); STATUS DMF_Memory_Pool_Information(NU_MEMORY_POOL *pool, CHAR *name, void **start_address, UNSIGNED *pool_size, UNSIGNED *min_allocation, UNSIGNED *available, OPTION *suspend_type, UNSIGNED *tasks_waiting, NU_TASK **first_task); UNSIGNED DMF_Memory_Pool_Pointers(NU_MEMORY_POOL **pointer_list, UNSIGNED maximum_pointers); INT TCT_Control_Interrupts(INT new_level); INT TCT_Local_Control_Interrupts(INT new_level); void TCT_Restore_Interrupts(void); void *INT_Setup_Vector(INT vector, void *new_vector); STATUS TCC_Register_LISR(INT vector, void (*new_lisr)(INT), void (**old_lisr)(INT)); STATUS TCT_Activate_HISR(NU_HISR *hisr); STATUS TCC_Create_HISR(NU_HISR *hisr, CHAR *name, void (*hisr_entry)(void), OPTION priority, void *stack_address, UNSIGNED stack_size); STATUS TCC_Delete_HISR(NU_HISR *hisr); NU_HISR *TCC_Current_HISR_Pointer(void); UNSIGNED TCF_Established_HISRs(void); STATUS TCF_HISR_Information(NU_HISR *hisr, CHAR *name, UNSIGNED *scheduled_count, DATA_ELEMENT *priority, void **stack_base, UNSIGNED *stack_size, UNSIGNED *minimum_stack); UNSIGNED TCF_HISR_Pointers(NU_HISR **pointer_list, UNSIGNED maximum_pointers); void TCT_Protect(NU_PROTECT *protect_struct); void TCT_Unprotect(void); STATUS TMS_Create_Timer(NU_TIMER *timer, CHAR *name, void (*expiration_routine)(UNSIGNED), UNSIGNED id, UNSIGNED initial_time, UNSIGNED reschedule_time, OPTION enable); STATUS TMS_Delete_Timer(NU_TIMER *timer); STATUS TMS_Reset_Timer(NU_TIMER *timer, void (*expiration_routine)(UNSIGNED), UNSIGNED initial_time, UNSIGNED reschedule_timer, OPTION enable); STATUS TMS_Control_Timer(NU_TIMER *timer, OPTION enable); UNSIGNED TMF_Established_Timers(void); STATUS TMF_Timer_Information(NU_TIMER *timer, CHAR *name, OPTION *enable, UNSIGNED *expirations, UNSIGNED *id, UNSIGNED *initial_time, UNSIGNED *reschedule_time); UNSIGNED TMF_Timer_Pointers(NU_TIMER **pointer_list, UNSIGNED maximum_pointers); void TMT_Set_Clock(UNSIGNED new_value); UNSIGNED TMT_Retrieve_Clock(void); CHAR *RLC_Release_Information(void); CHAR *LIC_License_Information(void); void HIC_Disable_History_Saving(void); void HIC_Enable_History_Saving(void); void HIC_Make_History_Entry_Service(UNSIGNED param1, UNSIGNED param2, UNSIGNED param3); STATUS HIC_Retrieve_History_Entry(DATA_ELEMENT *id, UNSIGNED *param1, UNSIGNED *param2, UNSIGNED *param3, UNSIGNED *time, NU_TASK **task, NU_HISR **hisr); STATUS IOC_Create_Driver(NU_DRIVER *driver, CHAR *name, void (*driver_entry)(NU_DRIVER *, NU_DRIVER_REQUEST *)); STATUS IOC_Delete_Driver(NU_DRIVER *driver); STATUS IOC_Request_Driver(NU_DRIVER *driver, NU_DRIVER_REQUEST *request); STATUS IOC_Resume_Driver(NU_TASK *task); STATUS IOC_Suspend_Driver(void (*terminate_routine)(void *), void *information, UNSIGNED timeout); UNSIGNED IOF_Established_Drivers(void); UNSIGNED IOF_Driver_Pointers(NU_DRIVER **pointer_list, UNSIGNED maximum_pointers); typedef unsigned char UINT8; typedef signed char INT8; typedef unsigned short UINT16; typedef signed short INT16; typedef unsigned long UINT32; typedef signed long INT32; typedef float REAL32; typedef enum BooleanTag { TRUE = (1 == 1), FALSE = (0 == 1) } BOOLEAN; typedef INT32 (*FUNCPTR)(); typedef void (*VOIDFUNCPTR)(); typedef enum { Hz50, Hz60 } T_CALIB_FREQ; typedef enum { Amper1, Amper5 } T_AMPER; typedef enum { VT, CT } T_ELEC_UNIT; typedef enum { UNUSED, ORDINARY } T_USE_TYPE; typedef UINT32 MEM_ADR; typedef UINT32 E2P_ADR; typedef UINT32 FLA_REL_ADR; typedef volatile UINT16 FLA_ABS_ADR; typedef UINT16 FLA_DATA; typedef UINT32 RAM_ADR; typedef enum { WINTER = 0, SUMMER = 1, UNKNOWN_SEASON = 2 } T_SEASON; typedef enum { MONDAY = 1, TUESDAY = 2, WEDNESDAY = 3, THURSDAY = 4, FRIDAY = 5, SATURDAY = 6, SUNDAY = 7, UNKNOWN_WEEKDAY = 8 } T_WEEKDAY; typedef struct { UINT32 ms; UINT32 sec; UINT32 minut; UINT32 hour; UINT32 day; UINT32 month; UINT32 year; T_WEEKDAY weekday; T_SEASON season; } T_GREG_DATE; typedef struct { UINT8 ms_low; UINT8 ms_high; UINT8 unvalidity_and_minut; UINT8 season_and_hour; UINT8 days; UINT8 month; UINT8 year; } T_IEC87054_DATE; typedef struct { UINT32 sec; UINT32 ms; T_SEASON season; } T_INTERN_ABS_DATE; typedef struct { UINT32 sec; UINT32 ms; } T_INTERN_REL_DATE; typedef UINT32 T_INTERN_CONT_COUNT; typedef enum { IRIGB_BOARD_OK, IRIGB_SIGNAL_OK, IRIGB_NO_VALID_SIGNAL, IRIGB_BOARD_HS_OR_OTHER_PB, IRIGB_DISABLE, IRIGB_ENABLE } T_IRIGB_PB_KIND; typedef struct { union { T_INTERN_ABS_DATE New_date; T_IRIGB_PB_KIND Irigb_pb_kind; BOOLEAN Int_HW_dater_valid; } details; } T_DATETIMECOUNTER_TO_SUPER; extern STATUS sdt_IniDrv ( UINT32 ThreshSynchroMs, UINT32 ThreshCatchupMs, UINT32 PUpdateSec, OPTION PriTaskIrigbSynchro, BOOLEAN *InthwdaterState, NU_QUEUE *MsgSupervisorQueue, OPTION SoftTimersPrioHISR, UNSIGNED MaxStackSizeCallbackFcts, OPTION PriTaskMsgForSuperv, NU_MEMORY_POOL *Sys_Mem_Pool, BOOLEAN AllTimeEvent ); extern STATUS sdt_GetAbsoluteDate ( T_INTERN_ABS_DATE * OutResult, BOOLEAN * ValidDate); extern STATUS sdt_GetContinuousCount ( T_INTERN_CONT_COUNT * OutResult); extern STATUS sdt_GetMicrosecCount ( UINT32 * MicrosecCount); extern STATUS sdt_SynchroAbsDate ( T_IEC87054_DATE * InNewDate); extern STATUS sdt_SyncToNearestMinute (void); extern STATUS sdt_SynchroAbsYear ( UINT8 InNewYear); extern STATUS sdt_IntToGreg( T_INTERN_ABS_DATE * InDate, T_GREG_DATE * OutDate); extern STATUS sdt_GregToInt( T_GREG_DATE * InDate, T_INTERN_ABS_DATE * OutDate); extern STATUS sdt_IntToIec( T_INTERN_ABS_DATE * InDate, T_IEC87054_DATE * OutDate ); extern STATUS sdt_IecToInt( T_IEC87054_DATE * InDate, T_INTERN_ABS_DATE * OutDate); extern STATUS sdt_DisableIrigb(void); extern STATUS sdt_ReenableIrigb(void); extern void sdt_Change_Irigb_Type(BOOLEAN State); extern STATUS sdt_ReadIrigbSoftVer ( char * OutVersion); extern STATUS sdt_StartTimer (UINT32 InDuration, void (* Routine)(void *), void * ArgumentForRoutine, UINT32 * OutTimerLabel); extern STATUS sdt_StopTimer ( UINT32 InTimerLabel); extern STATUS sdt_AbsPlusRel(T_INTERN_ABS_DATE * Date, T_INTERN_REL_DATE * Diff, T_INTERN_ABS_DATE * Res); extern STATUS sdt_AbsMinusRel(T_INTERN_ABS_DATE * Date, T_INTERN_REL_DATE * Diff, T_INTERN_ABS_DATE * Res ); extern BOOLEAN sdt_AbsGreaterThanAbs (T_INTERN_ABS_DATE * Date1, T_INTERN_ABS_DATE * Date2 ); extern STATUS sdt_AbsMinusAbs (T_INTERN_ABS_DATE * Date1, T_INTERN_ABS_DATE * Date2, T_INTERN_REL_DATE * Res); extern STATUS sdt_RelMinusRel ( T_INTERN_REL_DATE * Date1, T_INTERN_REL_DATE * Date2, T_INTERN_REL_DATE * Res ); extern BOOLEAN sdt_WaitForTransferClear (volatile UINT32 NumberOfInstructions); extern void sdt_WAIT(void); extern void InformSupervisorTaskFct(); extern void sdt_IT1msTimerFct (void); extern void sdt_ForSoftwareTimers(void); void IrigbSynchroTaskEntryFunction (); BOOLEAN StartIntHWDater( BOOLEAN *DateWasReadable ); extern BOOLEAN UpdateIntHWDater ( T_INTERN_ABS_DATE * InNewDate ); extern void sdt_NonPreemptionNonInterruptable(void); extern void sdt_PreemptionInterruptable(void); extern BOOLEAN CommandToIrigbDevice (UINT8 Cmd); extern BOOLEAN CommandResetToIrigbDevice(void); extern STATUS sdt_SynchroAbsInternalDate(T_INTERN_ABS_DATE *pInNewDate, T_INTERN_ABS_DATE *pAbsolDateWhenWeBegin); extern STATUS sdt_Force_SynchroAbsInternalDate(T_INTERN_ABS_DATE *pInNewDate, T_INTERN_ABS_DATE *pAbsolDateWhenWeBegin); typedef enum SCSstatusTag{ SCS_OK, SCS_DATA_INVALID, SCS_WRITE_ERROR, SCS_READ_ERROR, SCS_BUFFER_EMPTY, SCS_MEMORY_ERROR, SCS_SYSTEM_ERROR, SCS_INVALID_PARAMETER, SCS_DRIVER_NOT_INITIALISED, SCS_DRIVER_ALREADY_INITIALISED, SCS_FIBRE_OPTIC_NOT_FITTED, SCS_TRANSMISSION_ERROR, SCS_TRANSMISSION_IN_PROGRESS, SCS_READ_OVERRUN_ERROR, SCS_ADDRESS_ERROR, SCS_HISR_ERROR, SCS_LISR_ERROR, SCS_WRITE_BUFFER_OVERFLOW } SCS_STATUS; typedef enum PortSelectionTag { FRONT_PORT, REAR_PORT }T_PORT_SELECTION; typedef enum BaudRateTag { BAUD_1200, BAUD_2400, BAUD_4800, BAUD_9600, BAUD_19200, BAUD_38400 }T_BAUD_RATE; typedef enum PhysicalTag { EIA232, COPPER, FIBRE_OPTIC }T_PHYSICAL; typedef enum ParityOptionTag { PARITY_NONE, PARITY_EVEN, PARITY_ODD }T_PARITY_OPTION; typedef enum StopOptionTag { STOP_ONE, STOP_TWO }T_STOP; typedef enum FrameFormatTag { GENERAL, IEC870, DNP3, KBUS, MODBUS }T_FRAME_FORMAT; typedef struct { UINT16 NumberBytes; UINT8 *pData; }T_HIGH_LEVEL_BUFF; typedef struct { NU_SEMAPHORE *pReceiveSemaphore; UINT16 NumberBytes; volatile UINT8 pReceive[(UINT16) 511]; }T_LOW_LEVEL_RX_BUFF; typedef struct { BOOLEAN Created; volatile INT32 *pcontrolreg; volatile INT32 *pdatareg; volatile INT32 *paddressreg; T_BAUD_RATE Baud; T_PHYSICAL Physical; T_STOP StopBitOption; T_FRAME_FORMAT FrameFormat; T_PARITY_OPTION ParityOption; UINT16 UnitAddress; BOOLEAN PortEnabled; }SCC_CHANNEL_DATA; typedef struct { T_HIGH_LEVEL_BUFF DataIn; T_HIGH_LEVEL_BUFF DataOut; T_LOW_LEVEL_RX_BUFF Buffer; SCC_CHANNEL_DATA ConfigData; }SCC_CHANNEL_RECORD; extern SCC_CHANNEL_RECORD pscs_ChRec[(UINT8) 2]; SCS_STATUS scs_CommonInit(T_PORT_SELECTION Port, T_FRAME_FORMAT FrameFormat, T_BAUD_RATE BaudRate, T_PARITY_OPTION ParityOption, T_STOP StopBitOption, T_PHYSICAL Physical, UINT16 Address, BOOLEAN PortEnabled, NU_MEMORY_POOL *pSysMemPool); SCS_STATUS scs_ChangeSettings(T_PORT_SELECTION Port, T_BAUD_RATE BaudRate, T_PHYSICAL Physical, T_PARITY_OPTION ParityOption, T_STOP StopBitOption, T_FRAME_FORMAT FrameFormat, UINT16 UnitAddress, BOOLEAN PortEnabled); SCS_STATUS scs_WriteSettings(T_PORT_SELECTION Port, INT8 AddressIndex, INT16 Setting); SCS_STATUS scs_Read(T_PORT_SELECTION Port, SCC_CHANNEL_RECORD *pData); SCS_STATUS scs_Write(T_PORT_SELECTION Port, SCC_CHANNEL_RECORD *pData); SCS_STATUS scs_StartTransmission(T_PORT_SELECTION Port); void scs_EntryPoint(void); void scs_LISR(INT vect); void scs_HISRFunction (void); void scs_GetTimeOfLastRP1Reception (T_INTERN_ABS_DATE *pLastRP1TimeStamp); BOOLEAN scs_TransmissionInProgress(SCC_CHANNEL_RECORD *pChannel); T_INTERN_CONT_COUNT scs_GetContCountOfLastRP1Msg (void); void SerialInit(void); void SerialPrintf(const char* fmt, void* p1, void* p2, void* p3, void* p4); void SerialPrint(const char *pString); void SerialSendCharacter(char character); void SerialTransmit(void); typedef UINT32 T_DIGITAL_OUTPUT_RELAY_BITS; typedef BOOLEAN T_Valid_old_relayboard[(4)]; typedef BOOLEAN T_Valid_new_relayboard[(4)]; typedef BOOLEAN T_Valid_DIOB[(1)]; typedef BOOLEAN T_Valid_HB_relayboard[(4)]; typedef struct { T_Valid_old_relayboard Valid_old_relayboard; T_Valid_new_relayboard Valid_new_relayboard; T_Valid_DIOB Valid_DIOB; T_Valid_HB_relayboard Valid_HB_relayboard; } T_hardware_rel2_config; typedef struct RelayCardInfoTag { volatile INT32 *pAddr; INT32 ExpectedStates; } T_RELAY_CARD_INFO; typedef UINT8 T_FIRST_8_LEDS; typedef enum { UL0 = (0x001), UL1 = (0x002), UL2 = (0x004), UL3 = (0x008), UL4 = (0x010), UL5 = (0x020), UL6 = (0x040), UL7 = (0x080), TRIP = (0x100), ALARM = (0x200), OUT_OF_SERVICE = (0x400), HEALTHY = (0x800), T_LED_NAME_MAX_ENUM } T_LED_NAME; typedef enum { LED_OFF, LED_ON } T_LED_STATE; extern STATUS ser2_IniDrv2( UINT32 Num7ContactCards, UINT32 Num8ContactCards, UINT32 NumDIOBCards, UINT32 NumHBCards, T_hardware_rel2_config *pHWConfig, BOOLEAN SuperExists, NU_QUEUE *pSuperQueue); extern STATUS ser2_DigitalOutputWrite2( T_DIGITAL_OUTPUT_RELAY_BITS Contact7Cards, T_DIGITAL_OUTPUT_RELAY_BITS Contact8Cards, T_DIGITAL_OUTPUT_RELAY_BITS DIOBCard, T_DIGITAL_OUTPUT_RELAY_BITS HBCards); STATUS ser2_CheckRelayBoards(void); BOOLEAN Detect_DIOB( void); extern STATUS ser_8ProgrammableLeds( T_FIRST_8_LEDS States); extern STATUS ser_Led( T_LED_NAME Name, T_LED_STATE State); enum SYNC_SERVER { SYNC_SERVER_IRIGB = 0, SYNC_SERVER_NONE, SYNC_SERVER_PTP, SYNC_SERVER_SNTP, SYNC_SERVER_MAX_ENUM }; enum SYNC_SERVER_PRIO { SYNC_SERVER_PRI = 0, SYNC_SERVER_SND, SYNC_SERVER_PRIO_MAX_ENUM }; extern enum SYNC_SERVER g_sync_server_indicator; extern void sync_arbiter_config(enum SYNC_SERVER_PRIO priority, enum SYNC_SERVER source); extern BOOLEAN sync_arbiter_is_source_enabled(enum SYNC_SERVER source); extern void sync_arbiter_update(enum SYNC_SERVER source, BOOLEAN status); extern enum SYNC_SERVER sync_arbiter_query(enum SYNC_SERVER caller); extern void sync_arbiter_register_callback( void (*func) (BOOLEAN) ); typedef enum textLanguageTag { TEXT_LANGUAGEONE = 0, TEXT_LANGUAGETWO = 1, TEXT_LANGUAGETHREE = 2, TEXT_LANGUAGEFOUR = 3, TEXT_LANGUAGEFIVE = 4, TEXT_LANGUAGE_MAX_ENUM } TEXT_LANGUAGE; void text_InitFlashFileInfo(void); void text_GetString(TEXT_LANGUAGE Language, UINT16 Index, char *pString, size_t Length); void text_GetSpaceTrimmedString(TEXT_LANGUAGE Language, UINT16 StrIndex, char *pString); typedef struct CourierInstanceTag COURIER_INSTANCE; typedef UINT8 COURIER_COLUMN; typedef UINT8 COURIER_ROW; typedef struct CourierCellRefTag { COURIER_COLUMN Column; COURIER_ROW Row; } COURIER_CELL_REF; typedef enum CourierStatusItemsTag { COURIER_DISTURB_STATUS = 0x01, COURIER_PLANT_STATUS = 0x02, COURIER_CONTROL_STATUS = 0x04, COURIER_BUSY_STATUS = 0x08, COURIER_OOS_STATUS = 0x10, COURIER_EVENT_STATUS = 0x20, COURIER_ALARM_STATUS = 0x40, COURIER_TRIP_STATUS = 0x80 } COURIER_STATUS_ITEMS; typedef UINT8 COURIER_STATUS_BYTE; typedef enum CourierDTLTag { COURIER_DTL_DATA_EXTENDED = 0x00, COURIER_DTL_COMMAND = 0x04, COURIER_DTL_GROUP_IDENTIFIER = 0x08, COURIER_DTL_BLOCK_HEADER = 0x0C, COURIER_DTL_BLOCK_FOOTER = 0x10, COURIER_DTL_BLOCK_IDENTIFIER = 0x14, COURIER_DTL_ASCII_TEXT = 0x18, COURIER_DTL_ASCII_PASSWORD = 0x1C, COURIER_DTL_BINARY_FLAGS = 0x20, COURIER_DTL_UNSIGNED_INTEGER = 0x24, COURIER_DTL_SIGNED_INTEGER = 0x28, COURIER_DTL_COURIER_NUMBER = 0x2C, COURIER_DTL_EXTENDED_COURIER_NUMBER = 0x30, COURIER_DTL_IEEE_FLOAT = 0x34, COURIER_DTL_MILLISECOND_TIMER_COUNT = 0x38, COURIER_DTL_IEC870_TIME_AND_DATE = 0x3C, COURIER_DTL_CELL_REF = 0x44, COURIER_DTL_REPLY_CODE = 0x48, COURIER_DTL_STRING_INDEX = 0x50, COURIER_DTL_BLOCK_TRANSFER_CELL = 0x58, COURIER_DTL_STATUS_BYTE = 0x5C, COURIER_DTL_IEC870_CONTROL_BYTE = 0x60, COURIER_DTL_FOREIGN_DATA = 0x64, COURIER_DTL_MODEM_CONTROL_STRING = 0x68, COURIER_DTL_ENCRYPTED_ASCII_PWORD = 0x6C } COURIER_DTL; typedef enum CourierDTLLengthTag { COURIER_DTL_LENGTH_EXTENDED = 0x00, COURIER_DTL_LENGTH_1_BYTE = 0x01, COURIER_DTL_LENGTH_2_BYTE = 0x02, COURIER_DTL_LENGTH_3_BYTE = 0x03 } COURIER_DTL_LENGTH; typedef enum CourierGroupIdentifierTag { COURIER_GROUP_STANDARD_EVENT = 0x00, COURIER_GROUP_SHORT_EVENT = 0x01, COURIER_GROUP_LONG_EVENT = 0x02, COURIER_GROUP_COMPLEX_EVENT = 0x03, COURIER_GROUP_STANDARD_EVENT_WITH_UNIQUE_ID = 0x04, COURIER_GROUP_COMPLEX_EVENT_WITH_UNIQUE_ID = 0x05, COURIER_GROUP_COLUMN_HEADING = 0x11, COURIER_GROUP_COLUMN_TEXT = 0x12, COURIER_GROUP_COLUMN_VALUE = 0x13, COURIER_GROUP_INDEXED_STRING = 0x20, COURIER_GROUP_SETTING_LIMITS = 0x21, COURIER_GROUP_SETTING_LIMITS_WITH_MULTIPLIER = 0x22, COURIER_GROUP_COLUMN_LIMITS = 0x23, COURIER_GROUP_COLUMN_LIMITS_WITH_MULTIPLIER = 0x24, COURIER_GROUP_REPEATED_DATA_PACKET = 0x40 } COURIER_GROUP_IDENTIFIER; typedef struct IECTimeTag { UINT16 Milliseconds; UINT8 Minutes; UINT8 Hours; UINT8 Day; UINT8 Month; UINT8 Year; } IEC_TIME; typedef UINT8 COURIER_ADDRESS; typedef UINT8 COURIER_SETTING_GROUP; typedef enum CourierReplyTag { COURIER_REPLY_OK = 0x00, COURIER_REPLY_NO_CODE = 0x01, COURIER_REPLY_NO_DATA = 0x02, COURIER_REPLY_NO_ACCESS = 0x03, COURIER_REPLY_NO_VERIFY = 0x04, COURIER_REPLY_NO_SETTINGS = 0x05, COURIER_REPLY_NO_PASSWORD = 0x06, COURIER_REPLY_OTHER_INTERFACE = 0x07, COURIER_REPLY_OK_CHANGE = 0x08, COURIER_REPLY_NO_CMD = 0x09, COURIER_REPLY_INVALID_CMD = 0x0A, COURIER_REPLY_PASSWORD_BLOCKED = 0x0B, COURIER_REPLY_OK_NOCOMPLIANCE = 0x0C, COURIER_REPLY_READ_PROTECTED = 0x0D, COURIER_REPLY_GENERAL = 0xFF } COURIER_REPLY; typedef enum CourierDataTag { COURIER_DATA_NORMAL, COURIER_DATA_BLOCKED, COURIER_DATA_FAILURE } COURIER_DATA; typedef enum CourierBlockTag { COURIER_BLOCK_DATA, COURIER_BLOCK_FOOTER, COURIER_BLOCK_ERROR } COURIER_BLOCK; typedef enum CourierDataNumTag { COURIER_ZERO_ITEMS, COURIER_ONE_ITEM, COURIER_MANY_ITEMS } COURIER_DATA_NUM; typedef char * COURIER_CELL_STRINGS; typedef char * COURIER_CELL_TEXT; typedef enum CourierCommandTag { COURIER_CMD_ABORT_SETTING = 0x4A, COURIER_CMD_ACCEPT_EVENT = 0x24, COURIER_CMD_CHANGE_DEVICE_ADDRESS = 0x43, COURIER_CMD_ENTER_CALIBRATION_MODE = 0x60, COURIER_CMD_ENTER_CONFIGURATION_MODE = 0x50, COURIER_CMD_ENTER_SETTING_MODE = 0x15, COURIER_CMD_EXECUTE_SETTING = 0x4E, COURIER_CMD_EXIT_CALIBRATION_MODE = 0x61, COURIER_CMD_EXIT_CONFIGURATION_MODE = 0x51, COURIER_CMD_GET_COLUMN_HEADINGS = 0x16, COURIER_CMD_GET_COLUMN_SETTING_LIMITS = 0x1D, COURIER_CMD_GET_COLUMN_TEXT = 0x17, COURIER_CMD_GET_COLUMN_VALUES = 0x18, COURIER_CMD_GET_DISPLAY = 0x13, COURIER_CMD_GET_STRINGS = 0x19, COURIER_CMD_GET_TEXT = 0x12, COURIER_CMD_GET_VALUE = 0x14, COURIER_CMD_LOAD_SHED_BY_GROUP = 0x44, COURIER_CMD_LOAD_SHED_TO_LEVEL = 0x46, COURIER_CMD_POLL_BUFFER = 0x10, COURIER_CMD_POLL_STATUS = 0x11, COURIER_CMD_PRELOAD_SETTING = 0x40, COURIER_CMD_RESET_MENU_CELL = 0x1A, COURIER_CMD_RESET_TRIP_INDICATION = 0x1B, COURIER_CMD_SELECT_SETTING_GROUP = 0x41, COURIER_CMD_SEND_BLOCK = 0x21, COURIER_CMD_SEND_EVENT = 0x23, COURIER_CMD_SEND_EVENT_WITH_ID = 0x27, COURIER_CMD_SET_REAL_TIME = 0x45, COURIER_CMD_SET_VALUE = 0x1C, COURIER_CMD_STORE_BLOCK_FOOTER = 0x26, COURIER_CMD_STORE_BLOCK_IDENTIFIER = 0x25, COURIER_CMD_EXIT_OEM_CALIBRATION_MODE = 0x62 } COURIER_COMMAND; typedef enum IEC870ControlBitTag { IEC870_CONTROL_BIT_FCV_DFC = 0x10, IEC870_CONTROL_BIT_FCB_ACD = 0x20, IEC870_CONTROL_BIT_PRM = 0x40, IEC870_CONTROL_BIT_RES = 0x80 } IEC870_CONTROL_BIT; typedef enum IEC870FunctionTag { IEC870_FUNCTION_MASTER_RESET_REMOTE_LINK = 0x00, IEC870_FUNCTION_MASTER_RESET_USER_PROCESS = 0x01, IEC870_FUNCTION_MASTER_SEND_WITH_REPLY = 0x03, IEC870_FUNCTION_MASTER_SEND_NO_REPLY = 0x04, IEC870_FUNCTION_MASTER_ACCESS_DEMAND_REQUEST = 0x08, IEC870_FUNCTION_MASTER_LINK_STATUS_REQUEST = 0x09, IEC870_FUNCTION_MASTER_CLASS_1_DATA_REQUEST = 0x0A, IEC870_FUNCTION_MASTER_CLASS_2_DATA_REQUEST = 0x0B, IEC870_FUNCTION_SLAVE_ACK_CONFIRM = 0x00, IEC870_FUNCTION_SLAVE_NACK_CONFIRM = 0x01, IEC870_FUNCTION_SLAVE_CLASS_2_DATA_REPLY = 0x08, IEC870_FUNCTION_SLAVE_NACK_REPLY = 0x09, IEC870_FUNCTION_SLAVE_LINK_STATUS_REPLY = 0x0B } IEC870_FUNCTION; typedef UINT8 IEC870_CONTROL; typedef enum IEC870FunctionTagMask { IEC870_FUNCTION_MASK = 0x0F } IEC870_FUNCTION_BIT_MASK; typedef struct CourierFrameTag { COURIER_ADDRESS Address; UINT8 Length; IEC870_CONTROL IECControlByte; UINT8 Data[((228) + 15)]; UINT32 TimeTag; } COURIER_FRAME; typedef struct CourierDatabaseInstanceTag { BOOLEAN PasswordEntered; BOOLEAN CalibrationMode; BOOLEAN ConfigurationMode; BOOLEAN ReadOnlyMode; COURIER_ADDRESS *pExceptionSettingCells; } COURIER_DATABASE_INSTANCE; typedef enum BlockTypeTag { BLOCK_INVALID, BLOCK_CELL_VALUES, BLOCK_INDEX_STRINGS, BLOCK_COLUMN_HEADINGS, BLOCK_COLUMN_TEXT, BLOCK_COLUMN_VALUES, BLOCK_COLUMN_LIMITS } BLOCK_TYPE; typedef enum CourierStateTag { COURIER_SHUTDOWN, COURIER_SHUTTINGDOWN, COURIER_RUNNING } COURIER_STATE; typedef struct CourierMessageTag { COURIER_FRAME *RxBuffer; COURIER_FRAME *TxBuffer; COURIER_INSTANCE *Interface; } COURIER_MESSAGE; typedef struct CourierInformationTag COURIER_INFORMATION; typedef enum CourierEncodeStatusTag { COURIER_ENCODE_OK, COURIER_ENCODE_BUFFER_FULL, COURIER_ENCODE_FAIL } COURIER_ENCODE_STATUS; typedef enum CourierDecodeStatusTag { COURIER_DECODE_OK, COURIER_DECODE_FAIL, COURIER_DECODE_OVERFLOW } COURIER_DECODE_STATUS; typedef COURIER_REPLY (*CELL_END_STORE_BLOCKS_FUNC) ( const COURIER_INFORMATION *pSelf, BOOLEAN CompletedOK, const COURIER_INSTANCE *pCourierInterface ); typedef COURIER_REPLY (*CELL_GET_DISPLAY_FUNC) ( const COURIER_INFORMATION *pSelf, COURIER_FRAME *pOutFrame, const COURIER_INSTANCE *pCourierInterface ); typedef COURIER_ENCODE_STATUS (*CELL_GET_LIMITS_FUNC) ( const COURIER_INFORMATION *pSelf, COURIER_FRAME *pOutFrame, BOOLEAN *pMultiplierWritten, const COURIER_INSTANCE *pCourierInterface ); typedef COURIER_ENCODE_STATUS (*CELL_GET_STRING_FUNC) ( const COURIER_INFORMATION *pSelf, UINT16 StringNumber, COURIER_FRAME *pOutFrame, const COURIER_INSTANCE *pCourierInterface ); typedef COURIER_ENCODE_STATUS (*CELL_GET_TEXT_FUNC) ( const COURIER_INFORMATION *pSelf, COURIER_FRAME *pOutFrame, const COURIER_INSTANCE *pCourierInterface ); typedef COURIER_ENCODE_STATUS (*CELL_GET_VALUE_FUNC) ( const COURIER_INFORMATION *pSelf, BOOLEAN FirstSection, COURIER_FRAME *pOutFrame, const COURIER_INSTANCE *pCourierInterface ); typedef COURIER_DATA_NUM (*CELL_IS_MULTI_VALUE_FUNC) ( const COURIER_INFORMATION *pSelf, const COURIER_INSTANCE *pCourierInterface ); typedef UINT16 (*CELL_GET_STATUS_FUNC) ( const COURIER_INFORMATION *pSelf, const COURIER_INSTANCE *pCourierInterface ); typedef BOOLEAN (*CELL_LOCK_FUNC) ( const COURIER_INFORMATION *pSelf, const COURIER_INSTANCE *pCourierInterface ); typedef UINT16 (*CELL_NUM_STRINGS_FUNC) ( const COURIER_INFORMATION *pSelf, const COURIER_INSTANCE *pCourierInterface ); typedef COURIER_REPLY (*CELL_RESET_FUNC) ( const COURIER_INFORMATION *pSelf, const COURIER_INSTANCE *pCourierInterface ); typedef COURIER_REPLY (*CELL_SET_VALUE_FUNC) ( const COURIER_INFORMATION *pSelf, COURIER_FRAME *pInFrame, UINT8 *pOffset, const COURIER_INSTANCE *pCourierInterface ); typedef void (*CELL_UNLOCK_FUNC) ( const COURIER_INFORMATION *pSelf, const COURIER_INSTANCE *pCourierInterface ); typedef struct CellFunctionTag { CELL_END_STORE_BLOCKS_FUNC EndStoreBlocks; CELL_NUM_STRINGS_FUNC GetNumberOfStrings; CELL_IS_MULTI_VALUE_FUNC IsCellMultiValue; CELL_LOCK_FUNC LockCell; CELL_RESET_FUNC ResetCell; CELL_SET_VALUE_FUNC SetCellValue; CELL_UNLOCK_FUNC UnlockCell; CELL_GET_DISPLAY_FUNC GetCellDisplay; CELL_GET_LIMITS_FUNC GetCellLimits; CELL_GET_STATUS_FUNC GetCellStatus; CELL_GET_STRING_FUNC GetCellString; CELL_GET_TEXT_FUNC GetCellText; CELL_GET_VALUE_FUNC GetCellValue; } CELL_FUNCTIONS; struct CourierInformationTag { COURIER_CELL_REF CellReference; CELL_FUNCTIONS *pCellFunctions; void *pDataObject; }; typedef struct CourierInterpreterInstanceTag { UINT8 PortId; COURIER_CELL_REF BlkMenuCellRef; COURIER_CELL_REF MenuCellRef; COURIER_INFORMATION *pMenuCellInfo; BOOLEAN InSettingMode; BOOLEAN SettingPreloaded; UINT8 SettingValue[(((228) + 15) - (2))]; UINT8 SettingValueLength; BOOLEAN MultipliersWritten; BLOCK_TYPE SendBlockType; UINT16 SendBlockNo; BOOLEAN FirstBlock; BOOLEAN LastBlock; UINT16 StringNo; BOOLEAN StoreBlock; UINT16 StoreTotalBlocks; UINT16 StoreNextBlockNo; BOOLEAN AcceptEvent; UINT8 *pRequestBuffer; UINT8 *pResponseBuffer; } COURIER_INTERPRETER_INSTANCE; typedef struct CourierDiagnosticInstanceTag { UINT32 BusMessageCount; UINT32 BusCommErrCount; UINT32 ProtocolCommErrCount; UINT32 SlaveMessageCount; UINT32 SlaveBusyCount; } COURIER_DIAGNOSTIC_INSTANCE; typedef struct CourierStackInstanceTag { COURIER_STATE State; void (*pTxCourierFrame) (COURIER_FRAME *, COURIER_INSTANCE *); void (*pRxCourierFrame) (COURIER_FRAME *, COURIER_INSTANCE *); BOOLEAN OKToReceive; BOOLEAN NeedResetRemoteLink; BOOLEAN AfterResetRemoteLink; BOOLEAN NoBusies; COURIER_STATUS_BYTE CourierStatus; BOOLEAN ReplyPending; BOOLEAN CallbackPending; BOOLEAN PStatCallbackPending; UINT32 CallbackHandle; unsigned int IECCallBackTime; unsigned int LLCallBackTime; BOOLEAN OKToShutdown; BOOLEAN GotGlobalLayerRxMesg; BOOLEAN GotLowLevelLayerRxMesg; BOOLEAN GotPresLayerRxMesg; BOOLEAN LastRxGlobal; COURIER_FRAME LastRxFrame; COURIER_FRAME LastRxGlobalFrame; COURIER_FRAME LastTxFrame; COURIER_FRAME LastTxLLFrame; COURIER_ADDRESS PendingRxMesgAddress; COURIER_FRAME IECReplyFrame; COURIER_FRAME LLReplyFrame; COURIER_FRAME LLStatReplyFrame; void (*pNowShutdown)(COURIER_INSTANCE *); } COURIER_STACK_INSTANCE; struct CourierInstanceTag { COURIER_ADDRESS Address; COURIER_DATABASE_INSTANCE DatabaseInstance; COURIER_INTERPRETER_INSTANCE InterpreterInstance; COURIER_STACK_INSTANCE StackInstance; COURIER_DIAGNOSTIC_INSTANCE Diagnostics; }; typedef enum CourierNumberUnitsTag { COURIER_NUM_UNITS_CURRENT = 0x00, COURIER_NUM_UNITS_VOLTAGE = 0x01, COURIER_NUM_UNITS_ANGLE = 0x02, COURIER_NUM_UNITS_IMPEDANCE = 0x03, COURIER_NUM_UNITS_POWER = 0x04, COURIER_NUM_UNITS_VA = 0x05, COURIER_NUM_UNITS_VAR = 0x06, COURIER_NUM_UNITS_LENGTH_METRES = 0x07, COURIER_NUM_UNITS_TIME_SEC = 0x08, COURIER_NUM_UNITS_RATIO = 0x09, COURIER_NUM_UNITS_TEMP_CELSIUS = 0x0A, COURIER_NUM_UNITS_FREQ_HERTZ = 0x0B, COURIER_NUM_UNITS_PERCENTAGE = 0x0C, COURIER_NUM_UNITS_PER_UNIT_VALUE = 0x0D, COURIER_NUM_UNITS_SQUARE_AMPS = 0x0E, COURIER_NUM_UNITS_NONE = 0x0F, COURIER_NUM_UNITS_ENERGY_WH = 0x10, COURIER_NUM_UNITS_ENERGY_VAH = 0x11, COURIER_NUM_UNITS_ENERGY_VARH = 0x12, COURIER_NUM_UNITS_TIME_MIN = 0x13, COURIER_NUM_UNITS_ADMITTANCE = 0x14, COURIER_NUM_UNITS_VOLTS_PER_HERTZ = 0x15, COURIER_NUM_UNITS_HERTZ_PER_SEC = 0x16, COURIER_NUM_UNITS_LENGTH_MILES = 0x17, COURIER_NUM_UNITS_LENGTH_FEET = 0x18, COURIER_NUM_UNITS_LENGTH_INCHES = 0x19, COURIER_NUM_UNITS_TIME_HOURS = 0x1A, COURIER_NUM_UNITS_TIME_DAYS = 0x1B, COURIER_NUM_UNITS_ENERGY_JOULES = 0x1C, COURIER_NUM_UNITS_AMPS2_SECONDS = 0x1D, COURIER_NUM_UNITS_VELOCITY = 0x1E, COURIER_NUM_UNITS_FREQ_RPS = 0x1F, COURIER_NUM_UNITS_TEMP_KELVIN = 0x20, COURIER_NUM_UNITS_TEMP_FAHRENHEIT = 0x21, COURIER_NUM_UNITS_CAPACITANCE = 0x22, COURIER_NUM_UNITS_VOLTS_PER_SECOND = 0x23, COURIER_NUM_UNITS_TIME_WEEKS = 0x24, COURIER_NUM_UNITS_TIME_MONTHS = 0x25, COURIER_NUM_UNITS_TIME_YEARS = 0x26, COURIER_NUM_UNITS_MAX_ENUM = 0x27 } COURIER_NUMBER_UNITS; typedef struct CourierNumberTag { double Value; COURIER_NUMBER_UNITS Units; } COURIER_NUMBER; void courier_InitInterface( COURIER_ADDRESS Address, void (*pRxCourierFrame) (COURIER_FRAME *, COURIER_INSTANCE *), void (*pTxCourierFrame) (COURIER_FRAME *, COURIER_INSTANCE *), COURIER_INSTANCE *pCourierInterface ); UINT16 courier_GetCommsLevel(void); typedef UINT32 PLAT_IP_ADDRESS[(UINT32)(((15) + 3) / 4)]; typedef enum ControlInputBitTag { CONTROL_IP1 = 0, CONTROL_IP2 = 1, CONTROL_IP3 = 2, CONTROL_IP4 = 3, CONTROL_IP5 = 4, CONTROL_IP6 = 5, CONTROL_IP7 = 6, CONTROL_IP8 = 7, CONTROL_IP9 = 8, CONTROL_IP10 = 9, CONTROL_IP11 = 10, CONTROL_IP12 = 11, CONTROL_IP13 = 12, CONTROL_IP14 = 13, CONTROL_IP15 = 14, CONTROL_IP16 = 15, CONTROL_IP17 = 16, CONTROL_IP18 = 17, CONTROL_IP19 = 18, CONTROL_IP20 = 19, CONTROL_IP21 = 20, CONTROL_IP22 = 21, CONTROL_IP23 = 22, CONTROL_IP24 = 23, CONTROL_IP25 = 24, CONTROL_IP26 = 25, CONTROL_IP27 = 26, CONTROL_IP28 = 27, CONTROL_IP29 = 28, CONTROL_IP30 = 29, CONTROL_IP31 = 30, CONTROL_IP32 = 31, CONTROL_INPUT_MAX_ENUM } CONTROL_INPUT_ID; typedef enum PlatCommandEnableDisableTag { PLAT_COMMAND_DISABLE = 0, PLAT_COMMAND_ENABLE = 1 } PLAT_COMMAND_ENABLE_DISABLE; typedef enum ControlInputStateTag { CONTROL_IP_NO_OPERATION = 0, CONTROL_IP_SET = 1, CONTROL_IP_RESET = 2 } CONTROL_INPUT_STATE; typedef UINT32 CONTROL_INPUTS; typedef enum PlatEthernetMediaTag { PLAT_ETHERNET_MEDIA_COPPER = 0, PLAT_ETHERNET_MEDIA_FIBRE = 1 } PLAT_G265_ETHERNET_MEDIA; typedef enum PlatQuantitiesTag { PLAT_PRIMARY = 0, PLAT_SECONDARY = 1 } PLAT_QUANTITIES; typedef enum { PLAT_DNPEV_INTERNAL = 0, PLAT_DNPEV_PRIMARY = 1, PLAT_DNPEV_SECONDARY = 2 } PLAT_DNPEV_QUANTITIES; typedef enum PlatModbusParityTag { PLAT_MODBUS_ODDPARITY = 0, PLAT_MODBUS_EVENPARITY = 1, PLAT_MODBUS_NOPARITY = 2 } PLAT_MODBUS_PARITY; typedef enum PlatModbusG238TimeFormat { MODB_TIME_STANDARD_IEC = 0, MODB_TIME_REVERSE_IEC = 1 } G238_MODB_TIME_FORMAT; typedef enum PlatDnpParityTag { PLAT_DNP_ODDPARITY = 0, PLAT_DNP_EVENPARITY = 1, PLAT_DNP_NOPARITY = 2 }PLAT_DNP_PARITY; typedef enum PlatDnpBaudRateTag { PLAT_DNP_BAUD_1200 = 0, PLAT_DNP_BAUD_2400 = 1, PLAT_DNP_BAUD_4800 = 2, PLAT_DNP_BAUD_9600 = 3, PLAT_DNP_BAUD_19200 = 4, PLAT_DNP_BAUD_38400 = 5 } PLAT_DNP_BAUDRATE; typedef enum PlatBaudRateTag { PLAT_BAUD_9600 = 0, PLAT_BAUD_19200 = 1, PLAT_BAUD_38400 = 2 } PLAT_BAUDRATE; typedef enum PlatUniversalGlobalThreshold { PLAT_GLOBAL_24_27V = 0, PLAT_GLOBAL_30_34V = 1, PLAT_GLOBAL_48_54V = 2, PLAT_GLOBAL_110_125V = 3, PLAT_GLOBAL_220_250V = 4, PLAT_GLOBAL_CUSTOM = 5 } PLATG200_UNIVERSALGLOBALTHRESHOLD; typedef enum PlatUniversalOpto { PLAT_OPTO_24_27V = 0, PLAT_OPTO_30_34V = 1, PLAT_OPTO_48_54V = 2, PLAT_OPTO_110_125V = 3, PLAT_OPTO_220_250V = 4 } PLATG201_UNIVERSALOPTO; typedef enum PlatInterMICOMCommand { PLAT_INTMICOM_COMMAND_DISABLED = 0, PLAT_INTMICOM_COMMAND_DIRECT = 1, PLAT_INTMICOM_COMMAND_PERMISSIVE = 2, PLAT_INTMICOM_COMMAND_BLOCKING = 3 }PLATG219_INTERMICOM_COMMAND; typedef enum PlatDataRateTag { PLAT_DATA_600 = 0, PLAT_DATA_1200 = 1, PLAT_DATA_2400 = 2, PLAT_DATA_4800 = 3, PLAT_DATA_9600 = 4, PLAT_DATA_19200 = 5, PLAT_G213_MAX_ENUM = 6 } PLATG213_INTERMICOM_DATARATE; typedef enum PlatInterTripLoopBackModeTag { PLAT_LOOPBACK_DISABLED =0, PLAT_LOOPBACK_INTERNAL =1, PLAT_LOOPBACK_EXTERNAL =2 } PLATG214_LOOPBACK_MODE; typedef enum PlatInterTripLatchdefaultTag { PLAT_DEFAULT = 0, PLAT_LATCHED = 1 } PLATG215_LATCH_DEFAULT; typedef enum PlatInterMiCOMRemoteDeviceTag { PLAT_REMOTE_PX40 = 0, PLAT_REMOTE_PX30 = 1 }PLATG218_INTERMICOM_REMOTE_DEVICE; typedef enum PlatG37EnableDisableEvents { PLAT_G37_DISABLED =0, PLAT_G37_ENABLED =1 } PLAT_G37_ENABLE_DISABLE; typedef enum PlatCommandNoYesTag { PLAT_COMMAND_NO = 0, PLAT_COMMAND_YES = 1 } PLAT_COMMAND_NO_YES; typedef enum { IED_CFG_IP_ADDRESS = 0x31, IED_CFG_SUBNET_MASK = 0x32, IED_CFG_GATEWAY = 0x33, IED_CFG_MEDIA = 0x34, IED_CFG_SNTP_SVR_1 = 0x41, IED_CFG_SNTP_SVR_2 = 0x42, IED_CFG_IED_NAME = 0x51, IED_CFG_61850_VERSION = 0x61, IED_CFG_END_OF_TABLE = 0xFF } IED_CONFIG_ROW_REF; typedef enum { PLAT_G246_DISABLED = 0, PLAT_G246_PASS_THRO, PLAT_G246_FORCED, PLAT_G246_MAX_ENUM } PLAT_G246_IEC_GOOSE_TEST_MODE; typedef struct IECGOOSEConfigTag { UINT32 goena; UINT32 test_mode; PLAT_COMMAND_NO_YES Ignore_test_flag; } IEC_GOOSE_CONFIG; typedef enum { PLAT_G248_NO_ACTION, PLAT_G248_SWITCH_BANKS } PLAT_G248_IED_CFG_BANK_SWITCH; typedef enum { PLAT_G256_NO_ACTION, PLAT_G256_RESTORE } PLAT_G256_RESTORE_MCL; typedef enum { IED_CONFIG_BANK_1 = 0, IED_CONFIG_BANK_2 }PLAT_IED_CONFIG_BANK; typedef struct { PLAT_IED_CONFIG_BANK active_config_bank; UINT32 bank_1_name[(68) / 4]; UINT32 bank_2_name[(68) / 4]; UINT32 bank_1_version[(68) / 4]; UINT32 bank_2_version[(68) / 4]; UINT32 bank_1_edition[(68) / 4]; UINT32 bank_2_edition[(68) / 4]; } PLAT_IED_CONFIGURATION; typedef enum PlatSNTPstatusTag { PLAT_G247_DISABLED, PLAT_G247_ACQ_PRI, PLAT_G247_ACQ_SEC, PLAT_G247_PRI_OK, PLAT_G247_SEC_OK, PLAT_G247_NO_RESPONSE, PLAT_G247_NO_VALID_CLOCK, PLAT_G247_MAX_ENUM } PLAT_G247_SNTP_STATUS; typedef enum PlatTimeSyncReqdTag { PLAT_NO_TIMESYNCREQD = 0, PLAT_TIMESYNCREQD = 1 } PLAT_TIME_SYNC_REQD; typedef enum PlatSelectCounterTypeTag { PLAT_OBJ20_RUNNING_COUNTER = 0, PLAT_OBJ21_FROZEN_COUNTER = 1 }PLAT_SELECT_COUNTER_TYPE; typedef enum PlatFCURFrameTag { PLAT_FCUR_11BIT, PLAT_FCUR_10BIT } PLAT_FCUR_FRAMING; typedef enum PlatPasswordLevelTag { PLAT_PASSWORD_LEVEL_0 = 0, PLAT_PASSWORD_LEVEL_1 = 1, PLAT_PASSWORD_LEVEL_2 = 2, PLAT_PASSWORD_LEVEL_3 = 3, PLAT_PASSWORD_LEVEL_MAX_ENUM } PLAT_PASSWORD_LEVEL; typedef enum PlatPhyMediaTag { PLAT_MEDIA_COPPER = 0, PLAT_MEDIA_FIBRE = 1 } PLAT_PHYSICAL_MEDIA; typedef enum PlatCS103BlockingTypeTag { PLAT_CS103_BLOCKING_DISABLED = 0, PLAT_CS103_MONITOR_DIRECTION_BLOCKED = 1, PLAT_CS103_REMOTE_COMMANDS_BLOCKED = 2 } PLAT_G210_CS103_BLOCKING_TYPE; typedef enum SYNC_SERVER PLAT_G272_SYNC_SERVER; typedef enum PlatBatteryAlarmTag { PLAT_BATTERY_ALARM_DISABLED = 0, PLAT_BATTERY_ALARM_ENABLED = 1 } PLAT_BATTERY_ALARM; typedef enum PlatParameterGroupChangeTag { PLAT_PARAM_CHANGE_MENU = 0, PLAT_PARAM_CHANGE_OPTO = 1 } PLAT_PARAMETER_GROUP_CHANGE; typedef enum PlatActiveParameterGroupTag { PLAT_GROUP_1_ACTIVE = 0, PLAT_GROUP_2_ACTIVE = 1, PLAT_GROUP_3_ACTIVE = 2, PLAT_GROUP_4_ACTIVE = 3 } PLAT_ACTIVE_PARAMETER_GROUP; typedef enum PlatSaveCommandTag { PLAT_SAVE_NO_OPERATION = 0, PLAT_SAVE_SAVE = 1, PLAT_SAVE_ABORT = 2 } PLAT_SAVE_COMMAND; typedef enum PlatRestoreDefaultParameterGroupTag { PLAT_RESTORE_NONE = 0, PLAT_RESTORE_ALL = 1, PLAT_RESTORE_GROUP_1 = 2, PLAT_RESTORE_GROUP_2 = 3, PLAT_RESTORE_GROUP_3 = 4, PLAT_RESTORE_GROUP_4 = 5 } PLAT_RESTORE_DEFAULT_PARAMETER_GROUP; typedef enum PlatRestoreDefaultUserCurveTag { PLAT_G257_RESTORE_CURVE_NONE = 0, PLAT_G257_RESTORE_CURVE_1 = 1, PLAT_G257_RESTORE_CURVE_2 = 2, PLAT_G257_RESTORE_CURVE_3 = 3, PLAT_G257_RESTORE_CURVE_4 = 4 } PLAT_G257_RESTORE_DEFAULT_USER_CURVE; typedef enum PlatVisibilityTag { PLAT_INVISIBLE = 0, PLAT_VISIBLE = 1 } PLAT_VISIBILITY; typedef enum PlatSettingTransferTag { PLAT_SETTING_TRANSFER_INACTIVE = 0, PLAT_SETTING_TRANSFER_ACTIVE = 1 } PLAT_SETTING_TRANSFER; typedef enum PlatG237OptoCharacteristicTag { PLAT_OPTO_CHARACTERISTIC_60_80 = 0, PLAT_OPTO_CHARACTERISTIC_50_70 = 1, PLAT_G237_MAX_ENUM } PLAT_G237_OPTO_CHARACTERISTIC; typedef struct UniversalTag { PLATG200_UNIVERSALGLOBALTHRESHOLD GlobalThreshold; PLATG201_UNIVERSALOPTO Opto[(32)]; PLAT_G237_OPTO_CHARACTERISTIC Characteristic; } PLAT_UNIVERSAL_OPTO_CONFIG; typedef struct PlatLocalConfigTag { PLAT_QUANTITIES Parameters; PLAT_QUANTITIES Measurands; } PLAT_LOCAL_CONFIG; typedef enum PlatCtrlIPOnOffTypesTag { TYPE_ONE = 0, TYPE_TWO = 1, TYPE_THREE = 2, TYPE_FOUR = 3 } PLAT_CTRL_IP_ON_OFF_TYPES; typedef enum PlatG242FuncKeyStatusTag { FUNC_KEY_DISABLED = 0, FUNC_KEY_UNLOCK_ENABLED = 1, FUNC_KEY_LOCK = 2, PLAT_G242_MAX_ENUM = 3 } PLAT_G242_FUNCKEY_STATUS; typedef enum PlatG243FuncKeyModeTypeTag { FUNC_KEY_NORMAL = 0, FUNC_KEY_TOGGLED = 1, PLAT_G243_MAX_ENUM = 2 } PLAT_G243_FUNCKEY_MODE; typedef struct PlatFuncKeyConfigTag { PLAT_G242_FUNCKEY_STATUS FuncKeyStatus[(10)]; PLAT_G243_FUNCKEY_MODE FuncKeyMode[(10)]; UINT32 FuncKeyLabel[(10)][((UINT8)(16) / (UINT8)4)]; } PLAT_FUNCKEY_CONFIG; typedef enum PlatG234CtrlIPSignalTypeTag { LATCHED = 0, PULSED = 1, PLAT_G234_MAX_ENUM } PLAT_G234_CTRLIP_SIGNAL_TYPE; typedef struct PlatCtrlIPConfigTag { PLAT_G234_CTRLIP_SIGNAL_TYPE CtrlIPSignalType[(32)]; UINT32 CtrlIPLabels[(32)][4]; UINT32 Hotkey_Ctrl_IPs; PLAT_CTRL_IP_ON_OFF_TYPES CtrlIPOnOffType[(32)]; } PLAT_CTRLIP_CONFIG; typedef struct PlatChanPwAccessTag { UINT16 AttemptsLimit; UINT16 BlockingTimeOut; } PLAT_CHAN_PW_ACCESS_CFG; typedef struct PlatUIConfigTag { TEXT_LANGUAGE Language; } PLAT_UI_CONFIG; typedef struct PlatFCURConfigTag { TEXT_LANGUAGE Language; } PLAT_FCUR_CONFIG; typedef struct PlatRemoteConfigTag { TEXT_LANGUAGE Language; REAL32 InactivityTimeOut; PLAT_QUANTITIES Parameters; PLAT_QUANTITIES Measurands; PLAT_PHYSICAL_MEDIA PhysicalMedia; } PLAT_REMOTE_CONFIG; typedef struct PlatRemote2ConfigTag { TEXT_LANGUAGE Language; REAL32 InactivityTimeOut; PLAT_QUANTITIES Parameters; PLAT_QUANTITIES Measurands; } PLAT_REMOTE_2_CONFIG; typedef struct PlatRemote3ConfigTag { TEXT_LANGUAGE Language; REAL32 InactivityTimeOut; PLAT_QUANTITIES Parameters; PLAT_QUANTITIES Measurands; } PLAT_REMOTE_3_CONFIG; typedef struct EventFilteringTag { PLAT_G37_ENABLE_DISABLE AlarmEvent; PLAT_G37_ENABLE_DISABLE OutputContactEvent; PLAT_G37_ENABLE_DISABLE OptoInputEvent; PLAT_G37_ENABLE_DISABLE RelaySystemEvent; PLAT_G37_ENABLE_DISABLE FaultRecordEvent; PLAT_G37_ENABLE_DISABLE MaintRecordEvent; PLAT_G37_ENABLE_DISABLE ProtectionEvent; UINT32 Protection_DDB[(((UINT32)(2048) + (UINT32)31) / (UINT32)32)]; } PLAT_EVENTFILTERING_CONFIG; typedef enum PlatRcur1PortConfigTag { PLAT_RCUR1_PORT_CONFIG_KBUS = 0, PLAT_RCUR1_PORT_CONFIG_IEC_RS485 = 1 } PLATG207_RCUR1_PORT_CONFIG; typedef enum kbusRcur1StatusTag { PLAT_RCUR1_KBUS_OK, PLAT_RCUR1_IEC_RS485_OK , PLAT_RCUR1_FIBRE_OK } PLATG208_RCUR1_STATUS; typedef enum PlatRcurIECModeTag { PLAT_RCUR_IEC_MODE_FT12 = 0, PLAT_RCUR_IEC_MODE_10BIT = 1 } PLATG206_RCUR_IEC_MODE; typedef struct PlatRemoteReadOnlyTag { PLAT_COMMAND_ENABLE_DISABLE RearPort1ReadOnly; PLAT_COMMAND_ENABLE_DISABLE RearPort2ReadOnly; PLAT_COMMAND_ENABLE_DISABLE RearNICReadOnly; } PLAT_REMRDONLY_CONFIG; typedef struct PlatKBUSConfigTag { COURIER_ADDRESS Address; PLATG207_RCUR1_PORT_CONFIG PortConfig; PLATG206_RCUR_IEC_MODE IEC60870Mode; PLAT_BAUDRATE BaudRate; } PLAT_KBUS_CONFIG; typedef struct PlatModbusConfigTag { UINT8 Address; PLAT_MODBUS_PARITY Parity; PLAT_BAUDRATE BaudRate; G238_MODB_TIME_FORMAT TimeFormat; } PLAT_MODBUS_CONFIG; typedef struct PlatCS103ConfigTag { UINT8 Address; PLAT_BAUDRATE BaudRate; REAL32 MeasurementPeriod; PLAT_G210_CS103_BLOCKING_TYPE BlockingType; } PLAT_CS103_CONFIG; typedef struct PlatDnpConfigTag { UINT16 Address; PLAT_DNP_BAUDRATE BaudRate; PLAT_DNP_PARITY Parity; PLAT_TIME_SYNC_REQD MasterTimeSync; PLAT_DNPEV_QUANTITIES Parameters; PLAT_DNPEV_QUANTITIES Measurands; UINT32 InterframeGap; PLAT_SELECT_COUNTER_TYPE SelectCounterType; } PLAT_DNP_CONFIG; typedef struct PlatInterMiCOMConfigTag { UINT8 SourceAddress; UINT8 ReceivedAddress; PLATG213_INTERMICOM_DATARATE DataRate; PLATG218_INTERMICOM_REMOTE_DEVICE RemoteDevice; PLAT_VISIBILITY ChannelStatsCells; PLAT_COMMAND_NO_YES ResetStatistics; PLAT_VISIBILITY ChannelStatusCells; PLATG214_LOOPBACK_MODE LoopBackMode; UINT8 LoopBackTestPattern; REAL32 AlarmLevel; PLATG219_INTERMICOM_COMMAND Command[((UINT8)(((UINT8)(4)) + ((UINT8)(4))))]; PLATG215_LATCH_DEFAULT LatchedDefault[((UINT8)(((UINT8)(4)) + ((UINT8)(4))))]; UINT8 DefaultData[((UINT8)(((UINT8)(4)) + ((UINT8)(4))))]; REAL32 TimeOutPeriod[((UINT8)(((UINT8)(4)) + ((UINT8)(4))))]; } PLAT_INTERMICOM_CONFIG; typedef enum PlatRcur2PortConfigTag { PLAT_RCUR2_PORT_CONFIG_IEC_RS232 = 0, PLAT_RCUR2_PORT_CONFIG_IEC_RS485 = 1, PLAT_RCUR2_PORT_CONFIG_KBUS = 2 } PLATG205_RCUR2_PORT_CONFIG; typedef struct PlatRcur2ConfigTag { PLATG205_RCUR2_PORT_CONFIG PortConfig; PLATG206_RCUR_IEC_MODE IEC60870Mode; COURIER_ADDRESS Address; PLAT_BAUDRATE BaudRate; } PLAT_RCUR2_CONFIG; typedef enum PlatDirectAccessConfigTag { BOTH_DISABLED = 0, BOTH_ENABLED = 1, HOTKEY_ENABLED_ONLY = 2, CB_CTRL_ENABLED_ONLY = 3 } PLAT_DA_CONFIG; typedef struct PlatParamConfigTag { PLAT_PARAMETER_GROUP_CHANGE ParameterGroupChange; PLAT_ACTIVE_PARAMETER_GROUP ActiveParameterGroup; PLAT_VISIBILITY ParameterGroup1Visibility; PLAT_VISIBILITY ParameterGroup2Visibility; PLAT_VISIBILITY ParameterGroup3Visibility; PLAT_VISIBILITY ParameterGroup4Visibility; PLAT_VISIBILITY RTDInputsVisibility; PLAT_VISIBILITY InputLabelsVisibility; PLAT_VISIBILITY OutputLabelsVisibility; PLAT_VISIBILITY RTDLabelsVisibility; PLAT_VISIBILITY CTVTRatiosVisibility; PLAT_VISIBILITY EventRecorderVisibility; PLAT_VISIBILITY DisturbRecorderVisibility; PLAT_VISIBILITY MeasurementSetupVisibility; PLAT_VISIBILITY CommunicationParametersVisibility; PLAT_VISIBILITY ControlInputsVisibility; PLAT_G37_ENABLE_DISABLE InterMiCOMEnableDisable; PLAT_VISIBILITY CtrlInputConfigVisibility; PLAT_VISIBILITY CtrlInputLabelVisibility; PLAT_DA_CONFIG DirectAccessControl; PLAT_VISIBILITY FunctionKeyVisibility; UINT8 LCDContrast; } PLAT_PARAM_CONFIG; typedef enum PlatCopyFromGroupTag { COPY_FROM_PLAT_GROUP_1 = 0, COPY_FROM_PLAT_GROUP_2 = 1, COPY_FROM_PLAT_GROUP_3 = 2, COPY_FROM_PLAT_GROUP_4 = 3 } PLAT_COPY_FROM_GROUP; typedef enum PlatCopyToGroupTag { COPY_TO_NO_OPERATION = 0, COPY_TO_PLAT_GROUP_1 = 1, COPY_TO_PLAT_GROUP_2 = 2, COPY_TO_PLAT_GROUP_3 = 3, COPY_TO_PLAT_GROUP_4 = 4 } PLAT_COPY_TO_GROUP; typedef enum { PLAT_G250_SUN, PLAT_G250_MON, PLAT_G250_TUE, PLAT_G250_WED, PLAT_G250_THU, PLAT_G250_FRI, PLAT_G250_SAT, PLAT_G250_MAX }PLAT_G250_DAY; typedef enum { PLAT_G251_JAN, PLAT_G251_FEB, PLAT_G251_MAR, PLAT_G251_APR, PLAT_G251_MAY, PLAT_G251_JUN, PLAT_G251_JUL, PLAT_G251_AUG, PLAT_G251_SEP, PLAT_G251_OCT, PLAT_G251_NOV, PLAT_G251_DEC, PLAT_G251_MAX }PLAT_G251_MONTH; typedef enum { PLAT_G252_FIRST, PLAT_G252_SECOND, PLAT_G252_THIRD, PLAT_G252_FOURTH, PLAT_G252_LAST, PLAT_G252_MAX }PLAT_G252_WEEK_NUMBER; typedef enum { PLAT_G253_UTC, PLAT_G253_LOCAL, PLAT_G253_MAX } PLAT_G253_TIME_ZONE; typedef enum { PLAT_G254_DISABLED, PLAT_G254_FIXED, PLAT_G254_FLEXIBLE, PLAT_G254_MAX } PLAT_G254_LOCAL_TIME; typedef struct { PLAT_G254_LOCAL_TIME local_time_enabled; REAL32 offset_in_minutes; PLAT_G37_ENABLE_DISABLE dst_enabled; REAL32 dst_offset; PLAT_G252_WEEK_NUMBER dst_start_series; PLAT_G250_DAY dst_start_day; PLAT_G251_MONTH dst_start_month; REAL32 dst_start_mins; PLAT_G252_WEEK_NUMBER dst_end_series; PLAT_G250_DAY dst_end_day; PLAT_G251_MONTH dst_end_month; REAL32 dst_end_mins; PLAT_G253_TIME_ZONE rp1_zone; PLAT_G253_TIME_ZONE rp2_zone; PLAT_G253_TIME_ZONE dnpoe_zone; PLAT_G253_TIME_ZONE tunnel_zone; }PLAT_LOCAL_TIME; typedef enum PlatAuthBypassTag{ AUTH_BYPASS_DISABLED = 0, AUTH_BYPASS_UI = 1, AUTH_BYPASS_lOCAL = 2, AUTH_BYPASS_REMOTE = 3, AUTH_BYPASS_lOCAL_REMOTE = 4 } PLAT_G279_AUTH_BYPASS; typedef enum PlatAuthMethod{ AUTH_SERVER_DEVICE = 0, AUTH_SERVER_ONLY = 1, AUTH_DEVICE_ONLY = 2 } PLAT_G281_AUTH_METHOD; typedef struct PlatSecurityTag { UINT32 Banner[((UINT32)8)]; UINT8 Level1Password[16]; UINT8 Level2Password[16]; UINT8 Level3Password[16]; PLAT_CHAN_PW_ACCESS_CFG PwAccessCfg; PLAT_G37_ENABLE_DISABLE FrontPortDisable; PLAT_G37_ENABLE_DISABLE RearPort1Disable; PLAT_G37_ENABLE_DISABLE RearPort2Disable; REAL32 FrontPortInactiveTime; REAL32 UIInactiveTime; PLAT_G281_AUTH_METHOD AuthMethod; PLAT_G279_AUTH_BYPASS AuthBypass; } PLAT_SECURITY_CFG; typedef struct PlatMiscConfigTag { UINT32 Description[((UINT32)4)]; UINT32 PlantReference[((UINT32)4)]; PLAT_BATTERY_ALARM BatteryAlarm; } PLAT_MISC_CONFIG; typedef struct UserAlarmTag{ UINT32 AlarmType; UINT32 AlarmLabel[(32)][4]; }PLAT_USERALARM; typedef struct { UINT32 ip_address; UINT32 subnet_mask; UINT32 gateway; UINT32 media; }PLAT_IP_PARAM_CONFIG; typedef struct { PLAT_G37_ENABLE_DISABLE hmi_enb; PLAT_IP_PARAM_CONFIG ipparam; }PLAT_IP_PARAM_HMI_CONFIG; typedef struct PlatformConfigurationTag { PLAT_LOCAL_CONFIG Local; PLAT_UI_CONFIG UserInterface; PLAT_IED_CONFIGURATION IEDConfig; IEC_GOOSE_CONFIG iec_goose_config; PLAT_IP_PARAM_HMI_CONFIG ipparam_hmi_config; PLAT_FCUR_CONFIG FrontCourier; PLAT_REMOTE_CONFIG Remote; PLAT_REMOTE_2_CONFIG Remote2; PLAT_REMRDONLY_CONFIG RemoteRdOnly; PLAT_KBUS_CONFIG KBus; PLAT_MODBUS_CONFIG Modbus; PLAT_CS103_CONFIG Cs103; PLAT_DNP_CONFIG Dnp; PLAT_RCUR2_CONFIG Rcur2; PLAT_G272_SYNC_SERVER PrimarySource; PLAT_G272_SYNC_SERVER SecondarySource; UINT32 DomainNumber; PLAT_EVENTFILTERING_CONFIG EventFiltering; PLAT_UNIVERSAL_OPTO_CONFIG Universal; PLAT_CTRLIP_CONFIG CtrlIPConfig; PLAT_INTERMICOM_CONFIG InterMiCOM; PLAT_FUNCKEY_CONFIG FuncKeyConfig; PLAT_PARAM_CONFIG Config; PLAT_SECURITY_CFG Security; PLAT_MISC_CONFIG Miscellaneous; UINT8 Frequency; PLAT_G253_TIME_ZONE irigb_type; PLAT_LOCAL_TIME local_time; } PLATFORM_CONFIG; typedef struct PlatformProtectionLabels { UINT32 OptoLabels[(32)][((UINT8)(16) / (UINT8)4)]; UINT32 RelayLabels[(32)][((UINT8)(16) / (UINT8)4)]; } PLAT_PROT_LABELS; typedef struct PlatformProtectionConfigurationTag { PLAT_PROT_LABELS Labels; } PLATFORM_PROT_CONFIG; typedef enum PlatInterfaceTag { PLAT_UI = 0, PLAT_FRONT_COURIER = 1, PLAT_REAR_COURIER = 2, PLAT_LPM_COURIER = 3, PLAT_CS_103 = 4, PLAT_MODBUS = 5, PLAT_DNP = 6, PLAT_ECI = 7, PLAT_REAR_COURIER2 = 8, PLAT_COPRO_COURIER = 9, PLAT_REAR_CS103_GS = 10, PLAT_DNPOE = 11, PLAT_INTERFACE_MAX_ENUM } PLAT_INTERFACE; typedef enum PlatConnInterfaceTag { PLAT_CONN_IFACE_FRONT_PORT = 0, PLAT_CONN_IFACE_REAR_PORT_1 = 1, PLAT_CONN_IFACE_REAR_PORT_2 = 2, PLAT_CONN_IFACE_ETHERNET_PORT = 3, PLAT_CONN_IFACE_COURIER_TUNNEL = 4, PLAT_CONN_IFACE_IEC61850 = 5, PLAT_CONN_IFACE_DNP3_OE = 6 } PLAT_CONN_INTERFACE; typedef enum PlatPortSelectionTag { PLAT_FRONT_PORT, PLAT_FIRST_REAR_PORT, PLAT_SECOND_REAR_PORT, PLAT_ETHERNET_PORT, PLAT_TUNNELED_COURIER } PLAT_PORT_SELECTION_TYPE; typedef struct { char Index; UINT32 No_Channels; } CH_LOOKUP_TABLE; extern const CH_LOOKUP_TABLE Ch_LookUp_Table[]; extern const T_INTERN_CONT_COUNT IDG[]; extern const T_INTERN_CONT_COUNT OV[]; extern const T_INTERN_CONT_COUNT UV[]; extern const T_INTERN_CONT_COUNT US_CO2R[]; extern const T_INTERN_CONT_COUNT US_CO8R[]; extern const T_INTERN_CONT_COUNT IEEE_EIR[]; extern const T_INTERN_CONT_COUNT IEEE_VIR[]; extern const T_INTERN_CONT_COUNT IEEE_MIR[]; extern const T_INTERN_CONT_COUNT US_CO2[]; extern const T_INTERN_CONT_COUNT US_CO8[]; extern const T_INTERN_CONT_COUNT IEEE_EI[]; extern const T_INTERN_CONT_COUNT IEEE_VI[]; extern const T_INTERN_CONT_COUNT IEEE_MI[]; extern const T_INTERN_CONT_COUNT LT30XDT[]; extern const T_INTERN_CONT_COUNT EI20XDT[]; extern const T_INTERN_CONT_COUNT VI30XDT[]; extern const T_INTERN_CONT_COUNT ST30XDT[]; typedef enum { G14_I1VTSBLOCK = 0x0001, G14_I2VTSBLOCK = 0x0002, G14_I3VTSBLOCK = 0x0004, G14_I4VTSBLOCK = 0x0008, G14_I3BLOCKAR = 0x0010, G14_I4BLOCKAR = 0x0020, G14_NOTUSED6 = 0x0040, G14_NOTUSED7 = 0x0080 } G14_ENUM; typedef enum { G31_IA, G31_IB, G31_IC, G31_IN, G31_ISEF, G31_VAN, G31_VBN, G31_VCN, G31_VCS, G31_IM, G31_IA_DIFF, G31_IB_DIFF, G31_IC_DIFF, G31_IN_DIFF, G31_MAX_I_BIAS, G31_MAX_I_2ND_HARM, G31_CH1_PROP_DEL, G31_CH2_PROP_DEL, G31_CH1_TXPROP_DEL, G31_CH2_TXPROP_DEL, G31_VN, G31_UNUSED, G31_MAX_ENUM } G31_ENUM; typedef enum { G36_NOOPERATION, G36_3POLETEST, G36_POLEATEST, G36_POLEBTEST, G36_POLECTEST, G36_MAX_ENUM } G36_ENUM; typedef enum { G55_NOOPERATION, G55_TRIP, G55_CLOSE, G55_MAX_ENUM } G55_ENUM; typedef enum { G58_SEFENABLED, G58_WATTMETRICSEF, G58_HI_Z_REFENABLED, G58_LO_Z_REFENABLED, G58_LO_Z_REF_SEF, G58_LO_Z_REF_WATTMETRIC, G58_MAX_ENUM } G58_ENUM; typedef enum { G63_IN1VTSBLOCK = 0x0001, G63_IN2VTSBLOCK = 0x0002, G63_IN3VTSBLOCK = 0x0004, G63_IN4VTSBLOCK = 0x0008, G63_NOTUSED5 = 0x0010, G63_NOTUSED6 = 0x0020, G63_NOTUSED7 = 0x0040, G64_NOTUSED8 = 0x0080 } G63_ENUM; typedef enum { G64_ISEF1VTSBLOCK = 0x0001, G64_ISEF2VTSBLOCK = 0x0002, G64_ISEF3VTSBLOCK = 0x0004, G64_ISEF4VTSBLOCK = 0x0008, G64_ISEF3BLOCKAR = 0x0010, G64_ISEF4BLOCKAR = 0x0020, G64_NOTUSED6 = 0x0040, G64_NOTUSED7 = 0x0080 } G64_ENUM; typedef enum { G65_F1POLEDEADBLK = 0x0001, G65_F2POLEDEADBLK = 0x0002, G65_F3POLEDEADBLK = 0x0004, G65_F4POLEDEADBLK = 0x0008, G65_NOTUSED4 = 0x0010, G65_NOTUSED5 = 0x0020, G65_NOTUSED6 = 0x0040, G65_NOTUSED7 = 0x0080 } G65_ENUM; typedef enum { G77_OUTOFSERVICE, G77_INSERVICE, G77_MAX_ENUM } G77_ENUM; typedef enum { G78_NOOPERATION, G78_INSERVICE, G78_OUTOFSERVICE, G78_MAX_ENUM } G78_ENUM; typedef enum { G95_TRIP_LED_SELF_RESET= 0x0001, G95_NOTUSED1 = 0x0002, G95_NOTUSED2 = 0x0004, G95_NOTUSED3 = 0x0008, G95_NOTUSED4 = 0x0010, G95_NOTUSED5 = 0x0020, G95_NOTUSED6 = 0x0040, G95_NOTUSED7 = 0x0080 } G95_ENUM; typedef enum { G100_DISABLED, G100_ENABLED, G100_ENABLEDVTS, G100_ENABLEDCHFAIL, G100_EN_VTS_OR_CHFAIL, G100_EN_VTS_AND_CHFAIL, G100_MAX_ENUM } G100_ENUM; typedef enum { G101_3_TERMINAL, G101_2_TERMINAL, G101_DUAL_REDUNDANT, G101_MAX_ENUM }G101_ENUM; typedef enum { G102_3_POLE, G102_1_AND_3_POLE, G102_MAX_ENUM } G102_ENUM; typedef enum { G103_0_0, G103_1_A, G103_2_A, G103_3_A, G103_4_A, G103_5_A, G103_6_A, G103_7_A, G103_8_A, G103_9_A, G103_10_A, G103_11_A, G103_12_A, G103_13_A, G103_14_A, G103_15_A, G103_16_A, G103_17_A, G103_18_A, G103_19_A, G103_20_A, G103_21_A, G103_22_A, G103_23_A, G103_24_A, G103_25_A, G103_26_A, G103_27_A, G103_28_A, G103_29_A, G103_30_A, G103_31_A, G103_32_A, G103_1_B, G103_2_B, G103_3_B, G103_4_B, G103_5_B, G103_6_B, G103_7_B, G103_8_B, G103_9_B, G103_10_B, G103_11_B, G103_12_B, G103_13_B, G103_14_B, G103_15_B, G103_16_B, G103_17_B, G103_18_B, G103_19_B, G103_20_B, G103_21_B, G103_22_B, G103_23_B, G103_24_B, G103_25_B, G103_26_B, G103_27_B, G103_28_B, G103_29_B, G103_30_B, G103_31_B, G103_32_B, G103_1_C, G103_2_C, G103_3_C, G103_4_C, G103_5_C, G103_6_C, G103_7_C, G103_8_C, G103_9_C, G103_10_C, G103_11_C, G103_12_C, G103_13_C, G103_14_C, G103_15_C, G103_16_C, G103_17_C, G103_18_C, G103_19_C, G103_20_C, G103_21_C, G103_22_C, G103_23_C, G103_24_C, G103_25_C, G103_26_C, G103_27_C, G103_28_C, G103_29_C, G103_30_C, G103_31_C, G103_32_C, G103_MAX_ENUM } G103_ENUM; typedef enum { G104_64KBPS, G104_56KBPS, G104_MAX_ENUM } G104_ENUM; typedef enum { G105_INTERNAL, G105_EXTERNAL, G105_MAX_ENUM } G105_ENUM; typedef enum { G106_BLOCKED, G106_ENABLED, G106_MAX_ENUM }G106_ENUM; typedef enum { G107_BIASED, G107_POWER, G107_MAX_ENUM } G107_ENUM; typedef enum { G108_YY0, G108_YD1, G108_YY2, G108_YD3, G108_YY4, G108_YD5, G108_YY6, G108_YD7, G108_YY8, G108_YD9, G108_YY10, G108_YD11, G108_YDY0, G108_YDY6, G108_MAX_ENUM } G108_ENUM; typedef enum { G110_GPS_DISABLED, G110_GPS_STANDARD, G110_GPS_LOOP_INHIBIT, G110_GPS_LOOP_RESTRAIN, G110_MAX_ENUM } G110_ENUM; typedef enum { G109_3_ENDED, G109_LOC_R1, G109_LOC_R2, G109_R1_R2, G109_MAX_ENUM } G109_ENUM; typedef enum { G112_DT, G112_IEC_SINVERSE, G112_IEC_VINVERSE, G112_IEC_EINVERSE, G112_UK_LTINVERSE, G112_IEEE_MINVERSE, G112_IEEE_VINVERSE, G112_IEEE_EINVERSE, G112_US_INVERSE, G112_US_STINVERSE, G112_MAX_ENUM } G112_ENUM; typedef enum { G114_NO_AR, G114_ALLOW_AR, G114_BAR, G114_MAX_ENUM } G114_ENUM; typedef enum { G115_ALLOW_AR, G115_BAR_2AND3, G115_BAR_3, G115_MAX_ENUM } G115_ENUM; typedef enum { G116_ALLOW_AR, G116_BAR, G116_MAX_ENUM } G116_ENUM; typedef enum { G118_NONE, G118_52A, G118_52B, G118_52AAND52B, G118_52A_1POLE, G118_52B_1POLE, G118_52AAND52B_1POLE, G118_MAX_ENUM } G118_ENUM; typedef enum { G120_FORWARD, G120_REVERSE, G120_MAX_ENUM } G120_ENUM; typedef enum { G126_NO_OP, G126_OVERRIDE, G126_MAX_ENUM } G126_ENUM; typedef enum { G127_PROTECTION_OPERATE, G127_PROTECTION_RESET, G127_MAX_ENUM } G127_ENUM; typedef enum { G129_SET_MODE_SIMPLE, G129_SET_MODE_ADVANCED, G129_MAX_ENUM } G129_ENUM; typedef enum { G130_DISABLED, G130_MHO, G130_QUAD, G130_MAX_ENUM }G130_ENUM; typedef enum { G131_COMMON, G131_PROPORTIONAL, G131_MAX_ENUM }G131_ENUM; typedef enum { G132_ALLOW_TRIP, G132_BLOCKING, G132_BLOCK_UNBLOCK, G132_MAX_ENUM }G132_ENUM; typedef enum { G133_DISABLED, G133_PHASE_ONLY, G133_GROUND_ONLY, G133_PHASE_AND_GROUND, G133_MAX_ENUM }G133_ENUM; typedef enum { G134_DISABLED, G134_PUR, G134_PUR_UNBLOCKING, G134_POR, G134_POR_UNBLOCKING, G134_BLOCKING1, G134_BLOCKING2, G134_PROG_UNBLOCK, G134_PROGRAMMABLE, G134_MAX_ENUM } G134_ENUM; typedef enum { G135_STANDARD_ABC, G135_REVERSE_ACB, G135_MAX_ENUM }G135_ENUM; typedef enum { G136_ZONE_1=0x01, G136_ZONE_2=0x02, G136_ZONE_3=0x04, G136_ZONE_P=0x08, G136_ZONE_4=0x10, G136_CNV=0x20, G136_ZONE_Q=0x40, G136_NOT_USED =0x80 }G136_ENUM; typedef enum { G137_BLOCKING, G137_INDICATION, G137_MAX_ENUM }G137_ENUM; typedef enum { G138_STANDARD, G138_SPECIAL, G138_MAX_ENUM }G138_ENUM; typedef enum { G139_WEAK_DISABLED, G139_WEAK_ECHO, G139_WEAK_ECHO_TRIP, G139_MAX_ENUM }G139_ENUM; typedef enum { G140_Z1_GND = 0x0001, G140_Z2_GND = 0x0002, G140_Z4_GND = 0x0004, G140_Z1_PH = 0x0008, G140_Z2_PH = 0x0010, G140_Z4_PH = 0x0020, G140_DEF_FOR = 0x0040, G140_DEF_REV = 0x0080, G140_DEL_FOR = 0x0100, G140_DEL_REV = 0x0200, G140_MAX_ENUM = 0x0400 }G140_ENUM; typedef enum { G141_DISABLED, G141_ENABLED, G141_ENABLED_CH1, G141_ENABLED_CH2, G141_ENABLED_CH1_AND_CH2, G141_ENABLED_CH1_OR_CH2, G141_MAX_ENUM }G141_ENUM; typedef enum { G142_DISABLED, G142_CVT_PASSIVE, G142_CVT_ACTIVE , G142_MAX_ENUM }G142_ENUM; typedef enum { G143_STANDARD, G143_IEEE_C37_94, G143_MAX_ENUM } G143_ENUM; typedef enum { G144_AUTO = 0, G144_TRANSMIT_1_SLOT, G144_TRANSMIT_2_SLOT, G144_TRANSMIT_3_SLOT, G144_TRANSMIT_4_SLOT, G144_TRANSMIT_5_SLOT, G144_TRANSMIT_6_SLOT, G144_TRANSMIT_7_SLOT, G144_TRANSMIT_8_SLOT, G144_TRANSMIT_9_SLOT, G144_TRANSMIT_10_SLOT, G144_TRANSMIT_11_SLOT, G144_TRANSMIT_12_SLOT, G144_MAX_ENUM } G144_ENUM; typedef enum { G146_DISABLED, G146_STANDARD, G146_CDIFF, G146_CDIFF_PLUS_STD }G146_ENUM; typedef enum { G145_DISABLED, G145_ENABLED, G145_ENABLED_CH_FAIL }G145_ENUM; typedef enum { G149_DISABLED, G149_EXTERNAL, G149_INTERNAL, G149_MAX_ENUM }G149_ENUM; typedef enum { G150_DISABLED = 0, G150_DT, G150_IEC_SINVERSE, G150_IEC_VINVERSE, G150_IEC_EINVERSE, G150_UK_LTINVERSE, G150_IEEE_MINVERSE, G150_IEEE_VINVERSE, G150_IEEE_EINVERSE, G150_US_INVERSE, G150_US_STINVERSE, G150_USER_CURVE_1, G150_USER_CURVE_2, G150_USER_CURVE_3, G150_USER_CURVE_4, G150_MAX_ENUM }G150_ENUM; typedef enum { G151_DISABLED = 0, G151_DT, G151_IEC_SINVERSE, G151_IEC_VINVERSE, G151_IEC_EINVERSE, G151_UK_LTINVERSE, G151_IEEE_MINVERSE, G151_IEEE_VINVERSE, G151_IEEE_EINVERSE, G151_US_INVERSE, G151_US_STINVERSE, G151_IDG, G151_USER_CURVE_1, G151_USER_CURVE_2, G151_USER_CURVE_3, G151_USER_CURVE_4, G151_MAX_ENUM }G151_ENUM; typedef enum { G152_DISABLED, G152_DT, G152_IEC_SINVERSE, G152_IEC_VINVERSE, G152_IEC_EINVERSE, G152_UK_LTINVERSE, G152_IEEE_MINVERSE, G152_IEEE_VINVERSE, G152_IEEE_EINVERSE, G152_US_INVERSE, G152_US_STINVERSE, G152_IDG, G152_USER_CURVE_1, G152_USER_CURVE_2, G152_USER_CURVE_3, G152_USER_CURVE_4, G152_MAX_ENUM }G152_ENUM; typedef enum { G153_RESTRAIN, G153_INDICATION, G153_MAX_ENUM } G153_ENUM; typedef enum { G162_DIFFERENTIAL_192, G162_DISTANCE_128, G162_OVERCURRENT_160, G162_MAX_ENUM } G162_ENUM; typedef enum { G163_FORWARD, G163_REVERSE, G163_MAX_ENUM } G163_ENUM; typedef enum { G164_NONE, G164_CAP_CHARGING, G164_TRANSFORMER, G164_MAX_ENUM }G164_ENUM; typedef enum { G165_DISABLED, G165_PD, G165_PULSE, G165_PD_PULSE, G165_MAX_ENUM }G165_ENUM; typedef enum { G166_DT = 0, G166_IEC_SINVERSE = 1, G166_IEC_VINVERSE = 2, G166_IEC_EINVERSE = 3, G166_UK_LTINVERSE = 4, G166_IEEE_MINVERSE = 5, G166_IEEE_VINVERSE = 6, G166_IEEE_EINVERSE = 7, G166_US_INVERSE = 8, G166_US_STINVERSE = 9, G166_MAX_ENUM = 10 }G166_ENUM; typedef enum { G174_MEASURED_AND_MCB, G174_MEASURED_ONLY, G174_MCB_ONLY, G174_MAX_ENUM }G174_ENUM; typedef enum { G175_AIDED_Z1, G175_ANY_TRIP, G175_NONE, G175_MAX_ENUM }G175_ENUM; typedef enum { G176_OST_DISABLED = 0, G176_OST_PREDICTIVE_TRIP, G176_OST_TRIP, G176_PREDICTIVE_AND_OST_TRIP, G176_MAX_ENUM } G176_ENUM; typedef enum { G183_REMOTE, G183_LOCAL, G183_MAX_ENUM }G183_ENUM; typedef enum { G178_DT, G178_IEC_SINVERSE, G178_IEC_VINVERSE, G178_IEC_EINVERSE, G178_UK_LTINVERSE, G178_IEEE_MINVERSE, G178_IEEE_VINVERSE, G178_IEEE_EINVERSE, G178_US_INVERSE, G178_US_STINVERSE, G178_IDG, G178_USER_CURVE_1, G178_USER_CURVE_2, G178_USER_CURVE_3, G178_USER_CURVE_4, G178_MAX_ENUM } G178_ENUM; typedef enum { G179_MASTER, G179_SLAVE, G179_MASTER_3TERM, G179_SLAVE_1_3TERM, G179_SLAVE_2_3TERM, G179_MAX_ENUM }G179_ENUM; typedef enum { G167_USER, G167_INTELLIGENT, G167_MAX_ENUM }G167_ENUM; typedef enum { G168_CH1, G168_CH2, G168_CH1_OR_CH2, G168_CH1_AND_2, G168_MAX_ENUM } G168_ENUM; typedef enum { G169_PH_ZONE_2=0x01, G169_PH_ZONE_3=0x02, G169_PH_ZONE_4=0x04, G169_PH_ZONE_P=0x08, G169_GND_ZONE_2=0x10, G169_GND_ZONE_3=0x20, G169_GND_ZONE_4=0x40, G169_GND_ZONE_P=0x80, G169_PH_ZONE_Q=0x100, G169_GND_ZONE_Q=0x200, G169_MAX_ENUM=0x400 }G169_ENUM; typedef enum { G170_NOOPERATION, G170_RESET_LOCKOUT, G170_MAX_ENUM }G170_ENUM; typedef enum { G171_STAB_NOT_APPLIED, G171_STAB_FAIL, G171_STAB_PASS, G171_MAX_ENUM }G171_ENUM; typedef enum { G172_DISABLED, G172_ENABLED, G172_AUTOMATIC, G172_MAX_ENUM }G172_ENUM; typedef enum { G173_PH_ZONE_2=0x01, G173_PH_ZONE_3=0x02, G173_PH_ZONE_P=0x04, G173_GND_ZONE_2=0x08, G173_GND_ZONE_3=0x10, G173_GND_ZONE_P=0x20, G173_PH_ZONE_Q=0x40, G173_GND_ZONE_Q=0x80, G173_MAX_ENUM=0x100 }G173_ENUM; typedef enum { G177_NOOPERATION, G177_FAILCOUNT, G177_ALLVALUES } G177_ENUM; typedef enum { G182_48_54V, G182_12_15V }G182_ENUM; typedef enum { G185_STANDARD, G185_ALTERNATIVE, G185_MAX_ENUM }G185_ENUM; typedef enum { G186_MENU, G186_OPTO, G186_CONTROL, G186_MAX_ENUM } G186_ENUM; typedef enum { G187_CB1, G187_CB2, G187_MAX_ENUM } G187_ENUM; typedef enum { G188_1P, G188_1OR3P, G188_3P, G188_OPTO, G188_MAX_ENUM } G188_ENUM; typedef enum { G190_PROTRES, G190_PROTOP, G190_DISABLE, G190_MAX_ENUM } G190_ENUM; typedef enum { G191_NOOPERATE, G191_SET, G191_RESET, G191_MAX_ENUM } G191_ENUM; typedef enum { G192_CB1ONLY, G192_CB2ONLY, G192_BOTHCB1CB2, G192_MAX_ENUM } G192_ENUM; typedef enum { G193_L_1P_F_1P, G193_L_1P_F_3P, G193_L_3P_F_3P, G193_L_13P_F_13P, G193_L_13P_F_3P, G193_OPTO, G193_MAX_ENUM } G193_ENUM; typedef enum { G194_DISABLED, G194_RESTRAINT, G194_BLOCKING, G194_MAX_ENUM } G194_ENUM; typedef enum { G195_DISABLED, G195_IN_DIFF_ONLY, G195_IN_PH_COMP_ONLY, G195_IN_DIFF_PH_COMP, G195_MAX_ENUM } G195_ENUM; typedef enum { G196_DT, G196_IEC_SINVERSE, G196_IEC_VINVERSE, G196_IEC_EINVERSE, G196_UK_LTINVERSE, G196_IEEE_MINVERSE, G196_IEEE_VINVERSE, G196_IEEE_EINVERSE, G196_US_INVERSE, G196_US_STINVERSE, G196_USER_CURVE_1, G196_USER_CURVE_2, G196_USER_CURVE_3, G196_USER_CURVE_4, G196_MAX_ENUM } G196_ENUM; typedef enum { G184_SECURE, G184_DEPENDABLE, G184_MAX_ENUM }G184_ENUM; typedef enum { G209_DIRECT, G209_PERMISSIVE, G209_MAX_ENUM }G209_ENUM; typedef enum { G212_DIRECT, G212_PERMISSIVE, G212_MAX_ENUM }G212_ENUM; typedef enum { G215_DEFAULT, G215_LATCHED, G215_MAX_ENUM }G215_ENUM; typedef enum { G400_INHIBIT_TRIP, G400_ALLOW_TRIP, G400_MAX_ENUM } G400_ENUM; typedef enum { G401_OPERATE, G401_RESET, G401_MAX_ENUM }G401_ENUM; typedef enum { G402_FORWARD, G402_OFFSET, G402_REVERSE, G402_MAX_ENUM }G402_ENUM; typedef enum { G403_FORWARD, G403_REVERSE, G403_OFFSET, G403_MAX_ENUM }G403_ENUM; typedef enum { G404_UNDERCURRENT, G404_CBOPEN, G404_PROTECTIONRESET, G404_PROTRESET_OR_I, G404_PROTRESET_OR_AND, G404_MAX_ENUM } G404_ENUM; typedef enum { G405_CheckSync, G405_BrokenDelta, G405_MAX_ENUM }G405_ENUM; typedef enum { G406_DISABLED, G406_ENABLED, G406_CDIFF_PERMIT, G406_MAX_ENUM }G406_ENUM; typedef enum { G407_STANDARD, G407_CONVENTIONAL, G407_MAX_ENUM }G407_ENUM; typedef enum { G408_STANDARD, G408_ISCOMPEARTHING, G408_MAX_ENUM }G408_ENUM; typedef enum { G410_DISABLED, G410_TRANSIENT_BIAS, G410_MIXED_MODE, G410_BOTH_MODES, G410_MAX_ENUM }G410_ENUM; typedef enum { G411_DEFAULT = 0, G411_CUSTOM = 1, G411_MAX_ENUM } G411_ENUM; typedef enum { G412_C_A_ACYCLIC, G412_A_C_ACYCLIC, G412_B_A_ACYCLIC, G412_A_B_ACYCLIC, G412_C_B_ACYCLIC, G412_B_C_ACYCLIC, G412_C_A_CYCLIC, G412_A_C_CYCLIC, G412_ALL, G412_MAX_ENUM } G412_ENUM; typedef enum { G413_IN, G413_VN, G413_IN_AND_VN, G413_IN_OR_VN, G413_MAX_ENUM } G413_ENUM; typedef enum { G7_DISABLED, G7_BLOCKING, G7_INDICATION, G7_MAX_ENUM } G7_ENUM; typedef enum { G11_NO, G11_YES, G11_MAX_ENUM } G11_ENUM; typedef enum { G13_OPTOSTATECHANGE, G13_RELAYSTATECHANGE, G13_ALARM, G13_PROTECTION, G13_GENERALEVENT, G13_FAULTRECORD, G13_MAINTENANCERECORD, G13_MAX_ENUM } G13_ENUM; typedef enum { G15_UNEXTRACTED, G15_EXTRACTED, G15_NOMOREENTRIES, G15_BUSY, G15_RESYNCREQD, G15_MAX_ENUM } G15_ENUM; typedef enum { G17_INACTIVE, G17_ACTIVE, G17_MAX_ENUM } G17_ENUM; typedef enum { G18_NOOPERATION, G18_CLEAREVENTRECORDS, G18_STARTSUMMARYATRECORDID, G18_ACTIVATESETTINGGROUP, G18_COPYSETTINGGROUP, G18_COMMITSETTINGCHANGES, G18_ABANDONSETTINGCHANGES, G18_SETTOFACTORYDEFAULT1, G18_SETTOFACTORYDEFAULT2, G18_CONTROLCIRCUITBREAKER, G18_CLEARFAULTRECORDS, G18_CLEARMAINTRECORDS, G18_MAX_ENUM } G18_ENUM; typedef enum { G19_ENGLISH, G19_FRANCAIS, G19_DEUTSCH, G19_ESPANOL, G19_MAX_ENUM } G19_ENUM; typedef enum { G21_RS485, G21_FIBRE, G21_MAX_ENUM } G21_ENUM; typedef enum { G22_LEVEL0, G22_LEVEL1, G22_LEVEL2, G22_MAX_ENUM } G22_ENUM; typedef enum { G23_DISABLED, G23_DT, G23_IDMT, G23_MAX_ENUM } G23_ENUM; typedef UINT8 G32_ENUM; typedef enum { G34_SINGLE, G34_EXTENDED, G34_MAX_ENUM } G34_ENUM; typedef enum { G37_DISABLED, G37_ENABLED, G37_MAX_ENUM } G37_ENUM; typedef enum { G38_9600BPS, G38_19200BPS, G38_38400BPS, MAX_ENUM_G38 } G38_ENUM; typedef enum { G39_ODD, G39_EVEN, G39_NONE, G39_MAX_ENUM_G39 } G39_ENUM; typedef enum { G40_A_N, G40_B_N, G40_C_N, G40_A_B, G40_B_C, G40_C_A, G40_MAX_ENUM } G40_ENUM; typedef enum { G41_NONE, G41_UNDERVOLTAGE, G41_OVERVOLTAGE, G41_DIFFERENTIAL, G41_UV_AND_OV, G41_UV_AND_DIFFV, G41_OV_AND_DIFFV, G41_UV_OV_DIFFV, G41_MAX_ENUM } G41_ENUM; typedef enum { G42_NONE, G42_TIMER, G42_FREQUENCY, G42_BOTH, G42_MAX_ENUM } G42_ENUM; typedef enum { G43_DISABLED, G43_DT, G43_IEC_SINVERSE, G43_IEC_VINVERSE, G43_IEC_EINVERSE, G43_UK_LTINVERSE, G43_IEEE_MINVERSE, G43_IEEE_VINVERSE, G43_IEEE_EINVERSE, G43_US_INVERSE, G43_US_STINVERSE, G43_MAX_ENUM } G43_ENUM; typedef enum { G44_NONDIRECTIONAL, G44_DIRECTIONALFWD, G44_DIRECTIONALREV, G44_MAX_ENUM } G44_ENUM; typedef enum { G45_BLOCK, G45_NONDIRECTIONAL, G45_MAX_ENUM } G45_ENUM; typedef enum { G46_ZEROSEQ, G46_NEGSEQ, G46_MAX_ENUM } G46_ENUM; typedef enum { G47_PHASETOPHASE, G47_PHASETONEUTRAL, G47_PH_PH_AND_PH_N, G47_PH_N_AND_PH_PH, G47_MAX_ENUM } G47_ENUM; typedef enum { G48_ANYPHASE, G48_THREEPHASE, G48_ANYPH_AND_3PH, G48_3PH_AND_ANYPH, G48_MAX_ENUM } G48_ENUM; typedef enum { G49_MEASURED, G49_DERIVED, G49_MAX_ENUM } G49_ENUM; typedef enum { G51_DISTANCE, G51_OHMS, G51_PERCENTOFLINE, G51_MAX_ENUM } G51_ENUM; typedef enum { G52_USER_BANNER = 0, G52_3PHANDNCURRENT, G52_3PHVOLTAGE, G52_POWER, G52_DATEANDTIME, G52_DESCRIPTION, G52_PLANTREFERENCE, G52_FREQUENCY, G52_PASSWORDLEVEL, G52_MAX_ENUM } G52_ENUM; typedef enum { G53_NOOPERATION, G53_ALLSETTINGS, G53_SETTINGGROUP1, G53_SETTINGGROUP2, G53_SETTINGGROUP3, G53_SETTINGGROUP4, G53_MAX_ENUM } G53_ENUM; typedef enum { G54_PRIMARY, G54_SECONDARY, G54_MAX_ENUM } G54_ENUM; typedef enum { G56_VA, G56_VB, G56_VC, G56_IA, G56_IB, G56_IC, G56_MAX_ENUM } G56_ENUM; typedef enum { G57_PSLSETTINGS, G57_PSLCONFIG, G57_MAX_ENUM } G57_ENUM; typedef enum { G59_DEAD, G59_HEALTHY, G59_MAX_ENUM } G59_ENUM; typedef enum { G60_DT, G60_INVERSE, G60_MAX_ENUM } G60_ENUM; typedef enum { G61_SELECTVIAMENU, G61_SELECTVIAOPTOS, G61_MAX_ENUM } G61_ENUM; typedef enum { G62_NOOPERATION, G62_SAVE, G62_ABORT, G62_MAX_ENUM } G62_ENUM; typedef enum { G66_NO_TRIGGER, G66_TRIGGER_LOHI, G66_TRIGGER_HILO, G66_MAX_ENUM } G66_ENUM; typedef enum { G67_DISABLED, G67_SINGLE, G67_DUAL, G67_MAX_ENUM } G67_ENUM; typedef enum { G69_MANUAL, G69_AUTO, G69_MAX_ENUM } G69_ENUM; typedef enum { G71_COURIER, G71_IEC870, G71_MODBUS, G71_MAX_ENUM } G71_ENUM; typedef enum { G72_PROTECTIONRESET, G72_CBTRIPS, G72_MAX_ENUM } G72_ENUM; typedef enum { G73_SUSPEND, G73_CONTINUE, G73_MAX_ENUM } G73_ENUM; typedef enum { G74_USERINTERFACE, G74_SELECTNONAUTO, G74_MAX_ENUM } G74_ENUM; typedef enum { G76_PREPARERX, G76_COMPLETERX, G76_PREPARETX, G76_COMPLETETX, G76_RXPREPARED, G76_TXPREPARED, G76_OK, G76_UNKNOWNDOMAIN, G76_UNKNOWNSUBDOMAIN, G76_UNSUPPORTEDVERSION, G76_UNKNOWNREFERENCE, G76_MAX_ENUM } G76_ENUM; typedef enum { G79_DISABLED, G79_BASIC, G79_COMPLETE, G79_MAX_ENUM } G79_ENUM; typedef enum { G80_INVISIBLE, G80_VISIBLE, G80_MAX_ENUM } G80_ENUM; typedef enum { G81_USERINTERFACE, G81_CBCLOSE, G81_MAX_ENUM } G81_ENUM; typedef enum { G82_NOBLOCK, G82_BLOCKINSTPROT, G82_MAX_ENUM } G82_ENUM; typedef enum { G83_AUTOMODE, G83_NONAUTOMODE, G83_LIVELINE, G83_MAX_ENUM } G83_ENUM; typedef enum { G88_ALARMDISABLED, G88_ALARMENABLED, G88_MAX_ENUM } G88_ENUM; typedef enum { G89_LINE, G89_BUS, G89_MAX_ENUM } G89_ENUM; typedef enum { G90_GROUP1, G90_GROUP2, G90_GROUP3, G90_GROUP4, G90_MAX_ENUM } G90_ENUM; typedef enum { G91_ALLOWTRIPPING, G91_BLOCKTRIPPING, G91_MAX_ENUM } G91_ENUM; typedef enum { G92_NOLOCKOUT, G92_LOCKOUT, G92_MAX_ENUM } G92_ENUM; typedef enum { G93_NOOPERATION, G93_APPLYTEST, G93_REMOVETEST, G93_MAX_ENUM } G93_ENUM; typedef enum { G94_NOOPERATION, G94_APPLYTEST, G94_MAX_ENUM } G94_ENUM; typedef enum { G97_KILOMETRES, G97_MILES, G97_MAX_ENUM } G97_ENUM; typedef enum { G98_NOOPERATION, G98_GROUP1, G98_GROUP2, G98_GROUP3, G98_GROUP4, G98_MAX_ENUM } G98_ENUM; typedef enum { G99_DISABLED, G99_LOCAL, G99_REMOTE, G99_LOCAL_REMOTE, G99_OPTO, G99_OPTO_LOCAL, G99_OPTO_REMOTE, G99_OPTO_REM_LOCAL, G99_MAX_ENUM } G99_ENUM; typedef enum { G158_I2GT_1_VTSBLOCK = 0x00000001 ,G158_I2GT_2_VTSBLOCK = 0x00000002 ,G158_I2GT_3_VTSBLOCK = 0x00000004 ,G158_I2GT_4_VTSBLOCK = 0x00000008 } G158_ENUM; typedef enum { G9_RELAY1 = 0x00000001, G9_RELAY2 = 0x00000002, G9_RELAY3 = 0x00000004, G9_RELAY4 = 0x00000008, G9_RELAY5 = 0x00000010, G9_RELAY6 = 0x00000020, G9_RELAY7 = 0x00000040, G9_RELAY8 = 0x00000080, G9_RELAY9 = 0x00000100, G9_RELAY10 = 0x00000200, G9_RELAY11 = 0x00000400, G9_RELAY12 = 0x00000800, G9_RELAY13 = 0x00001000, G9_RELAY14 = 0x00002000, G9_RELAY15 = 0x00004000, G9_RELAY16 = 0x00008000, G9_RELAY17 = 0x00010000, G9_RELAY18 = 0x00020000, G9_RELAY19 = 0x00040000, G9_RELAY20 = 0x00080000, G9_RELAY21 = 0x00100000, G9_RELAY22 = 0x00200000, G9_RELAY23 = 0x00400000, G9_RELAY24 = 0x00800000, G9_RELAY25 = 0x01000000, G9_RELAY26 = 0x02000000, G9_RELAY27 = 0x04000000, G9_RELAY28 = 0x08000000, G9_RELAY29 = 0x10000000, G9_RELAY30 = 0x20000000, G9_RELAY31 = 0x40000000, G9_RELAY32 = 0x80000000, G9_MAX_ENUM } G9_ENUM; typedef enum { G16_STARTA = 0x0001, G16_STARTB = 0x0002, G16_STARTC = 0x0004, G16_STARTN = 0x0008, G16_TRIPA = 0x0010, G16_TRIPB = 0x0020, G16_TRIPC = 0x0040, G16_TRIPN = 0x0080 } G16_ENUM; typedef enum { G68_UNDERCURRENT, G68_CBOPEN, G68_PROTECTIONRESET, G68_MAX_ENUM } G68_ENUM; typedef enum { G119_DISABLED, G119_TESTMODE, G119_BLOCKED, G119_MAX_ENUM } G119_ENUM; typedef enum { G156_NONE, G156_TIMER, G156_FREQUENCY, G156_TIMER_FREQ, G156_FREQ_CB_COMP, G156_MAX_ENUM } G156_ENUM; typedef enum { G157_DIR_NEGATIVE, G157_DIR_POSITIVE, G157_DIR_BOTH, G157_MAX_ENUM } G157_ENUM; typedef enum { G180_PHASETOPHASE, G180_PHASETONEUTRAL, G180_PH_PH_AND_PH_N, G180_PH_N_AND_PH_PH, G180_MAX_ENUM } G180_ENUM; typedef enum { G181_ANYPHASE, G181_THREEPHASE, G181_ANYPH_AND_3PH, G181_3PH_AND_ANYPH, G181_MAX_ENUM } G181_ENUM; typedef enum { G197_USER_CURVE_DT, G197_USER_CURVE_1, G197_USER_CURVE_2, G197_USER_CURVE_3, G197_USER_CURVE_4, G197_MAX_ENUM } G197_ENUM; typedef enum { G202_VIRTUAL_INPUT_1 = 0x00000001, G202_VIRTUAL_INPUT_2 = 0x00000002, G202_VIRTUAL_INPUT_3 = 0x00000004, G202_VIRTUAL_INPUT_4 = 0x00000008, G202_VIRTUAL_INPUT_5 = 0x00000010, G202_VIRTUAL_INPUT_6 = 0x00000020, G202_VIRTUAL_INPUT_7 = 0x00000040, G202_VIRTUAL_INPUT_8 = 0x00000080, G202_VIRTUAL_INPUT_9 = 0x00000100, G202_VIRTUAL_INPUT_10 = 0x00000200, G202_VIRTUAL_INPUT_11 = 0x00000400, G202_VIRTUAL_INPUT_12 = 0x00000800, G202_VIRTUAL_INPUT_13 = 0x00001000, G202_VIRTUAL_INPUT_14 = 0x00002000, G202_VIRTUAL_INPUT_15 = 0x00004000, G202_VIRTUAL_INPUT_16 = 0x00008000, G202_VIRTUAL_INPUT_17 = 0x00010000, G202_VIRTUAL_INPUT_18 = 0x00020000, G202_VIRTUAL_INPUT_19 = 0x00040000, G202_VIRTUAL_INPUT_20 = 0x00080000, G202_VIRTUAL_INPUT_21 = 0x00100000, G202_VIRTUAL_INPUT_22 = 0x00200000, G202_VIRTUAL_INPUT_23 = 0x00400000, G202_VIRTUAL_INPUT_24 = 0x00800000, G202_VIRTUAL_INPUT_25 = 0x01000000, G202_VIRTUAL_INPUT_26 = 0x02000000, G202_VIRTUAL_INPUT_27 = 0x04000000, G202_VIRTUAL_INPUT_28 = 0x08000000, G202_VIRTUAL_INPUT_29 = 0x10000000, G202_VIRTUAL_INPUT_30 = 0x20000000, G202_VIRTUAL_INPUT_31 = 0x40000000, G202_VIRTUAL_INPUT_32 = 0x80000000, G202_MAX_ENUM } G202_ENUM; typedef enum { G203_NOOPERATION, G203_SET, G203_RESET, G203_MAX_ENUM } G203_ENUM; typedef enum { G280_ON, G280_ON_BLOCKED, G280_TEST, G280_TEST_BLOCKED, G280_OFF, G280_MAX_ENUM }G280_ENUM; typedef T_AMPER T_CurrChanAmperTable[9]; typedef struct { BOOLEAN Valid_ana_in; REAL32 VoltageChannels[6]; REAL32 CurrentChannels[9]; } T_ANALOGUE_INPUTS_APPLI; typedef UINT32 T_DIGITAL_INPUT_OPTO_BITS; typedef struct { T_DIGITAL_INPUT_OPTO_BITS ValidityBits[2]; T_DIGITAL_INPUT_OPTO_BITS StateBits[2]; } T_DIGITAL_INPUTS; typedef struct { T_ANALOGUE_INPUTS_APPLI AnalogueInputData; T_DIGITAL_INPUTS DigitalInputData; }T_ANALOGUE_AND_DIGITAL_INPUTS; typedef enum { UnusedVT, V110, V440, NA } T_VT_TRANSFORMER_TYPE; typedef enum { UnusedCT, Standard, LowLevel, Sensitive } T_CT_TRANSFORMER_TYPE; typedef struct { REAL32 MagCorr50Hz; REAL32 PhaseCorr50Hz; REAL32 MagCorr60Hz; REAL32 PhaseCorr60Hz; } T_CALIB_COEFFS; typedef struct { T_CALIB_COEFFS Coeffs1A; } T_VT_CALIB_COEFFS; typedef struct { T_CALIB_COEFFS Coeffs1A; T_CALIB_COEFFS Coeffs5A; } T_CT_CALIB_COEFFS; typedef T_VT_CALIB_COEFFS T_Vt_Calib_Coeffs[6]; typedef T_VT_CALIB_COEFFS T_Check_Calib_Coeffs[3]; typedef T_CT_CALIB_COEFFS T_Ct_Calib_Coeffs[9]; typedef UINT32 T_Opto_config [8]; typedef BOOLEAN T_Valid_dig_in_optoboard [8]; typedef enum OptoCharacteristicTag { OPTO_CHARACTERISTIC_60_80, OPTO_CHARACTERISTIC_50_70 }SEA2_OPTO_CHARACTERISTIC; typedef struct { BOOLEAN UsedVTs[6]; BOOLEAN UsedCTs[9]; T_VT_TRANSFORMER_TYPE VTTransformerTypes[6]; T_CT_TRANSFORMER_TYPE CTTransformerTypes[9]; T_Vt_Calib_Coeffs VtCoeffs; T_Check_Calib_Coeffs CheckCoeffs; T_Ct_Calib_Coeffs CtCoeffs; T_Opto_config Opto_config; BOOLEAN Valid_ana_in; T_Valid_dig_in_optoboard Valid_dig_in_optoboard; BOOLEAN NCIT_Fitted; } T_hardware_acq2_config; STATUS sea2_InitDrv2_Phase1( T_CALIB_FREQ Freq, T_CurrChanAmperTable Currents, int NumOptoBoardsFitted, int NumDIOBFitted, NU_MEMORY_POOL *pMemPool, T_hardware_acq2_config *pIOConfig, BOOLEAN SuperExist, NU_QUEUE *pSuperQ, OPTION AcqMsgTaskPri, const UINT32 *pOptoThresholdConfig, BOOLEAN NCIT); extern STATUS sea2_IniDrv_Phase2( OPTION HISR_AnaIn_Prio, void (*TheITFunction) (T_ANALOGUE_AND_DIGITAL_INPUTS *, BOOLEAN *, REAL32 *, REAL32 *), UNSIGNED TheITStackSize); extern STATUS sea2_VerDatCalRead( char *CalSoftVerNum, UINT8 *CalDateTime); extern STATUS sea2_RestartSampling( void); extern STATUS sea2_StopSampling( void); extern STATUS sea2_ReinitValues( T_CALIB_FREQ Freq, T_CurrChanAmperTable Currents); extern STATUS sea2_ReinitOptoSettings(const UINT32 *pThresholdCfg); extern BOOLEAN sea2_DualCharacteristicPossible( int NumBoards); typedef enum { NUM_CHANNELS_0 =0, NUM_CHANNELS_1, NUM_CHANNELS_2, NUM_ILLEGAL_CHANNELS }NUM_COM_CHANNELS; typedef struct { UINT32 ValidSigMsgsRxd; UINT32 ErroredSigMsgsRxd; }CDIFF_ERROR_COUNTS ; typedef struct { UINT32 ErroredSeconds; UINT32 SeverelyErroredSeconds; UINT32 DegradedMinutes; } CDIFF_ERRORED_TIME; typedef enum { CD_APP_CHANNEL_1 = 0, CD_APP_CHANNEL_2, CD_APP_N_SIG_CHANNELS } CDIFF_CHANNEL; typedef enum ResultOfReconfigurationTag { NEW_TWO_ENDED_R1_R2 = 0, NEW_TWO_ENDED_L_R1 = 1, NEW_TWO_ENDED_L_R2 = 2, NEW_THREE_ENDED = 3, RELAY_IS_ALREADY_CONFIGURED = 4, RECONFIGURATION_SUCCESSFUL = 8, RECONFIGURATION_UNSUCCESSFUL = 12, RESTORE_SUCCESSFUL = 16, RESTORE_UNSUCCESSFUL = 20, REMOTE_RECONFIGURATION = 24, CONFIGURATION_ERROR = 28 } COMMON_RESULT_OF_RECONFIGURATION; typedef struct { REAL32 LengthMetres; REAL32 LineZ; REAL32 LineAngle; REAL32 ResCompFactor; REAL32 ResCompAngle; G37_ENUM MutualComp; REAL32 MutualCompFactor; REAL32 MutualCompAngle; } FLOC_SETTINGS; typedef struct { FLOC_SETTINGS Line_data; REAL32 MutualCutOff; G135_ENUM PhaseRotation; G102_ENUM TripMode; REAL32 ChargingAdmittance; REAL32 Start_V2_ZnegComp; } LINE_PARAMETERS; typedef struct { G408_ENUM DistEarthingMode; G129_ENUM Set_Mode; G130_ENUM Ph_chars; G131_ENUM Ph_Quad_Res; REAL32 Ph_FaultRes; G145_ENUM Z1_Ph_status; REAL32 Z1_ph_reach; G145_ENUM Z2_Ph_status; REAL32 Z2_ph_reach; G145_ENUM Z3_Ph_status; REAL32 Z3_ph_reach; G402_ENUM Z3_ph_Offset; REAL32 Z3_ph_offs_reach; G145_ENUM ZP_Ph_status; G403_ENUM ZP_ph_direction; REAL32 ZP_ph_reach; REAL32 ZP_ph_offs_reach; G145_ENUM ZQ_Ph_status; G403_ENUM ZQ_ph_direction; REAL32 ZQ_ph_reach; REAL32 ZQ_ph_offs_reach; G145_ENUM Z4_Ph_status; REAL32 Z4_ph_reach; G130_ENUM Gnd_chars; G131_ENUM Gnd_Quad_Res; REAL32 Gnd_FaultRes; G145_ENUM Z1_gnd_status; REAL32 Z1_gnd_reach; G145_ENUM Z2_gnd_status; REAL32 Z2_gnd_reach; G145_ENUM Z3_gnd_status; REAL32 Z3_gnd_reach; G402_ENUM Z3_gnd_Offset; REAL32 Z3_gnd_offs_reach; G145_ENUM ZP_gnd_status; G403_ENUM ZP_gnd_direction; REAL32 ZP_gnd_reach; REAL32 ZP_gnd_offs_reach; G145_ENUM ZQ_gnd_status; G403_ENUM ZQ_gnd_direction; REAL32 ZQ_gnd_reach; REAL32 ZQ_gnd_offs_reach; G145_ENUM Z4_gnd_status; REAL32 Z4_gnd_reach; G37_ENUM Security_filter; G142_ENUM CVT_Filters; UINT32 SIR_setting ; G37_ENUM LoadBlinders; REAL32 LoadB_Imp; REAL32 LoadB_Angle; REAL32 LoadB_UV; REAL32 Dist_Polarising; G37_ENUM Delta_Enable; G133_ENUM Delta_Status; REAL32 Delta_Char_Angle; REAL32 Delta_V_Fwd; REAL32 Delta_V_Rev; REAL32 Delta_I_Fwd; REAL32 Delta_I_Rev; G37_ENUM DistStubBusEnable; REAL32 DistStubBusCurrentSet; REAL32 DistStubBusTimeDelay; REAL32 PoledeadVoltage; }DISTANCE_SETUP; typedef struct { REAL32 Z1_Ph_Reach; REAL32 Z1_Ph_Angle; REAL32 Z1_Ph_Res; REAL32 Z1_Ph_Top_Line; REAL32 Z1_Ph_Sens; REAL32 Z2_Ph_Reach; REAL32 Z2_Ph_Angle; REAL32 Z2_Ph_Res; REAL32 Z2_Ph_Top_Line; REAL32 Z2_Ph_Sens; REAL32 Z3_Ph_Reach; REAL32 Z3_Ph_Angle; REAL32 Z3_Ph_Rev_Reach; REAL32 Z3_Ph_Res_Fwd; REAL32 Z3_Ph_Res_Rev; REAL32 Z3_Ph_Top_Line; REAL32 Z3_Ph_Sens; REAL32 ZP_Ph_Reach; REAL32 ZP_Ph_Angle; REAL32 ZP_Ph_Rev_Reach; REAL32 ZP_Ph_Res_Rev; REAL32 ZP_Ph_Res; REAL32 ZP_Ph_Top_Line; REAL32 ZP_Ph_Sens; REAL32 Z4_Ph_Reach; REAL32 Z4_Ph_Angle; REAL32 Z4_Ph_Res; REAL32 Z4_Ph_Top_Line; REAL32 Z4_Ph_Sens; REAL32 Z1_Gnd_Reach; REAL32 Z1_Gnd_Angle; G37_ENUM Z1_Gnd_Top_Line_Mode; REAL32 Z1_Gnd_Top_Line; REAL32 Z1_Res_Comp; REAL32 Z1_Res_Angle; REAL32 Z1_Mut_Comp; REAL32 Z1_Mut_Angle; REAL32 Z1_Gnd_Res; REAL32 Z1_Gnd_Sens; REAL32 Z2_Gnd_Reach; REAL32 Z2_Gnd_Angle; G37_ENUM Z2_Gnd_Top_Line_Mode; REAL32 Z2_Gnd_Top_Line; REAL32 Z2_Res_Comp; REAL32 Z2_Res_Angle; REAL32 Z2_Mut_Comp; REAL32 Z2_Mut_Angle; REAL32 Z2_Gnd_Res; REAL32 Z2_Gnd_Sens; REAL32 Z3_Gnd_Reach; REAL32 Z3_Gnd_Angle; REAL32 Z3_Gnd_Rev_Reach; G37_ENUM Z3_Gnd_Top_Line_Mode; REAL32 Z3_Gnd_Top_Line; REAL32 Z3_Res_Comp; REAL32 Z3_Res_Angle; REAL32 Z3_Mut_Comp; REAL32 Z3_Mut_Angle; REAL32 Z3_Gnd_Res_Fwd; REAL32 Z3_Gnd_Res_Rev; REAL32 Z3_Gnd_Sens; REAL32 ZP_Gnd_Reach; REAL32 ZP_Gnd_Angle; REAL32 ZP_Gnd_Rev_Reach; G37_ENUM ZP_Gnd_Top_Line_Mode; REAL32 ZP_Gnd_Top_Line; REAL32 ZP_Res_Comp; REAL32 ZP_Res_Angle; REAL32 ZP_Mut_Comp; REAL32 ZP_Mut_Angle; REAL32 ZP_Gnd_Res; REAL32 ZP_Gnd_Res_Rev; REAL32 ZP_Gnd_Sens; REAL32 Z4_Gnd_Reach; REAL32 Z4_Gnd_Angle; G37_ENUM Z4_Gnd_Top_Line_Mode; REAL32 Z4_Gnd_Top_Line; REAL32 Z4_Res_Comp; REAL32 Z4_Res_Angle; REAL32 Z4_Mut_Comp; REAL32 Z4_Mut_Angle; REAL32 Z4_Gnd_Res; REAL32 Z4_Gnd_Sens; UINT32 Dist_Mem_Duration; REAL32 ZQ_Ph_Reach; REAL32 ZQ_Ph_Angle; REAL32 ZQ_Ph_Rev_Reach; REAL32 ZQ_Ph_Res_Rev; REAL32 ZQ_Ph_Res; REAL32 ZQ_Ph_Top_Line; REAL32 ZQ_Ph_Sens; REAL32 ZQ_Gnd_Reach; REAL32 ZQ_Gnd_Angle; REAL32 ZQ_Gnd_Rev_Reach; G37_ENUM ZQ_Gnd_Top_Line_Mode; REAL32 ZQ_Gnd_Top_Line; REAL32 ZQ_Res_Comp; REAL32 ZQ_Res_Angle; REAL32 ZQ_Mut_Comp; REAL32 ZQ_Mut_Angle; REAL32 ZQ_Gnd_Res; REAL32 ZQ_Gnd_Res_Rev; REAL32 ZQ_Gnd_Sens; }DISTANCE_ELEMENTS; typedef struct { G137_ENUM Power_Swing; G407_ENUM Power_Swing_Mode; G132_ENUM Zone_1_Ph_PSB; G132_ENUM Zone_2_Ph_PSB; G132_ENUM Zone_3_Ph_PSB; G132_ENUM Zone_P_Ph_PSB; G132_ENUM Zone_4_Ph_PSB; G132_ENUM Zone_1_Gnd_PSB; G132_ENUM Zone_2_Gnd_PSB; G132_ENUM Zone_3_Gnd_PSB; G132_ENUM Zone_P_Gnd_PSB; G132_ENUM Zone_4_Gnd_PSB; G132_ENUM Zone_Q_Ph_PSB; G132_ENUM Zone_Q_Gnd_PSB; G37_ENUM PSB_Timeout; REAL32 PSB_TimeoutSet; REAL32 PSB_ResetDelay; G176_ENUM OST_Mode; REAL32 Inner_OST_Top_React; REAL32 Outer_OST_Top_React; REAL32 Inner_OST_Bottom_React; REAL32 Outer_OST_Bottom_React; REAL32 Inner_OST_Right_Resist; REAL32 Outer_OST_Right_Resist; REAL32 Inner_OST_Left_Resist; REAL32 Outer_OST_Left_Resist; REAL32 Resistive_Blinder_Angle; REAL32 OST_Detection_Timer; REAL32 OST_Delay; G37_ENUM PSB_Mode; REAL32 Inner_PSB_Top_React; REAL32 Outer_PSB_Top_React; REAL32 Inner_PSB_Bottom_React; REAL32 Outer_PSB_Bottom_React; REAL32 Inner_PSB_Right_Resist; REAL32 Outer_PSB_Right_Resist; REAL32 Inner_PSB_Left_Resist; REAL32 Outer_PSB_Left_Resist; REAL32 Alpha; REAL32 PSB_Detection_Timer; } POWER_SWING_BLOCKING; typedef struct { G49_ENUM DEF_Voltage_Pol_Input; G37_ENUM DEF_Status; G46_ENUM DEF_Polarising; REAL32 DEF_Char_Angle; REAL32 DEF_VNpol_Set; REAL32 DEF_V2pol_Set; REAL32 DEF_Forward_Threshold; REAL32 DEF_Reverse_Threshold; G37_ENUM DEF_Virtual_Current_Pol; } DIRECTIONAL_ELEMS; typedef struct Z1Xtag { G141_ENUM Z1_Ext_Status ; REAL32 Z1_Ext_Ph ; REAL32 Z1_Ext_Gnd ; }Z1_X; typedef struct { G37_ENUM Inrush_SupervisionEn; REAL32 SecondHarm; G37_ENUM WI_Inhibit; REAL32 WI_Thresh; }INRUSH_SETTINGS; typedef struct { G37_ENUM PhaseDiff ; REAL32 PhaseIs1; REAL32 PhaseIs2; REAL32 Phasek1; REAL32 Phasek2; REAL32 PhaseIs1_1; REAL32 PhaseIs2_1; REAL32 Phasek1_1; REAL32 Phasek2_1; G112_ENUM PhaseChar; REAL32 PhaseTimeDelay; REAL32 PhaseTMS; REAL32 PhaseTimeDial; REAL32 PIT_Time; REAL32 PhCTCorr; G164_ENUM ICompensation; REAL32 Susceptance; G194_ENUM InrushRestraint; REAL32 Kr; G108_ENUM VectorialComp; REAL32 PhaseIs1CTS; G183_ENUM PitISelection; REAL32 SecondHarmPct; G37_ENUM SecondHarmCross; G37_ENUM FifthHarm; REAL32 FifthHarmPct; G37_ENUM FifthHarmCross; G37_ENUM HighSetStatus; REAL32 IdHighSet; G410_ENUM AdvancedAppStatus; REAL32 DecayFactor; REAL32 ScaleFactor; G195_ENUM InDiffMode; REAL32 InDiffTime; REAL32 InDiffIs1; REAL32 InDiffIs2; REAL32 InDiffK1; REAL32 InDiffS1; REAL32 InDiffS2; REAL32 InDiffStabilityAngle; G37_ENUM StubBusEnable; REAL32 StubBusPhaseIs1; }DIFF_PROT; typedef struct { G167_ENUM Mode; REAL32 K_factor; REAL32 Stability_Angle; INT32 Gap_count; REAL32 Mod_Angle_Shift; G173_ENUM Dist_Permissive; G37_ENUM DEF_Permissive; G184_ENUM Comp_Mode; G37_ENUM Adaptive_Gap; G105_ENUM Phase_Select; G406_ENUM Delta_I2; REAL32 Delta_I2_low; REAL32 Delta_I2_high; G406_ENUM Delta_I1; REAL32 Delta_I1_low; REAL32 Delta_I1_high; G406_ENUM Start_I2; REAL32 Start_I2_low; REAL32 Start_I2_high; G406_ENUM Start_I1; REAL32 Start_I1_low; REAL32 Start_I1_high; G37_ENUM Start_V2; REAL32 Start_V2_low; REAL32 Start_V2_high; G169_ENUM Start_Dist_low; G169_ENUM Start_Dist_high; REAL32 Reset_Time_Low; REAL32 Reset_Time_High; G172_ENUM Trans_Start; G37_ENUM Trans_Delta_I2; REAL32 Trans_Delta_I2_low; REAL32 Trans_Delta_I2_high; G37_ENUM Trans_Delta_I1; REAL32 Trans_Delta_I1_low; REAL32 Trans_Delta_I1_high; G37_ENUM Trans_Start_I2; REAL32 Trans_Start_I2_low; REAL32 Trans_Start_I2_high; G37_ENUM Trans_Start_I1; REAL32 Trans_Start_I1_low; REAL32 Trans_Start_I1_high; G37_ENUM Trans_Start_V2; REAL32 Trans_Start_V2_low; REAL32 Trans_Start_V2_high; G169_ENUM Trans_Start_Dist_low; G169_ENUM Trans_Start_Dist_high; REAL32 Trans_Reset_Time_Low; REAL32 Trans_Reset_Time_High; REAL32 Trans_Start_PU; REAL32 Trans_Start_DO; }PHASE_CMP; typedef struct { G146_ENUM Status; G153_ENUM CTSDiffStatus; G69_ENUM CTSDiffResetMode; REAL32 CTSDiffTimeDelay; REAL32 VNInhibit; REAL32 INSet; REAL32 CTSDiffI1; REAL32 CTSDiff_I2_I1L; REAL32 CTSDiff_I2_I1H; } CTS_SETTINGS; typedef struct { G7_ENUM PhDiffSupervision; G69_ENUM DiffSupervisionReset; REAL32 PhaseIsup1; REAL32 PhaseIsup2; REAL32 SupervnTimeDelay; } DIFF_SUPERVISION; typedef struct { G37_ENUM InterMicomPlus; G101_ENUM SchemeSetUp; G103_ENUM Address1; G103_ENUM Address2 ; G143_ENUM CommMode; G104_ENUM BaudRate1; G104_ENUM BaudRate2; G105_ENUM ClkSource1; G105_ENUM ClkSource2; G144_ENUM MultiChannels1; G144_ENUM MultiChannels2; REAL32 Delay_Tol; REAL32 ChannelFailAlarm; G168_ENUM CommFailMode; G110_ENUM GPS_sync; REAL32 CharModTime; G109_ENUM Reconfig; REAL32 ChannelTimeout; REAL32 AlarmLevel; G37_ENUM Prop_Delay_Stats; REAL32 MaxCh1PropDel; REAL32 MaxCh2PropDel; G37_ENUM TxRx_Time_Stats; REAL32 MaxCh1TxRxTime; REAL32 MaxCh2TxRxTime; G209_ENUM CmdType1; G215_ENUM FallBack1; UINT32 DefaultValue1; G209_ENUM CmdType2; G215_ENUM FallBack2; UINT32 DefaultValue2; G209_ENUM CmdType3; G215_ENUM FallBack3; UINT32 DefaultValue3; G209_ENUM CmdType4; G215_ENUM FallBack4; UINT32 DefaultValue4; G209_ENUM CmdType5; G215_ENUM FallBack5; UINT32 DefaultValue5; G209_ENUM CmdType6; G215_ENUM FallBack6; UINT32 DefaultValue6; G209_ENUM CmdType7; G215_ENUM FallBack7; UINT32 DefaultValue7; G209_ENUM CmdType8; G215_ENUM FallBack8; UINT32 DefaultValue8; G37_ENUM CharModEx; REAL32 CharModExTime; G149_ENUM LoopBackMode; }FIBRECOM; typedef struct CdProtTag { DISTANCE_SETUP DistSetup; DISTANCE_ELEMENTS DistElems; DIRECTIONAL_ELEMS DirElems; POWER_SWING_BLOCKING PSB; Z1_X z1_x; LINE_PARAMETERS LineParams; PHASE_CMP PhaseComp; INRUSH_SETTINGS Inrush; CTS_SETTINGS CTS; DIFF_SUPERVISION cdiff_sup; DIFF_PROT cdiff; } COMMON_SETTINGS; typedef struct { UINT8 NominalFreq; UINT8 CT_rating_ABC; G405_ENUM VT2_Allocation; UINT8 CT_rating_M; NUM_COM_CHANNELS num_channels; G163_ENUM CT_Direction; G163_ENUM CT2_Direction; G163_ENUM CT_IM_Direction; REAL32 NorminalVolt; }COMPENSATION_DATA; typedef struct PhaseCfgTag { G37_ENUM Cnf_ExTransAlarm; REAL32 Cnf_ExDelay; G37_ENUM Cnf_ChannelTest; REAL32 Cnf_TestTime; REAL32 Cnf_RetryTime; UINT16 Cnf_NoOfRetry; REAL32 Cnf_DiscrimTime; G182_ENUM Cnf_FSIOThres; G179_ENUM Cnf_ComTest_PropTestStatus; } PHASECONFIG_SETTINGS; typedef struct protCfgTag{ COMPENSATION_DATA comp; PHASECONFIG_SETTINGS Phase_Config; G37_ENUM Distance_Enable; G37_ENUM DEF_Enable; G37_ENUM PSB_Enable; G37_ENUM Static_Test_Enable; G37_ENUM CDiff_Enable ; G37_ENUM Supervision; G37_ENUM PhaseComp_Enable; G11_ENUM VT_Conected; FIBRECOM FibreCOM; }PROT_CONFIG_SETTINGS; typedef struct ProtTag{ COMMON_SETTINGS prot; PROT_CONFIG_SETTINGS config; } COP_PROT_SET; typedef struct { unsigned int powerswingblk :1; unsigned int phase_Sel_A :1; unsigned int phase_Sel_B :1; unsigned int phase_Sel_C :1; unsigned int phase_Sel_N :1; unsigned int phase_Sel_2 :1; unsigned int phase_Sel_5 :1; unsigned int phase_Sel_hld :1; unsigned int DEF_Forward :1; unsigned int DEF_Reverse :1; unsigned int DEL_AN_Fwd : 1; unsigned int DEL_BN_Fwd : 1; unsigned int DEL_CN_Fwd : 1; unsigned int DEL_AB_Fwd : 1; unsigned int DEL_BC_Fwd : 1; unsigned int DEL_CA_Fwd : 1; unsigned int DEL_AN_Rev : 1; unsigned int DEL_BN_Rev : 1; unsigned int DEL_CN_Rev : 1; unsigned int DEL_AB_Rev : 1; unsigned int DEL_BC_Rev : 1; unsigned int DEL_CA_Rev : 1; unsigned int sch_DEL_AN_Fwd : 1; unsigned int sch_DEL_BN_Fwd : 1; unsigned int sch_DEL_CN_Fwd : 1; unsigned int sch_DEL_AB_Fwd : 1; unsigned int sch_DEL_BC_Fwd : 1; unsigned int sch_DEL_CA_Fwd : 1; unsigned int sch_DEL_AN_Rev : 1; unsigned int sch_DEL_BN_Rev : 1; unsigned int sch_DEL_CN_Rev : 1; unsigned int sch_DEL_AB_Rev : 1; unsigned int sch_DEL_BC_Rev : 1; unsigned int sch_DEL_CA_Rev : 1; unsigned int sch_Zone1_AN : 1; unsigned int sch_Zone1_BN : 1; unsigned int sch_Zone1_CN : 1; unsigned int sch_Zone1_AB : 1; unsigned int sch_Zone1_BC : 1; unsigned int sch_Zone1_CA : 1; unsigned int sch_Zone2_AN : 1; unsigned int sch_Zone2_BN : 1; unsigned int sch_Zone2_CN : 1; unsigned int sch_Zone2_AB : 1; unsigned int sch_Zone2_BC : 1; unsigned int sch_Zone2_CA : 1; unsigned int sch_Zone3_AN : 1; unsigned int sch_Zone3_BN : 1; unsigned int sch_Zone3_CN : 1; unsigned int sch_Zone3_AB : 1; unsigned int sch_Zone3_BC : 1; unsigned int sch_Zone3_CA : 1; unsigned int sch_ZoneP_AN : 1; unsigned int sch_ZoneP_BN : 1; unsigned int sch_ZoneP_CN : 1; unsigned int sch_ZoneP_AB : 1; unsigned int sch_ZoneP_BC : 1; unsigned int sch_ZoneP_CA : 1; unsigned int sch_Zone4_AN : 1; unsigned int sch_Zone4_BN : 1; unsigned int sch_Zone4_CN : 1; unsigned int sch_Zone4_AB : 1; unsigned int sch_Zone4_BC : 1; unsigned int sch_Zone4_CA : 1; unsigned int Zone1_AN : 1; unsigned int Zone1_BN : 1; unsigned int Zone1_CN : 1; unsigned int Zone1_AB : 1; unsigned int Zone1_BC : 1; unsigned int Zone1_CA : 1; unsigned int Zone2_AN : 1; unsigned int Zone2_BN : 1; unsigned int Zone2_CN : 1; unsigned int Zone2_AB : 1; unsigned int Zone2_BC : 1; unsigned int Zone2_CA : 1; unsigned int Zone3_AN : 1; unsigned int Zone3_BN : 1; unsigned int Zone3_CN : 1; unsigned int Zone3_AB : 1; unsigned int Zone3_BC : 1; unsigned int Zone3_CA : 1; unsigned int ZoneP_AN : 1; unsigned int ZoneP_BN : 1; unsigned int ZoneP_CN : 1; unsigned int ZoneP_AB : 1; unsigned int ZoneP_BC : 1; unsigned int ZoneP_CA : 1; unsigned int Zone4_AN : 1; unsigned int Zone4_BN : 1; unsigned int Zone4_CN : 1; unsigned int Zone4_AB : 1; unsigned int Zone4_BC : 1; unsigned int Zone4_CA : 1; unsigned int ZoneV_AN : 1; unsigned int ZoneV_BN : 1; unsigned int ZoneV_CN : 1; unsigned int ZoneV_AB : 1; unsigned int ZoneV_BC : 1; unsigned int ZoneV_CA : 1; unsigned int PSD : 1; unsigned int PSB_fault : 1; unsigned int z1_block : 1; unsigned int z2_block : 1; unsigned int z3_block : 1; unsigned int zP_block : 1; unsigned int z4_block : 1; unsigned int second_harmA : 1; unsigned int second_harmB : 1; unsigned int second_harmC : 1; unsigned int second_harmN : 1; unsigned int fourth_harmA : 1; unsigned int fourth_harmB : 1; unsigned int fourth_harmC : 1; unsigned int fifth_harmA : 1; unsigned int fifth_harmB : 1; unsigned int fifth_harmC : 1; unsigned int mem_valid : 1; unsigned int polarising : 1; unsigned int PH_FROZEN : 1; unsigned int PH_TWO_CYCLE : 1; unsigned int PH_FIVE_CYCLE : 1; unsigned int Ldbn : 1; unsigned int WI_I0_I2 : 1; unsigned int UCos_A : 1; unsigned int UCos_B : 1; unsigned int UCos_C : 1; unsigned int UCos_N : 1; unsigned int Ucos_pos_for : 1; unsigned int Ucos_pos_rev : 1; unsigned int Ucos_neg_for : 1; unsigned int Ucos_neg_rev : 1; unsigned int DiffTrip_A:1; unsigned int DiffTrip_B:1; unsigned int DiffTrip_C:1; unsigned int DiffTrip_N:1; unsigned int DiffStart_A:1; unsigned int DiffStart_B:1; unsigned int DiffStart_C:1; unsigned int DiffStart_N:1; unsigned int NeutCompStart:1; unsigned int HighDiffStart_A:1; unsigned int HighDiffStart_B:1; unsigned int HighDiffStart_C:1; unsigned int DiffInterTrip_A:1; unsigned int DiffInterTrip_B:1; unsigned int DiffInterTrip_C:1; unsigned int DiffInterTrip_N:1; unsigned int Ih2RemBlk_A:1; unsigned int Ih2RemBlk_B:1; unsigned int Ih2RemBlk_C:1; unsigned int Ih5RemBlk_A:1; unsigned int Ih5RemBlk_B:1; unsigned int Ih5RemBlk_C:1; unsigned int DistStubBusStart_A:1; unsigned int DistStubBusStart_B:1; unsigned int DistStubBusStart_C:1; unsigned int DistStubBusTrip_A:1; unsigned int DistStubBusTrip_B:1; unsigned int DistStubBusTrip_C:1; unsigned int GPS_Detected_Local:1; unsigned int GPS_Detected_Rem_1:1; unsigned int GPS_Detected_Rem_2:1; unsigned int PermissiveIntertrip : 1 ; unsigned int ProtSigfailure_Ch1Rx : 1 ; unsigned int ProtSigfailure_Ch2Rx : 1 ; unsigned int ProtSigfailure_Ch1Tx : 1 ; unsigned int ProtSigfailure_Ch2Tx : 1 ; unsigned int Sigfailure : 1 ; unsigned int Diff_prot_failure:1; unsigned int Propdelay_alarm_Ch1: 1 ; unsigned int Propdelay_alarm_Ch2: 1 ; unsigned int GPSFailure_Ch1: 1 ; unsigned int GPSFailure_Ch2: 1 ; unsigned int CurrentDiff_Inhibited: 1 ; unsigned int SRAM_fail:1; unsigned int Predictive_Ost_Trip : 1; unsigned int Ost_Trip : 1; unsigned int Start_Z5 :1; unsigned int Start_Z6 :1; unsigned int Start_Z7 : 1; unsigned int Start_Z8 : 1; unsigned int SlowPowerSwing : 1; unsigned int QuarterCycleOverVoltagePhA : 1; unsigned int QuarterCycleOverVoltagePhB : 1; unsigned int QuarterCycleOverVoltagePhC : 1; unsigned int delta_I2_Lo :1; unsigned int delta_I1_Lo :1; unsigned int start_I2_Lo :1; unsigned int start_I1_Lo :1; unsigned int delta_I2_Hi :1; unsigned int delta_I1_Hi :1; unsigned int start_I2_Hi :1; unsigned int start_I1_Hi :1; unsigned int start_V2_Lo :1; unsigned int start_V2_Hi :1; unsigned int distance_Ph_Z2_Lo :1; unsigned int distance_Ph_Z2_Hi :1; unsigned int distance_Ph_Z3_Lo :1; unsigned int distance_Ph_Z3_Hi :1; unsigned int distance_Ph_Z4_Lo :1; unsigned int distance_Ph_Z4_Hi :1; unsigned int distance_Ph_Zp_Lo :1; unsigned int distance_Ph_Zp_Hi :1; unsigned int distance_Gnd_Z2_Lo :1; unsigned int distance_Gnd_Z2_Hi :1; unsigned int distance_Gnd_Z3_Lo :1; unsigned int distance_Gnd_Z3_Hi :1; unsigned int distance_Gnd_Z4_Lo :1; unsigned int distance_Gnd_Z4_Hi :1; unsigned int distance_Gnd_Zp_Lo :1; unsigned int distance_Gnd_Zp_Hi :1; unsigned int ex_trans_alarm :1; unsigned int ph_comp_trip :1; unsigned int Phcmp_Trip_A :1; unsigned int Phcmp_Trip_B :1; unsigned int Phcmp_Trip_C :1; unsigned int Phcmp_Trip_3Ph :1; unsigned int Permitted_PhCmpTrip :1; unsigned int unstabilised :1; unsigned int prop_val_change :1; unsigned int prop_delay_fail :1; unsigned int stability_tst_fail :1; unsigned int stability_tst_pass :1; unsigned int prop_power_down: 1; unsigned int ex_lock_cleared: 1; unsigned int trans_start_enabled :1; unsigned int comm_block :1; unsigned int Idiff_sup_Start :1; unsigned int Idiff_sup_Alarm :1; unsigned int IDiff_Supv_Reset_Ack :1; unsigned int sch_ZoneQ_AN : 1; unsigned int sch_ZoneQ_BN : 1; unsigned int sch_ZoneQ_CN : 1; unsigned int sch_ZoneQ_AB : 1; unsigned int sch_ZoneQ_BC : 1; unsigned int sch_ZoneQ_CA : 1; unsigned int ZoneQ_AN : 1; unsigned int ZoneQ_BN : 1; unsigned int ZoneQ_CN : 1; unsigned int ZoneQ_AB : 1; unsigned int ZoneQ_BC : 1; unsigned int ZoneQ_CA : 1; unsigned int zQ_block : 1; unsigned int distance_Ph_Zq_Lo :1; unsigned int distance_Ph_Zq_Hi :1; unsigned int distance_Gnd_Zq_Lo :1; unsigned int distance_Gnd_Zq_Hi :1; }PROT_BITS; typedef union { PROT_BITS prot_bits; UINT32 Compact_bits[(sizeof(PROT_BITS)/sizeof(UINT32))]; }PROT; typedef union { struct { unsigned int com_data1 :1; unsigned int com_data2 :1; unsigned int com_data3 :1; unsigned int com_data4 :1; unsigned int com_data5 :1; unsigned int com_data6 :1; unsigned int com_data7 :1; unsigned int com_data8 :1; unsigned int com_data9 :1; unsigned int com_data10 :1; unsigned int com_data11 :1; unsigned int com_data12 :1; unsigned int com_data13 :1; unsigned int com_data14 :1; unsigned int com_data15 :1; unsigned int com_data16 :1; unsigned int com_init :1; unsigned int wrong_num_channels :1; unsigned int channel_A_fail : 1; unsigned int channel_B_fail : 1; unsigned int channel_A_Timeout : 1; unsigned int channel_B_Timeout : 1; unsigned int channel_A_degraded : 1; unsigned int channel_B_degraded : 1; unsigned int channel_A_pass_through : 1; unsigned int channel_B_pass_through : 1; unsigned int channel_A_LoopBack : 1; unsigned int channel_B_LoopBack : 1; unsigned int Compatibility:1; }comms; UINT32 IMData; }COMMSUNION; typedef struct { REAL32 IA_Mag_Local ; REAL32 IA_Phase_Local ; REAL32 IB_Mag_Local ; REAL32 IB_Phase_Local ; REAL32 IC_Mag_Local ; REAL32 IC_Phase_Local ; REAL32 IA_Mag_Remote_1 ; REAL32 IA_Phase_Remote_1 ; REAL32 IB_Mag_Remote_1 ; REAL32 IB_Phase_Remote_1 ; REAL32 IC_Mag_Remote_1 ; REAL32 IC_Phase_Remote_1 ; REAL32 IA_Mag_Remote_2 ; REAL32 IA_Phase_Remote_2 ; REAL32 IB_Mag_Remote_2 ; REAL32 IB_Phase_Remote_2 ; REAL32 IC_Mag_Remote_2 ; REAL32 IC_Phase_Remote_2 ; REAL32 IA_Diff_Mag; REAL32 IB_Diff_Mag; REAL32 IC_Diff_Mag; REAL32 IA_Bias_Mag; REAL32 IB_Bias_Mag; REAL32 IC_Bias_Mag; REAL32 IN_Mag_Local; REAL32 IN_Phase_Local; REAL32 IN_Mag_Remote_1; REAL32 IN_Phase_Remote_1; REAL32 IN_Mag_Remote_2; REAL32 IN_Phase_Remote_2; REAL32 IN_Diff_Mag; REAL32 Max_IBias_Mag; UINT32 ValidityFlags; }cdiff_meas; typedef struct { unsigned int channel_B_IEEE_LSg:1; unsigned int channel_B_yellow:1; unsigned int channel_B_IEEE_N:1; unsigned int channel_A_IEEE_LSg:1; unsigned int channel_A_yellow:1; unsigned int channel_A_IEEE_N:1; unsigned int channel_B_RX:1; unsigned int channel_B_TX:1; unsigned int channel_B_LocalGPS:1; unsigned int channel_B_RemoteGPS:1; unsigned int channel_B_MUX_CLK:1; unsigned int channel_A_RX:1; unsigned int channel_A_TX:1; unsigned int channel_A_LocalGPS:1; unsigned int channel_A_RemoteGPS:1; unsigned int channel_A_MUX_CLK:1; unsigned int channel_A_Freq_OR:1; unsigned int channel_B_Freq_OR:1; unsigned int channel_A_SchemeFail:1; unsigned int channel_B_SchemeFail:1; unsigned int Incompatible_Rel:1 ; unsigned int Incompatible_mess:1; }COMMS_OTHER_ERRORS; typedef struct { UINT32 Comms_Stats; REAL32 CommA_Delay; REAL32 CommB_Delay; cdiff_meas CDiffMeas; REAL32 Prop_Del_Ch1_Rx; REAL32 Prop_Del_Ch1_Tx; REAL32 Prop_Del_Ch2_Rx; REAL32 Prop_Del_Ch2_Tx; REAL32 I_2H_Mag; }FIBRE_MEAS; typedef struct { REAL32 IA_Comp_Mag; REAL32 IA_Comp_Phase; REAL32 IB_Comp_Mag; REAL32 IB_Comp_Phase; REAL32 IC_Comp_Mag; REAL32 IC_Comp_Phase; }PhaseComp_Meas; typedef struct { REAL32 prop_delay; REAL32 LocalSym; REAL32 RemSym; REAL32 localDelay; UINT32 FailCount; REAL32 I1_Comp_Mag; REAL32 I1_Comp_Ang; REAL32 I2_Comp_Mag; REAL32 I2_Comp_Ang; UINT32 ValidityFlags; }PHCMP_COMMS; typedef struct iface_tag { struct { UINT32 error_code; }error; struct { unsigned int got_stg1_settings : 1; unsigned int got_stg2_settings : 1; unsigned int got_stg3_settings : 1; unsigned int got_config_settings : 1; unsigned int Prop_Dela_Ack :1; }ACK_Flags; PROT prot; PROT prot_inv; COMMSUNION commsUnion; COMMSUNION commsUnion_Inv; COMMS_OTHER_ERRORS comms_other_errors; FIBRE_MEAS fibre_meas; struct { COMMON_RESULT_OF_RECONFIGURATION res_Reconfig; unsigned int CTSLevelDetector :18; }cdiff_out; } COP_IFACE; typedef struct { unsigned int TOC_active :1; unsigned int Pole_Dead_A :1; unsigned int Pole_Dead_B :1; unsigned int Pole_Dead_C :1; unsigned int Freq_OR :1; unsigned int Activate_ZX :1; unsigned int CurrentDiff_Inhibit: 1 ; unsigned int NeutralDiff_Inhibit: 1 ; unsigned int permissive_inttrip:1; unsigned int stub_bus_enabled :1; unsigned int CTS_Block_Diff :1; unsigned int CTS_restraint :1; unsigned int reconfig_command:3; unsigned int reconfig_interlock :1; unsigned int Enable_OnCh_fail:1; unsigned int signaling_failure :1; unsigned int plc_ex_trans_alarm :1; unsigned int block_phase_comp :1; unsigned int block_plc :1; unsigned int block_auto_channel_test :1; unsigned int Reset_DeltaHiStart :1; unsigned int block_delta :1; unsigned int Unstabilise :1; unsigned int block_I2 :1; unsigned int set_trans_start :1; unsigned int cont_man_test :1; unsigned int VTS_block :1; unsigned int CTS_block :1; unsigned int UnderCurrentA :1; unsigned int UnderCurrentB :1; unsigned int UnderCurrentC :1; unsigned int UnderVoltageA :1; unsigned int UnderVoltageB :1; unsigned int UnderVoltageC :1; unsigned int CBOpen :1; unsigned int BlockStartPhZ2 :1; unsigned int BlockStartPhZ3 :1; unsigned int BlockStartPhZ4 :1; unsigned int BlockStartPhZP :1; unsigned int BlockStartGndZ2 :1; unsigned int BlockStartGndZ3 :1; unsigned int BlockStartGndZ4 :1; unsigned int BlockStartGndZP :1; unsigned int PhCmpTripMutePLC :1; unsigned int CommissioningCdiffInhibit : 1; unsigned int Prop_Dela_Eq :1; unsigned int comm_bit1 : 1; unsigned int comm_bit2 : 1; unsigned int comm_bit3 : 1; unsigned int comm_bit4 : 1; unsigned int comm_bit5 : 1; unsigned int comm_bit6 : 1; unsigned int comm_bit7 : 1; unsigned int comm_bit8 : 1; unsigned int comm_bit9 : 1; unsigned int comm_bit10 : 1; unsigned int comm_bit11 : 1; unsigned int comm_bit12 : 1; unsigned int comm_bit13 : 1; unsigned int comm_bit14 : 1; unsigned int comm_bit15 : 1; unsigned int comm_bit16 : 1; unsigned int Inhibit_Predictive_Ost_Trip : 1; unsigned int Inhibit_Ost_Trip : 1; unsigned int CTS_Indication : 1; unsigned int BlockStartPhZQ :1; unsigned int BlockStartGndZQ :1; }DDB_BITS; typedef union { DDB_BITS ddb_bits; UINT32 ddb_compact[(sizeof(DDB_BITS)/sizeof(UINT32))]; }DDB_UNION; typedef struct { unsigned int do_prop_delay: 1; unsigned int do_stability_test :1; unsigned int reset_ex_lock:1; unsigned int master_slave_changed:1; }PHCMP_COMMANDS; typedef struct { unsigned int prop_status :1; unsigned int prop_val_ack:1 ; unsigned int prop_fail_ack:1; unsigned int prop_power_up:1; unsigned int VTLocatin :1; unsigned int CBOpen_or_dead :1; }PHCMP_EXTRA; typedef struct ifacemp_tag { struct { unsigned int Comp_change:1; unsigned int Prot_change_1:1; unsigned int Prot_change_2:1; unsigned int Prot_change_3:1; unsigned int rel_power_up:1; unsigned int config_changed:1; }change_flags; DDB_UNION ddb ; DDB_UNION ddb_inv; struct { UINT32 TestPattern1; UINT32 TestPattern2; unsigned int ForceInternalLoopBack:1; } LoopBackComms; struct { REAL32 Frequency; UINT32 prop_delay; UINT32 rem_sym; UINT32 loc_sym; UINT32 loc_delay; UINT32 fail_count; }meas; UINT32 config_checksum; UINT32 Settings_checksum; PHCMP_COMMANDS phcmp_commands; PHCMP_EXTRA phcmp_extra; unsigned int IDiff_Supv_Reset:1; } MP_IFACE; typedef struct { COP_IFACE copro; BOOLEAN MainPro_Busy_Flag; BOOLEAN Copro_control_flag; BOOLEAN Main_control_flag; MP_IFACE mainpro; BOOLEAN IDiffSup_fromBBRAM; }IFACE; typedef struct { BOOLEAN FaultLocEnabled; BOOLEAN FaultLocValid; REAL32 FaultLocMetre; REAL32 FaultLocOhms; REAL32 FaultLocPercent; REAL32 FaultLocMiles; REAL32 PhA_PreFaultIMag; REAL32 PhA_PreFaultIAng; REAL32 PhB_PreFaultIMag; REAL32 PhB_PreFaultIAng; REAL32 PhC_PreFaultIMag; REAL32 PhC_PreFaultIAng; REAL32 PhN_PreFaultIMag; REAL32 PhN_PreFaultIAng; REAL32 PhM_PreFaultIMag; REAL32 PhM_PreFaultIAng; REAL32 PhA_PreFaultVMag; REAL32 PhA_PreFaultVAng; REAL32 PhB_PreFaultVMag; REAL32 PhB_PreFaultVAng; REAL32 PhC_PreFaultVMag; REAL32 PhC_PreFaultVAng; REAL32 PhN_PreFaultVMag; REAL32 PhN_PreFaultVAng; REAL32 PhA_PostFaultIMag; REAL32 PhA_PostFaultIAng; REAL32 PhB_PostFaultIMag; REAL32 PhB_PostFaultIAng; REAL32 PhC_PostFaultIMag; REAL32 PhC_PostFaultIAng; REAL32 PhN_PostFaultIMag; REAL32 PhN_PostFaultIAng; REAL32 PhM_PostFaultIMag; REAL32 PhM_PostFaultIAng; REAL32 PhA_PostFaultVMag; REAL32 PhA_PostFaultVAng; REAL32 PhB_PostFaultVMag; REAL32 PhB_PostFaultVAng; REAL32 PhC_PostFaultVMag; REAL32 PhC_PostFaultVAng; REAL32 PhN_PostFaultVMag; REAL32 PhN_PostFaultVAng; REAL32 FltV1CompRemMag; REAL32 FltV1CompRemAng; cdiff_meas FCDiffMeas; FIBRE_MEAS FCDiffFibreMeas; UINT32 ArSequenceCount; G180_ENUM OVMeasMode; G47_ENUM UVMeasMode; BOOLEAN FaultDataValid; BOOLEAN FaultCdiff; BOOLEAN FaultCompOV; cdiff_meas FCDiffMeas_at_trip; } FAULT_DATA_X; typedef enum CS103TYPMTag { CS103_TYP_M_TTMSG = 1, CS103_TYP_M_TTMSGRELTIME = 2, CS103_TYP_M_MEAS1 = 3, CS103_TYP_M_TTMEASRELTIME = 4, CS103_TYP_M_IDENTIFICATION = 5, CS103_TYP_M_TIMESYNC = 6, CS103_TYP_M_GITERMINATION = 8, CS103_TYP_M_MEAS2 = 9, CS103_TYP_M_GENERICDATA = 10, CS103_TYP_M_GENERICID = 11, CS103_TYP_M_LISTDISTURBS = 23, CS103_TYP_M_RDYTXDISTDATA = 26, CS103_TYP_M_RDYTXCHANNEL = 27, CS103_TYP_M_RDYTXTAGS = 28, CS103_TYP_M_TXTAGS = 29, CS103_TYP_M_TXDISTVALS = 30, CS103_TYP_M_ENDTX = 31, CS103_TYP_M_SBO_CMD = 46, CS103_TYP_M_SBO_POS_INFO = 68, CS103_TYP_M_SBO_INTERLOCK = 72 } CS103_TYP_M; typedef enum CS103TYPCTag { CS103_TYP_C_TIMESYNC = 6, CS103_TYP_C_GI = 7, CS103_TYP_C_GENERICDATA = 10, CS103_TYP_C_GENERALCMD = 20, CS103_TYP_C_GENERICCMD = 21, CS103_TYP_C_ORDERDISTDATATX = 24, CS103_TYP_C_ACKDISTDATATX = 25, CS103_TYP_C_SBO_CMD = 46 } CS103_TYP_C; typedef struct CS103VarStructQualifierTag { UINT8 Number; UINT8 SQ; } CS103_VAR_STRUCT_QUALIFIER; typedef enum CS103CoTMTag { CS103_COT_M_SPONTANEOUS = 1, CS103_COT_M_CYCLIC = 2, CS103_COT_M_RESETFCB = 3, CS103_COT_M_RESETCU = 4, CS103_COT_M_STARTRESTART = 5, CS103_COT_M_POWERON = 6, CS103_COT_M_TESTMODE = 7, CS103_COT_M_TIMESYNCH = 8, CS103_COT_M_GI = 9, CS103_COT_M_GITERM = 10, CS103_COT_M_LOCALOP = 11, CS103_COT_M_REMOTEOP = 12, CS103_COT_M_CMDACK = 20, CS103_COT_M_CMDNACK = 21, CS103_COT_M_DISTDATA = 31, CS103_COT_M_GENWRITEACK = 40, CS103_COT_M_GENWRITENACK = 41, CS103_COT_M_GENREADVALID = 42, CS103_COT_M_GENREADINVALID = 43, CS103_COT_M_GENWRITECONFIRM = 44, CS103_COT_M_SBO_DEACT_ACK = 65, CS103_COT_M_SBO_DEACT_NAK = 66, CS103_COT_M_SBO_TERM_ACK = 67, CS103_COT_M_SBO_TERM_NAK = 68 } CS103_COT_M; typedef enum CS103CoTCTag { CS103_COT_C_TIMESYNCH = 8, CS103_COT_C_GISTART = 9, CS103_COT_C_GENERALCMD = 20, CS103_COT_C_DISTDATA = 31, CS103_COT_C_GENERICWRITE = 40, CS103_COT_C_GENERICREAD = 42, CS103_COT_C_SBO_DEACT = 64 } CS103_COT_C; typedef UINT8 CS103_ADDRESS; typedef union { CS103_TYP_C Control; CS103_TYP_M Monitor; } CS103_TYP; typedef union { CS103_COT_C Control; CS103_COT_M Monitor; } CS103_COT; typedef struct CS103DUITag { CS103_TYP TypeID; CS103_VAR_STRUCT_QUALIFIER Qualifier; CS103_COT COT; CS103_ADDRESS CommonAddress; } CS103_DUI; typedef enum CS103FUNTag { CS103_FUN_DISTANCE = 128, CS103_FUN_OVERCURRENT = 160, CS103_FUN_TRANSDIFF = 176, CS103_FUN_LINEDIFF = 192, CS103_FUN_GENERIC = 254, CS103_FUN_GLOBAL = 255 } CS103_FUN; typedef enum CS103INFMTag { CS103_INF_M_GIEND = 0, CS103_INF_M_TIMESYNC = 0, CS103_INF_M_RESETFCB = 2, CS103_INF_M_RESETCU = 3, CS103_INF_M_STARTRESTART = 4, CS103_INF_M_POWERON = 5, CS103_INF_M_AUTORECLOSER = 16, CS103_INF_M_TELEPROT = 17, CS103_INF_M_PROTECTION = 18, CS103_INF_M_LEDRESET = 19, CS103_INF_M_MONITORBLK = 20, CS103_INF_M_TESTMODE = 21, CS103_INF_M_LOCALPARAM = 22, CS103_INF_M_CHARAC1 = 23, CS103_INF_M_CHARAC2 = 24, CS103_INF_M_CHARAC3 = 25, CS103_INF_M_CHARAC4 = 26, CS103_INF_M_AUXIP1 = 27, CS103_INF_M_AUXIP2 = 28, CS103_INF_M_AUXIP3 = 29, CS103_INF_M_AUXIP4 = 30, CS103_INF_M_MEASSUP1 = 32, CS103_INF_M_MEASSUP2 = 33, CS103_INF_M_PHSEQSUP = 35, CS103_INF_M_TRIPCCTSUP = 36, CS103_INF_M_OCBACKUP = 37, CS103_INF_M_VTFUSEFAIL = 38, CS103_INF_M_TELEPROTDIS = 39, CS103_INF_M_GRPWARNING = 46, CS103_INF_M_GRPALARM = 47, CS103_INF_M_EFL1 = 48, CS103_INF_M_EFL2 = 49, CS103_INF_M_EFL3 = 50, CS103_INF_M_EFFWD = 51, CS103_INF_M_EFREV = 52, CS103_INF_M_STPUL1 = 64, CS103_INF_M_STPUL2 = 65, CS103_INF_M_STPUL3 = 66, CS103_INF_M_STPUN = 67, CS103_INF_M_GENTRIP = 68, CS103_INF_M_TRIPL1 = 69, CS103_INF_M_TRIPL2 = 70, CS103_INF_M_TRIPL3 = 71, CS103_INF_M_TRIPOCBACKUP = 72, CS103_INF_M_FAULTLOCX = 73, CS103_INF_M_FAULTFWD = 74, CS103_INF_M_FAULTREV = 75, CS103_INF_M_TELEPROTTX = 76, CS103_INF_M_TELEPROTRX = 77, CS103_INF_M_ZONE1 = 78, CS103_INF_M_ZONE2 = 79, CS103_INF_M_ZONE3 = 80, CS103_INF_M_ZONE4 = 81, CS103_INF_M_ZONE5 = 82, CS103_INF_M_ZONE6 = 83, CS103_INF_M_GENSTPU = 84, CS103_INF_M_BREAKERFAIL = 85, CS103_INF_M_TMEASSYSL1 = 86, CS103_INF_M_TMEASSYSL2 = 87, CS103_INF_M_TMEASSYSL3 = 88, CS103_INF_M_TMEASSYSE = 89, CS103_INF_M_TRIPPHLS = 90, CS103_INF_M_TRIPPHHS = 91, CS103_INF_M_TRIPEFLS = 92, CS103_INF_M_TRIPEFHS = 93, CS103_INF_M_BAY_INTERLOCK = 115, CS103_INF_M_STN_INTERLOCK = 116, CS103_INF_M_CBONBYAR = 128, CS103_INF_M_CBONBYLTAR = 129, CS103_INF_M_ARBLKED = 130, CS103_INF_M_MEASI = 144, CS103_INF_M_MEASIV = 145, CS103_INF_M_MEASIVPQ = 146, CS103_INF_M_MEASINVEN = 147, CS103_INF_M_MEASILVLPQF = 148, CS103_INF_M_GENREADHEADINGS = 240, CS103_INF_M_GENREADVALGRP = 241, CS103_INF_M_GENREADDIR = 243, CS103_INF_M_GENREADVAL = 244, CS103_INF_M_GENGGIEND = 245, CS103_INF_M_GENWRITECONF = 249, CS103_INF_M_GENWRITEEXEC = 250, CS103_INF_M_GENWRITEABORT = 251 } CS103_INF_M; typedef enum CS103INFCTag { CS103_INF_C_GISTART = 0, CS103_INF_C_TIMESYNC = 0, CS103_INF_C_AUTORECLOSER = 16, CS103_INF_C_TELEPROT = 17, CS103_INF_C_PROT = 18, CS103_INF_C_LEDRESET = 19, CS103_INF_C_CHARAC1 = 23, CS103_INF_C_CHARAC2 = 24, CS103_INF_C_CHARAC3 = 25, CS103_INF_C_CHARAC4 = 26, CS103_INF_C_GENREADHEADINGS = 240, CS103_INF_C_GENREADVALGRP = 241, CS103_INF_C_GENREADDIR = 243, CS103_INF_C_GENREADVAL = 244, CS103_INF_C_GENGGISTART = 245, CS103_INF_C_GENWRITE = 248, CS103_INF_C_GENWRITECONF = 249, CS103_INF_C_GENWRITEEXEC = 250, CS103_INF_C_GENWRITEABORT = 251 } CS103_INF_C; typedef union { CS103_INF_C Control; CS103_INF_M Monitor; } CS103_INF; typedef enum CS103AccTag { CS103_ACC0_GLOBAL = 0, CS103_ACC1_IL1 = 1, CS103_ACC2_IL2 = 2, CS103_ACC3_IL3 = 3, CS103_ACC4_IN = 4, CS103_ACC5_VL1E = 5, CS103_ACC6_VL2E = 6, CS103_ACC7_VL3E = 7, CS103_ACC8_VEN = 8, CS103_ACC_PERIOD = 245 } CS103_ACC; typedef UINT8 CS103_ASC; typedef UINT8 CS103_COL; typedef enum CS103DCOTag { CS103_DCO_OFF = 1, CS103_DCO_ON = 2 } CS103_DCO; typedef enum CS103DPITag { CS103_DPI_OFF = 1, CS103_DPI_ON = 2 } CS103_DPI; typedef UINT16 CS103_FAN; typedef UINT16 CS103_INT; typedef struct { unsigned Overflow : 1; unsigned Invalid : 1; unsigned Reserved : 1; unsigned MVAL : 13; } CS103_MEA; typedef UINT16 CS103_NFE; typedef UINT8 CS103_NOC; typedef UINT16 CS103_NOE; typedef UINT16 CS103_NOF; typedef UINT8 CS103_NOT; typedef UINT8 CS103_NDV; typedef UINT16 CS103_RET; typedef REAL32 CS103_R32_23; typedef CS103_R32_23 CS103_RFA; typedef CS103_R32_23 CS103_RPV; typedef CS103_R32_23 CS103_RSV; typedef UINT8 CS103_RII; typedef CS103_R32_23 CS103_SCL; typedef UINT8 CS103_SCN; typedef INT16 CS103_SDV; typedef UINT8 CS103_SIN; typedef struct CS103SOFTag { unsigned TP : 1; unsigned TM : 1; unsigned TEST : 1; unsigned OTEV : 1; unsigned RES : 4; } CS103_SOF; typedef UINT16 CS103_TAP; typedef enum CS103TOOTag { CS103_TOO_SELECTFAULT = 1, CS103_TOO_REQDISTDATA = 2, CS103_TOO_REQDISTABORT = 3, CS103_TOO_CHANNELREQ = 8, CS103_TOO_CHANNELABORT = 9, CS103_TOO_TAGSREQ = 16, CS103_TOO_TASGABORT = 17, CS103_TOO_DISTLISTREQ = 24, CS103_TOO_DISTDATAENDOK = 32, CS103_TOO_DISTDATAENDCABORT = 33, CS103_TOO_DISTDATAENDPABORT = 34, CS103_TOO_CHANNELENDOK = 35, CS103_TOO_CHANNELENDCABORT = 36, CS103_TOO_CHANNELENDPABORT = 37, CS103_TOO_TAGENDOK = 38, CS103_TOO_TAGENDCABORT = 39, CS103_TOO_TAGENDPABORT = 40, CS103_TOO_DISTDATATXOK = 64, CS103_TOO_DISTDATATXNOK = 65, CS103_TOO_CHANNELTXOK = 66, CS103_TOO_CHANNELTXNOK = 67, CS103_TOO_TAGSTXOK = 68, CS103_TOO_TAGSTXNOK = 69 } CS103_TOO; typedef enum { TOV_NOT_USED = 0, TOV_INSTANTANEOUS_VALUES = 1 } CS103_TOV; typedef struct { unsigned ms_low : 8; unsigned ms_high : 8; unsigned MinutesAndIV : 8; unsigned HourAndSU : 8; } CS103_CP32TIME2A; typedef struct { unsigned ms_low : 8; unsigned ms_high : 8; unsigned MinutesAndIV : 8; unsigned HourAndSU : 8; unsigned DayOfMonthAndWeek : 8; unsigned Months : 4; unsigned Years : 7; } CS103_CP56TIME2A; typedef struct { unsigned NumDataSets : 6; unsigned CountFlag : 1; unsigned ContFlag : 1; } CS103_NGD; typedef UINT8 CS103_ENTRY; typedef UINT8 CS103_GROUP; typedef struct { CS103_GROUP Group; CS103_ENTRY Entry; } CS103_GIN; typedef enum { CS103_GDT_NO_DATA = 0, CS103_GDT_ASCII = 1, CS103_GDT_PACKED_BIT_STRING = 2, CS103_GDT_UNSIGNED_INTEGER = 3, CS103_GDT_INTEGER = 4, CS103_GDT_UNSIGNED_FIXED_POINT = 5, CS103_GDT_FIXED_POINT = 6, CS103_GDT_IEEE754_32BIT_FLOAT = 7, CS103_GDT_IEEE754_64BIT_FLOAT = 8, CS103_GDT_DPI = 9, CS103_GDT_SPI = 10, CS103_GDT_DPI_WITH_TRANSIENT_AND_ERROR = 11, CS103_GDT_MEASURAND_WITH_QUALITY = 12, CS103_GDT_BINARY_TIME = 14, CS103_GDT_GIN = 15, CS103_GDT_RELATIVE_TIME = 16, CS103_GDT_FUN_AND_INF = 17, CS103_GDT_TIME_TAGGED_MESSAGE = 18, CS103_GDT_TIME_TAGGED_MESSAGE_WITH_REL_TIME = 19, CS103_GDT_TIME_TAGGED_MEASURAND_WITH_REL_TIME = 20, CS103_GDT_EXTERNAL_TEXT_NUMBER = 21, CS103_GDT_GENERIC_REPLY_CODE = 22, CS103_GDT_DATA_STRUCTURE = 23, CS103_GDT_INDEX = 24 } CS103_GENERIC_DATA_TYPE; typedef struct { CS103_GENERIC_DATA_TYPE DataType; UINT8 DataSize; unsigned Number : 7; unsigned ContFlag : 1; } CS103_GDD; typedef UINT8 CS103_GID; typedef enum { KOD_NONE = 0, KOD_ACTUAL_VALUE = 1, KOD_DEFAULT_VALUE = 2, KOD_RANGE = 3, KOD_PRECISION = 5, KOD_FACTOR = 6, KOD_PERCENTAGE_REF = 7, KOD_ENUMERATION = 8, KOD_DIMENSION = 9, KOD_DESCRIPTION = 10, KOD_PASSWORD_ENTRY = 12, KOD_IS_READ_ONLY = 13, KOD_IS_WRITE_ONLY = 14, KOD_CORRESPONDING_FUN_AND_INF = 19, KOD_CORRESPONDING_EVENT = 20, KOD_ENUMERATED_TEXT_ARRAY = 21, KOD_ENUMERATED_VALUE_ARRAY = 22, KOD_RELATED_ENTRIES = 23 } CS103_KOD; typedef struct { unsigned NumDataSets : 6; unsigned CountFlag : 1; unsigned ContFlag : 1; } CS103_NDE; typedef enum { CS103_GRC_ACKNOWLEDGEMENT = 0, CS103_GRC_INVALID_GIN = 1, CS103_GRC_DATA_DOES_NOT_EXIST = 2, CS103_GRC_DATA_NOT_AVAILABLE = 3, CS103_GRC_SETTING_VERIFY_ERROR = 4, CS103_GRC_SETTING_OUT_OF_RANGE = 5, CS103_GRC_SIZE_OF_ENTRY_TOO_LARGE = 6, CS103_GRC_TOO_MANY_COMMANDS = 7, CS103_GRC_ENTRY_IS_READ_ONLY = 8, CS103_GRC_SETTING_IS_PASSWORD_PROTECTED = 9, CS103_GRC_LOCAL_SETTING_IN_PROGRESS = 10, CS103_GRC_ERROR_WITH_DESCRIPTION = 11 } CS103_GRC; typedef UINT8 CS103_NOG; typedef struct cs103AbsDateTag { UINT32 Seconds; UINT32 Milliseconds; BOOLEAN SummerBit; } CS103_ABS_DATE; typedef enum { CS103_GENSERV_NEW_FRAME, CS103_GENSERV_GET_NEXT_READ_RESPONSE, CS103_GENSERV_GET_NEXT_GGI_RESPONSE, CS103_GENSERV_TIMEOUT_OCCURRED, CS103_GENSERV_RESET_COMMS_OCCURRED, CS103_GENSERV_COMMS_BLOCKED_ON, CS103_GENSERV_COMMS_BLOCKED_OFF } CS103_GENSERV_APPLICATION_MSG_TYPES; typedef struct { CS103_GENSERV_APPLICATION_MSG_TYPES MsgType; UINT8 *pASDUData; UINT8 Length; CS103_ABS_DATE TimeStamp; BOOLEAN Broadcast; } CS103_GENSERV_APP_NEW_ASDU_MSG; typedef struct { CS103_GENSERV_APPLICATION_MSG_TYPES MsgType; CS103_RII RepeatRII; } CS103_GENSERV_APP_GET_NEXT; typedef union { CS103_GENSERV_APPLICATION_MSG_TYPES MsgType; CS103_GENSERV_APP_NEW_ASDU_MSG NewASDUMsg; CS103_GENSERV_APP_GET_NEXT GetNextMsg; } CS103_GENSERV_APPLICATION_MESSAGE; typedef struct { CS103_INF_C CurrentOperation; BOOLEAN FirstTime; CS103_RII Write_RII; CS103_GIN CurrentEntry; BOOLEAN ResponseInitialised; BOOLEAN WriteComplete; BOOLEAN WriteAbort; BOOLEAN WriteConfirmationRequired; BOOLEAN WriteInvalid; CS103_GRC ErrorCode; BOOLEAN FirstSection; CS103_GIN FirstSectionCellRef; unsigned NextTxCountFlag : 1; } CS103_GENSERV_WRITE_STATE_DATA; typedef struct { CS103_INF_C CurrentOperation; BOOLEAN FirstTime; CS103_RII Read_RII; BOOLEAN FrameProcessingComplete; BOOLEAN DataSetProcessingComplete; BOOLEAN CellProcessingComplete; BOOLEAN DirectoryProcessingComplete; CS103_GIN CurrentEntry; CS103_KOD CurrentKOD; BOOLEAN FirstSection; unsigned NextTxCountFlag : 1; INT16 DataSetIndex; INT16 DataSetPointer; } CS103_GENSERV_READ_STATE_DATA; typedef struct { CS103_RII GGI_RII; BOOLEAN EndOfGGI; BOOLEAN MoreDataInFrame; BOOLEAN FirstTime; CS103_GIN CurrentEntry; CS103_KOD CurrentKOD; unsigned LastTxCountFlag : 1; CS103_ADDRESS CommonAddress; } CS103_GENSERV_GGI_STATE_DATA; typedef struct { unsigned LastRxCountFlag : 1; BOOLEAN RxFrameErrorDetected; CS103_RII RII_WithError; } CS103_GENSERV_FRAME_CHECK_DATA; typedef enum { CS103_GENSERV_OIP_IDLE, CS103_GENSERV_OIP_READ, CS103_GENSERV_OIP_WRITE } CS103_GENSERV_OPERATION_IN_PROGRESS; typedef enum { RX_GENERIC_DATA = 10, RX_GENERIC_COMMAND = 21 } CS103_GENSERV_RX_FRAME_TYPE; typedef enum { TX_GENERIC_DATA = 10, TX_GENERIC_IDENTIFICATION = 11 } CS103_GENSERV_TX_FRAME_TYPE; typedef struct { CS103_GENSERV_RX_FRAME_TYPE FrameType; CS103_COT_C CauseOfTx; CS103_INF_C CommandType; CS103_ADDRESS CommonAddress; CS103_RII RII_Val; union { CS103_NGD NGD; CS103_NOG NOG; } NGD_NOG; UINT8 DataSets[((253) - 8)]; UINT8 DataLength; CS103_ABS_DATE LastRxFrameTime; } CS103_GENSERV_FRAME_DATA_IN; typedef struct { CS103_GIN GIN; CS103_NDE NDE; } ASDU_11_DATA; typedef struct { CS103_GENSERV_TX_FRAME_TYPE FrameType; CS103_COT_M CauseOfTx; CS103_INF_M CommandType; CS103_RII RII_Val; CS103_ADDRESS CommonAddress; union { CS103_NGD NGD; ASDU_11_DATA GIN_NDE; } NGD_NDE; union { UINT8 DataSets[((253) - 8)]; UINT8 DescElements[((253) - 10)]; } Data; UINT8 DataLength; UINT8 LastDataSet; } CS103_GENSERV_FRAME_DATA_OUT; typedef struct { CS103_GENSERV_OPERATION_IN_PROGRESS OpInProgress; CS103_GENSERV_WRITE_STATE_DATA WriteStateData; CS103_GENSERV_READ_STATE_DATA ReadStateData; CS103_GENSERV_GGI_STATE_DATA GGIStateData; CS103_GENSERV_FRAME_CHECK_DATA FrameCheckData; CS103_GENSERV_FRAME_DATA_IN FrameBeingProcessed; } CS103_GENSERV_STATE_DATA; typedef struct { CS103_GIN GIN; CS103_KOD KOD; CS103_GDD GDD; CS103_GID *pGID; UINT8 GIDLength; } CS103_GENSERV_ASDU10_DATASET; typedef struct { CS103_KOD KOD; CS103_GDD GDD; CS103_GID *pGID; UINT8 GIDLength; } CS103_GENSERV_ASDU11_DATASET; typedef struct { CS103_GIN GIN; CS103_KOD KOD; } CS103_GENSERV_ASDU21_DATASET; typedef enum CS103_SBO_ACTION_Tag { CS103_SE_EXECUTE = 0, CS103_SE_SELECT = 0x80 } CS103_SBO_ACTION; typedef enum CS103_SBO_QU_Tag { CS103_QU_SWITCH = 00, CS103_QU_SHORT_PULSE = 01, CS103_QU_LONG_PULSE = 02, CS103_QU_PERSIST = 03, CS103_QU_BAY_FAIL = 0x40 } CS103_SBO_QU; typedef struct { BOOLEAN OV; BOOLEAN BL; BOOLEAN SB; BOOLEAN NT; BOOLEAN IV; } CS103_QDS; typedef struct { CS103_SBO_ACTION SE; UINT8 QOC; CS103_DCO DCS; } CS103_DWQ ; typedef union { CS103_DWQ DWQ; CS103_DWQ DCX; } CS103_IL_DATA; typedef enum CS103_C_DEVICE_Tag { CS103_DEV_C_1 = 0x41, CS103_DEV_C_2 = 0x43, CS103_DEV_C_3 = 0x45, CS103_DEV_C_4 = 0x47, CS103_DEV_C_5 = 0x49, CS103_DEV_C_6 = 0x4B, CS103_DEV_C_7 = 0x4D, CS103_DEV_C_8 = 0x4F, CS103_DEV_C_9 = 0x51, CS103_DEV_C_10 = 0x53, CS103_DEV_C_11 = 0x55, CS103_DEV_C_12 = 0x57, CS103_DEV_C_13 = 0x59, CS103_DEV_C_14 = 0x5B, CS103_DEV_C_15 = 0x5D, CS103_DEV_C_16 = 0x5F, CS103_DEV_C_17 = 0x61, CS103_DEV_C_18 = 0x63, CS103_DEV_C_19 = 0x65, CS103_DEV_C_20 = 0x67, CS103_DEV_C_21 = 0x69, CS103_DEV_C_22 = 0x6B, CS103_DEV_C_23 = 0x6D, CS103_DEV_C_24 = 0x6F } CS103_DEV_C; typedef enum CS103_M_DEVICE_Tag { CS103_DEV_M_1 = 0x01, CS103_DEV_M_2 = 0x03, CS103_DEV_M_3 = 0x05, CS103_DEV_M_4 = 0x07, CS103_DEV_M_5 = 0x09, CS103_DEV_M_6 = 0x0B, CS103_DEV_M_7 = 0x0D, CS103_DEV_M_8 = 0x0F, CS103_DEV_M_9 = 0x11, CS103_DEV_M_10 = 0x13, CS103_DEV_M_11 = 0x15, CS103_DEV_M_12 = 0x17, CS103_DEV_M_13 = 0x19, CS103_DEV_M_14 = 0x1B, CS103_DEV_M_15 = 0x1D, CS103_DEV_M_16 = 0x1F, CS103_DEV_M_17 = 0x21, CS103_DEV_M_18 = 0x23, CS103_DEV_M_19 = 0x25, CS103_DEV_M_20 = 0x27, CS103_DEV_M_21 = 0x29, CS103_DEV_M_22 = 0x2B, CS103_DEV_M_23 = 0x2D, CS103_DEV_M_24 = 0x2F } CS103_DEV_M; typedef union { CS103_DEV_C Control; CS103_DEV_M Monitor; } CS103_INF_DEV; typedef struct { CS103_DPI DPI; BOOLEAN BL; BOOLEAN SB; BOOLEAN NT; BOOLEAN IV; } CS103_DIQ ; typedef struct CS103FrameTag { CS103_ADDRESS Address; UINT8 Length; UINT8 IECControlByte; UINT8 Asdu[(253)]; } CS103_FRAME; typedef struct CS103DiagnosticInstanceTag { UINT32 BusMessageCount; UINT32 BusCommErrCount; UINT32 ProtocolCommErrCount; UINT32 SlaveMessageCount; UINT32 SlaveBusyCount; } CS103_DIAGNOSTIC_INSTANCE; struct CS103InstanceTag { CS103_ADDRESS Address; CS103_DIAGNOSTIC_INSTANCE Diagnostics; }; typedef struct { CS103_ADDRESS Address; CS103_DIAGNOSTIC_INSTANCE Diagnostics; BOOLEAN DataFlowControlEnabled; } CS103_INSTANCE; void cs103_InitInterface(CS103_ADDRESS Address, CS103_INSTANCE *pCS103Interface); typedef enum { DDB_OUTPUT_RELAY_1 = 0, DDB_OUTPUT_RELAY_2 = 1, DDB_OUTPUT_RELAY_3 = 2, DDB_OUTPUT_RELAY_4 = 3, DDB_OUTPUT_RELAY_5 = 4, DDB_OUTPUT_RELAY_6 = 5, DDB_OUTPUT_RELAY_7 = 6, DDB_OUTPUT_RELAY_8 = 7, DDB_OUTPUT_RELAY_9 = 8, DDB_OUTPUT_RELAY_10 = 9, DDB_OUTPUT_RELAY_11 = 10, DDB_OUTPUT_RELAY_12 = 11, DDB_OUTPUT_RELAY_13 = 12, DDB_OUTPUT_RELAY_14 = 13, DDB_OUTPUT_RELAY_15 = 14, DDB_OUTPUT_RELAY_16 = 15, DDB_OUTPUT_RELAY_17 = 16, DDB_OUTPUT_RELAY_18 = 17, DDB_OUTPUT_RELAY_19 = 18, DDB_OUTPUT_RELAY_20 = 19, DDB_OUTPUT_RELAY_21 = 20, DDB_OUTPUT_RELAY_22 = 21, DDB_OUTPUT_RELAY_23 = 22, DDB_OUTPUT_RELAY_24 = 23, DDB_OUTPUT_RELAY_25 = 24, DDB_OUTPUT_RELAY_26 = 25, DDB_OUTPUT_RELAY_27 = 26, DDB_OUTPUT_RELAY_28 = 27, DDB_OUTPUT_RELAY_29 = 28, DDB_OUTPUT_RELAY_30 = 29, DDB_OUTPUT_RELAY_31 = 30, DDB_OUTPUT_RELAY_32 = 31, DDB_OPTO_ISOLATOR_1 = 32, DDB_OPTO_ISOLATOR_2 = 33, DDB_OPTO_ISOLATOR_3 = 34, DDB_OPTO_ISOLATOR_4 = 35, DDB_OPTO_ISOLATOR_5 = 36, DDB_OPTO_ISOLATOR_6 = 37, DDB_OPTO_ISOLATOR_7 = 38, DDB_OPTO_ISOLATOR_8 = 39, DDB_OPTO_ISOLATOR_9 = 40, DDB_OPTO_ISOLATOR_10 = 41, DDB_OPTO_ISOLATOR_11 = 42, DDB_OPTO_ISOLATOR_12 = 43, DDB_OPTO_ISOLATOR_13 = 44, DDB_OPTO_ISOLATOR_14 = 45, DDB_OPTO_ISOLATOR_15 = 46, DDB_OPTO_ISOLATOR_16 = 47, DDB_OPTO_ISOLATOR_17 = 48, DDB_OPTO_ISOLATOR_18 = 49, DDB_OPTO_ISOLATOR_19 = 50, DDB_OPTO_ISOLATOR_20 = 51, DDB_OPTO_ISOLATOR_21 = 52, DDB_OPTO_ISOLATOR_22 = 53, DDB_OPTO_ISOLATOR_23 = 54, DDB_OPTO_ISOLATOR_24 = 55, DDB_OPTO_ISOLATOR_25 = 56, DDB_OPTO_ISOLATOR_26 = 57, DDB_OPTO_ISOLATOR_27 = 58, DDB_OPTO_ISOLATOR_28 = 59, DDB_OPTO_ISOLATOR_29 = 60, DDB_OPTO_ISOLATOR_30 = 61, DDB_OPTO_ISOLATOR_31 = 62, DDB_OPTO_ISOLATOR_32 = 63, DDB_UNUSED_64 = 64, DDB_UNUSED_65 = 65, DDB_UNUSED_66 = 66, DDB_UNUSED_67 = 67, DDB_UNUSED_68 = 68, DDB_UNUSED_69 = 69, DDB_UNUSED_70 = 70, DDB_UNUSED_71 = 71, DDB_UNUSED_72 = 72, DDB_UNUSED_73 = 73, DDB_UNUSED_74 = 74, DDB_UNUSED_75 = 75, DDB_UNUSED_76 = 76, DDB_UNUSED_77 = 77, DDB_UNUSED_78 = 78, DDB_UNUSED_79 = 79, DDB_INTERIN_1 = 80, DDB_INTERIN_2 = 81, DDB_INTERIN_3 = 82, DDB_INTERIN_4 = 83, DDB_INTERIN_5 = 84, DDB_INTERIN_6 = 85, DDB_INTERIN_7 = 86, DDB_INTERIN_8 = 87, DDB_INTEROUT_1 = 88, DDB_INTEROUT_2 = 89, DDB_INTEROUT_3 = 90, DDB_INTEROUT_4 = 91, DDB_INTEROUT_5 = 92, DDB_INTEROUT_6 = 93, DDB_INTEROUT_7 = 94, DDB_INTEROUT_8 = 95, DDB_IM64_CH1_1_IN = 96, DDB_IM64_CH1_2_IN = 97, DDB_IM64_CH1_3_IN = 98, DDB_IM64_CH1_4_IN = 99, DDB_IM64_CH1_5_IN = 100, DDB_IM64_CH1_6_IN = 101, DDB_IM64_CH1_7_IN = 102, DDB_IM64_CH1_8_IN = 103, DDB_IM64_CH2_1_IN = 104, DDB_IM64_CH2_2_IN = 105, DDB_IM64_CH2_3_IN = 106, DDB_IM64_CH2_4_IN = 107, DDB_IM64_CH2_5_IN = 108, DDB_IM64_CH2_6_IN = 109, DDB_IM64_CH2_7_IN = 110, DDB_IM64_CH2_8_IN = 111, DDB_IM64_CH1_1_OUT = 112, DDB_IM64_CH1_2_OUT = 113, DDB_IM64_CH1_3_OUT = 114, DDB_IM64_CH1_4_OUT = 115, DDB_IM64_CH1_5_OUT = 116, DDB_IM64_CH1_6_OUT = 117, DDB_IM64_CH1_7_OUT = 118, DDB_IM64_CH1_8_OUT = 119, DDB_IM64_CH2_1_OUT = 120, DDB_IM64_CH2_2_OUT = 121, DDB_IM64_CH2_3_OUT = 122, DDB_IM64_CH2_4_OUT = 123, DDB_IM64_CH2_5_OUT = 124, DDB_IM64_CH2_6_OUT = 125, DDB_IM64_CH2_7_OUT = 126, DDB_IM64_CH2_8_OUT = 127, DDB_OUTPUT_CON_1 = 128, DDB_OUTPUT_CON_2 = 129, DDB_OUTPUT_CON_3 = 130, DDB_OUTPUT_CON_4 = 131, DDB_OUTPUT_CON_5 = 132, DDB_OUTPUT_CON_6 = 133, DDB_OUTPUT_CON_7 = 134, DDB_OUTPUT_CON_8 = 135, DDB_OUTPUT_CON_9 = 136, DDB_OUTPUT_CON_10 = 137, DDB_OUTPUT_CON_11 = 138, DDB_OUTPUT_CON_12 = 139, DDB_OUTPUT_CON_13 = 140, DDB_OUTPUT_CON_14 = 141, DDB_OUTPUT_CON_15 = 142, DDB_OUTPUT_CON_16 = 143, DDB_OUTPUT_CON_17 = 144, DDB_OUTPUT_CON_18 = 145, DDB_OUTPUT_CON_19 = 146, DDB_OUTPUT_CON_20 = 147, DDB_OUTPUT_CON_21 = 148, DDB_OUTPUT_CON_22 = 149, DDB_OUTPUT_CON_23 = 150, DDB_OUTPUT_CON_24 = 151, DDB_OUTPUT_CON_25 = 152, DDB_OUTPUT_CON_26 = 153, DDB_OUTPUT_CON_27 = 154, DDB_OUTPUT_CON_28 = 155, DDB_OUTPUT_CON_29 = 156, DDB_OUTPUT_CON_30 = 157, DDB_OUTPUT_CON_31 = 158, DDB_OUTPUT_CON_32 = 159, DDB_TIMERIN_1 = 160, DDB_TIMERIN_2 = 161, DDB_TIMERIN_3 = 162, DDB_TIMERIN_4 = 163, DDB_TIMERIN_5 = 164, DDB_TIMERIN_6 = 165, DDB_TIMERIN_7 = 166, DDB_TIMERIN_8 = 167, DDB_TIMERIN_9 = 168, DDB_TIMERIN_10 = 169, DDB_TIMERIN_11 = 170, DDB_TIMERIN_12 = 171, DDB_TIMERIN_13 = 172, DDB_TIMERIN_14 = 173, DDB_TIMERIN_15 = 174, DDB_TIMERIN_16 = 175, DDB_TIMEROUT_1 = 176, DDB_TIMEROUT_2 = 177, DDB_TIMEROUT_3 = 178, DDB_TIMEROUT_4 = 179, DDB_TIMEROUT_5 = 180, DDB_TIMEROUT_6 = 181, DDB_TIMEROUT_7 = 182, DDB_TIMEROUT_8 = 183, DDB_TIMEROUT_9 = 184, DDB_TIMEROUT_10 = 185, DDB_TIMEROUT_11 = 186, DDB_TIMEROUT_12 = 187, DDB_TIMEROUT_13 = 188, DDB_TIMEROUT_14 = 189, DDB_TIMEROUT_15 = 190, DDB_TIMEROUT_16 = 191, DDB_CONTROL_1 = 192, DDB_CONTROL_2 = 193, DDB_CONTROL_3 = 194, DDB_CONTROL_4 = 195, DDB_CONTROL_5 = 196, DDB_CONTROL_6 = 197, DDB_CONTROL_7 = 198, DDB_CONTROL_8 = 199, DDB_CONTROL_9 = 200, DDB_CONTROL_10 = 201, DDB_CONTROL_11 = 202, DDB_CONTROL_12 = 203, DDB_CONTROL_13 = 204, DDB_CONTROL_14 = 205, DDB_CONTROL_15 = 206, DDB_CONTROL_16 = 207, DDB_CONTROL_17 = 208, DDB_CONTROL_18 = 209, DDB_CONTROL_19 = 210, DDB_CONTROL_20 = 211, DDB_CONTROL_21 = 212, DDB_CONTROL_22 = 213, DDB_CONTROL_23 = 214, DDB_CONTROL_24 = 215, DDB_CONTROL_25 = 216, DDB_CONTROL_26 = 217, DDB_CONTROL_27 = 218, DDB_CONTROL_28 = 219, DDB_CONTROL_29 = 220, DDB_CONTROL_30 = 221, DDB_CONTROL_31 = 222, DDB_CONTROL_32 = 223, DDB_GOOSEIN_1 = 224, DDB_GOOSEIN_2 = 225, DDB_GOOSEIN_3 = 226, DDB_GOOSEIN_4 = 227, DDB_GOOSEIN_5 = 228, DDB_GOOSEIN_6 = 229, DDB_GOOSEIN_7 = 230, DDB_GOOSEIN_8 = 231, DDB_GOOSEIN_9 = 232, DDB_GOOSEIN_10 = 233, DDB_GOOSEIN_11 = 234, DDB_GOOSEIN_12 = 235, DDB_GOOSEIN_13 = 236, DDB_GOOSEIN_14 = 237, DDB_GOOSEIN_15 = 238, DDB_GOOSEIN_16 = 239, DDB_GOOSEIN_17 = 240, DDB_GOOSEIN_18 = 241, DDB_GOOSEIN_19 = 242, DDB_GOOSEIN_20 = 243, DDB_GOOSEIN_21 = 244, DDB_GOOSEIN_22 = 245, DDB_GOOSEIN_23 = 246, DDB_GOOSEIN_24 = 247, DDB_GOOSEIN_25 = 248, DDB_GOOSEIN_26 = 249, DDB_GOOSEIN_27 = 250, DDB_GOOSEIN_28 = 251, DDB_GOOSEIN_29 = 252, DDB_GOOSEIN_30 = 253, DDB_GOOSEIN_31 = 254, DDB_GOOSEIN_32 = 255, DDB_GOOSEOUT_1 = 256, DDB_GOOSEOUT_2 = 257, DDB_GOOSEOUT_3 = 258, DDB_GOOSEOUT_4 = 259, DDB_GOOSEOUT_5 = 260, DDB_GOOSEOUT_6 = 261, DDB_GOOSEOUT_7 = 262, DDB_GOOSEOUT_8 = 263, DDB_GOOSEOUT_9 = 264, DDB_GOOSEOUT_10 = 265, DDB_GOOSEOUT_11 = 266, DDB_GOOSEOUT_12 = 267, DDB_GOOSEOUT_13 = 268, DDB_GOOSEOUT_14 = 269, DDB_GOOSEOUT_15 = 270, DDB_GOOSEOUT_16 = 271, DDB_GOOSEOUT_17 = 272, DDB_GOOSEOUT_18 = 273, DDB_GOOSEOUT_19 = 274, DDB_GOOSEOUT_20 = 275, DDB_GOOSEOUT_21 = 276, DDB_GOOSEOUT_22 = 277, DDB_GOOSEOUT_23 = 278, DDB_GOOSEOUT_24 = 279, DDB_GOOSEOUT_25 = 280, DDB_GOOSEOUT_26 = 281, DDB_GOOSEOUT_27 = 282, DDB_GOOSEOUT_28 = 283, DDB_GOOSEOUT_29 = 284, DDB_GOOSEOUT_30 = 285, DDB_GOOSEOUT_31 = 286, DDB_GOOSEOUT_32 = 287, DDB_ILLEGAL_OPTO_SETTINGS_GROUP = 288, DDB_OOS_ALARM = 289, DDB_STATIC_TEST_MODE = 290, DDB_LOOPBACK_TEST = 291, DDB_IM64_TEST_MODE = 292, DDB_VTS_INDICATION = 293, DDB_CTS_INDICATION = 294, DDB_CT2S_INDICATION = 295, DDB_REMOTE_CTS_INDICATION = 296, DDB_PSB_ALARM = 297, DDB_BREAKER_FAIL_ALARM = 298, DDB_CB_MONITOR_ALARM = 299, DDB_CB_MONITOR_LOCKOUT = 300, DDB_CB_STATUS_ALARM = 301, DDB_CB_FAILED_TO_TRIP = 302, DDB_CB_FAILED_TO_CLOSE = 303, DDB_CONTROL_CB_UNHEALTHY = 304, DDB_CONTROL_NO_CHECK_SYNC = 305, DDB_AR_LOCKOUT = 306, DDB_AR_CB_UNHEALTHY = 307, DDB_AR_NO_CHECK_SYNC = 308, DDB_SYSTEM_SPLIT_ALARM = 309, DDB_LOCAL_GPS_FAIL = 310, DDB_SIGNALLING_FAILURE = 311, DDB_PROPAGATION_DELAY_FAILURE = 312, DDB_PROTECTION_FAILURE = 313, DDB_FIB_IM_SCHEME_FAIL = 314, DDB_IEEE_37_94 = 315, DDB_INHIBIT_CD_PROTECTION = 316, DDB_AIDED1_LGS_ALARM = 317, DDB_AIDED2_LGS_ALARM = 318, DDB_FREQ_ALARM = 319, DDB_BREAKER_FAIL_ALARM_2 = 320, DDB_CB2_MONITOR_ALARM = 321, DDB_CB2_MONITOR_LOCKOUT = 322, DDB_CB2_STATUS_ALARM = 323, DDB_CB2_FAILED_TO_TRIP = 324, DDB_CB2_FAILED_TO_CLOSE = 325, DDB_CONTROL_CB2_UNHEALTHY = 326, DDB_CONTROL_NO_CHECK_SYNC_2 = 327, DDB_AR_LOCKOUT_2 = 328, DDB_AR_CB2_UNHEALTHY = 329, DDB_AR_NO_CHECK_SYNC_2 = 330, DDB_INVALID_AR_MODE = 331, DDB_IN_COMPATABLE_RELAYS = 332, DDB_MESSAGE_FORMAT_FAIL = 333, DDB_MAIN_PROTECTION_FAIL = 334, DDB_CONFIGURATION_ERROR = 335, DDB_RE_CONFIGURATION_ERROR = 336, DDB_PROT_COMMS_MODE = 337, DDB_MAX_PROP_DELAY_ALARM = 338, DDB_TEST_MODE_CDIFF_INHIBIT = 339, DDB_CDIFF_SUPERVISION = 340, DDB_PROTECTION_DISABLED = 341, DDB_1P_EARTH_FAULT = 342, DDB_ALARM_55 = 343, DDB_ALARM_56 = 344, DDB_ALARM_57 = 345, DDB_ALARM_58 = 346, DDB_ALARM_59 = 347, DDB_ALARM_60 = 348, DDB_ALARM_61 = 349, DDB_ALARM_62 = 350, DDB_ALARM_63 = 351, DDB_BATTERY_FAIL = 352, DDB_FIELD_VOLTS_FAIL = 353, DDB_REAR_COMMS_FAIL = 354, DDB_GOOSE_MISSING_IED = 355, DDB_ECARD_NOT_FITTED = 356, DDB_NIC_NOT_RESPONDING = 357, DDB_NIC_FATAL_ERROR = 358, DDB_NIC_SOFTWARE_RELOAD = 359, DDB_INVALID_NIC_TCPIP_CONFIG = 360, DDB_INVALID_NIC_OSI_CONFIG = 361, DDB_NIC_LINK_FAIL = 362, DDB_SW_MISMATCH_ALARM = 363, DDB_NIC_IP_ADDRESS_CONFLICT = 364, DDB_INTERMICOM_LOOPBACK = 365, DDB_INTERMICOM_MESSAGE = 366, DDB_INTERMICOM_DCD = 367, DDB_INTERMICOM_CHANNEL = 368, DDB_BACKUP_DATA_IN_USE = 369, DDB_DNPEV_BAD_SETTINGS_ALARM = 370, DDB_BACKUP_USR_CRV_ALARM = 371, DDB_SNTP_FAIL_ALARM = 372, DDB_NIC_MEM_ALLOC_FAIL_ALARM = 373, DDB_PTP_FAIL_ALARM = 374, DDB_PLATFORM_ALARM_24 = 375, DDB_PLATFORM_ALARM_25 = 376, DDB_BBRAM_VERIFY_FAIL = 377, DDB_PLATFORM_ALARM_27 = 378, DDB_PLATFORM_ALARM_28 = 379, DDB_PLATFORM_ALARM_29 = 380, DDB_PLATFORM_ALARM_30 = 381, DDB_PLATFORM_ALARM_31 = 382, DDB_PLATFORM_ALARM_32 = 383, DDB_ZONE_1_GND_BLOCK = 384, DDB_ZONE_1_PHS_BLOCK = 385, DDB_ZONE_2_GND_BLOCK = 386, DDB_ZONE_2_PHS_BLOCK = 387, DDB_ZONE_3_GND_BLOCK = 388, DDB_ZONE_3_PHS_BLOCK = 389, DDB_ZONE_P_GND_BLOCK = 390, DDB_ZONE_P_PHS_BLOCK = 391, DDB_ZONE_4_GND_BLOCK = 392, DDB_ZONE_4_PHS_BLOCK = 393, DDB_AIDED1_DIST_TRIP_INHIBIT = 394, DDB_AIDED1_DEF_TRIP_INHIBIT = 395, DDB_AIDED1_DIR_TRIP_INHIBIT = 396, DDB_AIDED2_DIST_TRIP_INHIBIT = 397, DDB_AIDED2_DEF_TRIP_INHIBIT = 398, DDB_AIDED2_DIR_TRIP_INHIBIT = 399, DDB_TIMESYNC = 400, DDB_POC_1_TIMER_BLOCK = 401, DDB_POC_2_TIMER_BLOCK = 402, DDB_POC_3_TIMER_BLOCK = 403, DDB_POC_4_TIMER_BLOCK = 404, DDB_EF1_1_TIMER_BLOCK = 405, DDB_EF1_2_TIMER_BLOCK = 406, DDB_EF1_3_TIMER_BLOCK = 407, DDB_EF1_4_TIMER_BLOCK = 408, DDB_SEF_1_TIMER_BLOCK = 409, DDB_SEF_2_TIMER_BLOCK = 410, DDB_SEF_3_TIMER_BLOCK = 411, DDB_SEF_4_TIMER_BLOCK = 412, DDB_NEGSEQOC_TIMER_BLOCK = 413, DDB_PUV_1_TIMER_BLOCK = 414, DDB_PUV_2_TIMER_BLOCK = 415, DDB_POV_1_TIMER_BLOCK = 416, DDB_POV_2_TIMER_BLOCK = 417, DDB_RESOV_1_TIMER_BLOCK = 418, DDB_RESOV_2_TIMER_BLOCK = 419, DDB_CB_THREE_PHASE_52A = 420, DDB_CB_PHASE_A_52A = 421, DDB_CB_PHASE_B_52A = 422, DDB_CB_PHASE_C_52A = 423, DDB_CB_THREE_PHASE_52B = 424, DDB_CB_PHASE_A_52B = 425, DDB_CB_PHASE_B_52B = 426, DDB_CB_PHASE_C_52B = 427, DDB_CB2_THREE_PHASE_52A = 428, DDB_CB2_PHASE_A_52A = 429, DDB_CB2_PHASE_B_52A = 430, DDB_CB2_PHASE_C_52A = 431, DDB_CB2_THREE_PHASE_52B = 432, DDB_CB2_PHASE_A_52B = 433, DDB_CB2_PHASE_B_52B = 434, DDB_CB2_PHASE_C_52B = 435, DDB_CB_HEALTHY = 436, DDB_CB2_HEALTHY = 437, DDB_VTS_MCB_OPTO = 438, DDB_LOGIC_INPUT_TRIP = 439, DDB_LOGIC_INPUT_CLOSE = 440, DDB_LOGIC_INPUT_TRIP_2 = 441, DDB_LOGIC_INPUT_CLOSE_2 = 442, DDB_RESET_CB_CLOSE_DELAY = 443, DDB_RESET_RELAYS_LEDS = 444, DDB_RESET_THERMAL = 445, DDB_RESET_LOCKOUT = 446, DDB_RESET_ALL_VALUES = 447, DDB_BLOCK_AR = 448, DDB_INP_SPAR = 449, DDB_INP_TPAR = 450, DDB_INP_TR2P = 451, DDB_INTERNAL_LOOPBACK = 452, DDB_PERMISSIVE_INTERTRIP_OPTO = 453, DDB_STUB_BUS_ENABLED = 454, DDB_INHIBIT_CURRENT_DIFF_OPTO = 455, DDB_RECONFIGURATION_INTERLOCK = 456, DDB_OVERRIDE_INHIBIT = 457, DDB_INHIBIT_WI = 458, DDB_TEST_MODE = 459, DDB_COMMAND_BLOCKING = 460, DDB_MONITOR_BLOCKING = 461, DDB_INHIBIT_NEUTRAL_DIFF_OPTO = 462, DDB_INHIBIT_POC1 = 463, DDB_INHIBIT_POC2 = 464, DDB_INHIBIT_POC3 = 465, DDB_INHIBIT_POC4 = 466, DDB_INHIBIT_EF1 = 467, DDB_INHIBIT_EF2 = 468, DDB_INHIBIT_EF3 = 469, DDB_INHIBIT_EF4 = 470, DDB_INHIBIT_UV1 = 471, DDB_INHIBIT_UV2 = 472, DDB_INHIBIT_OV1 = 473, DDB_INHIBIT_OV2 = 474, DDB_INHIBIT_RESOV1 = 475, DDB_INHIBIT_RESOV2 = 476, DDB_INHIBIT_NPS = 477, DDB_INHIBIT_THERMAL = 478, DDB_INHIBIT_CBS = 479, DDB_INHIBIT_CBF = 480, DDB_INHIBIT_BCL = 481, DDB_INHIBIT_VTS = 482, DDB_INHIBIT_CTS = 483, DDB_INHIBIT_CHKSYN = 484, DDB_INHIBIT_TOR = 485, DDB_INHIBIT_SOTF = 486, DDB_DISABLE_CTS = 487, DDB_SET_SOTF = 488, DDB_RESET_Z1_EXT = 489, DDB_RESET_ZONE1_EXT = 490, DDB_INHIBIT_LOL = 491, DDB_AIDED1_COS_LGS = 492, DDB_AIDED1_CRX_EXT = 493, DDB_AIDED1_CRX_INT = 494, DDB_UNUSED_495 = 495, DDB_AIDED1_BLOCK_SEND = 496, DDB_AIDED1_PROGRAM_SEND = 497, DDB_AIDED1_SEND = 498, DDB_AIDED1_CUSTOM_TIMER_IN = 499, DDB_AIDED1_CUSTOM_TIMER_OUT = 500, DDB_AIDED1_TRIP_ENABLE = 501, DDB_AIDED1_CUSTOM_TRIP_ENABLE = 502, DDB_AIDED1_DIST_TRIP = 503, DDB_AIDED1_DIR_TRIP = 504, DDB_AIDED1_DEF_TRIP = 505, DDB_AIDED2_COS_LGS = 506, DDB_AIDED2_CRX_EXT = 507, DDB_AIDED2_CRX_INT = 508, DDB_REMOTEREADONLY_RP1 = 509, DDB_REMOTEREADONLY_RP2 = 510, DDB_REMOTEREADONLY_NIC = 511, DDB_AIDED2_BLOCK_SEND = 512, DDB_AIDED2_PROGRAM_SEND = 513, DDB_AIDED2_SEND = 514, DDB_AIDED2_CUSTOM_TIMER_IN = 515, DDB_AIDED2_CUSTOM_TIMER_OUT = 516, DDB_AIDED2_TRIP_ENABLE = 517, DDB_AIDED2_CUSTOM_TRIP_ENABLE = 518, DDB_AIDED2_DIST_TRIP = 519, DDB_AIDED2_DIR_TRIP = 520, DDB_AIDED2_DEF_TRIP = 521, DDB_ANY_TRIP = 522, DDB_TRIP_A_PHASE = 523, DDB_TRIP_B_PHASE = 524, DDB_TRIP_C_PHASE = 525, DDB_TRIP_3PH = 526, DDB_TR_23_PHASE_FAULT = 527, DDB_TR_3_PHASE_FAULT = 528, DDB_TR_3_PHASE = 529, DDB_TR_A_PHASE = 530, DDB_TR_B_PHASE = 531, DDB_TR_C_PHASE = 532, DDB_FORCE_3_POLE_TRIP = 533, DDB_EXTERNAL_TRIP_3PH = 534, DDB_EXTERNAL_TRIP_A = 535, DDB_EXTERNAL_TRIP_B = 536, DDB_EXTERNAL_TRIP_C = 537, DDB_CB2_EXTERNAL_TRIP_3PH = 538, DDB_CB2_EXTERNAL_TRIP_A = 539, DDB_CB2_EXTERNAL_TRIP_B = 540, DDB_CB2_EXTERNAL_TRIP_C = 541, DDB_SG_SELECTOR_X1 = 542, DDB_SG_SELECTOR_1X = 543, DDB_CLEAR_STATISTICS = 544, DDB_STAB_TEST_PASS = 545, DDB_BLOCK_DELTA = 546, DDB_BLOCK_PHASE_COMP = 547, DDB_BLOCK_START_I2 = 548, DDB_SET_TRANS_START = 549, DDB_INHIBIT_PREDICTIVE_OST_TRIP = 550, DDB_PREDICTIVE_OST_TRIP = 551, DDB_INHIBIT_OST_TRIP = 552, DDB_OST_TRIP = 553, DDB_START_Z5 = 554, DDB_START_Z6 = 555, DDB_CNV_ACTIVE = 556, DDB_CNV_TOR_TRIP = 557, DDB_CNV_SOTF_TRIP = 558, DDB_QUARTER_CYCLE_OV_PHA = 559, DDB_QUARTER_CYCLE_OV_PHB = 560, DDB_QUARTER_CYCLE_OV_PHC = 561, DDB_NPSOC_INHIBIT = 562, DDB_NPSOC_1_TIMER_BLOCK = 563, DDB_NPSOC_2_TIMER_BLOCK = 564, DDB_NPSOC_3_TIMER_BLOCK = 565, DDB_NPSOC_4_TIMER_BLOCK = 566, DDB_NPSOC_1_START = 567, DDB_NPSOC_2_START = 568, DDB_NPSOC_3_START = 569, DDB_NPSOC_4_START = 570, DDB_NPSOC_1_TRIP = 571, DDB_NPSOC_2_TRIP = 572, DDB_NPSOC_3_TRIP = 573, DDB_NPSOC_4_TRIP = 574, DDB_ICAP_MODE_SECURE = 575, DDB_AR_TRIP_TEST = 576, DDB_AR_TRIP_TEST_A = 577, DDB_AR_TRIP_TEST_B = 578, DDB_AR_TRIP_TEST_C = 579, DDB_AR_INIT_3PH = 580, DDB_AR_BLOCK_AR = 581, DDB_DIFFERENTIAL_TRIP = 582, DDB_DIFFERENTIAL_TRIP_A = 583, DDB_DIFFERENTIAL_TRIP_B = 584, DDB_DIFFERENTIAL_TRIP_C = 585, DDB_DIFFERENTIAL_INTERTRIP = 586, DDB_DIFFERENTIAL_INTERTRIP_A = 587, DDB_DIFFERENTIAL_INTERTRIP_B = 588, DDB_DIFFERENTIAL_INTERTRIP_C = 589, DDB_PERMISSIVE_INTERTRIP = 590, DDB_STUB_BUS_TRIP = 591, DDB_DFDT_INHIBIT = 592, DDB_DFDT_1_TIMER_BLOCK = 593, DDB_DFDT_2_TIMER_BLOCK = 594, DDB_DFDT_3_TIMER_BLOCK = 595, DDB_DFDT_4_TIMER_BLOCK = 596, DDB_DFDT_1_START = 597, DDB_DFDT_2_START = 598, DDB_DFDT_3_START = 599, DDB_DFDT_4_START = 600, DDB_DFDT_1_TRIP = 601, DDB_DFDT_2_TRIP = 602, DDB_DFDT_3_TRIP = 603, DDB_DFDT_4_TRIP = 604, DDB_START_Z7 = 605, DDB_START_Z8 = 606, DDB_SLOW_POWER_SWING = 607, DDB_ZONE_1_TRIP = 608, DDB_ZONE_1_TRIP_A = 609, DDB_ZONE_1_TRIP_B = 610, DDB_ZONE_1_TRIP_C = 611, DDB_ZONE_1_TRIP_N = 612, DDB_ZONE_2_TRIP = 613, DDB_ZONE_2_TRIP_A = 614, DDB_ZONE_2_TRIP_B = 615, DDB_ZONE_2_TRIP_C = 616, DDB_ZONE_2_TRIP_N = 617, DDB_ZONE_3_TRIP = 618, DDB_ZONE_3_TRIP_A = 619, DDB_ZONE_3_TRIP_B = 620, DDB_ZONE_3_TRIP_C = 621, DDB_ZONE_3_TRIP_N = 622, DDB_ZONE_P_TRIP = 623, DDB_ZONE_P_TRIP_A = 624, DDB_ZONE_P_TRIP_B = 625, DDB_ZONE_P_TRIP_C = 626, DDB_ZONE_P_TRIP_N = 627, DDB_ZONE_4_TRIP = 628, DDB_ZONE_4_TRIP_A = 629, DDB_ZONE_4_TRIP_B = 630, DDB_ZONE_4_TRIP_C = 631, DDB_ZONE_4_TRIP_N = 632, DDB_AIDED1_TRIP_A = 633, DDB_AIDED1_TRIP_B = 634, DDB_AIDED1_TRIP_C = 635, DDB_AIDED1_TRIP_N = 636, DDB_AIDED1_WI_TRIP_A = 637, DDB_AIDED1_WI_TRIP_B = 638, DDB_AIDED1_WI_TRIP_C = 639, DDB_AIDED1_DIR_3P_TRIP = 640, DDB_AIDED1_DEF_3P_TRIP = 641, DDB_AIDED1_WI_3P_TRIP = 642, DDB_AIDED2_TRIP_A = 643, DDB_AIDED2_TRIP_B = 644, DDB_AIDED2_TRIP_C = 645, DDB_AIDED2_TRIP_N = 646, DDB_AIDED2_WI_TRIP_A = 647, DDB_AIDED2_WI_TRIP_B = 648, DDB_AIDED2_WI_TRIP_C = 649, DDB_AIDED2_DIR_3P_TRIP = 650, DDB_AIDED2_DEF_3P_TRIP = 651, DDB_AIDED2_WI_3P_TRIP = 652, DDB_UNUSED_653 = 653, DDB_LOL_TRIP = 654, DDB_POC_1_3PH_TRIP = 655, DDB_POC_1_PH_A_TRIP = 656, DDB_POC_1_PH_B_TRIP = 657, DDB_POC_1_PH_C_TRIP = 658, DDB_POC_2_3PH_TRIP = 659, DDB_POC_2_PH_A_TRIP = 660, DDB_POC_2_PH_B_TRIP = 661, DDB_POC_2_PH_C_TRIP = 662, DDB_POC_3_3PH_TRIP = 663, DDB_POC_3_PH_A_TRIP = 664, DDB_POC_3_PH_B_TRIP = 665, DDB_POC_3_PH_C_TRIP = 666, DDB_POC_4_3PH_TRIP = 667, DDB_POC_4_PH_A_TRIP = 668, DDB_POC_4_PH_B_TRIP = 669, DDB_POC_4_PH_C_TRIP = 670, DDB_EF1_1_TRIP = 671, DDB_EF1_2_TRIP = 672, DDB_EF1_3_TRIP = 673, DDB_EF1_4_TRIP = 674, DDB_SEF_1_TRIP = 675, DDB_SEF_2_TRIP = 676, DDB_SEF_3_TRIP = 677, DDB_SEF_4_TRIP = 678, DDB_BROKEN_CONDUCTOR_TRIP = 679, DDB_THERMAL_TRIP = 680, DDB_BLOCK_GND_ZP_START = 681, DDB_REF_TRIP = 682, DDB_PUV_1_3PH_TRIP = 683, DDB_PUV_1_PH_A_TRIP = 684, DDB_PUV_1_PH_B_TRIP = 685, DDB_PUV_1_PH_C_TRIP = 686, DDB_PUV_2_3PH_TRIP = 687, DDB_PUV_2_PH_A_TRIP = 688, DDB_PUV_2_PH_B_TRIP = 689, DDB_PUV_2_PH_C_TRIP = 690, DDB_POV_1_3PH_TRIP = 691, DDB_POV_1_PH_A_TRIP = 692, DDB_POV_1_PH_B_TRIP = 693, DDB_POV_1_PH_C_TRIP = 694, DDB_POV_2_3PH_TRIP = 695, DDB_POV_2_PH_A_TRIP = 696, DDB_POV_2_PH_B_TRIP = 697, DDB_POV_2_PH_C_TRIP = 698, DDB_POLE_DISCREPENCE_TRIP = 699, DDB_RESOV_1_TRIP = 700, DDB_RESOV_2_TRIP = 701, DDB_FAULT_RECORDER_START = 702, DDB_NEGSEQOC_TRIP = 703, DDB_ZONE_1_TOR_TRIP = 704, DDB_ZONE_2_TOR_TRIP = 705, DDB_ZONE_3_TOR_TRIP = 706, DDB_ZONE_4_TOR_TRIP = 707, DDB_ZONE_P_TOR_TRIP = 708, DDB_ZONE_1_SOTF_TRIP = 709, DDB_ZONE_2_SOTF_TRIP = 710, DDB_ZONE_3_SOTF_TRIP = 711, DDB_ZONE_4_SOTF_TRIP = 712, DDB_ZONE_P_SOTF_TRIP = 713, DDB_CH_TEST_COMPLETED = 714, DDB_CH_TEST_START = 715, DDB_UNSTABALISING = 716, DDB_BLOCK_CHANNEL_TEST = 717, DDB_CLP_INITIATE = 718, DDB_CLP_OPERATION = 719, DDB_RESET_DELTA_HIGH_START = 720, DDB_CONT_MAN_TEST = 721, DDB_BLOCK_PLC = 722, DDB_PHASE_COMP_TRIP = 723, DDB_PHASE_COMP_TRIP_A = 724, DDB_PHASE_COMP_TRIP_B = 725, DDB_PHASE_COMP_TRIP_C = 726, DDB_PHASE_COMP_TRIP_3PH = 727, DDB_TRANS_START_ENABLED = 728, DDB_BLOCK_PH_Z2_START = 729, DDB_BLOCK_PH_Z3_START = 730, DDB_BLOCK_PH_Z4_START = 731, DDB_BLOCK_PH_ZP_START = 732, DDB_BLOCK_GND_Z2_START = 733, DDB_BLOCK_GND_Z3_START = 734, DDB_BLOCK_GND_Z4_START = 735, DDB_ANY_START = 736, DDB_DIFFERENTIAL_START = 737, DDB_DIFFERENTIAL_START_A = 738, DDB_DIFFERENTIAL_START_B = 739, DDB_DIFFERENTIAL_START_C = 740, DDB_ZONE_1_START_A = 741, DDB_ZONE_1_START_B = 742, DDB_ZONE_1_START_C = 743, DDB_ZONE_1_START_N = 744, DDB_ZONE_2_START_A = 745, DDB_ZONE_2_START_B = 746, DDB_ZONE_2_START_C = 747, DDB_ZONE_2_START_N = 748, DDB_ZONE_3_START_A = 749, DDB_ZONE_3_START_B = 750, DDB_ZONE_3_START_C = 751, DDB_ZONE_3_START_N = 752, DDB_ZONE_P_START_A = 753, DDB_ZONE_P_START_B = 754, DDB_ZONE_P_START_C = 755, DDB_ZONE_P_START_N = 756, DDB_ZONE_4_START_A = 757, DDB_ZONE_4_START_B = 758, DDB_ZONE_4_START_C = 759, DDB_ZONE_4_START_N = 760, DDB_POC_1_3PH_START = 761, DDB_POC_1_PH_A_START = 762, DDB_POC_1_PH_B_START = 763, DDB_POC_1_PH_C_START = 764, DDB_POC_2_3PH_START = 765, DDB_POC_2_PH_A_START = 766, DDB_POC_2_PH_B_START = 767, DDB_POC_2_PH_C_START = 768, DDB_POC_3_3PH_START = 769, DDB_POC_3_PH_A_START = 770, DDB_POC_3_PH_B_START = 771, DDB_POC_3_PH_C_START = 772, DDB_POC_4_3PH_START = 773, DDB_POC_4_PH_A_START = 774, DDB_POC_4_PH_B_START = 775, DDB_POC_4_PH_C_START = 776, DDB_EF1_1_START = 777, DDB_EF1_2_START = 778, DDB_EF1_3_START = 779, DDB_EF1_4_START = 780, DDB_SEF_1_START = 781, DDB_SEF_2_START = 782, DDB_SEF_3_START = 783, DDB_SEF_4_START = 784, DDB_THERMAL_ALARM = 785, DDB_PH_BLOCKED_OC_START = 786, DDB_N_BLOCKED_OC_START = 787, DDB_PUV_1_3PH_START = 788, DDB_PUV_1_PH_A_START = 789, DDB_PUV_1_PH_B_START = 790, DDB_PUV_1_PH_C_START = 791, DDB_PUV_2_3PH_START = 792, DDB_PUV_2_PH_A_START = 793, DDB_PUV_2_PH_B_START = 794, DDB_PUV_2_PH_C_START = 795, DDB_POV_1_3PH_START = 796, DDB_POV_1_PH_A_START = 797, DDB_POV_1_PH_B_START = 798, DDB_POV_1_PH_C_START = 799, DDB_POV_2_3PH_START = 800, DDB_POV_2_PH_A_START = 801, DDB_POV_2_PH_B_START = 802, DDB_POV_2_PH_C_START = 803, DDB_RESOV_1_START = 804, DDB_RESOV_2_START = 805, DDB_NEGSEQOC_START = 806, DDB_DELTA_I2_LOW = 807, DDB_DELTA_I2_HIGH = 808, DDB_DELTA_I1_LOW = 809, DDB_DELTA_I1_HIGH = 810, DDB_START_I2_LOW = 811, DDB_START_I2_HIGH = 812, DDB_START_I1_LOW = 813, DDB_START_I1_HIGH = 814, DDB_START_V2_LOW = 815, DDB_START_V2_HIGH = 816, DDB_PH_Z2_LOW = 817, DDB_PH_Z2_HIGH = 818, DDB_PH_Z3_LOW = 819, DDB_PH_Z3_HIGH = 820, DDB_PH_Z4_LOW = 821, DDB_PH_Z4_HIGH = 822, DDB_PH_ZP_LOW = 823, DDB_PH_ZP_HIGH = 824, DDB_ANY_DELTA_START = 825, DDB_ANY_THRESH_START = 826, DDB_ANY_LOW_SET = 827, DDB_ANY_HI_SET = 828, DDB_PHASE_A_UNDERVOLTAGE = 829, DDB_PHASE_B_UNDERVOLTAGE = 830, DDB_PHASE_C_UNDERVOLTAGE = 831, DDB_VTS_FAST_BLOCK = 832, DDB_VTS_SLOW_BLOCK = 833, DDB_CBF1_TRIP_3PH = 834, DDB_CBF2_TRIP_3PH = 835, DDB_CB2F1_TRIP_3PH = 836, DDB_CB2F2_TRIP_3PH = 837, DDB_CONTROL_TRIP = 838, DDB_CONTROL_CLOSE = 839, DDB_CONTROL_TRIP_2 = 840, DDB_CONTROL_CLOSE_2 = 841, DDB_CONTROL_CLOSE_IN_PROGRESS = 842, DDB_AR_BLOCK_MAIN_PROTECTION = 843, DDB_AR_3_POLE_IN_PROGRESS = 844, DDB_AR_1_POLE_IN_PROGRESS = 845, DDB_SEQ_COUNT_0 = 846, DDB_SEQ_COUNT_1 = 847, DDB_SEQ_COUNT_2 = 848, DDB_SEQ_COUNT_3 = 849, DDB_SEQ_COUNT_4 = 850, DDB_SEQ_COUNT_5 = 851, DDB_AR_SUCCESSFUL_RECLOSE = 852, DDB_DEAD_TIME_IN_PROGRESS = 853, DDB_AUTO_CLOSE = 854, DDB_AR_1_POLE_IN_PROGRESS_2 = 855, DDB_AR_IN_SERVICE_3P = 856, DDB_AR_IN_SERVICE_1P = 857, DDB_AR_FORCE_3_POLE_TRIPS = 858, DDB_AR_BLOCKED = 859, DDB_CB_LOCKOUT_ALARM = 860, DDB_LOCAL_GPS_FAIL_INST = 861, DDB_CONTACTS_BLOCKED_IP = 862, DDB_CONTACTS_BLOCKED_OP = 863, DDB_PHASE_A_UNDERCURRENT = 864, DDB_PHASE_B_UNDERCURRENT = 865, DDB_PHASE_C_UNDERCURRENT = 866, DDB_PHASE_A_UNDERCURRENT_CB1 = 867, DDB_PHASE_B_UNDERCURRENT_CB1 = 868, DDB_PHASE_C_UNDERCURRENT_CB1 = 869, DDB_PHASE_A_UNDERCURRENT_CB2 = 870, DDB_PHASE_B_UNDERCURRENT_CB2 = 871, DDB_PHASE_C_UNDERCURRENT_CB2 = 872, DDB_SEF_UNDERCURRENT = 873, DDB_CBF_NON_I_TRIP = 874, DDB_UNUSED_875 = 875, DDB_ZONE1_EXT_ACTIVE = 876, DDB_TOC_ACTIVE = 877, DDB_TOR_ACTIVE = 878, DDB_SOTF_ACTIVE = 879, DDB_SYSCHECKS_INACTIVE = 880, DDB_CHECKSYNC_1_ENABLED = 881, DDB_CHECKSYNC_2_ENABLED = 882, DDB_CHECKSYNC_1_OK = 883, DDB_CHECKSYNC_2_OK = 884, DDB_SYSTEM_SPLIT_ENABLED = 885, DDB_SYSCHECKS_BUS_LIVE = 886, DDB_SYSCHECKS_BUS_DEAD = 887, DDB_SYSCHECKS_LINE_LIVE = 888, DDB_SYSCHECKS_LINE_DEAD = 889, DDB_ALL_POLEDEAD = 890, DDB_ANY_POLEDEAD = 891, DDB_PHASE_A_POLEDEAD = 892, DDB_PHASE_B_POLEDEAD = 893, DDB_PHASE_C_POLEDEAD = 894, DDB_VTS_ACCELERATE_INPUT = 895, DDB_VTS_ANY_VOLTAGE_DEP_FN = 896, DDB_SYNC_AR_CS_CHECK_OK = 897, DDB_SYNC_CTRL_SYS_CHECK_OK = 898, DDB_SYNC_AR_SYS_CHECK_OK = 899, DDB_CB1_EXT_CS_OK = 900, DDB_CB2_EXT_CS_OK = 901, DDB_UNUSED_902 = 902, DDB_CB_OPEN = 903, DDB_CB_PHASE_A_OPEN = 904, DDB_CB_PHASE_B_OPEN = 905, DDB_CB_PHASE_C_OPEN = 906, DDB_CB_CLOSED = 907, DDB_CB_PHASE_A_CLOSED = 908, DDB_CB_PHASE_B_CLOSED = 909, DDB_CB_PHASE_C_CLOSED = 910, DDB_CB2_OPEN = 911, DDB_CB2_PHASE_A_OPEN = 912, DDB_CB2_PHASE_B_OPEN = 913, DDB_CB2_PHASE_C_OPEN = 914, DDB_CB2_CLOSED = 915, DDB_CB2_PHASE_A_CLOSED = 916, DDB_CB2_PHASE_B_CLOSED = 917, DDB_CB2_PHASE_C_CLOSED = 918, DDB_INHIBIT_COMP_OV1 = 919, DDB_INHIBIT_COMP_OV2 = 920, DDB_PCOV_1_TIMER_BLOCK = 921, DDB_PCOV_2_TIMER_BLOCK = 922, DDB_PCOV_1_3PH_START = 923, DDB_PCOV_2_3PH_START = 924, DDB_PCOV_1_3PH_TRIP = 925, DDB_PCOV_2_3PH_TRIP = 926, DDB_CDIFF_SUPERVISION_START = 927, DDB_CTS_BLOCK = 928, DDB_CTS_BLOCK_DIFF = 929, DDB_CTS_RESTRAIN = 930, DDB_CTS_L1_I1 = 931, DDB_CTS_L2_I1 = 932, DDB_CTS_R1_1_I1 = 933, DDB_CTS_R1_2_I1 = 934, DDB_CTS_R2_1_I1 = 935, DDB_CTS_R2_2_I1 = 936, DDB_CTS_L1_I2I1_L = 937, DDB_CTS_L2_I2I1_L = 938, DDB_CTS_R1_1_I2I1_L = 939, DDB_CTS_R1_2_I2I1_L = 940, DDB_CTS_R2_1_I2I1_L = 941, DDB_CTS_R2_2_I2I1_L = 942, DDB_CTS_L1_I2I1_H = 943, DDB_CTS_L2_I2I1_H = 944, DDB_CTS_R1_1_I2I1_H = 945, DDB_CTS_R1_2_I2I1_H = 946, DDB_CTS_R2_1_I2I1_H = 947, DDB_CTS_R2_2_I2I1_H = 948, DDB_UNUSED_949 = 949, DDB_UNUSED_950 = 950, DDB_UNUSED_951 = 951, DDB_FLTREC_FLT_A = 952, DDB_FLTREC_FLT_B = 953, DDB_FLTREC_FLT_C = 954, DDB_FLTREC_FLT_N = 955, DDB_FLTREC_STRT_A = 956, DDB_FLTREC_STRT_B = 957, DDB_FLTREC_STRT_C = 958, DDB_FLTREC_STRT_N = 959, DDB_ZONE_1_AN = 960, DDB_ZONE_1_BN = 961, DDB_ZONE_1_CN = 962, DDB_ZONE_1_AB = 963, DDB_ZONE_1_BC = 964, DDB_ZONE_1_CA = 965, DDB_ZONE_2_AN = 966, DDB_ZONE_2_BN = 967, DDB_ZONE_2_CN = 968, DDB_ZONE_2_AB = 969, DDB_ZONE_2_BC = 970, DDB_ZONE_2_CA = 971, DDB_ZONE_3_AN = 972, DDB_ZONE_3_BN = 973, DDB_ZONE_3_CN = 974, DDB_ZONE_3_AB = 975, DDB_ZONE_3_BC = 976, DDB_ZONE_3_CA = 977, DDB_ZONE_P_AN = 978, DDB_ZONE_P_BN = 979, DDB_ZONE_P_CN = 980, DDB_ZONE_P_AB = 981, DDB_ZONE_P_BC = 982, DDB_ZONE_P_CA = 983, DDB_ZONE_4_AN = 984, DDB_ZONE_4_BN = 985, DDB_ZONE_4_CN = 986, DDB_ZONE_4_AB = 987, DDB_ZONE_4_BC = 988, DDB_ZONE_4_CA = 989, DDB_UNUSED_990 = 990, DDB_UNUSED_991 = 991, DDB_UNUSED_992 = 992, DDB_UNUSED_993 = 993, DDB_UNUSED_994 = 994, DDB_UNUSED_995 = 995, DDB_DEF_FWD = 996, DDB_DEF_REV = 997, DDB_DELTA_DIR_FWD_AN = 998, DDB_DELTA_DIR_FWD_BN = 999, DDB_DELTA_DIR_FWD_CN = 1000, DDB_DELTA_DIR_FWD_AB = 1001, DDB_DELTA_DIR_FWD_BC = 1002, DDB_DELTA_DIR_FWD_CA = 1003, DDB_DELTA_DIR_REV_AN = 1004, DDB_DELTA_DIR_REV_BN = 1005, DDB_DELTA_DIR_REV_CN = 1006, DDB_DELTA_DIR_REV_AB = 1007, DDB_DELTA_DIR_REV_BC = 1008, DDB_DELTA_DIR_REV_CA = 1009, DDB_PHS_SEL_A = 1010, DDB_PHS_SEL_B = 1011, DDB_PHS_SEL_C = 1012, DDB_PHS_SEL_N = 1013, DDB_PSB_DETECTED = 1014, DDB_PSB_FAULT = 1015, DDB_HARMONIC_2_A = 1016, DDB_HARMONIC_2_B = 1017, DDB_HARMONIC_2_C = 1018, DDB_HARMONIC_2_N = 1019, DDB_UNUSED_1020 = 1020, DDB_HARMONIC_2_REM_BLOCK_A = 1021, DDB_HARMONIC_2_REM_BLOCK_B = 1022, DDB_HARMONIC_2_REM_BLOCK_C = 1023, DDB_OUTPUT_TRI_LED_1_RED = 1024, DDB_OUTPUT_TRI_LED_1_GRN = 1025, DDB_OUTPUT_TRI_LED_2_RED = 1026, DDB_OUTPUT_TRI_LED_2_GRN = 1027, DDB_OUTPUT_TRI_LED_3_RED = 1028, DDB_OUTPUT_TRI_LED_3_GRN = 1029, DDB_OUTPUT_TRI_LED_4_RED = 1030, DDB_OUTPUT_TRI_LED_4_GRN = 1031, DDB_OUTPUT_TRI_LED_5_RED = 1032, DDB_OUTPUT_TRI_LED_5_GRN = 1033, DDB_OUTPUT_TRI_LED_6_RED = 1034, DDB_OUTPUT_TRI_LED_6_GRN = 1035, DDB_OUTPUT_TRI_LED_7_RED = 1036, DDB_OUTPUT_TRI_LED_7_GRN = 1037, DDB_OUTPUT_TRI_LED_8_RED = 1038, DDB_OUTPUT_TRI_LED_8_GRN = 1039, DDB_OUTPUT_TRI_LED_9_RED = 1040, DDB_OUTPUT_TRI_LED_9_GRN = 1041, DDB_OUTPUT_TRI_LED_10_RED = 1042, DDB_OUTPUT_TRI_LED_10_GRN = 1043, DDB_OUTPUT_TRI_LED_11_RED = 1044, DDB_OUTPUT_TRI_LED_11_GRN = 1045, DDB_OUTPUT_TRI_LED_12_RED = 1046, DDB_OUTPUT_TRI_LED_12_GRN = 1047, DDB_OUTPUT_TRI_LED_13_RED = 1048, DDB_OUTPUT_TRI_LED_13_GRN = 1049, DDB_OUTPUT_TRI_LED_14_RED = 1050, DDB_OUTPUT_TRI_LED_14_GRN = 1051, DDB_OUTPUT_TRI_LED_15_RED = 1052, DDB_OUTPUT_TRI_LED_15_GRN = 1053, DDB_OUTPUT_TRI_LED_16_RED = 1054, DDB_OUTPUT_TRI_LED_16_GRN = 1055, DDB_OUTPUT_TRI_LED_17_RED = 1056, DDB_OUTPUT_TRI_LED_17_GRN = 1057, DDB_OUTPUT_TRI_LED_18_RED = 1058, DDB_OUTPUT_TRI_LED_18_GRN = 1059, DDB_TRI_LED_RED_CON_1 = 1060, DDB_TRI_LED_GRN_CON_1 = 1061, DDB_TRI_LED_RED_CON_2 = 1062, DDB_TRI_LED_GRN_CON_2 = 1063, DDB_TRI_LED_RED_CON_3 = 1064, DDB_TRI_LED_GRN_CON_3 = 1065, DDB_TRI_LED_RED_CON_4 = 1066, DDB_TRI_LED_GRN_CON_4 = 1067, DDB_TRI_LED_RED_CON_5 = 1068, DDB_TRI_LED_GRN_CON_5 = 1069, DDB_TRI_LED_RED_CON_6 = 1070, DDB_TRI_LED_GRN_CON_6 = 1071, DDB_TRI_LED_RED_CON_7 = 1072, DDB_TRI_LED_GRN_CON_7 = 1073, DDB_TRI_LED_RED_CON_8 = 1074, DDB_TRI_LED_GRN_CON_8 = 1075, DDB_TRI_LED_RED_CON_9 = 1076, DDB_TRI_LED_GRN_CON_9 = 1077, DDB_TRI_LED_RED_CON_10 = 1078, DDB_TRI_LED_GRN_CON_10 = 1079, DDB_TRI_LED_RED_CON_11 = 1080, DDB_TRI_LED_GRN_CON_11 = 1081, DDB_TRI_LED_RED_CON_12 = 1082, DDB_TRI_LED_GRN_CON_12 = 1083, DDB_TRI_LED_RED_CON_13 = 1084, DDB_TRI_LED_GRN_CON_13 = 1085, DDB_TRI_LED_RED_CON_14 = 1086, DDB_TRI_LED_GRN_CON_14 = 1087, DDB_TRI_LED_RED_CON_15 = 1088, DDB_TRI_LED_GRN_CON_15 = 1089, DDB_TRI_LED_RED_CON_16 = 1090, DDB_TRI_LED_GRN_CON_16 = 1091, DDB_TRI_LED_RED_CON_17 = 1092, DDB_TRI_LED_GRN_CON_17 = 1093, DDB_TRI_LED_RED_CON_18 = 1094, DDB_TRI_LED_GRN_CON_18 = 1095, DDB_FN_KEY_1 = 1096, DDB_FN_KEY_2 = 1097, DDB_FN_KEY_3 = 1098, DDB_FN_KEY_4 = 1099, DDB_FN_KEY_5 = 1100, DDB_FN_KEY_6 = 1101, DDB_FN_KEY_7 = 1102, DDB_FN_KEY_8 = 1103, DDB_FN_KEY_9 = 1104, DDB_FN_KEY_10 = 1105, DDB_BROKEN_CURRENT_ALARM = 1106, DDB_BROKEN_CURRENT_LOCKOUT = 1107, DDB_MAINTENANCE_ALARM = 1108, DDB_MAINTENANCE_LOCKOUT = 1109, DDB_EXCESSIVE_OP_TIME_ALARM = 1110, DDB_EXCESSIVE_OP_TIME_LOCKOUT = 1111, DDB_EFF_LOCKOUT = 1112, DDB_BROKEN_CURRENT_ALARM_2 = 1113, DDB_BROKEN_CURRENT_LOCKOUT_2 = 1114, DDB_MAINTENANCE_ALARM_2 = 1115, DDB_MAINTENANCE_LOCKOUT_2 = 1116, DDB_EXCESSIVE_OP_TIME_ALARM_2 = 1117, DDB_EXCESSIVE_OP_TIME_LOCKOUT_2 = 1118, DDB_EFF_LOCKOUT_2 = 1119, DDB_SIGNALLING_FAIL_CH1_RX = 1120, DDB_SIGNALLING_FAIL_CH1_TX = 1121, DDB_REMOTE_1_GPS_FAIL = 1122, DDB_MUX_CLK_ERROR_CH1 = 1123, DDB_IEEE37_94_CH1_LOSS_OF_SIG = 1124, DDB_IEEE37_94_CH1_PATH_YELLOW = 1125, DDB_IEEE37_94_CH1_BAD_RX_N = 1126, DDB_CH1_TIMEOUT = 1127, DDB_CH1_MESS_LEVEL = 1128, DDB_CH1_PASSTHROUGH = 1129, DDB_SIGNALLING_FAIL_CH2_RX = 1130, DDB_SIGNALLING_FAIL_CH2_TX = 1131, DDB_REMOTE_2_GPS_FAIL = 1132, DDB_MUX_CLK_ERROR_CH2 = 1133, DDB_IEEE37_94_CH2_LOSS_OF_SIG = 1134, DDB_IEEE37_94_CH2_PATH_YELLOW = 1135, DDB_IEEE37_94_CH2_BAD_RX_N = 1136, DDB_CH2_TIMEOUT = 1137, DDB_CH2_MESS_LEVEL = 1138, DDB_CH2_PASSTHROUGH = 1139, DDB_CONFIGURED = 1140, DDB_RECONFIGURE_OK = 1141, DDB_RECONFIGURE_FAIL = 1142, DDB_RESTORE_OK = 1143, DDB_RESTORE_FAIL = 1144, DDB_INHIBIT_CURRENT_DIFF = 1145, DDB_BACKUP_IN = 1146, DDB_FL_CURRENT_PROT_SEF_TRIP = 1147, DDB_CURRENT_PROT_SEF_TRIP = 1148, DDB_UFREQ_1_TIMER_BLOCK = 1149, DDB_UFREQ_2_TIMER_BLOCK = 1150, DDB_UFREQ_3_TIMER_BLOCK = 1151, DDB_UFREQ_4_TIMER_BLOCK = 1152, DDB_OFREQ_1_TIMER_BLOCK = 1153, DDB_OFREQ_2_TIMER_BLOCK = 1154, DDB_UFREQ_1_START = 1155, DDB_UFREQ_2_START = 1156, DDB_UFREQ_3_START = 1157, DDB_UFREQ_4_START = 1158, DDB_OFREQ_1_START = 1159, DDB_OFREQ_2_START = 1160, DDB_UFREQ_1_TRIP = 1161, DDB_UFREQ_2_TRIP = 1162, DDB_UFREQ_3_TRIP = 1163, DDB_UFREQ_4_TRIP = 1164, DDB_OFREQ_1_TRIP = 1165, DDB_OFREQ_2_TRIP = 1166, DDB_INHIBIT_UF1 = 1167, DDB_INHIBIT_UF2 = 1168, DDB_INHIBIT_UF3 = 1169, DDB_INHIBIT_UF4 = 1170, DDB_INHIBIT_OF1 = 1171, DDB_INHIBIT_OF2 = 1172, DDB_UNUSED_1173 = 1173, DDB_UNUSED_1174 = 1174, DDB_UNUSED_1175 = 1175, DDB_UIPASSWORD_ONE = 1176, DDB_UIPASSWORD_TWO = 1177, DDB_FCURPASSWORD_ONE = 1178, DDB_FCURPASSWORD_TWO = 1179, DDB_REMOTEPASSWORD_ONE = 1180, DDB_REMOTEPASSWORD_TWO = 1181, DDB_REMOTE2PASSWORD_ONE = 1182, DDB_REMOTE2PASSWORD_TWO = 1183, DDB_MONITOR_PORT_1 = 1184, DDB_MONITOR_PORT_2 = 1185, DDB_MONITOR_PORT_3 = 1186, DDB_MONITOR_PORT_4 = 1187, DDB_MONITOR_PORT_5 = 1188, DDB_MONITOR_PORT_6 = 1189, DDB_MONITOR_PORT_7 = 1190, DDB_MONITOR_PORT_8 = 1191, DDB_NEW_FAULT_REC = 1192, DDB_UNUSED_DR = 1193, DDB_PSLINT_1 = 1194, DDB_PSLINT_2 = 1195, DDB_PSLINT_3 = 1196, DDB_PSLINT_4 = 1197, DDB_PSLINT_5 = 1198, DDB_PSLINT_6 = 1199, DDB_PSLINT_7 = 1200, DDB_PSLINT_8 = 1201, DDB_PSLINT_9 = 1202, DDB_PSLINT_10 = 1203, DDB_PSLINT_11 = 1204, DDB_PSLINT_12 = 1205, DDB_PSLINT_13 = 1206, DDB_PSLINT_14 = 1207, DDB_PSLINT_15 = 1208, DDB_PSLINT_16 = 1209, DDB_PSLINT_17 = 1210, DDB_PSLINT_18 = 1211, DDB_PSLINT_19 = 1212, DDB_PSLINT_20 = 1213, DDB_PSLINT_21 = 1214, DDB_PSLINT_22 = 1215, DDB_PSLINT_23 = 1216, DDB_PSLINT_24 = 1217, DDB_PSLINT_25 = 1218, DDB_PSLINT_26 = 1219, DDB_PSLINT_27 = 1220, DDB_PSLINT_28 = 1221, DDB_PSLINT_29 = 1222, DDB_PSLINT_30 = 1223, DDB_PSLINT_31 = 1224, DDB_PSLINT_32 = 1225, DDB_PSLINT_33 = 1226, DDB_PSLINT_34 = 1227, DDB_PSLINT_35 = 1228, DDB_PSLINT_36 = 1229, DDB_PSLINT_37 = 1230, DDB_PSLINT_38 = 1231, DDB_PSLINT_39 = 1232, DDB_PSLINT_40 = 1233, DDB_PSLINT_41 = 1234, DDB_PSLINT_42 = 1235, DDB_PSLINT_43 = 1236, DDB_PSLINT_44 = 1237, DDB_PSLINT_45 = 1238, DDB_PSLINT_46 = 1239, DDB_PSLINT_47 = 1240, DDB_PSLINT_48 = 1241, DDB_PSLINT_49 = 1242, DDB_PSLINT_50 = 1243, DDB_PSLINT_51 = 1244, DDB_PSLINT_52 = 1245, DDB_PSLINT_53 = 1246, DDB_PSLINT_54 = 1247, DDB_PSLINT_55 = 1248, DDB_PSLINT_56 = 1249, DDB_PSLINT_57 = 1250, DDB_PSLINT_58 = 1251, DDB_PSLINT_59 = 1252, DDB_PSLINT_60 = 1253, DDB_PSLINT_61 = 1254, DDB_PSLINT_62 = 1255, DDB_PSLINT_63 = 1256, DDB_PSLINT_64 = 1257, DDB_PSLINT_65 = 1258, DDB_PSLINT_66 = 1259, DDB_PSLINT_67 = 1260, DDB_PSLINT_68 = 1261, DDB_PSLINT_69 = 1262, DDB_PSLINT_70 = 1263, DDB_PSLINT_71 = 1264, DDB_PSLINT_72 = 1265, DDB_PSLINT_73 = 1266, DDB_PSLINT_74 = 1267, DDB_PSLINT_75 = 1268, DDB_PSLINT_76 = 1269, DDB_PSLINT_77 = 1270, DDB_PSLINT_78 = 1271, DDB_PSLINT_79 = 1272, DDB_PSLINT_80 = 1273, DDB_PSLINT_81 = 1274, DDB_PSLINT_82 = 1275, DDB_PSLINT_83 = 1276, DDB_PSLINT_84 = 1277, DDB_PSLINT_85 = 1278, DDB_PSLINT_86 = 1279, DDB_PSLINT_87 = 1280, DDB_PSLINT_88 = 1281, DDB_PSLINT_89 = 1282, DDB_PSLINT_90 = 1283, DDB_PSLINT_91 = 1284, DDB_PSLINT_92 = 1285, DDB_PSLINT_93 = 1286, DDB_PSLINT_94 = 1287, DDB_PSLINT_95 = 1288, DDB_PSLINT_96 = 1289, DDB_PSLINT_97 = 1290, DDB_PSLINT_98 = 1291, DDB_PSLINT_99 = 1292, DDB_PSLINT_100 = 1293, DDB_VTS_IA_OPERATED = 1294, DDB_VTS_IB_OPERATED = 1295, DDB_VTS_IC_OPERATED = 1296, DDB_VTS_VA_OPERATED = 1297, DDB_VTS_VB_OPERATED = 1298, DDB_VTS_VC_OPERATED = 1299, DDB_VTS_I2_OPERATED = 1300, DDB_VTS_V2_OPERATED = 1301, DDB_VTS_DELTA_IA_OPERATED = 1302, DDB_VTS_DELTA_IB_OPERATED = 1303, DDB_VTS_DELTA_IC_OPERATED = 1304, DDB_ZONE_1_AN_RAW = 1305, DDB_ZONE_1_BN_RAW = 1306, DDB_ZONE_1_CN_RAW = 1307, DDB_ZONE_1_AB_RAW = 1308, DDB_ZONE_1_BC_RAW = 1309, DDB_ZONE_1_CA_RAW = 1310, DDB_ZONE_2_AN_RAW = 1311, DDB_ZONE_2_BN_RAW = 1312, DDB_ZONE_2_CN_RAW = 1313, DDB_ZONE_2_AB_RAW = 1314, DDB_ZONE_2_BC_RAW = 1315, DDB_ZONE_2_CA_RAW = 1316, DDB_ZONE_3_AN_RAW = 1317, DDB_ZONE_3_BN_RAW = 1318, DDB_ZONE_3_CN_RAW = 1319, DDB_ZONE_3_AB_RAW = 1320, DDB_ZONE_3_BC_RAW = 1321, DDB_ZONE_3_CA_RAW = 1322, DDB_ZONE_P_AN_RAW = 1323, DDB_ZONE_P_BN_RAW = 1324, DDB_ZONE_P_CN_RAW = 1325, DDB_ZONE_P_AB_RAW = 1326, DDB_ZONE_P_BC_RAW = 1327, DDB_ZONE_P_CA_RAW = 1328, DDB_ZONE_4_AN_RAW = 1329, DDB_ZONE_4_BN_RAW = 1330, DDB_ZONE_4_CN_RAW = 1331, DDB_ZONE_4_AB_RAW = 1332, DDB_ZONE_4_BC_RAW = 1333, DDB_ZONE_4_CA_RAW = 1334, DDB_LDBN = 1335, DDB_WI_I0_I2 = 1336, DDB_DELTA_DIR_FWD_AN_RAW = 1337, DDB_DELTA_DIR_FWD_BN_RAW = 1338, DDB_DELTA_DIR_FWD_CN_RAW = 1339, DDB_DELTA_DIR_FWD_AB_RAW = 1340, DDB_DELTA_DIR_FWD_BC_RAW = 1341, DDB_DELTA_DIR_FWD_CA_RAW = 1342, DDB_DELTA_DIR_REV_AN_RAW = 1343, DDB_DELTA_DIR_REV_BN_RAW = 1344, DDB_DELTA_DIR_REV_CN_RAW = 1345, DDB_DELTA_DIR_REV_AB_RAW = 1346, DDB_DELTA_DIR_REV_BC_RAW = 1347, DDB_DELTA_DIR_REV_CA_RAW = 1348, DDB_ZONE_1_BLOCKED = 1349, DDB_ZONE_2_BLOCKED = 1350, DDB_ZONE_3_BLOCKED = 1351, DDB_ZONE_P_BLOCKED = 1352, DDB_ZONE_4_BLOCKED = 1353, DDB_MEM_VALID = 1354, DDB_PH_TWO_CYCLE = 1355, DDB_PH_FIVE_CYCLE = 1356, DDB_FROZEN = 1357, DDB_AIDED1_WI_LEVEL_DETECT_A = 1358, DDB_AIDED1_WI_LEVEL_DETECT_B = 1359, DDB_AIDED1_WI_LEVEL_DETECT_C = 1360, DDB_AIDED2_WI_LEVEL_DETECT_A = 1361, DDB_AIDED2_WI_LEVEL_DETECT_B = 1362, DDB_AIDED2_WI_LEVEL_DETECT_C = 1363, DDB_CB_PRE_LOCKOUT = 1364, DDB_LOL_LEVEL_DETECT_A = 1365, DDB_LOL_LEVEL_DETECT_B = 1366, DDB_LOL_LEVEL_DETECT_C = 1367, DDB_FREQ_ABOVE_RANGE_LIMIT = 1368, DDB_FREQ_BELOW_RANGE_LIMIT = 1369, DDB_FREQ_NOT_FOUND = 1370, DDB_FREQ_STOP_TRACK = 1371, DDB_FOURTH_HARM_A = 1372, DDB_FOURTH_HARM_B = 1373, DDB_FOURTH_HARM_C = 1374, DDB_TELEPROTECTION_DISTURBED = 1375, DDB_BACK_UP_SUPERVISION = 1376, DDB_POC_TRIP_BY_VTS = 1377, DDB_TELEPROTECTION_SENT = 1378, DDB_TELEPROTECTION_RECEIVED = 1379, DDB_GROUP_WARNING = 1380, DDB_GROUP_ALARM = 1381, DDB_AR_ON_PULSE = 1382, DDB_AR_OFF_PULSE = 1383, DDB_AR_ENABLE = 1384, DDB_AR_IN_SERVICE = 1385, DDB_MAX_CH1_PROP_DELAY = 1386, DDB_MAX_CH2_PROP_DELAY = 1387, DDB_MAX_CH1_TXRX_TIME = 1388, DDB_MAX_CH2_TXRX_TIME = 1389, DDB_ZONE_V_AN_RAW = 1390, DDB_ZONE_V_BN_RAW = 1391, DDB_ZONE_V_CN_RAW = 1392, DDB_ZONE_V_AB_RAW = 1393, DDB_ZONE_V_BC_RAW = 1394, DDB_ZONE_V_CA_RAW = 1395, DDB_GND_Z2_LOW = 1396, DDB_GND_Z2_HIGH = 1397, DDB_GND_Z3_LOW = 1398, DDB_GND_Z3_HIGH = 1399, DDB_GND_Z4_LOW = 1400, DDB_GND_Z4_HIGH = 1401, DDB_GND_ZP_LOW = 1402, DDB_GND_ZP_HIGH = 1403, DDB_VTS_BLOCK_DIST = 1404, DDB_UNUSED_1405 = 1405, DDB_UNUSED_1406 = 1406, DDB_UNUSED_1407 = 1407, DDB_CB2_LEAD = 1408, DDB_FOLLOW_AR_SP = 1409, DDB_FOLLOW_AR_3P = 1410, DDB_AR_3_POLE_IN_PROGRESS_2 = 1411, DDB_EN_CB2_INDEPENDENT = 1412, DDB_CB2_SPDT_EXTERNAL = 1413, DDB_CB2_3PDT_EXTERNAL = 1414, DDB_CB2_ARPERMIT = 1415, DDB_CB2_AR_STOP = 1416, DDB_EXTERNAL_RES_CB2_AROK = 1417, DDB_EXTERNAL_RES_CB2_SHOTS = 1418, DDB_RESET_CB2_CLOSE_DELAY = 1419, DDB_INHIBIT_AR = 1420, DDB_BLOCK_CB2_AR = 1421, DDB_RESET_CB2_LOCKOUT = 1422, DDB_MCB_VTS_CS2 = 1423, DDB_INHIBIT_LIVE_BUS2 = 1424, DDB_INHIBIT_DEAD_BUS2 = 1425, DDB_CHECKSYNC2_1_ENABLED = 1426, DDB_CHECKSYNC2_2_ENABLED = 1427, DDB_CB2_IN_SERVICE = 1428, DDB_CB2_NO_AR = 1429, DDB_UNUSED_1430 = 1430, DDB_LEAD_CB2 = 1431, DDB_FOLLOW_CB = 1432, DDB_FOLLOW_CB2 = 1433, DDB_CB2_AR_INIT = 1434, DDB_CB2_AR_INPROGRESS = 1435, DDB_CB2_IND_AR_INPROGRESS = 1436, DDB_DIFFERENTIAL_HIGHSTART = 1437, DDB_DIFFERENTIAL_HIGHSTART_A = 1438, DDB_DIFFERENTIAL_HIGHSTART_B = 1439, DDB_DIFFERENTIAL_HIGHSTART_C = 1440, DDB_CB2_FAIL_AR = 1441, DDB_DEAD_TIME_OK_CB2LSP = 1442, DDB_DEAD_TIME_OK_CB2L3P = 1443, DDB_CB2_3POLE_DEAD_TIME = 1444, DDB_ENABLE_CB2_FOLLOWER = 1445, DDB_SPOLE_FOLLOWER_TIME = 1446, DDB_3POLE_FOLLOWER_TIME = 1447, DDB_CB2_AUTO_CLOSE = 1448, DDB_SET_CB2_CLOSE = 1449, DDB_CB2_CONTROL = 1450, DDB_CB2_SUCCESSFUL_SPAR = 1451, DDB_CB2_SUCCESSFUL_3PAR = 1452, DDB_CB2_CTRL_CLOSE_IN_PROGRESS = 1453, DDB_CB2_FAST_SYSTEM_CHECK_OK = 1454, DDB_CB2_LEADER_SYSTEM_CHECK_OK = 1455, DDB_CB2_FOLLOWER_SYSTEM_CHECK_OK = 1456, DDB_CB2_IND_SYSTEM_CHECK_OK = 1457, DDB_CB2_MANUAL_SYSTEM_CHECK_OK = 1458, DDB_CB2_FAIL_PROTECTION_TRIP = 1459, DDB_CB2_LOCKOUT = 1460, DDB_SYSCHECKS_BUS2_LIVE = 1461, DDB_SYSCHECKS_BUS2_DEAD = 1462, DDB_CHECKSYNC2_2_OK = 1463, DDB_CS2_SLIP_O = 1464, DDB_CS2_SLIP_U = 1465, DDB_CS2_1_SLIP_O = 1466, DDB_CS2_1_SLIP_U = 1467, DDB_CS2_2_SLIP_O = 1468, DDB_CS2_2_SLIP_U = 1469, DDB_SYSCHECKS2_1_VLINE_DIFF_HIGH = 1470, DDB_SYSCHECKS2_2_VLINE_DIFF_HIGH = 1471, DDB_SYSCHECKS2_1_VBUS_DIFF_HIGH = 1472, DDB_SYSCHECKS2_2_VBUS_DIFF_HIGH = 1473, DDB_CS2_1_LINE_FREQ_GT_BUS_FREQ = 1474, DDB_CS2_2_LINE_FREQ_GT_BUS_FREQ = 1475, DDB_CS2_1_LINE_FREQ_LT_BUS_FREQ = 1476, DDB_CS2_2_LINE_FREQ_LT_BUS_FREQ = 1477, DDB_CS2_1_ANGLE_NOT_OK_POS = 1478, DDB_CS2_1_ANGLE_NOT_OK_NEG = 1479, DDB_CS2_2_ANGLE_NOT_OK_POS = 1480, DDB_CS2_2_ANGLE_NOT_OK_NEG = 1481, DDB_SYSCHECKS2_ANGLE_ACW = 1482, DDB_SYSCHECKS2_ANGLE_CW = 1483, DDB_SYSCHECKS_INACTIVE2 = 1484, DDB_AR_FORCE_3_POLE_TRIPS_CB2 = 1485, DDB_UNUSED_1486 = 1486, DDB_CB_IND_AR_INPROGRESS = 1487, DDB_ENABLE_CB_FOLLOWER = 1488, DDB_SPOLE_INDEPENDENT_TIME = 1489, DDB_3POLE_INDEPENDENT_TIME = 1490, DDB_CB_FOLLOWR_SYSTEM_CHECK_OK = 1491, DDB_CB_IND_SYSTEM_CHECK_OK = 1492, DDB_CS2_LINE_FREQ_GT_BUS_FREQ = 1493, DDB_CS2_LINE_FREQ_LT_BUS_FREQ = 1494, DDB_CS2_ANGLE_NOT_OK_POS = 1495, DDB_CS2_ANGLE_NOT_OK_NEG = 1496, DDB_LEAD_AR_SP = 1497, DDB_LEAD_AR_3P = 1498, DDB_CB2_TRIP_AR_MEMORY_A = 1499, DDB_CB2_TRIP_AR_MEMORY_B = 1500, DDB_CB2_TRIP_AR_MEMORY_C = 1501, DDB_UNUSED_1502 = 1502, DDB_EN_CB_INDEPENDENT = 1503, DDB_INIT_APH_AR_TEST = 1504, DDB_INIT_BPH_AR_TEST = 1505, DDB_INIT_CPH_AR_TEST = 1506, DDB_INIT_3PH_AR_TEST = 1507, DDB_EXTERNAL_FAULT_A = 1508, DDB_EXTERNAL_FAULT_B = 1509, DDB_EXTERNAL_FAULT_C = 1510, DDB_AR_SKIP_SHOT1 = 1511, DDB_CB_SPDT_EXTERNAL = 1512, DDB_CB_3PDT_EXTERNAL = 1513, DDB_CB_ARPERMIT = 1514, DDB_CB_AR_STOP = 1515, DDB_EXTERNAL_RECLAIM_TIME = 1516, DDB_EXTERNAL_RES_CB_AROK = 1517, DDB_EXTERNAL_RES_CB_SHOTS = 1518, DDB_UNUSED_1519 = 1519, DDB_UNUSED_1520 = 1520, DDB_MCB_VTS_CS1 = 1521, DDB_INHIBIT_LIVE_LINE = 1522, DDB_INHIBIT_DEAD_LINE = 1523, DDB_INHIBIT_LIVE_BUS1 = 1524, DDB_INHIBIT_DEAD_BUS1 = 1525, DDB_CB1_IN_SERVICE = 1526, DDB_UNUSED_1527 = 1527, DDB_CB_NO_AR = 1528, DDB_UNUSED_1529 = 1529, DDB_LEAD_CB = 1530, DDB_UNUSED_1531 = 1531, DDB_UNUSED_1532 = 1532, DDB_UNUSED_1533 = 1533, DDB_UNUSED_1534 = 1534, DDB_TRIP_AR_MEMORY_A = 1535, DDB_TRIP_AR_MEMORY_B = 1536, DDB_TRIP_AR_MEMORY_C = 1537, DDB_UNUSED_1538 = 1538, DDB_UNUSED_1539 = 1539, DDB_UNUSED_1540 = 1540, DDB_AR_START = 1541, DDB_AR_IN_PROGRESS = 1542, DDB_CB_AR_INIT = 1543, DDB_CB_AR_INPROGRESS = 1544, DDB_UNUSED_1545 = 1545, DDB_SEQ_COUNT_GREATER_THAN_SHOTS = 1546, DDB_EVOLVE_3PHASE = 1547, DDB_UNUSED_1548 = 1548, DDB_UNUSED_1549 = 1549, DDB_CB_FAIL_AR = 1550, DDB_DEADTIME_OK_ALL = 1551, DDB_DEAD_TIME_OK_CB1LSP = 1552, DDB_DEAD_TIME_OK_CB1L3P = 1553, DDB_SPDT_IN_PROGRESS = 1554, DDB_OK_TIME_3POLE = 1555, DDB_3POLE_DEAD_TIME1 = 1556, DDB_3POLE_DEAD_TIME2 = 1557, DDB_3POLE_DEAD_TIME3 = 1558, DDB_3POLE_DEAD_TIME4 = 1559, DDB_CB_3POLE_DEAD_TIME = 1560, DDB_SPOLE_FT_COMPLETE = 1561, DDB_3POLE_FT_COMPLETE = 1562, DDB_IND_SPOLE_FT_COMPLETE = 1563, DDB_IND_3POLE_FT_COMPLETE = 1564, DDB_SET_CB_CLOSE = 1565, DDB_CB_CONTROL = 1566, DDB_SP_RECLAIM_TIME = 1567, DDB_SP_RECLAIM_TIME_COMPLETE = 1568, DDB_TP_RECLAIM_TIME = 1569, DDB_TP_RECLAIM_TIME_COMPLETE = 1570, DDB_CB_SUCCESSFUL_SPAR = 1571, DDB_CB_FAST_SYSTEM_CHECK_OK = 1572, DDB_CB_LEADER_SYSTEM_CHECK_OK = 1573, DDB_CB_MANUAL_SYSTEM_CHECK_OK = 1574, DDB_CB_FAIL_PROTECTION_TRIP = 1575, DDB_CB_LOCKOUT = 1576, DDB_CHECKSYNC2_1_OK = 1577, DDB_CS1_SLIP_O = 1578, DDB_CS1_SLIP_U = 1579, DDB_SYSCHECKS_VLINE_U = 1580, DDB_SYSCHECKS_VLINE_O = 1581, DDB_SYSCHECKS_VBUS_U = 1582, DDB_SYSCHECKS_VBUS_O = 1583, DDB_SYSCHECKS_VBUS2_U = 1584, DDB_SYSCHECKS_VBUS2_O = 1585, DDB_SYSCHECKS_VLINE_DIFF_HIGH = 1586, DDB_SYSCHECKS1_2_VLINE_DIFF_HIGH = 1587, DDB_SYSCHECKS_VBUS_DIFF_HIGH = 1588, DDB_SYSCHECKS1_2_VBUS_DIFF_HIGH = 1589, DDB_CS1_LINE_FREQ_GT_BUS_FREQ = 1590, DDB_CS1_LINE_FREQ_LT_BUS_FREQ = 1591, DDB_CS1_ANGLE_NOT_OK_POS = 1592, DDB_CS1_ANGLE_NOT_OK_NEG = 1593, DDB_SYSCHECKS_ANGLE_ACW = 1594, DDB_SYSCHECKS_ANGLE_CW = 1595, DDB_UNUSED_1596 = 1596, DDB_RESET_ALL_VALUES_2 = 1597, DDB_CB2_PRE_LOCKOUT = 1598, DDB_CB2_LOCKOUT_ALARM = 1599, DDB_TRIP_3PH_2 = 1600, DDB_TRIP_A_PHASE_2 = 1601, DDB_TRIP_B_PHASE_2 = 1602, DDB_TRIP_C_PHASE_2 = 1603, DDB_FORCE_3_POLE_TRIP_2 = 1604, DDB_AR_ENABLE_CB2 = 1605, DDB_INP_TR2P_2 = 1606, DDB_POLE_DISCREPENCE_TRIP_2 = 1607, DDB_TR_3_PHASE_CB2 = 1608, DDB_AR_ENABLE_CB1 = 1609, DDB_CB1_INDEPENDENT_INIT_A_PHASE = 1610, DDB_CB1_INDEPENDENT_INIT_B_PHASE = 1611, DDB_CB1_INDEPENDENT_INIT_C_PHASE = 1612, DDB_CB2_INDEPENDENT_INIT_A_PHASE = 1613, DDB_CB2_INDEPENDENT_INIT_B_PHASE = 1614, DDB_CB2_INDEPENDENT_INIT_C_PHASE = 1615, DDB_PSLINT_101 = 1616, DDB_PSLINT_102 = 1617, DDB_PSLINT_103 = 1618, DDB_PSLINT_104 = 1619, DDB_PSLINT_105 = 1620, DDB_PSLINT_106 = 1621, DDB_PSLINT_107 = 1622, DDB_PSLINT_108 = 1623, DDB_PSLINT_109 = 1624, DDB_PSLINT_110 = 1625, DDB_PSLINT_111 = 1626, DDB_PSLINT_112 = 1627, DDB_PSLINT_113 = 1628, DDB_PSLINT_114 = 1629, DDB_PSLINT_115 = 1630, DDB_PSLINT_116 = 1631, DDB_PSLINT_117 = 1632, DDB_PSLINT_118 = 1633, DDB_PSLINT_119 = 1634, DDB_PSLINT_120 = 1635, DDB_PSLINT_121 = 1636, DDB_PSLINT_122 = 1637, DDB_PSLINT_123 = 1638, DDB_PSLINT_124 = 1639, DDB_PSLINT_125 = 1640, DDB_PSLINT_126 = 1641, DDB_PSLINT_127 = 1642, DDB_PSLINT_128 = 1643, DDB_PSLINT_129 = 1644, DDB_PSLINT_130 = 1645, DDB_PSLINT_131 = 1646, DDB_PSLINT_132 = 1647, DDB_PSLINT_133 = 1648, DDB_PSLINT_134 = 1649, DDB_PSLINT_135 = 1650, DDB_PSLINT_136 = 1651, DDB_PSLINT_137 = 1652, DDB_PSLINT_138 = 1653, DDB_PSLINT_139 = 1654, DDB_PSLINT_140 = 1655, DDB_PSLINT_141 = 1656, DDB_PSLINT_142 = 1657, DDB_PSLINT_143 = 1658, DDB_PSLINT_144 = 1659, DDB_PSLINT_145 = 1660, DDB_PSLINT_146 = 1661, DDB_PSLINT_147 = 1662, DDB_PSLINT_148 = 1663, DDB_PSLINT_149 = 1664, DDB_PSLINT_150 = 1665, DDB_HARMONIC_5_A = 1666, DDB_HARMONIC_5_B = 1667, DDB_HARMONIC_5_C = 1668, DDB_HARMONIC_5_REM_BLOCK_A = 1669, DDB_HARMONIC_5_REM_BLOCK_B = 1670, DDB_HARMONIC_5_REM_BLOCK_C = 1671, DDB_CBF1_TRIP_APH = 1672, DDB_CBF1_TRIP_BPH = 1673, DDB_CBF1_TRIP_CPH = 1674, DDB_CBF2_TRIP_APH = 1675, DDB_CBF2_TRIP_BPH = 1676, DDB_CBF2_TRIP_CPH = 1677, DDB_CB2F1_TRIP_APH = 1678, DDB_CB2F1_TRIP_BPH = 1679, DDB_CB2F1_TRIP_CPH = 1680, DDB_CB2F2_TRIP_APH = 1681, DDB_CB2F2_TRIP_BPH = 1682, DDB_CB2F2_TRIP_CPH = 1683, DDB_DIST_STUBBUS_START_A = 1684, DDB_DIST_STUBBUS_START_B = 1685, DDB_DIST_STUBBUS_START_C = 1686, DDB_DIST_STUBBUS_TRIP_A = 1687, DDB_DIST_STUBBUS_TRIP_B = 1688, DDB_DIST_STUBBUS_TRIP_C = 1689, DDB_DIST_STUBBUS_START = 1690, DDB_ANY_DIST_START = 1691, DDB_DIFFERENTIAL_START_N = 1692, DDB_NEUTRALCOMP_START = 1693, DDB_DIFFERENTIAL_TRIP_N = 1694, DDB_DIFFERENTIAL_INTERTRIP_N = 1695, DDB_IEC_USR_OPN_1 = 1696, DDB_IEC_USR_CLS_1 = 1697, DDB_IEC_USR_OPN_2 = 1698, DDB_IEC_USR_CLS_2 = 1699, DDB_IEC_USR_OPN_3 = 1700, DDB_IEC_USR_CLS_3 = 1701, DDB_IEC_USR_OPN_4 = 1702, DDB_IEC_USR_CLS_4 = 1703, DDB_IEC_USR_OPN_5 = 1704, DDB_IEC_USR_CLS_5 = 1705, DDB_IEC_USR_OPN_6 = 1706, DDB_IEC_USR_CLS_6 = 1707, DDB_IEC_USR_OPN_7 = 1708, DDB_IEC_USR_CLS_7 = 1709, DDB_IEC_USR_OPN_8 = 1710, DDB_IEC_USR_CLS_8 = 1711, DDB_PH_CMP_TRIP_MUTE_PLC = 1712, DDB_PH_CMP_TRIP_A_SEL = 1713, DDB_PH_CMP_TRIP_B_SEL = 1714, DDB_PH_CMP_TRIP_C_SEL = 1715, DDB_PH_CMP_TRIP_3PH_SEL = 1716, DDB_INTERLOCK_CB1_CLS_ENABLED = 1717, DDB_INTERLOCK_CB1_OPN_ENABLED = 1718, DDB_INTERLOCK_CB2_CLS_ENABLED = 1719, DDB_INTERLOCK_CB2_OPN_ENABLED = 1720, DDB_AIDED1_ECHO = 1721, DDB_AIDED2_ECHO = 1722, DDB_HARMONIC_2_SEF = 1723, DDB_INHIBIT_SEF1 = 1724, DDB_INHIBIT_SEF2 = 1725, DDB_INHIBIT_SEF3 = 1726, DDB_INHIBIT_SEF4 = 1727, DDB_VIP_QUALITY_1 = 1728, DDB_VIP_QUALITY_2 = 1729, DDB_VIP_QUALITY_3 = 1730, DDB_VIP_QUALITY_4 = 1731, DDB_VIP_QUALITY_5 = 1732, DDB_VIP_QUALITY_6 = 1733, DDB_VIP_QUALITY_7 = 1734, DDB_VIP_QUALITY_8 = 1735, DDB_VIP_QUALITY_9 = 1736, DDB_VIP_QUALITY_10 = 1737, DDB_VIP_QUALITY_11 = 1738, DDB_VIP_QUALITY_12 = 1739, DDB_VIP_QUALITY_13 = 1740, DDB_VIP_QUALITY_14 = 1741, DDB_VIP_QUALITY_15 = 1742, DDB_VIP_QUALITY_16 = 1743, DDB_VIP_QUALITY_17 = 1744, DDB_VIP_QUALITY_18 = 1745, DDB_VIP_QUALITY_19 = 1746, DDB_VIP_QUALITY_20 = 1747, DDB_VIP_QUALITY_21 = 1748, DDB_VIP_QUALITY_22 = 1749, DDB_VIP_QUALITY_23 = 1750, DDB_VIP_QUALITY_24 = 1751, DDB_VIP_QUALITY_25 = 1752, DDB_VIP_QUALITY_26 = 1753, DDB_VIP_QUALITY_27 = 1754, DDB_VIP_QUALITY_28 = 1755, DDB_VIP_QUALITY_29 = 1756, DDB_VIP_QUALITY_30 = 1757, DDB_VIP_QUALITY_31 = 1758, DDB_VIP_QUALITY_32 = 1759, DDB_VIP_PUB_PRES_1 = 1760, DDB_VIP_PUB_PRES_2 = 1761, DDB_VIP_PUB_PRES_3 = 1762, DDB_VIP_PUB_PRES_4 = 1763, DDB_VIP_PUB_PRES_5 = 1764, DDB_VIP_PUB_PRES_6 = 1765, DDB_VIP_PUB_PRES_7 = 1766, DDB_VIP_PUB_PRES_8 = 1767, DDB_VIP_PUB_PRES_9 = 1768, DDB_VIP_PUB_PRES_10 = 1769, DDB_VIP_PUB_PRES_11 = 1770, DDB_VIP_PUB_PRES_12 = 1771, DDB_VIP_PUB_PRES_13 = 1772, DDB_VIP_PUB_PRES_14 = 1773, DDB_VIP_PUB_PRES_15 = 1774, DDB_VIP_PUB_PRES_16 = 1775, DDB_VIP_PUB_PRES_17 = 1776, DDB_VIP_PUB_PRES_18 = 1777, DDB_VIP_PUB_PRES_19 = 1778, DDB_VIP_PUB_PRES_20 = 1779, DDB_VIP_PUB_PRES_21 = 1780, DDB_VIP_PUB_PRES_22 = 1781, DDB_VIP_PUB_PRES_23 = 1782, DDB_VIP_PUB_PRES_24 = 1783, DDB_VIP_PUB_PRES_25 = 1784, DDB_VIP_PUB_PRES_26 = 1785, DDB_VIP_PUB_PRES_27 = 1786, DDB_VIP_PUB_PRES_28 = 1787, DDB_VIP_PUB_PRES_29 = 1788, DDB_VIP_PUB_PRES_30 = 1789, DDB_VIP_PUB_PRES_31 = 1790, DDB_VIP_PUB_PRES_32 = 1791, DDB_CHANNEL_FAIL = 1792, DDB_NO_SIGNAL_RECEIVED = 1793, DDB_TGF_START = 1794, DDB_TGF_DIR_FWD = 1795, DDB_TGF_DIR_REV = 1796, DDB_TGF_INTERMITT = 1797, DDB_TGF_STEADY = 1798, DDB_TGF_RESET = 1799, DDB_TGF_INHIBIT = 1800, DDB_TGF_ALARM_LOGIC = 1801, DDB_TGF_ALARM_OUTPUT = 1802, DDB_PASSWORD_BLK_UI = 1803, DDB_PASSWORD_BLK_FP = 1804, DDB_PASSWORD_BLK_RP1 = 1805, DDB_PASSWORD_BLK_RP2 = 1806, DDB_UNUSED_1807 = 1807, DDB_UNUSED_1808 = 1808, DDB_UNUSED_1809 = 1809, DDB_UNUSED_1810 = 1810, DDB_UNUSED_1811 = 1811, DDB_UNUSED_1812 = 1812, DDB_UNUSED_1813 = 1813, DDB_UNUSED_1814 = 1814, DDB_UNUSED_1815 = 1815, DDB_UNUSED_1816 = 1816, DDB_UNUSED_1817 = 1817, DDB_UNUSED_1818 = 1818, DDB_UNUSED_1819 = 1819, DDB_UNUSED_1820 = 1820, DDB_UNUSED_1821 = 1821, DDB_UNUSED_1822 = 1822, DDB_UNUSED_1823 = 1823, DDB_UNUSED_1824 = 1824, DDB_UNUSED_1825 = 1825, DDB_UNUSED_1826 = 1826, DDB_UNUSED_1827 = 1827, DDB_UNUSED_1828 = 1828, DDB_UNUSED_1829 = 1829, DDB_UNUSED_1830 = 1830, DDB_UNUSED_1831 = 1831, DDB_UNUSED_1832 = 1832, DDB_UNUSED_1833 = 1833, DDB_UNUSED_1834 = 1834, DDB_UNUSED_1835 = 1835, DDB_UNUSED_1836 = 1836, DDB_UNUSED_1837 = 1837, DDB_UNUSED_1838 = 1838, DDB_UNUSED_1839 = 1839, DDB_UNUSED_1840 = 1840, DDB_UNUSED_1841 = 1841, DDB_UNUSED_1842 = 1842, DDB_UNUSED_1843 = 1843, DDB_UNUSED_1844 = 1844, DDB_UNUSED_1845 = 1845, DDB_UNUSED_1846 = 1846, DDB_UNUSED_1847 = 1847, DDB_UNUSED_1848 = 1848, DDB_UNUSED_1849 = 1849, DDB_UNUSED_1850 = 1850, DDB_UNUSED_1851 = 1851, DDB_UNUSED_1852 = 1852, DDB_UNUSED_1853 = 1853, DDB_UNUSED_1854 = 1854, DDB_UNUSED_1855 = 1855, DDB_UNUSED_1856 = 1856, DDB_UNUSED_1857 = 1857, DDB_UNUSED_1858 = 1858, DDB_UNUSED_1859 = 1859, DDB_UNUSED_1860 = 1860, DDB_UNUSED_1861 = 1861, DDB_UNUSED_1862 = 1862, DDB_UNUSED_1863 = 1863, DDB_UNUSED_1864 = 1864, DDB_UNUSED_1865 = 1865, DDB_UNUSED_1866 = 1866, DDB_UNUSED_1867 = 1867, DDB_UNUSED_1868 = 1868, DDB_UNUSED_1869 = 1869, DDB_UNUSED_1870 = 1870, DDB_UNUSED_1871 = 1871, DDB_UNUSED_1872 = 1872, DDB_UNUSED_1873 = 1873, DDB_UNUSED_1874 = 1874, DDB_UNUSED_1875 = 1875, DDB_UNUSED_1876 = 1876, DDB_UNUSED_1877 = 1877, DDB_UNUSED_1878 = 1878, DDB_UNUSED_1879 = 1879, DDB_UNUSED_1880 = 1880, DDB_UNUSED_1881 = 1881, DDB_UNUSED_1882 = 1882, DDB_UNUSED_1883 = 1883, DDB_UNUSED_1884 = 1884, DDB_UNUSED_1885 = 1885, DDB_UNUSED_1886 = 1886, DDB_UNUSED_1887 = 1887, DDB_UNUSED_1888 = 1888, DDB_UNUSED_1889 = 1889, DDB_UNUSED_1890 = 1890, DDB_UNUSED_1891 = 1891, DDB_UNUSED_1892 = 1892, DDB_UNUSED_1893 = 1893, DDB_UNUSED_1894 = 1894, DDB_UNUSED_1895 = 1895, DDB_UNUSED_1896 = 1896, DDB_UNUSED_1897 = 1897, DDB_UNUSED_1898 = 1898, DDB_UNUSED_1899 = 1899, DDB_UNUSED_1900 = 1900, DDB_UNUSED_1901 = 1901, DDB_UNUSED_1902 = 1902, DDB_UNUSED_1903 = 1903, DDB_UNUSED_1904 = 1904, DDB_UNUSED_1905 = 1905, DDB_UNUSED_1906 = 1906, DDB_UNUSED_1907 = 1907, DDB_UNUSED_1908 = 1908, DDB_UNUSED_1909 = 1909, DDB_UNUSED_1910 = 1910, DDB_UNUSED_1911 = 1911, DDB_UNUSED_1912 = 1912, DDB_UNUSED_1913 = 1913, DDB_UNUSED_1914 = 1914, DDB_UNUSED_1915 = 1915, DDB_UNUSED_1916 = 1916, DDB_UNUSED_1917 = 1917, DDB_UNUSED_1918 = 1918, DDB_UNUSED_1919 = 1919, DDB_UNUSED_1920 = 1920, DDB_UNUSED_1921 = 1921, DDB_UNUSED_1922 = 1922, DDB_UNUSED_1923 = 1923, DDB_UNUSED_1924 = 1924, DDB_UNUSED_1925 = 1925, DDB_UNUSED_1926 = 1926, DDB_UNUSED_1927 = 1927, DDB_UNUSED_1928 = 1928, DDB_UNUSED_1929 = 1929, DDB_UNUSED_1930 = 1930, DDB_UNUSED_1931 = 1931, DDB_UNUSED_1932 = 1932, DDB_UNUSED_1933 = 1933, DDB_UNUSED_1934 = 1934, DDB_UNUSED_1935 = 1935, DDB_UNUSED_1936 = 1936, DDB_UNUSED_1937 = 1937, DDB_UNUSED_1938 = 1938, DDB_UNUSED_1939 = 1939, DDB_UNUSED_1940 = 1940, DDB_UNUSED_1941 = 1941, DDB_UNUSED_1942 = 1942, DDB_UNUSED_1943 = 1943, DDB_UNUSED_1944 = 1944, DDB_UNUSED_1945 = 1945, DDB_UNUSED_1946 = 1946, DDB_UNUSED_1947 = 1947, DDB_UNUSED_1948 = 1948, DDB_UNUSED_1949 = 1949, DDB_UNUSED_1950 = 1950, DDB_UNUSED_1951 = 1951, DDB_ZONE_Q_START_A = 1952, DDB_ZONE_Q_START_B = 1953, DDB_ZONE_Q_START_C = 1954, DDB_ZONE_Q_START_N = 1955, DDB_ZONE_Q_TRIP = 1956, DDB_ZONE_Q_TRIP_A = 1957, DDB_ZONE_Q_TRIP_B = 1958, DDB_ZONE_Q_TRIP_C = 1959, DDB_ZONE_Q_TRIP_N = 1960, DDB_ZONE_Q_AN = 1961, DDB_ZONE_Q_BN = 1962, DDB_ZONE_Q_CN = 1963, DDB_ZONE_Q_AB = 1964, DDB_ZONE_Q_BC = 1965, DDB_ZONE_Q_CA = 1966, DDB_ZONE_Q_GND_BLOCK = 1967, DDB_ZONE_Q_PHS_BLOCK = 1968, DDB_ZONE_Q_TOR_TRIP = 1969, DDB_ZONE_Q_SOTF_TRIP = 1970, DDB_ZONE_Q_AN_RAW = 1971, DDB_ZONE_Q_BN_RAW = 1972, DDB_ZONE_Q_CN_RAW = 1973, DDB_ZONE_Q_AB_RAW = 1974, DDB_ZONE_Q_BC_RAW = 1975, DDB_ZONE_Q_CA_RAW = 1976, DDB_ZONE_Q_BLOCKED = 1977, DDB_GND_ZQ_LOW = 1978, DDB_GND_ZQ_HIGH = 1979, DDB_PH_ZQ_LOW = 1980, DDB_PH_ZQ_HIGH = 1981, DDB_BLOCK_PH_ZQ_START = 1982, DDB_ISCOMP_MODE_ENABLED = 1983, DDB_ZONE_1_GND_TIMER_ELAPSED = 1984, DDB_ZONE_1_PHS_TIMER_ELAPSED = 1985, DDB_ZONE_2_GND_TIMER_ELAPSED = 1986, DDB_ZONE_2_PHS_TIMER_ELAPSED = 1987, DDB_ZONE_3_GND_TIMER_ELAPSED = 1988, DDB_ZONE_3_PHS_TIMER_ELAPSED = 1989, DDB_ZONE_P_GND_TIMER_ELAPSED = 1990, DDB_ZONE_P_PHS_TIMER_ELAPSED = 1991, DDB_ZONE_Q_GND_TIMER_ELAPSED = 1992, DDB_ZONE_Q_PHS_TIMER_ELAPSED = 1993, DDB_ZONE_4_GND_TIMER_ELAPSED = 1994, DDB_ZONE_4_PHS_TIMER_ELAPSED = 1995, DDB_UNUSED_1996 = 1996, DDB_UNUSED_1997 = 1997, DDB_UNUSED_1998 = 1998, DDB_UNUSED_1999 = 1999, DDB_UNUSED_2000 = 2000, DDB_UNUSED_2001 = 2001, DDB_UNUSED_2002 = 2002, DDB_UNUSED_2003 = 2003, DDB_UNUSED_2004 = 2004, DDB_UNUSED_2005 = 2005, DDB_UNUSED_2006 = 2006, DDB_UNUSED_2007 = 2007, DDB_UNUSED_2008 = 2008, DDB_IA_ZCD = 2009, DDB_IB_ZCD = 2010, DDB_IC_ZCD = 2011, DDB_IA2_ZCD = 2012, DDB_IB2_ZCD = 2013, DDB_IC2_ZCD = 2014, DDB_ISEF_ZCD = 2015, DDB_TIMERIN_17 = 2016, DDB_TIMERIN_18 = 2017, DDB_TIMERIN_19 = 2018, DDB_TIMERIN_20 = 2019, DDB_TIMERIN_21 = 2020, DDB_TIMERIN_22 = 2021, DDB_TIMERIN_23 = 2022, DDB_TIMERIN_24 = 2023, DDB_TIMERIN_25 = 2024, DDB_TIMERIN_26 = 2025, DDB_TIMERIN_27 = 2026, DDB_TIMERIN_28 = 2027, DDB_TIMERIN_29 = 2028, DDB_TIMERIN_30 = 2029, DDB_TIMERIN_31 = 2030, DDB_TIMERIN_32 = 2031, DDB_TIMEROUT_17 = 2032, DDB_TIMEROUT_18 = 2033, DDB_TIMEROUT_19 = 2034, DDB_TIMEROUT_20 = 2035, DDB_TIMEROUT_21 = 2036, DDB_TIMEROUT_22 = 2037, DDB_TIMEROUT_23 = 2038, DDB_TIMEROUT_24 = 2039, DDB_TIMEROUT_25 = 2040, DDB_TIMEROUT_26 = 2041, DDB_TIMEROUT_27 = 2042, DDB_TIMEROUT_28 = 2043, DDB_TIMEROUT_29 = 2044, DDB_TIMEROUT_30 = 2045, DDB_TIMEROUT_31 = 2046, DDB_TIMEROUT_32 = 2047, ENUMDDB_LENGTH_OF, ENUMTDDB_LENGTH_OF } ENUMDDB_SIGNALS; typedef struct { G37_ENUM Stage_enable; REAL32 DFDT_Pickup; G157_ENUM Pickup_Direction; REAL32 Pickup_Delay_time; } DFDT_PROT_STAGE_SETTINGS; typedef struct { unsigned int dfdt_window_size; DFDT_PROT_STAGE_SETTINGS Stage_settings[(4)]; } DFDT_PROT_SETTINGS; typedef struct { G185_ENUM BasicScheme_Mode; G412_ENUM PhasePrioty2pG; G133_ENUM Zone1_Tripping; REAL32 Zone1_Ph_Delay; REAL32 Zone1_Gnd_Delay; G133_ENUM Zone2_Tripping; REAL32 Zone2_Ph_Delay ; REAL32 Zone2_Gnd_Delay ; G133_ENUM Zone3_Tripping; REAL32 Zone3_Ph_Delay ; REAL32 Zone3_Gnd_Delay ; G133_ENUM ZoneP_Tripping; REAL32 ZoneP_Ph_Delay; REAL32 ZoneP_Gnd_Delay; G133_ENUM Zone4_Tripping; REAL32 Zone4_Ph_Delay; REAL32 Zone4_Gnd_Delay; G133_ENUM ZoneQ_Tripping; REAL32 ZoneQ_Ph_Delay; REAL32 ZoneQ_Gnd_Delay; G134_ENUM Aid_1_Selection; G133_ENUM Aid_1_Distance; REAL32 Aid_1_Dist_Dly; G37_ENUM Aid_1_DEF; REAL32 Aid_1_DEF_Dly; G102_ENUM Aid_1_DEF_Trip; G37_ENUM Aid_1_Delta; REAL32 Aid_1_Delta_Dly; G102_ENUM Aid_1_DeltaTrip; REAL32 tRev_Guard1 ; REAL32 UnBlocking_Del1; G175_ENUM Send_On_Trip1; G139_ENUM WI_STATUS_1; G37_ENUM WI_Sngl_Pole_Trp1; REAL32 WI_UV_Thresh1; REAL32 WI_Trip_Delay1; G140_ENUM Custom_Mask1; REAL32 Custom_Time_PU1; REAL32 Custom_Time_DO1; G134_ENUM Aid_2_Selection; G133_ENUM Aid_2_Distance; REAL32 Aid_2_Dist_Dly; G37_ENUM Aid_2_DEF; REAL32 Aid_2_DEF_Dly; G102_ENUM Aid_2_DEF_Trip; G37_ENUM Aid_2_Delta; REAL32 Aid_2_Delta_Dly ; G102_ENUM Aid_2_DeltaTrip; REAL32 tRev_Guard2; REAL32 UnBlocking_Del2; G175_ENUM Send_On_Trip2; G139_ENUM WI_STATUS_2; G37_ENUM WI_Sngl_Pole_Trp2; REAL32 WI_UV_Thresh2; REAL32 WI_Trip_Delay2; G140_ENUM Custom_Mask2; REAL32 Custom_Time_PU2; REAL32 Custom_Time_DO2; G165_ENUM SOTF_Status; REAL32 SOTF_Delay ; G136_ENUM SOTF_Tripping; G37_ENUM TOR_Status; G136_ENUM TOR_Tripping; REAL32 TOC_Reset_Delay; REAL32 SOTF_Pulse; REAL32 TOC_Delay; G141_ENUM LOL_Status; REAL32 LOL_UI; REAL32 LOL_Window; G400_ENUM WI_Trip_PSB; REAL32 IN_CurrentSet; REAL32 VN_VoltageSet; G413_ENUM OnePole_Mode; REAL32 OnePole_Time_Delay; } DISTANCE_SCHEME_SETTINGS; typedef struct { COMMON_SETTINGS Common; DISTANCE_SCHEME_SETTINGS Schemes; }DISTANCE_SETTINGS; typedef struct { G100_ENUM I1Status; G196_ENUM I1Function; G44_ENUM I1Directional; REAL32 I1CurrentSet; REAL32 I1TimeDelay; REAL32 I1TMS; REAL32 I1TimeDial; G60_ENUM I1ResetChar; REAL32 I1TReset; G100_ENUM I2Status; G196_ENUM I2Function; G44_ENUM I2Directional; REAL32 I2CurrentSet; REAL32 I2TimeDelay; REAL32 I2TMS; REAL32 I2TimeDial; G60_ENUM I2ResetChar; REAL32 I2TReset; G100_ENUM I3Status; G44_ENUM I3Directional; REAL32 I3CurrentSet; REAL32 I3TimeDelay; G100_ENUM I4Status; G44_ENUM I4Directional; REAL32 I4CurrentSet; REAL32 I4TimeDelay; REAL32 CharAngle; G14_ENUM FunctionLink; G197_ENUM I1UsrResetChar; G197_ENUM I2UsrResetChar; } POC_SETTINGS; typedef struct { G37_ENUM BrokenConductor; REAL32 I2I1Setting; REAL32 DefiniteTime; } BCL_SETTINGS; typedef struct { G100_ENUM I1Status; G178_ENUM I1Function; G44_ENUM I1Directional; REAL32 I1Current; REAL32 I1IDGis; REAL32 I1TimeDelay; REAL32 I1TMS; REAL32 I1TimeDial; REAL32 I1IDGtime; G60_ENUM I1ResetChar; REAL32 I1tReset; G100_ENUM I2Status; G178_ENUM I2Function; G44_ENUM I2Directional; REAL32 I2CurrentSet; REAL32 I2IDGis; REAL32 I2TimeDelay; REAL32 I2TMS; REAL32 I2TimeDial; REAL32 I2IDGtime; G60_ENUM I2ResetChar; REAL32 I2tReset; G100_ENUM I3Status; G44_ENUM I3Directional; REAL32 I3CurrentSet; REAL32 I3TimeDelay; G100_ENUM I4Status; G44_ENUM I4Directional; REAL32 I4CurrentSet; REAL32 I4TimeDelay; G63_ENUM FuncLink; REAL32 CharAngle; G46_ENUM Polarisation; G49_ENUM VoltagePol; REAL32 Set3V0pol; REAL32 SetV2pol; REAL32 SetI2pol; G197_ENUM I1UsrResetChar; G197_ENUM I2UsrResetChar; } SBEF_SETTINGS; typedef struct { G67_ENUM Characteristic; REAL32 Current; REAL32 AlarmLevel; REAL32 TimeConst1; REAL32 TimeConst2; } THERMAL_SETTINGS; typedef struct { G37_ENUM F1Status; REAL32 F1Setting; REAL32 F1TimeDelay; G37_ENUM F2Status; REAL32 F2Setting; REAL32 F2TimeDelay; G37_ENUM F3Status; REAL32 F3Setting; REAL32 F3TimeDelay; G37_ENUM F4Status; REAL32 F4Setting; REAL32 F4TimeDelay; G65_ENUM FunctionLink; } UNDERFREQ_SETTINGS; typedef struct { G37_ENUM F1Status; REAL32 F1Setting; REAL32 F1TimeDelay; G37_ENUM F2Status; REAL32 F2Setting; REAL32 F2TimeDelay; } OVERFREQ_SETTINGS; typedef struct { G37_ENUM CB1Status1; REAL32 CB1Timer1; G37_ENUM CB1Status2; REAL32 CB1Timer2; G68_ENUM CB1CBFNonIReset; G404_ENUM CB1CBFExtReset; G37_ENUM CBF_WI_Reset; G37_ENUM ExtTripOnlyInit; REAL32 CB1ICurrent; REAL32 ISEFCurrent; G37_ENUM PocBlockingStatus; G37_ENUM EFBlockingStatus; } CBF_SETTINGS; typedef struct { G174_ENUM Mode; G7_ENUM Status; G69_ENUM ResetMode; REAL32 TimeDelay; REAL32 IInhibit; REAL32 I2Inhibit; } VTS_SETTINGS; typedef struct { G37_ENUM SEF2ndHarmDetector; REAL32 SEF2ndHarmlevel; } SEF_HARM_SETTINGS; typedef struct { REAL32 LiveLine; REAL32 DeadLine; REAL32 LiveBus1; REAL32 DeadBus1; REAL32 CS_UV; REAL32 CS_OV; G37_ENUM SystemChecksCB1; G41_ENUM CS1VoltageBlock; G37_ENUM CS1_1; REAL32 Angle1_1; REAL32 VDiff1_1; G37_ENUM CS1_1SlipControl; REAL32 SlipFr1_1; G37_ENUM CS1_2; REAL32 Angle1_2; REAL32 VDiff1_2; G37_ENUM CS1_2SlipControl; REAL32 SlipFr1_2; G37_ENUM CS1_2AdaptiveCl; REAL32 CB1ClTime; G192_ENUM NumCBs; G37_ENUM CB1MSCSysCheckrequired; G37_ENUM CB1MSCCS1_1; G37_ENUM CB1MSCCS1_2; G37_ENUM CB1MSCDLLB; G37_ENUM CB1MSCLLDB; G37_ENUM CB1MSCDLDB; } SYSCHECK_SETTINGS; typedef struct { G192_ENUM NumCBs; G188_ENUM ARModePermit; UINT32 ARShots; G37_ENUM ARSkipShot1; G115_ENUM MultiPhaseAR; REAL32 DiscriminatingTime; REAL32 CBInServiceTime; REAL32 CBISMemoryTime; G190_ENUM DTStartbyProtection; G37_ENUM TPARDTStartWhenLineDead; G37_ENUM DTStartWhenCBTripped; REAL32 DeadLineTime; REAL32 SinglePoleARDeadTime; REAL32 ThreePoleARDeadTimeShot1; REAL32 ThreePoleARDeadTimeShot2; REAL32 ThreePoleARDeadTimeShot3; REAL32 ThreePoleARDeadTimeShot4; REAL32 SinglePhARReclaimTime; REAL32 ThreePhARReclaimTime; REAL32 CBHealthyTime; REAL32 CBSysCheckTime; G116_ENUM Z1_AR; G116_ENUM Diff_AR; G116_ENUM DistAided_AR; G114_ENUM Z2T_AR; G114_ENUM Z3T_AR; G114_ENUM ZPT_AR; G114_ENUM Z4T_AR; G116_ENUM DEF_AT_AR; G116_ENUM DIR_AT_AR; G116_ENUM TOR_AR; G114_ENUM I1AR; G114_ENUM I2AR; G114_ENUM I3AR; G114_ENUM I4AR; G114_ENUM IN1AR; G114_ENUM IN2AR; G114_ENUM IN3AR; G114_ENUM IN4AR; G114_ENUM ISEF1AR; G114_ENUM ISEF2AR; G114_ENUM ISEF3AR; G114_ENUM ISEF4AR; G116_ENUM NeutralDiff_AR; G114_ENUM ZQT_AR; G37_ENUM CB1LSCSysCheckallshots; G37_ENUM CB1LSCSysCheckShot1; G37_ENUM CB1LDSCCloseNoDelay; G37_ENUM CB1LSCCS1_1; G37_ENUM CB1LSCCS1_2; G37_ENUM CB1LSCDLLB; G37_ENUM CB1LSCLLDB; G37_ENUM CB1LSCDLDB; G37_ENUM CB1FSCSysCheckallshots; G37_ENUM CB1FSCSysCheckShot1; G37_ENUM CB1FSCCS1_1; G37_ENUM CB1FSCCS1_2; G37_ENUM CB1FSCDLLB; G37_ENUM CB1FSCLLDB; G37_ENUM CB1FSCDLDB; } AR_SETTINGS; typedef struct { G47_ENUM MeasMode; G48_ENUM OperateMode; G23_ENUM V1Function; REAL32 V1Voltage; REAL32 V1TimeDelay; REAL32 V1TMS; G37_ENUM V1PoledeadInh; G37_ENUM V2Status; REAL32 V2VoltageSet; REAL32 V2TimeDelay; G37_ENUM V2PoledeadInh; }UNDERV_SETTINGS; typedef struct { G180_ENUM MeasMode; G181_ENUM OperateMode; G23_ENUM V1Function; REAL32 V1VoltageSet; REAL32 V1TimeDelay; REAL32 V1TMS; G37_ENUM V2Status; REAL32 V2VoltageSet; REAL32 V2TimeDelay; }OVERV_SETTINGS; typedef struct { G23_ENUM V1Function; REAL32 V1VoltageSet; REAL32 V1TimeDelay; REAL32 V1TMS; G37_ENUM V2Status; REAL32 V2VoltageSet; REAL32 V2TimeDelay; }COMP_OVERV_SETTINGS; typedef struct { G49_ENUM Input; G23_ENUM V1Function; REAL32 V1Voltage; REAL32 V1TimeDelay; REAL32 V1TMS; REAL32 V1tReset; G37_ENUM V2Status; REAL32 V2Voltage; REAL32 V2TimeDelay; } RESOV_SETTINGS; typedef struct { G37_ENUM I2Status; G44_ENUM Directional; G45_ENUM VTS; REAL32 CurrentSet; REAL32 TimeDelay; REAL32 CharAngle; REAL32 V2PolSet; } NPSOC_SETTINGS; typedef struct { G58_ENUM Options; G152_ENUM I1Function; G44_ENUM I1Direction; REAL32 I1Setting; REAL32 I1IDGis; REAL32 I1Delay; REAL32 I1TMS; REAL32 I1TimeDial; REAL32 I1IDGTime; G60_ENUM I1ResetChr; REAL32 I1tRESET; G152_ENUM I2Function; G44_ENUM I2Direction; REAL32 I2Setting; REAL32 I2IDGis; REAL32 I2Delay; REAL32 I2TMS; REAL32 I2TimeDial; REAL32 I2IDGTime; G60_ENUM I2ResetChr; REAL32 I2tRESET; G37_ENUM I3Status; G44_ENUM I3Direction; REAL32 I3Setting; REAL32 I3Delay; G37_ENUM I4Status; G44_ENUM I4Direction; REAL32 I4Setting; REAL32 I4Delay; G64_ENUM FuncLink; REAL32 CharAngle; G49_ENUM VpolInput; REAL32 Set3V0pol; REAL32 PoSetting; REAL32 IREFIs; G197_ENUM I1UsrResetChr; G197_ENUM I2UsrResetChr; } SEF_SETTINGS; typedef struct { REAL32 tColdTimeDelay; REAL32 tClpTimeDelay; G106_ENUM I1Status; REAL32 I1CurrentSet; REAL32 I1TimeDelay; REAL32 I1TMS; REAL32 I1TimeDial; G106_ENUM I2Status; REAL32 I2CurrentSet; REAL32 I2TimeDelay; REAL32 I2TMS; REAL32 I2TimeDial; G106_ENUM I3Status; REAL32 I3CurrentSet; REAL32 I3TimeDelay; G106_ENUM I4Status; REAL32 I4CurrentSet; REAL32 I4TimeDelay; G106_ENUM IEF1Status; REAL32 IEF1CurrentSet; REAL32 IEF1TimeDelay; REAL32 IEF1TMS; REAL32 IEF1TimeDial; REAL32 IEF1IDGis; }CLP_SETTINGS; typedef struct OverCurrentSettingstag { POC_SETTINGS POC; CBF_SETTINGS CBF; SBEF_SETTINGS EF1; SEF_SETTINGS SEF; CLP_SETTINGS CLP; } OVERCURRENT_SETTINGS; typedef struct { REAL32 StartVoltage; G37_ENUM DirectStatus; G411_ENUM DirectMode; REAL32 DeltaVoltage; REAL32 DeltaCurrent; REAL32 DirectQnThres; REAL32 DirectQrThres; REAL32 DirectQsThres; REAL32 DirectQnSmooth; UINT32 DirectQnQpertCyc; G37_ENUM FtdStatus; REAL32 FtdVoltage; REAL32 FtdTimer; UINT32 FtdCounter; REAL32 ResetTimer; G49_ENUM VnInput; }TGFD_PROT_SETTINGS; typedef struct ProtsetxSettingsTag { OVERCURRENT_SETTINGS OC; BCL_SETTINGS BCL; VTS_SETTINGS VTS; SEF_HARM_SETTINGS SEFHarm; THERMAL_SETTINGS Thermal; AR_SETTINGS AR; SYSCHECK_SETTINGS SysCheck; DISTANCE_SETTINGS Distance; UNDERV_SETTINGS UnderV; OVERV_SETTINGS OverV; COMP_OVERV_SETTINGS CompOverV; RESOV_SETTINGS ResOV; UNDERFREQ_SETTINGS Underfreq; OVERFREQ_SETTINGS Overfreq; DFDT_PROT_SETTINGS DFDT; TGFD_PROT_SETTINGS TGFDetection; } PROTSETX_SETTINGS; typedef enum { XFR_CFG_NO_OPTO_POSN = 0, XFR_CFG_NO_RELAY_POSN, XFR_CFG_NO_TIMER_POSN, XFR_CFG_NO_LED_POSN, XFR_CFG_MAX_GATES_POSN, XFR_CFG_MAX_LOGIC_POSN, XFR_CFG_S1_DATA_SIZE_POSN, XFR_CFG_DDB_LEN_POSN, XFR_CFG_MAX_SR_GATES_POSN, XFR_CFG_PSL_CFG_FILE_LEN } XFR_CFG_FIELD_POSN; typedef struct pslReferenceDataTag { UINT32 LogicID; UINT32 PackedRefStr[((UINT32) 8)]; T_INTERN_ABS_DATE InternTimeDate; } PSL_REF_DATA; typedef struct pslset_PslSettingsTag { UINT32 PslSettingsHdr[2]; UINT32 PackedPslGates[((UINT32) (1064))]; UINT32 PslRelayConditioners[(32 * (2))]; UINT32 PslTimerConditioners[(32 * (2))]; UINT32 PslLedConditioners[((UINT32)(((18) + 31) / 32))]; PSL_REF_DATA RefData; } PSL_SETTINGS; typedef struct pslS1DataTag { UINT32 S1Data[((UINT32) 1750)]; } PSL_S1DATA; typedef struct pslSettingsAllTag { PSL_S1DATA S1Data; PSL_SETTINGS PslSettings; } PSL_SETTINGS_ALL; typedef struct NPSOC_cntlsup_tag { G37_ENUM Status; } NPSOC_CNTLSUP_SETTINGS; typedef struct NPSOC_protcntl_common_tag { G158_ENUM VTS_Blocking; REAL32 Char_angle; REAL32 V2_pol_set; } NPSOC_PROTCNTL_COMMON; typedef struct NPSOC_protcntl_stage_tag { G37_ENUM Status; G166_ENUM Curve_type; G60_ENUM Reset_char; REAL32 TMS; REAL32 Time_dial; REAL32 Reset_time; G44_ENUM Pickup_dir; REAL32 Pickup; REAL32 Pickup_delay; } NPSOC_PROTCNTL_STAGE; typedef struct NPSOC_protcntl_tag { NPSOC_PROTCNTL_COMMON Common; NPSOC_PROTCNTL_STAGE Stage[(4)]; } NPSOC_PROTCNTL_SETTINGS; typedef struct ProtCntlTag { PLATFORM_PROT_CONFIG PlatProtConfig; PROTSETX_SETTINGS Prot; NPSOC_PROTCNTL_SETTINGS NPSOC_Prot; PSL_SETTINGS PslParams; } PROTCNTL; typedef enum{ Q_CLEAR_SRC_NONE = 0, Q_CLEAR_SRC_COPY_SET, Q_CLEAR_SRC_RESTORE_SET, Q_CLEAR_SRC_CHANGE_ACTIVE_SG, Q_CLEAR_SRC_DOWNLOAD_PSL }Q_FLASH_CLEAR_SRC; typedef struct{ BOOLEAN Q_InFLASH_Clear; Q_FLASH_CLEAR_SRC Q_Clear_Src; }Q_IN_FLASH; extern Q_IN_FLASH Q_Flash_Clear_Set; void plog_Initialise2(const UINT32 MaxVal, NU_MEMORY_POOL *pMemoryPool); void plog_Configure(const PSL_SETTINGS *pPsl); void plog_DDBassign(ENUMDDB_SIGNALS Entry, BOOLEAN State); BOOLEAN plog_DDBcheckGate(ENUMDDB_SIGNALS Entry); UINT8 plog_GetResponseFn(ENUMDDB_SIGNALS DDB_Bit_Number); UINT8 plog_GetDDBResponseFn(ENUMDDB_SIGNALS DDB_Bit_Number); void plog_RegisterDDBChangeFunction( void (*DDBChanged)(void) ); void plog_ProcessSRGate_QState(void); extern BOOLEAN DDB[ENUMDDB_LENGTH_OF]; extern UINT32 DDBPacked[((((UINT32) ENUMDDB_LENGTH_OF - (UINT32) 1) / (UINT32) (UINT32) 32) + (UINT32) 1)]; typedef struct { T_INTERN_ABS_DATE TimeTag; UINT16 FAN; CS103_COT_M COT; UINT32 ActiveGroup; REAL32 Frequency; BOOLEAN FrequencyValid; UINT32 FaultDurationTime; BOOLEAN FaultDurTimeValid; UINT32 CBOperateTime; BOOLEAN CBOperateTimeValid; UINT32 ProtectionOperateTime; BOOLEAN ProtOperateTimeValid; UINT32 ddb[((((UINT32) ENUMDDB_LENGTH_OF - (UINT32) 1) / (UINT32) (UINT32) 32) + (UINT32) 1)]; } FAULT_DATA_COMMON; typedef struct { FAULT_DATA_COMMON Common; FAULT_DATA_X X; } FAULT_DATA; typedef enum maintenanceTypeTag { SEC_SELF_TEST_FWD, SEC_SELF_TEST_BATTERY, SEC_SELF_TEST_BBRAM, SEC_SELF_TEST_FIELD, SEC_SELF_TEST_BUS, SEC_SELF_TEST_SWD, CONT_SELF_TEST_SRAM_BUS, CONT_SELF_TEST_SRAM_BLOCK, CONT_SELF_TEST_FLASH_CHKSUM, CONT_SELF_TEST_CODE_VERIFY, CONT_SELF_TEST_BBRAM, CONT_SELF_TEST_BATTERY, CONT_SELF_TEST_FIELD, CONT_SELF_TEST_EEPROM, FATAL_ERROR_HANDLER_SOFT_ERROR, PRODUCT_HARDWARE_VERIFY, NON_STANDARD_ERROR, CONT_SELF_TEST_ANA_SAMP_ISR, NIC_SOFT_ERROR, SETTING_COMMIT_ERROR, PSL_COMMIT_ERROR, USER_CURVE_COMMIT_ERROR, BBRAM_PSLCOUNTER_CORRUPT_ERROR, CONT_SELF_CODE_REPAIR_FAIL } MAINTENANCE_RECORD_TYPE; typedef struct maintenanceDataTag { T_INTERN_ABS_DATE Tag; MAINTENANCE_RECORD_TYPE Type; UINT32 Data; } MAINTENANCE_DATA; typedef enum EventTypeTag { EVENT_ALARM_LATCHED_ACTIVE, EVENT_ALARM_LATCHED_INACTIVE, EVENT_ALARM_SELFRESET_ACTIVE, EVENT_ALARM_SELFRESET_INACTIVE, EVENT_RELAYS, EVENT_OPTOS, EVENT_PROTECTION, EVENT_PLATFORM, EVENT_FAULT_LOGGED, EVENT_MAINTENANCE_LOGGED , EVENT_ALARM_LATCHED_INACTIVE_2 = 19, EVENT_SECURITY = 20 } LOG_EVENT_TYPE; typedef enum PlatformEventType{ ALARM_LOG_CLEARED = 0, EVENT_LOG_CLEARED = 1, FAULT_LOG_CLEARED = 2, MAINTENANCE_LOG_CLEARED = 3, IRIGB_ACTIVE = 4, IRIGB_INACTIVE = 5, TIME_SYNCD = 6, RESET_INDICATIONS = 7, ETHERNET_CARD_INVALID_CONFIG = 8, ETHERNET_CARD_INVALID_MASKS = 9, ETHERNET_CARD_INVALID_DEADBANDS = 10, ETHERNET_CARD_INVALID_DI_OBJECT = 11, R2_CARD_FAILURE = 12, VDEW_FIBRE_PORT_NOT_FITTED = 13, ETHERNET_CARD_LINK_FAIL = 14, DISTURBANCE_RECORDS_CLEARED = 15, SBS_TEST_BBRAMFAIL = 16 } PLATFORM_EVENT_TYPE; typedef enum SecurityEventValue { SECUR_EVT_PW_LEVEL_UNLOCKED = 0, SECUR_EVT_PW_LEVEL_RESET = 1, SECUR_EVT_PW_SET_BLANK = 2, SECUR_EVT_PW_SET_NON_COMPLIANT = 3, SECUR_EVT_PW_MODIFIED = 4, SECUR_EVT_PW_ENTRY_NOW_BLOCKED = 5, SECUR_EVT_PW_ENTRY_UNBLOCKED = 6, SECUR_EVT_PW_ENTERED_WHILE_BLOCKED = 7, SECUR_EVT_INVALID_PW_ENTERED = 8, SECUR_EVT_PW_TIMED_OUT = 9, SECUR_EVT_RECOVERY_PW_ENTERED = 10, SECUR_EVT_IED_SEC_CODE_READ = 11, SECUR_EVT_IED_SEC_CODE_TMR_EXPIRED = 12, SECUR_EVT_PORT_DISABLED = 13, SECUR_EVT_PORT_ENABLED = 14, SECUR_EVT_DEF_DISP_NON_COMPLIANT = 15, SECUR_EVT_PSL_SETTINGS_DOWNLOADED = 16, SECUR_EVT_DNP_SETTINGS_DOWNLOADED = 17, SECUR_EVT_TRACE_DATA_DOWNLOADED = 18, SECUR_EVT_61850_CONFIG_DOWNLOADED = 19, SECUR_EVT_USER_CURVES_DOWNLOADED = 20, SECUR_EVT_SETTING_GRP_DOWNLOADED = 21, SECUR_EVT_DR_SETTINGS_DOWNLOADED = 22, SECUR_EVT_PSL_SETTINGS_UPLOADED = 23, SECUR_EVT_DNP_SETTINGS_UPLOADED = 24, SECUR_EVT_TRACE_DATA_UPLOADED = 25, SECUR_EVT_61850_CONFIG_UPLOADED = 26, SECUR_EVT_USER_CURVES_UPLOADED = 27, SECUR_EVT_PSL_CONFIG_UPLOADED = 28, SECUR_EVT_SETTINGS_UPLOADED = 29, SECUR_EVT_EVENTS_BEEN_EXTRACTED = 30, SECUR_EVT_ACTIVE_GROUP_DESEL_BY_IF = 31, SECUR_EVT_ACTIVE_GROUP_SEL_BY_IF = 32, SECUR_EVT_ACTIVE_GRP_DESEL_BY_OPTO = 33, SECUR_EVT_ACTIVE_GRP_SEL_BY_OPTO = 34, SECUR_EVT_CS_SETTINGS_CHANGED = 35, SECUR_EVT_DR_SETTINGS_CHANGED = 36, SECUR_EVT_SETTING_GROUP_CHANGED = 37, SECUR_EVT_DEFAULT_SETTINGS_RESTORED = 38, SECUR_EVT_DEFAULT_USRCURVE_RESTORED = 39, SECUR_EVT_POWER_ON = 40, SECUR_EVT_APPLICATION_DOWNLOAD = 41, SECUR_EVT_MAX_ENUM } SECURITY_EVENT_VALUE; typedef UINT32 ALARM_ITERATOR; BOOLEAN log_InitialiseLogAPI(NU_MEMORY_POOL *Pool); BOOLEAN log_InitAlarmLog(void); BOOLEAN log_InitEventLog(void); BOOLEAN log_InitFaultLog(void); BOOLEAN log_InitMaintenanceLog(void); void log_ClearAlarmLog(void); void log_ClearEventLog(void); void log_ClearFaultLog(void); void log_ClearMaintenanceLog(void); BOOLEAN log_EventIdCounterIsValid(void); void log_InitEventUniqueId(void); void log_LogSecurityEvent(SECURITY_EVENT_VALUE EventValue, PLAT_INTERFACE Interface, PLAT_PASSWORD_LEVEL AccessLevel, UINT16 XtraStateInfo, UINT8 COT, UINT16 FAN, T_INTERN_ABS_DATE *pTimeTag); void log_LogSecurityHISREvent(SECURITY_EVENT_VALUE EventValue, PLAT_INTERFACE PlatInterface, PLAT_PASSWORD_LEVEL AccessLevel, UINT16 XtraStateInfo, UINT8 COT, UINT16 FAN, T_INTERN_ABS_DATE *pTimeTag); void log_LogEvent(LOG_EVENT_TYPE EventId, UINT32 Value, UINT8 COT, UINT16 FAN, T_INTERN_ABS_DATE *pTimeTag); void log_PlatformHISRAlarm(LOG_EVENT_TYPE EventId, UINT32 Value); void log_LogApplicationEvent(LOG_EVENT_TYPE EventId, UINT32 Value, UINT32 State, UINT8 COT, UINT16 FAN, T_INTERN_ABS_DATE *pTimeTag); void log_LogFault(FAULT_DATA *pFaultRecord, UINT16 FAN); void log_LogMaintenance(MAINTENANCE_DATA *pMaintenanceData); void log_LogMaintenanceE(MAINTENANCE_DATA *pMaintenanceData); void log_NewDisturbance(void); void log_DisturbancesCleared(void); void log_DistClearOnInterface(PLAT_PORT_SELECTION_TYPE PortSelection); void log_CourierTBitChange(BOOLEAN State); void log_CourierOOSBitChange(BOOLEAN State); void log_CourierPBitChange(BOOLEAN State); void log_CourierCBitChange(BOOLEAN State); void log_RegisterPlatNotifyFunctions(void (*Event)(BOOLEAN State), void (*Fault)(BOOLEAN State), void (*Alarm)(BOOLEAN State), void (*Maint)(BOOLEAN State), void (*CourT)(BOOLEAN State), void (*CourO)(BOOLEAN State), void (*CourC)(BOOLEAN State), void (*CourP)(BOOLEAN State), void (*Distr)(BOOLEAN State), PLAT_INTERFACE Interface); BOOLEAN log_GetSpecificEvent(UINT32 EventNo, LOG_EVENT_TYPE *pEventId, UINT32 *pValue, UINT8 *pCOT, UINT16 *pFAN, T_INTERN_ABS_DATE *pTimeTag, UINT32 *pStateFlags, UINT32 *pUniqueId); BOOLEAN log_GetOldestUnacceptedEvent(LOG_EVENT_TYPE *pEventId, UINT32 *pValue, UINT8 *pCOT, UINT16 *pFAN, T_INTERN_ABS_DATE *pTimeTag, UINT32 *pStateFlags, UINT32 *pUniqueId); BOOLEAN log_AcceptEvent(LOG_EVENT_TYPE *pEventId, UINT32 *pValue, BOOLEAN *pLastEntry); void log_AcceptAllEvents(void); void log_GetEventLimits(UINT32 *pTotal, UINT32 *pNotAccepted); BOOLEAN log_GetSpecificFault(UINT32 FaultNo, FAULT_DATA *pFaultRecord); BOOLEAN log_GetAbsoluteFault(UINT32 FaultNo, FAULT_DATA *pFaultRecord); BOOLEAN log_GetLatestFault(FAULT_DATA *pFaultRecord); BOOLEAN log_LatestFaultWasAccepted(void); void log_AcceptLatestFault(void); UINT32 log_GetFaultLimit(void); BOOLEAN log_GetSpecificMaintenance(UINT32 MaintenanceNo, MAINTENANCE_DATA *pMaintenanceRecord); BOOLEAN log_GetAbsoluteMaintenance(UINT32 MaintenanceNo, MAINTENANCE_DATA *pMaintenanceRecord); BOOLEAN log_GetLatestMaintenance(MAINTENANCE_DATA *pMaintenanceRecord); UINT32 log_GetMaintenanceLimit(void); BOOLEAN log_ReadAlarm(UINT8 AlarmNo); BOOLEAN log_GetAlarmBitStatus(UINT8 AlarmNo); UINT32 log_GetAlarmStatus(UINT32 AlarmGroup); BOOLEAN log_IsAlarm(void); BOOLEAN log_ResetAlarms(PLAT_INTERFACE Interface); void log_ReadAllAlarms(void); void log_NewEventSettings(void); BOOLEAN log_IsDDBEventEnabled(ENUMDDB_SIGNALS DDB_Bit_Number); void log_ReleaseHoldOnNotifyTask(void); BOOLEAN log_GetFirstPlatAlarm(ALARM_ITERATOR *pControl, UINT32 *pAlarmID, BOOLEAN *pState); BOOLEAN log_GetNextPlatAlarm(ALARM_ITERATOR *pControl, UINT32 *pAlarmID, BOOLEAN *pState); void logX_notify_plat_alarm_change(UINT32 AlarmID, BOOLEAN State); void logX_CreateHISREventRecord(LOG_EVENT_TYPE EventId, UINT32 Value, UINT32 State, UINT16 FAN, UINT8 COT, T_INTERN_ABS_DATE *pRecordTime); void logX_CreatePlatformHISREventRecord(LOG_EVENT_TYPE EventId, UINT32 Value); UINT32 log_PlatformAlarmsUsed( void); BOOLEAN log_InitCS103FANControl(void); void log_ResetCS103FANControl(void); UINT16 log_FetchAndIncrementDistRecFAN(void); UINT16 log_ReadDistRecFAN(void); void log_UpdateEventFAN(void); UINT16 log_ReadEventFAN(void); void log_LogPlatMethodFunctionEvent(const PLATFORM_EVENT_TYPE Event); void log_LogSecurityEventMsf(SECURITY_EVENT_VALUE EventValue, PLAT_INTERFACE Interface, PLAT_PASSWORD_LEVEL AccessLevel, UINT16 XtraStateInfo); typedef enum SecurityInterfaceTag { SECURITY_IFACE_UI = 0, SECURITY_IFACE_FP = 1, SECURITY_IFACE_RP1 = 2, SECURITY_IFACE_RP2 = 3, SECURITY_IFACE_TNL = 4, SECURITY_IFACE_IEC = 5, SECURITY_IFACE_DNPOE = 6 } SECURITY_INTERFACE; typedef enum SecurityPortIdTag { SECURITY_PORT_FP = 0, SECURITY_PORT_RP1 = 1, SECURITY_PORT_RP2 = 2, SECURITY_PORT_ETH = 3, SECURITY_PORT_TNL = 4, SECURITY_PORT_IEC = 5, SECURITY_PORT_DNPOE = 6 } SECURITY_PORT_ID; typedef enum SecurityPwEntryResultTag { SECURITY_PW_ENTRY_MATCH, SECURITY_PW_ENTRY_BLOCKED, SECURITY_PW_ENTRY_INCORRECT } SECURITY_PW_ENTRY_RESULT; typedef enum { SECURITY_AUTH_OK, SECURITY_AUTH_SERVICE_FAILURE, SECURITY_AUTH_INCORRECT, SECURITY_AUTH_NO_ROLE, SECURITY_AUTH_BLOCKED, SECURITY_AUTH_SESSION_LIMIT } SECURITY_AUTH_RESULT; typedef enum SecurityPwStateTag { SECURITY_PW_IDLE, SECURITY_PW_RETRY, SECURITY_PW_BLOCKING } SECURITY_PW_STATE; typedef enum SecurityEventtDataTypeTag { SECURITY_EVT_DATA_NONE, SECURITY_EVT_DATA_INS, SECURITY_EVT_DATA_NUM } SECURITY_EVT_DATA_TYPE; typedef enum SecurityAuthService { SECURITY_AUTH_NA = 0, SECURITY_AUTH_LEGACY, SECURITY_AUTH_SERVER, SECURITY_AUTH_DEVICE, SECURITY_AUTH_BYPASS } SECURITY_AUTH_SERVICE; typedef struct SecurityChanPwAccessTag { SECURITY_PW_STATE PwState; UINT16 PwAttempts; T_INTERN_ABS_DATE PwFirstFailDate; PLAT_PASSWORD_LEVEL (*GetEnteredPwLevel)(void); void (*SetEnteredPwLevel)(PLAT_PASSWORD_LEVEL Level); char EncryptionKey[((16)) + 1]; BOOLEAN KeyValid; char EnteredUserName[(16) + 1]; BOOLEAN SessionActive; SECURITY_AUTH_SERVICE AuthService; } SECURITY_CHAN_PW_ACCESS; typedef struct SecurityEventDataTag { UINT16 FirstTextIndex; UINT16 SecondTextIndex; SECURITY_EVT_DATA_TYPE SecondType; UINT32 *pSecondEnumTxtIndex; UINT16 ThirdTextIndex; SECURITY_EVT_DATA_TYPE ThirdType; UINT32 *pThirdEnumTxtIndex; UINT16 FourthTextIndex; SECURITY_EVT_DATA_TYPE FourthType; UINT32 *pFourthEnumTxtIndex; } SECURITY_EVENT_DATA; typedef struct SecurityRecoveryPwDataag { BOOLEAN CodeHasBeenRead; char IedSecurityCode[(16) + 1]; NU_TIMER IedSecCodeTimer; char PseudoSerialNo[(8) + 1]; char RecoveryPassword[(8) + 1]; BOOLEAN RecoveryPwValid; } SECURITY_RECOVERY_PW_DATA; typedef struct { char RoleName[(24) + 1]; INT32 RoleValue; PLAT_PASSWORD_LEVEL PwLevel; UINT32 MaxSessions; } RBAC_ROLE; extern UINT16 security_Features; extern void PKCS5_PBKDF2_HMAC(unsigned char *password, size_t plen, unsigned char *salt, size_t slen, const unsigned long iteration_count, const unsigned long key_length, unsigned char *output); void security_RegisterPwAccess(PLAT_INTERFACE Interface, SECURITY_CHAN_PW_ACCESS* pPwAccessData, CHAR *pTmrName); PLAT_PASSWORD_LEVEL security_GetPasswordFallbackLevel(PLAT_INTERFACE Interface); SECURITY_INTERFACE security_PlatToSecurInterface(PLAT_INTERFACE Interface); BOOLEAN security_PortUsedByPlatInterface(PLAT_INTERFACE Interface, SECURITY_PORT_ID *pPort); PLAT_PASSWORD_LEVEL security_GetCurrentPWLevel(PLAT_INTERFACE Interface); void security_InitSecurity(void); void security_InvalidateRecoveryPW(void); void security_GenerateEncryptionKey(PLAT_INTERFACE Interface); BOOLEAN security_ReadEncryptionKey(PLAT_INTERFACE Interface, char* pKey); void security_InvalidateEncryptionKey(PLAT_INTERFACE Interface); void security_ReadIedSecurityCode(char* pCode); BOOLEAN security_IedSecurityCodeHasBeenRead(void); SECURITY_CHAN_PW_ACCESS* security_GetPwAccessData(PLAT_INTERFACE Interface); SECURITY_EVENT_DATA* security_GetEventData(SECURITY_EVENT_VALUE SecurityEvtVal); BOOLEAN security_ValidateRecoveryPW(const char* pUserName, const char *pPasswordAttempt); SECURITY_PW_ENTRY_RESULT security_CheckEnteredPassword(const char *pPassword, PLAT_INTERFACE Interface); void security_EnterUserName(const char *pUsername,PLAT_INTERFACE Interface); const char* security_GetEnteredUserName(PLAT_INTERFACE Interface); void security_ProcessPwFailure(PLAT_INTERFACE Interface); UINT16 security_GetAttemptsRemaining(PLAT_INTERFACE Interface); UINT16 security_GetBlockedTimeRemaining(PLAT_INTERFACE Interface); BOOLEAN security_NercCompliantPW(const char* pUserName, const char *pPassword); void security_SetPassword(unsigned int UserIndex, const char *pPassword); void security_Decrypt(char* pPassword, const char* pKey); SECURITY_AUTH_RESULT security_Login(const char* pUser, const char *pPassword,PLAT_INTERFACE Interface, INT32 *pRole); void security_Logout(PLAT_INTERFACE Interface, PLAT_PASSWORD_LEVEL DefaultPwLevel); BOOLEAN security_GetPasswordBlocked(SECURITY_INTERFACE Interface); int security_ComparePassword(const char* pPassword, const UINT8 *pExpectedHash, const char* pSalt); void security_ResetEnteredPwLevel(PLAT_INTERFACE Interface, PLAT_PASSWORD_LEVEL DefaultPwLevel); BOOLEAN security_UserIsLocked(const char* pUserName); const char* security_GetRoleName(INT32 Role); PLAT_PASSWORD_LEVEL security_RoleToPasswordLevel(INT32 Role); INT32 security_PasswordLevelToRole(PLAT_PASSWORD_LEVEL PwLevel); void security_UnlockInterfaces(); void security_UnlockUsers(); extern BOOLEAN security_NoGapsInString(char *pString, UINT8 MaxLength); typedef enum { LCD_FIRST_LINE, LCD_SECOND_LINE, LCD_THIRD_LINE, LCD_LINE_MAX_ENUM } T_LCD_LINE; extern void ui_Create(OPTION Priority, UNSIGNED StackSize, NU_MEMORY_POOL *pSysPool, NU_MEMORY_POOL *pPlatPool); extern void ui_Start(void); extern void ui_AlarmNotifier(BOOLEAN Condition); extern void ui_FaultNotifier(BOOLEAN Condition); extern PLAT_PASSWORD_LEVEL ui_GetCurrentPasswordLevel(void); extern PLAT_PASSWORD_LEVEL ui_GetEnteredPasswordLevel(void); extern void ui_SetEnteredPasswordLevel(PLAT_PASSWORD_LEVEL Level); extern void ui_RefreshTimeout(UNSIGNED id); extern void ui_CourierTBitNotifier(BOOLEAN Condition); extern void ui_CourierOOSBitNotifier(BOOLEAN Condition); extern void ui_CommitNotifier(void); extern void ui_ResetLEDIndications(void); void ui_GetUIDataPointers( void ** pSharedDataPointer ); TEXT_LANGUAGE ui_GetCurrentLanguage(void); void ui_WriteUserBannerDisplay(char *pDisplayBuffer); void courier_DisableInterpreter( void (*Disabled) (COURIER_INSTANCE *), COURIER_INSTANCE *CourierInterface ); void courier_EnableInterpreter( COURIER_INSTANCE *CourierInterface ); void courier_NewMessage( COURIER_MESSAGE *CourierMessage ); void courier_SendMessage( COURIER_MESSAGE *CourierMessage ); void courier_AlarmStatus(BOOLEAN State, COURIER_INSTANCE *pCourierInterface); void courier_ControlStatus(BOOLEAN State, COURIER_INSTANCE *pCourierInterface); void courier_DistStatus(BOOLEAN State, COURIER_INSTANCE *pCourierInterface); void courier_EventStatus(BOOLEAN State, COURIER_INSTANCE *pCourierInterface); COURIER_STATUS_BYTE courier_GetStatusByte(COURIER_INSTANCE *pCourierInterface); void courier_OOSStatus(BOOLEAN State, COURIER_INSTANCE *pCourierInterface); void courier_PlantStatus(BOOLEAN State, COURIER_INSTANCE *pCourierInterface); void courier_TripStatus(BOOLEAN State, COURIER_INSTANCE *pCourierInterface); void courier_AlarmCall( UINT32 *pHandle, unsigned int Milliseconds, void (*pAlarmCallback)(COURIER_INSTANCE *), COURIER_INSTANCE *pCourierInterface ); void courier_CancelAlarmCall( UINT32 Handle, COURIER_INSTANCE *pCourierInterface ); UINT32 courier_GetMillisecondCount(void); void courier_ClearDiagnostics( const COURIER_INSTANCE *pCourierInterface ); UINT32 courier_ReadBusMessageCount( const COURIER_INSTANCE *pCourierInterface ); UINT32 courier_ReadBusCommErrCount( const COURIER_INSTANCE *pCourierInterface ); UINT32 courier_ReadProtocolCommErrCount( const COURIER_INSTANCE *pCourierInterface ); UINT32 courier_ReadSlaveMessageCount( const COURIER_INSTANCE *pCourierInterface ); UINT32 courier_ReadSlaveBusyCount( const COURIER_INSTANCE *pCourierInterface ); void courier_DisableProtocolStack( void (*pDisabled) (COURIER_INSTANCE *), COURIER_INSTANCE *pCourierInterface ); void courier_EnableProtocolStack( COURIER_INSTANCE *pCourierInterface ); void courier_RxMessage( COURIER_FRAME *pCourierFrame, COURIER_INSTANCE *pCourierInterface ); void courier_TxMessage( COURIER_FRAME *pCourierFrame, COURIER_INSTANCE *pCourierInterface ); void courier_DisableBusyReply( COURIER_INSTANCE *pCourierInterface ); void courier_EnableBusyReply( COURIER_INSTANCE *pCourierInterface ); void courier_SetStackCallbackTime( COURIER_INSTANCE *pCourierInterface, unsigned int IECCallbackTime, unsigned int LowLevCallbackTime ); void courier_InitReadOnlyFields( BOOLEAN ReadOnlyMode, COURIER_ADDRESS *pExceptionSettingCells, COURIER_INSTANCE *pCourierInterface ); void courier_SetReadOnlyMode( BOOLEAN ReadOnlyMode, COURIER_INSTANCE *pCourierInterface ); void courier_SetAddress( COURIER_ADDRESS Address, COURIER_INSTANCE *pCourierInterface ); typedef unsigned long clock_t; typedef unsigned long time_t; struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; }; struct tmzone { short daylight; long timezone; char tzname[4]; char dstname[4]; }; extern struct tmzone _tz; clock_t clock(void); double difftime(time_t _time1, time_t _time0); time_t mktime(struct tm *_tptr); time_t time(time_t *_timer); char *asctime(const struct tm *_timeptr); char *ctime(const time_t *_timer); struct tm *gmtime(const time_t *_timer); struct tm *localtime(const time_t *_timer); size_t strftime(char *_out, size_t _maxsize, const char *_format, const struct tm *_timeptr); COURIER_REPLY courier_AcceptEvent(COURIER_INSTANCE *pCourierInterface); COURIER_REPLY courier_ChangeAddress( COURIER_ADDRESS CourierAddress, COURIER_INSTANCE *pCourierInterface ); void courier_Decrypt(char* pPassword, char* pKey); BOOLEAN courier_CommandIsValid( COURIER_COMMAND Command, COURIER_INSTANCE *pInstance ); COURIER_DECODE_STATUS courier_DecodeIEEEFloat( COURIER_FRAME *pInFrame, UINT8 *pOffset, double *pDestData ); COURIER_ENCODE_STATUS courier_EncodeIEEEFloat( COURIER_FRAME *pOutFrame, BOOLEAN RepeatedDataGroup, double SourceData ); COURIER_REPLY courier_EnterCalibrationMode( COURIER_INSTANCE *pCourierInterface ); COURIER_REPLY courier_EnterConfigurationMode( COURIER_INSTANCE *pCourierInterface ); COURIER_REPLY courier_ExitCalibrationMode( struct tm *pCalibrationDate, COURIER_INSTANCE *pCourierInterface ); COURIER_REPLY courier_ExitConfigurationMode( struct tm *pConfigurationDate, COURIER_INSTANCE *pCourierInterface ); COURIER_REPLY courier_ExitOEMCalibrationMode( struct tm *pCalibrationDate, COURIER_INSTANCE *pCourierInterface ); COURIER_REPLY courier_GetEvent( COURIER_FRAME *pFrame, COURIER_INSTANCE *pCourierInterface ); void courier_GetSerialID( char *pBuffer, size_t BufferSize ); COURIER_REPLY courier_LoadShedByGroup( UINT8 LoadShedGroup, COURIER_INSTANCE *pCourierInterface ); COURIER_REPLY courier_LoadShedToLevel( UINT8 LoadShedLevel, COURIER_INSTANCE *pCourierInterface ); COURIER_REPLY courier_ResetTrip( COURIER_INSTANCE *pCourierInterface ); void courier_RestartPasswordTimer( COURIER_INSTANCE *pCourierInterface ); COURIER_REPLY courier_SelectSettingGroup( COURIER_SETTING_GROUP SettingGroup, COURIER_INSTANCE *pCourierInterface ); COURIER_REPLY courier_SetRealTime( const IEC_TIME *pRealTime, COURIER_MESSAGE *CourierMessage ); void courier_StartSettingsTimer( void (*pCallback) (COURIER_INSTANCE *), COURIER_INSTANCE *pCourierInterface ); void courier_StopSettingsTimer( COURIER_INSTANCE *pCourierInterface ); BOOLEAN courier_IsCellException2ROMode( const COURIER_MESSAGE *CourierMessage, const UINT8 *CommandData ); BOOLEAN courier_IsCallerInSettingTxMode(const COURIER_MESSAGE *CourierMessage); typedef struct interfaceDataTag { LOG_EVENT_TYPE EventId; UINT32 EventValue; UINT8 EventCOT; UINT16 EventFAN; T_INTERN_ABS_DATE EventTimeTag; UINT32 EventStateFlags; UINT32 EventUniqueId; UINT32 EventsAcceptedCount; SECURITY_EVENT_DATA *pSecurityEvtData; FAULT_DATA Fault; MAINTENANCE_DATA Maintenance; FAULT_DATA FaultAuto; MAINTENANCE_DATA MaintenanceAuto; } INTERFACE_DATA; typedef struct AttrCommonTag { size_t Offset; unsigned MenuTextIndex : 14; unsigned SecondaryTextIndex : 14; unsigned DependencyColumn : 8; unsigned DependencyRow : 8; unsigned DependencyType : 4; unsigned DependencyRipple : 1; unsigned Length : 7; unsigned ParameterGroup : 3; unsigned CellIsInGGI : 1; UINT32 DependencyValue; } ATTR_COMMON; typedef struct AttrParamCommonTag { unsigned PasswordLevel : 2; unsigned CourierDependencyFlag : 1; unsigned BF03DependancyCell : 1; void (*pfnParameterChangeFunction)(const COURIER_INFORMATION *); } ATTR_PARAM_COMMON; typedef struct AttrParamInsTag { ATTR_COMMON Common; ATTR_PARAM_COMMON ParameterCommon; UINT32* pStringTable; UINT32 HighLimit; } ATTR_PARAM_INS; typedef struct AttrParamInsPortDisableTag { ATTR_PARAM_INS data; SECURITY_PORT_ID PortToDisable; } ATTR_PARAM_INS_PORT_DISABLE; typedef struct AttrParamInsCurveTag { ATTR_PARAM_INS data; UINT32 UsrCrvStartIndex; UINT32 UsrCrvOffset; } ATTR_PARAM_INS_CURVE; typedef struct AttrParamAstTag { ATTR_COMMON Common; ATTR_PARAM_COMMON ParameterCommon; UINT8 HighLimit; UINT8 LowLimit; } ATTR_PARAM_AST; typedef struct AttrParamAstPwTag { ATTR_PARAM_AST astParam; UINT8 PwLevel; } ATTR_PARAM_AST_PW; typedef struct AttrParamIntTag { ATTR_COMMON Common; ATTR_PARAM_COMMON ParameterCommon; INT32 HighLimit; INT32 LowLimit; INT32 StepSize; } ATTR_PARAM_INT; typedef struct AttrParamBifTag { ATTR_COMMON Common; ATTR_PARAM_COMMON ParameterCommon; UINT32* pStringTable; UINT32 BitMask; unsigned BitOffset : 5; } ATTR_PARAM_BIF; typedef struct AttrParamBifDDBTag { ATTR_COMMON Common; ATTR_PARAM_COMMON ParameterCommon; UINT32* pStringTable; UINT32 BitMask; unsigned BitOffset : 5; UINT32 PackedDDBWord; } ATTR_PARAM_BIF_DDB; typedef struct AttrParamNumTag { ATTR_COMMON Common; ATTR_PARAM_COMMON ParameterCommon; REAL32 HighLimit; REAL32 LowLimit; REAL32 StepSize; unsigned Units : 6; unsigned MultiplierIndex : 6; unsigned NormalisationIndex : 6; } ATTR_PARAM_NUM; typedef struct AttrDataHeadTag { ATTR_COMMON Common; } ATTR_DATA_HEAD; typedef struct AttrDataInsTag { ATTR_COMMON Common; UINT32* pStringTable; UINT32 HighLimit; } ATTR_DATA_INS; typedef struct AttrDataAstTag { ATTR_COMMON Common; } ATTR_DATA_AST; typedef struct AttrDataIntTag { ATTR_COMMON Common; T_INTERN_ABS_DATE *pTimeOfChange; } ATTR_DATA_INT; typedef struct AttrDataIntByteFieldTag { ATTR_COMMON Common; T_INTERN_ABS_DATE *pTimeOfChange; UINT8 ByteNum; } ATTR_DATA_INT_BYTEFIELD; typedef struct AttrDataBifTag { ATTR_COMMON Common; UINT32 *pStringTable; unsigned BitOffset : 6; } ATTR_DATA_BIF; typedef struct AttrDataBifDDBTag { ATTR_COMMON Common; UINT32 *pStringTable; unsigned BitOffset : 6; UINT32 PackedDDBWord; } ATTR_DATA_BIF_DDB; typedef struct AttrDataNumTag { ATTR_COMMON Common; unsigned Units : 6; unsigned MultiplierIndex : 5; unsigned NormalisationIndex : 5; unsigned ModbusGFmt : 7; T_INTERN_ABS_DATE *pTimeOfChange; } ATTR_DATA_NUM; typedef struct AttrDataMeasTag { ATTR_COMMON Common; unsigned Units : 6; unsigned MultiplierIndex : 5; unsigned NormalisationIndex : 5; unsigned CS103Precision_m : 16; unsigned CS103Precision_n : 16; UINT32 CS103Factor; UINT32 CS103PercentageReference; } ATTR_DATA_MEAS; typedef union AttrMultiplierDataItem { ATTR_PARAM_NUM *pAttr; ATTR_PARAM_INS *pAttrINS; UINT8 MultiplierIndex; } ATTR_MULTIPLIER_DATA_ITEM; typedef enum AttrMultiplierDataType { MULTIPLIER_DATA_NONE, MULTIPLIER, ATTRIBUTE, VNORM_HW_CONFIG_MAIN_VT, VNORM_HW_CONFIG_CS_VT, VNORM_HW_CONFIG_NVD_VT, CURRENT_NORMALISATION } ATTR_MULTIPLIER_DATA_TYPE; typedef enum AttrMultiplierMathOperation { MATH_OP_NONE, MULTIPLICATION, DIVISION, POWER } ATTR_MULTIPLIER_MATH_OPERATION; typedef struct AttrMultiplierDataTag { ATTR_MULTIPLIER_DATA_ITEM Arg1; ATTR_MULTIPLIER_DATA_TYPE Arg1Type; ATTR_MULTIPLIER_DATA_ITEM Arg2; ATTR_MULTIPLIER_DATA_TYPE Arg2Type; ATTR_MULTIPLIER_MATH_OPERATION MathOp; } ATTR_MULTIPLIER_DATA; typedef struct AttrDependantMultiplierDataTag { unsigned DependancyColumn : 8; unsigned DependancyRow : 8; unsigned DependancyType : 4; unsigned DependancyRipple : 1; unsigned ThisMultiplierLocation : 6; unsigned TRUEMultiplierRef : 6; unsigned FALSEMultiplierRef : 6; UINT32 DependancyValue; } ATTR_DEPENDANT_MULTIPLIER_DATA; typedef struct Csupx_CBCondTag { REAL32 BrokenI; G88_ENUM IMaintEnable; REAL32 IMaintCount; G88_ENUM ILockoutEnable; REAL32 ILockoutCount; G88_ENUM NoOpsMaintEnable; UINT32 NoOpsMaintCount; G88_ENUM NoOpsLockEnable; UINT32 NoOpsLockCount; G88_ENUM TimeMaintEna; REAL32 TimeMaintTime; G88_ENUM TimeLockoutEna; REAL32 TimeLockoutTime; G88_ENUM FaultFreqLock; UINT32 FaultFreqCount; REAL32 FaultFreqTime; } CSUPSETX_CBCOND; typedef struct CsupxCBCtrlTag { G99_ENUM ControlBy; REAL32 ClosePulseTime; REAL32 TripPulseTime; REAL32 ManCloseDelay; REAL32 HealthyWindow; REAL32 CSWindow; G81_ENUM ResetLockoutBy; REAL32 ManCloseRstDelay; G37_ENUM SinglePole; G37_ENUM ThreePole; G118_ENUM CBStatusInput; REAL32 CBStatusTime; G37_ENUM ResetAROKbyUserInterface; G37_ENUM ResetAROKbySelectNoAR; G37_ENUM ResetAROKbyExternalDDB; G37_ENUM ResetAROKbyTimeDelay; REAL32 AROKResetTime; G37_ENUM ResetLockoutbyCBInService; G37_ENUM ResetLockoutbyUserInterface; G37_ENUM ResetLockoutbySelectNoAR; G37_ENUM ResetLockoutbyExternalDDB; G37_ENUM ResetLockoutbyTimeDelay; REAL32 LOResetTime; } CSUPSETX_CBCTRL; typedef struct CsupxProtTag { G37_ENUM Distance; G37_ENUM DirectEF; G37_ENUM PhaseDiff; G37_ENUM PhaseComp; G37_ENUM OverCurrent; G37_ENUM BrokenCond; G37_ENUM EF1; G37_ENUM SEF; G37_ENUM ResOV; G37_ENUM Thermal; G37_ENUM PSB; G37_ENUM ColdLoadPickup; G37_ENUM VoltProtMode; G37_ENUM Freq; G37_ENUM DFDT; G37_ENUM CBFail; G37_ENUM Supervision; G37_ENUM FaultLoc; G37_ENUM Systemcheck; G37_ENUM AutoReclose; G80_ENUM ComTest; G37_ENUM TGFD; REAL32 MainVTPrimary; REAL32 MainVTSecondary; REAL32 CSyncVTPrimary; REAL32 CSyncVTSecondary; REAL32 PhaseCTPrimary; REAL32 PhaseCTSecondary; REAL32 SEFaultCTPrimary; REAL32 SEFaultCTSecondary; REAL32 MCompCTPrimary; REAL32 MCompCTSecondary; G40_ENUM CheckSyncInput; G89_ENUM MainVTLoc; G163_ENUM CTDirection; G163_ENUM CT2Direction; G163_ENUM SEFCTDirection; G163_ENUM MCTDirection; G11_ENUM VTConected; G405_ENUM VT2_Allocation; REAL32 VN_VT_Primary; REAL32 VN_VT_Secondary; REAL32 CS1VTPhaseShift; REAL32 CS1VTMagnitudeFactor; } CSUPSETX_PROT_SETTINGS; typedef struct CSupxMeasTag { G52_ENUM DefaultDisplay; G56_ENUM MeasRef; UINT32 MeasMode; REAL32 FixedPeriod; REAL32 RollingSubPeriod; UINT32 NumOfSubPeriods; G97_ENUM DistanceUnit; G51_ENUM FaultLocation; } CSUPSETX_MEASFN; typedef struct CSupxComTestTag { UINT32 MonBit1; UINT32 MonBit2; UINT32 MonBit3; UINT32 MonBit4; UINT32 MonBit5; UINT32 MonBit6; UINT32 MonBit7; UINT32 MonBit8; G119_ENUM TestMode; UINT32 Flags; G37_ENUM StaticTest; UINT32 IM64TestPattern; G37_ENUM IM64PatternMode; G179_ENUM PropTestStatus; } CSUPSETX_COMTEST; typedef struct CSupxOptoTag { UINT32 OptoFilter; } CSUPSETX_OPTO; typedef struct CSupxMiscTag { UINT32 SysFnLinks; G162_ENUM RearPortFunction; G37_ENUM FaultRecExtended; } CSUPSETX_MISC; typedef struct GPSAlarmTag { REAL32 GPSFailAlarm; G37_ENUM GPSTransFail; UINT16 GPSTransCount; REAL32 GPSTransTimer; } GPS_ALARM; typedef struct ProtCfgTag { G37_ENUM Cnf_ExTransAlarm; REAL32 Cnf_ExDelay; G37_ENUM Cnf_ChannelTest; REAL32 Cnf_TestTime; REAL32 Cnf_RetryTime; UINT16 Cnf_NoOfRetry; REAL32 Cnf_TDiscrim; G182_ENUM Cnf_FSIOThres; } PROTCONFIG_SETTINGS; typedef struct UserCurveVersionTag { G401_ENUM UsrCur1Version; G401_ENUM UsrCur2Version; G401_ENUM UsrCur3Version; G401_ENUM UsrCur4Version; }USER_CURVE_VERSION_SETTINGS; typedef struct CSupxConfTag { CSUPSETX_CBCOND CBCond; CSUPSETX_CBCTRL CBCtrl; CSUPSETX_MEASFN Measfn; CSUPSETX_COMTEST ComTest; CSUPSETX_MISC Misc; CSUPSETX_OPTO UnvOpto; FIBRECOM FibreCom; GPS_ALARM GPSAlarm; PROTCONFIG_SETTINGS config; USER_CURVE_VERSION_SETTINGS UserCurveVersion; } CSUPSETX_CONFIG_SETTINGS; typedef struct CntlSupTag { PLATFORM_CONFIG PlatConfig; CSUPSETX_PROT_SETTINGS Prot; CSUPSETX_CONFIG_SETTINGS Config; NPSOC_CNTLSUP_SETTINGS NPSOC_Config; } CNTLSUP; typedef struct DistRecTag { REAL32 Duration; REAL32 TriggerPosition; G34_ENUM TriggerMode; G31_ENUM AnalogueChannels[16]; UINT16 DigitalInput[64]; G66_ENUM InputTrigger[32]; } DISTREC; typedef enum FlashDriverErrorCodesTag{ SMF_OK, SMF_INVALID_PARAMETER, SMF_SYS_ERROR, SMF_SEMA_TIMEOUT_ERROR, SMF_MEM_ERROR, SMF_SEMA_ERROR, SMF_DRIVER_ALREADY_EXIST, SMF_UNSUPPORTED_DEVICE, SMF_ERASE_SUSPEND_NOT_SUPP, SMF_UNKNOWN_FLASH_SECTOR, SMF_CONFIG_SETTING_TO_LARGE, SMF_CONFIG_SETTING_NOT_REG, SMF_CONFIG_RECORD_EMPTY, SMF_CORRUPT_CONFIG_RECORD, SMF_CONFIG_SETTING_COPY_ERROR, SMF_FLASH_WRITE_CRC_ERROR, SMF_FLASH_WRITE_CONFIG_SET_ERROR, SMF_FLASH_WRITE_CONFIG_LGTH_ERROR, SMF_FLASH_WRITE_INDICATOR_ERROR, SMF_FLASH_WRITE_ID_STRING_ERROR, SMF_FLASH_WRITE_LOCK, SMF_FLASH_WRITE_VPP, SMF_FLASH_WRITE_COMPLETE_ERROR, SMF_FLASH_WRITE_VERIFY_ERROR, SMF_FLASH_BUFFER_NOT_SUPP, SMF_FLASH_READ_FAIL, SMF_FLASH_ERASE_FAIL, SMF_FLASH_ERASE_LOCK, SMF_FLASH_ERASE_VPP, SMF_BACKUP_CONFIG_SET_FAIL, SMF_INVALIDATE_CONFIG_SET_FAIL, SMF_INVALID_SECTOR_ADDR, SMF_INVALID_ZONE_START_ADDR, SMF_INVALID_SECTOR_GROUP, SMF_CORRUPT_LOGICAL_ZONE, SMF_CRC_FAIL, SMF_ERASE_RESUME_ERROR, SMF_ERASE_SUSPEND_ERROR, SMF_CONFIG_COPY_RESUME_ERROR, SMF_SECTOR_ERASE_RESUME_ERROR, SMF_NO_EMPTY_LOGICAL_ZONES, SMF_DEFAULT_CASE, SMF_DRIVER_NOT_STARTED, SMF_SEMA_UNAVAILABLE, SMF_SECTOR_ASSIGN_ERROR, SMF_CONFIG_SETTING_LENGTH_ERROR, SMF_BLOCK_TRANSFER_ERROR }T_FLASH_STATUS; typedef enum FlashStatusTag{ SMF_FLASH_READY, SMF_FLASH_ERROR, SMF_FLASH_ERASE_BUSY, SMF_FLASH_ERASE_PENDING }T_FLASH_ERASE_STATUS; typedef enum SectorEraseStatusTag{ SMF_ERASE_SUSPENDED, SMF_ERASE_NOT_SUSPENDED }T_SECTOR_ERASE_SUSPEND_STATUS; typedef enum FlashCommandTag{ SMF_FLASH_ERASE, SMF_FLASH_WRITE }T_FLASH_COMMAND; typedef enum FlashBlockCommandTag{ SMF_FLASH_BLK_WR_CMD, SMF_FLASH_BLK_CRC_CMD, SMF_FLASH_BLK_WR_AND_CRC_CMD, SMF_FLASH_BLK_ABORT_CMD, SMF_FLASH_BLK_SKIP_CMD }T_FLASH_BLK_TRANSFER_CMD; typedef struct FlashTimeoutTag{ T_FLASH_COMMAND FlashCommand; } T_FLASH_TIMEOUT; typedef struct { FLA_REL_ADR AdrZonBegin; FLA_REL_ADR AdrZonEnd; FLA_REL_ADR AdrChksum; } T_FLASHZonCks; typedef enum FlashChipTag { SMF_FLASH_CHIP_A, SMF_FLASH_CHIP_B }T_FLASH_CHIP; #pragma DATA_SECTION (smfp_CRC16LookupTable, "sect_smf") extern const UINT16 smfp_CRC16LookupTable[256]; extern T_FLASH_STATUS smf_IniDrv(UINT8 NbConfigs, UINT32 FlashMemorySize, UINT32 LargestConfigLength, char *pConfigurationIdString[], OPTION EraseTaskPriority, NU_MEMORY_POOL *pSys_Mem_Pool, NU_QUEUE *pMsgMonitorQueue); extern T_FLASH_STATUS smf_InitBuffer2(UINT8 NbConfigs, UINT32 LargestConfigLengthInBytes, char *pConfigurationIdString[], NU_MEMORY_POOL *pSystemPool); extern T_FLASH_STATUS smf_Write(char *pConfigIdString, RAM_ADR *pAdrWriteDataFrom, UINT16 NumberOfBytesToWrite); T_FLASH_STATUS smf_WriteZoneBlk(char *pConfigIdString, UINT32 MaxLengthInBytes, UINT32 OffsetInBytes, RAM_ADR *pAdrWriteDataFrom, UINT32 NumberOfBytesToWrite, T_FLASH_BLK_TRANSFER_CMD FlashBlockCommand); extern T_FLASH_STATUS smf_CopyZone(char *pFromConfigIdString, char *pToConfigIdString); extern T_FLASH_STATUS smf_CheckConfig(char *pConfigIdString); extern T_FLASH_STATUS smf_ConfigStatus(BOOLEAN *pLogicalStatus, char *pConfigIdString); extern T_FLASH_STATUS smf_Read(FLA_REL_ADR PositionFrom, RAM_ADR *pAdrReadDataTo, UINT32 NumberOfBytesToBeRead); extern T_FLASH_STATUS smf_ReadConfigSettingBlock(char *pUserConfigIdString, RAM_ADR *pAdrReadDataTo); extern T_FLASH_STATUS smf_ReadZoneBlk(char *pConfigIdString, UINT32 OffsetInBytes, RAM_ADR *pAdrReadDataTo, UINT32 NumberOfBytesToRead); extern T_FLASH_STATUS smf_PreInitReadConfigSetWord(char *pConfigIdString, UINT32 DataOffset, UINT32 *pDataBuffer); T_FLASH_STATUS smf_PreInitRead(FLA_REL_ADR PositionFrom, RAM_ADR *pAdrReadDataTo, UINT32 NumberOfBytesToBeRead); extern T_FLASH_STATUS smf_ResetInitFlag(void); extern T_FLASH_STATUS smf_ReleaseDeviceAccess(OPTION CallerPriority, T_SECTOR_ERASE_SUSPEND_STATUS EraseSuspend); extern T_FLASH_STATUS smf_GetDeviceAccess(OPTION CallerPriority, BOOLEAN AllowEraseSuspend, T_SECTOR_ERASE_SUSPEND_STATUS *pEraseStatus); typedef struct msgHeaderTag { UINT16 sender; UINT16 receiver; UINT16 id; UINT16 sid; } MSG_HEADER; typedef enum{ SED_OK, SED_INVALID_PARAMETER, SED_DIGITAL_ERROR }SED_STATUS; typedef UINT32 T_SED_DIGITAL_INPUT_OPTO_BITS; typedef struct { T_SED_DIGITAL_INPUT_OPTO_BITS ValidityBits[2]; T_SED_DIGITAL_INPUT_OPTO_BITS StateBits[2]; UINT32 TimeTag; } T_SED_DIGITAL_INPUTS; typedef UINT32 T_SED_OPTO_CONFIG [8]; typedef BOOLEAN T_SED_VALID_OPTO [8]; typedef enum SEDOptoCharacteristicTag { SED_OPTO_CHARACTERISTIC_60_80, SED_OPTO_CHARACTERISTIC_50_70, SED_OPTO_CHARACTERISTIC_MAX_ENUM }SED_OPTO_CHARACTERISTIC; extern SED_STATUS sed_ReinitOptoConfigWithCharact( UINT32 *pThresholdCfg); extern BOOLEAN sed_DualCharacteristicPossible( int NumBoards); extern BOOLEAN sed_DetectDIOB( void); typedef enum sea3StatusTag{ SEA_OK, SEA_DRIVER_NOT_INITIALISED, SEA_DRIVER_ALREADY_INITIALISED, SEA_SAMPLE_SYSTEM_NOT_CREATED, SEA_INVALID_PARAMETER, SEA_OS_ERROR, SEA_DIGITAL_ERROR, SEA_HARDWARE_NOT_FOUND, SEA_CHECKSUM_ERROR, SEA_ANALOGUE_ERROR, SEA_INVALID_MODULE_ADDRESS, SEA_MAJOR_HW_VERSION_MISMATCH, SEA_HW_SW_VERSION_MISMATCH, SEA_NO_TIMEBASE, SEA_TIMEBASE_MISMATCH, SEA_MODULATOR_FAIL, SEA_STREAM_FAIL, SEA_INVALID_SAMPLE_SYSTEM, SEA_INVALID_CHANNEL_TYPE, SEA_INVALID_SYNC_MAP, SEA_CHANNEL_NOT_FITTED, SEA_STREAM_NOT_AVAILABLE, SEA_DATA_ACQ_RUNNING, SEA_DATA_ACQ_NOT_STARTED, SEA_FILTER_COEFF_ERROR }SEA_STATUS; typedef enum sea3ChannelTypeTag{ SEA_TYPE_UNUSED, SEA_TYPE_VOLTS, SEA_TYPE_STDCURRENT, SEA_TYPE_SENCURRENT, SEA_TYPE_LOWCURRENT } T_SEA3_CHANNEL_TYPE; typedef enum sea3ChannelRatingTag{ SEA_RATING_NONE, SEA_RATING_110V, SEA_RATING_440V, SEA_RATING_1A, SEA_RATING_5A } T_SEA3_CTVT_NOMINAL_RATING; typedef enum sea3CalibrationPointTag{ SEA_HZ_1, SEA_HZ_2 }T_SEA3_CALIBRATION_FREQ; typedef enum sea3HardwareInputTag{ SEA_RESISTOR_BASED, SEA_TRANSFORMER_BASED }T_SEA3_HARDWARE_INPUT; typedef enum sea3CTVTPolarityTag{ SEA_CTVT_POLARITY_NEG, SEA_CTVT_POLARITY_POS }T_SEA3_CTVT_POLARITY; typedef struct sea3CalibrationVerTag{ char CalSoftVerNum[(2)][(4)*4]; char CalSoftLocation[(2)][(4)*4]; UINT8 CalDateTime[(2)][(2)*4]; }T_SEA3_CAL_VER_DATE; typedef struct sea3FilterCoeffTag{ UINT32 A0[(4)]; UINT32 A1[(4)]; UINT32 B1[(4)]; UINT32 B2[(4)]; UINT32 DC; }T_SEA3_FILTER_COEFF; typedef struct sea3HardwareVerTag{ UINT16 HardwareVersion[(2)]; }T_SEA3_HW_VER; typedef struct sea3ChannelCoeffTag{ REAL32 V_0; REAL32 V_1; REAL32 Ph; }T_SEA3_CHANNEL_COEFF; typedef struct sea3ChannelConfigTag{ T_SEA3_CHANNEL_TYPE Type; UINT32 Channel; REAL32 MaxRange; T_SEA3_CTVT_NOMINAL_RATING Nominal; REAL32 NFactor; T_SEA3_CTVT_POLARITY Polarity; }T_SEA3_CHANNEL_CONFIG; typedef struct sea3AnalogueDigitalDataTag{ BOOLEAN Valid_ana_in; UINT32 Validity_info; REAL32 AnalogueChannels[(14) * (2)]; UINT32 TimeTag; } T_SEA3_ANALOGUE_INPUTS_APPLI; typedef struct sea3InputDataTag{ T_SEA3_ANALOGUE_INPUTS_APPLI AnalogueInputData; T_SED_DIGITAL_INPUTS DigitalInputData; }T_SEA3_INPUT_DATA; #pragma DATA_SECTION (sea3_InputData, "sect_sea") extern T_SEA3_INPUT_DATA sea3_InputData[(6)]; typedef struct sea3HardwareConfigTag{ T_SEA3_CHANNEL_TYPE CalChannelType[((2) * (14))]; T_SEA3_CTVT_NOMINAL_RATING CalChannelRating[((2) * (14))]; T_SEA3_CHANNEL_COEFF CalChannelCoeffs[((2) * (14))][(4)]; T_SED_OPTO_CONFIG Opto_config; BOOLEAN Valid_ana_in; UINT32 Validity_info; BOOLEAN RegisterPollLockup; BOOLEAN Valid_Calibration_Data; BOOLEAN StackOverFlow; T_SED_VALID_OPTO Valid_dig_in_optoboard; BOOLEAN NCIT_Fitted; UINT8 NumModulesFitted; T_SEA3_HARDWARE_INPUT InputHardwareType; } T_hardware_acq3_config; typedef void (*pAnalogueInt) (T_SEA3_INPUT_DATA *); typedef UINT8 T_SEA3_SAMPLE_SYSTEM_ID; extern SEA_STATUS sea3_InitDriver(UINT8 NumOptoBoardsFitted, UINT8 NumDIOBFitted, T_hardware_acq3_config *pAcqConfig, BOOLEAN SupervisorExist, NU_MEMORY_POOL *pSysMemPool, NU_QUEUE *pSuperQ, OPTION AcqMonTaskPri, UINT32 *pOptoThresholdConfig, BOOLEAN NCIT_Fitted); extern SEA_STATUS sea3_CreateSampleSys(T_SEA3_SAMPLE_SYSTEM_ID *pSampleSystemId, T_SEA3_CHANNEL_CONFIG ChannelConfig[], T_SEA3_FILTER_COEFF *pFilterCoeff, REAL32 SamplePeriod, BOOLEAN TimeTag, BOOLEAN DigitalScan, BOOLEAN SampleCapture, pAnalogueInt Callback, UINT32 *pHISRStack, UNSIGNED HISRStackSize); extern SEA_STATUS sea3_StartSampling(void); extern SEA_STATUS sea3_StopSampling(void); extern SEA_STATUS sea3_ReconfigPeriod(T_SEA3_SAMPLE_SYSTEM_ID SampleSystemId, REAL32 SamplePeriod); extern SEA_STATUS sea3_ReconfigChannelConfig(T_SEA3_SAMPLE_SYSTEM_ID SampleSystemId, T_SEA3_CHANNEL_CONFIG LogicalChannelConfig[]); extern SEA_STATUS sea3_ReconfigCalFrequency(T_SEA3_SAMPLE_SYSTEM_ID SampleSystemId, T_SEA3_CALIBRATION_FREQ CalibrationFreqGroup); extern SEA_STATUS sea3_SwapLogicalChannels(T_SEA3_SAMPLE_SYSTEM_ID SampleSystemId, T_SEA3_CHANNEL_CONFIG *pLogicalChannel_x, T_SEA3_CHANNEL_CONFIG *pLogicalChannel_y); SEA_STATUS sea3_ReconfigChannelIndex(T_SEA3_SAMPLE_SYSTEM_ID SampleSystemId, T_SEA3_CHANNEL_CONFIG LogicalChannelConfig[]); extern SEA_STATUS sea3_GetHardwareVersion(T_SEA3_HW_VER *pVersion); extern SEA_STATUS sea3_GetCalibrationVersion(T_SEA3_CAL_VER_DATE *pData); extern SEA_STATUS sea3_ConfigChannels(UINT32 Channel, T_SEA3_CHANNEL_TYPE ChannelType, T_SEA3_CTVT_NOMINAL_RATING ChannelRating); typedef enum { Secl_Init_OK, Secl_Init_Input_Bsy_Sem_Fail, Secl_Init_Output_Bsy_Sem_Fail, Secl_Init_Input_OK_Output_Bad, Secl_Init_Input_Bad_Output_OK, Secl_Init_Input_Bad_Output_Bad } t_secl_init_status; typedef enum { Secl_Wr_OK, Secl_Wr_Bus_Rd_Error, Secl_Wr_Busy_Error, Secl_Wr_Port_Fail, Secl_Wr_HW_Fail } t_secl_wr_status; typedef enum { Secl_Rd_OK, Secl_Rd_Bus_Rd_Error, Secl_Rd_Port_Fail, Secl_Rd_HW_Fail, Secl_Rd_Acq_Err } t_secl_rd_status; t_secl_init_status secl_init(void); t_secl_wr_status secl_wr_output( unsigned int channel, UINT16 value ); t_secl_rd_status secl_rd_input( unsigned int channel, UINT16* value_ptr ); typedef enum { Two_Lines, Three_Lines } T_Number_Of_Lines; typedef enum { Underligne, Full } T_Cursor_Type; typedef struct { UINT8 v_pos; UINT8 h_pos; BOOLEAN active; BOOLEAN on; BOOLEAN char_was_inverted; T_Cursor_Type type; } T_Cursor; extern void sa_displayLight(BOOLEAN ); void sa_displayClear(void); STATUS sa_lcdInit ( T_Number_Of_Lines Number_Of_Lines, UINT8 contrast, BOOLEAN backlight); void sa_displayCursor (T_Cursor *new_cursor); void sa_displayBlink(BOOLEAN State); void sa_displayChar (UINT8 posX, UINT8 posY, UINT8 ch, BOOLEAN invert ); void sa_dispClearWithoutNucl(void); extern STATUS sa_dispLightWithoutNucl(BOOLEAN ); extern STATUS sa_lcdInitWithoutNucl (void); extern STATUS sa_dispCharWithoutNucl (UINT8, UINT8, UINT8); STATUS sa_displayString ( UINT8 posX, UINT8 posY, UINT8 *chaine, UINT16 size, BOOLEAN invert); STATUS sa_dispStringWithoutNucl (UINT8 posX , UINT8 posY , UINT8 *string, UINT16 size, BOOLEAN invert); void sa_Change_Contrast(UINT8 contrast); UINT16 *sa_getpCourierFont(void); typedef enum { FUNCKEY_OFF, FUNCKEY_ON } FUNCKEY_STATUS; typedef struct FunctionKeyDatatag { FUNCKEY_STATUS Status; UINT8 Index; } T_FNKEY_DATA; typedef void (*pFuncKey)(T_FNKEY_DATA FuncKey); typedef struct FunctionKeyCallbackfunctiontag { pFuncKey pFunction; T_FNKEY_DATA FuncKey; } T_FNKEY_POINTER; typedef struct { UINT8 keyNum; } T_SA_KEYPAD_TO_SUPER; extern T_FNKEY_POINTER FuncKeyData; extern void sa_keybRead(UNSIGNED dummy); extern STATUS sa_FnkeyInit (void (*pFuncKey)(T_FNKEY_DATA FuncKey)); extern STATUS sa_keypadInit (NU_QUEUE *KeypMessQueueId); extern void sa_keypadStart (); extern void sa_keypadStop (void); extern UINT32 s_errno; extern void errnoSet ( UINT32 input_errno ); typedef struct { STATUS testStat; UINT32 testInfo; } T_SBS_PERM_TEST_RESULT; typedef struct { BOOLEAN AnaSampleInterruptStatus; BOOLEAN AnaSampleInterruptStopStart; } SBS_ANA_SAMPLE_ISR_STATUS; extern SBS_ANA_SAMPLE_ISR_STATUS sbs_AnaSampleISRStatus; STATUS sbs_atPermInit( NU_MEMORY_POOL *, OPTION , NU_QUEUE * ); typedef struct { union { T_hardware_acq2_config Acq2_HW_config; T_hardware_acq3_config Acq3_HW_config; T_hardware_rel2_config Rel_HW_config; T_DATETIMECOUNTER_TO_SUPER Dat_msg; T_SBS_PERM_TEST_RESULT PermTMsg; T_FLASH_TIMEOUT FlashTimeoutMsg; } u; } S_TO_C_SLNK; typedef struct { union { UINT32 dummy; } u; } S_TO_C_LCON; typedef struct { union { UINT32 dummy; } u; } S_TO_C_ELOG; typedef struct { union { UINT32 dummy; T_SA_KEYPAD_TO_SUPER Keyp_msg; } u; } S_TO_C_UI; typedef struct { union { UINT32 Error; } u; } C_TO_C_MON; typedef struct { MSG_HEADER header; union { S_TO_C_SLNK from_s; C_TO_C_MON from_c; } body; } TO_C_SLNK, TO_C_MON; typedef struct { MSG_HEADER header; union { S_TO_C_UI from_s; } body; } TO_C_UI; typedef UINT32 PLERR_ERROR; void plerr_RegisterErrorHandler(void (*Handler)(PLERR_ERROR)); void plerr_HandleError(PLERR_ERROR Error); typedef enum inmonProductStatusTag { PRODUCT_SAD = 0, PRODUCT_HAPPY = 1 } INMON_PRODUCT_STATUS; typedef enum inmonBatteryStatusTag { BATTERY_SAD = 0, BATTERY_HAPPY = 1 } INMON_BATTERY_STATUS; typedef enum inmonFieldVoltageStatusTag { FIELDVOLTAGE_SAD = 0, FIELDVOLTAGE_HAPPY = 1 } INMON_FIELDVOLTAGE_STATUS; typedef enum inmonIRIGBStatusTag { IRIGB_CARD_NOT_FITTED = 0, IRIGB_CARD_FAILED = 1, IRIGB_SIGNAL_PRESENT = 2, IRIGB_SIGNAL_NOT_PRESENT = 3 } INMON_IRIGB_STATUS; typedef enum inmonFibreStatusTag { FIBRE_OPTIC_NOT_EXPECTED = 0, FIBRE_OPTIC_EXPECTED = 1, FIBRE_OPTIC_FITTED = 2 } INMON_FIBRE_STATUS; typedef enum inmonRearCommsCardStatusTag { INMON_REAR_COMMS_CARD_UNSUPPORTED, INMON_REAR_COMMS_CARD_ABSENT, INMON_REAR_COMMS_CARD_IEC_RS232_OK, INMON_REAR_COMMS_CARD_IEC_RS485_OK, INMON_REAR_COMMS_CARD_KBUS_OK } INMONG204_REAR_COMMS_CARD_STATUS; typedef enum inmonHMITypeTag { HMI_STANDARD = 0, HMI_CHINESE = 1 } INMON_HMI_TYPE; typedef enum inmonInterfaceTag { INMON_INTERFACE_UI, INMON_INTERFACE_FCUR, INMON_INTERFACE_REMOTE, INMON_INTERFACE_REMOTE2, INMON_INTERFACE_MAX_ENUM } INMON_INTERFACE; typedef struct inmonPasswordLevelsTag { PLAT_PASSWORD_LEVEL Level[INMON_INTERFACE_MAX_ENUM]; } INMON_PASSWORD_LEVELS; typedef struct inmonStatusTag { INMON_BATTERY_STATUS BatteryState; INMON_FIELDVOLTAGE_STATUS FieldVoltageState; INMON_IRIGB_STATUS IRIGBState; INMON_FIBRE_STATUS FibreState; INMONG204_REAR_COMMS_CARD_STATUS RearCommsCardState; INMON_HMI_TYPE HMIType; TEXT_LANGUAGE Language; } INMON_STATUS; extern INMON_STATUS inmonStatus; extern NU_QUEUE MonitorQueue; INMON_PRODUCT_STATUS inmon_InitialiseNoE2p( NU_MEMORY_POOL *SystemPool, NU_MEMORY_POOL *PlatformPool, OPTION MonitorTaskPriority, OPTION FlashErasePriority, OPTION IrigTaskPriority, OPTION SoftTimerPriority, OPTION MonitorMsgPriority, UINT32 MaxSoftTimerStack ); INMON_PRODUCT_STATUS inmonX_VerifyHW(const char *pModelNum, UINT32 *pData); BOOLEAN inmonX_XCPU2Supported(void); BOOLEAN inmonX_Initialise(const UINT8 InitialisationFlag); void inmonX_HandleNonStandardError(TO_C_MON *pMsg); UINT32 inmonX_InitialiseAcquisition(NU_MEMORY_POOL *SystemPool, OPTION MonitorMsgPriority, const char *pModelNum, T_hardware_acq2_config *AcqConfig); void inmon_InitSeaDrv( NU_MEMORY_POOL *SystemPool, OPTION MonitorMsgPriority, UINT32 NumOptos, UINT32 NumOptosDIOB, BOOLEAN NewOptoBoardFitted, T_hardware_acq2_config *AcqConfig, BOOLEAN DualCharRequired, BOOLEAN EthernetNCITRequired); BOOLEAN inmon_NewOptoBoardFitted(void); BOOLEAN inmon_IrigBState(void); UINT32 inmonX_InitialiseRelay(const char *pModelNum, T_hardware_rel2_config *AcqConfig); void inmon_InitialiseSer2Drv2(UINT32 NumRelays_Old, UINT32 NumRelays_New, UINT32 NumRelays_DIOB, UINT32 NumRelays_HB, T_hardware_rel2_config *AcqConfig); void inmonX_GetCurrentRatings(T_CurrChanAmperTable CurrentRatings); UINT32* inmon_GetOptoConfiguration(UINT32 NumberOfOptos, UINT32 NumOptoBoards); void inmon_UniversalOptoConfig(const CNTLSUP* const pCS); const T_hardware_acq2_config * inmon_GetHWConfiguration(void); const T_hardware_rel2_config * inmon_GetRHWConfiguration(void); UINT32 inmon_GetNoOptos(void); UINT32 inmon_GetNoRelays(void); UINT32 inmon_GetNoOldRelays(void); UINT32 inmon_GetNoDIOBRelays(void); UINT32 inmon_GetNoDIOBOptos(void); UINT32 inmon_GetNoNewRelays(void); UINT32 inmon_GetNoHBRelays(void); void inmon_GetPasswordLevels(INMON_PASSWORD_LEVELS *pPasswordLevels); void inmon_SetNoOptos(UINT32 NumOptos); BOOLEAN inmon2_SetNoOptos(UINT32 NumOptos, BOOLEAN NewOptoBoardFitted, BOOLEAN DIOBFitted); void inmon_SetNoRelays(UINT32 NumRelays); void inmon_ControlOOSLed(BOOLEAN State); void inmon_ControlBatteryAlarm(BOOLEAN State); void inmon_FatalError(PLERR_ERROR ErrorCode); void inmon_FWDLISR(INT32 vect); void inmon_ProcessFatalError(TO_C_MON *pMsg); void inmon_Lockout(PLERR_ERROR Error); static inline INMONG204_REAR_COMMS_CARD_STATUS inmon_GetRearCommsCardStatus(void) { return(inmonStatus.RearCommsCardState); } static inline void inmon_SetRearCommsCardStatus(const INMONG204_REAR_COMMS_CARD_STATUS Status) { inmonStatus.RearCommsCardState = Status; } static void inmon_FibreBoardStatus(void); void inmon_CheckLanguages(void); BOOLEAN inmon_DualCharOptosUsed( void); void inmon_SetDualCharOptosUsed(BOOLEAN Dual_Possible, BOOLEAN Dual_Required); INMON_PRODUCT_STATUS inmon_get_product_status(void); void inmon_DisplayMessage(UINT16 Index, UINT8 DisplayLine); void inmon_UpdateLanguage(TEXT_LANGUAGE Language); static inline INMON_HMI_TYPE inmon_getHMIType(void) { return(inmonStatus.HMIType); } typedef enum FlashWriteDataZonesTag { FLASHAPIHDLR_LATCHED_RELAY_ZONE, FLASHAPIHDLR_LATCHED_LED_ZONE, FLASHAPIHDLR_CONTROL_INPUT_ZONE, FLASHAPIHDLR_LATCH_FUNC_KEY_ZONE, FLASHAPIHDLR_SR_GATE_Q_1_ZONE, FLASHAPIHDLR_SR_GATE_Q_2_ZONE, FLASHAPIHDLR_MAX_DATA_ZONE_ENUMERATION } FLASHAPIHDLR_DATA_ZONES; typedef enum FlashWriteBufferTag { FLASHAPIHDLR_WR_COMPLETE, FLASHAPIHDLR_WR_TO_FLASH }T_FLASHAPIHDLR_WR_STATUS; typedef struct FlashWriteDataTag { T_FLASHAPIHDLR_WR_STATUS Status; UINT32 Data[(8)>>2]; char *pDataId; UINT8 NumberOfBytes; }T_FLASHAPIHDLR_DATA; typedef struct FlashWriteTaskDataTag { NU_TASK Task; NU_SEMAPHORE Buffer2Access; FLASHAPIHDLR_DATA_ZONES DataCommitOrder[FLASHAPIHDLR_MAX_DATA_ZONE_ENUMERATION]; T_FLASHAPIHDLR_DATA Data[FLASHAPIHDLR_MAX_DATA_ZONE_ENUMERATION]; }T_FLASHAPIHDLR_BUF2_TASK_DATA; extern T_FLASHAPIHDLR_BUF2_TASK_DATA *pFlashapiHdlrBuf2TaskData; extern char *FlashAPIhdlr_pDataId[FLASHAPIHDLR_MAX_DATA_ZONE_ENUMERATION]; void flashapihdlr_Initialise(UINT8 NbConfigs, UINT32 FlashMemorySizeInBytes, UINT32 LargestConfigLengthInBytes, char *pConfigurationIdString[], OPTION EraseTaskPriority, NU_MEMORY_POOL *pSys_Mem_Pool, NU_QUEUE *pMsgMonitorQueue, PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); void flashapihdlr_InitGeneralBuffer(UINT8 NbConfigs, UINT32 LargestConfigLengthInBytes, char *pConfigurationIdString[], NU_MEMORY_POOL *pSystemPool, PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); void flashapihdlr_Buffer2Write(FLASHAPIHDLR_DATA_ZONES ApplDataIndex, UINT32 *pData, UINT8 NumberOfBytes); void flashapihdlr_InitBuffer2(UINT8 NbConfigs, UINT32 LargestConfigLengthInBytes, char *pConfigurationIdString[], OPTION FlashBuf2WritePriority, NU_MEMORY_POOL *pSystemPool, PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); void flashapihdlr_Read(FLA_REL_ADR FlashAddress, RAM_ADR Buffer, UINT32 BytesToRead, PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); void flashapihdlr_ReadSettingBlock(char *pConfigIdString, RAM_ADR Buffer, PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); void flashapihdlr_Write(char *pConfigIdString, RAM_ADR Data, UINT16 NumberOfBytes, PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); void flashapihdlr_ReadZoneBlk(char *pConfigIdString, UINT32 ReadFromOffset, RAM_ADR pAddrDestData, UINT32 NumberOfBytesToRead, PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); void flashapihdlr_WriteZoneBlk(char *pConfigIdString, UINT32 MaxLength, UINT32 WriteToOffset, RAM_ADR pAddrSrcData, UINT32 NumberOfBytesToWrite, T_FLASH_BLK_TRANSFER_CMD BlkCmd, PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); void flashapihdlr_CopyZone(char *pFromConfigIdString, char *pToConfigIdString, PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); void flashapihdlr_ResetInitFlag(PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); BOOLEAN flashapihdlr_CheckConfigSetting(char *pConfigIdString, PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); void flashapihdlr_CheckConfigStatus(BOOLEAN *pConfigStatus, char *pConfigIdString, PLERR_ERROR PrimaryErrorCode, PLERR_ERROR SecondaryErrorCode); typedef struct msfxFuncKeyDatatag { UINT32 FunctionKeyStatus; UINT32 LatchStates; } MSFX_FNKEY_DATA; typedef enum msfxEventDataTypeTag { MSFX_UINT, MSFX_BIF } MSFX_EVENT_DATA_TYPE; typedef enum TransferModeTag { PREPARE_RX = (UINT8)0, COMPLETE_RX, PREPARE_TX, COMPLETE_TX, RX_PREPARED, TX_PREPARED, AOK, ERR } TRANSFER_MODE; typedef enum TMCStateTag { IDLE = (UINT8)0, RX_PREP_COMPLETE, TX_PREP_COMPLETE } TMC_STATE; typedef enum PslArrayTypeTag { PSL_HEADER = (UINT8)0, PACKED_PSL_GATES, PSL_RELAY_CONDITIONERS, PSL_TIMER_CONDITIONERS, PSL_LED_CONDITIONERS, LOGIC_ID, S1_DATA, OVERRUN } PSL_ARRAY_TYPE; typedef enum UpConfigTag { PSL_CONFIG_FILE, DDB_STRING_TABLE } UP_CONFIG; typedef enum UpStatus { NEW_TABLE, STRING_REQUIRED, STRING_OBTAINED } UPLOAD_STATUS; extern char msfXSoftwareRef1String[(16)]; extern MSFX_FNKEY_DATA FunctionKeyData; extern void msfX_Initialise(REAL32 *pMainVTRating, REAL32 *pCSVTRating, REAL32 *pNVDVTRating); extern void msfX_GetSecondaryToPrimaryData(ATTR_MULTIPLIER_DATA **ppMultData, ATTR_DEPENDANT_MULTIPLIER_DATA **ppDepMultData, REAL32 **ppMultipliers); extern void msfX_GetNormalisationData(ATTR_MULTIPLIER_DATA **ppMultData, ATTR_DEPENDANT_MULTIPLIER_DATA **ppDepMultData, REAL32 **ppMultipliers); extern void msfX_GetAlarmIndex(UINT32 Alarm, UINT16 *Index); extern void msfX_GetRelayEventData(UINT32 Value, COURIER_CELL_REF *pCellRef, UINT16 *pIndex, UINT16 *pSecIndex, MSFX_EVENT_DATA_TYPE *pDataType); extern void msfX_GetOptoEventData(UINT32 Value, COURIER_CELL_REF *pCellRef, UINT16 *pIndex, UINT16 *pSecIndex, MSFX_EVENT_DATA_TYPE *pDataType); extern void msfX_GetAlarmEventData(UINT32 Value, COURIER_CELL_REF *pCellRef, UINT16 *pIndex, UINT16 *pSecIndex, MSFX_EVENT_DATA_TYPE *pDataType); extern void msfX_GetProtEventData(UINT32 Value, COURIER_CELL_REF *pCellRef, UINT16 *pIndex, UINT16 *pSecIndex, MSFX_EVENT_DATA_TYPE *pDataType); extern void msfX_GetSecurityEventData(UINT32 Value, COURIER_CELL_REF *pCellRef, SECURITY_EVENT_DATA **ppSecurityEvt, MSFX_EVENT_DATA_TYPE *pDataType); extern UINT32 msfX_StringizeSecurityEventData(TEXT_LANGUAGE Language, UINT16 TextStrIndex, SECURITY_EVT_DATA_TYPE Type, UINT16 EventState, UINT32* pEnumStringArray, char *pBuffer); extern void msfX_GetPlatEventData(UINT32 Value, COURIER_CELL_REF *pCellRef, UINT16 *pIndex, UINT16 *pSecIndex, MSFX_EVENT_DATA_TYPE *pDataType); extern void msfX_GetFaultEventData(UINT32 Value, COURIER_CELL_REF *pCellRef, UINT16 *pIndex, UINT16 *pSecIndex, MSFX_EVENT_DATA_TYPE *pDataType); extern void msfX_GetMaintEventData(UINT32 Value, COURIER_CELL_REF *pCellRef, UINT16 *pIndex, UINT16 *pSecIndex, MSFX_EVENT_DATA_TYPE *pDataType); extern void msfX_GetMaintRecordIndex(MAINTENANCE_RECORD_TYPE *pType, UINT16 *Index); extern void msfX_ResetIndications(void); extern void msfx_ReadControlInputs(CONTROL_INPUTS *pStates); extern void msfX_SingleControlInputChange(CONTROL_INPUT_ID ID, CONTROL_INPUT_STATE State); extern void msfX_MultiControlInputChange(CONTROL_INPUTS *pNewStates); extern void msfX_GetDigitalDataBusText(UINT32 Element, UINT8 Group, TEXT_LANGUAGE Language, char *pText); extern void msfX_GetPSLDigitalDataBusText(UINT32 Element, UINT8 Group, TEXT_LANGUAGE Language, char *pText); extern BOOLEAN msfX_PerformCoherencyCheck(CNTLSUP *pCS, DISTREC *pDR, PROTCNTL *pPG1, PROTCNTL *pPG2, PROTCNTL *pPG3, PROTCNTL *pPG4); extern void msfX_DownloadComplete(UINT32 Domain, UINT32 SubDomain); extern void msfX_CopyTo(PLAT_COPY_TO_GROUP Group); extern void msfX_RestoreDefaultsTo(PLAT_RESTORE_DEFAULT_PARAMETER_GROUP Category); extern void msfX_SettingGroupChangedCourier(void); extern void msfX_GetScalingFactorUnits (UINT8 ChannelNumber, COURIER_NUMBER_UNITS *pScalingUnits); extern UINT32 msfX_GetOptoGroupFromCell(UINT16 CellAddress); extern UINT32 msfX_GetRelayGroupFromCell(UINT16 CellAddress); extern void msfX_StoreCtrlIPsToBBRAM(UINT32 *pControlInputs); extern void msfX_RestoreCtrlIPsFromBBRAM(ENUMDDB_SIGNALS EnumDDBOfFirstControlInput); STATUS msfX_ResetDataInFlashMem(FLASHAPIHDLR_DATA_ZONES ApplDataIndex, UINT8 NumberOfBytes); void msfX_InitialiseFnKey(UINT32 FirstFnKeyDDB); void msfX_ConfigureFnKey(const CNTLSUP* const pCS); void msfX_FnKeyCallBack(T_FNKEY_DATA FuncKey); void msfX_GetFunctionKeys(UINT16 *pFunctionKeys); extern void msfX_PatchVTs(CNTLSUP * const pCS); BOOLEAN msfX_Read_RP1_ReadOnlyDDB(void); BOOLEAN msfX_Read_RP2_ReadOnlyDDB(void); BOOLEAN msfX_Read_NIC_ReadOnlyDDB(void) ; typedef enum DbmConfigSettingsTag{ DBM_CS_ZONE, DBM_DR_ZONE, DBM_PG1_ZONE, DBM_PG2_ZONE, DBM_PG3_ZONE, DBM_PG4_ZONE, DBM_ZONES_MAX_ENUM } DBM_ZONES; typedef enum DbmPslZonesTag{ DBM_PSL1_ZONE, DBM_PSL2_ZONE, DBM_PSL3_ZONE, DBM_PSL4_ZONE, DBM_PSL_ZONES_MAX_ENUM } DBM_PSL_ZONES; typedef enum DbmPslNotifyStateTag{ DBM_PSL_NOTIFY_NO_CHANGE = 0, DBM_PSL_NOTIFY_COPY_RESTORE = 1, DBM_PSL_NOTIFY_DOWNLOAD_START = 2, DBM_PSL_NOTIFY_DOWNLOAD_DONE = 4, DBM_PSL_NOTIFY_STATE_MAX_ENUM } DBM_PSL_NOTIFY_STATE; typedef struct DbmParametersTag { CNTLSUP *pCS; DISTREC *pDR; PROTCNTL *pPG1; PROTCNTL *pPG2; PROTCNTL *pPG3; PROTCNTL *pPG4; } DBM_PARAMETERS; extern char *dbm_pConfigId[(((((((((1) + 1) + 1) + 1) - (1)) + 1) - 1) + ((1))) + 2)]; extern char *dbm_pPSLConfigId[(((((((1) + 1) + 1) + 1) - (1)) + 1))]; BOOLEAN dbm_AbortAndUnlock(void); BOOLEAN dbm_Unlock(NU_TASK *TaskID); void dbm_CheckConfigStatusESM(DBM_ZONES ConfigIndex); void dbm_CheckPslConfigStatusESM(DBM_PSL_ZONES PslConfigIndex); BOOLEAN dbm_CommitAndUnlock(BOOLEAN NotifyAppl); BOOLEAN dbm_CommitAndUnlockAs(BOOLEAN NotifyAppl, NU_TASK *TaskID); BOOLEAN dbm_CommitCSOnly(BOOLEAN NotifyAppl); BOOLEAN dbm_CommitCSOnlyAs(BOOLEAN NotifyAppl, NU_TASK *TaskId); BOOLEAN dbm_CommitASGByOpto(UINT8 Group); BOOLEAN dbm_CopyPGValues(UINT8 To, UINT8 From); void dbm_EnterCriticalRead(void); void dbm_ExitCriticalRead(void); UINT8 dbm_GetActiveGroup(void); void dbm_GetModelNo(char *pBuffer, size_t Length); void dbm_GetModelNoAfterDBMInit(char *pBuffer); void dbm_GetPreInitFalsh_ModelNo(char *pBuffer, size_t Length); void dbm_GetParameters(DBM_PARAMETERS *pParameters); void dbm_GetParametersAs(DBM_PARAMETERS *pParameters, NU_TASK *TaskId); void dbm_GetSerialNo(char *pBuffer, size_t Length); BOOLEAN dbm_HasCSChanged(void); BOOLEAN dbm_HasDRChanged(void); BOOLEAN dbm_HasPGChanged(UINT8 Group); DBM_PSL_NOTIFY_STATE dbm_GetPslNotifyState(UINT8 Group); UINT8 dbm_InitialiseNoE2p(NU_MEMORY_POOL *PlatMemPool); BOOLEAN dbm_InstateCSDefaultValues(void); BOOLEAN dbm_InstateCSDefaultValuesAs(NU_TASK *TaskId); BOOLEAN dbm_InstateDRDefaultValues(void); BOOLEAN dbm_InstateDRDefaultValuesAs(NU_TASK *TaskId); BOOLEAN dbm_InstatePGDefaultValues(UINT8 Group); BOOLEAN dbm_InstatePGDefaultValuesAs(UINT8 Group, NU_TASK *TaskId); BOOLEAN dbm_IsDatabaseLocked(void); BOOLEAN dbm_Lock(void); void dbm_NotifyActiveGroupChange(UINT8 Group); void dbm_NotifyCSChange(void); void dbm_NotifyCSChangeAs(NU_TASK *TaskId); void dbm_NotifyDRChange(void); void dbm_NotifyDRChangeAs(NU_TASK *TaskId); void dbm_NotifyPGChange(UINT8 Group); void dbm_NotifyPGChangeAs(UINT8 Group, NU_TASK *TaskId); void dbm_SetPSLNotifyState(UINT8 Group, DBM_PSL_NOTIFY_STATE State); void dbm_SetPSLNotifyStateAs(UINT8 Group, DBM_PSL_NOTIFY_STATE State, NU_TASK *pTask); void dbm_RegisterApplNotifyFunctions( void (*Commit)(BOOLEAN CS, BOOLEAN DR, BOOLEAN PG, CNTLSUP *pCS, DISTREC *pDR, PROTCNTL *pPG), void (*Abort)(void) ); void dbm_RegisterPlatNotifyFunctions( void (*Lock)(BOOLEAN UCARequest, BOOLEAN Success, UINT32 Client), void (*Commit)(void), void (*Abort)(void)); PROTCNTL * dbm_SelectActivePG(UINT8 Group); void dbm_GetInitialisationFlag(UINT8 *Flag); char * dbm_ConfigurationId(DBM_ZONES ConfigIdIndex); char * dbm_PSLConfigurationId(DBM_PSL_ZONES PslZoneIdIndex); DBM_PSL_ZONES dbmP_GroupToPslZone(UINT8 Group); void dbm_ResetInitialisationFlag(void); void dbm_RegisterDBFriendTask(NU_TASK *pTask); typedef enum DistExtractStatusTag { LINE_REQUIRED = (UINT8)0, LINE_READ, RECORD_EXTRACTED, RECORD_NOT_EXTRACTED } DIST_EXTRACT_STATUS; typedef struct DistExtractControlTag { UINT16 CurrentLineNumber; INT8 CurrentCharNumber; INT8 CharsOnCurrentLine; DIST_EXTRACT_STATUS ExStatus; UINT8 Buffer[(34)]; UINT32 RepeatIndex; UINT32 RepeatLimit; UINT16 LastDigitalSample; } DIST_EXTRACT_CONTROL; typedef struct CourierSpecificDataTag { PLAT_SETTING_TRANSFER BF03; BOOLEAN HasBF03Changed; BOOLEAN AbortBF03; PLAT_SAVE_COMMAND LastSave; PLAT_COPY_FROM_GROUP CopyFrom; BOOLEAN IsEventSelected; UINT32 SelectedEventNumber; UINT32 ValueForCourier; COURIER_CELL_REF CellRef; UINT16 PrimIndex; UINT16 SecIndex; MSFX_EVENT_DATA_TYPE Datatype; UINT8 NumBinaryFlags; BOOLEAN IsFaultSelected; UINT32 SelectedFaultNumber; BOOLEAN IsMaintSelected; UINT32 SelectedMaintNumber; BOOLEAN IsAutoFaultSelected; UINT32 SelectedAutoFaultNumber; BOOLEAN IsAutoMaintSelected; UINT32 SelectedAutoMaintNumber; BOOLEAN IsDistSelected; INT32 SelectedDistNumber; UINT16 SelectedDistNumberIntern; DIST_EXTRACT_CONTROL ExControl; UINT32 SelectedDomain; UINT32 SelectedSubDomain; UINT16 ReadOnlyVersion; UINT16 WriteOnlyVersion; UINT32 Reference[((UINT32) 8)]; TRANSFER_MODE TMCValue; TMC_STATE TMCState; BOOLEAN FreshDownload; BOOLEAN FreshUpload; BOOLEAN DownloadSuccess; BOOLEAN DBMLockTaken; PSL_SETTINGS *pPslSettings; void *pArray; PSL_ARRAY_TYPE PSLArrayType; UINT32 ArrayIndex; UINT32 ArraySize; UINT32 CummulativeLength; UINT16 DownloadBytesRemaining; UINT8 Byte1; UINT8 Byte2; UINT8 Byte3; UINT8 Byte4; UINT8 UploadBytes[(UINT8)4]; UINT8 ByteCount; UINT8 Group; UINT32 BlkStartIndex; UINT32 LocalBuffIndex; UINT32 LocalBuffLimit; UINT32 ConfigFile[(((UINT32)(((2048) + 3) / 4)) + (UINT32)XFR_CFG_PSL_CFG_FILE_LEN)]; TEXT_LANGUAGE Language; BOOLEAN FirstByteWritten; UP_CONFIG UploadConfigState; UPLOAD_STATUS UpStatus; char StrBuffer[(16)+1]; UINT32 StringIndex; UINT8 ChannelTypeNo; UINT8 CalCoeffs; } COURIER_SPECIFIC_DATA; typedef struct CourierInterfaceDataTag { INTERFACE_DATA CommonData; SECURITY_CHAN_PW_ACCESS PwAccessData; COURIER_SPECIFIC_DATA CourierData; } COURIER_INTERFACE_DATA; void fcur_NewParameters(void); void fcur_AlarmNotifier(BOOLEAN Condition); void fcur_ControlNotifier(BOOLEAN Condition); void fcur_Create(OPTION TaskPriority, OPTION DrivPriority, UNSIGNED StackSize, NU_MEMORY_POOL *pSysPool, NU_MEMORY_POOL *pPlatPool); PLAT_PASSWORD_LEVEL fcur_GetCurrentPasswordLevel(void); PLAT_PASSWORD_LEVEL fcur_GetEnteredPasswordLevel(void); void fcur_SetEnteredPasswordLevel(PLAT_PASSWORD_LEVEL Level); COURIER_INSTANCE* fcur_GetInstance(void); COURIER_INTERFACE_DATA* fcur_GetInterfaceData(void); void fcur_OOSNotifier(BOOLEAN Condition); void fcur_PlantNotifier(BOOLEAN Condition); void fcur_RestartPasswordTimer(void ); void fcur_Start(void); void fcur_StartSettingsTimer (void (*fcur_UserCallBack)(COURIER_INSTANCE *) ); void fcur_StopSettingsTimer(void ); void fcur_TripNotifier(BOOLEAN Condition); void fcur_UnlockDatabase(void); extern PLATG208_RCUR1_STATUS RearCourier1Status; void kbus_AlarmNotifier(BOOLEAN Condition); void kbus_ControlNotifier(BOOLEAN Condition); void kbus_Create(OPTION ApplPriority, OPTION TxLinkPriority, OPTION RxLinkPriority, OPTION DriverTaskPriority, OPTION DriverHISRPriority, UNSIGNED ApplStackSize, NU_MEMORY_POOL *pSysPool, NU_MEMORY_POOL *pPlatPool); void kbus_DistNotifier(BOOLEAN DisturbancesPresent); void kbus_EventNotifier(BOOLEAN Condition); PLAT_PASSWORD_LEVEL kbus_GetEnteredPasswordLevel(void); PLAT_PASSWORD_LEVEL kbus_GetCurrentPasswordLevel(void); COURIER_INSTANCE* kbus_GetInstance(void); COURIER_INTERFACE_DATA* kbus_GetInterfaceData(void); void kbus_NewParameters(void); void kbus_OOSNotifier(BOOLEAN Condition); void kbus_PlantNotifier(BOOLEAN Condition); void kbus_SetEnteredPasswordLevel(PLAT_PASSWORD_LEVEL Level); void kbus_Start(void); void kbus_TripNotifier(BOOLEAN Condition); void kbus_RestartPasswordTimer(void); void kbus_StartSettingsTimer(void (*pCallback) (COURIER_INSTANCE *)); void kbus_StopSettingsTimer(void); void kbus_UnlockDatabase(void); PLATG205_RCUR2_PORT_CONFIG rcur2_GetConfig(); void rcur2_AlarmNotifier(BOOLEAN Condition); void rcur2_ControlNotifier(BOOLEAN Condition); void rcur2_Create(OPTION ApplPriority, OPTION TxLinkTaskPriority, OPTION RxLinkTaskPriority, OPTION DriverHISRPriority, OPTION DriverTaskPriority, UNSIGNED ApplTaskStackSize, UNSIGNED TxLinkTaskStackSize, UNSIGNED RxLinkTaskStackSize, NU_MEMORY_POOL *pSysPool, NU_MEMORY_POOL *pPlatPool); void rcur2_EventNotifier(BOOLEAN Condition); void rcur2_DistNotifier(BOOLEAN DisturbancePresent); PLAT_PASSWORD_LEVEL rcur2_GetCurrentPasswordLevel(void); PLAT_PASSWORD_LEVEL rcur2_GetEnteredPasswordLevel(void); void rcur2_SetEnteredPasswordLevel(PLAT_PASSWORD_LEVEL Level); COURIER_INSTANCE* rcur2_GetInstance(void); COURIER_INTERFACE_DATA* rcur2_GetInterfaceData(void); void rcur2_AppNewParameters(void); void rcur2_OOSNotifier(BOOLEAN Condition); void rcur2_PlantNotifier(BOOLEAN Condition); void rcur2_Start(void); void rcur2_TripNotifier(BOOLEAN Condition); void rcur2_RestartPasswordTimer(void); void rcur2_StartSettingsTimer(void (*pCallback) (COURIER_INSTANCE *)); void rcur2_StopSettingsTimer(void); void rcur2_UnlockDatabase(void); void unpack_string16_L2R(char *buffer, const UINT32 *src_pack_str); void unpack_string_L2R(char *buffer, const UINT32 *src_pack_str, UINT32 StringLength); void pack_string_L2R(UINT32 *dst_pack_str, const char *buffer, UINT32 StringLength); void pack_string16_L2R(UINT32 *dst_pack_str, const char *buffer); void unpack_string_R2L(char *buffer, const UINT32 *src_pack_str, UINT32 StringLength); void pack_string_R2L(UINT32 *dst_pack_str, const char *buffer, UINT32 StringLength); void unpack_Chinese_HMI_string_R2L(char *buffer,const UINT32 *src_pack_str, const UINT32 *src_pack_str_H8bit,UINT32 StringLength); inline void unpack_UINT32_to_UINT8(UINT32 value, UINT8 *pAddr); #pragma DATA_SECTION(enumDataXferSubDomainUcaSettings, "sect_str") extern UINT32 enumDataXferSubDomainUcaSettings[1]; #pragma DATA_SECTION(enumOptoInput, "sect_str") extern UINT32 enumOptoInput[1]; #pragma DATA_SECTION(enumIrigbStatus, "sect_str") extern UINT32 enumIrigbStatus[4]; #pragma DATA_SECTION(enumOST, "sect_str") extern UINT32 enumOST[4]; #pragma DATA_SECTION(enumCVTEnable, "sect_str") extern UINT32 enumCVTEnable[3]; #pragma DATA_SECTION(enumReconfiguration, "sect_str") extern UINT32 enumReconfiguration[4]; #pragma DATA_SECTION(enumSignalAddress2p, "sect_str") extern UINT32 enumSignalAddress2p[65]; #pragma DATA_SECTION(enumClockSrc, "sect_str") extern UINT32 enumClockSrc[2]; #pragma DATA_SECTION(enumSelectLeader, "sect_str") extern UINT32 enumSelectLeader[1]; #pragma DATA_SECTION(enumFaultAlarms, "sect_str") extern UINT32 enumFaultAlarms[14]; #pragma DATA_SECTION(enumDRTrigger, "sect_str") extern UINT32 enumDRTrigger[2]; #pragma DATA_SECTION(enumInterMiCOMSCC, "sect_str") extern UINT32 enumInterMiCOMSCC[6]; #pragma DATA_SECTION(enumRcur1PortConfig, "sect_str") extern UINT32 enumRcur1PortConfig[2]; #pragma DATA_SECTION(enumAdvancedApp, "sect_str") extern UINT32 enumAdvancedApp[4]; #pragma DATA_SECTION(enumCtrlIPOnOffTypes, "sect_str") extern UINT32 enumCtrlIPOnOffTypes[4]; #pragma DATA_SECTION(enumCTRLCB2Lead, "sect_str") extern UINT32 enumCTRLCB2Lead[1]; #pragma DATA_SECTION(enumPublisherSim, "sect_str") extern UINT32 enumPublisherSim[8]; #pragma DATA_SECTION(enumSignalState, "sect_str") extern UINT32 enumSignalState[2]; #pragma DATA_SECTION(enumLanguage, "sect_str") extern UINT32 enumLanguage[1]; #pragma DATA_SECTION(enumTefMod, "sect_str") extern UINT32 enumTefMod[2]; #pragma DATA_SECTION(enumFunctionKeyMode, "sect_str") extern UINT32 enumFunctionKeyMode[2]; #pragma DATA_SECTION(enumPlantStatus, "sect_str") extern UINT32 enumPlantStatus[16]; #pragma DATA_SECTION(enumFirstFaultDet, "sect_str") extern UINT32 enumFirstFaultDet[4]; #pragma DATA_SECTION(enumCompMode, "sect_str") extern UINT32 enumCompMode[1]; #pragma DATA_SECTION(enumVectorialCompensation, "sect_str") extern UINT32 enumVectorialCompensation[14]; #pragma DATA_SECTION(enumInterMiCOMDataRate, "sect_str") extern UINT32 enumInterMiCOMDataRate[6]; #pragma DATA_SECTION(enumCS103Blocking, "sect_str") extern UINT32 enumCS103Blocking[3]; #pragma DATA_SECTION(enumComTestLEDs, "sect_str") extern UINT32 enumComTestLEDs[2]; #pragma DATA_SECTION(enumCopyTo, "sect_str") extern UINT32 enumCopyTo[5]; #pragma DATA_SECTION(enumAuthBypass, "sect_str") extern UINT32 enumAuthBypass[5]; #pragma DATA_SECTION(enumSEFSelection, "sect_str") extern UINT32 enumSEFSelection[3]; #pragma DATA_SECTION(enumNPSOCCurve, "sect_str") extern UINT32 enumNPSOCCurve[10]; #pragma DATA_SECTION(enumChSyncIPSel, "sect_str") extern UINT32 enumChSyncIPSel[6]; #pragma DATA_SECTION(bfFreqFuncLink, "sect_str") extern UINT32 bfFreqFuncLink[4]; #pragma DATA_SECTION(enumEvents, "sect_str") extern UINT32 enumEvents[3]; #pragma DATA_SECTION(enumQuadResistance, "sect_str") extern UINT32 enumQuadResistance[2]; #pragma DATA_SECTION(enumSendonTrip, "sect_str") extern UINT32 enumSendonTrip[3]; #pragma DATA_SECTION(enumDistPermFnLink, "sect_str") extern UINT32 enumDistPermFnLink[2]; #pragma DATA_SECTION(enumBlockAutoreclose, "sect_str") extern UINT32 enumBlockAutoreclose[2]; #pragma DATA_SECTION(enumG180MeasuringMode, "sect_str") extern UINT32 enumG180MeasuringMode[4]; #pragma DATA_SECTION(enumDistanceUnit, "sect_str") extern UINT32 enumDistanceUnit[2]; #pragma DATA_SECTION(enumRcur1Status, "sect_str") extern UINT32 enumRcur1Status[3]; #pragma DATA_SECTION(enumChannelfnlinks, "sect_str") extern UINT32 enumChannelfnlinks[14]; #pragma DATA_SECTION(enumComTestChanTestMode, "sect_str") extern UINT32 enumComTestChanTestMode[1]; #pragma DATA_SECTION(enumSupportedVsrsion, "sect_str") extern UINT32 enumSupportedVsrsion[4]; #pragma DATA_SECTION(enumCustomMask, "sect_str") extern UINT32 enumCustomMask[10]; #pragma DATA_SECTION(enumUniversalGlobalThreshold, "sect_str") extern UINT32 enumUniversalGlobalThreshold[6]; #pragma DATA_SECTION(enumResetLockoutBy, "sect_str") extern UINT32 enumResetLockoutBy[2]; #pragma DATA_SECTION(enumSboSecurityMode, "sect_str") extern UINT32 enumSboSecurityMode[2]; #pragma DATA_SECTION(enumG182FSIOThres, "sect_str") extern UINT32 enumG182FSIOThres[1]; #pragma DATA_SECTION(bfSefFuncLink, "sect_str") extern UINT32 bfSefFuncLink[6]; #pragma DATA_SECTION(enumPTPStatus, "sect_str") extern UINT32 enumPTPStatus[4]; #pragma DATA_SECTION(enumPhasePrioty, "sect_str") extern UINT32 enumPhasePrioty[9]; #pragma DATA_SECTION(enumFaultedPhase, "sect_str") extern UINT32 enumFaultedPhase[8]; #pragma DATA_SECTION(enumUsrIDMTType, "sect_str") extern UINT32 enumUsrIDMTType[5]; #pragma DATA_SECTION(enumDigitalDataBus, "sect_str") extern UINT32 enumDigitalDataBus[1442]; #pragma DATA_SECTION(enumFallbackMode, "sect_str") extern UINT32 enumFallbackMode[2]; #pragma DATA_SECTION(enumCtrlStatus, "sect_str") extern UINT32 enumCtrlStatus[16]; #pragma DATA_SECTION(enumPolarisation, "sect_str") extern UINT32 enumPolarisation[2]; #pragma DATA_SECTION(enumSOTF, "sect_str") extern UINT32 enumSOTF[4]; #pragma DATA_SECTION(enumCS103BaudRate, "sect_str") extern UINT32 enumCS103BaudRate[2]; #pragma DATA_SECTION(enumSetMode, "sect_str") extern UINT32 enumSetMode[2]; #pragma DATA_SECTION(enumCtrlIPTypeOne, "sect_str") extern UINT32 enumCtrlIPTypeOne[2]; #pragma DATA_SECTION(enumInterMiCOMStatus, "sect_str") extern UINT32 enumInterMiCOMStatus[5]; #pragma DATA_SECTION(enumEthernetProtocol, "sect_str") extern UINT32 enumEthernetProtocol[4]; #pragma DATA_SECTION(enumDirection, "sect_str") extern UINT32 enumDirection[3]; #pragma DATA_SECTION(enumUserVersion, "sect_str") extern UINT32 enumUserVersion[2]; #pragma DATA_SECTION(enumARMode, "sect_str") extern UINT32 enumARMode[3]; #pragma DATA_SECTION(enumDataXferSubDomainPslSettings, "sect_str") extern UINT32 enumDataXferSubDomainPslSettings[4]; #pragma DATA_SECTION(enumAuthMethod, "sect_str") extern UINT32 enumAuthMethod[3]; #pragma DATA_SECTION(enumCtrlIPTypeTwo, "sect_str") extern UINT32 enumCtrlIPTypeTwo[2]; #pragma DATA_SECTION(enumVtsMode, "sect_str") extern UINT32 enumVtsMode[3]; #pragma DATA_SECTION(enumWeakInfeed, "sect_str") extern UINT32 enumWeakInfeed[3]; #pragma DATA_SECTION(enumComTestDelay, "sect_str") extern UINT32 enumComTestDelay[1]; #pragma DATA_SECTION(enumSwitchIEDConfigBanks, "sect_str") extern UINT32 enumSwitchIEDConfigBanks[2]; #pragma DATA_SECTION(enumAuthProtocol, "sect_str") extern UINT32 enumAuthProtocol[2]; #pragma DATA_SECTION(enumRestoreUserCurves, "sect_str") extern UINT32 enumRestoreUserCurves[5]; #pragma DATA_SECTION(enumFilter, "sect_str") extern UINT32 enumFilter[2]; #pragma DATA_SECTION(enumCompensation, "sect_str") extern UINT32 enumCompensation[3]; #pragma DATA_SECTION(enumARDeadTimeStart, "sect_str") extern UINT32 enumARDeadTimeStart[2]; #pragma DATA_SECTION(enumAlarmsEnable, "sect_str") extern UINT32 enumAlarmsEnable[2]; #pragma DATA_SECTION(enumMaintance, "sect_str") extern UINT32 enumMaintance[7]; #pragma DATA_SECTION(enumHotKeySetGroups, "sect_str") extern UINT32 enumHotKeySetGroups[4]; #pragma DATA_SECTION(enumDAEnabledState, "sect_str") extern UINT32 enumDAEnabledState[4]; #pragma DATA_SECTION(enumCmdType, "sect_str") extern UINT32 enumCmdType[2]; #pragma DATA_SECTION(enumDataXferSubDomainTrace, "sect_str") extern UINT32 enumDataXferSubDomainTrace[1]; #pragma DATA_SECTION(enumAllow_BlockAutoreclose, "sect_str") extern UINT32 enumAllow_BlockAutoreclose[3]; #pragma DATA_SECTION(enumWITripPSB, "sect_str") extern UINT32 enumWITripPSB[2]; #pragma DATA_SECTION(enumGPSSync, "sect_str") extern UINT32 enumGPSSync[4]; #pragma DATA_SECTION(enumBaudRate, "sect_str") extern UINT32 enumBaudRate[3]; #pragma DATA_SECTION(enumInterMiCOMRemoteDevice, "sect_str") extern UINT32 enumInterMiCOMRemoteDevice[2]; #pragma DATA_SECTION(enumIMCommand, "sect_str") extern UINT32 enumIMCommand[4]; #pragma DATA_SECTION(enumCBCtrl, "sect_str") extern UINT32 enumCBCtrl[8]; #pragma DATA_SECTION(enumFactoryDefaults, "sect_str") extern UINT32 enumFactoryDefaults[6]; #pragma DATA_SECTION(enumPrimarySecondary, "sect_str") extern UINT32 enumPrimarySecondary[2]; #pragma DATA_SECTION(enumInactiveActive, "sect_str") extern UINT32 enumInactiveActive[2]; #pragma DATA_SECTION(enumIDMTCurveG178, "sect_str") extern UINT32 enumIDMTCurveG178[15]; #pragma DATA_SECTION(enumOptoCharacteristic, "sect_str") extern UINT32 enumOptoCharacteristic[2]; #pragma DATA_SECTION(enumDistTrigger, "sect_str") extern UINT32 enumDistTrigger[3]; #pragma DATA_SECTION(enumOverrideInhibit, "sect_str") extern UINT32 enumOverrideInhibit[2]; #pragma DATA_SECTION(enumCBCtrlLogic, "sect_str") extern UINT32 enumCBCtrlLogic[7]; #pragma DATA_SECTION(enumIFuncLink, "sect_str") extern UINT32 enumIFuncLink[6]; #pragma DATA_SECTION(enumCDiffSetup, "sect_str") extern UINT32 enumCDiffSetup[3]; #pragma DATA_SECTION(enumPhysicalLink, "sect_str") extern UINT32 enumPhysicalLink[2]; #pragma DATA_SECTION(enumDisabledEnabled, "sect_str") extern UINT32 enumDisabledEnabled[2]; #pragma DATA_SECTION(enumSecurInterface, "sect_str") extern UINT32 enumSecurInterface[7]; #pragma DATA_SECTION(enumGroupSelection, "sect_str") extern UINT32 enumGroupSelection[4]; #pragma DATA_SECTION(enumAidedScheme, "sect_str") extern UINT32 enumAidedScheme[9]; #pragma DATA_SECTION(enumParity, "sect_str") extern UINT32 enumParity[3]; #pragma DATA_SECTION(enumSignallingBaudRate, "sect_str") extern UINT32 enumSignallingBaudRate[2]; #pragma DATA_SECTION(enumStandardInverted, "sect_str") extern UINT32 enumStandardInverted[2]; #pragma DATA_SECTION(enumDataXferSubDomainDNPEVSettings, "sect_str") extern UINT32 enumDataXferSubDomainDNPEVSettings[4]; #pragma DATA_SECTION(enumBasicSchemeMode, "sect_str") extern UINT32 enumBasicSchemeMode[2]; #pragma DATA_SECTION(enumComTestStab, "sect_str") extern UINT32 enumComTestStab[1]; #pragma DATA_SECTION(enumForwardReverseOffset, "sect_str") extern UINT32 enumForwardReverseOffset[3]; #pragma DATA_SECTION(enumDataXferSubDomainUserCurves, "sect_str") extern UINT32 enumDataXferSubDomainUserCurves[4]; #pragma DATA_SECTION(enumRestoreMCL, "sect_str") extern UINT32 enumRestoreMCL[2]; #pragma DATA_SECTION(enumDayOfWeek, "sect_str") extern UINT32 enumDayOfWeek[7]; #pragma DATA_SECTION(enumDataXferSubDomainIedCfgBuf, "sect_str") extern UINT32 enumDataXferSubDomainIedCfgBuf[2]; #pragma DATA_SECTION(POCStatusLink, "sect_str") extern UINT32 POCStatusLink[6]; #pragma DATA_SECTION(enumTrippingMode, "sect_str") extern UINT32 enumTrippingMode[2]; #pragma DATA_SECTION(enumMonthOfYear, "sect_str") extern UINT32 enumMonthOfYear[12]; #pragma DATA_SECTION(enumWattmetricSEF, "sect_str") extern UINT32 enumWattmetricSEF[1]; #pragma DATA_SECTION(enumDACBConfirmCmds, "sect_str") extern UINT32 enumDACBConfirmCmds[4]; #pragma DATA_SECTION(enumSaveAs, "sect_str") extern UINT32 enumSaveAs[3]; #pragma DATA_SECTION(enumRcur2PortConfig, "sect_str") extern UINT32 enumRcur2PortConfig[3]; #pragma DATA_SECTION(enumForwardReverse, "sect_str") extern UINT32 enumForwardReverse[1]; #pragma DATA_SECTION(enumPSBlocking, "sect_str") extern UINT32 enumPSBlocking[2]; #pragma DATA_SECTION(enumVtsBlock, "sect_str") extern UINT32 enumVtsBlock[3]; #pragma DATA_SECTION(enumVTLocation, "sect_str") extern UINT32 enumVTLocation[2]; #pragma DATA_SECTION(enumDACBStatusTitles, "sect_str") extern UINT32 enumDACBStatusTitles[2]; #pragma DATA_SECTION(enumCTS_CDIFFStatus, "sect_str") extern UINT32 enumCTS_CDIFFStatus[2]; #pragma DATA_SECTION(enumSboCs103Mode, "sect_str") extern UINT32 enumSboCs103Mode[2]; #pragma DATA_SECTION(enumCheckSyncSlip, "sect_str") extern UINT32 enumCheckSyncSlip[4]; #pragma DATA_SECTION(enumTimeSource, "sect_str") extern UINT32 enumTimeSource[4]; #pragma DATA_SECTION(enumRcur2CardStatus, "sect_str") extern UINT32 enumRcur2CardStatus[5]; #pragma DATA_SECTION(enumActiveGroupControl, "sect_str") extern UINT32 enumActiveGroupControl[2]; #pragma DATA_SECTION(enumSysFnLinks, "sect_str") extern UINT32 enumSysFnLinks[1]; #pragma DATA_SECTION(enumTrippedElements, "sect_str") extern UINT32 enumTrippedElements[32]; #pragma DATA_SECTION(enumDistRecDummy, "sect_str") extern UINT32 enumDistRecDummy[1]; #pragma DATA_SECTION(enumRecorderSource, "sect_str") extern UINT32 enumRecorderSource[1]; #pragma DATA_SECTION(enumOperationMode, "sect_str") extern UINT32 enumOperationMode[4]; #pragma DATA_SECTION(enumStabResult, "sect_str") extern UINT32 enumStabResult[1]; #pragma DATA_SECTION(enumStartedElements, "sect_str") extern UINT32 enumStartedElements[32]; #pragma DATA_SECTION(enumTOCTripping, "sect_str") extern UINT32 enumTOCTripping[7]; #pragma DATA_SECTION(enumSecurityLevel, "sect_str") extern UINT32 enumSecurityLevel[3]; #pragma DATA_SECTION(enumVisibility, "sect_str") extern UINT32 enumVisibility[2]; #pragma DATA_SECTION(enumCtrlIPTypeThree, "sect_str") extern UINT32 enumCtrlIPTypeThree[2]; #pragma DATA_SECTION(enumPhaseRotation, "sect_str") extern UINT32 enumPhaseRotation[2]; #pragma DATA_SECTION(enumG181OperationMode, "sect_str") extern UINT32 enumG181OperationMode[4]; #pragma DATA_SECTION(enumIDMTType, "sect_str") extern UINT32 enumIDMTType[2]; #pragma DATA_SECTION(enumAR2Mode, "sect_str") extern UINT32 enumAR2Mode[4]; #pragma DATA_SECTION(enumCBFailExtReset, "sect_str") extern UINT32 enumCBFailExtReset[5]; #pragma DATA_SECTION(enumLeadFollARMode, "sect_str") extern UINT32 enumLeadFollARMode[1]; #pragma DATA_SECTION(bfINPSOCFuncLink, "sect_str") extern UINT32 bfINPSOCFuncLink[4]; #pragma DATA_SECTION(enumCtrlIPTypeFour, "sect_str") extern UINT32 enumCtrlIPTypeFour[2]; #pragma DATA_SECTION(enumResetFaultRec, "sect_str") extern UINT32 enumResetFaultRec[2]; #pragma DATA_SECTION(enumDnpBaudRate, "sect_str") extern UINT32 enumDnpBaudRate[6]; #pragma DATA_SECTION(enumSboControlMode, "sect_str") extern UINT32 enumSboControlMode[2]; #pragma DATA_SECTION(enumReportChannelFailure, "sect_str") extern UINT32 enumReportChannelFailure[4]; #pragma DATA_SECTION(enumInDiffMode, "sect_str") extern UINT32 enumInDiffMode[2]; #pragma DATA_SECTION(enumControlInputStateString, "sect_str") extern UINT32 enumControlInputStateString[3]; #pragma DATA_SECTION(enumIDMTCurve, "sect_str") extern UINT32 enumIDMTCurve[10]; #pragma DATA_SECTION(enumPOCCurve, "sect_str") extern UINT32 enumPOCCurve[14]; #pragma DATA_SECTION(enumARTest, "sect_str") extern UINT32 enumARTest[5]; #pragma DATA_SECTION(enumDistanceStatusmho, "sect_str") extern UINT32 enumDistanceStatusmho[1]; #pragma DATA_SECTION(enumMode, "sect_str") extern UINT32 enumMode[1]; #pragma DATA_SECTION(enumThermalOverload, "sect_str") extern UINT32 enumThermalOverload[3]; #pragma DATA_SECTION(enumDistanceStatus, "sect_str") extern UINT32 enumDistanceStatus[3]; #pragma DATA_SECTION(enumPSBZone, "sect_str") extern UINT32 enumPSBZone[3]; #pragma DATA_SECTION(enumSecurPortId, "sect_str") extern UINT32 enumSecurPortId[7]; #pragma DATA_SECTION(enumDeadHealthy, "sect_str") extern UINT32 enumDeadHealthy[2]; #pragma DATA_SECTION(enumLocalTime, "sect_str") extern UINT32 enumLocalTime[3]; #pragma DATA_SECTION(enumDataXferDomain, "sect_str") extern UINT32 enumDataXferDomain[7]; #pragma DATA_SECTION(enumDataXferSubDomainDnpSettings, "sect_str") extern UINT32 enumDataXferSubDomainDnpSettings[2]; #pragma DATA_SECTION(enumDNPInterfaceScaling, "sect_str") extern UINT32 enumDNPInterfaceScaling[3]; #pragma DATA_SECTION(enumVT2Allocation, "sect_str") extern UINT32 enumVT2Allocation[2]; #pragma DATA_SECTION(enumCBControl, "sect_str") extern UINT32 enumCBControl[3]; #pragma DATA_SECTION(enumTimeSourceIndi, "sect_str") extern UINT32 enumTimeSourceIndi[4]; #pragma DATA_SECTION(enumStartedElements3, "sect_str") extern UINT32 enumStartedElements3[7]; #pragma DATA_SECTION(enumDefaultDisplay, "sect_str") extern UINT32 enumDefaultDisplay[9]; #pragma DATA_SECTION(enumRcurPortIECMode, "sect_str") extern UINT32 enumRcurPortIECMode[2]; #pragma DATA_SECTION(enumComTestContact, "sect_str") extern UINT32 enumComTestContact[3]; #pragma DATA_SECTION(enumTransStartStatus, "sect_str") extern UINT32 enumTransStartStatus[1]; #pragma DATA_SECTION(enumDisabledIntExt, "sect_str") extern UINT32 enumDisabledIntExt[3]; #pragma DATA_SECTION(enumDistFnLink, "sect_str") extern UINT32 enumDistFnLink[2]; #pragma DATA_SECTION(enumDistEarthMode, "sect_str") extern UINT32 enumDistEarthMode[2]; #pragma DATA_SECTION(enumCheckSyncBlocking, "sect_str") extern UINT32 enumCheckSyncBlocking[8]; #pragma DATA_SECTION(enumPitISelection, "sect_str") extern UINT32 enumPitISelection[2]; #pragma DATA_SECTION(enumLinkTestReport, "sect_str") extern UINT32 enumLinkTestReport[3]; #pragma DATA_SECTION(enumIEDModBehStatus, "sect_str") extern UINT32 enumIEDModBehStatus[5]; #pragma DATA_SECTION(enumTestMode, "sect_str") extern UINT32 enumTestMode[3]; #pragma DATA_SECTION(enumResetStat, "sect_str") extern UINT32 enumResetStat[1]; #pragma DATA_SECTION(enumTrippedElements3, "sect_str") extern UINT32 enumTrippedElements3[6]; #pragma DATA_SECTION(enumAllowBar2and3Autoreclose, "sect_str") extern UINT32 enumAllowBar2and3Autoreclose[3]; #pragma DATA_SECTION(enumCurrentStarters, "sect_str") extern UINT32 enumCurrentStarters[3]; #pragma DATA_SECTION(StatusLink, "sect_str") extern UINT32 StatusLink[3]; #pragma DATA_SECTION(enumMediaInUse, "sect_str") extern UINT32 enumMediaInUse[2]; #pragma DATA_SECTION(enumTimeZone, "sect_str") extern UINT32 enumTimeZone[2]; #pragma DATA_SECTION(enumForwardOffsetReverse, "sect_str") extern UINT32 enumForwardOffsetReverse[3]; #pragma DATA_SECTION(enumSignalAddress3p, "sect_str") extern UINT32 enumSignalAddress3p[97]; #pragma DATA_SECTION(enumUnderCurrent, "sect_str") extern UINT32 enumUnderCurrent[1]; #pragma DATA_SECTION(enumCBNUM, "sect_str") extern UINT32 enumCBNUM[1]; #pragma DATA_SECTION(enumStartedElements2, "sect_str") extern UINT32 enumStartedElements2[32]; #pragma DATA_SECTION(enumVDEWFUN, "sect_str") extern UINT32 enumVDEWFUN[2]; #pragma DATA_SECTION(enumVTSBlocking, "sect_str") extern UINT32 enumVTSBlocking[2]; #pragma DATA_SECTION(enumMuxChannelsTransmit, "sect_str") extern UINT32 enumMuxChannelsTransmit[13]; #pragma DATA_SECTION(enumINFuncLink, "sect_str") extern UINT32 enumINFuncLink[6]; #pragma DATA_SECTION(enumChannelEnable, "sect_str") extern UINT32 enumChannelEnable[6]; #pragma DATA_SECTION(enumVtsResetMode, "sect_str") extern UINT32 enumVtsResetMode[2]; #pragma DATA_SECTION(enumPSMode, "sect_str") extern UINT32 enumPSMode[2]; #pragma DATA_SECTION(enumCtrlIPSignalType, "sect_str") extern UINT32 enumCtrlIPSignalType[2]; #pragma DATA_SECTION(enumMaint, "sect_str") extern UINT32 enumMaint[24]; #pragma DATA_SECTION(enumUniversalOpto, "sect_str") extern UINT32 enumUniversalOpto[5]; #pragma DATA_SECTION(enumPhaseMeas, "sect_str") extern UINT32 enumPhaseMeas[6]; #pragma DATA_SECTION(enumSNTPStatus, "sect_str") extern UINT32 enumSNTPStatus[7]; #pragma DATA_SECTION(enumPhCompResetLockout, "sect_str") extern UINT32 enumPhCompResetLockout[1]; #pragma DATA_SECTION(enumProtCommsMode, "sect_str") extern UINT32 enumProtCommsMode[2]; #pragma DATA_SECTION(enumGOOSEEnabled, "sect_str") extern UINT32 enumGOOSEEnabled[8]; #pragma DATA_SECTION(enumLoopBackMode, "sect_str") extern UINT32 enumLoopBackMode[3]; #pragma DATA_SECTION(enumIDMTCurveG43, "sect_str") extern UINT32 enumIDMTCurveG43[1]; #pragma DATA_SECTION(enumFaultLocation, "sect_str") extern UINT32 enumFaultLocation[3]; #pragma DATA_SECTION(enumTransformerCompensation, "sect_str") extern UINT32 enumTransformerCompensation[3]; #pragma DATA_SECTION(enumRelayOutput, "sect_str") extern UINT32 enumRelayOutput[1]; #pragma DATA_SECTION(enumEncryptProtocol, "sect_str") extern UINT32 enumEncryptProtocol[1]; #pragma DATA_SECTION(enumVoltageCurveSelection, "sect_str") extern UINT32 enumVoltageCurveSelection[3]; #pragma DATA_SECTION(enumDFDT_Direction, "sect_str") extern UINT32 enumDFDT_Direction[3]; #pragma DATA_SECTION(enumVNINInput, "sect_str") extern UINT32 enumVNINInput[2]; #pragma DATA_SECTION(enumDTStartbyProtection, "sect_str") extern UINT32 enumDTStartbyProtection[3]; #pragma DATA_SECTION(enumEnableCLP, "sect_str") extern UINT32 enumEnableCLP[1]; #pragma DATA_SECTION(enumFunctionKeyStatus, "sect_str") extern UINT32 enumFunctionKeyStatus[3]; #pragma DATA_SECTION(enumMeasuringMode, "sect_str") extern UINT32 enumMeasuringMode[4]; #pragma DATA_SECTION(enumTrippedElements2, "sect_str") extern UINT32 enumTrippedElements2[32]; #pragma DATA_SECTION(enumProtocol, "sect_str") extern UINT32 enumProtocol[4]; #pragma DATA_SECTION(enumCTSStatus, "sect_str") extern UINT32 enumCTSStatus[4]; #pragma DATA_SECTION(enumInvisibleVisible, "sect_str") extern UINT32 enumInvisibleVisible[2]; #pragma DATA_SECTION(enumCBFailReset, "sect_str") extern UINT32 enumCBFailReset[3]; #pragma DATA_SECTION(enumFirstToLast, "sect_str") extern UINT32 enumFirstToLast[5]; #pragma DATA_SECTION(enumNoYes, "sect_str") extern UINT32 enumNoYes[2]; #pragma DATA_SECTION(enumDataXferSubDomainPslConfig, "sect_str") extern UINT32 enumDataXferSubDomainPslConfig[4]; #pragma DATA_SECTION(enumDistTrip, "sect_str") extern UINT32 enumDistTrip[4]; #pragma DATA_SECTION(enumLeaderSelectBy, "sect_str") extern UINT32 enumLeaderSelectBy[1]; #pragma DATA_SECTION(enumIDMTCurveG152, "sect_str") extern UINT32 enumIDMTCurveG152[16]; #pragma DATA_SECTION(enumARStatus, "sect_str") extern UINT32 enumARStatus[2]; #pragma DATA_SECTION(enumAnaChannel, "sect_str") extern UINT32 enumAnaChannel[21]; #pragma DATA_SECTION(enumDNPConfigReportType, "sect_str") extern UINT32 enumDNPConfigReportType[2]; typedef struct{ const char UserName[(16) + 1]; UINT8 *PasswordHash; UINT8 *PasswordSalt; INT32 Role; }RBAC_USER; extern RBAC_USER dev_Users[(4)]; BOOLEAN devRbac_Operational(void); SECURITY_AUTH_RESULT devRbac_Authentication(const char *pUserName, const char *pPassword, PLAT_INTERFACE Interface, INT32* pRole); void devRbac_Logout(const char *pUserName, PLAT_INTERFACE Interface); void devRbac_Config(void* pConfigData); BOOLEAN devRbac_UserIsLocked(const char* pUserName); void devRbac_ProcessUserLock(const char* pUserName, BOOLEAN AuthOK); void devRbac_UnlockUsers(); BOOLEAN svrRbac_Operational(void); SECURITY_AUTH_RESULT svrRbac_Authentication(const char *pUserName, const char *pPassword, PLAT_INTERFACE Interface, INT32* pRole); void svrRbac_Logout(const char *pUserName, PLAT_INTERFACE Interface); void svrRbac_Config(void* pConfigData); extern int pbkdf2_test_simple(); typedef enum SecCodeTypeTag { SEC_CODE_TYPE_ENCRYPT_KEY, SEC_CODE_TYPE_SECURITY_CODE } SEC_CODE_TYPE; static SECURITY_CHAN_PW_ACCESS* PwAccessData[PLAT_INTERFACE_MAX_ENUM] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static SECURITY_EVENT_DATA SecurityEvtData[SECUR_EVT_MAX_ENUM] = { { (5029), (5069), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5070), SECURITY_EVT_DATA_NUM, 0 }, { (5030), (5069), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5070), SECURITY_EVT_DATA_NUM, 0 }, { (5031), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5070), SECURITY_EVT_DATA_NUM, 0 }, { (5032), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5070), SECURITY_EVT_DATA_NUM, 0 }, { (5033), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5070), SECURITY_EVT_DATA_NUM, 0 }, { (5034), (5069), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5035), (5069), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5036), (5069), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5037), (5069), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5038), (5069), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5039), (5069), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5040), (5069), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5041), 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5042), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5073), SECURITY_EVT_DATA_INS, enumSecurPortId }, { (5043), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5073), SECURITY_EVT_DATA_INS, enumSecurPortId }, { (5044), 0, SECURITY_EVT_DATA_NONE, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5045), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5074), SECURITY_EVT_DATA_NUM, 0 }, { (5046), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5047), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5048), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5049), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5075), SECURITY_EVT_DATA_NUM, 0 }, { (5050), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5074), SECURITY_EVT_DATA_NUM, 0 }, { (5051), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, (5070), SECURITY_EVT_DATA_NUM, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5052), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5074), SECURITY_EVT_DATA_NUM, 0 }, { (5053), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5054), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5055), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5056), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5075), SECURITY_EVT_DATA_NUM, 0 }, { (5057), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5074), SECURITY_EVT_DATA_NUM, 0 }, { (5058), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5059), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5076), SECURITY_EVT_DATA_NUM, 0 }, { (5061), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5074), SECURITY_EVT_DATA_NUM, 0 }, { (5060), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5074), SECURITY_EVT_DATA_NUM, 0 }, { (5061), 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0, (5072), SECURITY_EVT_DATA_NUM, 0 }, { (5060), 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0, (5072), SECURITY_EVT_DATA_NUM, 0 }, { (5062), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5063), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5064), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5074) , SECURITY_EVT_DATA_NUM, 0 }, { (5065), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, (5070), SECURITY_EVT_DATA_NUM, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5066), (5071), SECURITY_EVT_DATA_INS, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, (5075), SECURITY_EVT_DATA_NUM, 0 }, { (5067), 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 }, { (5068), 0, SECURITY_EVT_DATA_NONE, enumSecurInterface, 0, SECURITY_EVT_DATA_NONE, 0, 0, SECURITY_EVT_DATA_NONE, 0 } }; static SECURITY_INTERFACE PlatToSecurityInterface[PLAT_INTERFACE_MAX_ENUM] = { SECURITY_IFACE_UI, SECURITY_IFACE_FP, SECURITY_IFACE_RP1, SECURITY_IFACE_TNL, SECURITY_IFACE_RP1, SECURITY_IFACE_RP1, SECURITY_IFACE_RP1, SECURITY_IFACE_IEC, SECURITY_IFACE_RP2, SECURITY_IFACE_FP, SECURITY_IFACE_RP1, SECURITY_IFACE_DNPOE }; static const UINT32 BYPASS_INTERFACE_MAP[] = { 0, 1, 3, 0xFFC, 0xFFF, }; static char security_TmpBuff[35]; static const char *StateName[3] = { "IDLE", "RETRY", "BLOCKING" }; UINT16 security_Features = (2); static SECURITY_RECOVERY_PW_DATA RecoveryPwData; static BOOLEAN security_InterfaceBlocked[PLAT_INTERFACE_MAX_ENUM] = { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }; static const RBAC_ROLE security_Roles[] = { {"VIEWER", 0, PLAT_PASSWORD_LEVEL_0, 4 }, {"OPERATOR", 1, PLAT_PASSWORD_LEVEL_1, 1 }, {"ENGINEER", 2, PLAT_PASSWORD_LEVEL_2, 1 }, {"ADMINISTRATOR", 3, PLAT_PASSWORD_LEVEL_3, 1 }, }; static void security_ProcessPwMatch(SECURITY_CHAN_PW_ACCESS *pPwAccessData); static void security_EnterBlockingState(PLAT_INTERFACE Interface, PLAT_PASSWORD_LEVEL CurrentPwLevel, SECURITY_CHAN_PW_ACCESS *pPwAccessData); static void security_IedSecurityCodeTimeout(UNSIGNED Id); static void security_GenerateCode(char* Code, SEC_CODE_TYPE Type); static void security_GenerateRecoveryPw(SECURITY_RECOVERY_PW_DATA* pRecoveryPwData); static int security_NercCompliantPW_Test(); static BOOLEAN securtiy_InterfaceIsBypass(PLAT_INTERFACE Interface); static BOOLEAN security_SessionLimited(INT32 Role); PLAT_PASSWORD_LEVEL security_GetPasswordFallbackLevel(PLAT_INTERFACE Interface) { if (securtiy_InterfaceIsBypass(Interface)) { return (PLAT_PASSWORD_LEVEL_3); } else { return (PLAT_PASSWORD_LEVEL_0); } } SECURITY_INTERFACE security_PlatToSecurInterface(PLAT_INTERFACE Interface) { return PlatToSecurityInterface[Interface]; } BOOLEAN security_PortUsedByPlatInterface(PLAT_INTERFACE Interface, SECURITY_PORT_ID *pPort) { BOOLEAN Result = TRUE; switch(Interface) { case PLAT_UI : Result = FALSE; break; case PLAT_FRONT_COURIER : *pPort = SECURITY_PORT_FP; break; case PLAT_REAR_COURIER : case PLAT_CS_103 : case PLAT_REAR_CS103_GS : case PLAT_MODBUS : *pPort = SECURITY_PORT_RP1; break; case PLAT_DNP : Result = FALSE; break; case PLAT_DNPOE : Result = FALSE; break; case PLAT_LPM_COURIER : Result = FALSE; break; case PLAT_REAR_COURIER2 : *pPort = SECURITY_PORT_RP2; break; case PLAT_COPRO_COURIER : Result = FALSE; break; case PLAT_ECI : Result = FALSE; break; case PLAT_INTERFACE_MAX_ENUM : default : Result = FALSE; break; } return Result; } PLAT_PASSWORD_LEVEL security_GetCurrentPWLevel(PLAT_INTERFACE Interface) { PLAT_PASSWORD_LEVEL FallbackLevel; PLAT_PASSWORD_LEVEL InterfaceLevel = PLAT_PASSWORD_LEVEL_0; FallbackLevel = security_GetPasswordFallbackLevel(PLAT_REAR_COURIER2); if ( (Interface < PLAT_INTERFACE_MAX_ENUM) && (0 != PwAccessData[Interface]) && (0 != PwAccessData[Interface]->GetEnteredPwLevel) ) { InterfaceLevel = PwAccessData[Interface]->GetEnteredPwLevel(); } else { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x000A0000) | (((PLERR_ERROR) 0x0000FFFF) & (1047))) ); } return ( (PLAT_PASSWORD_LEVEL) (((UINT8) FallbackLevel < (UINT8) InterfaceLevel ? (UINT8) InterfaceLevel : (UINT8) FallbackLevel)) ); } void security_InitSecurity(void) { UINT32 Index; char SerialNo[(16) + 1]; STATUS Status; DBM_PARAMETERS DbmParameters; Status = TMS_Create_Timer(&RecoveryPwData.IedSecCodeTimer, "sCod_Tmr", security_IedSecurityCodeTimeout, (UNSIGNED)0, (UNSIGNED) ((UNSIGNED)(72 * ((UNSIGNED)(60 * ((UNSIGNED)(6000)))))), (UNSIGNED) 0, (OPTION)4); if((STATUS)0 != Status) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x00010000) | (UINT32)-Status)); } security_InvalidateRecoveryPW(); dbm_GetSerialNo(SerialNo, sizeof(SerialNo)); sprintf(security_TmpBuff, "Ser No:'%s'\n", SerialNo); SerialPrint(security_TmpBuff); RecoveryPwData.PseudoSerialNo[0] = SerialNo[0]; for (Index = 1; Index < ((8) - 1); Index++) { RecoveryPwData.PseudoSerialNo[Index] = (SerialNo[Index] ^ SerialNo[Index - 1]); RecoveryPwData.PseudoSerialNo[Index] %= 10; RecoveryPwData.PseudoSerialNo[Index] += '0'; } RecoveryPwData.PseudoSerialNo[(8) - 1] = SerialNo[(7 - 1)]; RecoveryPwData.PseudoSerialNo[(8)] = '\0'; sprintf(security_TmpBuff, "Pseudo No:'%s'\n", RecoveryPwData.PseudoSerialNo); SerialPrint(security_TmpBuff); { int line = security_NercCompliantPW_Test(); if (line) { sprintf(security_TmpBuff, "NercCompli fail @ %d\n", line); SerialPrint(security_TmpBuff); } } SerialPrint("start pbkdf2 test...\n"); if (pbkdf2_test_simple()) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)1132)); } SerialPrint("Done pbkdf2 test\n"); dbm_GetParameters(&DbmParameters); devRbac_Config(&DbmParameters); svrRbac_Config(&DbmParameters); SerialPrint("Done security_Init\n"); } void security_InvalidateRecoveryPW(void) { STATUS Status; RecoveryPwData.CodeHasBeenRead = FALSE; RecoveryPwData.RecoveryPwValid = FALSE; SerialPrint("Clr Recov PW\n"); Status = TMS_Control_Timer(&RecoveryPwData.IedSecCodeTimer, (OPTION)4); if((STATUS)0 != Status) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x00030000) | (UINT32)-Status)); } } void security_GenerateEncryptionKey(PLAT_INTERFACE Interface) { if ((Interface < PLAT_INTERFACE_MAX_ENUM) && (0 != PwAccessData[Interface])) { SECURITY_CHAN_PW_ACCESS *pPwAccessData; pPwAccessData = PwAccessData[Interface]; security_GenerateCode( &(pPwAccessData->EncryptionKey[0]), SEC_CODE_TYPE_ENCRYPT_KEY); pPwAccessData->EncryptionKey[((16))] = '\0'; pPwAccessData->KeyValid = TRUE; } else { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x000A0000) | (((PLERR_ERROR) 0x0000FFFF) & (1200))) ); } } BOOLEAN security_ReadEncryptionKey(PLAT_INTERFACE Interface, char* pCode) { BOOLEAN Result = FALSE; if ((Interface < PLAT_INTERFACE_MAX_ENUM) && (0 != PwAccessData[Interface])) { SECURITY_CHAN_PW_ACCESS *pPwAccessData; pPwAccessData = PwAccessData[Interface]; if (TRUE == pPwAccessData->KeyValid) { (void)memcpy(pCode, &pPwAccessData->EncryptionKey[0], (size_t)((16)) ); pCode[((16))] = '\0'; Result = TRUE; sprintf(security_TmpBuff, "Read Key: %s (i/f %d)\n", pCode, Interface); SerialPrint(security_TmpBuff); } else { sprintf(security_TmpBuff, "Read invalid Key (i/f %d)\n", Interface); SerialPrint(security_TmpBuff); } } else { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x000A0000) | (((PLERR_ERROR) 0x0000FFFF) & (1244))) ); } return Result; } void security_InvalidateEncryptionKey(PLAT_INTERFACE Interface) { if ((Interface < PLAT_INTERFACE_MAX_ENUM) && (0 != PwAccessData[Interface])) { SECURITY_CHAN_PW_ACCESS *pPwAccessData; pPwAccessData = PwAccessData[Interface]; pPwAccessData->KeyValid = FALSE; } else { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x000A0000) | (((PLERR_ERROR) 0x0000FFFF) & (1270))) ); } } void security_ReadIedSecurityCode(char* pCode) { UINT32 Index; STATUS Status; if(FALSE == RecoveryPwData.RecoveryPwValid) { security_GenerateCode(&RecoveryPwData.IedSecurityCode[0], SEC_CODE_TYPE_SECURITY_CODE); RecoveryPwData.CodeHasBeenRead = FALSE; security_GenerateRecoveryPw(&RecoveryPwData); RecoveryPwData.RecoveryPwValid = TRUE; } if (FALSE == RecoveryPwData.CodeHasBeenRead) { Status = TMS_Control_Timer(&RecoveryPwData.IedSecCodeTimer, (OPTION)4); if((STATUS)0 != Status) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x00030000) | (UINT32)-Status)); } else { T_INTERN_ABS_DATE TimeTag; BOOLEAN ValidDate; Status = TMS_Reset_Timer(&RecoveryPwData.IedSecCodeTimer, security_IedSecurityCodeTimeout, (UNSIGNED) ((UNSIGNED)(72 * ((UNSIGNED)(60 * ((UNSIGNED)(6000)))))), (UNSIGNED)0, (OPTION)5); if((STATUS)0 != Status) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x00020000) | (UINT32)-Status)); } RecoveryPwData.CodeHasBeenRead = TRUE; Status = sdt_GetAbsoluteDate(&TimeTag, &ValidDate); ((void)0); log_LogSecurityEvent(SECUR_EVT_IED_SEC_CODE_READ, PLAT_UI, security_GetCurrentPWLevel(PLAT_UI), (UINT16)0, (UINT8)CS103_COT_M_LOCALOP, (UINT16)0, &TimeTag); } } for (Index=0; Index < (16); Index++) { pCode[Index] = RecoveryPwData.IedSecurityCode[Index]; } } BOOLEAN security_IedSecurityCodeHasBeenRead(void) { return (RecoveryPwData.CodeHasBeenRead); } SECURITY_CHAN_PW_ACCESS* security_GetPwAccessData(PLAT_INTERFACE Interface) { SECURITY_CHAN_PW_ACCESS *pPwAccessData; if (Interface < PLAT_INTERFACE_MAX_ENUM) { pPwAccessData = PwAccessData[Interface]; } else { pPwAccessData = 0; } return pPwAccessData; } SECURITY_EVENT_DATA* security_GetEventData(SECURITY_EVENT_VALUE SecurityEvtVal) { SECURITY_EVENT_DATA *pEvtData = 0; if (SecurityEvtVal < SECUR_EVT_MAX_ENUM) { pEvtData = &SecurityEvtData[SecurityEvtVal]; } return (pEvtData); } BOOLEAN security_ValidateRecoveryPW(const char* pUserName, const char *pPasswordAttempt) { BOOLEAN Result = FALSE; if ( (RecoveryPwData.RecoveryPwValid) && ((8) == (UINT32) strlen(pPasswordAttempt)) ) { if (( strncmp(pPasswordAttempt, RecoveryPwData.RecoveryPassword, (8)) == 0) && (strcmp(pUserName,"ADMINISTRATOR") ==0)) { Result = TRUE; SerialPrint("Recov PW OK\n"); } } return Result; } static void security_ProcessPwMatch(SECURITY_CHAN_PW_ACCESS *pPwAccessData) { if (SECURITY_PW_RETRY == pPwAccessData->PwState) { pPwAccessData->PwState = SECURITY_PW_IDLE; pPwAccessData->PwAttempts = 0; SerialPrint("PW enter IDLE\n"); } } static BOOLEAN security_InterfaceIsBlocked(SECURITY_CHAN_PW_ACCESS *pPwAccessData) { BOOLEAN Result; if (0 == pPwAccessData) { return FALSE; } if ( pPwAccessData->PwState == SECURITY_PW_BLOCKING) { T_INTERN_ABS_DATE Now; T_INTERN_ABS_DATE LockExipreDate; BOOLEAN DateIsValid; T_INTERN_REL_DATE LockPeriod; DBM_PARAMETERS DbmParameters; dbm_GetParameters(&DbmParameters); LockPeriod.sec = (UINT32)DbmParameters.pCS->PlatConfig.Security.PwAccessCfg.BlockingTimeOut; LockPeriod.ms = 0; if ((1) != sdt_GetAbsoluteDate(&Now, &DateIsValid)) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (1486))) ); } if ((1) != sdt_AbsPlusRel(&pPwAccessData->PwFirstFailDate, &LockPeriod, &LockExipreDate)) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (1491))) ); } if (sdt_AbsGreaterThanAbs(&Now,&LockExipreDate)) { pPwAccessData->PwAttempts = 0; pPwAccessData->PwState = SECURITY_PW_IDLE; Result = FALSE; } else { Result = TRUE; } } else { Result = FALSE; } return Result; } static SECURITY_PW_ENTRY_RESULT legacyAuth_Authentication(const char* pUser, const char *pPassword, PLAT_INTERFACE Interface) { DBM_PARAMETERS DbmParameters; PLAT_PASSWORD_LEVEL EnteredLevel; PLAT_PASSWORD_LEVEL PrevCurrentLevel; UINT8 *pLevel1Password; UINT8 *pLevel2Password; UINT8 *pLevel3Password; SECURITY_CHAN_PW_ACCESS *pPwAccessData; SECURITY_PW_ENTRY_RESULT Result; dbm_GetParameters(&DbmParameters); pLevel1Password = &DbmParameters.pCS->PlatConfig.Security.Level1Password[0]; pLevel2Password = &DbmParameters.pCS->PlatConfig.Security.Level2Password[0]; pLevel3Password = &DbmParameters.pCS->PlatConfig.Security.Level3Password[0]; if( (Interface >= PLAT_INTERFACE_MAX_ENUM) || (0 == PwAccessData[Interface]) ) { SerialPrint("Bad PW table\n"); plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x000A0000) | (((PLERR_ERROR) 0x0000FFFF) & (1546))) ); } pPwAccessData = PwAccessData[Interface]; if (security_InterfaceIsBlocked(pPwAccessData)) { Result = SECURITY_PW_ENTRY_BLOCKED; return Result; } PrevCurrentLevel = security_GetCurrentPWLevel(Interface); EnteredLevel = pPwAccessData->GetEnteredPwLevel(); if (SECURITY_PW_BLOCKING == pPwAccessData->PwState) { Result = SECURITY_PW_ENTRY_BLOCKED; log_LogSecurityEventMsf(SECUR_EVT_PW_ENTERED_WHILE_BLOCKED, Interface, PrevCurrentLevel, (UINT16)0); } else if (0 == security_ComparePassword(pPassword, pLevel3Password, "1ebeP540")) { if (EnteredLevel < PLAT_PASSWORD_LEVEL_3) { pPwAccessData->SetEnteredPwLevel(PLAT_PASSWORD_LEVEL_3); log_LogSecurityEventMsf(SECUR_EVT_PW_LEVEL_UNLOCKED, Interface, PrevCurrentLevel, (UINT16)PLAT_PASSWORD_LEVEL_3); } Result = SECURITY_PW_ENTRY_MATCH; security_ProcessPwMatch(pPwAccessData); } else if (0 == security_ComparePassword(pPassword, pLevel2Password, "e2f9P540")) { if (EnteredLevel < PLAT_PASSWORD_LEVEL_2) { pPwAccessData->SetEnteredPwLevel(PLAT_PASSWORD_LEVEL_2); log_LogSecurityEventMsf(SECUR_EVT_PW_LEVEL_UNLOCKED, Interface, PrevCurrentLevel, (UINT16)PLAT_PASSWORD_LEVEL_2); } Result = SECURITY_PW_ENTRY_MATCH; security_ProcessPwMatch(pPwAccessData); } else if (0 == security_ComparePassword(pPassword, pLevel1Password, "-f5fP540")) { if (EnteredLevel < PLAT_PASSWORD_LEVEL_1) { pPwAccessData->SetEnteredPwLevel(PLAT_PASSWORD_LEVEL_1); log_LogSecurityEventMsf(SECUR_EVT_PW_LEVEL_UNLOCKED, Interface, PrevCurrentLevel, (UINT16)PLAT_PASSWORD_LEVEL_1); } Result = SECURITY_PW_ENTRY_MATCH; security_ProcessPwMatch(pPwAccessData); } else { security_ProcessPwFailure(Interface); Result = SECURITY_PW_ENTRY_INCORRECT; } sprintf(security_TmpBuff, "PW st= %s (i/f %d)\n", StateName[pPwAccessData->PwState], (UINT32)Interface); SerialPrint(security_TmpBuff); return(Result); } static void security_EnterBlockingState(PLAT_INTERFACE Interface, PLAT_PASSWORD_LEVEL CurrentPwLevel, SECURITY_CHAN_PW_ACCESS *pPwAccessData) { pPwAccessData->PwState = SECURITY_PW_BLOCKING; SerialPrint("PW Enter BLOCK\n"); log_LogSecurityEventMsf(SECUR_EVT_PW_ENTRY_NOW_BLOCKED, Interface, CurrentPwLevel, (UINT16)0); } void security_ProcessPwFailure(PLAT_INTERFACE Interface) { DBM_PARAMETERS DbmParameters; SECURITY_CHAN_PW_ACCESS *pPwAccessData; PLAT_CHAN_PW_ACCESS_CFG *pPwAccessCfg; PLAT_PASSWORD_LEVEL CurrentPwLevel; BOOLEAN ValidDate; pPwAccessData = PwAccessData[Interface]; dbm_GetParameters(&DbmParameters); pPwAccessCfg = &DbmParameters.pCS->PlatConfig.Security.PwAccessCfg; CurrentPwLevel = security_GetCurrentPWLevel(Interface); log_LogSecurityEventMsf(SECUR_EVT_INVALID_PW_ENTERED, Interface, CurrentPwLevel, (UINT16)0); sprintf(security_TmpBuff, "PW att %d (%d attempts)\n", (pPwAccessData->PwAttempts +1), pPwAccessCfg->AttemptsLimit); SerialPrint(security_TmpBuff); if (pPwAccessCfg->AttemptsLimit != 0) { switch (pPwAccessData->PwState) { case SECURITY_PW_IDLE: pPwAccessData->PwAttempts = (UINT16) 1; if ((1) != sdt_GetAbsoluteDate(&pPwAccessData->PwFirstFailDate, &ValidDate)) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x00060000) | 1725)); } if (1 == pPwAccessCfg->AttemptsLimit) { security_EnterBlockingState(Interface, CurrentPwLevel, pPwAccessData); } else { pPwAccessData->PwState = SECURITY_PW_RETRY; SerialPrint("PW enter RETRY\n"); } break; case SECURITY_PW_RETRY: pPwAccessData->PwAttempts++; if (pPwAccessData->PwAttempts >= pPwAccessCfg->AttemptsLimit) { security_EnterBlockingState(Interface, CurrentPwLevel, pPwAccessData); } break; case SECURITY_PW_BLOCKING: log_LogSecurityEventMsf(SECUR_EVT_PW_ENTERED_WHILE_BLOCKED, Interface, CurrentPwLevel, (UINT16)0); SerialPrint("PW Ent BLK\n"); break; default: break; } } } UINT16 security_GetAttemptsRemaining(PLAT_INTERFACE Interface) { DBM_PARAMETERS DbmParameters; SECURITY_CHAN_PW_ACCESS *pPwAccessData; PLAT_CHAN_PW_ACCESS_CFG *pPwAccessCfg; UINT16 AttemptsRemaining = 0; dbm_GetParameters(&DbmParameters); pPwAccessData = PwAccessData[Interface]; pPwAccessCfg = &DbmParameters.pCS->PlatConfig.Security.PwAccessCfg; AttemptsRemaining = pPwAccessCfg->AttemptsLimit - pPwAccessData->PwAttempts; return AttemptsRemaining; } UINT16 security_GetBlockedTimeRemaining(PLAT_INTERFACE Interface) { DBM_PARAMETERS DbmParameters; SECURITY_CHAN_PW_ACCESS *pPwAccessData; PLAT_CHAN_PW_ACCESS_CFG *pPwAccessCfg; UINT16 TimeRemaining = 0; T_INTERN_ABS_DATE LockExipreDate; T_INTERN_ABS_DATE Now; BOOLEAN DateIsValid; T_INTERN_REL_DATE LockPeriod; T_INTERN_REL_DATE LockRemain; dbm_GetParameters(&DbmParameters); pPwAccessData = PwAccessData[Interface]; if (security_InterfaceIsBlocked(pPwAccessData)) { pPwAccessCfg = &DbmParameters.pCS->PlatConfig.Security.PwAccessCfg; LockPeriod.sec = (UINT32)pPwAccessCfg->BlockingTimeOut; LockPeriod.ms = 0; if ((1) != sdt_GetAbsoluteDate(&Now, &DateIsValid)) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (1846))) ); } if ((1) != sdt_AbsPlusRel(&pPwAccessData->PwFirstFailDate, &LockPeriod, &LockExipreDate)) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (1851))) ); } if ((1) != sdt_AbsMinusAbs(&LockExipreDate, &Now, &LockRemain)) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (1857))) ); } TimeRemaining = (UINT16)LockRemain.sec; sprintf(security_TmpBuff, "Block remain %d seconds\n", TimeRemaining); SerialPrint(security_TmpBuff); } return TimeRemaining; } static BOOLEAN security_strstrn(const char* pString, const char *pSubString, size_t count, BOOLEAN caseSensitive) { char pSubCopy[((16)) + 1]; char pStringCopy[((16)) + 1]; char pSubSection[((16)) + 1]; BOOLEAN found; int i; if (!(pString && pSubString && count <= strlen(pString) && count <= strlen(pSubString))) { return FALSE; } found = FALSE; if (strlen(pString) > ((16)) || strlen(pSubString) > ((16))) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (1899))) ); } if (!caseSensitive) { for(i = 0; pSubString[i]; i++){ pSubCopy[i] = tolower(pSubString[i]); } pSubCopy[i] = 0; for(i = 0; pString[i]; i++){ pStringCopy[i] = tolower(pString[i]); } pStringCopy[i] = 0; } else { strcpy(pStringCopy, pString); strcpy(pSubCopy, pSubString); } for (i = 0; i + count <= strlen(pSubCopy); i++) { strncpy(pSubSection, pSubCopy + i, count); pSubSection[count] = 0; if (strstr(pStringCopy, pSubSection)) { found = TRUE; break; } } return found; } BOOLEAN security_NercCompliantPW(const char *pUsername, const char *pPassword) { UINT8 Length; UINT8 Index = 0; UINT8 NercFlags = (UINT8)0; if (0 == pUsername || 0 == pPassword) { return FALSE; } Length = (UINT8) strlen(pPassword); if ((Length < ((UINT8)8)) || (Length > ((UINT8)(16)))) { return FALSE; } while (Index < Length) { if ( (pPassword[Index] >= 'A') && (pPassword[Index] <= 'Z')) { NercFlags = NercFlags | 1; } else if ( (pPassword[Index] >= 'a') && (pPassword[Index] <= 'z')) { NercFlags = NercFlags | 2; } else if ( (pPassword[Index] >= '0') && (pPassword[Index] <= '9')) { NercFlags = NercFlags | 4; } else if ( ((pPassword[Index] >= '!') && (pPassword[Index] <= '/')) || ((pPassword[Index] >= ':') && (pPassword[Index] <= '@')) || ((pPassword[Index] >= '[') && (pPassword[Index] <= 96)) ) { NercFlags = NercFlags | 8; } Index++; } if ((1 | 2 | 4 | 8) != NercFlags) { return FALSE; } if (security_strstrn(pPassword, pUsername, 3, FALSE)) { return FALSE; } return TRUE; } static int security_NercCompliantPW_Test() { if (security_NercCompliantPW("ADMINISTRATOR", "passwod")) return 2009; if (security_NercCompliantPW("ADMINISTRATOR", "password123456789")) return 2013; if (security_NercCompliantPW("ADMINISTRATOR", "password12345678")) return 2017; if (security_NercCompliantPW("ADMINISTRATOR", "passWord12345678")) return 2021; if (security_NercCompliantPW("ADMINISTRATOR", "ADMsWord_2345678")) return 2025; if (security_NercCompliantPW("ADMINISTRATOR", "TORsWord_2345678")) return 2029; if (security_NercCompliantPW("ADMINISTRATOR", "nissWord_2345678")) return 2033; if (!security_NercCompliantPW("ADMINISTRATOR", "Wq1#12345")) return 2037; return 0; } void security_SetPassword(unsigned int UserIndex, const char *pPassword) { unsigned char PasswordHash[16]; UINT8 *pSalt; UINT8 *pPasswordSetting ; if (0 == UserIndex || (UserIndex >=(4) ) || (0 == pPassword)) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (2058))) ); } pSalt = dev_Users[UserIndex].PasswordSalt; pPasswordSetting = dev_Users[UserIndex].PasswordHash; PKCS5_PBKDF2_HMAC((unsigned char *)pPassword, strlen(pPassword), (unsigned char *)pSalt, strlen((char*)pSalt), 100, 16, PasswordHash); (void)memcpy(pPasswordSetting, PasswordHash, (size_t)16); } void security_Decrypt(char* pPassword, const char* pKey) { UINT32 i; UINT32 sum = 0xC6EF3720; UINT32 delta = 0x9E3779B9; UINT32 k0, k1, k2, k3; UINT32 v0, v1; sprintf(security_TmpBuff, "Decrypt i/p '%s'\n", pPassword); SerialPrint(security_TmpBuff); pack_string_R2L(&v0, &pPassword[0], 4); pack_string_R2L(&v1, &pPassword[4], 4); pack_string_R2L(&k0, &pKey[0], 4); pack_string_R2L(&k1, &pKey[4], 4); pack_string_R2L(&k2, &pKey[8], 4); pack_string_R2L(&k3, &pKey[12], 4); for (i = 0; i < 32; i++) { v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); sum -= delta; } unpack_string_R2L( &pPassword[0], &v0, 4); unpack_string_R2L( &pPassword[4], &v1, 4); sprintf(security_TmpBuff, "Decrypt o/p '%s'\n", pPassword); SerialPrint(security_TmpBuff); } void security_RegisterPwAccess(PLAT_INTERFACE Interface, SECURITY_CHAN_PW_ACCESS* pPwAccessData, CHAR *pTmrName) { sprintf(security_TmpBuff, "Reg %s Tmr (i/f %d)\n", pTmrName, Interface); SerialPrint(security_TmpBuff); if (12 <= (UINT32)Interface ) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x000A0000) | (((PLERR_ERROR) 0x0000FFFF) & (2139))) ); } else if ( (0 == pPwAccessData->SetEnteredPwLevel) || (0 == pPwAccessData->GetEnteredPwLevel) ) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (UINT32)(0x000B0000) | (((PLERR_ERROR) 0x0000FFFF) & (2146))) ); } PwAccessData[Interface] = pPwAccessData; pPwAccessData->PwAttempts = 0; pPwAccessData->PwState = SECURITY_PW_IDLE; pPwAccessData->SetEnteredPwLevel(PLAT_PASSWORD_LEVEL_0); pPwAccessData->KeyValid = FALSE; } static void security_IedSecurityCodeTimeout(UNSIGNED Id) { T_INTERN_ABS_DATE TimeTag; BOOLEAN ValidDate; STATUS TimeDateStatus; (void) Id; RecoveryPwData.CodeHasBeenRead = FALSE; RecoveryPwData.RecoveryPwValid = FALSE; TimeDateStatus = sdt_GetAbsoluteDate(&TimeTag, &ValidDate); ((void)0); log_LogSecurityHISREvent(SECUR_EVT_IED_SEC_CODE_TMR_EXPIRED, PLAT_UI, (PLAT_PASSWORD_LEVEL)0, (UINT16)0, (UINT8)CS103_COT_M_LOCALOP, (UINT16)0, &TimeTag); } static void security_GenerateCode(char* Code, SEC_CODE_TYPE Type) { UINT32 Index; T_INTERN_ABS_DATE Time; T_GREG_DATE Gtime; BOOLEAN Valid; UINT32 Seed; char Divisor; char Offset; (void) sdt_GetAbsoluteDate (&Time, &Valid); (void) sdt_IntToGreg(&Time, &Gtime); Seed = (Gtime.ms + 1) * (Gtime.sec + 1); srand((unsigned)(Seed * (UINT32)rand())); if (SEC_CODE_TYPE_SECURITY_CODE == Type) { Divisor = 26; Offset = 'A'; } else { Divisor = 90; Offset = '!'; } if (Type == SEC_CODE_TYPE_ENCRYPT_KEY) { SerialPrint("Crypt Key:"); } else { SerialPrint("Secur Code:"); } for (Index=0; Index < (16); Index++) { Code[Index] = rand(); Code[Index] %= Divisor; Code[Index] += Offset; sprintf(security_TmpBuff, "%c", Code[Index]); SerialPrint(security_TmpBuff); } SerialPrint("\n"); } static void security_GenerateRecoveryPw(SECURITY_RECOVERY_PW_DATA* pRecoveryPwData) { UINT16 Index; UINT8 NextPasswdChar; UINT8 NextPasswdCharModifier; BOOLEAN ChangeSign; UINT32 Junk; char *pSerialNo; char TempChar; char pEncoder[(8) + 1]; ChangeSign = TRUE; for (Index = 0; Index < (16); Index +=2) { TempChar = (pRecoveryPwData->IedSecurityCode[Index] + pRecoveryPwData->IedSecurityCode[Index + 1]); TempChar %= 26; TempChar += 'A'; pEncoder[Index/2] = TempChar; } pEncoder[(8)] = '\0'; sprintf(security_TmpBuff, "Encoder:'%s'\n", &pEncoder[0]); SerialPrint(security_TmpBuff); pSerialNo = &pRecoveryPwData->PseudoSerialNo[0]; pRecoveryPwData->RecoveryPassword[(8)] = '\0'; for (Index = 0; Index < (8); Index++) { NextPasswdChar = (pSerialNo[Index] << Index) ^ (pSerialNo[6] + pSerialNo[7]); NextPasswdCharModifier = pEncoder[Index] * pSerialNo[8 - Index]; if (ChangeSign == TRUE) { NextPasswdCharModifier = -NextPasswdCharModifier; } NextPasswdChar += (NextPasswdCharModifier - pRecoveryPwData->RecoveryPassword[(8) - Index]); Junk = ((UINT32) NextPasswdChar) & 0x000000FF; NextPasswdChar = (UINT8) Junk; NextPasswdChar %= 26; NextPasswdChar += 'A'; pRecoveryPwData->RecoveryPassword[7 - Index] = NextPasswdChar; ChangeSign = !ChangeSign; } sprintf(security_TmpBuff, "Recov PW:'%s'\n", &pRecoveryPwData->RecoveryPassword[0]); SerialPrint(security_TmpBuff); } BOOLEAN security_UserIsLocked(const char* pUserName) { return devRbac_UserIsLocked(pUserName); } SECURITY_AUTH_RESULT security_Login(const char* pUserName, const char *pPassword,PLAT_INTERFACE Interface, INT32 *pRole) { SECURITY_AUTH_RESULT AuthResult = SECURITY_AUTH_INCORRECT; if (0 == pPassword || 0 == pRole || 0 == pUserName) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (2408))) ); } strncpy(PwAccessData[Interface]->EnteredUserName, pUserName, sizeof(PwAccessData[Interface]->EnteredUserName)-1); if (securtiy_InterfaceIsBypass(Interface)) { *pRole = 3; PwAccessData[Interface]->SessionActive = TRUE; PwAccessData[Interface]->AuthService = SECURITY_AUTH_BYPASS; AuthResult = SECURITY_AUTH_OK; { char buffer[68]; sprintf(buffer, "Executed %s:%d\n","\\50300pl\\dev\\pl\\src\\security.c",2420); SerialPrint(buffer); }; } else if (0 == strlen(pUserName)) { SECURITY_PW_ENTRY_RESULT PWResult; PWResult = legacyAuth_Authentication(0, pPassword, Interface); *pRole = (INT32)security_GetCurrentPWLevel(Interface); { char buffer[68]; sprintf(buffer, "Executed %s:%d\n","\\50300pl\\dev\\pl\\src\\security.c",2428); SerialPrint(buffer); }; if (SECURITY_PW_ENTRY_INCORRECT == PWResult) { AuthResult = SECURITY_AUTH_INCORRECT; } else if (security_UserIsLocked(pUserName)) { AuthResult = SECURITY_AUTH_BLOCKED; log_LogSecurityEventMsf(SECUR_EVT_PW_ENTERED_WHILE_BLOCKED, Interface, security_GetCurrentPWLevel(Interface), (UINT16)0); } else if (security_SessionLimited(*pRole)) { AuthResult = SECURITY_AUTH_SESSION_LIMIT; } else { PwAccessData[Interface]->SessionActive = TRUE; PwAccessData[Interface]->AuthService = SECURITY_AUTH_LEGACY; AuthResult = SECURITY_AUTH_OK; } } else if (svrRbac_Operational()) { { char buffer[68]; sprintf(buffer, "Executed %s:%d\n","\\50300pl\\dev\\pl\\src\\security.c",2454); SerialPrint(buffer); }; AuthResult = svrRbac_Authentication(pUserName, pPassword, Interface, pRole); if (SECURITY_AUTH_OK == AuthResult) { if (security_SessionLimited(*pRole)) { AuthResult = SECURITY_AUTH_SESSION_LIMIT; } else { PwAccessData[Interface]->SessionActive = TRUE; PwAccessData[Interface]->AuthService = SECURITY_AUTH_SERVER; AuthResult = SECURITY_AUTH_OK; } } } if (devRbac_Operational() && (!svrRbac_Operational() || SECURITY_AUTH_OK != AuthResult) ) { AuthResult = devRbac_Authentication(pUserName, pPassword, Interface, pRole); if (SECURITY_AUTH_OK == AuthResult) { if (security_UserIsLocked(pUserName)) { { char buffer[68]; sprintf(buffer, "Executed %s:%d\n","\\50300pl\\dev\\pl\\src\\security.c",2478); SerialPrint(buffer); }; AuthResult = SECURITY_AUTH_BLOCKED; log_LogSecurityEventMsf(SECUR_EVT_PW_ENTERED_WHILE_BLOCKED, Interface, security_GetCurrentPWLevel(Interface), (UINT16)0); } else if (security_SessionLimited(*pRole)) { { char buffer[68]; sprintf(buffer, "Executed %s:%d\n","\\50300pl\\dev\\pl\\src\\security.c",2488); SerialPrint(buffer); }; AuthResult = SECURITY_AUTH_SESSION_LIMIT; } else { { char buffer[68]; sprintf(buffer, "Executed %s:%d\n","\\50300pl\\dev\\pl\\src\\security.c",2493); SerialPrint(buffer); }; PwAccessData[Interface]->SessionActive = TRUE; PwAccessData[Interface]->AuthService = SECURITY_AUTH_DEVICE; AuthResult = SECURITY_AUTH_OK; } } } else { AuthResult = SECURITY_AUTH_SERVICE_FAILURE; } if (AuthResult == SECURITY_AUTH_OK) { PwAccessData[Interface]->SetEnteredPwLevel(security_RoleToPasswordLevel(*pRole)); } return AuthResult; } SECURITY_PW_ENTRY_RESULT security_CheckEnteredPassword(const char *pPassword,PLAT_INTERFACE Interface) { INT32 Role; SECURITY_AUTH_RESULT AuthResult; SECURITY_PW_ENTRY_RESULT PasswordResult; const char* pUserName = (const char*)(PwAccessData[Interface]->EnteredUserName); AuthResult = security_Login(pUserName, pPassword, Interface, &Role); switch (AuthResult){ case SECURITY_AUTH_OK: PasswordResult = SECURITY_PW_ENTRY_MATCH; PwAccessData[Interface]->SetEnteredPwLevel(security_RoleToPasswordLevel(Role)); break; case SECURITY_AUTH_BLOCKED: case SECURITY_AUTH_SESSION_LIMIT: PasswordResult = SECURITY_PW_ENTRY_BLOCKED; break; case SECURITY_AUTH_INCORRECT: case SECURITY_AUTH_NO_ROLE: case SECURITY_AUTH_SERVICE_FAILURE: default: PasswordResult = SECURITY_PW_ENTRY_INCORRECT; break; } return PasswordResult; } void security_Logout(PLAT_INTERFACE Interface, PLAT_PASSWORD_LEVEL DefaultPwLevel) { if (PwAccessData[Interface]) { PwAccessData[Interface]->SessionActive = FALSE; switch (PwAccessData[Interface]->AuthService) { case SECURITY_AUTH_LEGACY: security_ResetEnteredPwLevel(Interface,DefaultPwLevel); break; case SECURITY_AUTH_DEVICE: devRbac_Logout(PwAccessData[Interface]->EnteredUserName, Interface); memset(PwAccessData[Interface]->EnteredUserName, 0, sizeof(PwAccessData[Interface]->EnteredUserName)); security_ResetEnteredPwLevel(Interface,DefaultPwLevel); break; case SECURITY_AUTH_SERVER: svrRbac_Logout(PwAccessData[Interface]->EnteredUserName, Interface); memset(PwAccessData[Interface]->EnteredUserName, 0, sizeof(PwAccessData[Interface]->EnteredUserName)); security_ResetEnteredPwLevel(Interface,DefaultPwLevel); break; case SECURITY_AUTH_BYPASS: case SECURITY_AUTH_NA: default: break; } } } static void legacyAuth_Configure(void * pConfigData) { (void)pConfigData; } static BOOLEAN legacyAuth_Operational() { return TRUE; } static BOOLEAN securtiy_InterfaceIsBypass(PLAT_INTERFACE Interface) { DBM_PARAMETERS DbmParameters; PLAT_G279_AUTH_BYPASS Bypass; dbm_GetParameters(&DbmParameters); Bypass = DbmParameters.pCS->PlatConfig.Security.AuthBypass; return (0 != (BYPASS_INTERFACE_MAP[(UINT32)Bypass] & (1 << (UINT32)Interface))); } void security_EnterUserName(const char *pUserName,PLAT_INTERFACE Interface) { if (pUserName) { strncpy(PwAccessData[Interface]->EnteredUserName, pUserName, sizeof(PwAccessData[Interface]->EnteredUserName)-1); } else { memset(PwAccessData[Interface]->EnteredUserName, 0, sizeof(PwAccessData[Interface]->EnteredUserName)); } } const char* security_GetEnteredUserName(PLAT_INTERFACE Interface) { return PwAccessData[Interface]->EnteredUserName; } static UINT32 security_GetActiveSessions(INT32 Role) { int i; UINT32 Result = 0; for( i = 0; i < (int)(sizeof(PwAccessData)/sizeof(PwAccessData[0])); i++) { if (PwAccessData[i] && (PwAccessData[i]->GetEnteredPwLevel() == security_RoleToPasswordLevel(Role)) && (PwAccessData[i]->SessionActive)) { Result++; } } return Result; } static BOOLEAN security_SessionLimited(INT32 Role) { int i; BOOLEAN Result = FALSE; for (i = 0; i < (int)(sizeof(security_Roles)/sizeof(security_Roles[0])); i++) { if (security_Roles[i].RoleValue == Role) { Result = (security_GetActiveSessions(Role) >= security_Roles[i].MaxSessions); } } return Result; } BOOLEAN security_GetPasswordBlocked(SECURITY_INTERFACE Interface) { BOOLEAN Result; switch (Interface) { case SECURITY_IFACE_UI: { Result = security_InterfaceIsBlocked(PwAccessData[PLAT_UI]); break; } case SECURITY_IFACE_FP: { Result = security_InterfaceIsBlocked(PwAccessData[PLAT_FRONT_COURIER]); break; } case SECURITY_IFACE_RP1: { Result = security_InterfaceIsBlocked(PwAccessData[PLAT_REAR_COURIER]); break; } case SECURITY_IFACE_RP2: { Result = security_InterfaceIsBlocked(PwAccessData[PLAT_REAR_COURIER2]); break; } case SECURITY_IFACE_TNL: { Result = security_InterfaceIsBlocked(PwAccessData[PLAT_LPM_COURIER]); break; } case SECURITY_IFACE_IEC: { Result = security_InterfaceIsBlocked(PwAccessData[PLAT_ECI]); break; } case SECURITY_IFACE_DNPOE: { Result = security_InterfaceIsBlocked(PwAccessData[PLAT_DNPOE]); break; } default: { Result = FALSE; break; } } return Result; } PLAT_PASSWORD_LEVEL security_RoleToPasswordLevel(INT32 Role) { int i; PLAT_PASSWORD_LEVEL Result = PLAT_PASSWORD_LEVEL_0; for ( i = 0; i < (int)(sizeof(security_Roles)/sizeof(security_Roles[0])); i++) { if (security_Roles[i].RoleValue == Role) { Result = security_Roles[i].PwLevel; break; } } return Result; } INT32 security_PasswordLevelToRole(PLAT_PASSWORD_LEVEL PwLevel) { int i; INT32 Result = 0; for ( i = 0; i < (int)(sizeof(security_Roles)/sizeof(security_Roles[0])); i++) { if (security_Roles[i].PwLevel == PwLevel) { Result = security_Roles[i].RoleValue; break; } } return Result; } int security_ComparePassword(const char* pPassword, const UINT8 *pExpectedHash, const char* pSalt) { unsigned char PasswordHash[16]; int i; T_INTERN_ABS_DATE start_time; T_INTERN_ABS_DATE stop_time; BOOLEAN DateIsValid; T_INTERN_REL_DATE delta_time; char buffer[200]; if ((1) != sdt_GetAbsoluteDate(&start_time, &DateIsValid)) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (2807))) ); } PKCS5_PBKDF2_HMAC((unsigned char *)pPassword, strlen(pPassword), (unsigned char *)pSalt, strlen(pSalt), 100, 16, PasswordHash); if ((1) != sdt_GetAbsoluteDate(&stop_time, &DateIsValid)) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (2818))) ); } if ((1) != sdt_AbsMinusAbs(&stop_time,&start_time,&delta_time)) { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (2823))) ); } sprintf(buffer, "PKCS5_PBKDF2_HMAC exec time is %d.%.3d s\n", delta_time.sec, delta_time.ms); SerialPrint(buffer); return memcmp(PasswordHash, pExpectedHash, 16); } void security_ResetEnteredPwLevel(PLAT_INTERFACE Interface, PLAT_PASSWORD_LEVEL DefaultPwLevel) { if (PwAccessData[Interface]) { if (securtiy_InterfaceIsBypass(Interface)) { PwAccessData[Interface]->SetEnteredPwLevel(PLAT_PASSWORD_LEVEL_3); } else { PwAccessData[Interface]->SetEnteredPwLevel(DefaultPwLevel); } } else { plerr_HandleError((PLERR_ERROR)((UINT32)((0x00000000) + (0x6A000000)) | (((PLERR_ERROR) 0x0000FFFF) & (2867))) ); } } const char* security_GetRoleName(INT32 Role) { int i; const char* result = 0; for (i = 0 ; i < (int)(sizeof(security_Roles)/sizeof(security_Roles[0])); i++) { if (security_Roles[i].RoleValue == Role) { result = security_Roles[i].RoleName; break; } } return result; } void security_UnlockInterfaces() { int i; for (i = 0; i < PLAT_INTERFACE_MAX_ENUM; i++) { if (PwAccessData[i] && PwAccessData[i]->PwState == SECURITY_PW_BLOCKING) { PwAccessData[i]->PwState = SECURITY_PW_IDLE; PwAccessData[i]->PwAttempts = 0; } } } void security_UnlockUsers() { devRbac_UnlockUsers(); } BOOLEAN security_NoGapsInString(char *pString, UINT8 MaxLength) { UINT8 Length; UINT8 Index = MaxLength; BOOLEAN Result = TRUE; if (pString == 0) { return FALSE; } if (strlen(pString) < MaxLength) { Index = strlen(pString); } while ( (Index > 0) && (' ' == pString[Index - 1] || 0 == pString[Index - 1])) { Index--; } Length = Index; if (0 == Length) { Result = FALSE; } else { for (Index = 0; Index < Length; Index++) { if (' ' == pString[Index]) { Result = FALSE; break; } } if(Result) { pString[Length] = '\0'; } } return Result; }