28 #include <oc_programs_list.h> 38 #define _________________________________________TYPES_SECTION______________________________________________________________________________ 42 #undef _________________________________________TYPES_SECTION______________________________________________________________________________ 49 #define _________________________________________VARIABLES_SECTION__________________________________________________________________________ 55 .
Name =
"program manager" ,
60 #define DONT_DECLARE(...) 61 #define DECLARE_PROGRAM_REGISTRATION(ProgramName) \ 62 extern const oC_Program_Registration_t ProgramName##Registration; 63 CFG_PROGRAMS_LIST(DECLARE_PROGRAM_REGISTRATION,DONT_DECLARE);
64 #undef DECLARE_PROGRAM_REGISTRATION 67 #undef _________________________________________VARIABLES_SECTION__________________________________________________________________________ 74 #define _________________________________________INTERFACE_FUNCTIONS_SECTION_______________________________________________________________ 78 oC_ErrorCode_t oC_ProgramMan_TurnOn(
void )
80 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
82 if(oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
false , oC_ErrorCode_ModuleIsTurnedOn))
84 DefaultProgram =
NULL;
85 Programs = oC_List_New(&
Allocator,AllocationFlags_NoWait);
90 errorCode = oC_ErrorCode_None;
92 #define ADD_PROGRAM_TO_LIST(ProgramName) oC_AssignErrorCode(&errorCode , oC_ProgramMan_AddProgram(&ProgramName##Registration)); 93 CFG_PROGRAMS_LIST(ADD_PROGRAM_TO_LIST,DONT_ADD)
94 #undef ADD_PROGRAM_TO_LIST 96 #define GET_PROGRAM_REGISTRATION(ProgramName) ProgramName##Registration 97 #define SET_DEFAULT_PROGRAM(ProgramName) oC_AssignErrorCode(&errorCode,oC_ProgramMan_SetDefaultProgram(&GET_PROGRAM_REGISTRATION(ProgramName))) 98 SET_DEFAULT_PROGRAM(CFG_PROGRAM_DEFAULT);
99 #undef SET_DEFAULT_PROGRAM 100 #undef GET_PROGRAM_REGISTRATION 104 errorCode = oC_ErrorCode_AllocationError;
113 oC_ErrorCode_t oC_ProgramMan_TurnOff(
void )
115 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
117 if(oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet))
121 if(oC_List_Delete(Programs,AllocationFlags_CanWaitForever))
123 errorCode = oC_ErrorCode_None;
127 errorCode = oC_ErrorCode_ReleaseError;
136 oC_ErrorCode_t oC_ProgramMan_AddProgram(
oC_Program_t Program )
138 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
140 if(oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet))
142 bool added = oC_List_PushBack(Programs,Program,&
Allocator);
146 errorCode = oC_ErrorCode_None;
150 errorCode = oC_ErrorCode_CannotAddObjectToList;
159 oC_ErrorCode_t oC_ProgramMan_RemoveProgram(
oC_Program_t Program )
161 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
163 if(oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet))
165 bool contains = oC_List_Contains(Programs,Program);
169 bool removed = oC_List_RemoveAll(Programs,Program);
173 errorCode = oC_ErrorCode_None;
177 errorCode = oC_ErrorCode_CannotRemoveObjectFromList;
182 errorCode = oC_ErrorCode_ObjectNotFoundOnList;
190 oC_ErrorCode_t oC_ProgramMan_SetDefaultProgram(
oC_Program_t Program )
192 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
195 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
196 oC_AssignErrorCodeIfFalse(&errorCode , oC_Program_IsCorrect(Program) , oC_ErrorCode_ObjectNotCorrect)
199 DefaultProgram = Program;
200 errorCode = oC_ErrorCode_None;
226 program = DefaultProgram;
233 oC_Program_t oC_ProgramMan_GetProgram(
const char * Name )
239 oC_List_Foreach(Programs,prog)
241 if(strcmp(oC_Program_GetName(prog),Name) == 0)
254 oC_ErrorCode_t oC_ProgramMan_RunDefaultProgram(
oC_User_t User )
256 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
259 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
260 oC_AssignErrorCodeIfFalse(&errorCode , oC_Program_IsCorrect(DefaultProgram) , oC_ErrorCode_DefaultProgramNotSet) &&
261 oC_AssignErrorCodeIfFalse(&errorCode , oC_User_IsCorrect(User) , oC_ErrorCode_WrongUser)
264 oC_Process_t process = oC_Program_NewProcess(DefaultProgram,User);
266 if(oC_AssignErrorCodeIfFalse(&errorCode , oC_Process_IsCorrect(process) , oC_ErrorCode_CannotCreateProcess))
269 oC_AssignErrorCode(&errorCode , oC_Process_SetPriority ( process , oC_Process_Priority_DefaultProcess ))
270 && oC_AssignErrorCode(&errorCode , oC_ProcessMan_AddProcess( process ))
273 const char * name = oC_Program_GetName(DefaultProgram);
274 errorCode = oC_Program_Exec(DefaultProgram,process,1,&name,
NULL);
278 if(oC_Process_Delete(&process))
280 oC_SaveError(
"RunDefaultProgram: cannot delete process" , oC_ErrorCode_ReleaseError);
292 uint32_t oC_ProgramMan_RerunDefualtIfNotRun(
oC_User_t User )
294 static uint32_t rerunNumber = 0;
295 oC_Program_t defaultProgram = oC_ProgramMan_GetDefaultProgram();
297 if(isaddresscorrect(defaultProgram))
299 oC_Process_t defaultProcess = oC_ProcessMan_GetProcess(oC_Program_GetName(defaultProgram));
300 oC_Process_State_t state = oC_Process_GetState(defaultProcess);
302 if(state == oC_Process_State_Invalid || state == oC_Process_State_Killed || state == oC_Process_State_Zombie)
304 oC_ErrorCode_t errorCode = oC_ProgramMan_RunDefaultProgram(User);
306 if(oC_ErrorOccur(errorCode))
308 kdebuglog(oC_LogType_Error ,
"rerundefaultprogram: Cannot run default program %s" , oC_Program_GetName(defaultProgram));
309 oC_SaveError(
"programman: rerun of default program failed!: " , errorCode);
320 oC_SaveError(
"ProgramMan: Default program is not correct!" , oC_ErrorCode_WrongAddress);
321 kdebuglog(oC_LogType_Error ,
"defaultprogram: the pointer of default program is not correct (0x%x)!" , defaultProgram);
327 #undef _________________________________________INTERFACE_FUNCTIONS_SECTION_______________________________________________________________
static bool ModuleEnabledFlag
identifier for allocations
The file with interface for process manager.
The file with interface for program manager.
static const oC_Allocator_t Allocator
#define NULL
pointer to a zero