ESP_MODEM - pppos_client_main_c in C++ problems

FrankJensen
Posts: 59
Joined: Sun Mar 10, 2024 9:34 pm

ESP_MODEM - pppos_client_main_c in C++ problems

Postby FrankJensen » Sun Jan 12, 2025 11:35 pm

Hi Forum.

I have got the pppos_client example included with esp_modem up running in C, so that is nice :-)

But I want to include this into another project written in cpp. That is giving me some grey hairs. I have tried all kind of approaches, but I can not get it do compile correctly. I am using cxx_include/esp_modem_api.hpp and cxx_include/esp_modem_netif.hpp, but is seems that there are some differences, and some functions seems to miss declarations. The functions are there, but as far as I can see, they are not declaired anywhere - eg esp_modem_send_sms function.

This is my list of compile errors. Can someone point me to a direction, how to solve this?

Code: Select all

lib/MyModem/MyModem.cpp: In function 'void on_ppp_changed(void*, esp_event_base_t, int32_t, void*)':
lib/MyModem/MyModem.cpp:85:21: error: 'NETIF_PPP_ERRORUSER' was not declared in this scope
   85 |     if (event_id == NETIF_PPP_ERRORUSER) {
      |                     ^~~~~~~~~~~~~~~~~~~
lib/MyModem/MyModem.cpp:87:33: error: invalid conversion from 'void*' to 'esp_netif_t**' {aka 'esp_netif_obj**'} [-fpermissive]
   87 |         esp_netif_t **p_netif = event_data;
      |                                 ^~~~~~~~~~
      |                                 |
      |                                 void*
lib/MyModem/MyModem.cpp: In function 'void on_ip_event(void*, esp_event_base_t, int32_t, void*)':
lib/MyModem/MyModem.cpp:108:39: error: invalid conversion from 'int' to 'esp_netif_dns_type_t' [-fpermissive]
  108 |         esp_netif_get_dns_info(netif, 0, &dns_info);
      |                                       ^
      |                                       |
      |                                       int
In file included from components/esp_modem/include/esp_modem_c_api_types.h:10,
                 from components/esp_modem_usb_dte/include/esp_modem_usb_c_api.h:9,
                 from lib/MyModem/MyModem.cpp:10:
C:/Users/Frank.FUTURELIGHT/.platformio/packages/framework-espidf/components/esp_netif/include/esp_netif.h:751:79: note:   initializing argument 2 of 'esp_err_t esp_netif_get_dns_info(esp_netif_t*, esp_netif_dns_type_t, esp_netif_dns_info_t*)'
  751 | esp_err_t esp_netif_get_dns_info(esp_netif_t *esp_netif, esp_netif_dns_type_t type, esp_netif_dns_info_t *dns);
      |                                                          ~~~~~~~~~~~~~~~~~~~~~^~~~
lib/MyModem/MyModem.cpp:110:39: error: invalid conversion from 'int' to 'esp_netif_dns_type_t' [-fpermissive]
  110 |         esp_netif_get_dns_info(netif, 1, &dns_info);
      |                                       ^
      |                                       |
      |                                       int
C:/Users/Frank.FUTURELIGHT/.platformio/packages/framework-espidf/components/esp_netif/include/esp_netif.h:751:79: note:   initializing argument 2 of 'esp_err_t esp_netif_get_dns_info(esp_netif_t*, esp_netif_dns_type_t, esp_netif_dns_info_t*)'
  751 | esp_err_t esp_netif_get_dns_info(esp_netif_t *esp_netif, esp_netif_dns_type_t type, esp_netif_dns_info_t *dns);
      |                                                          ~~~~~~~~~~~~~~~~~~~~~^~~~
In file included from C:/Users/Frank.FUTURELIGHT/.platformio/packages/framework-espidf/components/esp_driver_uart/include/driver/uart.h:9,
                 from components/esp_modem/include/esp_modem_config.h:9,
                 from components/esp_modem/include/esp_modem_c_api_types.h:9:
lib/MyModem/MyModem.cpp: In member function 'void MyModem::_begin()':
lib/MyModem/MyModem.cpp:138:48: error: 'NETIF_PPP_STATUS' was not declared in this scope
  138 |     ESP_ERROR_CHECK(esp_event_handler_register(NETIF_PPP_STATUS, ESP_EVENT_ANY_ID, &on_ppp_changed, NULL));
      |                                                ^~~~~~~~~~~~~~~~
C:/Users/Frank.FUTURELIGHT/.platformio/packages/framework-espidf/components/esp_common/include/esp_err.h:116:30: note: in definition of macro 'ESP_ERROR_CHECK'
  116 |         esp_err_t err_rc_ = (x);                                        \
      |                              ^
lib/MyModem/MyModem.cpp:207:13: error: 'esp_modem_sms_txt_mode' was not declared in this scope; did you mean 'esp_modem_set_mode'?
  207 |         if (esp_modem_sms_txt_mode(dce, true) != ESP_OK || esp_modem_sms_character_set(dce) != ESP_OK) {
      |             ^~~~~~~~~~~~~~~~~~~~~~
      |             esp_modem_set_mode
lib/MyModem/MyModem.cpp:207:60: error: 'esp_modem_sms_character_set' was not declared in this scope
  207 |         if (esp_modem_sms_txt_mode(dce, true) != ESP_OK || esp_modem_sms_character_set(dce) != ESP_OK) {
      |                                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/MyModem/MyModem.cpp:216:15: error: 'esp_modem_send_sms' was not declared in this scope; did you mean 'esp_modem_set_apn'?
  216 |         err = esp_modem_send_sms(dce, tlf, "Hej Carsten. Dette er en besked sendt fra ESP32 via modem :-)");
      |               ^~~~~~~~~~~~~~~~~~
      |               esp_modem_set_apn
lib/MyModem/MyModem.cpp:281:15: error: 'esp_modem_get_imsi' was not declared in this scope; did you mean 'esp_modem_get_mode'?
  281 |         err = esp_modem_get_imsi(dce, imsi);
      |               ^~~~~~~~~~~~~~~~~~
      |               esp_modem_get_mode
*** [.pio\build\ESP32-S3-DevKitC-1U-N8R2\lib3d7\MyModem\MyModem.o] Error 1

FrankJensen
Posts: 59
Joined: Sun Mar 10, 2024 9:34 pm

Re: ESP_MODEM - pppos_client_main_c in C++ problems

Postby FrankJensen » Mon Jan 13, 2025 9:47 am

Adding this to my project, solves the problem. But is that really the right way?
  1. extern "C" esp_err_t esp_modem_send_sms(esp_modem_dce_t *dce_wrap, const char *number, const char *message);
  2. extern "C" esp_err_t esp_modem_sms_txt_mode(esp_modem_dce_t *dce_wrap, bool txt);
  3. extern "C" esp_err_t esp_modem_sms_character_set(esp_modem_dce_t *dce_wrap);
  4. extern "C" esp_err_t esp_modem_get_imsi(esp_modem_dce_t *dce_wrap, char *p_imsi);
  5. extern "C" esp_err_t esp_modem_get_signal_quality(esp_modem_dce_t *dce_wrap, int *rssi, int *ber);
  6.  
  7. /** @brief PPP event base */
  8. ESP_EVENT_DECLARE_BASE(NETIF_PPP_STATUS);
  9.  
  10. #define NETIF_PP_PHASE_OFFSET (0x100)
  11. #define NETIF_PPP_INTERNAL_ERR_OFFSET (0x200)
  12. typedef enum {
  13.     NETIF_PPP_ERRORNONE        = 0,  /* No error. */
  14.     NETIF_PPP_ERRORPARAM       = 1,  /* Invalid parameter. */
  15.     NETIF_PPP_ERROROPEN        = 2,  /* Unable to open PPP session. */
  16.     NETIF_PPP_ERRORDEVICE      = 3,  /* Invalid I/O device for PPP. */
  17.     NETIF_PPP_ERRORALLOC       = 4,  /* Unable to allocate resources. */
  18.     NETIF_PPP_ERRORUSER        = 5,  /* User interrupt. */
  19.     NETIF_PPP_ERRORCONNECT     = 6,  /* Connection lost. */
  20.     NETIF_PPP_ERRORAUTHFAIL    = 7,  /* Failed authentication challenge. */
  21.     NETIF_PPP_ERRORPROTOCOL    = 8,  /* Failed to meet protocol. */
  22.     NETIF_PPP_ERRORPEERDEAD    = 9,  /* Connection timeout */
  23.     NETIF_PPP_ERRORIDLETIMEOUT = 10, /* Idle Timeout */
  24.     NETIF_PPP_ERRORCONNECTTIME = 11, /* Max connect time reached */
  25.     NETIF_PPP_ERRORLOOPBACK    = 12, /* Loopback detected */
  26.     NETIF_PPP_PHASE_DEAD         = NETIF_PP_PHASE_OFFSET +  0,
  27.     NETIF_PPP_PHASE_MASTER       = NETIF_PP_PHASE_OFFSET +  1,
  28.     NETIF_PPP_PHASE_HOLDOFF      = NETIF_PP_PHASE_OFFSET +  2,
  29.     NETIF_PPP_PHASE_INITIALIZE   = NETIF_PP_PHASE_OFFSET +  3,
  30.     NETIF_PPP_PHASE_SERIALCONN   = NETIF_PP_PHASE_OFFSET +  4,
  31.     NETIF_PPP_PHASE_DORMANT      = NETIF_PP_PHASE_OFFSET +  5,
  32.     NETIF_PPP_PHASE_ESTABLISH    = NETIF_PP_PHASE_OFFSET +  6,
  33.     NETIF_PPP_PHASE_AUTHENTICATE = NETIF_PP_PHASE_OFFSET +  7,
  34.     NETIF_PPP_PHASE_CALLBACK     = NETIF_PP_PHASE_OFFSET +  8,
  35.     NETIF_PPP_PHASE_NETWORK      = NETIF_PP_PHASE_OFFSET +  9,
  36.     NETIF_PPP_PHASE_RUNNING      = NETIF_PP_PHASE_OFFSET +  10,
  37.     NETIF_PPP_PHASE_TERMINATE    = NETIF_PP_PHASE_OFFSET +  11,
  38.     NETIF_PPP_PHASE_DISCONNECT   = NETIF_PP_PHASE_OFFSET +  12,
  39.     NETIF_PPP_CONNECT_FAILED     = NETIF_PPP_INTERNAL_ERR_OFFSET + 0,
  40. } esp_netif_ppp_status_event_t;

Who is online

Users browsing this forum: No registered users and 12 guests