/* C code for program sncMpsRateDrop, generated by snc from ../sncMpsRateDrop.stt */ #include #include #include #include #include "seq_snc.h" # line 6 "../sncMpsRateDrop.stt" #include # line 7 "../sncMpsRateDrop.stt" #include # line 8 "../sncMpsRateDrop.stt" #include # line 10 "../sncMpsRateDrop.stt" static void getTimestampString(char *ts_string, int num); # line 11 "../sncMpsRateDrop.stt" static void printOut(char *alw_engine, char *state_name); # line 18 "../sncMpsRateDrop.stt" static void getTimestampString(char *ts_string, int num) { epicsTimeStamp t; epicsTimeGetCurrent(&t); epicsTimeToStrftime(ts_string, num, "%Y%m%d_%H%M%S", &t); } static void printOut(char *allow_engine, char *state_name) { char ts[64]; getTimestampString(ts, sizeof(ts)); printf("%s (%s): %s\n", allow_engine, state_name, ts); } /* Variable declarations */ struct seqg_vars { # line 14 "../sncMpsRateDrop.stt" int status; # line 15 "../sncMpsRateDrop.stt" int fault; # line 16 "../sncMpsRateDrop.stt" char *palw; }; /* Function declarations */ #define seqg_var (*(struct seqg_vars *const *)seqg_env) /* Program init func */ static void seqg_init(PROG_ID seqg_env) { } /****** Code for state "normal" in state set "ss_mon" ******/ /* Entry function for state "normal" in state set "ss_mon" */ static void seqg_entry_ss_mon_0_normal(SS_ID seqg_env) { # line 43 "../sncMpsRateDrop.stt" seqg_var->palw = seq_macValueGet(seqg_env, "alw"); printOut(pVar->palw, "normal state"); } /* Event function for state "normal" in state set "ss_mon" */ static seqBool seqg_event_ss_mon_0_normal(SS_ID seqg_env, int *seqg_ptrn, int *seqg_pnst) { # line 46 "../sncMpsRateDrop.stt" if (seqg_var->status == 0) { *seqg_pnst = 1; *seqg_ptrn = 0; return TRUE; } return FALSE; } /* Action function for state "normal" in state set "ss_mon" */ static void seqg_action_ss_mon_0_normal(SS_ID seqg_env, int seqg_trn, int *seqg_pnst) { switch(seqg_trn) { case 0: { # line 48 "../sncMpsRateDrop.stt" seqg_var->fault = 1; # line 48 "../sncMpsRateDrop.stt" seq_pvPutTmo(seqg_env, 1/*fault*/, SYNC, DEFAULT_TIMEOUT); # line 49 "../sncMpsRateDrop.stt" epicsThreadSleep(.5); # line 50 "../sncMpsRateDrop.stt" seqg_var->fault = 0; # line 50 "../sncMpsRateDrop.stt" seq_pvPutTmo(seqg_env, 1/*fault*/, SYNC, DEFAULT_TIMEOUT); } return; } } /****** Code for state "fault" in state set "ss_mon" ******/ /* Entry function for state "fault" in state set "ss_mon" */ static void seqg_entry_ss_mon_0_fault(SS_ID seqg_env) { # line 57 "../sncMpsRateDrop.stt" seqg_var->palw = seq_macValueGet(seqg_env, "alw"); printOut(pVar->palw, "fault state"); } /* Event function for state "fault" in state set "ss_mon" */ static seqBool seqg_event_ss_mon_0_fault(SS_ID seqg_env, int *seqg_ptrn, int *seqg_pnst) { # line 61 "../sncMpsRateDrop.stt" if (seqg_var->status != 0) { *seqg_pnst = 0; *seqg_ptrn = 0; return TRUE; } return FALSE; } /* Action function for state "fault" in state set "ss_mon" */ static void seqg_action_ss_mon_0_fault(SS_ID seqg_env, int seqg_trn, int *seqg_pnst) { switch(seqg_trn) { case 0: { } return; } } #undef seqg_var /************************ Tables ************************/ /* Channel table */ static seqChan seqg_chans[] = { /* chName, offset, varName, varType, count, eventNum, efId, monitored, queueSize, queueIndex */ {"{prefix}:{alw}:MPSLATCH", offsetof(struct seqg_vars, status), "status", P_INT, 1, 1, 0, 1, 0, 0}, {"{prefix}:FORCEFLT", offsetof(struct seqg_vars, fault), "fault", P_INT, 1, 2, 0, 0, 0, 0}, }; /* Event masks for state set "ss_mon" */ static const seqMask seqg_mask_ss_mon_0_normal[] = { 0x00000002, }; static const seqMask seqg_mask_ss_mon_0_fault[] = { 0x00000002, }; /* State table for state set "ss_mon" */ static seqState seqg_states_ss_mon[] = { { /* state name */ "normal", /* action function */ seqg_action_ss_mon_0_normal, /* event function */ seqg_event_ss_mon_0_normal, /* entry function */ seqg_entry_ss_mon_0_normal, /* exit function */ 0, /* event mask array */ seqg_mask_ss_mon_0_normal, /* state options */ (0) }, { /* state name */ "fault", /* action function */ seqg_action_ss_mon_0_fault, /* event function */ seqg_event_ss_mon_0_fault, /* entry function */ seqg_entry_ss_mon_0_fault, /* exit function */ 0, /* event mask array */ seqg_mask_ss_mon_0_fault, /* state options */ (0) }, }; /* State set table */ static seqSS seqg_statesets[] = { { /* state set name */ "ss_mon", /* states */ seqg_states_ss_mon, /* number of states */ 2 }, }; /* Program table (global) */ seqProgram sncMpsRateDrop = { /* magic number */ 2002004, /* program name */ "sncMpsRateDrop", /* channels */ seqg_chans, /* num. channels */ 2, /* state sets */ seqg_statesets, /* num. state sets */ 1, /* user var size */ sizeof(struct seqg_vars), /* param */ "", /* num. event flags */ 0, /* encoded options */ (0 | OPT_CONN | OPT_NEWEF | OPT_REENT), /* init func */ seqg_init, /* entry func */ 0, /* exit func */ 0, /* num. queues */ 0 }; /* Register sequencer commands and program */ #include "epicsExport.h" static void sncMpsRateDropRegistrar (void) { seqRegisterSequencerCommands(); seqRegisterSequencerProgram (&sncMpsRateDrop); } epicsExportRegistrar(sncMpsRateDropRegistrar);