esp_modem.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. // Copyright 2015-2018 Espressif Systems (Shanghai) PTE LTD
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #pragma once
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. #include "esp_modem_dce.h"
  19. #include "esp_modem_dte.h"
  20. #include "esp_event.h"
  21. #include "driver/uart.h"
  22. #include "esp_modem_compat.h"
  23. /**
  24. * @brief Declare Event Base for ESP Modem
  25. *
  26. */
  27. ESP_EVENT_DECLARE_BASE(ESP_MODEM_EVENT);
  28. /**
  29. * @brief ESP Modem Event
  30. *
  31. */
  32. typedef enum {
  33. ESP_MODEM_EVENT_PPP_START = 0, /*!< ESP Modem Start PPP Session */
  34. ESP_MODEM_EVENT_PPP_STOP = 3, /*!< ESP Modem Stop PPP Session*/
  35. ESP_MODEM_EVENT_UNKNOWN = 4 /*!< ESP Modem Unknown Response */
  36. } esp_modem_event_t;
  37. /**
  38. * @brief ESP Modem DTE Configuration
  39. *
  40. */
  41. typedef struct {
  42. uart_port_t port_num; /*!< UART port number */
  43. uart_word_length_t data_bits; /*!< Data bits of UART */
  44. uart_stop_bits_t stop_bits; /*!< Stop bits of UART */
  45. uart_parity_t parity; /*!< Parity type */
  46. modem_flow_ctrl_t flow_control; /*!< Flow control type */
  47. uint32_t baud_rate; /*!< Communication baud rate */
  48. int tx_io_num; /*!< TXD Pin Number */
  49. int rx_io_num; /*!< RXD Pin Number */
  50. int rts_io_num; /*!< RTS Pin Number */
  51. int cts_io_num; /*!< CTS Pin Number */
  52. int rx_buffer_size; /*!< UART RX Buffer Size */
  53. int tx_buffer_size; /*!< UART TX Buffer Size */
  54. int pattern_queue_size; /*!< UART Pattern Queue Size */
  55. int event_queue_size; /*!< UART Event Queue Size */
  56. uint32_t event_task_stack_size; /*!< UART Event Task Stack size */
  57. int event_task_priority; /*!< UART Event Task Priority */
  58. int line_buffer_size; /*!< Line buffer size for command mode */
  59. } esp_modem_dte_config_t;
  60. /**
  61. * @brief Type used for reception callback
  62. *
  63. */
  64. typedef esp_err_t (*esp_modem_on_receive)(void *buffer, size_t len, void *context);
  65. /**
  66. * @brief ESP Modem DTE Default Configuration
  67. *
  68. */
  69. #define ESP_MODEM_DTE_DEFAULT_CONFIG() \
  70. { \
  71. .port_num = UART_NUM_1, \
  72. .data_bits = UART_DATA_8_BITS, \
  73. .stop_bits = UART_STOP_BITS_1, \
  74. .parity = UART_PARITY_DISABLE, \
  75. .baud_rate = 115200, \
  76. .flow_control = MODEM_FLOW_CONTROL_NONE,\
  77. .tx_io_num = 25, \
  78. .rx_io_num = 26, \
  79. .rts_io_num = 27, \
  80. .cts_io_num = 23, \
  81. .rx_buffer_size = 1024, \
  82. .tx_buffer_size = 512, \
  83. .pattern_queue_size = 20, \
  84. .event_queue_size = 30, \
  85. .event_task_stack_size = 2048, \
  86. .event_task_priority = 5, \
  87. .line_buffer_size = 512 \
  88. }
  89. /**
  90. * @brief Create and initialize Modem DTE object
  91. *
  92. * @param config configuration of ESP Modem DTE object
  93. * @return modem_dte_t*
  94. * - Modem DTE object
  95. */
  96. modem_dte_t *esp_modem_dte_init(const esp_modem_dte_config_t *config);
  97. /**
  98. * @brief Register event handler for ESP Modem event loop
  99. *
  100. * @param dte modem_dte_t type object
  101. * @param handler event handler to register
  102. * @param handler_args arguments for registered handler
  103. * @return esp_err_t
  104. * - ESP_OK on success
  105. * - ESP_ERR_NO_MEM on allocating memory for the handler failed
  106. * - ESP_ERR_INVALID_ARG on invalid combination of event base and event id
  107. */
  108. esp_err_t esp_modem_set_event_handler(modem_dte_t *dte, esp_event_handler_t handler, int32_t event_id, void *handler_args);
  109. /**
  110. * @brief Unregister event handler for ESP Modem event loop
  111. *
  112. * @param dte modem_dte_t type object
  113. * @param handler event handler to unregister
  114. * @return esp_err_t
  115. * - ESP_OK on success
  116. * - ESP_ERR_INVALID_ARG on invalid combination of event base and event id
  117. */
  118. esp_err_t esp_modem_remove_event_handler(modem_dte_t *dte, esp_event_handler_t handler);
  119. /**
  120. * @brief Setup PPP Session
  121. *
  122. * @param dte Modem DTE object
  123. * @return esp_err_t
  124. * - ESP_OK on success
  125. * - ESP_FAIL on error
  126. */
  127. esp_err_t esp_modem_start_ppp(modem_dte_t *dte);
  128. /**
  129. * @brief Exit PPP Session
  130. *
  131. * @param dte Modem DTE Object
  132. * @return esp_err_t
  133. * - ESP_OK on success
  134. * - ESP_FAIL on error
  135. */
  136. esp_err_t esp_modem_stop_ppp(modem_dte_t *dte);
  137. /**
  138. * @brief Setup on reception callback
  139. *
  140. * @param dte ESP Modem DTE object
  141. * @param receive_cb Function pointer to the reception callback
  142. * @param receive_cb_ctx Contextual pointer to be passed to the reception callback
  143. *
  144. * @return ESP_OK on success
  145. */
  146. esp_err_t esp_modem_set_rx_cb(modem_dte_t *dte, esp_modem_on_receive receive_cb, void *receive_cb_ctx);
  147. /**
  148. * @brief Notify the modem, that ppp netif has closed
  149. *
  150. * @note This API should only be used internally by the modem-netif layer
  151. *
  152. * @param dte ESP Modem DTE object
  153. *
  154. * @return ESP_OK on success
  155. */
  156. esp_err_t esp_modem_notify_ppp_netif_closed(modem_dte_t *dte);
  157. #ifdef __cplusplus
  158. }
  159. #endif