From 66ae4f251032aca6b7063353beee6c387a58418e Mon Sep 17 00:00:00 2001 From: siddhu8990 Date: Thu, 17 Dec 2015 14:48:36 +0530 Subject: Code generation for Arduino changed. DC motor added to Arduino. --- 2.3-1/etc/scilab2c.start | 3 +- 2.3-1/includes/sci2clib.h | 5 + 2.3-1/macros/ASTManagement/AST_HandleEndGenFun.bin | Bin 78824 -> 81440 bytes 2.3-1/macros/ASTManagement/AST_HandleEndGenFun.sci | 757 +++++++++++---------- 2.3-1/macros/FunctionList/FL_ExtractFuncList.sci | 2 +- 2.3-1/macros/Hardware/AVR/AVRGetTimerValue.bin | Bin 0 -> 3564 bytes 2.3-1/macros/Hardware/AVR/AVRGetTimerValue.sci | 31 + 2.3-1/macros/Hardware/AVR/AVRPWMSetDuty.bin | Bin 0 -> 2428 bytes 2.3-1/macros/Hardware/AVR/AVRPWMSetDuty.sci | 24 + 2.3-1/macros/Hardware/AVR/AVRPWMSetup.bin | Bin 5760 -> 5760 bytes 2.3-1/macros/Hardware/AVR/AVRPWMSetup.sci | 2 +- 2.3-1/macros/Hardware/AVR/AVRTimerSetup.bin | Bin 0 -> 3552 bytes 2.3-1/macros/Hardware/AVR/AVRTimerSetup.sci | 31 + 2.3-1/macros/Hardware/AVR/lib | Bin 860 -> 932 bytes 2.3-1/macros/Hardware/AVR/names | 3 + .../Scilab-Arduino/GenerateSetupFunction.bin | Bin 0 -> 4288 bytes .../Scilab-Arduino/GenerateSetupFunction.sci | 34 + .../macros/Scilab-Arduino/GetArduinoFunctions.bin | Bin 0 -> 1832 bytes .../macros/Scilab-Arduino/GetArduinoFunctions.sci | 22 + .../Scilab-Arduino/GetArduinoSetupFunctions.bin | Bin 0 -> 1456 bytes .../Scilab-Arduino/GetArduinoSetupFunctions.sci | 17 + 2.3-1/macros/Scilab-Arduino/InsertSetupInList.bin | Bin 0 -> 6068 bytes 2.3-1/macros/Scilab-Arduino/InsertSetupInList.sci | 58 ++ 2.3-1/macros/Scilab-Arduino/IsArduinoFunction.bin | Bin 0 -> 2664 bytes 2.3-1/macros/Scilab-Arduino/IsArduinoFunction.sci | 22 + .../Scilab-Arduino/IsArduinoSetupFunction.bin | Bin 0 -> 2712 bytes .../Scilab-Arduino/IsArduinoSetupFunction.sci | 22 + 2.3-1/macros/Scilab-Arduino/buildmacros.sce | 29 + 2.3-1/macros/Scilab-Arduino/lib | Bin 0 -> 772 bytes 2.3-1/macros/Scilab-Arduino/names | 6 + .../ToolInitialization/INIT_FillSCI2LibCDirs.bin | Bin 932856 -> 950836 bytes .../ToolInitialization/INIT_FillSCI2LibCDirs.sci | 101 +++ .../macros/ToolInitialization/INIT_GenFileInfo.bin | Bin 19356 -> 19628 bytes .../macros/ToolInitialization/INIT_GenFileInfo.sci | 2 +- .../ToolInitialization/INIT_LoadLibraries.bin | Bin 8844 -> 8940 bytes .../ToolInitialization/INIT_LoadLibraries.sci | 2 +- 2.3-1/macros/ToolInitialization/INIT_SCI2C.bin | Bin 23840 -> 24408 bytes 2.3-1/macros/ToolInitialization/INIT_SCI2C.sci | 9 +- .../ToolInitialization/ManageNextConversion.bin | Bin 11012 -> 11016 bytes .../ToolInitialization/ManageNextConversion.sci | 1 + 2.3-1/macros/buildmacros.sce | 3 +- 2.3-1/macros/findDeps/getAllHeaders.bin | Bin 24256 -> 24908 bytes 2.3-1/macros/findDeps/getAllHeaders.sci | 3 + 2.3-1/macros/findDeps/getAllInterfaces.bin | Bin 25584 -> 26044 bytes 2.3-1/macros/findDeps/getAllInterfaces.sci | 2 + 2.3-1/macros/findDeps/getAllSources.bin | Bin 152368 -> 153272 bytes 2.3-1/macros/findDeps/getAllSources.sci | 4 + 2.3-1/macros/findDeps/getArduinoFiles.bin | Bin 544 -> 772 bytes 2.3-1/macros/findDeps/getArduinoFiles.sci | 1 + 2.3-1/macros/runsci2c.bin | Bin 26048 -> 26392 bytes 2.3-1/macros/runsci2c.sci | 5 +- .../src/c/hardware/avr/includes/AVRPeripheralPWM.h | 27 + .../hardware/avr/interfaces/int_AVRPeripheralPWM.h | 26 + 2.3-1/src/c/hardware/avr/pwm/u8AVRADCSetups.c | 56 -- 2.3-1/src/c/hardware/avr/pwm/u8AVRPWMSetDutys.c | 39 ++ 2.3-1/src/c/hardware/avr/pwm/u8AVRPWMSetups.c | 62 ++ .../cmd_dcmotor_run/u8cmd_dcmotor_runs.c | 59 ++ .../cmd_dcmotor_setup/u8cmd_dcmotor_setups.c | 42 ++ .../scilab-arduino/default_files/sci2c_arduino.ino | 4 +- .../c/scilab-arduino/default_files/setup_arduino.h | 64 ++ .../c/scilab-arduino/includes/cmd_dcmotor_run.h | 32 + .../c/scilab-arduino/includes/cmd_dcmotor_setup.h | 33 + .../c/scilab-arduino/interfaces/int_cmd_dcmotor.h | 39 ++ 63 files changed, 1248 insertions(+), 436 deletions(-) create mode 100644 2.3-1/macros/Hardware/AVR/AVRGetTimerValue.bin create mode 100644 2.3-1/macros/Hardware/AVR/AVRGetTimerValue.sci create mode 100644 2.3-1/macros/Hardware/AVR/AVRPWMSetDuty.bin create mode 100644 2.3-1/macros/Hardware/AVR/AVRPWMSetDuty.sci create mode 100644 2.3-1/macros/Hardware/AVR/AVRTimerSetup.bin create mode 100644 2.3-1/macros/Hardware/AVR/AVRTimerSetup.sci create mode 100644 2.3-1/macros/Scilab-Arduino/GenerateSetupFunction.bin create mode 100644 2.3-1/macros/Scilab-Arduino/GenerateSetupFunction.sci create mode 100644 2.3-1/macros/Scilab-Arduino/GetArduinoFunctions.bin create mode 100644 2.3-1/macros/Scilab-Arduino/GetArduinoFunctions.sci create mode 100644 2.3-1/macros/Scilab-Arduino/GetArduinoSetupFunctions.bin create mode 100644 2.3-1/macros/Scilab-Arduino/GetArduinoSetupFunctions.sci create mode 100644 2.3-1/macros/Scilab-Arduino/InsertSetupInList.bin create mode 100644 2.3-1/macros/Scilab-Arduino/InsertSetupInList.sci create mode 100644 2.3-1/macros/Scilab-Arduino/IsArduinoFunction.bin create mode 100644 2.3-1/macros/Scilab-Arduino/IsArduinoFunction.sci create mode 100644 2.3-1/macros/Scilab-Arduino/IsArduinoSetupFunction.bin create mode 100644 2.3-1/macros/Scilab-Arduino/IsArduinoSetupFunction.sci create mode 100644 2.3-1/macros/Scilab-Arduino/buildmacros.sce create mode 100644 2.3-1/macros/Scilab-Arduino/lib create mode 100644 2.3-1/macros/Scilab-Arduino/names create mode 100644 2.3-1/src/c/hardware/avr/includes/AVRPeripheralPWM.h create mode 100644 2.3-1/src/c/hardware/avr/interfaces/int_AVRPeripheralPWM.h delete mode 100644 2.3-1/src/c/hardware/avr/pwm/u8AVRADCSetups.c create mode 100644 2.3-1/src/c/hardware/avr/pwm/u8AVRPWMSetDutys.c create mode 100644 2.3-1/src/c/hardware/avr/pwm/u8AVRPWMSetups.c create mode 100644 2.3-1/src/c/scilab-arduino/cmd_dcmotor_run/u8cmd_dcmotor_runs.c create mode 100644 2.3-1/src/c/scilab-arduino/cmd_dcmotor_setup/u8cmd_dcmotor_setups.c create mode 100644 2.3-1/src/c/scilab-arduino/default_files/setup_arduino.h create mode 100644 2.3-1/src/c/scilab-arduino/includes/cmd_dcmotor_run.h create mode 100644 2.3-1/src/c/scilab-arduino/includes/cmd_dcmotor_setup.h create mode 100644 2.3-1/src/c/scilab-arduino/interfaces/int_cmd_dcmotor.h diff --git a/2.3-1/etc/scilab2c.start b/2.3-1/etc/scilab2c.start index 47554ab5..6925900c 100644 --- a/2.3-1/etc/scilab2c.start +++ b/2.3-1/etc/scilab2c.start @@ -20,7 +20,8 @@ sci2c_GenFunctionslib = lib(pathmacros + "GeneralFunctions" + filesep()); sci2c_SymbolTablelib = lib(pathmacros + "SymbolTable" + filesep()); sci2c_ToolInitlib = lib(pathmacros + "ToolInitialization" + filesep()); sci2c_finDeps = lib(pathmacros + "findDeps" + filesep()); -sci2c_AVRlib = lib(pathmacros + "Hardware\AVR" + filesep()); +sci2c_AVRlib = lib(pathmacros + "Hardware\AVR" + filesep()); +sci2c_ScilabArduinolib = lib(pathmacros + "Scilab-Arduino" + filesep()); clear pathmacros; // Load and add help chapter diff --git a/2.3-1/includes/sci2clib.h b/2.3-1/includes/sci2clib.h index c1c82a35..3dc5820e 100644 --- a/2.3-1/includes/sci2clib.h +++ b/2.3-1/includes/sci2clib.h @@ -339,6 +339,9 @@ #include "cmd_analog_out.h" #include "int_cmd_analog_in.h" #include "cmd_analog_in.h" +#include "int_cmd_dcmotor.h" +#include "cmd_dcmotor_run.h" +#include "cmd_dcmotor_setup.h" #include "int_sleep.h" #include "sleep.h" #endif @@ -349,6 +352,8 @@ #include "AVRPeripheralGPIO.h" #include "int_AVRPeripheralADC.h" #include "AVRPeripheralADC.h" +#include "int_AVRPeripheralPWM.h" +#include "AVRPeripheralPWM.h" #include "int_AVRUtil.h" #include "AVRUtil.h" #endif diff --git a/2.3-1/macros/ASTManagement/AST_HandleEndGenFun.bin b/2.3-1/macros/ASTManagement/AST_HandleEndGenFun.bin index 8b3ce654..d5d2e4ab 100644 Binary files a/2.3-1/macros/ASTManagement/AST_HandleEndGenFun.bin and b/2.3-1/macros/ASTManagement/AST_HandleEndGenFun.bin differ diff --git a/2.3-1/macros/ASTManagement/AST_HandleEndGenFun.sci b/2.3-1/macros/ASTManagement/AST_HandleEndGenFun.sci index f9515cd1..f6ae58e7 100644 --- a/2.3-1/macros/ASTManagement/AST_HandleEndGenFun.sci +++ b/2.3-1/macros/ASTManagement/AST_HandleEndGenFun.sci @@ -46,7 +46,11 @@ ReportFileName = FileInfo.Funct(nxtscifunnumber).ReportFileName; Pass1HeaderFileName = FileInfo.Funct(nxtscifunnumber).Pass1HeaderFileName; FunInfoDatDir = FileInfo.FunctionList.FunInfoDatDir; CGblDeclarFileName = FileInfo.Funct(nxtscifunnumber).CGblDeclarFileName; -PeripheralInitListFile = FileInfo.PeripheralInitListFile; +if(SharedInfo.OutFormat == 'AVR') + PeripheralInitListFile = FileInfo.PeripheralInitListFile; +elseif (SharedInfo.OutFormat == 'Arduino') + SetupListFile = FileInfo.SetupListFile; +end Flag_FunAlreadyCalled = 0; // #RNU_RES_B @@ -67,382 +71,395 @@ global STACKDEDUG //NUT: verifica se ASTFunType e' veramente importante // #RNU_RES_E [ASTFunName,InArg,NInArg,OutArg,NOutArg] = AST_GetFuncallPrm(FileInfo,SharedInfo,ASTFunType); -if (ASTFunName == 'OpIns') - SharedInfo.SkipNextEqual = 1; - SharedInfo.Equal.Nins = SharedInfo.Equal.Nins + 1; - //NUT: Force ins to have 0 args. Double check it. - NOutArg = 0; - // #RNU_RES_B - //NUT: io aumenterei qui gli argomenti in ingresso della ins cosi qui vengono fatte tutte le modifiche del - //NUT: caso e la C_FunCall non se ne deve preoccupare, vedi se lo stesso vale per le altre funzioni - //NUT: speciali presenti nell C_FunCall. - - // 1 more input argument containing the values to be inserted in the matrix. - // #RNU_RES_E - NInArg = NInArg + 1; - InArg(NInArg).Name = SharedInfo.Equal.InArg(SharedInfo.Equal.Nins).Name; - InArg(NInArg).Scope = SharedInfo.Equal.InArg(SharedInfo.Equal.Nins).Scope; -elseif (ASTFunName == 'global') - SharedInfo.SkipNextEqual = 1; - SharedInfo.SkipNextFun = 1; - if (NInArg ~= 1) - PrintStringInfo(' ',ReportFileName,'both','y'); - PrintStringInfo('SCI2CERROR: Multiple declaration of global variables is not allowed.',ReportFileName,'both','y'); - PrintStringInfo('SCI2CERROR: See example below:',ReportFileName,'both','y'); - PrintStringInfo('SCI2CERROR: global var1 var2; //NOT ALLOWED',ReportFileName,'both','y'); - PrintStringInfo('SCI2CERROR: global var1; //ALLOWED',ReportFileName,'both','y'); - PrintStringInfo('SCI2CERROR: global var2; //ALLOWED',ReportFileName,'both','y'); - PrintStringInfo(' ',ReportFileName,'both','y'); - error(9999, 'SCI2CERROR: Multiple declaration of global variables is not allowed.'); - end - if (NOutArg ~= 1) - PrintStringInfo(' ',ReportFileName,'both','y'); - PrintStringInfo('SCI2CERROR: Unexpected number of output arguments for global function.',ReportFileName,'both','y'); - PrintStringInfo('SCI2CERROR: Please report this error to: http://forge.scilab.org/index.php/p/scilab2c/issues/',ReportFileName,'both','y'); - PrintStringInfo(' ',ReportFileName,'both','y'); - error(9999, 'SCI2CERROR: Unexpected number of output arguments for global function.'); - end -//elseif(IsAVRSupportFunction(ASTFunName)) - //Get the peripheral from function name and input arguements, insert it in - //list of used peripherals. - // PeripheralUsed=GetPeripheral(ASTFunName,InArg); - // InsertPeripheralInList(PeripheralUsed,PeripheralInitListFile); -end -// #RNU_RES_B -// -------------------------------------- -// --- Read the function annotations. --- -// -------------------------------------- -// #RNU_RES_E -if (ASTFunName == 'OpEqual') - FunTypeAnnot = ''; - FunSizeAnnot = ''; -else - [FunTypeAnnot,FunSizeAnnot] = FA_GetFunAnn(NInArg,NOutArg,ASTFunName,FileInfo,SharedInfo); -end + if (ASTFunName == 'OpIns') + SharedInfo.SkipNextEqual = 1; + SharedInfo.Equal.Nins = SharedInfo.Equal.Nins + 1; + //NUT: Force ins to have 0 args. Double check it. + NOutArg = 0; + // #RNU_RES_B + //NUT: io aumenterei qui gli argomenti in ingresso della ins cosi qui vengono fatte tutte le modifiche del + //NUT: caso e la C_FunCall non se ne deve preoccupare, vedi se lo stesso vale per le altre funzioni + //NUT: speciali presenti nell C_FunCall. -// #RNU_RES_B -// ------------------------------------------------------------------------------------------- -// --- Search for Equal Lhs and precision specifier to be applied to the current function. --- -// ------------------------------------------------------------------------------------------- -// #RNU_RES_E -[LhsArg,NLhsArg,FunPrecSpecifier,SharedInfo] = AST_GetPrecAndLhsArg(OutArg,NOutArg,ASTFunName,FunTypeAnnot,FunSizeAnnot,ASTFunType,FileInfo,SharedInfo); -//NUT: questa funzione contiene troppi parametri e mi sembra disordinata. + // 1 more input argument containing the values to be inserted in the matrix. + // #RNU_RES_E + NInArg = NInArg + 1; + InArg(NInArg).Name = SharedInfo.Equal.InArg(SharedInfo.Equal.Nins).Name; + InArg(NInArg).Scope = SharedInfo.Equal.InArg(SharedInfo.Equal.Nins).Scope; + elseif (ASTFunName == 'global') + SharedInfo.SkipNextEqual = 1; + SharedInfo.SkipNextFun = 1; + if (NInArg ~= 1) + PrintStringInfo(' ',ReportFileName,'both','y'); + PrintStringInfo('SCI2CERROR: Multiple declaration of global variables is not allowed.',ReportFileName,'both','y'); + PrintStringInfo('SCI2CERROR: See example below:',ReportFileName,'both','y'); + PrintStringInfo('SCI2CERROR: global var1 var2; //NOT ALLOWED',ReportFileName,'both','y'); + PrintStringInfo('SCI2CERROR: global var1; //ALLOWED',ReportFileName,'both','y'); + PrintStringInfo('SCI2CERROR: global var2; //ALLOWED',ReportFileName,'both','y'); + PrintStringInfo(' ',ReportFileName,'both','y'); + error(9999, 'SCI2CERROR: Multiple declaration of global variables is not allowed.'); + end + if (NOutArg ~= 1) + PrintStringInfo(' ',ReportFileName,'both','y'); + PrintStringInfo('SCI2CERROR: Unexpected number of output arguments for global function.',ReportFileName,'both','y'); + PrintStringInfo('SCI2CERROR: Please report this error to: http://forge.scilab.org/index.php/p/scilab2c/issues/',ReportFileName,'both','y'); + PrintStringInfo(' ',ReportFileName,'both','y'); + error(9999, 'SCI2CERROR: Unexpected number of output arguments for global function.'); + end + //elseif(IsAVRSupportFunction(ASTFunName)) + //Get the peripheral from function name and input arguements, insert it in + //list of used peripherals. + // PeripheralUsed=GetPeripheral(ASTFunName,InArg); + // InsertPeripheralInList(PeripheralUsed,PeripheralInitListFile); + end -// #RNU_RES_B -// -------------------------------- -// --- Input Arguments Section. --- -// -------------------------------- -// --- Get Input Arguments info from their numerical value or from the symbol table. --- -// #RNU_RES_E -if (ASTFunName == 'global') - [TBFlagfound,TBType,TBSize,TBValue,TBFindLike,TBDimension,TBScope] = ... - ST_GetSymbolInfo(InArg(1).Name,FileInfo,SharedInfo); - if (TBFlagfound == 1) - InArg(1).Type = TBType; - InArg(1).Size = TBSize; - InArg(1).Value = TBValue; - InArg(1).FindLike = TBFindLike; - InArg(1).Dimension = TBDimension; - InArg(1).Scope = TBScope; - IndentLevelGlobal = 0; //NUT: forced always to 1 - FlagExt = 1; - C_GenDeclarations(InArg(1),CGblDeclarFileName,IndentLevelGlobal,ReportFileName,FlagExt,SharedInfo.ResizeApproach); - else - // #RNU_RES_B - // That means it is the first time we encounter - // this global variable and in C this means that - // we don't have to do nothing. - // #RNU_RES_E - // SharedInfo.SkipNextFun = SharedInfo.SkipNextFun + 1; - SharedInfo.SkipNextFun = 1; - - InArg(1).Type = 'GBLToBeDefined'; - InArg(1).Size(1) = 'GBLToBeDefined'; - InArg(1).Size(2) = 'GBLToBeDefined'; - InArg(1).Value = %nan; - InArg(1).FindLike = %nan; - InArg(1).Dimension = %nan; - InArg(1).Scope = 'Global'; - - // #RNU_RES_B - PrintStringInfo('***Putting global variable in the symbol table***',ReportFileName,'file','y'); - PrintStringInfo(' Symbol ""'+InArg(1).Name+'""',ReportFileName,'file','y'); - - PrintStringInfo(' Type: '+InArg(1).Type,ReportFileName,'file','y'); - PrintStringInfo(' Size(1): '+string(InArg(1).Size(1)),ReportFileName,'file','y'); - PrintStringInfo(' Size(2): '+string(InArg(1).Size(2)),ReportFileName,'file','y'); - PrintStringInfo(' Value: '+string(InArg(1).Value),ReportFileName,'file','y'); - PrintStringInfo(' FindLike: '+string(InArg(1).FindLike),ReportFileName,'file','y'); - PrintStringInfo(' Dimension: '+string(InArg(1).Dimension),ReportFileName,'file','y'); - PrintStringInfo(' Scope: '+string(InArg(1).Scope),ReportFileName,'file','y'); - PrintStringInfo(' ',ReportFileName,'file','y'); - // #RNU_RES_E - - ST_Set(InArg(1).Name,... - InArg(1).Type,... - InArg(1).Size,... - InArg(1).Value,... - InArg(1).FindLike,... - InArg(1).Dimension,... - FileInfo.GlobalVarFileName); - end -else - [InArg,SharedInfo] = ST_GetInArgInfo(InArg,NInArg,FileInfo,SharedInfo); -end + // #RNU_RES_B + // -------------------------------------- + // --- Read the function annotations. --- + // -------------------------------------- + // #RNU_RES_E + if (ASTFunName == 'OpEqual') + FunTypeAnnot = ''; + FunSizeAnnot = ''; + else + [FunTypeAnnot,FunSizeAnnot] = FA_GetFunAnn(NInArg,NOutArg,ASTFunName,FileInfo,SharedInfo); + end -// #RNU_RES_B -// ------------------------------------------------------------------- -// --- Change info of Input Argument according to resize approach. --- -// ------------------------------------------------------------------- -//RNU toglimi nella versione da dare ad hartes. -//RNU per ora gestisco solo la resize all con tutte realloc. -//RNU global variables are still coded with fixed size. -// #RNU_RES_E -if (SharedInfo.ResizeApproach=='REALLOC_ALL_RESIZE_ALL') - for cntin = 1:NInArg - if ((InArg(cntin).Dimension > 0)) - // if ((InArg(cntin).Dimension > 0) & (InArg(cntin).Scope ~= 'Global')) - InArg(cntin).Size(1) = '__'+InArg(cntin).Name+'Size[0]'; - InArg(cntin).Size(2) = '__'+InArg(cntin).Name+'Size[1]'; - end - //#RNUREM_MERNU vedi se la seguente fa casino l'ho aggiunta in modo che agia=ones(1,3) sia generata come realloc ma non ho verificato. - tmpscope = InArg(cntin).Scope; - lengthNumber = length('Number_'); - if (part(tmpscope,1:lengthNumber) == 'Number_') - //#RNUREM_ME RNU il problema e' che ones(3,1) allora l'output e' 3,1 e come faccio a trasformare 3 e 1 in simboli in modo tale che realloco anziche' allocare - InArg(cntin).Value = %nan; //RNU non va bene dove per esempio hai problemi di 1:3:4 se al posto dei numeri metti nan ti impalli - //#RNUREM_ME Credo che dove c'e' uan allocazione secca ones(3,1) non vada lasciata cosi' ma tutto vada ricondotto a realloc - //#RNUREM_ME quindi devo vedere nella dichiarazione delle variabili come forzare la dichiarazione dei null pointer. - //#RNUREM_ME successivamente devo vedere come fare a riscrivere la size dell'output. - else - end - end -end + // #RNU_RES_B + // ------------------------------------------------------------------------------------------- + // --- Search for Equal Lhs and precision specifier to be applied to the current function. --- + // ------------------------------------------------------------------------------------------- + // #RNU_RES_E + [LhsArg,NLhsArg,FunPrecSpecifier,SharedInfo] = AST_GetPrecAndLhsArg(OutArg,NOutArg,ASTFunName,FunTypeAnnot,FunSizeAnnot,ASTFunType,FileInfo,SharedInfo); + //NUT: questa funzione contiene troppi parametri e mi sembra disordinata. -// #RNU_RES_B -// --------------------------------- -// --- Output Arguments Section. --- -// --------------------------------- -// --- Update Out arg structure with info stored in the function annotations. --- -// #RNU_RES_E -if (ASTFunName == 'OpEqual') - for cntin = 1:NInArg - OutArg(cntin).Type = InArg(cntin).Type; - OutArg(cntin).Size = InArg(cntin).Size; - OutArg(cntin).Dimension = InArg(cntin).Dimension; - OutArg(cntin).Value = InArg(cntin).Value; - OutArg(cntin).FindLike = InArg(cntin).FindLike; - //NUT: forse qui occorre aggiungere lo scope che dovrebbe essere local or global. - //NUT: per ora lo scope viene settato da AST_ParseEqualStruct - end -elseif ((ASTFunName == 'OpMinus') & (NInArg == 1) & (InArg(1).Dimension == 0)&(InArg(1).Scope == 'Number')) - // #RNU_RES_B - // --- Manage OpMinus when applied to scalars. --- - // -1 is not translated as tmp = OpMinus(1), but - // it is considered as a single entity "-1" - // #RNU_RES_E - SharedInfo.SkipNextFun = 1; //RN: SISTEMAMI - OutArg(1).Type = InArg(1).Type; - OutArg(1).Size = InArg(1).Size; - OutArg(1).Dimension = InArg(1).Dimension; - OutArg(1).Value = -InArg(1).Value; - OutArg(1).FindLike = InArg(1).FindLike; - OutArg(1).Scope = 'Number_'+InArg(1).Type; -elseif ((ASTFunName == 'float') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) - // #RNU_RES_B - // --- Manage OpMinus when applied to scalars. --- - // -1 is not translated as tmp = OpMinus(1), but - // it is considered as a single entity "-1" - // #RNU_RES_E - SharedInfo.SkipNextFun = 1; //RN: SISTEMAMI - OutArg(1).Type = InArg(1).Type; - OutArg(1).Size = InArg(1).Size; - OutArg(1).Dimension = InArg(1).Dimension; - OutArg(1).Value = InArg(1).Value; - OutArg(1).FindLike = InArg(1).FindLike; - OutArg(1).Scope = 'Number_s'; -elseif ((ASTFunName == 'double') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) - // #RNU_RES_B - // --- Manage OpMinus when applied to scalars. --- - // -1 is not translated as tmp = OpMinus(1), but - // it is considered as a single entity "-1" - // #RNU_RES_E - SharedInfo.SkipNextFun = 1; - //RN: SISTEMAMI - SharedInfo.SkipNextFun = 1; //RN: SISTEMAMI - OutArg(1).Type = InArg(1).Type; - OutArg(1).Size = InArg(1).Size; - OutArg(1).Dimension = InArg(1).Dimension; - OutArg(1).Value = InArg(1).Value; - OutArg(1).FindLike = InArg(1).FindLike; - OutArg(1).Scope = 'Number_d'; -else - OutArg = FA_GetOutArgInfo(InArg,NInArg,OutArg,NOutArg,SharedInfo,FunPrecSpecifier,FunTypeAnnot,FunSizeAnnot,ReportFileName); -end + // #RNU_RES_B + // -------------------------------- + // --- Input Arguments Section. --- + // -------------------------------- + // --- Get Input Arguments info from their numerical value or from the symbol table. --- + // #RNU_RES_E + if (ASTFunName == 'global') + [TBFlagfound,TBType,TBSize,TBValue,TBFindLike,TBDimension,TBScope] = ... + ST_GetSymbolInfo(InArg(1).Name,FileInfo,SharedInfo); + if (TBFlagfound == 1) + InArg(1).Type = TBType; + InArg(1).Size = TBSize; + InArg(1).Value = TBValue; + InArg(1).FindLike = TBFindLike; + InArg(1).Dimension = TBDimension; + InArg(1).Scope = TBScope; + IndentLevelGlobal = 0; //NUT: forced always to 1 + FlagExt = 1; + C_GenDeclarations(InArg(1),CGblDeclarFileName,IndentLevelGlobal,ReportFileName,FlagExt,SharedInfo.ResizeApproach); + else + // #RNU_RES_B + // That means it is the first time we encounter + // this global variable and in C this means that + // we don't have to do nothing. + // #RNU_RES_E + // SharedInfo.SkipNextFun = SharedInfo.SkipNextFun + 1; + SharedInfo.SkipNextFun = 1; -// #RNU_RES_B -// --- Generate the names for the output arguments. --- -// Update of OutArg.Name and OutArg.Scope fields. -// #RNU_RES_E -if ((ASTFunName == 'OpMinus') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) - OutArg(1).Name = string(OutArg(1).Value); -elseif ((ASTFunName == 'float') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) - OutArg(1).Name = string(OutArg(1).Value); -elseif ((ASTFunName == 'double') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) - OutArg(1).Name = string(OutArg(1).Value); -else - [OutArg,SharedInfo] = GenOutArgNames(ASTFunName,InArg,NInArg,OutArg,NOutArg,LhsArg,NLhsArg,FileInfo,SharedInfo); -end + InArg(1).Type = 'GBLToBeDefined'; + InArg(1).Size(1) = 'GBLToBeDefined'; + InArg(1).Size(2) = 'GBLToBeDefined'; + InArg(1).Value = %nan; + InArg(1).FindLike = %nan; + InArg(1).Dimension = %nan; + InArg(1).Scope = 'Global'; -// #RNU_RES_B -// --- Push in the AST stack the Output arguments. --- -// #RNU_RES_E -if (ASTFunName == 'OpEqual') - // Do nothing -else - for counteroutargs = 1:NOutArg - tmppushstack = OutArg(counteroutargs).Scope+': '+OutArg(counteroutargs).Name; - // #RNU_RES_B - PrintStringInfo(' Pushing in the AST stack: ""'+tmppushstack+'"".',ReportFileName,'file','y'); - // #RNU_RES_E - AST_PushASTStack(tmppushstack); - end -end + // #RNU_RES_B + PrintStringInfo('***Putting global variable in the symbol table***',ReportFileName,'file','y'); + PrintStringInfo(' Symbol ""'+InArg(1).Name+'""',ReportFileName,'file','y'); -// #RNU_RES_B -//NUT: verificare se si puo' accorpare qualcosa qui sotto -//RN: non capisco come mai analizzo lo scope dopo che faccio il push nello stack dove lo utilizzo!!! -// --- Scope analysis of the output arguments. --- -// #RNU_RES_E -if (ASTFunName == 'OpMinus' & NInArg == 1 & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) - // Scope already set above. -elseif (ASTFunName == 'float' & NInArg == 1 & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) - // Scope already set above. -elseif (ASTFunName == 'double' & NInArg == 1 & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) - // Scope already set above. -else - OutArg = ST_AnalyzeScope(OutArg,NOutArg,FileInfo,SharedInfo); -end - -//#RNUREM_ME --- Check if the current function is handling for counter variables. --- -[OutArg,SharedInfo] = ST_InsForCntVars(InArg,NInArg,OutArg,NOutArg,ASTFunName,FileInfo,SharedInfo); - -//#RNUREM_ME --- Store the while condition variable (if any). --- -SharedInfo = GetWhileCondVariable(OutArg,NOutArg,ASTFunName,FileInfo,SharedInfo); - -//#RNUREM_ME --- Update Symbol Table with output arguments. --- -if ((ASTFunName == 'OpMinus') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) - //#RNUREM_ME A number is not inserted in the symbol table. -elseif ((ASTFunName == 'float') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) - //#RNUREM_ME A number is not inserted in the symbol table. -elseif ((ASTFunName == 'double') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) - //#RNUREM_ME A number is not inserted in the symbol table. -else - ST_InsOutArg(OutArg,NOutArg,FileInfo,SharedInfo,'all'); -end -//#RNUREM_ME NUT: per risparmiare tempo di esecuzione puoi mettere delle if sulle funzioni che devono -//#RNUREM_ME NUT: essere skippate. - -//#RNU_RES_B -// -------------------------------------------- -// --- Generate the C name of the function. --- -// -------------------------------------------- -//#RNU_RES_E - -CFunName = C_GenerateFunName(ASTFunName,InArg,NInArg,OutArg,NOutArg); -//#RNU_RES_B -PrintStringInfo(' C Function Name: '+CFunName,ReportFileName,'file','y'); -// ------------------------------------------------------------------------- -// --- Determine which library the function belongs to: USER2C or SCI2C. --- -// ------------------------------------------------------------------------- -//#RNU_RES_E -if SCI2Cfileexist(FileInfo.SCI2CLibCAnnFun,ASTFunName+'.ann') - LibTypeInfo = 'SCI2C'; -else - LibTypeInfo = 'USER2C'; -end - -//#RNU_RES_B -// ------------------------------------------------------------------------------------ -// --- Check whether the function has been already called in the current .sci file. --- -// ------------------------------------------------------------------------------------ -//#RNU_RES_E -if (sum(SharedInfo.CFunctsAlreadyCalled == CFunName) == 1) - Flag_FunAlreadyCalled = 1; -else - - //#RNUREM_ME Add the C function name to the list of C functions called in the current .sci file. - SharedInfo.CFunctsAlreadyCalled(size(SharedInfo.CFunctsAlreadyCalled,1)+1) = CFunName; -end - -//#RNU_RES_B -// ---------------------------------- -// --- Generate FunInfo dat file. --- -// ---------------------------------- -//NUT: questo .dat deve essere generato sempre perche' cambiano i nomi degli argomenti mentre il resto dovrebbe -//NUT: essere tutto uguale -//NUT: magari posso fare una funzione che inserisce solo i campi diversi e fa un check su quelli che -//NUT: dovrebbero essere identici. -//#RNU_RES_E -GenCFunDatFiles(ASTFunName,FunPrecSpecifier,FunTypeAnnot,FunSizeAnnot,InArg,NInArg,OutArg,NOutArg,CFunName,LibTypeInfo,FunInfoDatDir); - -//#RNU_RES_B -// ----------------------------------- -// --- Update SCI2C Function List. --- -// ----------------------------------- -// Functions that are not already available in C are stored -// in the SCI2C Function List and converted in C at the end of -// the translation of the current .sci file. -//NUT: il problema della d0d0OpEqual dovrebbe essere legato al fatto che cerco di fare la opequal legata alla ins... -//NUT: devo evitare di scriveral dentro la lsista delle funzioni da tradurre. -//#RNU_RES_E -SharedInfo = FL_UpdateToBeConv(ASTFunName,CFunName,FunPrecSpecifier,FunTypeAnnot,FunSizeAnnot,InArg,NInArg,OutArg,NOutArg,FileInfo,SharedInfo); - -//#RNU_RES_B -// ----------------------------------------------- -// --- Check on common input/output arguments. --- -// ----------------------------------------------- -//#RNU_RES_E -if (((ASTFunName=='OpEqual') & (SharedInfo.SkipNextEqual == 1)) | ... - SharedInfo.SkipNextFun > 0 | ... - ((sum(mtlb_strcmp(ASTFunName,SharedInfo.Annotations.DataPrec)) > 0) & (SharedInfo.SkipNextPrec == 1))) - // Do nothing -else - AST_CheckCommonInOutArgs(InArg,NInArg,OutArg,NOutArg,ReportFileName); -end - -//#RNU_RES_B -// ----------------------------- -// --- C Generation Section. --- -// ----------------------------- -// --- Load FunInfo structure. --- -//#RNU_RES_E -FunInfoDatFileName = fullfile(FunInfoDatDir,CFunName+'.dat'); -load(FunInfoDatFileName,'FunInfo'); - -//#RNU_RES_B -// --- Generate include. --- -//#RNU_RES_E -if ((Flag_FunAlreadyCalled == 0) & (FunInfo.LibTypeInfo == 'USER2C') & (SharedInfo.NextCFunName ~= CFunName)) - // (SharedInfo.NextCFunName ~= CFunName) I don't want an include in the same file. Ex. in main.h I don't want include "main.h" - // #RNU_RES_B - PrintStringInfo('Adding include',ReportFileName,'file','y'); - PrintStringInfo('#include ""'+CFunName+'.h""',... - ReportFileName,'file','y'); - // #RNU_RES_E - PrintStringInfo('#include ""'+CFunName+'.h""',... - Pass1HeaderFileName,'file','y'); -end - -//#RNU_RES_B -// --- Generate the C code for the current function. --- -//#RNU_RES_E -FlagCall = 1; -SharedInfo = C_Funcall(FunInfo,FileInfo,SharedInfo,FlagCall); -//#RNU_RES_B -//NUT: anziche farla fare alla cfuncall l'aggiornamento delle skip metti qui una funzione dedicata a cio' -//NUT: e' piu' ordinato. -//#RNU_RES_E + PrintStringInfo(' Type: '+InArg(1).Type,ReportFileName,'file','y'); + PrintStringInfo(' Size(1): '+string(InArg(1).Size(1)),ReportFileName,'file','y'); + PrintStringInfo(' Size(2): '+string(InArg(1).Size(2)),ReportFileName,'file','y'); + PrintStringInfo(' Value: '+string(InArg(1).Value),ReportFileName,'file','y'); + PrintStringInfo(' FindLike: '+string(InArg(1).FindLike),ReportFileName,'file','y'); + PrintStringInfo(' Dimension: '+string(InArg(1).Dimension),ReportFileName,'file','y'); + PrintStringInfo(' Scope: '+string(InArg(1).Scope),ReportFileName,'file','y'); + PrintStringInfo(' ',ReportFileName,'file','y'); + // #RNU_RES_E + + ST_Set(InArg(1).Name,... + InArg(1).Type,... + InArg(1).Size,... + InArg(1).Value,... + InArg(1).FindLike,... + InArg(1).Dimension,... + FileInfo.GlobalVarFileName); + end + else + [InArg,SharedInfo] = ST_GetInArgInfo(InArg,NInArg,FileInfo,SharedInfo); + end + + // #RNU_RES_B + // ------------------------------------------------------------------- + // --- Change info of Input Argument according to resize approach. --- + // ------------------------------------------------------------------- + //RNU toglimi nella versione da dare ad hartes. + //RNU per ora gestisco solo la resize all con tutte realloc. + //RNU global variables are still coded with fixed size. + // #RNU_RES_E + if (SharedInfo.ResizeApproach=='REALLOC_ALL_RESIZE_ALL') + for cntin = 1:NInArg + if ((InArg(cntin).Dimension > 0)) + // if ((InArg(cntin).Dimension > 0) & (InArg(cntin).Scope ~= 'Global')) + InArg(cntin).Size(1) = '__'+InArg(cntin).Name+'Size[0]'; + InArg(cntin).Size(2) = '__'+InArg(cntin).Name+'Size[1]'; + end + //#RNUREM_MERNU vedi se la seguente fa casino l'ho aggiunta in modo che agia=ones(1,3) sia generata come realloc ma non ho verificato. + tmpscope = InArg(cntin).Scope; + lengthNumber = length('Number_'); + if (part(tmpscope,1:lengthNumber) == 'Number_') + //#RNUREM_ME RNU il problema e' che ones(3,1) allora l'output e' 3,1 e come faccio a trasformare 3 e 1 in simboli in modo tale che realloco anziche' allocare + InArg(cntin).Value = %nan; //RNU non va bene dove per esempio hai problemi di 1:3:4 se al posto dei numeri metti nan ti impalli + //#RNUREM_ME Credo che dove c'e' uan allocazione secca ones(3,1) non vada lasciata cosi' ma tutto vada ricondotto a realloc + //#RNUREM_ME quindi devo vedere nella dichiarazione delle variabili come forzare la dichiarazione dei null pointer. + //#RNUREM_ME successivamente devo vedere come fare a riscrivere la size dell'output. + else + end + end + end + + // #RNU_RES_B + // --------------------------------- + // --- Output Arguments Section. --- + // --------------------------------- + // --- Update Out arg structure with info stored in the function annotations. --- + // #RNU_RES_E + if (ASTFunName == 'OpEqual') + for cntin = 1:NInArg + OutArg(cntin).Type = InArg(cntin).Type; + OutArg(cntin).Size = InArg(cntin).Size; + OutArg(cntin).Dimension = InArg(cntin).Dimension; + OutArg(cntin).Value = InArg(cntin).Value; + OutArg(cntin).FindLike = InArg(cntin).FindLike; + //NUT: forse qui occorre aggiungere lo scope che dovrebbe essere local or global. + //NUT: per ora lo scope viene settato da AST_ParseEqualStruct + end + elseif ((ASTFunName == 'OpMinus') & (NInArg == 1) & (InArg(1).Dimension == 0)&(InArg(1).Scope == 'Number')) + // #RNU_RES_B + // --- Manage OpMinus when applied to scalars. --- + // -1 is not translated as tmp = OpMinus(1), but + // it is considered as a single entity "-1" + // #RNU_RES_E + SharedInfo.SkipNextFun = 1; //RN: SISTEMAMI + OutArg(1).Type = InArg(1).Type; + OutArg(1).Size = InArg(1).Size; + OutArg(1).Dimension = InArg(1).Dimension; + OutArg(1).Value = -InArg(1).Value; + OutArg(1).FindLike = InArg(1).FindLike; + OutArg(1).Scope = 'Number_'+InArg(1).Type; + elseif ((ASTFunName == 'float') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) + // #RNU_RES_B + // --- Manage OpMinus when applied to scalars. --- + // -1 is not translated as tmp = OpMinus(1), but + // it is considered as a single entity "-1" + // #RNU_RES_E + SharedInfo.SkipNextFun = 1; //RN: SISTEMAMI + OutArg(1).Type = InArg(1).Type; + OutArg(1).Size = InArg(1).Size; + OutArg(1).Dimension = InArg(1).Dimension; + OutArg(1).Value = InArg(1).Value; + OutArg(1).FindLike = InArg(1).FindLike; + OutArg(1).Scope = 'Number_s'; + elseif ((ASTFunName == 'double') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) + // #RNU_RES_B + // --- Manage OpMinus when applied to scalars. --- + // -1 is not translated as tmp = OpMinus(1), but + // it is considered as a single entity "-1" + // #RNU_RES_E + SharedInfo.SkipNextFun = 1; + //RN: SISTEMAMI + SharedInfo.SkipNextFun = 1; //RN: SISTEMAMI + OutArg(1).Type = InArg(1).Type; + OutArg(1).Size = InArg(1).Size; + OutArg(1).Dimension = InArg(1).Dimension; + OutArg(1).Value = InArg(1).Value; + OutArg(1).FindLike = InArg(1).FindLike; + OutArg(1).Scope = 'Number_d'; + else + OutArg = FA_GetOutArgInfo(InArg,NInArg,OutArg,NOutArg,SharedInfo,FunPrecSpecifier,FunTypeAnnot,FunSizeAnnot,ReportFileName); + end + + // #RNU_RES_B + // --- Generate the names for the output arguments. --- + // Update of OutArg.Name and OutArg.Scope fields. + // #RNU_RES_E + if ((ASTFunName == 'OpMinus') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) + OutArg(1).Name = string(OutArg(1).Value); + elseif ((ASTFunName == 'float') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) + OutArg(1).Name = string(OutArg(1).Value); + elseif ((ASTFunName == 'double') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) + OutArg(1).Name = string(OutArg(1).Value); + else + [OutArg,SharedInfo] = GenOutArgNames(ASTFunName,InArg,NInArg,OutArg,NOutArg,LhsArg,NLhsArg,FileInfo,SharedInfo); + end + + // #RNU_RES_B + // --- Push in the AST stack the Output arguments. --- + // #RNU_RES_E + if (ASTFunName == 'OpEqual') + // Do nothing + else + for counteroutargs = 1:NOutArg + tmppushstack = OutArg(counteroutargs).Scope+': '+OutArg(counteroutargs).Name; + // #RNU_RES_B + PrintStringInfo(' Pushing in the AST stack: ""'+tmppushstack+'"".',ReportFileName,'file','y'); + // #RNU_RES_E + AST_PushASTStack(tmppushstack); + end + end + + // #RNU_RES_B + //NUT: verificare se si puo' accorpare qualcosa qui sotto + //RN: non capisco come mai analizzo lo scope dopo che faccio il push nello stack dove lo utilizzo!!! + // --- Scope analysis of the output arguments. --- + // #RNU_RES_E + if (ASTFunName == 'OpMinus' & NInArg == 1 & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) + // Scope already set above. + elseif (ASTFunName == 'float' & NInArg == 1 & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) + // Scope already set above. + elseif (ASTFunName == 'double' & NInArg == 1 & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) + // Scope already set above. + else + OutArg = ST_AnalyzeScope(OutArg,NOutArg,FileInfo,SharedInfo); + end + + //#RNUREM_ME --- Check if the current function is handling for counter variables. --- + [OutArg,SharedInfo] = ST_InsForCntVars(InArg,NInArg,OutArg,NOutArg,ASTFunName,FileInfo,SharedInfo); + + //#RNUREM_ME --- Store the while condition variable (if any). --- + SharedInfo = GetWhileCondVariable(OutArg,NOutArg,ASTFunName,FileInfo,SharedInfo); + + //#RNUREM_ME --- Update Symbol Table with output arguments. --- + if ((ASTFunName == 'OpMinus') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) + //#RNUREM_ME A number is not inserted in the symbol table. + elseif ((ASTFunName == 'float') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) + //#RNUREM_ME A number is not inserted in the symbol table. + elseif ((ASTFunName == 'double') & (NInArg == 1) & (InArg(1).Dimension == 0) & (InArg(1).Scope == 'Number')) + //#RNUREM_ME A number is not inserted in the symbol table. + else + ST_InsOutArg(OutArg,NOutArg,FileInfo,SharedInfo,'all'); + end + //#RNUREM_ME NUT: per risparmiare tempo di esecuzione puoi mettere delle if sulle funzioni che devono + //#RNUREM_ME NUT: essere skippate. + + //#RNU_RES_B + // -------------------------------------------- + // --- Generate the C name of the function. --- + // -------------------------------------------- + //#RNU_RES_E + + CFunName = C_GenerateFunName(ASTFunName,InArg,NInArg,OutArg,NOutArg); + //#RNU_RES_B + PrintStringInfo(' C Function Name: '+CFunName,ReportFileName,'file','y'); + if(IsArduinoFunction(ASTFunName)) + if(IsArduinoSetupFunction(ASTFunName)) + //If current function is an arduino setup function (like 'dc_motor_setup'), it + //should not be converted and inserted here. It is inserted in a list now and + //added to 'setup_arduino.c' later + InsertSetupInList(CFunName,InArg,NInArg,SetupListFile,'Setup'); + SharedInfo.SkipNextFun = SharedInfo.SkipNextFun + 1; + else //Currnet arduino function is not a setup function, so init function must be added + InsertSetupInList(ASTFunName,InArg,NInArg,SetupListFile,'Init'); + end + end + + // ------------------------------------------------------------------------- + // --- Determine which library the function belongs to: USER2C or SCI2C. --- + // ------------------------------------------------------------------------- + //#RNU_RES_E + if SCI2Cfileexist(FileInfo.SCI2CLibCAnnFun,ASTFunName+'.ann') + LibTypeInfo = 'SCI2C'; + else + LibTypeInfo = 'USER2C'; + end + + //#RNU_RES_B + // ------------------------------------------------------------------------------------ + // --- Check whether the function has been already called in the current .sci file. --- + // ------------------------------------------------------------------------------------ + //#RNU_RES_E + if (sum(SharedInfo.CFunctsAlreadyCalled == CFunName) == 1) + Flag_FunAlreadyCalled = 1; + else + + //#RNUREM_ME Add the C function name to the list of C functions called in the current .sci file. + SharedInfo.CFunctsAlreadyCalled(size(SharedInfo.CFunctsAlreadyCalled,1)+1) = CFunName; + end + + //#RNU_RES_B + // ---------------------------------- + // --- Generate FunInfo dat file. --- + // ---------------------------------- + //NUT: questo .dat deve essere generato sempre perche' cambiano i nomi degli argomenti mentre il resto dovrebbe + //NUT: essere tutto uguale + //NUT: magari posso fare una funzione che inserisce solo i campi diversi e fa un check su quelli che + //NUT: dovrebbero essere identici. + //#RNU_RES_E + GenCFunDatFiles(ASTFunName,FunPrecSpecifier,FunTypeAnnot,FunSizeAnnot,InArg,NInArg,OutArg,NOutArg,CFunName,LibTypeInfo,FunInfoDatDir); + + //#RNU_RES_B + // ----------------------------------- + // --- Update SCI2C Function List. --- + // ----------------------------------- + // Functions that are not already available in C are stored + // in the SCI2C Function List and converted in C at the end of + // the translation of the current .sci file. + //NUT: il problema della d0d0OpEqual dovrebbe essere legato al fatto che cerco di fare la opequal legata alla ins... + //NUT: devo evitare di scriveral dentro la lsista delle funzioni da tradurre. + //#RNU_RES_E + SharedInfo = FL_UpdateToBeConv(ASTFunName,CFunName,FunPrecSpecifier,FunTypeAnnot,FunSizeAnnot,InArg,NInArg,OutArg,NOutArg,FileInfo,SharedInfo); + + //#RNU_RES_B + // ----------------------------------------------- + // --- Check on common input/output arguments. --- + // ----------------------------------------------- + //#RNU_RES_E + if (((ASTFunName=='OpEqual') & (SharedInfo.SkipNextEqual == 1)) | ... + SharedInfo.SkipNextFun > 0 | ... + ((sum(mtlb_strcmp(ASTFunName,SharedInfo.Annotations.DataPrec)) > 0) & (SharedInfo.SkipNextPrec == 1))) + // Do nothing + else + AST_CheckCommonInOutArgs(InArg,NInArg,OutArg,NOutArg,ReportFileName); + end + + //#RNU_RES_B + // ----------------------------- + // --- C Generation Section. --- + // ----------------------------- + // --- Load FunInfo structure. --- + //#RNU_RES_E + FunInfoDatFileName = fullfile(FunInfoDatDir,CFunName+'.dat'); + load(FunInfoDatFileName,'FunInfo'); + + //#RNU_RES_B + // --- Generate include. --- + //#RNU_RES_E + if ((Flag_FunAlreadyCalled == 0) & (FunInfo.LibTypeInfo == 'USER2C') & (SharedInfo.NextCFunName ~= CFunName)) + // (SharedInfo.NextCFunName ~= CFunName) I don't want an include in the same file. Ex. in main.h I don't want include "main.h" + // #RNU_RES_B + PrintStringInfo('Adding include',ReportFileName,'file','y'); + PrintStringInfo('#include ""'+CFunName+'.h""',... + ReportFileName,'file','y'); + // #RNU_RES_E + PrintStringInfo('#include ""'+CFunName+'.h""',... + Pass1HeaderFileName,'file','y'); + end + + //#RNU_RES_B + // --- Generate the C code for the current function. --- + //#RNU_RES_E + FlagCall = 1; + SharedInfo = C_Funcall(FunInfo,FileInfo,SharedInfo,FlagCall); + //#RNU_RES_B + //NUT: anziche farla fare alla cfuncall l'aggiornamento delle skip metti qui una funzione dedicata a cio' + //NUT: e' piu' ordinato. + //#RNU_RES_E endfunction diff --git a/2.3-1/macros/FunctionList/FL_ExtractFuncList.sci b/2.3-1/macros/FunctionList/FL_ExtractFuncList.sci index 9e951d9c..cbc14655 100644 --- a/2.3-1/macros/FunctionList/FL_ExtractFuncList.sci +++ b/2.3-1/macros/FunctionList/FL_ExtractFuncList.sci @@ -34,7 +34,7 @@ SCI2CNInArgCheck(argn(2),5,5); tmppwd = pwd(); cd(FunctionDir); // funfiles = ls(); -funfiles = listfiles(); +funfiles = listfiles(); cd(tmppwd); NFunFiles = size(funfiles,1); diff --git a/2.3-1/macros/Hardware/AVR/AVRGetTimerValue.bin b/2.3-1/macros/Hardware/AVR/AVRGetTimerValue.bin new file mode 100644 index 00000000..26b4b47e Binary files /dev/null and b/2.3-1/macros/Hardware/AVR/AVRGetTimerValue.bin differ diff --git a/2.3-1/macros/Hardware/AVR/AVRGetTimerValue.sci b/2.3-1/macros/Hardware/AVR/AVRGetTimerValue.sci new file mode 100644 index 00000000..ab0146aa --- /dev/null +++ b/2.3-1/macros/Hardware/AVR/AVRGetTimerValue.sci @@ -0,0 +1,31 @@ +function counts = AVRGetTimerValue(timer) +// Function to set the prescalar for timer. +// +// Calling Sequence +// AVRgetTimerValue(timer, prescalar) +// +// Parameters +// timer: timer to be set up (0,1,2) +// prescalar: prescalar to be used for generating PWM waveform (0-7) +// ***Refer datasheet for more description about timer +// +// Description +// This function sets prescalr for timers. 'timer' decides which of the +// three (0,1,2) timers available to be used. The 'prescalar' is needed for +// deciding timer clock. Select appropriate prescalar depending on MCU clock +// and requirement. +// +// +// Examples +// AVRTimerSetup(0,1) //Timer 0 with no scaling +// +// See also +// AVRGetTimerValue +// +// Authors +// Siddhesh Wani +// + +// This is curretly dummy function. It provides no functionality but is required +// for providing support for generating C code for AVR. +endfunction diff --git a/2.3-1/macros/Hardware/AVR/AVRPWMSetDuty.bin b/2.3-1/macros/Hardware/AVR/AVRPWMSetDuty.bin new file mode 100644 index 00000000..f3c9e3e4 Binary files /dev/null and b/2.3-1/macros/Hardware/AVR/AVRPWMSetDuty.bin differ diff --git a/2.3-1/macros/Hardware/AVR/AVRPWMSetDuty.sci b/2.3-1/macros/Hardware/AVR/AVRPWMSetDuty.sci new file mode 100644 index 00000000..0042540a --- /dev/null +++ b/2.3-1/macros/Hardware/AVR/AVRPWMSetDuty.sci @@ -0,0 +1,24 @@ +function AVRPWMSetDuty(timer, duty) +// Function to set duty for PWM of AVR +// +// Calling Sequence +// AVRPWMSetDuty(uint8 timer, uint8 duty) +// +// Parameters +// timer: timer to be used for PWM generation (0,1,2) +// duty: duty for PWM waveform (0-100) +// +// Description +// This function sets duty for PWM waveform according to given parameters. +// +// Examples +// AVRPWMSetDuty(0,10) //Sets 10% duty for timer 0 output. +// +// Authors +// Siddhesh Wani +// +// + +// This is curretly dummy function. It provides no functionality but is required +// for providing support for generating C code for AVR. +endfunction diff --git a/2.3-1/macros/Hardware/AVR/AVRPWMSetup.bin b/2.3-1/macros/Hardware/AVR/AVRPWMSetup.bin index 6ae56fda..971e43ee 100644 Binary files a/2.3-1/macros/Hardware/AVR/AVRPWMSetup.bin and b/2.3-1/macros/Hardware/AVR/AVRPWMSetup.bin differ diff --git a/2.3-1/macros/Hardware/AVR/AVRPWMSetup.sci b/2.3-1/macros/Hardware/AVR/AVRPWMSetup.sci index 7e1c234f..1bee050d 100644 --- a/2.3-1/macros/Hardware/AVR/AVRPWMSetup.sci +++ b/2.3-1/macros/Hardware/AVR/AVRPWMSetup.sci @@ -2,7 +2,7 @@ function AVRPWMSetup(timer, prescalar, waveform_mode, output_mode) // Function to initialise PWM of AVR // // Calling Sequence -// AVRSetupADC(timer, prescalar, waveform_mode, output_mode) +// AVRPWMSetup(timer, prescalar, waveform_mode, output_mode) // // Parameters // timer: timer to be used for PWM generation (0,1,2) diff --git a/2.3-1/macros/Hardware/AVR/AVRTimerSetup.bin b/2.3-1/macros/Hardware/AVR/AVRTimerSetup.bin new file mode 100644 index 00000000..65e8f454 Binary files /dev/null and b/2.3-1/macros/Hardware/AVR/AVRTimerSetup.bin differ diff --git a/2.3-1/macros/Hardware/AVR/AVRTimerSetup.sci b/2.3-1/macros/Hardware/AVR/AVRTimerSetup.sci new file mode 100644 index 00000000..6316cdd7 --- /dev/null +++ b/2.3-1/macros/Hardware/AVR/AVRTimerSetup.sci @@ -0,0 +1,31 @@ +function AVRTimerSetup(timer, prescalar) +// Function to set the prescalar for timer. +// +// Calling Sequence +// AVRTimerSetup(timer, prescalar) +// +// Parameters +// timer: timer to be set up (0,1,2) +// prescalar: prescalar to be used for generating PWM waveform (0-7) +// ***Refer datasheet for more description about timer +// +// Description +// This function sets prescalr for timers. 'timer' decides which of the +// three (0,1,2) timers available to be used. The 'prescalar' is needed for +// deciding timer clock. Select appropriate prescalar depending on MCU clock +// and requirement. +// +// +// Examples +// AVRTimerSetup(0,1) //Timer 0 with no scaling +// +// See also +// AVRGetTimerValue +// +// Authors +// Siddhesh Wani +// + +// This is curretly dummy function. It provides no functionality but is required +// for providing support for generating C code for AVR. +endfunction diff --git a/2.3-1/macros/Hardware/AVR/lib b/2.3-1/macros/Hardware/AVR/lib index aa4d6113..b1986824 100644 Binary files a/2.3-1/macros/Hardware/AVR/lib and b/2.3-1/macros/Hardware/AVR/lib differ diff --git a/2.3-1/macros/Hardware/AVR/names b/2.3-1/macros/Hardware/AVR/names index afd171ec..126da77a 100644 --- a/2.3-1/macros/Hardware/AVR/names +++ b/2.3-1/macros/Hardware/AVR/names @@ -2,8 +2,11 @@ AVRADCSetup AVRDigitalIn AVRDigitalOut AVRDigitalSetup +AVRGetTimerValue +AVRPWMSetDuty AVRPWMSetup AVRReadADC +AVRTimerSetup GetAVRSupportFunctions GetPeripheral InsertPeripheralInList diff --git a/2.3-1/macros/Scilab-Arduino/GenerateSetupFunction.bin b/2.3-1/macros/Scilab-Arduino/GenerateSetupFunction.bin new file mode 100644 index 00000000..7a5052dc Binary files /dev/null and b/2.3-1/macros/Scilab-Arduino/GenerateSetupFunction.bin differ diff --git a/2.3-1/macros/Scilab-Arduino/GenerateSetupFunction.sci b/2.3-1/macros/Scilab-Arduino/GenerateSetupFunction.sci new file mode 100644 index 00000000..db96e190 --- /dev/null +++ b/2.3-1/macros/Scilab-Arduino/GenerateSetupFunction.sci @@ -0,0 +1,34 @@ +function GenerateSetupFunction(FileInfo) + +SetupListFile = FileInfo.SetupListFile; + +load(SetupListFile,'SetupList'); + +SetupArduinoFile = fullfile(FileInfo.CStyleOutCCCodeDir,'setup_arduino.c'); +C_SCI2CHeader(SetupArduinoFile); + +PrintStringInfo('#include ""setup_arduino.h""',SetupArduinoFile,'file','y'); +PrintStringInfo(' ',SetupArduinoFile,'file','y'); +PrintStringInfo('int setup_arduino()',SetupArduinoFile,'file','y'); +PrintStringInfo('{',SetupArduinoFile,'file','y'); + +nelements=size(SetupList); + +for i=1:nelements + funcall = ' '; + funcall = funcall + SetupList(i)(1); + funcall = funcall + '('; + NInArg = size(SetupList(i))-1; + for j=1:NInArg-1 + funcall = funcall + SetupList(i)(j+1); + funcall = funcall + ', '; + end + funcall = funcall + SetupList(i)(NInArg+1); + funcall = funcall + ');'; + PrintStringInfo(funcall,SetupArduinoFile,'file','y'); +end +PrintStringInfo(' ',SetupArduinoFile,'file','y'); +PrintStringInfo(' return (0); ',SetupArduinoFile,'file','y'); +PrintStringInfo('}',SetupArduinoFile,'file','y'); + +endfunction diff --git a/2.3-1/macros/Scilab-Arduino/GetArduinoFunctions.bin b/2.3-1/macros/Scilab-Arduino/GetArduinoFunctions.bin new file mode 100644 index 00000000..82b0d456 Binary files /dev/null and b/2.3-1/macros/Scilab-Arduino/GetArduinoFunctions.bin differ diff --git a/2.3-1/macros/Scilab-Arduino/GetArduinoFunctions.sci b/2.3-1/macros/Scilab-Arduino/GetArduinoFunctions.sci new file mode 100644 index 00000000..19d59ca4 --- /dev/null +++ b/2.3-1/macros/Scilab-Arduino/GetArduinoFunctions.sci @@ -0,0 +1,22 @@ +function ArduinoFunctions = GetArduinoFunctions() +// ----------------------------------------------------------------- +// Get list of Arduino functions supported +// +// Input data: +// None +// +// Output data: +// List of Arduino functions supported +// +// Author: Siddhesh Wani +// ----------------------------------------------------------------- + +ArduinoFunctions = [ + "cmd_digital_out" + "cmd_digital_in" + "cmd_analog_out" + "cmd_analog_in" + "cmd_dcmotor_setup" + "cmd_dcmotor_run"]; + +endfunction diff --git a/2.3-1/macros/Scilab-Arduino/GetArduinoSetupFunctions.bin b/2.3-1/macros/Scilab-Arduino/GetArduinoSetupFunctions.bin new file mode 100644 index 00000000..048da7d7 Binary files /dev/null and b/2.3-1/macros/Scilab-Arduino/GetArduinoSetupFunctions.bin differ diff --git a/2.3-1/macros/Scilab-Arduino/GetArduinoSetupFunctions.sci b/2.3-1/macros/Scilab-Arduino/GetArduinoSetupFunctions.sci new file mode 100644 index 00000000..f377d385 --- /dev/null +++ b/2.3-1/macros/Scilab-Arduino/GetArduinoSetupFunctions.sci @@ -0,0 +1,17 @@ +function ArduinoSetupFunctions = GetArduinoSetupFunctions() +// ----------------------------------------------------------------- +// Get list of Arduino setup functions supported +// +// Input data: +// None +// +// Output data: +// List of Arduino setup functions supported +// +// Author: Siddhesh Wani +// ----------------------------------------------------------------- + +ArduinoSetupFunctions = [ + "cmd_dcmotor_setup"]; + +endfunction diff --git a/2.3-1/macros/Scilab-Arduino/InsertSetupInList.bin b/2.3-1/macros/Scilab-Arduino/InsertSetupInList.bin new file mode 100644 index 00000000..41c1a3fe Binary files /dev/null and b/2.3-1/macros/Scilab-Arduino/InsertSetupInList.bin differ diff --git a/2.3-1/macros/Scilab-Arduino/InsertSetupInList.sci b/2.3-1/macros/Scilab-Arduino/InsertSetupInList.sci new file mode 100644 index 00000000..5c6be8bb --- /dev/null +++ b/2.3-1/macros/Scilab-Arduino/InsertSetupInList.sci @@ -0,0 +1,58 @@ +function InsertSetupInList(FunName,InArg,NInArg,SetupListFile,FunType) + +load(SetupListFile,'SetupList'); + +//Check first if current input function already exists in the list +nelements = size(SetupList); +found=%F; + +if(FunType=='Setup') + for i=1:nelements + if(SetupList(i)(1) == FunName) + for j=1:NInArg + if(SetupList(i)(j+1) ~= InArg(j).Name) + found = %F + break; + else + found = %T; + end + end + end + if (found == %T) + break; //One match found. No need to check further. + end + end + + if(found == %F) + temp = list(FunName); + for i=1:NInArg + temp($+1) = InArg(i).Name; + end + end + SetupList($+1) = temp; +elseif((FunType=='Init')&((FunName=='cmd_digital_out')|(FunName=='cmd_analog_out')|(FunName=='cmd_digital_in'))) + for i=1:nelements + if(SetupList(i)(1) == FunName) + if(SetupList(i)(2) == InArg(2).Name) + found = %T + break; + else + found = %F; + end + end + end + + if(found == %F) + temp = list('pinMode'); + temp($+1) = InArg(2).Name; + if ((FunName=='cmd_digital_out')|(FunName=='cmd_analog_out')) + temp($+1) = 'OUTPUT'; + elseif (FunName == 'cmd_digital_in') + temp($+1) = 'INPUT'; + end + end + SetupList($+1) = temp; +end + +save(SetupListFile,'SetupList'); +endfunction diff --git a/2.3-1/macros/Scilab-Arduino/IsArduinoFunction.bin b/2.3-1/macros/Scilab-Arduino/IsArduinoFunction.bin new file mode 100644 index 00000000..5dbfacad Binary files /dev/null and b/2.3-1/macros/Scilab-Arduino/IsArduinoFunction.bin differ diff --git a/2.3-1/macros/Scilab-Arduino/IsArduinoFunction.sci b/2.3-1/macros/Scilab-Arduino/IsArduinoFunction.sci new file mode 100644 index 00000000..de1c770b --- /dev/null +++ b/2.3-1/macros/Scilab-Arduino/IsArduinoFunction.sci @@ -0,0 +1,22 @@ +function Output = IsArduinoFunction(FunName) +// ----------------------------------------------------------------- +// Check whether input function name is an Arduino function or not. +// +// Input data: +// FunName: Name of the function to be checked +// +// Output data: +// Output: True or False depending whether given function is an +// Arduino function or not +// +// Author: Siddhesh Wani +// ----------------------------------------------------------------- + +//Get list of supported functions for Arduino +ArduinoFunctions = GetArduinoFunctions(); + +//Check whether input function is present in above list or not +FunNameInArduino = members(FunName,ArduinoFunctions); +Output = bool2s(FunNameInArduino~=0); + +endfunction diff --git a/2.3-1/macros/Scilab-Arduino/IsArduinoSetupFunction.bin b/2.3-1/macros/Scilab-Arduino/IsArduinoSetupFunction.bin new file mode 100644 index 00000000..8948d1a3 Binary files /dev/null and b/2.3-1/macros/Scilab-Arduino/IsArduinoSetupFunction.bin differ diff --git a/2.3-1/macros/Scilab-Arduino/IsArduinoSetupFunction.sci b/2.3-1/macros/Scilab-Arduino/IsArduinoSetupFunction.sci new file mode 100644 index 00000000..fae7f625 --- /dev/null +++ b/2.3-1/macros/Scilab-Arduino/IsArduinoSetupFunction.sci @@ -0,0 +1,22 @@ +function Output = IsArduinoSetupFunction(FunName) +// ----------------------------------------------------------------- +// Check whether input function name is an Arduino setup function or not. +// +// Input data: +// FunName: Name of the function to be checked +// +// Output data: +// Output: True or False depending whether given function is an +// Arduino setup function or not +// +// Author: Siddhesh Wani +// ----------------------------------------------------------------- + +//Get list of supported functions for Arduino +ArduinoSetupFunctions = GetArduinoSetupFunctions(); + +//Check whether input function is present in above list or not +FunNameInArduinoSetup = members(FunName,ArduinoSetupFunctions); +Output = bool2s(FunNameInArduinoSetup~=0); + +endfunction diff --git a/2.3-1/macros/Scilab-Arduino/buildmacros.sce b/2.3-1/macros/Scilab-Arduino/buildmacros.sce new file mode 100644 index 00000000..dfeb4755 --- /dev/null +++ b/2.3-1/macros/Scilab-Arduino/buildmacros.sce @@ -0,0 +1,29 @@ +// This file is released into the public domain + +Directories = [ "ASTManagement", ... + "CCodeGeneration", ... + "ErrorMessages", ... + "findDeps", ... + "FunctionAnnotation", ... + "FunctionList", ... + "GeneralFunctions", ... + "SymbolTable", ... + "ToolInitialization"... + "Hardware/AVR"... + "Scilab-Arduino" ]; + + +current_path_buildmacros = get_absolute_file_path("buildmacros.sce"); + +for K=1:size(Directories,"*") + myfile = current_path_buildmacros + filesep() + Directories(K) + filesep() + "buildmacros.sce"; + if isfile(myfile) then + exec(myfile); + end +end + +clear current_path_buildmacros; + +tbx_build_macros(TOOLBOX_NAME, get_absolute_file_path('buildmacros.sce')); + +clear tbx_build_macros; diff --git a/2.3-1/macros/Scilab-Arduino/lib b/2.3-1/macros/Scilab-Arduino/lib new file mode 100644 index 00000000..bd0cb707 Binary files /dev/null and b/2.3-1/macros/Scilab-Arduino/lib differ diff --git a/2.3-1/macros/Scilab-Arduino/names b/2.3-1/macros/Scilab-Arduino/names new file mode 100644 index 00000000..55eb6fef --- /dev/null +++ b/2.3-1/macros/Scilab-Arduino/names @@ -0,0 +1,6 @@ +GenerateSetupFunction +GetArduinoFunctions +GetArduinoSetupFunctions +InsertSetupInList +IsArduinoFunction +IsArduinoSetupFunction diff --git a/2.3-1/macros/ToolInitialization/INIT_FillSCI2LibCDirs.bin b/2.3-1/macros/ToolInitialization/INIT_FillSCI2LibCDirs.bin index f790c5e8..be0c48fb 100644 Binary files a/2.3-1/macros/ToolInitialization/INIT_FillSCI2LibCDirs.bin and b/2.3-1/macros/ToolInitialization/INIT_FillSCI2LibCDirs.bin differ diff --git a/2.3-1/macros/ToolInitialization/INIT_FillSCI2LibCDirs.sci b/2.3-1/macros/ToolInitialization/INIT_FillSCI2LibCDirs.sci index c6423531..c3981a49 100644 --- a/2.3-1/macros/ToolInitialization/INIT_FillSCI2LibCDirs.sci +++ b/2.3-1/macros/ToolInitialization/INIT_FillSCI2LibCDirs.sci @@ -3951,6 +3951,56 @@ INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCAnnFunDir,ClassName,GeneralReport,E INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCFLFunDir,ClassName,GeneralReport,ExtensionCFuncListFun); +//------------------------------------ +//---- Class cmd_dcmotor_setup ------- +//------------------------------------ +ClassName = 'cmd_dcmotor_setup'; + +// --- Class Annotation. --- +PrintStringInfo(' Adding Class: '+ClassName+'.',GeneralReport,'file','y'); +ClassFileName = fullfile(SCI2CLibCAnnClsDir,ClassName+ExtensionCAnnCls); +PrintStringInfo('NIN= 5',ClassFileName,'file','y'); +PrintStringInfo('NOUT= 1 ',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).TP= ''u8''',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).SZ(1)= ''1''',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).SZ(2)= ''1''',ClassFileName,'file','y'); + +// --- Function List Class. --- +ClassFileName = fullfile(SCI2CLibCFLClsDir,ClassName+ExtensionCFuncListCls); +PrintStringInfo('d0d0d0d0d0'+ArgSeparator+'u80',ClassFileName,'file','y'); + +// --- Annotation Function And Function List Function. --- +FunctionName = 'cmd_dcmotor_setup'; +PrintStringInfo(' Adding Function: '+FunctionName+'.',GeneralReport,'file','y'); +INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCAnnFunDir,ClassName,GeneralReport,ExtensionCAnnFun); +INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCFLFunDir,ClassName,GeneralReport,ExtensionCFuncListFun); + +//------------------------------------ +//---- Class cmd_dcmotor_run ------- +//------------------------------------ +ClassName = 'cmd_dcmotor_run'; + +// --- Class Annotation. --- +PrintStringInfo(' Adding Class: '+ClassName+'.',GeneralReport,'file','y'); +ClassFileName = fullfile(SCI2CLibCAnnClsDir,ClassName+ExtensionCAnnCls); +PrintStringInfo('NIN= 3',ClassFileName,'file','y'); +PrintStringInfo('NOUT= 1 ',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).TP= ''u8''',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).SZ(1)= ''1''',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).SZ(2)= ''1''',ClassFileName,'file','y'); + +// --- Function List Class. --- +ClassFileName = fullfile(SCI2CLibCFLClsDir,ClassName+ExtensionCFuncListCls); +PrintStringInfo('d0d0d0'+ArgSeparator+'u80',ClassFileName,'file','y'); +PrintStringInfo('d0d0i160'+ArgSeparator+'u80',ClassFileName,'file','y'); + +// --- Annotation Function And Function List Function. --- +FunctionName = 'cmd_dcmotor_run'; +PrintStringInfo(' Adding Function: '+FunctionName+'.',GeneralReport,'file','y'); +INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCAnnFunDir,ClassName,GeneralReport,ExtensionCAnnFun); +INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCFLFunDir,ClassName,GeneralReport,ExtensionCFuncListFun); + + //------------------------------------ //---- Class Sleep ------------------- //------------------------------------ @@ -4109,6 +4159,57 @@ INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCAnnFunDir,ClassName,GeneralReport,E INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCFLFunDir,ClassName,GeneralReport,ExtensionCFuncListFun); +//------------------------------------ +//---- Class AVRPWMSetup ------------- +//------------------------------------ +ClassName = 'AVRPWMSetup'; + +// --- Class Annotation. --- +PrintStringInfo(' Adding Class: '+ClassName+'.',GeneralReport,'file','y'); +ClassFileName = fullfile(SCI2CLibCAnnClsDir,ClassName+ExtensionCAnnCls); +PrintStringInfo('NIN= 4',ClassFileName,'file','y'); +PrintStringInfo('NOUT= 1 ',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).TP= ''u8''',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).SZ(1)= ''1''',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).SZ(2)= ''1''',ClassFileName,'file','y'); + +// --- Function List Class. --- +ClassFileName = fullfile(SCI2CLibCFLClsDir,ClassName+ExtensionCFuncListCls); +PrintStringInfo('d0d0d0d0'+ArgSeparator+'u80',ClassFileName,'file','y'); + + +// --- Annotation Function And Function List Function. --- +FunctionName = 'AVRPWMSetup'; +PrintStringInfo(' Adding Function: '+FunctionName+'.',GeneralReport,'file','y'); +INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCAnnFunDir,ClassName,GeneralReport,ExtensionCAnnFun); +INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCFLFunDir,ClassName,GeneralReport,ExtensionCFuncListFun); + +//------------------------------------ +//---- Class AVRPWMSetDuty ----------- +//------------------------------------ +ClassName = 'AVRPWMSetDuty'; + +// --- Class Annotation. --- +PrintStringInfo(' Adding Class: '+ClassName+'.',GeneralReport,'file','y'); +ClassFileName = fullfile(SCI2CLibCAnnClsDir,ClassName+ExtensionCAnnCls); +PrintStringInfo('NIN= 2',ClassFileName,'file','y'); +PrintStringInfo('NOUT= 1 ',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).TP= ''u8''',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).SZ(1)= ''1''',ClassFileName,'file','y'); +PrintStringInfo('OUT(1).SZ(2)= ''1''',ClassFileName,'file','y'); + +// --- Function List Class. --- +ClassFileName = fullfile(SCI2CLibCFLClsDir,ClassName+ExtensionCFuncListCls); +PrintStringInfo('d0d0'+ArgSeparator+'u80',ClassFileName,'file','y'); + + +// --- Annotation Function And Function List Function. --- +FunctionName = 'AVRPWMSetDuty'; +PrintStringInfo(' Adding Function: '+FunctionName+'.',GeneralReport,'file','y'); +INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCAnnFunDir,ClassName,GeneralReport,ExtensionCAnnFun); +INIT_GenAnnFLFunctions(FunctionName,SCI2CLibCFLFunDir,ClassName,GeneralReport,ExtensionCFuncListFun); + + // //////////////////////////////////////////// // /////PARTE INTRODOTTA DA ALBERTO MOREA // ///////////////////////////////////////////// diff --git a/2.3-1/macros/ToolInitialization/INIT_GenFileInfo.bin b/2.3-1/macros/ToolInitialization/INIT_GenFileInfo.bin index 8f114a72..a8d47222 100644 Binary files a/2.3-1/macros/ToolInitialization/INIT_GenFileInfo.bin and b/2.3-1/macros/ToolInitialization/INIT_GenFileInfo.bin differ diff --git a/2.3-1/macros/ToolInitialization/INIT_GenFileInfo.sci b/2.3-1/macros/ToolInitialization/INIT_GenFileInfo.sci index 753509e3..21fe7a72 100644 --- a/2.3-1/macros/ToolInitialization/INIT_GenFileInfo.sci +++ b/2.3-1/macros/ToolInitialization/INIT_GenFileInfo.sci @@ -113,5 +113,5 @@ FileInfo.MakefileFilename = fullfile(FileInfo.CStyleOutCCCodeDir,'Makefile'); //----Hardware related----- //------------------------- FileInfo.PeripheralInitListFile = fullfile(FileInfo.WorkingDir,'PeripheralInit.dat'); - +FileInfo.SetupListFile = fullfile(FileInfo.WorkingDir,'SetupList.dat'); endfunction diff --git a/2.3-1/macros/ToolInitialization/INIT_LoadLibraries.bin b/2.3-1/macros/ToolInitialization/INIT_LoadLibraries.bin index 4cf02836..c85aac6e 100644 Binary files a/2.3-1/macros/ToolInitialization/INIT_LoadLibraries.bin and b/2.3-1/macros/ToolInitialization/INIT_LoadLibraries.bin differ diff --git a/2.3-1/macros/ToolInitialization/INIT_LoadLibraries.sci b/2.3-1/macros/ToolInitialization/INIT_LoadLibraries.sci index 1ef9ee00..28eb34f5 100644 --- a/2.3-1/macros/ToolInitialization/INIT_LoadLibraries.sci +++ b/2.3-1/macros/ToolInitialization/INIT_LoadLibraries.sci @@ -49,7 +49,7 @@ ToBeConverted(1).CFunctionName = SharedInfo.NextCFunName; // --- Read the list of library functions available. --- [SCI2CAvailableC,SCI2CNElem] = FL_ExtractFuncList(FileInfo.SCI2CLibCFLFun,FileInfo.SCI2CLibCFLCls,... SharedInfo.Annotations.FUNCLASS,SharedInfo.Extension.FuncListClasses,FileInfo.GeneralReport); - +//disp (SCI2CAvailable); [USER2CAvailableC,USER2CNElem] = FL_ExtractFuncList(FileInfo.USER2CLibCFLFun,FileInfo.USER2CLibCFLCls,... SharedInfo.Annotations.FUNCLASS,SharedInfo.Extension.FuncListClasses,FileInfo.GeneralReport); diff --git a/2.3-1/macros/ToolInitialization/INIT_SCI2C.bin b/2.3-1/macros/ToolInitialization/INIT_SCI2C.bin index 72623b28..c6141d61 100644 Binary files a/2.3-1/macros/ToolInitialization/INIT_SCI2C.bin and b/2.3-1/macros/ToolInitialization/INIT_SCI2C.bin differ diff --git a/2.3-1/macros/ToolInitialization/INIT_SCI2C.sci b/2.3-1/macros/ToolInitialization/INIT_SCI2C.sci index 0340d6ff..6dde05de 100644 --- a/2.3-1/macros/ToolInitialization/INIT_SCI2C.sci +++ b/2.3-1/macros/ToolInitialization/INIT_SCI2C.sci @@ -147,8 +147,13 @@ anscounter = 0; //-------------------------------------------- //---Hardware related initialisation---------- //-------------------------------------------- -PeripheralList = list(); -save(FileInfo.PeripheralInitListFile, 'PeripheralList'); +if (OutFormat == 'AVR') + PeripheralList = list(); + save(FileInfo.PeripheralInitListFile, 'PeripheralList'); +elseif (OutFormat == 'Arduino') + SetupList = list(); + save(FileInfo.SetupListFile, 'SetupList'); +end endfunction // #RNU_RES_B diff --git a/2.3-1/macros/ToolInitialization/ManageNextConversion.bin b/2.3-1/macros/ToolInitialization/ManageNextConversion.bin index a34ee4f6..bf43562a 100644 Binary files a/2.3-1/macros/ToolInitialization/ManageNextConversion.bin and b/2.3-1/macros/ToolInitialization/ManageNextConversion.bin differ diff --git a/2.3-1/macros/ToolInitialization/ManageNextConversion.sci b/2.3-1/macros/ToolInitialization/ManageNextConversion.sci index 04ec9dbc..a1524766 100644 --- a/2.3-1/macros/ToolInitialization/ManageNextConversion.sci +++ b/2.3-1/macros/ToolInitialization/ManageNextConversion.sci @@ -49,6 +49,7 @@ C_FinalizeCode(FileInfo,SharedInfo); // --- Identify the next function to translate. --- // ------------------------------------------------ SharedInfo.NFilesToTranslate = SharedInfo.NFilesToTranslate - 1; + if (SharedInfo.NFilesToTranslate >= 1) // Remove the translated C function from the ToBeConverted list ToBeConverted(1) = []; diff --git a/2.3-1/macros/buildmacros.sce b/2.3-1/macros/buildmacros.sce index 627e6384..dfeb4755 100644 --- a/2.3-1/macros/buildmacros.sce +++ b/2.3-1/macros/buildmacros.sce @@ -9,7 +9,8 @@ Directories = [ "ASTManagement", ... "GeneralFunctions", ... "SymbolTable", ... "ToolInitialization"... - "Hardware" ]; + "Hardware/AVR"... + "Scilab-Arduino" ]; current_path_buildmacros = get_absolute_file_path("buildmacros.sce"); diff --git a/2.3-1/macros/findDeps/getAllHeaders.bin b/2.3-1/macros/findDeps/getAllHeaders.bin index 50ce832f..4ed973e7 100644 Binary files a/2.3-1/macros/findDeps/getAllHeaders.bin and b/2.3-1/macros/findDeps/getAllHeaders.bin differ diff --git a/2.3-1/macros/findDeps/getAllHeaders.sci b/2.3-1/macros/findDeps/getAllHeaders.sci index 697a0fa6..7cddce29 100644 --- a/2.3-1/macros/findDeps/getAllHeaders.sci +++ b/2.3-1/macros/findDeps/getAllHeaders.sci @@ -134,11 +134,14 @@ function allHeaders = getAllHeaders(OutFormat) "src/c/scilab-arduino/includes/cmd_digital_in.h" "src/c/scilab-arduino/includes/cmd_analog_out.h" "src/c/scilab-arduino/includes/cmd_analog_in.h" + "src/c/scilab-arduino/includes/cmd_dcmotor_setup.h" + "src/c/scilab-arduino/includes/cmd_dcmotor_run.h" "src/c/scilab-arduino/includes/sleep.h"]; AVR_headers = [ "src/c/hardware/avr/includes/AVRPeripheralGPIO.h" "src/c/hardware/avr/includes/AVRPeripheralADC.h" + "src/c/hardware/avr/includes/AVRPeripheralPWM.h" "src/c/hardware/avr/includes/AVRUtil.h" ]; diff --git a/2.3-1/macros/findDeps/getAllInterfaces.bin b/2.3-1/macros/findDeps/getAllInterfaces.bin index c28ac331..368b84ab 100644 Binary files a/2.3-1/macros/findDeps/getAllInterfaces.bin and b/2.3-1/macros/findDeps/getAllInterfaces.bin differ diff --git a/2.3-1/macros/findDeps/getAllInterfaces.sci b/2.3-1/macros/findDeps/getAllInterfaces.sci index 14249d08..78138093 100644 --- a/2.3-1/macros/findDeps/getAllInterfaces.sci +++ b/2.3-1/macros/findDeps/getAllInterfaces.sci @@ -127,12 +127,14 @@ function allInterfaces = getAllInterfaces(OutFormat) "src/c/scilab-arduino/interfaces/int_cmd_digital_in.h" "src/c/scilab-arduino/interfaces/int_cmd_analog_out.h" "src/c/scilab-arduino/interfaces/int_cmd_analog_in.h" + "src/c/scilab-arduino/interfaces/int_cmd_dcmotor.h" "src/c/scilab-arduino/interfaces/int_sleep.h"]; //Interface files required for "AVR" output AVR_interfaces = [ "src/c/hardware/avr/interfaces/int_AVRPeripheralGPIO.h" "src/c/hardware/avr/interfaces/int_AVRPeripheralADC.h" + "src/c/hardware/avr/interfaces/int_AVRPeripheralADC.h" "src/c/hardware/avr/interfaces/int_AVRUtil.h" ]; diff --git a/2.3-1/macros/findDeps/getAllSources.bin b/2.3-1/macros/findDeps/getAllSources.bin index b1591ac4..a81e474e 100644 Binary files a/2.3-1/macros/findDeps/getAllSources.bin and b/2.3-1/macros/findDeps/getAllSources.bin differ diff --git a/2.3-1/macros/findDeps/getAllSources.sci b/2.3-1/macros/findDeps/getAllSources.sci index 325d4b23..c8d6d0b4 100644 --- a/2.3-1/macros/findDeps/getAllSources.sci +++ b/2.3-1/macros/findDeps/getAllSources.sci @@ -822,6 +822,8 @@ function allSources = getAllSources(OutFormat) "src/c/scilab-arduino/cmd_digital_in/u8cmd_digital_ins.c" "src/c/scilab-arduino/cmd_analog_out/u8cmd_analog_outs.c" "src/c/scilab-arduino/cmd_analog_in/u8cmd_analog_ins.c" + "src/c/scilab-arduino/cmd_dcmotor_setup/u8cmd_dcmotor_setups.c" + "src/c/scilab-arduino/cmd_dcmotor_run/u8cmd_dcmotor_runs.c" "src/c/scilab-arduino/sleep/u16sleeps.c"]; //Files to be inserted only if output format selected is 'AVR'. @@ -831,6 +833,8 @@ function allSources = getAllSources(OutFormat) "src/c/hardware/avr/gpio/u8AVRDigitalIns.c" "src/c/hardware/avr/adc/u8AVRADCSetups.c" "src/c/hardware/avr/adc/u8AVRReadADCs.c" + "src/c/hardware/avr/pwm/u8AVRPWMSetups.c" + "src/c/hardware/avr/pwm/u8AVRPWMSetDutys.c" "src/c/hardware/avr/util/u16AVRSleeps.c" ]; diff --git a/2.3-1/macros/findDeps/getArduinoFiles.bin b/2.3-1/macros/findDeps/getArduinoFiles.bin index f8937bfe..651b8f3d 100644 Binary files a/2.3-1/macros/findDeps/getArduinoFiles.bin and b/2.3-1/macros/findDeps/getArduinoFiles.bin differ diff --git a/2.3-1/macros/findDeps/getArduinoFiles.sci b/2.3-1/macros/findDeps/getArduinoFiles.sci index a51d9b52..89033d00 100644 --- a/2.3-1/macros/findDeps/getArduinoFiles.sci +++ b/2.3-1/macros/findDeps/getArduinoFiles.sci @@ -12,6 +12,7 @@ function arduinoFiles = getArduinoFiles() arduinoFiles = [ + "src/c/scilab-arduino/default_files/setup_arduino.h" "src/c/scilab-arduino/default_files/Makefile" "src/c/scilab-arduino/default_files/sci2c_arduino.ino"]; endfunction diff --git a/2.3-1/macros/runsci2c.bin b/2.3-1/macros/runsci2c.bin index afe6e7d6..6c09823e 100644 Binary files a/2.3-1/macros/runsci2c.bin and b/2.3-1/macros/runsci2c.bin differ diff --git a/2.3-1/macros/runsci2c.sci b/2.3-1/macros/runsci2c.sci index 91587031..4620705c 100644 --- a/2.3-1/macros/runsci2c.sci +++ b/2.3-1/macros/runsci2c.sci @@ -133,12 +133,15 @@ end //default folder, else generate makefile for standalone c code if (OutFormat == 'Arduino') + + GenerateSetupFunction(FileInfo); mkdir(SCI2COutputPath+"/arduino/"); mkdir(SCI2COutputPath+"/arduino/sci2c_arduino"); //Copy arduino makefile arduinoFiles = SCI2CHOME + "/" + getArduinoFiles(); PrintStepInfo('Copying arduino files', FileInfo.GeneralReport,'both'); - for i = 1:size(arduinoFiles, "*") + copyfile(arduinoFiles(1), SCI2COutputPath); + for i = 2:size(arduinoFiles, "*") // DEBUG only //disp("Copying "+arduinoFiles(i)+" in "+SCI2COutputPath+"/arduino/sci2carduino"); copyfile(arduinoFiles(i), SCI2COutputPath+"/arduino/sci2c_arduino/"); diff --git a/2.3-1/src/c/hardware/avr/includes/AVRPeripheralPWM.h b/2.3-1/src/c/hardware/avr/includes/AVRPeripheralPWM.h new file mode 100644 index 00000000..80b29f3a --- /dev/null +++ b/2.3-1/src/c/hardware/avr/includes/AVRPeripheralPWM.h @@ -0,0 +1,27 @@ +//This file defines functions prototypes related to PWM. +// +// Authors +// Siddhesh Wani +// + +#ifndef __AVRPERIPHERALPWM_H__ +#define __AVRPERIPHERALPWM_H__ + +#include +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +//Function prototypes +uint8 u8AVRPWMSetups(uint8 timer, uint8 prescalar, uint8 waveform_mode, uint8 output_mode); + +uint8 u8AVRPWMSetDuty(uint8 timer, uint8 duty); + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* !__AVRPERIPHERALPWM_H__ */ diff --git a/2.3-1/src/c/hardware/avr/interfaces/int_AVRPeripheralPWM.h b/2.3-1/src/c/hardware/avr/interfaces/int_AVRPeripheralPWM.h new file mode 100644 index 00000000..73686190 --- /dev/null +++ b/2.3-1/src/c/hardware/avr/interfaces/int_AVRPeripheralPWM.h @@ -0,0 +1,26 @@ +//This file defines constants corresponding to gpios. +// +// Authors +// Siddhesh Wani +// + +#ifndef __INT_AVRPERIPHERALPWM_H__ +#define __INT_AVRPERIPHERALPWM_H__ + +#include +#include "AVRPeripheralPWM.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define d0d0d0d0AVRPWMSetupu80(in1,in2) u8AVRPWMSetups((uint8) in1,\ + (uint8) in2, (uint8) in3, (uint8) in4); + +#define d0d0AVRPWMSetDuty(in1,in2) u8AVRPWMSetDutys((uint8) in1, (uint8) in2); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* !__AVRPERIPHERALADC_H__ */ diff --git a/2.3-1/src/c/hardware/avr/pwm/u8AVRADCSetups.c b/2.3-1/src/c/hardware/avr/pwm/u8AVRADCSetups.c deleted file mode 100644 index cd1d12bb..00000000 --- a/2.3-1/src/c/hardware/avr/pwm/u8AVRADCSetups.c +++ /dev/null @@ -1,56 +0,0 @@ -// Function to initialise PWM of AVR -// -// Calling Sequence -// u8AVRPWMSetups(uint8 timer, uint8 prescalar, uint8 waveform_mode, uint8 output_mode) -// -// Parameters -// timer: timer to be used for PWM generation (0,1,2) -// prescalar: prescalar to be used for generating PWM waveform (0-7) -// waveform_mode: decides type of waveform generation -// 0 -> Normal mode -// 1 -> Phase correct mode -// 2 -> CTC mode -// 3 -> Fase PWM mode -// output_mode: decides the compare output mode. (0-3) -// behaviour of the output is different for different inputs -// depending upon 'waveform_mode' chosen. -// ***Refer datasheet for more description about above modes -// -// Description -// This function initialises PWM of AVR with given parameters. 'timer' -// decides which of the three (0,1,2) timers available to be used. The -// 'prescalar' is needed for deciding PWM clock. Select appropriate prescalar -// depending on MCU clock. Choose required pwmmode using 'waveform_generation' -// and 'output_mode'. Please refer datasheet for more description of 'wafefom_mode' -// and 'output mode'. -// Examples -// AVRPWMSetup(0,1,2,2) -// -// Authors -// Siddhesh Wani -// - -#include "AVRPeripheralPWM.h" - - -uint8 u8AVRPWMSetups(uint8 timer, uint8 prescalar, uint8 waveform_mode, uint8 output_mode) -{ - switch(timer) - { - case 0: - TCCR0|= (prescalar & 0x07); //Select clock source - //Select waveform generation mode - TCCR0|= ((waveform_mode & 0x04) << 4); - //Select compare output mode - TCCR0 |= ((output_mode & 0x01) << 3); //WGM0 - TCCR0 |= ((output_mode & 0x02) << 6); //WGM1 - break; - case 1: - break; - case 2: - break; - } - - return 0; -} - diff --git a/2.3-1/src/c/hardware/avr/pwm/u8AVRPWMSetDutys.c b/2.3-1/src/c/hardware/avr/pwm/u8AVRPWMSetDutys.c new file mode 100644 index 00000000..adb186a6 --- /dev/null +++ b/2.3-1/src/c/hardware/avr/pwm/u8AVRPWMSetDutys.c @@ -0,0 +1,39 @@ +// Function to set duty for PWM of AVR +// +// Calling Sequence +// u8AVRPWMSetDutys(uint8 timer, uint8 duty) +// +// Parameters +// timer: timer to be used for PWM generation (0,1,2) +// duty: duty for PWM waveform (0-100) +// +// Description +// This function sets duty for PWM waveform according to given parameters. +// +// Examples +// u8AVRPWMSetDutys(0,10) //Sets 10% duty for timer 0 output. +// +// Authors +// Siddhesh Wani +// + +#include "AVRPeripheralPWM.h" + +uint8 u8AVRPWMSetDutys(uint8 timer, uint8 duty) +{ + uint8 duty_value=0; + + switch(timer) + { + case 0: + duty_value = (uint8)(((uint16)(duty * 0xff))/100); + OCR0 = duty_value; + break; + case 2: + duty_value = (uint8)(((uint16)(duty * 0xff))/100); + OCR2 = duty_value; + break; + } + + +} diff --git a/2.3-1/src/c/hardware/avr/pwm/u8AVRPWMSetups.c b/2.3-1/src/c/hardware/avr/pwm/u8AVRPWMSetups.c new file mode 100644 index 00000000..5110d812 --- /dev/null +++ b/2.3-1/src/c/hardware/avr/pwm/u8AVRPWMSetups.c @@ -0,0 +1,62 @@ +// Function to initialise PWM of AVR +// +// Calling Sequence +// u8AVRPWMSetups(uint8 timer, uint8 prescalar, uint8 waveform_mode, uint8 output_mode) +// +// Parameters +// timer: timer to be used for PWM generation (0,1,2) +// prescalar: prescalar to be used for generating PWM waveform (0-7) +// waveform_mode: decides type of waveform generation +// 0 -> Normal mode +// 1 -> Phase correct mode +// 2 -> CTC mode +// 3 -> Fase PWM mode +// output_mode: decides the compare output mode. (0-3) +// behaviour of the output is different for different inputs +// depending upon 'waveform_mode' chosen. +// ***Refer datasheet for more description about above modes +// +// Description +// This function initialises PWM of AVR with given parameters. 'timer' +// decides which of the three (0,1,2) timers available to be used. The +// 'prescalar' is needed for deciding PWM clock. Select appropriate prescalar +// depending on MCU clock. Choose required pwmmode using 'waveform_generation' +// and 'output_mode'. Please refer datasheet for more description of 'wafefom_mode' +// and 'output mode'. +// Examples +// AVRPWMSetup(0,1,2,2) +// +// Authors +// Siddhesh Wani +// + +#include "AVRPeripheralPWM.h" + + +uint8 u8AVRPWMSetups(uint8 timer, uint8 prescalar, uint8 waveform_mode, uint8 output_mode) +{ + switch(timer) + { + case 0: + TCCR0|= (prescalar & 0x07); //Select clock source + //Select waveform generation mode + TCCR0|= ((waveform_mode & 0x04) << 4); + //Select compare output mode + TCCR0 |= ((output_mode & 0x01) << 3); //WGM0 + TCCR0 |= ((output_mode & 0x02) << 6); //WGM1 + break; + case 1: + break; + case 2: + TCCR2|= (prescalar & 0x07); //Select clock source + //Select waveform generation mode + TCCR2|= ((waveform_mode & 0x04) << 4); + //Select compare output mode + TCCR2 |= ((output_mode & 0x01) << 3); //WGM0 + TCCR2 |= ((output_mode & 0x02) << 6); //WGM1 + break; + } + + return 0; +} + diff --git a/2.3-1/src/c/scilab-arduino/cmd_dcmotor_run/u8cmd_dcmotor_runs.c b/2.3-1/src/c/scilab-arduino/cmd_dcmotor_run/u8cmd_dcmotor_runs.c new file mode 100644 index 00000000..93905c94 --- /dev/null +++ b/2.3-1/src/c/scilab-arduino/cmd_dcmotor_run/u8cmd_dcmotor_runs.c @@ -0,0 +1,59 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) 2008 - INRIA - Arnaud TORSET + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + * + */ + +#include "cmd_dcmotor_run.h" + +uint8 u8cmd_dcmotor_runs(uint8 board_no, uint8 motor_no, int16 duty) +{ + uint8 direction = 1; + if(duty >= 0) + { + direction = 1; + } + else + { + direction = 0; + duty = -duty; + } + + if(duty > 255) duty = 255; + + if (dcm_mode[motor_no] == 3) //L293 + { + if(direction == 1) + { + analogWrite(dcm_pin_1[motor_no],duty); + analogWrite(dcm_pin_2[motor_no],0); + } + else + { + analogWrite(dcm_pin_2[motor_no],duty); + analogWrite(dcm_pin_1[motor_no],0); + } + } + else + { + if(direction == 1) + { + digitalWrite(dcm_pin_1[motor_no],HIGH); + digitalWrite(dcm_pin_2[motor_no],LOW); + } + else + { + digitalWrite(dcm_pin_2[motor_no],HIGH); + digitalWrite(dcm_pin_1[motor_no],LOW); + } + } + + return 0; +} + diff --git a/2.3-1/src/c/scilab-arduino/cmd_dcmotor_setup/u8cmd_dcmotor_setups.c b/2.3-1/src/c/scilab-arduino/cmd_dcmotor_setup/u8cmd_dcmotor_setups.c new file mode 100644 index 00000000..30b4b9b3 --- /dev/null +++ b/2.3-1/src/c/scilab-arduino/cmd_dcmotor_setup/u8cmd_dcmotor_setups.c @@ -0,0 +1,42 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) 2008 - INRIA - Arnaud TORSET + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + * + */ + +#include "cmd_dcmotor_setup.h" + +uint8 dcm_pin_1[4], dcm_pin_2[4], dcm_mode[4]; + +uint8 u8cmd_dcmotor_setups(uint8 board_no, uint8 driver_type, uint8 motor_no,\ + uint8 pin_1, uint8 pin_2) +{ + dcm_pin_1[motor_no] = pin_1; + dcm_pin_2[motor_no] = pin_2; + dcm_mode[motor_no] = driver_type; + + //Initialise pins + pinMode(pin_1,OUTPUT); + pinMode(pin_2,OUTPUT); + + //Set output to low. + if(driver_type == 3) + { + analogWrite(pin_1,0); + analogWrite(pin_2,0); + } + else + { + digitalWrite(pin_1,LOW); + digitalWrite(pin_2,LOW); + } + + return 0; +} + diff --git a/2.3-1/src/c/scilab-arduino/default_files/sci2c_arduino.ino b/2.3-1/src/c/scilab-arduino/default_files/sci2c_arduino.ino index 9e9d9b6e..2b30456c 100644 --- a/2.3-1/src/c/scilab-arduino/default_files/sci2c_arduino.ino +++ b/2.3-1/src/c/scilab-arduino/default_files/sci2c_arduino.ino @@ -1,11 +1,13 @@ #include "Arduino.h" #include +#include void setup() { //Please write appropriate setup functions here. + setup_arduino(); } -int i = 0; + void loop() { loop_arduino(); diff --git a/2.3-1/src/c/scilab-arduino/default_files/setup_arduino.h b/2.3-1/src/c/scilab-arduino/default_files/setup_arduino.h new file mode 100644 index 00000000..9eb0ed4a --- /dev/null +++ b/2.3-1/src/c/scilab-arduino/default_files/setup_arduino.h @@ -0,0 +1,64 @@ +/* +** ************************************************ +** This file has been generated using +** Scilab2C (Version 2.3) +** +** Please visit following links for more informations: +** Atoms Module: http://atoms.scilab.org/toolboxes/scilab2c +** Scilab2C Forge: http://forge.scilab.org/index.php/p/scilab2c/ +** Scilab2C ML: http://forge.scilab.org/index.php/p/scilab2c/ +** ************************************************ +*/ + + +#ifndef setup_arduino_h +#define setup_arduino_h +/* +** ------------------- +** ----- Target ------ +** ------------------- +*/ +# define Arduino1 1 +/* +** ----------------------- +** --- SCI2C Includes. --- +** ----------------------- +*/ +#include "sci2clib.h" +/* +** --------------------------- +** --- End SCI2C Includes. --- +** --------------------------- +*/ + + +#ifdef __cplusplus +extern "C" { +#endif +/* +** ------------------- +** --- Prototypes. --- +** ------------------- +*/ +int setup_arduino(); +/* +** ----------------------- +** --- End Prototypes. --- +** ----------------------- +*/ + + +/* +** ------------------------ +** --- USER2C Includes. --- +** ------------------------ +*/ +/* +** ---------------------------- +** --- End USER2C Includes. --- +** ---------------------------- +*/ +#ifdef __cplusplus +} /* extern "C" */ +#endif +#endif diff --git a/2.3-1/src/c/scilab-arduino/includes/cmd_dcmotor_run.h b/2.3-1/src/c/scilab-arduino/includes/cmd_dcmotor_run.h new file mode 100644 index 00000000..7631761b --- /dev/null +++ b/2.3-1/src/c/scilab-arduino/includes/cmd_dcmotor_run.h @@ -0,0 +1,32 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) 2008 - INRIA - Arnaud TORSET + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + * + */ + + +#ifndef __CMD_DCMOTOR_RUN_H__ +#define __CMD_DCMOTOR_RUN_H__ + +#include "types.h" +#include "Arduino.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint8 dcm_pin_1[4], dcm_pin_2[4], dcm_mode[4]; + +uint8 u8cmd_dc_motor_runs(uint8 board_no, uint8 motor_no, int16 duty); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __CMD_DCMOTOR_SETUP_H__ */ diff --git a/2.3-1/src/c/scilab-arduino/includes/cmd_dcmotor_setup.h b/2.3-1/src/c/scilab-arduino/includes/cmd_dcmotor_setup.h new file mode 100644 index 00000000..94f5a161 --- /dev/null +++ b/2.3-1/src/c/scilab-arduino/includes/cmd_dcmotor_setup.h @@ -0,0 +1,33 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) 2008 - INRIA - Arnaud TORSET + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + * + */ + + +#ifndef __CMD_DCMOTOR_SETUP_H__ +#define __CMD_DCMOTOR_SETUP_H__ + +#include "types.h" +#include "Arduino.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint8 dcm_pin_1[4], dcm_pin_2[4], dcm_mode[4]; + +uint8 u8cmd_dc_motor_setups(uint8 board_no, uint8 driver_type, uint8 motor_no,\ + uint8 pin_1, uint8 pin_2); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __CMD_DCMOTOR_SETUP_H__ */ diff --git a/2.3-1/src/c/scilab-arduino/interfaces/int_cmd_dcmotor.h b/2.3-1/src/c/scilab-arduino/interfaces/int_cmd_dcmotor.h new file mode 100644 index 00000000..b35583d7 --- /dev/null +++ b/2.3-1/src/c/scilab-arduino/interfaces/int_cmd_dcmotor.h @@ -0,0 +1,39 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) 2008 - INRIA - Arnaud TORSET + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + * + */ + + +#ifndef __INT_CMD_DCMOTOR_H__ +#define __INT_CMD_DCMOTOR_H__ + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define d0d0d0d0d0cmd_dcmotor_setupu80(in1,in2,in3,in4,in5)\ + u8cmd_dcmotor_setups((uint8)in1,(uint8)in2,(uint8)in3,\ + (uint8)in4,(uint8)in5) + +#define d0d0d0cmd_dcmotor_runu80(in1,in2,in3) u8cmd_dcmotor_runs((uint8)in1,\ + (uint8)in2, (int16)in3); + + +#define d0d0u160cmd_dcmotor_runu80(in1,in2,in3) u8cmd_dcmotor_runs((uint8)in1,\ + (uint8)in2, (int16)in3); + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __INT_CMD_DCMOTOR_H__ */ -- cgit