40
40
#include "mgos_uart.h"
41
41
#include "mgos_utils.h"
42
42
43
- #define AT_CMD_TIMEOUT 3 .0
43
+ #define AT_CMD_TIMEOUT 2 .0
44
44
45
45
enum mgos_pppos_state {
46
46
PPPOS_IDLE = 0 ,
@@ -123,8 +123,8 @@ static void mgos_pppos_try_baud_rate(struct mgos_pppos_data *pd) {
123
123
ucfg .rx_fc_type = ucfg .tx_fc_type = MGOS_UART_FC_HW ;
124
124
}
125
125
}
126
- LOG (LL_INFO , ("Trying baud rate %d (fc %s)..." , ucfg .baud_rate ,
127
- (ucfg .rx_fc_type != MGOS_UART_FC_NONE ? "on" : "off" )));
126
+ LOG (LL_DEBUG , ("Trying baud rate %d (fc %s)..." , ucfg .baud_rate ,
127
+ (ucfg .rx_fc_type != MGOS_UART_FC_NONE ? "on" : "off" )));
128
128
mgos_uart_configure (pd -> cfg -> uart_no , & ucfg );
129
129
mgos_uart_set_rx_enabled (pd -> cfg -> uart_no , true);
130
130
pd -> try_baud_idx ++ ;
@@ -449,6 +449,9 @@ static void mgos_pppos_dispatch_once(struct mgos_pppos_data *pd) {
449
449
mgos_clear_timer (pd -> poll_timer_id );
450
450
pd -> poll_timer_id = MGOS_INVALID_TIMER_ID ;
451
451
}
452
+ if (pd -> cfg -> dtr_gpio >= 0 ) {
453
+ mgos_gpio_write (pd -> cfg -> dtr_gpio , !pd -> cfg -> dtr_act );
454
+ }
452
455
mgos_pppos_set_net_status (pd , MGOS_NET_EV_DISCONNECTED );
453
456
break ;
454
457
}
@@ -477,6 +480,9 @@ static void mgos_pppos_dispatch_once(struct mgos_pppos_data *pd) {
477
480
pd -> poll_timer_id = mgos_set_timer (100 , MGOS_TIMER_REPEAT ,
478
481
mgos_pppos_poll_timer_cb , pd );
479
482
}
483
+ if (pd -> cfg -> dtr_gpio >= 0 ) {
484
+ mgos_gpio_write (pd -> cfg -> dtr_gpio , !pd -> cfg -> dtr_act );
485
+ }
480
486
if (pd -> cfg -> rst_gpio >= 0 &&
481
487
(pd -> attempt == 1 || pd -> cfg -> rst_mode == 1 )) {
482
488
pd -> baud_ok = false;
@@ -499,6 +505,9 @@ static void mgos_pppos_dispatch_once(struct mgos_pppos_data *pd) {
499
505
case PPPOS_RESET_HOLD : {
500
506
const double now = mgos_uptime ();
501
507
if (now < pd -> deadline ) break ;
508
+ if (pd -> cfg -> dtr_gpio >= 0 ) {
509
+ mgos_gpio_write (pd -> cfg -> dtr_gpio , pd -> cfg -> dtr_act );
510
+ }
502
511
mgos_gpio_write (pd -> cfg -> rst_gpio , !pd -> cfg -> rst_act );
503
512
pd -> deadline = now + (pd -> cfg -> rst_wait_ms / 1000.0 );
504
513
mgos_pppos_set_state (pd , PPPOS_RESET_WAIT );
@@ -517,7 +526,10 @@ static void mgos_pppos_dispatch_once(struct mgos_pppos_data *pd) {
517
526
if (pd -> deadline == 0 ) {
518
527
/* Initial 1s pause before sending +++ */
519
528
pd -> deadline = now + 1.2 ;
520
- } else if (now > pd -> deadline ) {
529
+ } else if (now >= pd -> deadline ) {
530
+ if (pd -> cfg -> dtr_gpio >= 0 ) {
531
+ mgos_gpio_write (pd -> cfg -> dtr_gpio , pd -> cfg -> dtr_act );
532
+ }
521
533
mgos_pppos_set_state (pd , PPPOS_BEGIN );
522
534
pd -> deadline = 0 ;
523
535
}
@@ -542,13 +554,15 @@ static void mgos_pppos_dispatch_once(struct mgos_pppos_data *pd) {
542
554
543
555
case PPPOS_SETUP : {
544
556
const char * apn = pd -> cfg -> apn ;
557
+ if (pd -> cfg -> dtr_gpio >= 0 ) {
558
+ mgos_gpio_write (pd -> cfg -> dtr_gpio , pd -> cfg -> dtr_act );
559
+ }
545
560
mgos_pppos_set_net_status (pd , MGOS_NET_EV_CONNECTING );
546
561
LOG (LL_INFO , ("Connecting (UART%d, APN '%s')..." , pd -> cfg -> uart_no ,
547
562
(apn ? apn : "" )));
548
563
mbuf_remove (& pd -> data , pd -> data .len );
549
564
add_cmd (pd , mgos_pppos_at_cb , "AT" );
550
565
add_cmd (pd , NULL , "ATH" );
551
- add_cmd (pd , NULL , "ATZ" );
552
566
add_cmd (pd , NULL , "ATE0" );
553
567
add_cmd (pd , mgos_pppos_ati_cb , "ATI" );
554
568
if (!pd -> baud_ok ) {
@@ -870,7 +884,7 @@ bool mgos_pppos_create(const struct mgos_config_pppos *cfg, int if_instance) {
870
884
cfg -> uart_no , mgos_gpio_str (ucfg .dev .rx_gpio , b1 ),
871
885
mgos_gpio_str (ucfg .dev .tx_gpio , b2 ),
872
886
mgos_gpio_str (ucfg .dev .cts_gpio , b3 ),
873
- mgos_gpio_str (ucfg .dev .rts_gpio , b4 ), ucfg . baud_rate ,
887
+ mgos_gpio_str (ucfg .dev .rts_gpio , b4 ), cfg -> baud_rate ,
874
888
cfg -> fc_enable ? "on" : "off" , (cfg -> apn ? cfg -> apn : "" )));
875
889
#else
876
890
#if CS_PLATFORM == CS_P_STM32
@@ -891,7 +905,7 @@ bool mgos_pppos_create(const struct mgos_config_pppos *cfg, int if_instance) {
891
905
cfg -> uart_no , mgos_gpio_str (ucfg .dev .pins .rx , b1 ),
892
906
mgos_gpio_str (ucfg .dev .pins .tx , b2 ),
893
907
mgos_gpio_str (ucfg .dev .pins .cts , b3 ),
894
- mgos_gpio_str (ucfg .dev .pins .rts , b4 ), ucfg . baud_rate ,
908
+ mgos_gpio_str (ucfg .dev .pins .rts , b4 ), cfg -> baud_rate ,
895
909
cfg -> fc_enable ? "on" : "off" , (cfg -> apn ? cfg -> apn : "" )));
896
910
(void ) b1 ;
897
911
(void ) b2 ;
@@ -906,7 +920,7 @@ bool mgos_pppos_create(const struct mgos_config_pppos *cfg, int if_instance) {
906
920
return false;
907
921
}
908
922
LOG (LL_INFO ,
909
- ("PPPoS UART%d %d, fc %s, APN '%s'" , cfg -> uart_no , ucfg . baud_rate ,
923
+ ("PPPoS UART%d %d, fc %s, APN '%s'" , cfg -> uart_no , cfg -> baud_rate ,
910
924
cfg -> fc_enable ? "on" : "off" , (cfg -> apn ? cfg -> apn : "" )));
911
925
#endif
912
926
#endif
@@ -919,6 +933,9 @@ bool mgos_pppos_create(const struct mgos_config_pppos *cfg, int if_instance) {
919
933
pd -> cfg = cfg ;
920
934
pd -> if_instance = if_instance ;
921
935
pd -> state = PPPOS_IDLE ;
936
+ if (pd -> cfg -> dtr_gpio >= 0 ) {
937
+ mgos_gpio_setup_output (pd -> cfg -> dtr_gpio , !pd -> cfg -> dtr_act );
938
+ }
922
939
SLIST_INSERT_HEAD (& s_pds , pd , next );
923
940
mgos_uart_set_dispatcher (cfg -> uart_no , mgos_pppos_uart_dispatcher , pd );
924
941
mgos_uart_set_rx_enabled (cfg -> uart_no , true);
0 commit comments