88#include  " driver/uart.h" 
99#include  " hal/uart_ll.h" 
1010
11+ #define  PPP_CMD_MODE_CHECK (x )                                    \
12+   if  (_dce == NULL ) {                                            \
13+     return  x;                                                    \
14+   }                                                              \
15+   if  (_mode == ESP_MODEM_MODE_DATA) {                            \
16+     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  ); \
17+     return  x;                                                    \
18+   }
19+ 
1120typedef  struct  {
1221  void  *arg;
1322} PdpContext;
@@ -416,26 +425,13 @@ void PPPClass::end(void) {
416425}
417426
418427bool  PPPClass::sync () const  {
419-   if  (_dce == NULL ) {
420-     return  false ;
421-   }
428+   PPP_CMD_MODE_CHECK (false );
422429
423-   if  (_mode == ESP_MODEM_MODE_DATA) {
424-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
425-     return  false ;
426-   }
427430  return  esp_modem_sync (_dce) == ESP_OK;
428431}
429432
430433bool  PPPClass::attached () const  {
431-   if  (_dce == NULL ) {
432-     return  false ;
433-   }
434- 
435-   if  (_mode == ESP_MODEM_MODE_DATA) {
436-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
437-     return  false ;
438-   }
434+   PPP_CMD_MODE_CHECK (false );
439435
440436  int  m = 0 ;
441437  esp_err_t  err = esp_modem_get_network_attachment_state (_dce, m);
@@ -500,52 +496,31 @@ bool PPPClass::setPin(const char *pin) {
500496}
501497
502498int  PPPClass::RSSI () const  {
503-   if  (_dce == NULL ) {
504-     return  -1 ;
505-   }
506- 
507-   if  (_mode == ESP_MODEM_MODE_DATA) {
508-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
509-     return  -1 ;
510-   }
499+   PPP_CMD_MODE_CHECK (-1 );
511500
512501  int  rssi, ber;
513502  esp_err_t  err = esp_modem_get_signal_quality (_dce, rssi, ber);
514503  if  (err != ESP_OK) {
515-     //   log_e("esp_modem_get_signal_quality failed with %d %s", err, esp_err_to_name(err));
504+     log_e (" esp_modem_get_signal_quality failed with %d %s"  , err, esp_err_to_name (err));
516505    return  -1 ;
517506  }
518507  return  rssi;
519508}
520509
521510int  PPPClass::BER () const  {
522-   if  (_dce == NULL ) {
523-     return  -1 ;
524-   }
525- 
526-   if  (_mode == ESP_MODEM_MODE_DATA) {
527-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
528-     return  -1 ;
529-   }
511+   PPP_CMD_MODE_CHECK (-1 );
530512
531513  int  rssi, ber;
532514  esp_err_t  err = esp_modem_get_signal_quality (_dce, rssi, ber);
533515  if  (err != ESP_OK) {
534-     //   log_e("esp_modem_get_signal_quality failed with %d %s", err, esp_err_to_name(err));
516+     log_e (" esp_modem_get_signal_quality failed with %d %s"  , err, esp_err_to_name (err));
535517    return  -1 ;
536518  }
537519  return  ber;
538520}
539521
540522String PPPClass::IMSI () const  {
541-   if  (_dce == NULL ) {
542-     return  String ();
543-   }
544- 
545-   if  (_mode == ESP_MODEM_MODE_DATA) {
546-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
547-     return  String ();
548-   }
523+   PPP_CMD_MODE_CHECK (String ());
549524
550525  char  imsi[32 ];
551526  esp_err_t  err = esp_modem_get_imsi (_dce, (std::string &)imsi);
@@ -558,14 +533,7 @@ String PPPClass::IMSI() const {
558533}
559534
560535String PPPClass::IMEI () const  {
561-   if  (_dce == NULL ) {
562-     return  String ();
563-   }
564- 
565-   if  (_mode == ESP_MODEM_MODE_DATA) {
566-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
567-     return  String ();
568-   }
536+   PPP_CMD_MODE_CHECK (String ());
569537
570538  char  imei[32 ];
571539  esp_err_t  err = esp_modem_get_imei (_dce, (std::string &)imei);
@@ -578,14 +546,7 @@ String PPPClass::IMEI() const {
578546}
579547
580548String PPPClass::moduleName () const  {
581-   if  (_dce == NULL ) {
582-     return  String ();
583-   }
584- 
585-   if  (_mode == ESP_MODEM_MODE_DATA) {
586-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
587-     return  String ();
588-   }
549+   PPP_CMD_MODE_CHECK (String ());
589550
590551  char  name[32 ];
591552  esp_err_t  err = esp_modem_get_module_name (_dce, (std::string &)name);
@@ -598,14 +559,7 @@ String PPPClass::moduleName() const {
598559}
599560
600561String PPPClass::operatorName () const  {
601-   if  (_dce == NULL ) {
602-     return  String ();
603-   }
604- 
605-   if  (_mode == ESP_MODEM_MODE_DATA) {
606-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
607-     return  String ();
608-   }
562+   PPP_CMD_MODE_CHECK (String ());
609563
610564  char  oper[32 ];
611565  int  act = 0 ;
@@ -619,14 +573,7 @@ String PPPClass::operatorName() const {
619573}
620574
621575int  PPPClass::networkMode () const  {
622-   if  (_dce == NULL ) {
623-     return  -1 ;
624-   }
625- 
626-   if  (_mode == ESP_MODEM_MODE_DATA) {
627-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
628-     return  -1 ;
629-   }
576+   PPP_CMD_MODE_CHECK (-1 );
630577
631578  int  m = 0 ;
632579  esp_err_t  err = esp_modem_get_network_system_mode (_dce, m);
@@ -638,14 +585,7 @@ int PPPClass::networkMode() const {
638585}
639586
640587int  PPPClass::radioState () const  {
641-   if  (_dce == NULL ) {
642-     return  -1 ;
643-   }
644- 
645-   if  (_mode == ESP_MODEM_MODE_DATA) {
646-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
647-     return  -1 ;
648-   }
588+   PPP_CMD_MODE_CHECK (-1 );
649589
650590  int  m = 0 ;
651591  esp_err_t  err = esp_modem_get_radio_state (_dce, m);
@@ -657,14 +597,7 @@ int PPPClass::radioState() const {
657597}
658598
659599bool  PPPClass::powerDown () {
660-   if  (_dce == NULL ) {
661-     return  false ;
662-   }
663- 
664-   if  (_mode == ESP_MODEM_MODE_DATA) {
665-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
666-     return  false ;
667-   }
600+   PPP_CMD_MODE_CHECK (false );
668601
669602  esp_err_t  err = esp_modem_power_down (_dce);
670603  if  (err != ESP_OK) {
@@ -675,14 +608,7 @@ bool PPPClass::powerDown() {
675608}
676609
677610bool  PPPClass::reset () {
678-   if  (_dce == NULL ) {
679-     return  false ;
680-   }
681- 
682-   if  (_mode == ESP_MODEM_MODE_DATA) {
683-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
684-     return  false ;
685-   }
611+   PPP_CMD_MODE_CHECK (false );
686612
687613  esp_err_t  err = esp_modem_reset (_dce);
688614  if  (err != ESP_OK) {
@@ -693,14 +619,7 @@ bool PPPClass::reset() {
693619}
694620
695621bool  PPPClass::storeProfile () {
696-   if  (_dce == NULL ) {
697-     return  false ;
698-   }
699- 
700-   if  (_mode == ESP_MODEM_MODE_DATA) {
701-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
702-     return  false ;
703-   }
622+   PPP_CMD_MODE_CHECK (false );
704623
705624  esp_err_t  err = esp_modem_store_profile (_dce);
706625  if  (err != ESP_OK) {
@@ -711,14 +630,7 @@ bool PPPClass::storeProfile() {
711630}
712631
713632bool  PPPClass::setBaudrate (int  baudrate) {
714-   if  (_dce == NULL ) {
715-     return  false ;
716-   }
717- 
718-   if  (_mode == ESP_MODEM_MODE_DATA) {
719-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
720-     return  false ;
721-   }
633+   PPP_CMD_MODE_CHECK (false );
722634
723635  esp_err_t  err = esp_modem_set_baud (_dce, baudrate);
724636  if  (err != ESP_OK) {
@@ -737,15 +649,44 @@ bool PPPClass::setBaudrate(int baudrate) {
737649  return  true ;
738650}
739651
740- bool  PPPClass::sms (const  char  *num, const  char  *message) {
741-   if  (_dce == NULL ) {
742-     return  false ;
652+ int  PPPClass::batteryVoltage () const  {
653+   PPP_CMD_MODE_CHECK (-1 );
654+ 
655+   int  volt, bcs, bcl;
656+   esp_err_t  err = esp_modem_get_battery_status (_dce, volt, bcs, bcl);
657+   if  (err != ESP_OK) {
658+     log_e (" esp_modem_get_battery_status failed with %d %s"  , err, esp_err_to_name (err));
659+     return  -1 ;
743660  }
661+   return  volt;
662+ }
744663
745-   if  (_mode == ESP_MODEM_MODE_DATA) {
746-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
747-     return  false ;
664+ int  PPPClass::batteryLevel () const  {
665+   PPP_CMD_MODE_CHECK (-1 );
666+ 
667+   int  volt, bcs, bcl;
668+   esp_err_t  err = esp_modem_get_battery_status (_dce, volt, bcs, bcl);
669+   if  (err != ESP_OK) {
670+     log_e (" esp_modem_get_battery_status failed with %d %s"  , err, esp_err_to_name (err));
671+     return  -1 ;
748672  }
673+   return  bcl;
674+ }
675+ 
676+ int  PPPClass::batteryStatus () const  {
677+   PPP_CMD_MODE_CHECK (-1 );
678+ 
679+   int  volt, bcs, bcl;
680+   esp_err_t  err = esp_modem_get_battery_status (_dce, volt, bcs, bcl);
681+   if  (err != ESP_OK) {
682+     log_e (" esp_modem_get_battery_status failed with %d %s"  , err, esp_err_to_name (err));
683+     return  -1 ;
684+   }
685+   return  bcs;
686+ }
687+ 
688+ bool  PPPClass::sms (const  char  *num, const  char  *message) {
689+   PPP_CMD_MODE_CHECK (false );
749690
750691  for  (int  i = 0 ; i < strlen (num); i++) {
751692    if  (num[i] != ' +'   && num[i] != ' #'   && num[i] != ' *'   && (num[i] < 0x30  || num[i] > 0x39 )) {
@@ -775,14 +716,8 @@ bool PPPClass::sms(const char *num, const char *message) {
775716}
776717
777718String PPPClass::cmd (const  char  *at_command, int  timeout) {
778-   if  (_dce == NULL ) {
779-     return  String ();
780-   }
719+   PPP_CMD_MODE_CHECK (String ());
781720
782-   if  (_mode == ESP_MODEM_MODE_DATA) {
783-     log_e (" Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"  );
784-     return  String ();
785-   }
786721  char  out[128 ] = {0 };
787722  esp_err_t  err = _esp_modem_at (_dce, at_command, out, timeout);
788723  if  (err != ESP_OK) {
0 commit comments