From 0733ea8ff48096d8824d6c6d079b9623a91bc0ab Mon Sep 17 00:00:00 2001 From: "Sjur G. Wroldsen" Date: Wed, 13 Apr 2022 15:36:15 +0200 Subject: [PATCH] Add: Support for SIM7000 modules --- .../esp_modem/include/cxx_include/esp_modem_api.hpp | 6 ++++++ .../include/cxx_include/esp_modem_command_library.hpp | 4 ++-- .../include/cxx_include/esp_modem_dce_factory.hpp | 7 +++++++ .../include/cxx_include/esp_modem_dce_module.hpp | 9 +++++++++ components/esp_modem/include/esp_modem_c_api_types.h | 3 ++- components/esp_modem/src/esp_modem_api.cpp | 5 +++++ components/esp_modem/src/esp_modem_c_api.cpp | 2 ++ components/esp_modem/src/esp_modem_command_library.cpp | 4 ++-- components/esp_modem/src/esp_modem_modules.cpp | 9 +++++++-- 9 files changed, 42 insertions(+), 7 deletions(-) diff --git a/components/esp_modem/include/cxx_include/esp_modem_api.hpp b/components/esp_modem/include/cxx_include/esp_modem_api.hpp index 57299bd17..b74ea8b36 100644 --- a/components/esp_modem/include/cxx_include/esp_modem_api.hpp +++ b/components/esp_modem/include/cxx_include/esp_modem_api.hpp @@ -87,6 +87,12 @@ std::unique_ptr create_SIM7600_dce(const dce_config *config, std::shared_pt */ std::unique_ptr create_SIM7070_dce(const dce_config *config, std::shared_ptr dte, esp_netif_t *netif); +/** + * @brief Create DCE based on SIM7000 module + */ +std::unique_ptr create_SIM7000_dce(const dce_config *config, std::shared_ptr dte, esp_netif_t *netif); + + /** * @brief Create DCE based on SIM800 module */ diff --git a/components/esp_modem/include/cxx_include/esp_modem_command_library.hpp b/components/esp_modem/include/cxx_include/esp_modem_command_library.hpp index 46f5707a2..0a92afd9d 100644 --- a/components/esp_modem/include/cxx_include/esp_modem_command_library.hpp +++ b/components/esp_modem/include/cxx_include/esp_modem_command_library.hpp @@ -44,8 +44,8 @@ DECLARE_ALL_COMMAND_APIS(declare name(Commandable *p, ...);) * @brief Following commands that are different for some specific modules */ command_result get_battery_status_sim7xxx(CommandableIf *t, int &voltage, int &bcs, int &bcl); -command_result power_down_sim7600(CommandableIf *t); -command_result power_down_sim7070(CommandableIf *t); +command_result power_down_sim76xx(CommandableIf *t); +command_result power_down_sim70xx(CommandableIf *t); command_result power_down_sim8xx(CommandableIf *t); command_result set_data_mode_sim8xx(CommandableIf *t); diff --git a/components/esp_modem/include/cxx_include/esp_modem_dce_factory.hpp b/components/esp_modem/include/cxx_include/esp_modem_dce_factory.hpp index 61b8cd7e9..17d51516d 100644 --- a/components/esp_modem/include/cxx_include/esp_modem_dce_factory.hpp +++ b/components/esp_modem/include/cxx_include/esp_modem_dce_factory.hpp @@ -118,6 +118,7 @@ enum class ModemType { GenericModule, /*!< Default generic module with the most common commands */ SIM7600, /*!< Derived from the GenericModule, specifics applied to SIM7600 model */ SIM7070, /*!< Derived from the GenericModule, specifics applied to SIM7070 model */ + SIM7000, /*!< Derived from the GenericModule, specifics applied to SIM7000 model */ BG96, /*!< Derived from the GenericModule, specifics applied to BG69 model */ SIM800, /*!< Derived from the GenericModule with specifics applied to SIM800 model */ }; @@ -176,6 +177,8 @@ public: return build_shared_module(cfg, std::forward(args)...); case ModemType::SIM7070: return build_shared_module(cfg, std::forward(args)...); + case ModemType::SIM7000: + return build_shared_module(cfg, std::forward(args)...); case ModemType::BG96: return build_shared_module(cfg, std::forward(args)...); case ModemType::GenericModule: @@ -203,6 +206,8 @@ public: return build_unique(cfg, std::forward(args)...); case ModemType::SIM7070: return build_unique(cfg, std::forward(args)...); + case ModemType::SIM7000: + return build_unique(cfg, std::forward(args)...); case ModemType::BG96: return build_unique(cfg, std::forward(args)...); case ModemType::GenericModule: @@ -223,6 +228,8 @@ public: return build(cfg, std::forward(args)...); case ModemType::SIM7070: return build(cfg, std::forward(args)...); + case ModemType::SIM7000: + return build(cfg, std::forward(args)...); case ModemType::BG96: return build(cfg, std::forward(args)...); case ModemType::GenericModule: diff --git a/components/esp_modem/include/cxx_include/esp_modem_dce_module.hpp b/components/esp_modem/include/cxx_include/esp_modem_dce_module.hpp index fdbe5a890..435893bca 100644 --- a/components/esp_modem/include/cxx_include/esp_modem_dce_module.hpp +++ b/components/esp_modem/include/cxx_include/esp_modem_dce_module.hpp @@ -132,6 +132,15 @@ public: command_result power_down() override; }; +/** + * @brief Specific definition of the SIM7000 module + */ +class SIM7000: public GenericModule { + using GenericModule::GenericModule; +public: + command_result power_down() override; +}; + /** * @brief Specific definition of the SIM800 module */ diff --git a/components/esp_modem/include/esp_modem_c_api_types.h b/components/esp_modem/include/esp_modem_c_api_types.h index 91ef9f00e..577b4ce03 100644 --- a/components/esp_modem/include/esp_modem_c_api_types.h +++ b/components/esp_modem/include/esp_modem_c_api_types.h @@ -47,8 +47,9 @@ typedef enum esp_modem_dce_mode typedef enum esp_modem_dce_device { ESP_MODEM_DCE_GENETIC, /**< The most generic device */ - ESP_MODEM_DCE_SIM7070, ESP_MODEM_DCE_SIM7600, + ESP_MODEM_DCE_SIM7070, + ESP_MODEM_DCE_SIM7000, ESP_MODEM_DCE_BG96, ESP_MODEM_DCE_SIM800, } esp_modem_dce_device_t; diff --git a/components/esp_modem/src/esp_modem_api.cpp b/components/esp_modem/src/esp_modem_api.cpp index 6390139cc..116213ff9 100644 --- a/components/esp_modem/src/esp_modem_api.cpp +++ b/components/esp_modem/src/esp_modem_api.cpp @@ -59,6 +59,11 @@ std::unique_ptr create_SIM7070_dce(const dce_config *config, std::shared_pt return create_modem_dce(dce_factory::ModemType::SIM7070, config, std::move(dte), netif); } +std::unique_ptr create_SIM7000_dce(const dce_config *config, std::shared_ptr dte, esp_netif_t *netif) +{ + return create_modem_dce(dce_factory::ModemType::SIM7000, config, std::move(dte), netif); +} + std::unique_ptr create_SIM800_dce(const dce_config *config, std::shared_ptr dte, esp_netif_t *netif) { return create_modem_dce(dce_factory::ModemType::SIM800, config, std::move(dte), netif); diff --git a/components/esp_modem/src/esp_modem_c_api.cpp b/components/esp_modem/src/esp_modem_c_api.cpp index a6ca9c7d5..9a927b416 100644 --- a/components/esp_modem/src/esp_modem_c_api.cpp +++ b/components/esp_modem/src/esp_modem_c_api.cpp @@ -61,6 +61,8 @@ static inline dce_factory::ModemType convert_modem_enum(esp_modem_dce_device_t m return esp_modem::dce_factory::ModemType::SIM7600; case ESP_MODEM_DCE_SIM7070: return esp_modem::dce_factory::ModemType::SIM7070; + case ESP_MODEM_DCE_SIM7000: + return esp_modem::dce_factory::ModemType::SIM7000; case ESP_MODEM_DCE_BG96: return esp_modem::dce_factory::ModemType::BG96; case ESP_MODEM_DCE_SIM800: diff --git a/components/esp_modem/src/esp_modem_command_library.cpp b/components/esp_modem/src/esp_modem_command_library.cpp index d9ce32a92..cfb60d52c 100644 --- a/components/esp_modem/src/esp_modem_command_library.cpp +++ b/components/esp_modem/src/esp_modem_command_library.cpp @@ -121,13 +121,13 @@ command_result power_down(CommandableIf *t) return generic_command(t, "AT+QPOWD=1\r", "POWERED DOWN", "ERROR", 1000); } -command_result power_down_sim7600(CommandableIf *t) +command_result power_down_sim76xx(CommandableIf *t) { ESP_LOGV(TAG, "%s", __func__ ); return generic_command_common(t, "AT+CPOF\r", 1000); } -command_result power_down_sim7070(CommandableIf *t) +command_result power_down_sim70xx(CommandableIf *t) { ESP_LOGV(TAG, "%s", __func__ ); return generic_command(t, "AT+CPOWD=1\r", "POWER DOWN", "ERROR", 1000); diff --git a/components/esp_modem/src/esp_modem_modules.cpp b/components/esp_modem/src/esp_modem_modules.cpp index ef0c770f8..91c893c03 100644 --- a/components/esp_modem/src/esp_modem_modules.cpp +++ b/components/esp_modem/src/esp_modem_modules.cpp @@ -57,12 +57,17 @@ command_result SIM7600::get_battery_status(int &voltage, int &bcs, int &bcl) command_result SIM7600::power_down() { - return dce_commands::power_down_sim7600(dte.get()); + return dce_commands::power_down_sim76xx(dte.get()); } command_result SIM7070::power_down() { - return dce_commands::power_down_sim7070(dte.get()); + return dce_commands::power_down_sim70xx(dte.get()); +} + +command_result SIM7000::power_down() +{ + return dce_commands::power_down_sim70xx(dte.get()); } command_result SIM800::power_down()