Skip to content

Commit d5cd990

Browse files
committed
Fix string input methods and add direct AT command API
1 parent d32f7ed commit d5cd990

File tree

4 files changed

+64
-27
lines changed

4 files changed

+64
-27
lines changed

CMakeLists.txt

+3-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,9 @@ set(ARDUINO_LIBRARY_LittleFS_SRCS libraries/LittleFS/src/LittleFS.cpp)
158158

159159
set(ARDUINO_LIBRARY_NetBIOS_SRCS libraries/NetBIOS/src/NetBIOS.cpp)
160160

161-
set(ARDUINO_LIBRARY_PPP_SRCS libraries/PPP/src/PPP.cpp)
161+
set(ARDUINO_LIBRARY_PPP_SRCS
162+
libraries/PPP/src/PPP.cpp
163+
libraries/PPP/src/ppp.c)
162164

163165
set(ARDUINO_LIBRARY_Preferences_SRCS libraries/Preferences/src/Preferences.cpp)
164166

libraries/PPP/src/PPP.cpp

+35-26
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@
1111
typedef struct { void * arg; } PdpContext;
1212
#include "esp_modem_api.h"
1313

14+
// Because of how esp_modem functions are declared, we need to workaround some APIs that take strings as input (output works OK)
15+
// Following APIs work only when called through this interface
16+
extern "C" {
17+
esp_err_t _esp_modem_at(esp_modem_dce_t *dce_wrap, const char *at, char *p_out, int timeout);
18+
esp_err_t _esp_modem_at_raw(esp_modem_dce_t *dce_wrap, const char *cmd, char *p_out, const char *pass, const char *fail, int timeout);
19+
esp_err_t _esp_modem_send_sms(esp_modem_dce_t *dce_wrap, const char *number, const char *message);
20+
esp_err_t _esp_modem_set_pin(esp_modem_dce_t *dce_wrap, const char *pin);
21+
esp_err_t _esp_modem_set_operator(esp_modem_dce_t *dce_wrap, int mode, int format, const char *oper);
22+
esp_err_t _esp_modem_set_network_bands(esp_modem_dce_t *dce_wrap, const char *mode, const int *bands, int size);
23+
};
24+
1425
static PPPClass * _esp_modem = NULL;
1526
static esp_event_handler_instance_t _ppp_ev_instance = NULL;
1627

