Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 70a7494

Browse files
committedApr 8, 2024
Add more access methods
1 parent 20a7102 commit 70a7494

File tree

2 files changed

+215
-7
lines changed

2 files changed

+215
-7
lines changed
 

‎libraries/PPP/src/PPP.cpp

Lines changed: 201 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,18 @@ static PPPClass * _esp_modem = NULL;
1313
static esp_event_handler_instance_t _ppp_ev_instance = NULL;
1414

1515
static void _ppp_event_cb(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) {
16-
16+
log_v("PPP EVENT %ld::%ld", (int)event_base, event_id);
1717
if (event_base == NETIF_PPP_STATUS){
1818
if(_esp_modem != NULL){
1919
_esp_modem->_onPppEvent(event_id, event_data);
2020
}
2121
}
2222
}
2323

24-
// This callback needs to be aware of which interface it should match against
24+
static void _ppp_error_cb(esp_modem_terminal_error_t err){
25+
26+
}
27+
2528
static void onPppConnected(arduino_event_id_t event, arduino_event_info_t info)
2629
{
2730
if(event == ARDUINO_EVENT_PPP_CONNECTED){
@@ -172,6 +175,8 @@ bool PPPClass::begin(ppp_modem_model_t model, int8_t tx, int8_t rx, int8_t rts,
172175
goto err;
173176
}
174177

178+
esp_modem_set_error_cb(_dce, _ppp_error_cb);
179+
175180
if (dte_config.uart_config.flow_control == ESP_MODEM_FLOW_CONTROL_HW) {
176181
ret = esp_modem_set_flow_control(_dce, 2, 2); //2/2 means HW Flow Control.
177182
if (ret != ESP_OK) {
@@ -364,6 +369,48 @@ String PPPClass::IMSI() const
364369
return String(imsi);
365370
}
366371

372+
String PPPClass::IMEI() const
373+
{
374+
if(_dce == NULL){
375+
return String();
376+
}
377+
378+
if(_mode != ESP_MODEM_MODE_COMMAND){
379+
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
380+
return String();
381+
}
382+
383+
char imei[32];
384+
esp_err_t err = esp_modem_get_imei(_dce, (std::string&)imei);
385+
if (err != ESP_OK) {
386+
log_e("esp_modem_get_imei failed with %d %s", err, esp_err_to_name(err));
387+
return String();
388+
}
389+
390+
return String(imei);
391+
}
392+
393+
String PPPClass::moduleName() const
394+
{
395+
if(_dce == NULL){
396+
return String();
397+
}
398+
399+
if(_mode != ESP_MODEM_MODE_COMMAND){
400+
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
401+
return String();
402+
}
403+
404+
char name[32];
405+
esp_err_t err = esp_modem_get_module_name(_dce, (std::string&)name);
406+
if (err != ESP_OK) {
407+
log_e("esp_modem_get_module_name failed with %d %s", err, esp_err_to_name(err));
408+
return String();
409+
}
410+
411+
return String(name);
412+
}
413+
367414
String PPPClass::getOperator() const
368415
{
369416
if(_dce == NULL){
@@ -386,6 +433,158 @@ String PPPClass::getOperator() const
386433
return String(oper);
387434
}
388435

436+
int PPPClass::networkMode() const
437+
{
438+
if(_dce == NULL){
439+
return 0;
440+
}
441+
442+
if(_mode != ESP_MODEM_MODE_COMMAND){
443+
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
444+
return 0;
445+
}
446+
447+
int m = 0;
448+
esp_err_t err = esp_modem_get_network_system_mode(_dce, m);
449+
if (err != ESP_OK) {
450+
log_e("esp_modem_get_network_system_mode failed with %d %s", err, esp_err_to_name(err));
451+
return 0;
452+
}
453+
return m;
454+
}
455+
456+
int PPPClass::radioState() const
457+
{
458+
if(_dce == NULL){
459+
return 0;
460+
}
461+
462+
if(_mode != ESP_MODEM_MODE_COMMAND){
463+
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
464+
return 0;
465+
}
466+
467+
int m = 0;
468+
esp_err_t err = esp_modem_get_radio_state(_dce, m);
469+
if (err != ESP_OK) {
470+
log_e("esp_modem_get_radio_state failed with %d %s", err, esp_err_to_name(err));
471+
return 0;
472+
}
473+
return m;
474+
}
475+
476+
bool PPPClass::attached() const
477+
{
478+
if(_dce == NULL){
479+
return false;
480+
}
481+
482+
if(_mode != ESP_MODEM_MODE_COMMAND){
483+
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
484+
return false;
485+
}
486+
487+
int m = 0;
488+
esp_err_t err = esp_modem_get_network_attachment_state(_dce, m);
489+
if (err != ESP_OK) {
490+
// log_e("esp_modem_get_network_attachment_state failed with %d %s", err, esp_err_to_name(err));
491+
return false;
492+
}
493+
return m != 0;
494+
}
495+
496+
bool PPPClass::powerDown(){
497+
if(_dce == NULL){
498+
return false;
499+
}
500+
501+
if(_mode != ESP_MODEM_MODE_COMMAND){
502+
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
503+
return false;
504+
}
505+
506+
esp_err_t err = esp_modem_power_down(_dce);
507+
if (err != ESP_OK) {
508+
log_e("esp_modem_power_down failed with %d %s", err, esp_err_to_name(err));
509+
return false;
510+
}
511+
return true;
512+
}
513+
514+
bool PPPClass::reset(){
515+
if(_dce == NULL){
516+
return false;
517+
}
518+
519+
if(_mode != ESP_MODEM_MODE_COMMAND){
520+
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
521+
return false;
522+
}
523+
524+
esp_err_t err = esp_modem_reset(_dce);
525+
if (err != ESP_OK) {
526+
log_e("esp_modem_reset failed with %d %s", err, esp_err_to_name(err));
527+
return false;
528+
}
529+
return true;
530+
}
531+
532+
bool PPPClass::storeProfile(){
533+
if(_dce == NULL){
534+
return false;
535+
}
536+
537+
if(_mode != ESP_MODEM_MODE_COMMAND){
538+
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
539+
return false;
540+
}
541+
542+
esp_err_t err = esp_modem_store_profile(_dce);
543+
if (err != ESP_OK) {
544+
log_e("esp_modem_store_profile failed with %d %s", err, esp_err_to_name(err));
545+
return false;
546+
}
547+
return true;
548+
}
549+
550+
551+
bool PPPClass::sms(const char * num, const char * message) {
552+
if(_dce == NULL){
553+
return false;
554+
}
555+
556+
if(_mode != ESP_MODEM_MODE_COMMAND){
557+
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
558+
return false;
559+
}
560+
561+
for(int i=0; i<strlen(num); i++){
562+
if(num[i] != '+' && num[i] != '#' && num[i] != '*' && (num[i] < 0x30 || num[i] > 0x39)){
563+
log_e("Bad character '%c' in SMS Number. Should be only digits and +, # or *", num[i]);
564+
return false;
565+
}
566+
}
567+
568+
esp_err_t err = esp_modem_sms_txt_mode(_dce, true);
569+
if (err != ESP_OK) {
570+
log_e("Setting text mode failed %d %s", err, esp_err_to_name(err));
571+
return false;
572+
}
573+
574+
err = esp_modem_sms_character_set(_dce);
575+
if (err != ESP_OK) {
576+
log_e("Setting GSM character set failed %d %s", err, esp_err_to_name(err));
577+
return false;
578+
}
579+
580+
err = esp_modem_send_sms(_dce, num, message);
581+
if (err != ESP_OK) {
582+
log_e("esp_modem_send_sms() failed with %d %s", err, esp_err_to_name(err));
583+
return false;
584+
}
585+
return true;
586+
}
587+
389588
size_t PPPClass::printDriverInfo(Print & out) const {
390589
size_t bytes = 0;
391590
//bytes += out.print(",");

‎libraries/PPP/src/PPP.h

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,25 @@ class PPPClass: public NetworkInterface {
2929
bool begin(ppp_modem_model_t model, int8_t tx, int8_t rx, int8_t rts=-1, int8_t cts=-1, esp_modem_flow_ctrl_t flow_ctrl=ESP_MODEM_FLOW_CONTROL_NONE);
3030
void end();
3131

32-
esp_modem_dce_mode_t mode() const {
33-
return _mode;
34-
}
35-
bool mode(esp_modem_dce_mode_t m);
36-
3732
// Modem DCE APIs
3833
int RSSI() const;
3934
int BER() const;
4035
String IMSI() const;
36+
String IMEI() const;
37+
String moduleName() const;
4138
String getOperator() const;
39+
int networkMode() const;
40+
int radioState() const;
41+
bool attached() const;
42+
43+
esp_modem_dce_mode_t mode() const { return _mode; }
44+
bool mode(esp_modem_dce_mode_t m);
45+
46+
bool powerDown();
47+
bool reset();
48+
bool storeProfile();
49+
50+
bool sms(const char * num, const char * message);
4251

4352
esp_modem_dce_t * handle() const;
4453

0 commit comments

Comments
 (0)
Please sign in to comment.