/* Generated with snc from femto.i */ /* Program "femto" */ #include #include #include #include #include "epicsTypes.h" #include "seqCom.h" /* Variable declarations */ struct UserVar { # line 30 "../femto.st" int t0; # line 31 "../femto.st" int t1; # line 32 "../femto.st" int t2; # line 33 "../femto.st" int tx; # line 34 "../femto.st" double gain; # line 35 "../femto.st" int gainidx; # line 36 "../femto.st" int debug_flag; # line 38 "../femto.st" int curgain; # line 39 "../femto.st" char msg[256]; # line 40 "../femto.st" char *SNLtaskName; }; /* C code definitions */ # line 22 "../femto.st" #include # line 23 "../femto.st" #include # line 42 "../femto.st" static int powers[] = {5,6,7,8,9,10,11,0,3,4,5,6,7,8,9,0}; /* Program init func */ static void G_prog_init(struct UserVar *pVar) { static struct UserVar pVarInit = { 0, 0, 0, 0, 0, 0, 0, 0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 0, }; *pVar = pVarInit; } /****** Code for state "init" in state set "femto" ******/ /* Delay function for state "init" in state set "femto" */ static void D_femto_init(SS_ID ssId, struct UserVar *pVar) { } /* Event function for state "init" in state set "femto" */ static seqBool E_femto_init(SS_ID ssId, struct UserVar *pVar, int *pTransNum, int *pNextState) { if (TRUE) { *pNextState = 2; *pTransNum = 0; return TRUE; } return FALSE; } /* Action function for state "init" in state set "femto" */ static void A_femto_init(SS_ID ssId, struct UserVar *pVar, int transNum, int *pNextState) { switch(transNum) { case 0: { # line 51 "../femto.st" pVar->SNLtaskName = seq_macValueGet(ssId, "name"); # line 53 "../femto.st" seq_pvGet(ssId, 0/*t0*/, SYNC); # line 54 "../femto.st" seq_pvGet(ssId, 1/*t1*/, SYNC); # line 55 "../femto.st" seq_pvGet(ssId, 2/*t2*/, SYNC); # line 56 "../femto.st" seq_pvGet(ssId, 3/*tx*/, SYNC); # line 58 "../femto.st" if ((pVar->tx + pVar->t2 + pVar->t1 + pVar->t0) == 0) { # line 60 "../femto.st" pVar->gainidx = 8; # line 61 "../femto.st" if (pVar->debug_flag >= 2) { # line 61 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 61, pVar->SNLtaskName, 2); # line 61 "../femto.st" ; # line 61 "../femto.st" printf("%s\n", "gainidx = default (1e3 since all bits were OFF)"); # line 61 "../femto.st" epicsThreadSleep(0.01); } # line 61 "../femto.st" ; } else { # line 65 "../femto.st" pVar->gainidx = (pVar->tx << 3) | (pVar->t2 << 2) | (pVar->t1 << 1) | pVar->t0; # line 66 "../femto.st" sprintf(pVar->msg, "gainidx = %d", pVar->gainidx); # line 67 "../femto.st" if (pVar->debug_flag >= 2) { # line 67 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 67, pVar->SNLtaskName, 2); # line 67 "../femto.st" ; # line 67 "../femto.st" printf("%s\n", pVar->msg); # line 67 "../femto.st" epicsThreadSleep(0.01); } # line 67 "../femto.st" ; } # line 70 "../femto.st" if (pVar->gainidx >= 15 || pVar->gainidx == 7) { # line 72 "../femto.st" pVar->gainidx = 6; # line 73 "../femto.st" if (pVar->debug_flag >= 4) { # line 73 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 73, pVar->SNLtaskName, 4); # line 73 "../femto.st" ; # line 73 "../femto.st" printf("%s\n", "resetting gain to 1e11"); # line 73 "../femto.st" epicsThreadSleep(0.01); } # line 73 "../femto.st" ; } # line 76 "../femto.st" pVar->curgain = -1; { # line 77 "../femto.st" pVar->gainidx = (pVar->gainidx); # line 77 "../femto.st" seq_pvPut(ssId, 5/*gainidx*/, SYNC); } # line 77 "../femto.st" ; { # line 78 "../femto.st" pVar->gain = (pow(10, powers[pVar->gainidx])); # line 78 "../femto.st" seq_pvPut(ssId, 4/*gain*/, SYNC); } # line 78 "../femto.st" ; # line 79 "../femto.st" sprintf(pVar->msg, "gainidx = %d", pVar->gainidx); # line 80 "../femto.st" if (pVar->debug_flag >= 2) { # line 80 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 80, pVar->SNLtaskName, 2); # line 80 "../femto.st" ; # line 80 "../femto.st" printf("%s\n", pVar->msg); # line 80 "../femto.st" epicsThreadSleep(0.01); } # line 80 "../femto.st" ; # line 82 "../femto.st" seq_efClear(ssId, 1/*t0_mon*/); # line 83 "../femto.st" seq_efClear(ssId, 2/*t1_mon*/); # line 84 "../femto.st" seq_efClear(ssId, 3/*t2_mon*/); # line 85 "../femto.st" seq_efClear(ssId, 4/*tx_mon*/); # line 86 "../femto.st" seq_efClear(ssId, 5/*gainidx_mon*/); # line 87 "../femto.st" seq_efClear(ssId, 6/*debug_flag_mon*/); # line 89 "../femto.st" if (pVar->debug_flag >= 2) { # line 89 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 89, pVar->SNLtaskName, 2); # line 89 "../femto.st" ; # line 89 "../femto.st" printf("%s\n", "init complete"); # line 89 "../femto.st" epicsThreadSleep(0.01); } # line 89 "../femto.st" ; } return; } } /****** Code for state "updateGain" in state set "femto" ******/ /* Delay function for state "updateGain" in state set "femto" */ static void D_femto_updateGain(SS_ID ssId, struct UserVar *pVar) { } /* Event function for state "updateGain" in state set "femto" */ static seqBool E_femto_updateGain(SS_ID ssId, struct UserVar *pVar, int *pTransNum, int *pNextState) { if (TRUE) { *pNextState = 3; *pTransNum = 0; return TRUE; } return FALSE; } /* Action function for state "updateGain" in state set "femto" */ static void A_femto_updateGain(SS_ID ssId, struct UserVar *pVar, int transNum, int *pNextState) { switch(transNum) { case 0: { # line 98 "../femto.st" pVar->gainidx = (pVar->tx << 3) | (pVar->t2 << 2) | (pVar->t1 << 1) | pVar->t0; # line 99 "../femto.st" sprintf(pVar->msg, "gainidx = %d", pVar->gainidx); # line 100 "../femto.st" if (pVar->debug_flag >= 2) { # line 100 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 100, pVar->SNLtaskName, 2); # line 100 "../femto.st" ; # line 100 "../femto.st" printf("%s\n", pVar->msg); # line 100 "../femto.st" epicsThreadSleep(0.01); } # line 100 "../femto.st" ; # line 102 "../femto.st" if (pVar->gainidx >= 15 || pVar->gainidx == 7) { # line 104 "../femto.st" pVar->gainidx = 6; # line 105 "../femto.st" if (pVar->debug_flag >= 4) { # line 105 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 105, pVar->SNLtaskName, 4); # line 105 "../femto.st" ; # line 105 "../femto.st" printf("%s\n", "resetting gain to 1e11"); # line 105 "../femto.st" epicsThreadSleep(0.01); } # line 105 "../femto.st" ; } # line 108 "../femto.st" pVar->curgain = pVar->gainidx; { # line 109 "../femto.st" pVar->gainidx = (pVar->gainidx); # line 109 "../femto.st" seq_pvPut(ssId, 5/*gainidx*/, SYNC); } # line 109 "../femto.st" ; { # line 110 "../femto.st" pVar->gain = (pow(10, powers[pVar->gainidx])); # line 110 "../femto.st" seq_pvPut(ssId, 4/*gain*/, SYNC); } # line 110 "../femto.st" ; # line 111 "../femto.st" sprintf(pVar->msg, "gainidx = %d", pVar->gainidx); # line 112 "../femto.st" if (pVar->debug_flag >= 2) { # line 112 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 112, pVar->SNLtaskName, 2); # line 112 "../femto.st" ; # line 112 "../femto.st" printf("%s\n", pVar->msg); # line 112 "../femto.st" epicsThreadSleep(0.01); } # line 112 "../femto.st" ; } return; } } /****** Code for state "changeGain" in state set "femto" ******/ /* Delay function for state "changeGain" in state set "femto" */ static void D_femto_changeGain(SS_ID ssId, struct UserVar *pVar) { } /* Event function for state "changeGain" in state set "femto" */ static seqBool E_femto_changeGain(SS_ID ssId, struct UserVar *pVar, int *pTransNum, int *pNextState) { # line 120 "../femto.st" if (pVar->curgain == pVar->gainidx) { *pNextState = 3; *pTransNum = 0; return TRUE; } # line 125 "../femto.st" if (pVar->gainidx < 0) { *pNextState = 3; *pTransNum = 1; return TRUE; } # line 133 "../femto.st" if (pVar->gainidx > 15) { *pNextState = 3; *pTransNum = 2; return TRUE; } # line 141 "../femto.st" if (pVar->gainidx == 7 || pVar->gainidx == 15) { *pNextState = 3; *pTransNum = 3; return TRUE; } if (TRUE) { *pNextState = 3; *pTransNum = 4; return TRUE; } return FALSE; } /* Action function for state "changeGain" in state set "femto" */ static void A_femto_changeGain(SS_ID ssId, struct UserVar *pVar, int transNum, int *pNextState) { switch(transNum) { case 0: { # line 122 "../femto.st" if (pVar->debug_flag >= 2) { # line 122 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 122, pVar->SNLtaskName, 2); # line 122 "../femto.st" ; # line 122 "../femto.st" printf("%s\n", "No gain change required"); # line 122 "../femto.st" epicsThreadSleep(0.01); } # line 122 "../femto.st" ; } return; case 1: { { # line 127 "../femto.st" pVar->gainidx = (pVar->curgain); # line 127 "../femto.st" seq_pvPut(ssId, 5/*gainidx*/, SYNC); } # line 127 "../femto.st" ; { # line 128 "../femto.st" pVar->gain = (pow(10, powers[pVar->curgain])); # line 128 "../femto.st" seq_pvPut(ssId, 4/*gain*/, SYNC); } # line 128 "../femto.st" ; # line 129 "../femto.st" sprintf(pVar->msg, "Requested gain (%d) too low!", pVar->gainidx); # line 130 "../femto.st" if (pVar->debug_flag >= 2) { # line 130 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 130, pVar->SNLtaskName, 2); # line 130 "../femto.st" ; # line 130 "../femto.st" printf("%s\n", pVar->msg); # line 130 "../femto.st" epicsThreadSleep(0.01); } # line 130 "../femto.st" ; } return; case 2: { { # line 135 "../femto.st" pVar->gainidx = (pVar->curgain); # line 135 "../femto.st" seq_pvPut(ssId, 5/*gainidx*/, SYNC); } # line 135 "../femto.st" ; { # line 136 "../femto.st" pVar->gain = (pow(10, powers[pVar->curgain])); # line 136 "../femto.st" seq_pvPut(ssId, 4/*gain*/, SYNC); } # line 136 "../femto.st" ; # line 137 "../femto.st" sprintf(pVar->msg, "Requested gain (%d) too high!", pVar->gainidx); # line 138 "../femto.st" if (pVar->debug_flag >= 2) { # line 138 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 138, pVar->SNLtaskName, 2); # line 138 "../femto.st" ; # line 138 "../femto.st" printf("%s\n", pVar->msg); # line 138 "../femto.st" epicsThreadSleep(0.01); } # line 138 "../femto.st" ; } return; case 3: { { # line 143 "../femto.st" pVar->gainidx = (pVar->curgain); # line 143 "../femto.st" seq_pvPut(ssId, 5/*gainidx*/, SYNC); } # line 143 "../femto.st" ; { # line 144 "../femto.st" pVar->gain = (pow(10, powers[pVar->curgain])); # line 144 "../femto.st" seq_pvPut(ssId, 4/*gain*/, SYNC); } # line 144 "../femto.st" ; # line 145 "../femto.st" sprintf(pVar->msg, "Requested gain (%d) invalid!", pVar->gainidx); # line 146 "../femto.st" if (pVar->debug_flag >= 2) { # line 146 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 146, pVar->SNLtaskName, 2); # line 146 "../femto.st" ; # line 146 "../femto.st" printf("%s\n", pVar->msg); # line 146 "../femto.st" epicsThreadSleep(0.01); } # line 146 "../femto.st" ; } return; case 4: { # line 151 "../femto.st" sprintf(pVar->msg, "gain %d selected", pVar->gainidx); # line 152 "../femto.st" if (pVar->debug_flag >= 2) { # line 152 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 152, pVar->SNLtaskName, 2); # line 152 "../femto.st" ; # line 152 "../femto.st" printf("%s\n", pVar->msg); # line 152 "../femto.st" epicsThreadSleep(0.01); } # line 152 "../femto.st" ; # line 155 "../femto.st" if (pVar->gainidx == 0) { { # line 157 "../femto.st" pVar->t0 = (0); # line 157 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 157 "../femto.st" ; { # line 158 "../femto.st" pVar->t1 = (0); # line 158 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 158 "../femto.st" ; { # line 159 "../femto.st" pVar->t2 = (0); # line 159 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 159 "../femto.st" ; { # line 160 "../femto.st" pVar->tx = (0); # line 160 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 160 "../femto.st" ; } # line 164 "../femto.st" if (pVar->gainidx == 1) { { # line 166 "../femto.st" pVar->t0 = (1); # line 166 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 166 "../femto.st" ; { # line 167 "../femto.st" pVar->t1 = (0); # line 167 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 167 "../femto.st" ; { # line 168 "../femto.st" pVar->t2 = (0); # line 168 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 168 "../femto.st" ; { # line 169 "../femto.st" pVar->tx = (0); # line 169 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 169 "../femto.st" ; } # line 173 "../femto.st" if (pVar->gainidx == 2) { { # line 175 "../femto.st" pVar->t0 = (0); # line 175 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 175 "../femto.st" ; { # line 176 "../femto.st" pVar->t1 = (1); # line 176 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 176 "../femto.st" ; { # line 177 "../femto.st" pVar->t2 = (0); # line 177 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 177 "../femto.st" ; { # line 178 "../femto.st" pVar->tx = (0); # line 178 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 178 "../femto.st" ; } # line 182 "../femto.st" if (pVar->gainidx == 3) { { # line 184 "../femto.st" pVar->t0 = (1); # line 184 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 184 "../femto.st" ; { # line 185 "../femto.st" pVar->t1 = (1); # line 185 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 185 "../femto.st" ; { # line 186 "../femto.st" pVar->t2 = (0); # line 186 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 186 "../femto.st" ; { # line 187 "../femto.st" pVar->tx = (0); # line 187 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 187 "../femto.st" ; } # line 191 "../femto.st" if (pVar->gainidx == 4) { { # line 193 "../femto.st" pVar->t0 = (0); # line 193 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 193 "../femto.st" ; { # line 194 "../femto.st" pVar->t1 = (0); # line 194 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 194 "../femto.st" ; { # line 195 "../femto.st" pVar->t2 = (1); # line 195 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 195 "../femto.st" ; { # line 196 "../femto.st" pVar->tx = (0); # line 196 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 196 "../femto.st" ; } # line 200 "../femto.st" if (pVar->gainidx == 5) { { # line 202 "../femto.st" pVar->t0 = (1); # line 202 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 202 "../femto.st" ; { # line 203 "../femto.st" pVar->t1 = (0); # line 203 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 203 "../femto.st" ; { # line 204 "../femto.st" pVar->t2 = (1); # line 204 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 204 "../femto.st" ; { # line 205 "../femto.st" pVar->tx = (0); # line 205 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 205 "../femto.st" ; } # line 209 "../femto.st" if (pVar->gainidx == 6) { { # line 211 "../femto.st" pVar->t0 = (0); # line 211 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 211 "../femto.st" ; { # line 212 "../femto.st" pVar->t1 = (1); # line 212 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 212 "../femto.st" ; { # line 213 "../femto.st" pVar->t2 = (1); # line 213 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 213 "../femto.st" ; { # line 214 "../femto.st" pVar->tx = (0); # line 214 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 214 "../femto.st" ; } # line 218 "../femto.st" if (pVar->gainidx == 8) { { # line 220 "../femto.st" pVar->t0 = (0); # line 220 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 220 "../femto.st" ; { # line 221 "../femto.st" pVar->t1 = (0); # line 221 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 221 "../femto.st" ; { # line 222 "../femto.st" pVar->t2 = (0); # line 222 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 222 "../femto.st" ; { # line 223 "../femto.st" pVar->tx = (1); # line 223 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 223 "../femto.st" ; } # line 227 "../femto.st" if (pVar->gainidx == 9) { { # line 229 "../femto.st" pVar->t0 = (1); # line 229 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 229 "../femto.st" ; { # line 230 "../femto.st" pVar->t1 = (0); # line 230 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 230 "../femto.st" ; { # line 231 "../femto.st" pVar->t2 = (0); # line 231 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 231 "../femto.st" ; { # line 232 "../femto.st" pVar->tx = (1); # line 232 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 232 "../femto.st" ; } # line 236 "../femto.st" if (pVar->gainidx == 10) { { # line 238 "../femto.st" pVar->t0 = (0); # line 238 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 238 "../femto.st" ; { # line 239 "../femto.st" pVar->t1 = (1); # line 239 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 239 "../femto.st" ; { # line 240 "../femto.st" pVar->t2 = (0); # line 240 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 240 "../femto.st" ; { # line 241 "../femto.st" pVar->tx = (1); # line 241 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 241 "../femto.st" ; } # line 245 "../femto.st" if (pVar->gainidx == 11) { { # line 247 "../femto.st" pVar->t0 = (1); # line 247 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 247 "../femto.st" ; { # line 248 "../femto.st" pVar->t1 = (1); # line 248 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 248 "../femto.st" ; { # line 249 "../femto.st" pVar->t2 = (0); # line 249 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 249 "../femto.st" ; { # line 250 "../femto.st" pVar->tx = (1); # line 250 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 250 "../femto.st" ; } # line 254 "../femto.st" if (pVar->gainidx == 12) { { # line 256 "../femto.st" pVar->t0 = (0); # line 256 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 256 "../femto.st" ; { # line 257 "../femto.st" pVar->t1 = (0); # line 257 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 257 "../femto.st" ; { # line 258 "../femto.st" pVar->t2 = (1); # line 258 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 258 "../femto.st" ; { # line 259 "../femto.st" pVar->tx = (1); # line 259 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 259 "../femto.st" ; } # line 263 "../femto.st" if (pVar->gainidx == 13) { { # line 265 "../femto.st" pVar->t0 = (1); # line 265 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 265 "../femto.st" ; { # line 266 "../femto.st" pVar->t1 = (0); # line 266 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 266 "../femto.st" ; { # line 267 "../femto.st" pVar->t2 = (1); # line 267 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 267 "../femto.st" ; { # line 268 "../femto.st" pVar->tx = (1); # line 268 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 268 "../femto.st" ; } # line 272 "../femto.st" if (pVar->gainidx == 14) { { # line 274 "../femto.st" pVar->t0 = (0); # line 274 "../femto.st" seq_pvPut(ssId, 0/*t0*/, SYNC); } # line 274 "../femto.st" ; { # line 275 "../femto.st" pVar->t1 = (1); # line 275 "../femto.st" seq_pvPut(ssId, 1/*t1*/, SYNC); } # line 275 "../femto.st" ; { # line 276 "../femto.st" pVar->t2 = (1); # line 276 "../femto.st" seq_pvPut(ssId, 2/*t2*/, SYNC); } # line 276 "../femto.st" ; { # line 277 "../femto.st" pVar->tx = (1); # line 277 "../femto.st" seq_pvPut(ssId, 3/*tx*/, SYNC); } # line 277 "../femto.st" ; } # line 280 "../femto.st" pVar->curgain = pVar->gainidx; { # line 281 "../femto.st" pVar->gain = (pow(10, powers[pVar->gainidx])); # line 281 "../femto.st" seq_pvPut(ssId, 4/*gain*/, SYNC); } # line 281 "../femto.st" ; # line 283 "../femto.st" seq_efClear(ssId, 1/*t0_mon*/); # line 284 "../femto.st" seq_efClear(ssId, 2/*t1_mon*/); # line 285 "../femto.st" seq_efClear(ssId, 3/*t2_mon*/); # line 286 "../femto.st" seq_efClear(ssId, 4/*tx_mon*/); # line 287 "../femto.st" seq_efClear(ssId, 5/*gainidx_mon*/); } return; } } /****** Code for state "idle" in state set "femto" ******/ /* Delay function for state "idle" in state set "femto" */ static void D_femto_idle(SS_ID ssId, struct UserVar *pVar) { # line 313 "../femto.st" seq_delayInit(ssId, 0, (.1)); } /* Event function for state "idle" in state set "femto" */ static seqBool E_femto_idle(SS_ID ssId, struct UserVar *pVar, int *pTransNum, int *pNextState) { # line 295 "../femto.st" if (seq_efTestAndClear(ssId, 6/*debug_flag_mon*/)) { *pNextState = 3; *pTransNum = 0; return TRUE; } # line 302 "../femto.st" if (seq_efTestAndClear(ssId, 4/*tx_mon*/) || seq_efTestAndClear(ssId, 3/*t2_mon*/) || seq_efTestAndClear(ssId, 2/*t1_mon*/) || seq_efTestAndClear(ssId, 1/*t0_mon*/)) { *pNextState = 1; *pTransNum = 1; return TRUE; } # line 308 "../femto.st" if (seq_efTestAndClear(ssId, 5/*gainidx_mon*/)) { *pNextState = 2; *pTransNum = 2; return TRUE; } # line 313 "../femto.st" if (seq_delay(ssId, 0)) { *pNextState = 3; *pTransNum = 3; return TRUE; } return FALSE; } /* Action function for state "idle" in state set "femto" */ static void A_femto_idle(SS_ID ssId, struct UserVar *pVar, int transNum, int *pNextState) { switch(transNum) { case 0: { # line 297 "../femto.st" sprintf(pVar->msg, "Debug level changed to %d", pVar->debug_flag); # line 298 "../femto.st" if (pVar->debug_flag >= 1) { # line 298 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 298, pVar->SNLtaskName, 1); # line 298 "../femto.st" ; # line 298 "../femto.st" printf("%s\n", pVar->msg); # line 298 "../femto.st" epicsThreadSleep(0.01); } # line 298 "../femto.st" ; } return; case 1: { # line 305 "../femto.st" if (pVar->debug_flag >= 2) { # line 305 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 305, pVar->SNLtaskName, 2); # line 305 "../femto.st" ; # line 305 "../femto.st" printf("%s\n", "bits changed, updating"); # line 305 "../femto.st" epicsThreadSleep(0.01); } # line 305 "../femto.st" ; } return; case 2: { # line 310 "../femto.st" if (pVar->debug_flag >= 2) { # line 310 "../femto.st" printf("<%s,%d,%s,%d> ", "../femto.st", 310, pVar->SNLtaskName, 2); # line 310 "../femto.st" ; # line 310 "../femto.st" printf("%s\n", "gain change"); # line 310 "../femto.st" epicsThreadSleep(0.01); } # line 310 "../femto.st" ; } return; case 3: { } return; } } /************************ Tables ************************/ /* Channel table */ static seqChan G_channels[] = { /* chName, offset, varName, varType, count, eventNum, efId, monitored, queueSize, queueIndex */ {"{G1}", offsetof(struct UserVar, t0), "t0", "int", 1, 7, 1, 1, 0, 0}, {"{G2}", offsetof(struct UserVar, t1), "t1", "int", 1, 8, 2, 1, 0, 0}, {"{G3}", offsetof(struct UserVar, t2), "t2", "int", 1, 9, 3, 1, 0, 0}, {"{NO}", offsetof(struct UserVar, tx), "tx", "int", 1, 10, 4, 1, 0, 0}, {"{P}{H}{F}gain", offsetof(struct UserVar, gain), "gain", "double", 1, 11, 0, 0, 0, 0}, {"{P}{H}{F}gainidx", offsetof(struct UserVar, gainidx), "gainidx", "int", 1, 12, 5, 1, 0, 0}, {"{P}{H}{F}debug", offsetof(struct UserVar, debug_flag), "debug_flag", "int", 1, 13, 6, 1, 0, 0} }; /* Event masks for state set "femto" */ static const seqMask EM_femto_init[] = { 0x00000000, }; static const seqMask EM_femto_updateGain[] = { 0x00000000, }; static const seqMask EM_femto_changeGain[] = { 0x00001000, }; static const seqMask EM_femto_idle[] = { 0x0000007e, }; /* State table for state set "femto" */ static seqState G_femto_states[] = { { /* state name */ "init", /* action function */ A_femto_init, /* event function */ E_femto_init, /* delay function */ D_femto_init, /* entry function */ 0, /* exit function */ 0, /* event mask array */ EM_femto_init, /* state options */ (0) }, { /* state name */ "updateGain", /* action function */ A_femto_updateGain, /* event function */ E_femto_updateGain, /* delay function */ D_femto_updateGain, /* entry function */ 0, /* exit function */ 0, /* event mask array */ EM_femto_updateGain, /* state options */ (0) }, { /* state name */ "changeGain", /* action function */ A_femto_changeGain, /* event function */ E_femto_changeGain, /* delay function */ D_femto_changeGain, /* entry function */ 0, /* exit function */ 0, /* event mask array */ EM_femto_changeGain, /* state options */ (0) }, { /* state name */ "idle", /* action function */ A_femto_idle, /* event function */ E_femto_idle, /* delay function */ D_femto_idle, /* entry function */ 0, /* exit function */ 0, /* event mask array */ EM_femto_idle, /* state options */ (0) }, }; /* State set table */ static seqSS G_state_sets[] = { { /* state set name */ "femto", /* states */ G_femto_states, /* number of states */ 4, /* number of delays */ 1 }, }; /* Program table (global) */ seqProgram femto = { /* magic number */ 2001006, /* program name */ "femto", /* channels */ G_channels, /* num. channels */ 7, /* state sets */ G_state_sets, /* num. state sets */ 1, /* user var size */ sizeof(struct UserVar), /* param */ "name=femto,P=,H=,F=,G1=,G2=,G3=,NO=", /* num. event flags */ 6, /* encoded options */ (0 | OPT_DEBUG | OPT_NEWEF | OPT_REENT), /* init func */ G_prog_init, /* entry func */ NULL, /* exit func */ NULL, /* num. queues */ 0 }; /* Register sequencer commands and program */ #include "epicsExport.h" static void femtoRegistrar (void) { seqRegisterSequencerCommands(); seqRegisterSequencerProgram (&femto); } epicsExportRegistrar(femtoRegistrar);