@@ -105,33 +116,14 @@ void PPPClass::_onPppArduinoEvent(arduino_event_id_t event, arduino_event_info_t
105116

106117
// PPP Driver Events Callback
107118
void PPPClass::_onPppEvent(int32_t event_id, void* event_data){
108-
arduino_event_t arduino_event;
109-
arduino_event.event_id = ARDUINO_EVENT_MAX;
119+
// arduino_event_t arduino_event;
120+
// arduino_event.event_id = ARDUINO_EVENT_MAX;
110121

111122
log_v("PPP Driver Event %ld: %s", event_id, _ppp_event_name(event_id));
112123

113-
// if (event_id == ETHERNET_EVENT_CONNECTED) {
114-
// log_v("%s Connected", desc());
115-
// arduino_event.event_id = ARDUINO_EVENT_PPP_CONNECTED;
116-
// arduino_event.event_info.eth_connected = handle();
117-
// setStatusBits(ESP_NETIF_CONNECTED_BIT);
118-
// } else if (event_id == ETHERNET_EVENT_DISCONNECTED) {
119-
// log_v("%s Disconnected", desc());
120-
// arduino_event.event_id = ARDUINO_EVENT_PPP_DISCONNECTED;
121-
// clearStatusBits(ESP_NETIF_CONNECTED_BIT | ESP_NETIF_HAS_IP_BIT | ESP_NETIF_HAS_LOCAL_IP6_BIT | ESP_NETIF_HAS_GLOBAL_IP6_BIT);
122-
// } else if (event_id == ETHERNET_EVENT_START) {
123-
// log_v("%s Started", desc());
124-
// arduino_event.event_id = ARDUINO_EVENT_PPP_START;
125-
// setStatusBits(ESP_NETIF_STARTED_BIT);
126-
// } else if (event_id == ETHERNET_EVENT_STOP) {
127-
// log_v("%s Stopped", desc());
128-
// arduino_event.event_id = ARDUINO_EVENT_PPP_STOP;
129-
// clearStatusBits(ESP_NETIF_STARTED_BIT | ESP_NETIF_CONNECTED_BIT | ESP_NETIF_HAS_IP_BIT | ESP_NETIF_HAS_LOCAL_IP6_BIT | ESP_NETIF_HAS_GLOBAL_IP6_BIT | ESP_NETIF_HAS_STATIC_IP_BIT);
124+
// if(arduino_event.event_id < ARDUINO_EVENT_MAX){
125+
// Network.postEvent(&arduino_event);
130126
// }
131-
132-
if(arduino_event.event_id < ARDUINO_EVENT_MAX){
133-
Network.postEvent(&arduino_event);
134-
}
135127
}
136128

137129
esp_modem_dce_t * PPPClass::handle() const {
@@ -330,7 +322,7 @@ bool PPPClass::begin(ppp_modem_model_t model, uint8_t uart_num, int baud_rate){
330322

331323
/* check if PIN needed */
332324
if (esp_modem_read_pin(_dce, pin_ok) == ESP_OK && pin_ok == false) {
333-
if (_pin == NULL || esp_modem_set_pin(_dce, _pin) != ESP_OK) {
325+
if (_pin == NULL || _esp_modem_set_pin(_dce, _pin) != ESP_OK) {
334326
log_e("PIN verification failed!");
335327
goto err;
336328
}
@@ -735,7 +727,6 @@ bool PPPClass::setBaudrate(int baudrate) {
735727
return true;
736728
}
737729

738-
739730
bool PPPClass::sms(const char * num, const char * message) {
740731
if(_dce == NULL){
741732
return false;
@@ -765,14 +756,32 @@ bool PPPClass::sms(const char * num, const char * message) {
765756
return false;
766757
}
767758

768-
err = esp_modem_send_sms(_dce, num, message);
759+
err = _esp_modem_send_sms(_dce, num, message);
769760
if (err != ESP_OK) {
770761
log_e("esp_modem_send_sms() failed with %d %s", err, esp_err_to_name(err));
771762
return false;
772763
}
773764
return true;
774765
}
775766

767+
String PPPClass::cmd(const char * at_command, int timeout){
768+
if(_dce == NULL){
769+
return String();
770+
}
771+
772+
if(_mode == ESP_MODEM_MODE_DATA){
773+
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
774+
return String();
775+
}
776+
char out[128] = {0};
777+
esp_err_t err = _esp_modem_at(_dce, at_command, out, timeout);
778+
if (err != ESP_OK) {
779+
log_e("esp_modem_at failed %d %s", err, esp_err_to_name(err));
780+
return String();
781+
}
782+
return String(out);
783+
}
784+
776785
size_t PPPClass::printDriverInfo(Print & out) const {
777786
size_t bytes = 0;
778787
if(_dce == NULL || _mode == ESP_MODEM_MODE_DATA){

libraries/PPP/src/PPP.h

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class PPPClass: public NetworkInterface {
5353

5454
bool setBaudrate(int baudrate);
5555
bool sms(const char * num, const char * message);
56+
String cmd(const char * at_command, int timeout);
5657

5758
esp_modem_dce_t * handle() const;
5859

libraries/PPP/src/ppp.c

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#include "esp_modem_api.h"
2+
3+
esp_err_t _esp_modem_at(esp_modem_dce_t *dce_wrap, const char *at, char *p_out, int timeout){
4+
return esp_modem_at(dce_wrap, at, p_out, timeout);
5+
}
6+
7+
esp_err_t _esp_modem_send_sms(esp_modem_dce_t *dce_wrap, const char *number, const char *message){
8+
return esp_modem_send_sms(dce_wrap, number, message);
9+
}
10+
11+
esp_err_t _esp_modem_set_pin(esp_modem_dce_t *dce_wrap, const char *pin){
12+
return esp_modem_set_pin(dce_wrap, pin);
13+
}
14+
15+
esp_err_t _esp_modem_at_raw(esp_modem_dce_t *dce_wrap, const char *cmd, char *p_out, const char *pass, const char *fail, int timeout){
16+
return esp_modem_at_raw(dce_wrap, cmd, p_out, pass, fail, timeout);
17+
}
18+
19+
esp_err_t _esp_modem_set_operator(esp_modem_dce_t *dce_wrap, int mode, int format, const char *oper){
20+
return esp_modem_set_operator(dce_wrap, mode, format, oper);
21+
}
22+
23+
esp_err_t _esp_modem_set_network_bands(esp_modem_dce_t *dce_wrap, const char *mode, const int *bands, int size){
24+
return esp_modem_set_network_bands(dce_wrap, mode, bands, size);
25+
}

0 commit comments

Comments
 (0)