/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void constraint_c(scicos_block *block, int flag) { double *y = NULL, *y2 = NULL, *u = NULL; int i = 0; int* property = GetXpropPtrs(block); switch (flag) { case 4 : { for (i = 0; i < NX; i++) { property[i] = -1; /* xproperties*/ } break; } case 7 : { for (i = 0; i < NX; i++) { property[i] = block->ipar[i]; } break; } case 0 : /* the workspace is used to store discrete counter value */ { u = GetRealInPortPtrs(block, 1); for (i = 0; i < NX; i++) { block->res[i] = u[i]; } break; } case 1 : { y = GetRealOutPortPtrs(block, 1); for (i = 0; i < NX; i++) { y[i] = block->x[i]; } if (GetNout(block) == 2) { y2 = GetRealOutPortPtrs(block, 2); for (i = 0; i < NX; i++) { y2[i] = block->xd[i]; } } break; } default : break; } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void logic(scicos_block *block, int flag) { char *u = NULL, *y = NULL; char inp, num; int i = 0, nin = 0, nout = 0, mo = 0; char *opar = NULL; nin = GetNin(block); nout = GetNout(block); opar = Getint8OparPtrs(block, 1); mo = GetOparSize(block, 1, 1); if (flag == 1) { num = 0; for (i = 0; i < nin; i++) { u = Getint8InPortPtrs(block, i + 1); inp = *u; if (inp > 0) { inp = 1; } else { inp = 0; } inp = inp << i; num = num + inp; } for (i = 0; i < nout; i++) { y = Getint8OutPortPtrs(block, i + 1); *y = *(opar + num + i * mo); } } if (flag == 6) { u = Getint8InPortPtrs(block, 1); for (i = 0; i < nout; i++) { y = Getint8OutPortPtrs(block, i + 1); *y = *u; } } }
static int inout(scicos_block *block) { struct FlagTestDev * comdev = (struct FlagTestDev *) (*block->work); int i; if (get_scicos_time()==comdev->time){ comdev->step++; } else { comdev->time=get_scicos_time(); comdev->step=1; } printf("Flag 1: update output, step=%d, t=%f\n",comdev->step,comdev->time); if (GetNin(block)>0){ double *u1 = GetRealInPortPtrs(block,1); comdev->data=u1[0]; } if (GetNout(block)>0){ double *y1 = GetRealOutPortPtrs(block,1); y1[0]=comdev->data; } return 0; }