From 612a439199382bb5ade3e0931557e953ea86f7bc Mon Sep 17 00:00:00 2001
From: Mathieu Rondonneau <mathieu.rondonneau@gmail.com>
Date: Tue, 12 Jul 2011 20:44:32 -0700
Subject: [PATCH] OP-423: simplify the MODULE_INITCALL macro and remove the
 ordering loops

---
 flight/Modules/AHRSComms/ahrs_comms.c        |  2 +-
 flight/Modules/Actuator/actuator.c           |  2 +-
 flight/Modules/Altitude/altitude.c           |  2 +-
 flight/Modules/Attitude/attitude.c           |  2 +-
 flight/Modules/Battery/battery.c             |  3 ++-
 flight/Modules/Example/example.c             |  2 +-
 flight/Modules/FirmwareIAP/firmwareiap.c     |  2 +-
 flight/Modules/FlightPlan/flightplan.c       |  2 +-
 flight/Modules/GPS/GPS.c                     |  2 +-
 flight/Modules/Guidance/guidance.c           |  2 +-
 flight/Modules/ManualControl/manualcontrol.c |  2 +-
 flight/Modules/Stabilization/stabilization.c |  2 +-
 flight/Modules/System/systemmod.c            |  2 +-
 flight/Modules/Telemetry/telemetry.c         |  2 +-
 flight/PiOS/inc/pios_initcall.h              | 26 ++++++--------------
 15 files changed, 22 insertions(+), 33 deletions(-)

diff --git a/flight/Modules/AHRSComms/ahrs_comms.c b/flight/Modules/AHRSComms/ahrs_comms.c
index 69885270f..0c98969e3 100644
--- a/flight/Modules/AHRSComms/ahrs_comms.c
+++ b/flight/Modules/AHRSComms/ahrs_comms.c
@@ -88,7 +88,7 @@ int32_t AHRSCommsInitialize(void)
 
 	return 0;
 }
-MODULE_INITCALL(AHRSCommsInitialize, 0, AHRSCommsStart, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(AHRSCommsInitialize, AHRSCommsStart)
 
 /**
  * Module thread, should not return.
diff --git a/flight/Modules/Actuator/actuator.c b/flight/Modules/Actuator/actuator.c
index 94a17ccfa..269b9dda6 100644
--- a/flight/Modules/Actuator/actuator.c
+++ b/flight/Modules/Actuator/actuator.c
@@ -116,7 +116,7 @@ int32_t ActuatorInitialize()
 
 	return 0;
 }
-MODULE_INITCALL(ActuatorInitialize, 0, ActuatorStart, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(ActuatorInitialize, ActuatorStart)
 
 /**
  * @brief Main Actuator module task
diff --git a/flight/Modules/Altitude/altitude.c b/flight/Modules/Altitude/altitude.c
index d7a026f1e..363cba15f 100644
--- a/flight/Modules/Altitude/altitude.c
+++ b/flight/Modules/Altitude/altitude.c
@@ -90,7 +90,7 @@ int32_t AltitudeInitialize()
 
 	return 0;
 }
-MODULE_INITCALL(AltitudeInitialize, 0, AltitudeStart, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(AltitudeInitialize, AltitudeStart)
 /**
  * Module thread, should not return.
  */
diff --git a/flight/Modules/Attitude/attitude.c b/flight/Modules/Attitude/attitude.c
index 0f6b13a19..87daf3c52 100644
--- a/flight/Modules/Attitude/attitude.c
+++ b/flight/Modules/Attitude/attitude.c
@@ -147,7 +147,7 @@ int32_t AttitudeInitialize(void)
 	return 0;
 }
 
