Skip to content

Commit a738300

Browse files
committed
fix(modem): One step closer to perfect forwarding
1 parent 9b334e7 commit a738300

File tree

10 files changed

+76
-76
lines changed

10 files changed

+76
-76
lines changed

components/esp_modem/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ set(srcs ${platform_srcs}
2929
"src/esp_modem_modules.cpp")
3030

3131
if(CONFIG_USE_INPLACE_COMMAND_TEMPLATES)
32-
set(include_dirs "include" "include/generate")
32+
set(include_dirs "include" "generate/include")
3333
else()
34-
set(include_dirs "include" "include/commands")
34+
set(include_dirs "include" "generate/include")
3535
endif()
3636

3737
idf_component_register(SRCS "${srcs}"
38-
INCLUDE_DIRS "include" "include/commands"
38+
INCLUDE_DIRS "${include_dirs}"
3939
PRIV_INCLUDE_DIRS private_include
4040
REQUIRES ${dependencies})
4141

components/esp_modem/examples/modem_console/main/my_module_dce.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class DCE : public esp_modem::DCE_T<GenericModule>, public CommandableIf {
5555
esp_modem::return_type name(__VA_ARGS__);
5656

5757
// DECLARE_ALL_COMMAND_APIS(forwards name(...))
58-
#include "generate/esp_modem_command_declare.inc"
58+
#include "esp_modem_command_declare.inc"
5959

6060
#undef ESP_MODEM_DECLARE_DCE_COMMAND
6161

components/esp_modem/include/generate/esp_modem_command_library.hpp renamed to components/esp_modem/generate/include/cxx_include/esp_modem_command_library.hpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,9 @@ command_result generic_command(CommandableIf *t, const std::string &command,
4040
* @brief Declaration of all commands is generated from esp_modem_command_declare.inc
4141
*/
4242
#define ESP_MODEM_DECLARE_DCE_COMMAND(name, return_type, ...) \
43-
return_type name(CommandableIf *t, ## __VA_ARGS__);
43+
return_type name(CommandableIf *t ESP_MODEM_COMMAND_PARAMS_AFTER(__VA_ARGS__));
4444

45-
// DECLARE_ALL_COMMAND_APIS(declare name(Commandable *p, ...);)
46-
#include "generate/esp_modem_command_declare.inc"
45+
#include "esp_modem_command_declare.inc"
4746

4847
#undef ESP_MODEM_DECLARE_DCE_COMMAND
4948

components/esp_modem/include/generate/esp_modem_dce_module.hpp renamed to components/esp_modem/generate/include/cxx_include/esp_modem_dce_module.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ class GenericModule: public ModuleIf {
117117

118118
// DECLARE_ALL_COMMAND_APIS(virtual return_type name(...); )
119119

120-
#include "generate/esp_modem_command_declare.inc"
120+
#include "esp_modem_command_declare.inc"
121121

122122

123123
#undef ESP_MODEM_DECLARE_DCE_COMMAND

components/esp_modem/include/generate/esp_modem_command_declare.inc renamed to components/esp_modem/generate/include/esp_modem_command_declare.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
// limitations under the License.
1414
//#pragma once
1515

16-
#include "generate/esp_modem_command_declare_helper.inc"
16+
#include "esp_modem_command_declare_helper.inc"
1717

1818

1919
/**
@@ -28,7 +28,7 @@ ESP_MODEM_DECLARE_DCE_COMMAND(sync, command_result)
2828
* @param[out] act access technology
2929
* @return OK, FAIL or TIMEOUT
3030
*/
31-
ESP_MODEM_DECLARE_DCE_COMMAND(get_operator_name, command_result, STRING_OUT(name), INT_OUT(act))
31+
ESP_MODEM_DECLARE_DCE_COMMAND(get_operator_name, command_result, STR_OUT(name), INT_OUT(act))
3232

3333
/**
3434
* @brief Stores current user profile
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//
2+
//#define INT_IN(name) int name
3+
//#ifdef __cplusplus
4+
//#define STRING_IN(name) const std::string& name
5+
//#define STRING_OUT(name) std::string& name
6+
//#define BOOL_IN(name) const bool name
7+
//#define BOOL_OUT(name) bool& name
8+
//#define INT_OUT(name) int& name
9+
//#define INTEGER_LIST_IN(name) const int* name
10+
//#define STRUCT_OUT(struct_name, name) struct_name& name
11+
//#else
12+
//#define STRING_IN(name) const char* name
13+
//#define STRING_OUT(name) char* name
14+
//#define BOOL_IN(name) const bool name
15+
//#define BOOL_OUT(name) bool* name
16+
//#define INT_OUT(name) int* name
17+
//#define INTEGER_LIST_IN(name) const int* name
18+
//#define STRUCT_OUT(struct_name, name) esp_modem_ ## struct_name ## _t* name
19+
//#endif
20+
//
21+
//#define FORWARD_INT_IN(name) name
22+
//#define FORWARD_STRING_IN(name) name
23+
//#define FORWARD_STRING_OUT(name) name
24+
//#define FORWARD_BOOL_IN(name) name
25+
//#define FORWARD_BOOL_OUT(name) name
26+
//#define FORWARD_INT_OUT(name) name
27+
//#define FORWARD_INTEGER_LIST_IN(name) name
28+
//#define FORWARD_STRUCT_OUT(struct_name, name) name
29+
30+
// Utility to count arguments (works for up to two parameters here)
31+
#define ESP_MODEM_GET_MACRO(_0, _1, _2, _3, _4, _5, _6, ESP_MODEM_MACRO_NAME, ...) ESP_MODEM_MACRO_NAME
32+
#define ESP_MODEM_COMMAND_PARAMS(...) ESP_MODEM_GET_MACRO(_0, ##__VA_ARGS__, ESP_MODEM_HELPER6, ESP_MODEM_HELPER5, ESP_MODEM_HELPER4, ESP_MODEM_HELPER3, ESP_MODEM_HELPER2, ESP_MODEM_HELPER1, ESP_MODEM_HELPER0)(PARAM_, ESP_MODEM_NO_COMMA, ESP_MODEM_NO_COMMA, ##__VA_ARGS__)
33+
#define ESP_MODEM_COMMAND_PARAMS_AFTER(...) ESP_MODEM_GET_MACRO(_0, ##__VA_ARGS__, ESP_MODEM_HELPER6, ESP_MODEM_HELPER5, ESP_MODEM_HELPER4, ESP_MODEM_HELPER3, ESP_MODEM_HELPER2, ESP_MODEM_HELPER1, ESP_MODEM_HELPER0)(PARAM_, ESP_MODEM_COMMA, ESP_MODEM_NO_COMMA, ##__VA_ARGS__)
34+
#define ESP_MODEM_COMMAND_FORWARD(...) ESP_MODEM_GET_MACRO(_0, ##__VA_ARGS__, ESP_MODEM_HELPER6, ESP_MODEM_HELPER5, ESP_MODEM_HELPER4, ESP_MODEM_HELPER3, ESP_MODEM_HELPER2, ESP_MODEM_HELPER1, ESP_MODEM_HELPER0)(FORWARD_, ESP_MODEM_NO_COMMA, ESP_MODEM_NO_COMMA, ##__VA_ARGS__)
35+
#define ESP_MODEM_COMMAND_FORWARD_AFTER(...) ESP_MODEM_GET_MACRO(_0, ##__VA_ARGS__, ESP_MODEM_HELPER6, ESP_MODEM_HELPER5, ESP_MODEM_HELPER4, ESP_MODEM_HELPER3, ESP_MODEM_HELPER2, ESP_MODEM_HELPER1, ESP_MODEM_HELPER0)(FORWARD_, ESP_MODEM_COMMA, ESP_MODEM_NO_COMMA, ##__VA_ARGS__)
36+
37+
#define PARAM_STR_OUT(name) std::string& name
38+
#define FORWARD_STR_OUT(name) name
39+
#define PARAM_STR_IN(name) const std::string& name
40+
#define FORWARD_STR_IN(name) name
41+
#define PARAM_INT_OUT(name) int& name
42+
#define FORWARD_INT_OUT(name) name
43+
#define PARAM_INT_IN(name) int name
44+
#define FORWARD_INT_IN(name) name
45+
#define ESP_MODEM_COMMA ,
46+
#define ESP_MODEM_NO_COMMA
47+
48+
#define ESP_MODEM_HELPER_EVAL(x) x
49+
#define ESP_MODEM_HELPER_GENERIC(a, b) ESP_MODEM_HELPER_EVAL(a ## b)
50+
#define ESP_MODEM_HELPER0(prefix, lead_comma, trail_comma)
51+
#define ESP_MODEM_HELPER1(prefix, lead_comma, trail_comma, p1) lead_comma ESP_MODEM_HELPER_GENERIC(prefix, p1) trail_comma
52+
#define ESP_MODEM_HELPER2(prefix, lead_comma, trail_comma, p1, p2) lead_comma ESP_MODEM_HELPER_GENERIC(prefix, p1), ESP_MODEM_HELPER_GENERIC(prefix, p2) trail_comma
53+
#define ESP_MODEM_HELPER3(prefix, lead_comma, trail_comma, p1, p2, p3) lead_comma ESP_MODEM_HELPER_GENERIC(prefix, p1), ESP_MODEM_HELPER_GENERIC(prefix, p2), ESP_MODEM_HELPER_GENERIC(prefix, p3) trail_comma
54+
#define ESP_MODEM_HELPER4(prefix, lead_comma, trail_comma, p1, p2, p3, p4) lead_comma \
55+
ESP_MODEM_HELPER_GENERIC(prefix, p1), \
56+
ESP_MODEM_HELPER_GENERIC(prefix, p2), \
57+
ESP_MODEM_HELPER_GENERIC(prefix, p3), \
58+
ESP_MODEM_HELPER_GENERIC(prefix, p4) trail_comma
59+
#define ESP_MODEM_HELPER5(prefix, lead_comma, trail_comma, p1, p2, p3, p4, p5) lead_comma \
60+
ESP_MODEM_HELPER_GENERIC(prefix, p1), \
61+
ESP_MODEM_HELPER_GENERIC(prefix, p2), \
62+
ESP_MODEM_HELPER_GENERIC(prefix, p3), \
63+
ESP_MODEM_HELPER_GENERIC(prefix, p4), \
64+
ESP_MODEM_HELPER_GENERIC(prefix, p5) trail_comma

components/esp_modem/include/generate/esp_modem_command_declare_helper.inc

Lines changed: 0 additions & 28 deletions
This file was deleted.

components/esp_modem/scripts/generate.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
23
for i in esp_modem_dce_generic.hpp esp_modem_dce_module.hpp esp_modem_command_library.hpp; do
34
out_file="../include/commands/cxx_include/$i";
45
in_file="../include/generate/$i";

components/esp_modem/src/esp_modem_modules.cpp

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -15,46 +15,10 @@ namespace esp_modem {
1515
GenericModule::GenericModule(std::shared_ptr<DTE> dte, const dce_config *config) :
1616
dte(std::move(dte)), pdp(std::make_unique<PdpContext>(config->apn)) {}
1717

18-
// Utility to count arguments (works for up to two parameters here)
19-
#define GET_MACRO(_0, _1, _2, _3, NAME, ...) NAME
20-
#define FOO(...) GET_MACRO(_0, ##__VA_ARGS__, FOO3, FOO2, FOO1, FOO0)(PARAM_, NO_COMMA, NO_COMMA, ##__VA_ARGS__)
21-
#define GOO(...) GET_MACRO(_0, ##__VA_ARGS__, FOO3, FOO2, FOO1, FOO0)(FORWARD_, COMMA, NO_COMMA, ##__VA_ARGS__)
22-
//#define GOO(...) GET_MACRO(_0, ##__VA_ARGS__, GOO3, GOO2, GOO1, GOO0)(__VA_ARGS__)
23-
24-
#define PARAM_STR_OUT(name) std::string& name
25-
#define FORWARD_STR_OUT(name) name
26-
#define PARAM_STR_IN(name) const std::string& name
27-
#define FORWARD_STR_IN(name) name
28-
#define PARAM_INT_OUT(name) int& name
29-
#define FORWARD_INT_OUT(name) name
30-
#define PARAM_INT_IN(name) int name
31-
#define FORWARD_INT_IN(name) name
32-
#define COMMA ,
33-
#define NO_COMMA
34-
35-
#define EVAL(x) x
36-
#define FOO_GENERIC(a, b) EVAL(a ## b)
37-
#define FOO0(prefix, lead_comma, trail_comma)
38-
#define FOO1(prefix, lead_comma, trail_comma, p1) lead_comma FOO_GENERIC(prefix, p1) trail_comma
39-
#define FOO2(prefix, lead_comma, trail_comma, p1, p2) lead_comma FOO_GENERIC(prefix, p1), FOO_GENERIC(prefix, p2) trail_comma
40-
#define FOO3(prefix, lead_comma, trail_comma, p1, p2, p3) lead_comma FOO_GENERIC(prefix, p1), FOO_GENERIC(prefix, p2), FOO_GENERIC(prefix, p3) trail_comma
41-
42-
#define GOO1(p1) , FOO_GENERIC(FORWARD_, p1)
43-
44-
//#define FOO1(p1) EVAL(PARAM_ ## p1)
45-
//#define FOO2(p1, p2) EVAL(PARAM_ ## p1), EVAL(PARAM_ ## p2)
46-
//#define FOO3(p1, p2, p3) EVAL(PARAM_ ## p1), \
47-
// EVAL(PARAM_ ## p2), \
48-
// EVAL(PARAM_ ## p3)
49-
50-
#define GOO0()
51-
//#define GOO1(p1) , EVAL(FORWARD_ ## p1)
52-
#define GOO2(p1, p2) , EVAL(FORWARD_ ## p1), EVAL(FORWARD_ ## p2)
53-
#define GOO3(p1, p2, p3) , EVAL(FORWARD_ ## p1), EVAL(FORWARD_ ## p2), EVAL(FORWARD_ ## p3)
54-
5518

5619
#define COMMAND(name, type, ...) \
57-
type GenericModule::name(FOO(__VA_ARGS__)) { return esp_modem::dce_commands::name(dte.get() GOO(__VA_ARGS__)); }
20+
type GenericModule::name(ESP_MODEM_COMMAND_PARAMS(__VA_ARGS__)) { \
21+
return esp_modem::dce_commands::name(dte.get() ESP_MODEM_COMMAND_FORWARD_AFTER(__VA_ARGS__)); }
5822

5923
COMMAND(sync, command_result)
6024
COMMAND(set_pin, command_result, STR_IN(pin));

0 commit comments

Comments
 (0)