@@ -13,15 +13,18 @@ static PPPClass * _esp_modem = NULL;
13
13
static esp_event_handler_instance_t _ppp_ev_instance = NULL ;
14
14
15
15
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);
17
17
if (event_base == NETIF_PPP_STATUS){
18
18
if (_esp_modem != NULL ){
19
19
_esp_modem->_onPppEvent (event_id, event_data);
20
20
}
21
21
}
22
22
}
23
23
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
+
25
28
static void onPppConnected (arduino_event_id_t event, arduino_event_info_t info)
26
29
{
27
30
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,
172
175
goto err;
173
176
}
174
177
178
+ esp_modem_set_error_cb (_dce, _ppp_error_cb);
179
+
175
180
if (dte_config.uart_config .flow_control == ESP_MODEM_FLOW_CONTROL_HW) {
176
181
ret = esp_modem_set_flow_control (_dce, 2 , 2 ); // 2/2 means HW Flow Control.
177
182
if (ret != ESP_OK) {
@@ -364,6 +369,48 @@ String PPPClass::IMSI() const
364
369
return String (imsi);
365
370
}
366
371
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
+
367
414
String PPPClass::getOperator () const
368
415
{
369
416
if (_dce == NULL ){
@@ -386,6 +433,158 @@ String PPPClass::getOperator() const
386
433
return String (oper);
387
434
}
388
435
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
+
389
588
size_t PPPClass::printDriverInfo (Print & out) const {
390
589
size_t bytes = 0 ;
391
590
// bytes += out.print(",");
0 commit comments