-MODULE_INITCALL(AttitudeInitialize, 0, AttitudeStart, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(AttitudeInitialize, AttitudeStart)
 
 /**
  * Module thread, should not return.
diff --git a/flight/Modules/Battery/battery.c b/flight/Modules/Battery/battery.c
index 19112bd13..fe36745bb 100644
--- a/flight/Modules/Battery/battery.c
+++ b/flight/Modules/Battery/battery.c
@@ -75,7 +75,8 @@ static void onTimer(UAVObjEvent* ev);
  * Initialise the module, called on startup
  * \returns 0 on success or -1 if initialisation failed
  */
-MODULE_INITCALL(BatteryInitialize, 0, 0, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(BatteryInitialize, 0)
+
 int32_t BatteryInitialize(void)
 {
 	static UAVObjEvent ev;
diff --git a/flight/Modules/Example/example.c b/flight/Modules/Example/example.c
index 8b2761616..d50809415 100644
--- a/flight/Modules/Example/example.c
+++ b/flight/Modules/Example/example.c
@@ -59,4 +59,4 @@ void ExampleInitialize(void)
 {
 	ExampleModEventInitialize();
 }
-MODULE_INITCALL(ExampleInitialize, 0, ExampleStart, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(ExampleInitialize, ExampleStart)
diff --git a/flight/Modules/FirmwareIAP/firmwareiap.c b/flight/Modules/FirmwareIAP/firmwareiap.c
index b00099ff8..e3372019c 100644
--- a/flight/Modules/FirmwareIAP/firmwareiap.c
+++ b/flight/Modules/FirmwareIAP/firmwareiap.c
@@ -88,7 +88,7 @@ static void resetTask(UAVObjEvent *);
  * \note
  *
  */
-MODULE_INITCALL(FirmwareIAPInitialize, 0, 0, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(FirmwareIAPInitialize, 0)
 int32_t FirmwareIAPInitialize()
 {
 	const struct pios_board_info * bdinfo = &pios_board_info_blob;
diff --git a/flight/Modules/FlightPlan/flightplan.c b/flight/Modules/FlightPlan/flightplan.c
index 16f454f5d..5537c8f15 100644
--- a/flight/Modules/FlightPlan/flightplan.c
+++ b/flight/Modules/FlightPlan/flightplan.c
@@ -86,7 +86,7 @@ int32_t FlightPlanInitialize()
 
 	return 0;
 }
-MODULE_INITCALL(FlightPlanInitialize, 0, FlightPlanStart, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(FlightPlanInitialize, FlightPlanStart)
 /**
  * Module task
  */
diff --git a/flight/Modules/GPS/GPS.c b/flight/Modules/GPS/GPS.c
index 022731155..163c3f577 100644
--- a/flight/Modules/GPS/GPS.c
+++ b/flight/Modules/GPS/GPS.c
@@ -129,7 +129,7 @@ int32_t GPSInitialize(void)
 
 	return 0;
 }
-MODULE_INITCALL(GPSInitialize, 0, GPSStart, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(GPSInitialize, GPSStart)
 
 // ****************
 /**
diff --git a/flight/Modules/Guidance/guidance.c b/flight/Modules/Guidance/guidance.c
index cad7c3e50..348210675 100644
--- a/flight/Modules/Guidance/guidance.c
+++ b/flight/Modules/Guidance/guidance.c
@@ -105,7 +105,7 @@ int32_t GuidanceInitialize()
 	
 	return 0;
 }
-MODULE_INITCALL(GuidanceInitialize, 0, GuidanceStart, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(GuidanceInitialize, GuidanceStart)
 
 static float northVelIntegral = 0;
 static float eastVelIntegral = 0;
diff --git a/flight/Modules/ManualControl/manualcontrol.c b/flight/Modules/ManualControl/manualcontrol.c
index 7f6088b0f..4d5b3af02 100644
--- a/flight/Modules/ManualControl/manualcontrol.c
+++ b/flight/Modules/ManualControl/manualcontrol.c
@@ -112,7 +112,7 @@ int32_t ManualControlInitialize()
 
 	return 0;
 }
-MODULE_INITCALL(ManualControlInitialize, 0, ManualControlStart, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(ManualControlInitialize, ManualControlStart)
 
 /**
  * Module task
diff --git a/flight/Modules/Stabilization/stabilization.c b/flight/Modules/Stabilization/stabilization.c
index 024dd5585..665c0188c 100644
--- a/flight/Modules/Stabilization/stabilization.c
+++ b/flight/Modules/Stabilization/stabilization.c
@@ -129,7 +129,7 @@ int32_t StabilizationInitialize()
 	return 0;
 }
 
-MODULE_INITCALL(StabilizationInitialize, 0, StabilizationStart, 0, MODULE_EXEC_NOORDER_FLAG)
+MODULE_INITCALL(StabilizationInitialize, StabilizationStart)
 
 /**
  * Module task
diff --git a/flight/Modules/System/systemmod.c b/flight/Modules/System/systemmod.c
index 2c3d9de48..f555d227f 100644
--- a/flight/Modules/System/systemmod.c
+++ b/flight/Modules/System/systemmod.c
@@ -111,7 +111,7 @@ int32_t SystemModInitialize(void)
 	return 0;
 }
 
-MODULE_INITCALL(SystemModInitialize, 0, 0, 0, MODULE_EXEC_FIRST_FLAG)
+MODULE_INITCALL(SystemModInitialize, 0)
 /**
  * System task, periodically executes every SYSTEM_UPDATE_PERIOD_MS
  */
diff --git a/flight/Modules/Telemetry/telemetry.c b/flight/Modules/Telemetry/telemetry.c
index c711a9151..ad0e39278 100644
--- a/flight/Modules/Telemetry/telemetry.c
+++ b/flight/Modules/Telemetry/telemetry.c
@@ -143,7 +143,7 @@ int32_t TelemetryInitialize(void)
 	return 0;
 }
 
-MODULE_INITCALL(TelemetryInitialize, 0, TelemetryStart, 0, MODULE_EXEC_LAST_FLAG)
+MODULE_INITCALL(TelemetryInitialize, TelemetryStart)
 
 /**
  * Register a new object, adds object to local list and connects the queue depending on the object's
diff --git a/flight/PiOS/inc/pios_initcall.h b/flight/PiOS/inc/pios_initcall.h
index 041a7c1d5..68b9ef077 100644
--- a/flight/PiOS/inc/pios_initcall.h
+++ b/flight/PiOS/inc/pios_initcall.h
@@ -41,16 +41,10 @@
 /*
  * Used for initialization calls..
  */
-#define MODULE_EXEC_NOORDER_FLAG 0xFA000000
-#define MODULE_EXEC_FIRST_FLAG 0xFA000001
-#define MODULE_EXEC_LAST_FLAG  0xFA000002
 
 typedef int32_t (*initcall_t)(void);
 typedef struct {
-	uint32_t flag;
-	uint32_t param_minit;
 	initcall_t fn_minit;
-	uint32_t param_tinit;
 	initcall_t fn_tinit;
 } initmodule_t;
 
@@ -69,26 +63,20 @@ extern initmodule_t __module_initcall_start[], __module_initcall_end[];
 	static initcall_t __initcall_##fn##id __attribute__((__used__)) \
 	__attribute__((__section__(".initcall" level ".init"))) = fn
 
-#define __define_module_initcall(level,ifn,iparam,sfn,sparam, param) \
+#define __define_module_initcall(level, ifn, sfn) \
 	static initmodule_t __initcall_##fn __attribute__((__used__)) \
-	__attribute__((__section__(".initcall" level ".init"))) = { .flag = param, .param_minit = iparam, .fn_minit = ifn, .param_tinit = sparam, .fn_tinit = sfn };
+	__attribute__((__section__(".initcall" level ".init"))) = { .fn_minit = ifn, .fn_tinit = sfn };
 
 #define UAVOBJ_INITCALL(fn)		__define_initcall("uavobj",fn,1)
-#define MODULE_INITCALL(ifn, iparam, sfn, sparam, flags)		__define_module_initcall("module", ifn, iparam, sfn, sparam, flags)
+#define MODULE_INITCALL(ifn, sfn)		__define_module_initcall("module", ifn, sfn)
 
 #define MODULE_INITIALISE_ALL  { for (initmodule_t *fn = __module_initcall_start; fn < __module_initcall_end; fn++) \
-									if (fn->fn_minit && ( (fn->flag & MODULE_EXEC_FIRST_FLAG) == MODULE_EXEC_FIRST_FLAG) ) \
-										(fn->fn_minit)(); \
-								for (initmodule_t *fn = __module_initcall_start; fn < __module_initcall_end; fn++) \
-									if (fn->fn_minit && ( (fn->flag & (MODULE_EXEC_LAST_FLAG | MODULE_EXEC_FIRST_FLAG)) == MODULE_EXEC_NOORDER_FLAG) ) \
-										(fn->fn_minit)(); \
-								for (initmodule_t *fn = __module_initcall_start; fn < __module_initcall_end; fn++) \
-									if (fn->fn_minit && ( (fn->flag & MODULE_EXEC_LAST_FLAG) == MODULE_EXEC_LAST_FLAG) ) \
-									    (fn->fn_minit)(); }
+									if (fn->fn_minit) \
+										(fn->fn_minit)(); }
 
 #define MODULE_TASKCREATE_ALL  { for (initmodule_t *fn = __module_initcall_start; fn < __module_initcall_end; fn++) \
-		if (fn->fn_tinit) \
-		   (fn->fn_tinit)(); }
+									if (fn->fn_tinit) \
+									   (fn->fn_tinit)(); }
 
 #endif	/* PIOS_INITCALL_H */