AP_HAL: provide AP_HAL_MAIN()

Move the macros to a single place and reduce the variations not based on
board, but based on

- The name of the entry-point function, specified by AP_MAIN;
- Whether it contains argc/argv arguments or not.

The goal here is that programs (vehicles and examples) don't need to
include all possible boards to define a main function. Further patches
will change the programs.
This commit is contained in:
Caio Marcelo de Oliveira Filho 2015-10-19 16:01:24 -02:00 committed by Andrew Tridgell
parent e30457a84d
commit 19b4ca60c4
16 changed files with 41 additions and 146 deletions

View File

@ -8,6 +8,7 @@
#include "AP_HAL_Namespace.h"
#include "AP_HAL_Boards.h"
#include "AP_HAL_Macros.h"
#include "AP_HAL_Main.h"
/* HAL Module Classes (all pure virtual) */
#include "UARTDriver.h"

View File

@ -0,0 +1,40 @@
#ifndef __AP_HAL_MAIN_H__
#define __AP_HAL_MAIN_H__
#include "HAL.h"
#if CONFIG_HAL_BOARD == HAL_BOARD_APM1 || CONFIG_HAL_BOARD == HAL_BOARD_APM2 || CONFIG_HAL_BOARD == HAL_BOARD_FLYMAPLE
#define CONFIG_MAIN_WITHOUT_ARGC_ARGV 1
#endif
#if CONFIG_HAL_BOARD == HAL_BOARD_PX4 || CONFIG_HAL_BOARD == HAL_BOARD_VRBRAIN
#define AP_MAIN __EXPORT ArduPilot_main
#endif
#ifndef AP_MAIN
#define AP_MAIN main
#endif
#if CONFIG_MAIN_WITHOUT_ARGC_ARGV
#define AP_HAL_MAIN() extern "C" { \
int AP_MAIN(void) { \
AP_HAL::HAL::FunCallbacks callbacks(setup, loop); \
hal.run(0, NULL, &callbacks); \
return 0; \
} \
}
#else
#define AP_HAL_MAIN() extern "C" { \
int AP_MAIN(int argc, char* const argv[]) { \
AP_HAL::HAL::FunCallbacks callbacks(setup, loop); \
hal.run(argc, argv, &callbacks); \
return 0; \
} \
}
#endif
#endif // __AP_HAL_MAIN_H__

View File

@ -13,7 +13,6 @@
#include "HAL_AVR_APM1_Class.h"
#include "HAL_AVR_APM2_Class.h"
#include "AP_HAL_AVR_Main.h"
#endif // CONFIG_HAL_BOARD

View File

@ -1,15 +0,0 @@
#ifndef __AP_HAL_AVR_MAIN_H__
#define __AP_HAL_AVR_MAIN_H__
#if CONFIG_HAL_BOARD == HAL_BOARD_APM1 || CONFIG_HAL_BOARD == HAL_BOARD_APM2
#define AP_HAL_MAIN() extern "C" {\
int main (void) {\
AP_HAL::HAL::FunCallbacks callbacks(setup, loop); \
hal.run(0, NULL, &callbacks); \
return 0; \
}\
}
#endif
#endif // __AP_HAL_AVR_MAIN_H__

View File

@ -18,17 +18,9 @@
* All declaration and compilation should be guarded by CONFIG_HAL_BOARD macros.
* In this case, we're using CONFIG_HAL_BOARD == HAL_BOARD_EMPTY.
* When creating a new HAL, declare a new HAL_BOARD_ in AP_HAL/AP_HAL_Boards.h
*
* The module should also export an appropriate AP_HAL_MAIN() macro iff the
* appropriate CONFIG_HAL_BOARD value is set.
* The AP_HAL_MAIN macro expands to a main function (either an `int main (void)`
* or `int main (int argc, const char * argv[]), depending on platform) of an
* ArduPilot application, whose entry points are the c++ functions
* `void setup()` and `void loop()`, ala Arduino.
*/
#include "HAL_Empty_Class.h"
#include "AP_HAL_Empty_Main.h"
#endif //__AP_HAL_EMPTY_H__

View File

@ -1,16 +0,0 @@
#ifndef __AP_HAL_EMPTY_MAIN_H__
#define __AP_HAL_EMPTY_MAIN_H__
#if CONFIG_HAL_BOARD == HAL_BOARD_EMPTY
#define AP_HAL_MAIN() extern "C" {\
int main (void) {\
AP_HAL::HAL::FunCallbacks callbacks(setup, loop); \
hal.run(0, NULL, &callbacks); \
return 0; \
}\
}
#endif // HAL_BOARD_EMPTY
#endif // __AP_HAL_EMPTY_MAIN_H__

View File

@ -47,7 +47,6 @@
#if CONFIG_HAL_BOARD == HAL_BOARD_FLYMAPLE
#include "HAL_FLYMAPLE_Class.h"
#include "AP_HAL_FLYMAPLE_Main.h"
#endif // CONFIG_HAL_BOARD

View File

@ -1,33 +0,0 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
Flymaple port by Mike McCauley
*/
#ifndef __AP_HAL_FLYMAPLE_MAIN_H__
#define __AP_HAL_FLYMAPLE_MAIN_H__
#if CONFIG_HAL_BOARD == HAL_BOARD_FLYMAPLE
#define AP_HAL_MAIN() extern "C" {\
int main (void) {\
AP_HAL::HAL::FunCallbacks callbacks(setup, loop); \
hal.run(0, NULL, &callbacks); \
return 0; \
}\
}
#endif // HAL_BOARD_FLYMAPLE
#endif // __AP_HAL_FLYMAPLE_MAIN_H__

View File

@ -18,19 +18,11 @@
* All declaration and compilation should be guarded by CONFIG_HAL_BOARD macros.
* In this case, we're using CONFIG_HAL_BOARD == HAL_BOARD_LINUX.
* When creating a new HAL, declare a new HAL_BOARD_ in AP_HAL/AP_HAL_Boards.h
*
* The module should also export an appropriate AP_HAL_MAIN() macro iff the
* appropriate CONFIG_HAL_BOARD value is set.
* The AP_HAL_MAIN macro expands to a main function (either an `int main (void)`
* or `int main (int argc, const char * argv[]), depending on platform) of an
* ArduPilot application, whose entry points are the c++ functions
* `void setup()` and `void loop()`, ala Arduino.
*/
#if CONFIG_HAL_BOARD == HAL_BOARD_LINUX
#include "HAL_Linux_Class.h"
#include "AP_HAL_Linux_Main.h"
#endif // CONFIG_HAL_BOARD
#endif //__AP_HAL_LINUX_H__

