@@ -22,10 +22,10 @@ cmake_minimum_required(VERSION 3.6)
2222# Options
2323#---------------------------------------------------------------------------------------
2424
25- # Allow switching of device class
26- set (CLASS_LIST classA classB classC)
27- set (CLASS classA CACHE STRING "Default device is Class A" )
28- set_property (CACHE CLASS PROPERTY STRINGS ${CLASS_LIST } )
25+ # Allow switching of sub projects
26+ set (SUB_PROJECT_LIST classA classB classC periodic-uplink-lpp fuota- test -01 )
27+ set (SUB_PROJECT classA CACHE STRING "Default sub project is Class A" )
28+ set_property (CACHE SUB_PROJECT PROPERTY STRINGS ${SUB_PROJECT_LIST } )
2929
3030# Allow switching of active region
3131set (ACTIVE_REGION_LIST LORAMAC_REGION_EU868 LORAMAC_REGION_US915 LORAMAC_REGION_CN779
@@ -35,23 +35,99 @@ set(ACTIVE_REGION_LIST LORAMAC_REGION_EU868 LORAMAC_REGION_US915 LORAMAC_REGIO
3535set (ACTIVE_REGION LORAMAC_REGION_EU868 CACHE STRING "Default active region is EU868" )
3636set_property (CACHE ACTIVE_REGION PROPERTY STRINGS ${ACTIVE_REGION_LIST} )
3737
38- if ((CLASS STREQUAL classB) AND NOT CLASSB_ENABLED )
39- message (FATAL_ERROR "Please turn on Class B support of LoRaMac ( CLASSB_ENABLED=ON ) to use Class B application " )
38+ if ((SUB_PROJECT STREQUAL classB OR SUB_PROJECT STREQUAL periodic-uplink-lpp OR SUB_PROJECT STREQUAL fuota- test -01 ) AND NOT CLASSB_ENABLED )
39+ message (FATAL_ERROR "Please turn on Class B support of LoRaMac ( CLASSB_ENABLED=ON ) to use Class B, periodic-uplink-lpp, fuota-test-01 sub projects " )
4040endif ()
4141
42- #---------------------------------------------------------------------------------------
43- # Applications
44- #---------------------------------------------------------------------------------------
45- file (GLOB ${PROJECT_NAME} _APPS "${CMAKE_CURRENT_LIST_DIR} /common/*.c" )
42+ if (SUB_PROJECT STREQUAL periodic-uplink-lpp)
43+
44+ #---------------------------------------------------------------------------------------
45+ # Application common features handling
46+ #---------------------------------------------------------------------------------------
47+ list (APPEND ${PROJECT_NAME} _COMMON
48+ "${CMAKE_CURRENT_LIST_DIR} /common/CayenneLpp.c"
49+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandlerMsgDisplay.c"
50+ "${CMAKE_CURRENT_LIST_DIR} /common/NvmCtxMgmt.c"
51+ )
52+
53+ #---------------------------------------------------------------------------------------
54+ # Application LoRaMac handler
55+ #---------------------------------------------------------------------------------------
56+ list (APPEND ${PROJECT_NAME} _LMH
57+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/LmHandler.c"
58+ )
59+
60+ #---------------------------------------------------------------------------------------
61+ # LoRaMac handler applicative packages
62+ #---------------------------------------------------------------------------------------
63+ list (APPEND ${PROJECT_NAME} _LMHP
64+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/packages/FragDecoder.c"
65+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/packages/LmhpClockSync.c"
66+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/packages/LmhpCompliance.c"
67+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/packages/LmhpFragmentation.c"
68+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/packages/LmhpRemoteMcastSetup.c"
69+ )
70+
71+ elseif (SUB_PROJECT STREQUAL fuota-test -01)
72+
73+ #---------------------------------------------------------------------------------------
74+ # Application common features handling
75+ #---------------------------------------------------------------------------------------
76+ list (APPEND ${PROJECT_NAME} _COMMON
77+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandlerMsgDisplay.c"
78+ "${CMAKE_CURRENT_LIST_DIR} /common/NvmCtxMgmt.c"
79+ )
80+
81+ #---------------------------------------------------------------------------------------
82+ # Application LoRaMac handler
83+ #---------------------------------------------------------------------------------------
84+ list (APPEND ${PROJECT_NAME} _LMH
85+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/LmHandler.c"
86+ )
87+
88+ #---------------------------------------------------------------------------------------
89+ # LoRaMac handler applicative packages
90+ #---------------------------------------------------------------------------------------
91+ list (APPEND ${PROJECT_NAME} _LMHP
92+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/packages/FragDecoder.c"
93+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/packages/LmhpClockSync.c"
94+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/packages/LmhpCompliance.c"
95+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/packages/LmhpFragmentation.c"
96+ "${CMAKE_CURRENT_LIST_DIR} /common/LmHandler/packages/LmhpRemoteMcastSetup.c"
97+ )
98+
99+ else () #if(SUB_PROJECT STREQUAL classA OR SUB_PROJECT STREQUAL classB OR SUB_PROJECT STREQUAL classC)
100+
101+ #---------------------------------------------------------------------------------------
102+ # Application common features handling
103+ #---------------------------------------------------------------------------------------
104+ list (APPEND ${PROJECT_NAME} _COMMON
105+ "${CMAKE_CURRENT_LIST_DIR} /common/NvmCtxMgmt.c"
106+ )
107+
108+ #---------------------------------------------------------------------------------------
109+ # Application LoRaMac handler
110+ #---------------------------------------------------------------------------------------
111+ list (APPEND ${PROJECT_NAME} _LMH
112+ )
113+
114+ #---------------------------------------------------------------------------------------
115+ # LoRaMac handler applicative packages
116+ #---------------------------------------------------------------------------------------
117+ list (APPEND ${PROJECT_NAME} _LMHP
118+ )
119+
120+ endif ()
46121
47122#---------------------------------------------------------------------------------------
48- # Target
123+ # Application
49124#---------------------------------------------------------------------------------------
125+ file (GLOB ${PROJECT_NAME} _SOURCES "${CMAKE_CURRENT_LIST_DIR} /${SUB_PROJECT} /${BOARD} /*.c" )
50126
51- file (GLOB ${PROJECT_NAME} _SOURCES " ${CMAKE_CURRENT_LIST_DIR} / ${CLASS} / ${BOARD} /*.c" )
52-
53- add_executable ( ${PROJECT_NAME} - ${CLASS }
54- ${${PROJECT_NAME} _APPS }
127+ add_executable ( ${PROJECT_NAME} - ${SUB_PROJECT}
128+ ${ ${PROJECT_NAME} _COMMON}
129+ ${ ${PROJECT_NAME} _LMH }
130+ ${${PROJECT_NAME} _LMHP }
55131 ${${PROJECT_NAME} _SOURCES}
56132 $<TARGET_OBJECTS:mac>
57133 $<TARGET_OBJECTS:system >
@@ -60,24 +136,28 @@ add_executable(${PROJECT_NAME}-${CLASS}
60136 $<TARGET_OBJECTS:${BOARD} >
61137)
62138
63- target_compile_definitions (${PROJECT_NAME} -${CLASS} PRIVATE ACTIVE_REGION=${ACTIVE_REGION} )
139+ target_compile_definitions (${PROJECT_NAME} -${SUB_PROJECT} PRIVATE $<$<BOOL :${CLASSB_ENABLED} >:LORAMAC_CLASSB_ENABLED>)
140+ target_compile_definitions (${PROJECT_NAME} -${SUB_PROJECT} PRIVATE ACTIVE_REGION=${ACTIVE_REGION} )
64141
65- target_compile_definitions (${PROJECT_NAME} -${CLASS } PUBLIC
142+ target_compile_definitions (${PROJECT_NAME} -${SUB_PROJECT } PUBLIC
66143 $<BUILD_INTERFACE:$<TARGET_PROPERTY:mac,INTERFACE_COMPILE_DEFINITIONS >>
67144)
68145
69- target_include_directories (${PROJECT_NAME} -${CLASS } PUBLIC
146+ target_include_directories (${PROJECT_NAME} -${SUB_PROJECT } PUBLIC
70147 ${CMAKE_CURRENT_SOURCE_DIR} /common
148+ ${CMAKE_CURRENT_SOURCE_DIR} /common/LmHandler
149+ ${CMAKE_CURRENT_SOURCE_DIR} /common/LmHandler/packages
150+ ${CMAKE_CURRENT_SOURCE_DIR} /${SUB_PROJECT} /${BOARD}
71151 $<BUILD_INTERFACE:$<TARGET_PROPERTY:mac,INTERFACE_INCLUDE_DIRECTORIES >>
72152 $<BUILD_INTERFACE:$<TARGET_PROPERTY:system ,INTERFACE_INCLUDE_DIRECTORIES >>
73153 $<BUILD_INTERFACE:$<TARGET_PROPERTY:radio,INTERFACE_INCLUDE_DIRECTORIES >>
74154 $<BUILD_INTERFACE:$<TARGET_PROPERTY:peripherals,INTERFACE_INCLUDE_DIRECTORIES >>
75155 $<BUILD_INTERFACE:$<TARGET_PROPERTY:${BOARD} ,INTERFACE_INCLUDE_DIRECTORIES >>
76156)
77157
78- set_property (TARGET ${PROJECT_NAME} -${CLASS } PROPERTY C_STANDARD 11)
158+ set_property (TARGET ${PROJECT_NAME} -${SUB_PROJECT } PROPERTY C_STANDARD 11)
79159
80- target_link_libraries (${PROJECT_NAME} -${CLASS } m)
160+ target_link_libraries (${PROJECT_NAME} -${SUB_PROJECT } m)
81161
82162#---------------------------------------------------------------------------------------
83163# Debugging and Binutils
@@ -87,13 +167,13 @@ include(gdb-helper)
87167include (binutils-arm-none-eabi)
88168
89169# Generate debugger configurations
90- generate_run_gdb_stlink(${PROJECT_NAME} -${CLASS } )
91- generate_run_gdb_openocd(${PROJECT_NAME} -${CLASS } )
92- generate_vscode_launch_openocd(${PROJECT_NAME} -${CLASS } )
170+ generate_run_gdb_stlink(${PROJECT_NAME} -${SUB_PROJECT } )
171+ generate_run_gdb_openocd(${PROJECT_NAME} -${SUB_PROJECT } )
172+ generate_vscode_launch_openocd(${PROJECT_NAME} -${SUB_PROJECT } )
93173
94174# Print section sizes of target
95- print_section_sizes(${PROJECT_NAME} -${CLASS } )
175+ print_section_sizes(${PROJECT_NAME} -${SUB_PROJECT } )
96176
97177# Create output in hex and binary format
98- create_bin_output(${PROJECT_NAME} -${CLASS } )
99- create_hex_output(${PROJECT_NAME} -${CLASS } )
178+ create_bin_output(${PROJECT_NAME} -${SUB_PROJECT } )
179+ create_hex_output(${PROJECT_NAME} -${SUB_PROJECT } )
0 commit comments