X-Git-Url: https://rtime.felk.cvut.cz/gitweb/mf624-simulink.git/blobdiff_plain/7245aeb334077c1e3f4f9851d62e7c5eeb11a9fc..3426e8bcd6d22d6cee1203bbd2a63c3c55bd4009:/sfAnalogInput.c diff --git a/sfAnalogInput.c b/sfAnalogInput.c index 940bf43..9f7dd14 100644 --- a/sfAnalogInput.c +++ b/sfAnalogInput.c @@ -74,7 +74,7 @@ static void mdlInitializeSizes(SimStruct *S) ssSetErrorStatus(S,"Invalid parameter mask, set to 0-255"); } - int ADCChannels = __builtin_popcount((uint)ADCCMask); //Counts number of set bits in ADCCMask + int ADCChannels = __builtin_popcount((uint32_t)ADCCMask); //Counts number of set bits in ADCCMask if (!ssSetNumInputPorts(S, 0)) return; @@ -111,7 +111,7 @@ static void mdlInitializeSizes(SimStruct *S) static void mdlInitializeSampleTimes(SimStruct *S) { ssSetSampleTime(S, 0, CONTINUOUS_SAMPLE_TIME); - ssSetOffsetTime(S, 0, 0.0); + ssSetOffsetTime(S, 0, FIXED_IN_MINOR_STEP_OFFSET); } @@ -147,37 +147,16 @@ static void mdlInitializeSampleTimes(SimStruct *S) */ static void mdlStart(SimStruct *S) { - if(mfst == NULL){ - #define BUFF_SMALL 32 - mfst = malloc(sizeof(mf624_state_t)); - char buff[BUFF_SMALL]; - memset(buff, '\0', BUFF_SMALL); - mfst->uio_dev = "uio0"; - - strncat(buff, "/dev/", 5); - strncat(buff, mfst->uio_dev, sizeof(buff) - 6); - - mfst->device_fd = open_device(buff); - - if (mfst->device_fd < 0) { - ssSetErrorStatus(S,"open failed"); - return; - } - - if (mmap_regions(mfst) < 0) { - ssSetErrorStatus(S,"mmap_regions failed"); - return; - } - - } + if (mf624_init(NULL) != 0) + return; int ADCCMask = (int)MASK_PRM(S); - int i; + if(ADCCMask > 255 || ADCCMask < 0) { ssSetErrorStatus(S,"Invalid parameter mask, set to 0-255"); } - int ADCChannels = __builtin_popcount((uint)ADCCMask); //Counts number of set bits in ADCCMask + int ADCChannels = __builtin_popcount((uint32_t)ADCCMask); //Counts number of set bits in ADCCMask ssSetIWorkValue(S, 0, ADCChannels); @@ -206,6 +185,9 @@ static void mdlOutputs(SimStruct *S, int_T tid) int i; int res,res1; + if (mf624_check(S) != 0) + return; + // Activate trigger to start conversion mf624_read16(MFST2REG(mfst, 2, ADSTART_reg)); @@ -273,10 +255,7 @@ static void mdlOutputs(SimStruct *S, int_T tid) */ static void mdlTerminate(SimStruct *S) { - if(mfst != NULL){ - free(mfst); - mfst=NULL; - } + mf624_done(S); }