View File

@ -1,16 +0,0 @@
#ifndef __AP_HAL_LINUX_MAIN_H__
#define __AP_HAL_LINUX_MAIN_H__
#if CONFIG_HAL_BOARD == HAL_BOARD_LINUX
#define AP_HAL_MAIN() extern "C" {\
int main (int argc, char * const argv[]) { \
AP_HAL::HAL::FunCallbacks callbacks(setup, loop); \
hal.run(argc, argv, &callbacks); \
return 0; \
}\
}
#endif // HAL_BOARD_LINUX
#endif // __AP_HAL_LINUX_MAIN_H__

View File

@ -6,7 +6,6 @@
#if CONFIG_HAL_BOARD == HAL_BOARD_PX4
#include "HAL_PX4_Class.h"
#include "AP_HAL_PX4_Main.h"
#endif // CONFIG_HAL_BOARD
#endif // __AP_HAL_PX4_H__

View File

@ -1,15 +0,0 @@
#ifndef __AP_HAL_PX4_MAIN_H__
#define __AP_HAL_PX4_MAIN_H__
#if CONFIG_HAL_BOARD == HAL_BOARD_PX4
#define AP_HAL_MAIN() \
extern "C" __EXPORT int SKETCH_MAIN(int argc, char * const argv[]); \
int SKETCH_MAIN(int argc, char * const argv[]) { \
AP_HAL::HAL::FunCallbacks callbacks(setup, loop); \
hal.run(argc, argv, &callbacks); \
return OK; \
}
#endif
#endif // __AP_HAL_PX4_MAIN_H__

View File

@ -7,7 +7,6 @@
#if CONFIG_HAL_BOARD == HAL_BOARD_SITL
#include "HAL_SITL_Class.h"
#include "AP_HAL_SITL_Main.h"
#endif // CONFIG_HAL_BOARD

View File

@ -1,15 +0,0 @@
#ifndef __AP_HAL_SITL_MAIN_H__
#define __AP_HAL_SITL_MAIN_H__
#if CONFIG_HAL_BOARD == HAL_BOARD_SITL
#define AP_HAL_MAIN() extern "C" {\
int main (int argc, char * const argv[]) { \
AP_HAL::HAL::FunCallbacks callbacks(setup, loop); \
hal.run(argc, argv, &callbacks); \
return 0; \
}\
}
#endif
#endif // __AP_HAL_SITL_MAIN_H__

View File

@ -6,7 +6,6 @@
#if CONFIG_HAL_BOARD == HAL_BOARD_VRBRAIN
#include "HAL_VRBRAIN_Class.h"
#include "AP_HAL_VRBRAIN_Main.h"
#endif // CONFIG_HAL_BOARD
#endif // __AP_HAL_VRBRAIN_H__

View File

@ -1,15 +0,0 @@
#ifndef __AP_HAL_VRBRAIN_MAIN_H__
#define __AP_HAL_VRBRAIN_MAIN_H__
#if CONFIG_HAL_BOARD == HAL_BOARD_VRBRAIN
#define AP_HAL_MAIN() \
extern "C" __EXPORT int SKETCH_MAIN(int argc, char * const argv[]); \
int SKETCH_MAIN(int argc, char * const argv[]) { \
AP_HAL::HAL::FunCallbacks callbacks(setup, loop); \
hal.run(argc, argv, &callbacks); \
return OK; \
}
#endif
#endif // __AP_HAL_VRBRAIN_MAIN_H__