diff --git a/ArduCopter/CMakeLists.txt b/ArduCopter/CMakeLists.txt index e1e8f0ee7bc45cc77507cc2e0a51575e9b7620d9..6c88ad554dec7e281bedf4607e63ff332596ee94 100644 --- a/ArduCopter/CMakeLists.txt +++ b/ArduCopter/CMakeLists.txt @@ -5,14 +5,44 @@ cmake_minimum_required(VERSION 2.8) project(ArduCopter C CXX) set(PROJECT_VERSION_MAJOR "2") -set(PROJECT_VERSION_MINOR "3") -set(PROJECT_VERSION_PATCH "3") -set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") +set(PROJECT_VERSION_MINOR "6") +set(PROJECT_VERSION_PATCH "0") -set(PROJECT_DESCRIPTION "ArduPilotMega based Quadrotor Autopilot.") +set(PROJECT_DESCRIPTION "ArduPilotMega based Rotor-craft Autopilot.") # macro path list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../cmake/modules") +include(CMakeParseArguments) +include(APMOption) + +# options +add_definitions(-DUSE_CMAKE_APM_CONFIG) +include(options.cmake) +include_directories(${CMAKE_BINARY_DIR}) +apm_option_generate_config(FILE "APM_Config_cmake.h" OPTIONS ${APM_OPTIONS}) + +# disallow in-source build +include(MacroEnsureOutOfSourceBuild) +macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out of source build. +Please create a separate build directory and run 'cmake /path/to/${PROJECT_NAME} [options]' there.") + +# built variables +set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") +set(FIRMWARE_NAME "${PROJECT_NAME}-${APM_HARDWARE}-${APM_PROCESSOR}-${HIL_MODE}") + +# modify flags from default toolchain flags +set(APM_OPT_FLAGS "-Wformat -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wformat=2") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${APM_OPT_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${APM_OPT_FLAGS} -Wno-reorder") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${APM_OPT_FLAGS} -Wl,--relax") + +# build apm project +set(ARDUINO_EXTRA_LIBRARIES_PATH ${CMAKE_SOURCE_DIR}/../libraries) +set(${FIRMWARE_NAME}_SKETCH ${CMAKE_SOURCE_DIR}/../${PROJECT_NAME}) +set(${FIRMWARE_NAME}_BOARD ${APM_PROCESSOR}) +set(${FIRMWARE_NAME}_PORT ${APM_PROGRAMMING_PORT}) +generate_arduino_firmware(${FIRMWARE_NAME}) +install(FILES ${CMAKE_BINARY_DIR}/${FIRMWARE_NAME}.hex DESTINATION "/") -# common project setup -include(APMProject) +# cpack +include(APMCPackConfig) diff --git a/ArduCopter/config.h b/ArduCopter/config.h index ec68a32abf1681272f62fc32ecd9f2b02724040d..983b0a9ccd2799fb3ad3d2a3c9956bd907980a5a 100644 --- a/ArduCopter/config.h +++ b/ArduCopter/config.h @@ -28,7 +28,12 @@ /// DO NOT EDIT THIS INCLUDE - if you want to make a local change, make that /// change in your local copy of APM_Config.h. /// +#ifdef USE_CMAKE_APM_CONFIG +#include "APM_Config_cmake.h" // <== Prefer cmake config if it exists +#else #include "APM_Config.h" // <== THIS INCLUDE, DO NOT EDIT IT. EVER. +#endif + ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// diff --git a/ArduCopter/options.cmake b/ArduCopter/options.cmake index cc0d163821ddd887fe5262bea2580a4eccdd0119..8d72e374d165e6a8aac29513c878400152571f56 100644 --- a/ArduCopter/options.cmake +++ b/ArduCopter/options.cmake @@ -1,23 +1,42 @@ -# options +# +# This files is used by cmake to present options to the +# user in the cmake-gui, it can also be used directly to +# set options in the cmake command line. +# +# This file generates APM_Config_cmake.h +# which overrides the APM_Config.h file. When disributing +# to the Arduino IDE user. APM_Confg_cmake.h could be copied to +# APM_Config.h, but this is not necessary. The +# advantage would be that the Arduino user would have +# a more up-to-date/ complete list of options and the developers +# using cmake have a nice gui/ command-line interface. +# + apm_option("APM_PROGRAMMING_PORT" TYPE STRING DESCRIPTION "Programming upload port?" DEFAULT "/dev/ttyUSB0") -apm_option("APM_BOARD" TYPE STRING - DESCRIPTION "ArduPilotMega board?" +apm_option("APM_HARDWARE" TYPE STRING + DESCRIPTION "APM Hardware?" + OPTIONS "APM_HARDARE_APM2" "APM2_BETA_HARDWARE" "APM1" + DEFAULT "APM_HARDARE_APM2") + +apm_option("APM_PROCESSOR" TYPE STRING + DESCRIPTION "ArduPilotMega processor (2560 for APM2 and later APM1)?" DEFAULT "mega2560" OPTIONS "mega" "mega2560") -apm_option("APM_FRAME" TYPE STRING - DESCRIPTION "Vehicle type?" - DEFAULT "PLANE_FRAME" - OPTIONS - "PLANE FRAME" - "HELI_FRAME" - "HEXA_FRAME" - "OCTA_FRAME" - "Y6_FRAME" - ) +apm_option("CLI_SLIDER_ENABLED" TYPE BOOL + DESCRIPTION "Enable command line interface switch?" + DEFAULT OFF) + +apm_option("LOGGING_ENABLED" TYPE BOOL + DESCRIPTION "Enable logging?" + DEFAULT OFF) + +apm_option("QUATERNION_ENABLE" TYPE BOOL ADVANCED + DESCRIPTION "Enable quaterion navigation?" + DEFAULT OFF) apm_option("GPS_PROTOCOL" TYPE STRING DESCRIPTION "GPS protocol?" @@ -72,19 +91,19 @@ apm_option("HIL_PROTOCOL" TYPE STRING DEFAULT "HIL_PROTOCOL_MAVLINK" OPTIONS "HIL_PROTOCOL_MAVLINK" "HIL_PROTOCOL_XPLANE") -apm_option("GPS_PROTOCOL" TYPE STRING +apm_option("GCS_PROTOCOL" TYPE STRING DESCRIPTION "Ground station protocol?" DEFAULT "GCS_PROTOCOL_MAVLINK" OPTIONS "GCS_PROTOCOL_NONE" "GCS_PROTOCOL_MAVLINK") apm_option("GCS_PORT" TYPE STRING ADVANCED DESCRIPTION "Ground station port?" - DESCRIPTION "3" + DEFAULT "3" OPTIONS "0" "1" "2" "3") apm_option("MAV_SYSTEM_ID" TYPE STRING ADVANCED DESCRIPTION "MAVLink System ID?" - DESCRIPTION "1") + DEFAULT "1") apm_option("SERIAL0_BAUD" TYPE STRING ADVANCED DESCRIPTION "Serial 0 baudrate?" @@ -116,6 +135,41 @@ apm_option("CUR_AMPS_OFFSET" TYPE STRING ADVANCED DESCRIPTION "Current amps offset?" DEFAULT "0.0") -apm_option("CUR_AMPS_OFFSET" TYPE STRING ADVANCED - DESCRIPTION "Current amps offset?" - DEFAULT "0.0") +# arducopter specific +apm_option("FRAME_CONFIG" TYPE STRING + DESCRIPTION "Vehicle type?" + DEFAULT "QUAD_FRAME" + OPTIONS + "QUAD_FRAME" + "TRI_FRAME" + "HEXA_FRAME" + "Y6_FRAME" + "OCTA_FRAME" + "OCTA_QUAD_FRAME" + "HELI_FRAME" + ) + +apm_option("FRAME_ORIENTATION" TYPE STRING + DESCRIPTION "Vehicle type?" + DEFAULT "QUAD_FRAME" + OPTIONS + "PLUS_FRAME" + "X_FRAME" + "V_FRAME" + ) + +apm_option("CH7_OPTION" TYPE STRING + DESCRIPTION "Channel 7 option? (ADC_FILTER is experimental)" + DEFAULT "CH7_SAVE_WP" + OPTIONS + "CH7_DO_NOTHING" + "CH7_SET_HOVER" + "CH7_FLIP" + "CH7_RTL" + "CH7_AUTO_TRIM" + "CH7_ADC_FILTER" + "CH7_SAVE_WP") + +apm_option("ACCEL_ALT_HOLD" TYPE BOOL ADVANCED + DESCRIPTION "Disabled by default, work in progress." + DEFAULT OFF) diff --git a/ArduPlane/APM_Config.h b/ArduPlane/APM_Config.h index 571cfe4e92c8027c6907c7fbaec946d6171f0d03..18b5794ca717d6b5cc1e6015c8608ff5ee1b7329 100644 --- a/ArduPlane/APM_Config.h +++ b/ArduPlane/APM_Config.h @@ -16,9 +16,7 @@ // The following are the recommended settings for Xplane // simulation. Remove the leading "/* and trailing "*/" to enable: -/* -#define HIL_MODE HIL_MODE_ATTITUDE -*/ +#define HIL_MODE HIL_MODE_DISABLED /* // HIL_MODE SELECTION diff --git a/ArduPlane/CMakeLists.txt b/ArduPlane/CMakeLists.txt index 8a7935c1c562ce6574657f5c854ce4294c5aff39..d8028fe27ae255a95834c2473060101b43c261a9 100644 --- a/ArduPlane/CMakeLists.txt +++ b/ArduPlane/CMakeLists.txt @@ -7,12 +7,43 @@ project(ArduPlane C CXX) set(PROJECT_VERSION_MAJOR "2") set(PROJECT_VERSION_MINOR "3") set(PROJECT_VERSION_PATCH "3") -set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") set(PROJECT_DESCRIPTION "ArduPilotMega based Airplane Autopilot.") # macro path list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../cmake/modules") +include(CMakeParseArguments) +include(APMOption) + +# options +add_definitions(-DUSE_CMAKE_APM_CONFIG) +include(options.cmake) +include_directories(${CMAKE_BINARY_DIR}) +apm_option_generate_config(FILE "APM_Config_cmake.h" OPTIONS ${APM_OPTIONS}) +#configure_file(APM_Config2.h.cmake APM_Config2.h) + +# disallow in-source build +include(MacroEnsureOutOfSourceBuild) +macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out of source build. +Please create a separate build directory and run 'cmake /path/to/${PROJECT_NAME} [options]' there.") + +# built variables +set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") +set(FIRMWARE_NAME "${PROJECT_NAME}-${APM_HARDWARE}-${APM_PROCESSOR}-${HIL_MODE}") + +# modify flags from default toolchain flags +set(APM_OPT_FLAGS "-Wformat -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wformat=2") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${APM_OPT_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${APM_OPT_FLAGS} -Wno-reorder") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${APM_OPT_FLAGS} -Wl,--relax") + +# build apm project +set(ARDUINO_EXTRA_LIBRARIES_PATH ${CMAKE_SOURCE_DIR}/../libraries) +set(${FIRMWARE_NAME}_SKETCH ${CMAKE_SOURCE_DIR}/../${PROJECT_NAME}) +set(${FIRMWARE_NAME}_BOARD ${APM_PROCESSOR}) +set(${FIRMWARE_NAME}_PORT ${APM_PROGRAMMING_PORT}) +generate_arduino_firmware(${FIRMWARE_NAME}) +install(FILES ${CMAKE_BINARY_DIR}/${FIRMWARE_NAME}.hex DESTINATION "/") -# common project setup -include(APMProject) +# cpack +include(APMCPackConfig) diff --git a/ArduPlane/config.h b/ArduPlane/config.h index 07b777f4b45a6c25954a40d7dda5e6bfe9a8ada3..65a48cd7dc140a2600066b34fe4a220bb727aaed 100644 --- a/ArduPlane/config.h +++ b/ArduPlane/config.h @@ -26,7 +26,11 @@ /// DO NOT EDIT THIS INCLUDE - if you want to make a local change, make that /// change in your local copy of APM_Config.h. /// +#ifdef USE_CMAKE_APM_CONFIG +#include "APM_Config_cmake.h" // <== Prefer cmake config if it exists +#else #include "APM_Config.h" // <== THIS INCLUDE, DO NOT EDIT IT. EVER. +#endif /// /// DO NOT EDIT THIS INCLUDE - if you want to make a local change, make that /// change in your local copy of APM_Config.h. diff --git a/ArduPlane/options.cmake b/ArduPlane/options.cmake index 711628fb4af7b3fd593a89f478f7fee36b194800..e8be00a1ad5b85ec308398d8ffe0850b7de4b14b 100644 --- a/ArduPlane/options.cmake +++ b/ArduPlane/options.cmake @@ -1,29 +1,42 @@ -# options -#bool_option(LOGGING DESCRIPTION "Logging support?" DEFAULT OFF) -#bool_option(GPS "Gps support?" ON) -#option(CLI_SLIDER "Command-line-interface slider support?" OFF) -#option(APM2 "Build for APM 2.0" OFF) +# +# This files is used by cmake to present options to the +# user in the cmake-gui, it can also be used directly to +# set options in the cmake command line. +# +# This file generates APM_Config_cmake.h +# which overrides the APM_Config.h file. When disributing +# to the Arduino IDE user. APM_Confg_cmake.h could be copied to +# APM_Config.h, but this is not necessary. The +# advantage would be that the Arduino user would have +# a more up-to-date/ complete list of options and the developers +# using cmake have a nice gui/ command-line interface. +# -# options apm_option("APM_PROGRAMMING_PORT" TYPE STRING DESCRIPTION "Programming upload port?" DEFAULT "/dev/ttyUSB0") -apm_option("APM_BOARD" TYPE STRING - DESCRIPTION "ArduPilotMega board?" +apm_option("APM_HARDWARE" TYPE STRING + DESCRIPTION "APM Hardware?" + OPTIONS "APM_HARDARE_APM2" "APM2_BETA_HARDWARE" "APM1" + DEFAULT "APM_HARDARE_APM2") + +apm_option("APM_PROCESSOR" TYPE STRING + DESCRIPTION "ArduPilotMega processor (2560 for APM2 and later APM1)?" DEFAULT "mega2560" OPTIONS "mega" "mega2560") -apm_option("APM_FRAME" TYPE STRING - DESCRIPTION "Vehicle type?" - DEFAULT "PLANE_FRAME" - OPTIONS - "PLANE FRAME" - "HELI_FRAME" - "HEXA_FRAME" - "OCTA_FRAME" - "Y6_FRAME" - ) +apm_option("CLI_ENABLED" TYPE BOOL + DESCRIPTION "Enable command line interface switch?" + DEFAULT OFF) + +apm_option("LOGGING_ENABLED" TYPE BOOL + DESCRIPTION "Enable logging?" + DEFAULT OFF) + +apm_option("QUATERNION_ENABLE" TYPE BOOL + DESCRIPTION "Enable quaterion navigation?" + DEFAULT OFF) apm_option("GPS_PROTOCOL" TYPE STRING DESCRIPTION "GPS protocol?" @@ -78,19 +91,19 @@ apm_option("HIL_PROTOCOL" TYPE STRING DEFAULT "HIL_PROTOCOL_MAVLINK" OPTIONS "HIL_PROTOCOL_MAVLINK" "HIL_PROTOCOL_XPLANE") -apm_option("GPS_PROTOCOL" TYPE STRING +apm_option("GCS_PROTOCOL" TYPE STRING DESCRIPTION "Ground station protocol?" DEFAULT "GCS_PROTOCOL_MAVLINK" OPTIONS "GCS_PROTOCOL_NONE" "GCS_PROTOCOL_MAVLINK") apm_option("GCS_PORT" TYPE STRING ADVANCED DESCRIPTION "Ground station port?" - DESCRIPTION "3" + DEFAULT "3" OPTIONS "0" "1" "2" "3") apm_option("MAV_SYSTEM_ID" TYPE STRING ADVANCED DESCRIPTION "MAVLink System ID?" - DESCRIPTION "1") + DEFAULT "1") apm_option("SERIAL0_BAUD" TYPE STRING ADVANCED DESCRIPTION "Serial 0 baudrate?" @@ -122,39 +135,47 @@ apm_option("CUR_AMPS_OFFSET" TYPE STRING ADVANCED DESCRIPTION "Current amps offset?" DEFAULT "0.0") -apm_option("CUR_AMPS_OFFSET" TYPE STRING ADVANCED - DESCRIPTION "Current amps offset?" - DEFAULT "0.0") - - -#set(CUR_AMPS_PER_VOLT "27.32" CACHE STRING "Current amps/volt?") -#set(CUR_AMPS_OFFSET "0.0" CACHE STRING "Current amps offset?") -#set(HIGH_DISCHARGE "1760" CACHE STRING "What to consider high discharge rate (milliamp-hours)?") - -#set(INPUT_VOLTAGE "4.68" CACHE STRING "Voltage measured at the processor (volts)?") - -#set(FLIGHT_MODE_CHANNEL "8" CACHE STRING "The radio channel to control the flight mode.") -#set_property(CACHE FLIGHT_MODE_CHANNEL PROPERTY STRINGS 1 2 3 4 5 6 7 8) - -#set(FLIGHT_MODES MANUAL STABILIZE FLY_BY_WIRE_A FLY_BY_WIRE_B RTL AUTO LOITER CIRCLE) - -#set(FLIGHT_MODE_1 "RTL" CACHE STRING "Flight mode for radio position 1 (1165 ms)?") -#set_property(CACHE FLIGHT_MODE_1 PROPERTY STRINGS ${FLIGHT_MODES}) - -#set(FLIGHT_MODE_2 "RTL" CACHE STRING "Flight mode for radio position 2 (1295 ms)?") -#set_property(CACHE FLIGHT_MODE_2 PROPERTY STRINGS ${FLIGHT_MODES}) - -#set(FLIGHT_MODE_3 "STABILIZE" CACHE STRING "Flight mode for radio position 3 (1425 ms)?") -#set_property(CACHE FLIGHT_MODE_3 PROPERTY STRINGS ${FLIGHT_MODES}) - -#set(FLIGHT_MODE_4 "STABILIZE" CACHE STRING "Flight mode for radio position 4 (1555 ms)?") -#set_property(CACHE FLIGHT_MODE_4 PROPERTY STRINGS ${FLIGHT_MODES}) - -#set(FLIGHT_MODE_5 "MANUAL" CACHE STRING "Flight mode for radio position 5 (FAILSAFE if using channel 8) (1685 ms)?") -#set_property(CACHE FLIGHT_MODE_5 PROPERTY STRINGS ${FLIGHT_MODES}) - -#set(FLIGHT_MODE_6 "MANUAL" CACHE STRING "Flight mode for radio position 6 (FAILSAFE is using channel 8) (1815 ms)?") -#set_property(CACHE FLIGHT_MODE_6 PROPERTY STRINGS ${FLIGHT_MODES}) +apm_option("HIGH_DISCHARGE" TYPE STRING ADVANCED + DESCRIPTION "What to consider high discharge rate (milliamps)?" + DEFAULT "1760") + +apm_option("INPUT_VOLTAGE" TYPE STRING ADVANCED + DESCRIPTION "Voltage measured at the process (V)? (affects ADC measurements)" + DEFAULT "4.68") + +set(RADIO_CHANNELS "1" "2" "3" "4" "5" "6" "7" "8") +apm_option("FLIGHT_MODE_CHANNEL" TYPE STRING ADVANCED + DESCRIPTION "The radio channel to control the flight mode." + DEFAULT "8" + OPTIONS ${RADIO_CHANNELS}) + +set(FLIGHT_MODES + MANUAL STABILIZE + FLY_BY_WIRE_A + FLY_BY_WIRE_B + RTL + AUTO + LOITER CIRCLE) + +set(FLIGHT_MODES_RADIO_PWM 1165 1295 1425 1555 1685 1815) + +set(FLIGHT_MODES_DEFAULT + RTL + RTL + STABILIZE + STABILIZE + MANUAL + MANUAL) + +foreach(MODE 1 2 3 4 5 6) + math(EXPR INDEX "${MODE} -1") + list(GET FLIGHT_MODES_RADIO_PWM ${INDEX} RADIO_PWM) + list(GET FLIGHT_MODES_DEFAULT ${INDEX} FLIGHT_MODE_DEFAULT) + apm_option("FLIGHT_MODE_${MODE}" TYPE STRING ADVANCED + DESCRIPTION "Flight mode ${MODE} (pwm ${RADIO_PWM} ms)?" + DEFAULT "${FLIGHT_MODE_DEFAULT}" + OPTIONS ${FLIGHT_MODES}) +endforeach() #set(FLAP_1_SPEED "0" CACHE STRING "Speed below which flaps are deployed (m/s)?") #set(FLAP_1_PERCENT "0" CACHE STRING "Flap deployment percentage (%)?") diff --git a/cmake/modules/APMCPackConfig.cmake b/cmake/modules/APMCPackConfig.cmake new file mode 100644 index 0000000000000000000000000000000000000000..1e2a08e49bb59e9645ee8a8a01f39df2dd33e9bb --- /dev/null +++ b/cmake/modules/APMCPackConfig.cmake @@ -0,0 +1,20 @@ +# packaging settings +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}") +set(CPACK_PACKAGE_VENDOR "DIYDRONES") +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "james.goppert@gmail.com") +set(CPACK_PACKAGE_CONTACT "james.goppert@gmail.com") +set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/../README.txt") +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/../COPYING.txt") +set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/../README.txt") +set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") +set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") +set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") +set(CPACK_SET_DESTDIR TRUE) +set(CPACK_SOURCE_IGNORE_FILES ${CPACK_SOURCE_IGNORE_FILES} + /.git/;/build/;~$;.*\\\\.bin$;.*\\\\.swp$) +set(CPACK_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") +set(CPACK_SOURCE_GENERATOR "ZIP") +set(CPACK_GENERATOR "ZIP") +set(CPACK_PACKAGE_NAME "${FIRMWARE_NAME}") +include(CPack) diff --git a/cmake/modules/APMOption.cmake b/cmake/modules/APMOption.cmake index 29043cd3732b7c183ed2c89f1fde84d949b68546..e507b25b46872fe5db6ede774b270c8aa294e429 100644 --- a/cmake/modules/APMOption.cmake +++ b/cmake/modules/APMOption.cmake @@ -23,6 +23,12 @@ function(apm_option NAME) if ("${VAR_TYPE}" STREQUAL "INTERNAL") message(STATUS "\tVAR_TYPE: ${VAR_TYPE}") set("${NAME}" "${ARG_DEFAULT}" CACHE "${ARG_TYPE}" "${ARG_DESCRIPTION}" FORCE) + + # if not hidden, add it to the global options list + else() + set(APM_OPTIONS ${APM_OPTIONS} ${NAME} CACHE INTERNAL "list of all options") + list(REMOVE_DUPLICATES APM_OPTIONS) + #message(STATUS "APM_OPTIONS: ${APM_OPTIONS}") endif() # set options for combo box @@ -34,3 +40,16 @@ function(apm_option NAME) endif() endfunction() + +function(apm_option_generate_config) + cmake_parse_arguments(ARG "" "FILE" "" ${ARGN}) + list(REMOVE_DUPLICATES APM_OPTIONS) + file (WRITE "${CMAKE_BINARY_DIR}/${ARG_FILE}" "//automatically generated, do not edit\n") + file (APPEND "${CMAKE_BINARY_DIR}/${ARG_FILE}" "#define OFF 0\n#define ON 1\n") + foreach(ITEM ${APM_OPTIONS}) + #message(STATUS "item: ${ITEM}") + get_property(ITEM_VALUE CACHE ${ITEM} PROPERTY VALUE) + get_property(ITEM_HELP CACHE ${ITEM} PROPERTY HELPSTRING) + file(APPEND "${CMAKE_BINARY_DIR}/${ARG_FILE}" "\n#define ${ITEM} ${ITEM_VALUE} // ${ITEM_HELP}") + endforeach() +endfunction() diff --git a/cmake/modules/APMProject.cmake b/cmake/modules/APMProject.cmake deleted file mode 100644 index 8d49df125e63e587dd58dcad1c4e68aec969a473..0000000000000000000000000000000000000000 --- a/cmake/modules/APMProject.cmake +++ /dev/null @@ -1,45 +0,0 @@ -# disallow in-source build -include(MacroEnsureOutOfSourceBuild) -macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out of source build. -Please create a separate build directory and run 'cmake /path/to/${PROJECT_NAME} [options]' there.") - -# macros -include(CMakeParseArguments) -include(APMOption) - -# options -include(options.cmake) - -# modify flags from default toolchain flags -set(APM_OPT_FLAGS "-Wformat -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wformat=2") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${APM_OPT_FLAGS}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${APM_OPT_FLAGS} -Wno-reorder") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${APM_OPT_FLAGS} -Wl,--relax") - -# build apm project -set(ARDUINO_EXTRA_LIBRARIES_PATH ${CMAKE_SOURCE_DIR}/../libraries) -set(${PROJECT_NAME}_SKETCH ${CMAKE_SOURCE_DIR}/../${PROJECT_NAME}) -set(${PROJECT_NAME}_BOARD ${APM_BOARD}) -set(${PROJECT_NAME}_PORT ${APM_PROGRAMMING_PORT}) -generate_arduino_firmware(${PROJECT_NAME}) - -# packaging settings -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}") -set(CPACK_PACKAGE_VENDOR "DIYDRONES") -set(CPACK_DEBIAN_PACKAGE_MAINTAINER "james.goppert@gmail.com") -set(CPACK_PACKAGE_CONTACT "james.goppert@gmail.com") -set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/../README.txt") -set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/../COPYING.txt") -set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/../README.txt") -set(CPACK_PACKAGE_VERSION_MAJOR "${APPLICATION_VERSION_MAJOR}") -set(CPACK_PACKAGE_VERSION_MINOR "${APPLICATION_VERSION_MINOR}") -set(CPACK_PACKAGE_VERSION_PATCH "${APPLICATION_VERSION_PATCH}") -set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") -set(CPACK_SET_DESTDIR TRUE) -set(CPACK_SOURCE_IGNORE_FILES ${CPACK_SOURCE_IGNORE_FILES} - /.git/;/build/;~$;.*\\\\.bin$;.*\\\\.swp$) -set(CPACK_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") -set(CPACK_SOURCE_GENERATOR "ZIP") -set(CPACK_GENERATOR "ZIP") -set(CPACK_PACKAGE_NAME "${APM_PROJECT}_${BOARD}_${HIL_MODE}") -include(CPack) diff --git a/cmake/options.cmake b/cmake/options.cmake deleted file mode 100644 index 4947a3f65af9470904db5d210154296b368ae3e0..0000000000000000000000000000000000000000 --- a/cmake/options.cmake +++ /dev/null @@ -1,213 +0,0 @@ -# options -#bool_option(LOGGING DESCRIPTION "Logging support?" DEFAULT OFF) -#bool_option(GPS "Gps support?" ON) -#option(CLI_SLIDER "Command-line-interface slider support?" OFF) -#option(APM2 "Build for APM 2.0" OFF) - -# set booleans for project -foreach(PROJECT_NAME "ArduPlane;ArduCopter") - if ("${APM_PROJECT}" STREQUAL "${PROJECT_NAME}") - set(IS_${PROJECT_NAME} true) - else() - set(IS_${PROJECT_NAME} false) - endif() -endforeach() - -if (IS_ARDUCOPTER) -endif() -apm_option("APM_FRAME" TYPE STRING - DEPENDS IS_ARDUPLANE - DESCRIPTION "Vehicle type?" - DEFAULT "PLANE_FRAME" - OPTIONS - "PLANE FRAME" - "HELI_FRAME" - "HEXA_FRAME" - "OCTA_FRAME" - "Y6_FRAME" - ) - -apm_option("GPS_PROTOCOL" TYPE STRING - DEPENDS IS_ARDUPLANE - DESCRIPTION "GPS protocol?" - DEFAULT "GPS_PROTOCOL_AUTO" - OPTIONS - "GPS_PROTOOCL_NONE" - "GPS_PROTOCOL_AUTO" - "GPS_PROTOCOL_NONE" - "GPS_PROTOCOL_IMU" - "GPS_PROTOCOL_MTK" - "GPS_PROTOCOL_MTK16" - "GPS_PROTOCOL_UBLOX" - "GPS_PROTOCOL_SIRF" - "GPS_PROTOCOL_NMEA") - -apm_option("AIRSPEED_SENSOR" TYPE BOOL - DEPENDS IS_ARDUPLANE - DESCRIPTION "Enable airspeed sensor?" - DEFAULT OFF) - -apm_option("AIRSPEED_RATIO" TYPE STRING ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "Airspeed ratio?" - DEFAULT "1.9936") - -apm_option("MAGNETOMETER" TYPE BOOL - DEPENDS IS_ARDUPLANE - DESCRIPTION "Enable airspeed sensor?" - DEFAULT OFF) - -apm_option("MAG_ORIENTATION" TYPE STRING ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "Magnetometer orientation?" - DEFAULT "AP_COMPASS_COMPONENTS_DOWN_PINS_FORWARD" - OPTIONS - "AP_COMPASS_COMPONENTS_DOWN_PINS_FORWARD" - "AP_COMPASS_COMPONENTS_DOWN_PINS_BACK" - "AP_COMPASS_COMPONENTS_UP_PINS_FORWARD" - "AP_COMPASS_COMPONENTS_UP_PINS_BACK") - -apm_option("HIL_MODE" TYPE STRING - DEPENDS IS_ARDUPLANE - DESCRIPTION "Hardware-in-the-loop- mode?" - DEFAULT "HIL_MODE_DISABLED" - OPTIONS - "HIL_MODE_DISABLED" - "HIL_MODE_ATTITUDE" - "HIL_MODE_SENSORS") - -apm_option("HIL_PORT" TYPE STRING - DEPENDS IS_ARDUPLANE - DESCRIPTION "Port for Hardware-in-the-loop communication" - DEFAULT "0" - OPTIONS "0" "1" "2" "3") - -apm_option("HIL_PROTOCOL" TYPE STRING - DEPENDS IS_ARDUPLANE - DESCRIPTION "Hardware-in-the-loop protocol?" - DEFAULT "HIL_PROTOCOL_MAVLINK" - OPTIONS "HIL_PROTOCOL_MAVLINK" "HIL_PROTOCOL_XPLANE") - -apm_option("GPS_PROTOCOL" TYPE STRING - DEPENDS IS_ARDUPLANE - DESCRIPTION "Ground station protocol?" - DEFAULT "GCS_PROTOCOL_MAVLINK" - OPTIONS "GCS_PROTOCOL_NONE" "GCS_PROTOCOL_MAVLINK") - -apm_option("GCS_PORT" TYPE STRING ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "Ground station port?" - DESCRIPTION "3" - OPTIONS "0" "1" "2" "3") - -apm_option("MAV_SYSTEM_ID" TYPE STRING ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "MAVLink System ID?" - DESCRIPTION "1") - -apm_option("SERIAL0_BAUD" TYPE STRING ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "Serial 0 baudrate?" - DEFAULT "115200" - OPTIONS "57600" "115200") - -apm_option("SERIAL3_BAUD" TYPE STRING ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "Serial 3 baudrate?" - DEFAULT "57600" - OPTIONS "57600" "115200") - -apm_option("BATTERY_EVENT" TYPE BOOL ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "Enable low voltage/ high discharge warnings?" - DEFAULT OFF) - -apm_option("LOW_VOLTAGE" TYPE STRING ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "Voltage to consider low (volts)?" - DEFAULT "9.6") - -apm_option("VOLT_DIV_RATIO" TYPE STRING ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "Voltage division ratio?" - DEFAULT "3.56") - -apm_option("CUR_AMPS_PER_VOLT" TYPE STRING ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "Current amps/volt?" - DEFAULT "27.32") - -apm_option("CUR_AMPS_OFFSET" TYPE STRING ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "Current amps offset?" - DEFAULT "0.0") - -apm_option("CUR_AMPS_OFFSET" TYPE STRING ADVANCED - DEPENDS IS_ARDUPLANE - DESCRIPTION "Current amps offset?" - DEFAULT "0.0") - - -#set(CUR_AMPS_PER_VOLT "27.32" CACHE STRING "Current amps/volt?") -#set(CUR_AMPS_OFFSET "0.0" CACHE STRING "Current amps offset?") -#set(HIGH_DISCHARGE "1760" CACHE STRING "What to consider high discharge rate (milliamp-hours)?") - -#set(INPUT_VOLTAGE "4.68" CACHE STRING "Voltage measured at the processor (volts)?") - -#set(FLIGHT_MODE_CHANNEL "8" CACHE STRING "The radio channel to control the flight mode.") -#set_property(CACHE FLIGHT_MODE_CHANNEL PROPERTY STRINGS 1 2 3 4 5 6 7 8) - -#set(FLIGHT_MODES MANUAL STABILIZE FLY_BY_WIRE_A FLY_BY_WIRE_B RTL AUTO LOITER CIRCLE) - -#set(FLIGHT_MODE_1 "RTL" CACHE STRING "Flight mode for radio position 1 (1165 ms)?") -#set_property(CACHE FLIGHT_MODE_1 PROPERTY STRINGS ${FLIGHT_MODES}) - -#set(FLIGHT_MODE_2 "RTL" CACHE STRING "Flight mode for radio position 2 (1295 ms)?") -#set_property(CACHE FLIGHT_MODE_2 PROPERTY STRINGS ${FLIGHT_MODES}) - -#set(FLIGHT_MODE_3 "STABILIZE" CACHE STRING "Flight mode for radio position 3 (1425 ms)?") -#set_property(CACHE FLIGHT_MODE_3 PROPERTY STRINGS ${FLIGHT_MODES}) - -#set(FLIGHT_MODE_4 "STABILIZE" CACHE STRING "Flight mode for radio position 4 (1555 ms)?") -#set_property(CACHE FLIGHT_MODE_4 PROPERTY STRINGS ${FLIGHT_MODES}) - -#set(FLIGHT_MODE_5 "MANUAL" CACHE STRING "Flight mode for radio position 5 (FAILSAFE if using channel 8) (1685 ms)?") -#set_property(CACHE FLIGHT_MODE_5 PROPERTY STRINGS ${FLIGHT_MODES}) - -#set(FLIGHT_MODE_6 "MANUAL" CACHE STRING "Flight mode for radio position 6 (FAILSAFE is using channel 8) (1815 ms)?") -#set_property(CACHE FLIGHT_MODE_6 PROPERTY STRINGS ${FLIGHT_MODES}) - -#set(FLAP_1_SPEED "0" CACHE STRING "Speed below which flaps are deployed (m/s)?") -#set(FLAP_1_PERCENT "0" CACHE STRING "Flap deployment percentage (%)?") - -#set(FLAP_2_SPEED "0" CACHE STRING "Speed below which flaps are deployed (m/s)?") -#set(FLAP_2_PERCENT "0" CACHE STRING "Flap deployment percentage (%)?") - -#set(THROTTLE_FAILSAFE "ENABLED" CACHE STRING "Enable throttle shuttoff when radio below failsafe value?") -#set_property(CACHE THROTTLE_FAILSAFE PROPERTY STRINGS ENABLED DISABLED) - -#set(THROTTLE_FS_VALUE "950" CACHE STRING "Radio value at which to disable throttle (ms).") - -#set(GCS_HEARTBEAT_FAILSAFE "DISABLED" CACHE STRING "Enable failsafe when ground station communication lost?") -#set_property(CACHE GCS_HEARTBEAT_FAILSAFE PROPERTY STRINGS ENABLED DISABLED) -#set(SHORT_FAILSAFE_ACTION "0" CACHE STRING "Failsafe mode RTL, then return to AUTO/LOITER") -#set(LONG_FAILSAFE_ACTION "0" CACHE STRING "Failsafe mode RTL") - -#set(AUTO_TRIM "DISABLED" CACHE STRING "Update trim with manual radio input when leaving MANUAL mode?") -#set_property(CACHE AUTO_TRIM PROPERTY STRINGS ENABLED DISABLED) - -#set(THROTTLE_REVERSE "DISABLED" CACHE STRING "Reverse throttle output signal?") -#set_property(CACHE THROTTLE_REVERSE PROPERTY STRINGS ENABLED DISABLED) - -#set(ENABLE_STICK_MIXING "DISABLED" CACHE STRING "Enable manual input in autopilot modes?") -#set_property(CACHE THROTTLE_REVERSE PROPERTY STRINGS ENABLED DISABLED) - -#set(THROTTLE_OUT "ENABLED" CACHE STRING "Disabled throttle output? (useful for debugging)?") -#set_property(CACHE THROTTLE_OUT PROPERTY STRINGS ENABLED DISABLED) - -#set(GROUND_START_DELAY "0" CACHE STRING "Delay between power-up and IMU calibration (s)?") - -#set(ENABLE_AIR_START "DISABLED" CACHE STRING "Enable in-air restart?") -#set_property(CACHE ENABLE_AIR_START PROPERTY STRINGS ENABLED DISABLED) - -