27
27
static void press_power_button (int time_us )
28
28
{
29
29
gpio_t gpio ;
30
-
31
- #if defined(TARGET_UBLOX_C030_R410M )
32
- gpio_init_inout (& gpio , MDMPWRON , PIN_OUTPUT , OpenDrain , 0 );
33
- #else
34
- gpio_init_inout (& gpio , MDMPWRON , PIN_OUTPUT , OpenDrainNoPull , 1 );
35
- #endif
36
-
30
+ gpio_init_out_ex (& gpio , MDMPWRON , 1 );
37
31
wait_us (time_us );
38
32
gpio_write (& gpio , 0 );
39
33
}
@@ -45,71 +39,52 @@ void onboard_modem_init()
45
39
// Take us out of reset
46
40
gpio_init_inout (& gpio , RADIO_PWR , PIN_OUTPUT , PushPullNoPull , 1 );
47
41
gpio_init_inout (& gpio , BUF_EN , PIN_OUTPUT , OpenDrainNoPull , 0 );
48
- gpio_init_inout (& gpio , MDMRST , PIN_OUTPUT , OpenDrainNoPull , 0 );
49
- gpio_init_inout (& gpio , MDMPWRON , PIN_OUTPUT , OpenDrainNoPull , 0 );
42
+ gpio_init_out_ex (& gpio , MDMRST , 0 );
43
+ gpio_init_out_ex (& gpio , MDMPWRON , 0 );
50
44
gpio_init_inout (& gpio , RADIO_DTR , PIN_OUTPUT , OpenDrainNoPull , 0 );
51
45
}
52
46
53
47
void onboard_modem_deinit ()
54
48
{
49
+ onboard_modem_power_down ();
55
50
gpio_t gpio ;
56
51
57
52
// Back into reset
58
- gpio_init_inout (& gpio , MDMRST ,PIN_OUTPUT , OpenDrainNoPull , 1 );
53
+ gpio_init_out_ex (& gpio , MDMRST , 1 );
54
+ gpio_init_out_ex (& gpio , MDMPWRON , 1 );
59
55
gpio_init_inout (& gpio , BUF_EN , PIN_OUTPUT , OpenDrainNoPull , 1 );
60
56
gpio_init_inout (& gpio , RADIO_PWR , PIN_OUTPUT , PushPullNoPull , 0 );
61
57
gpio_init_inout (& gpio , RADIO_DTR , PIN_OUTPUT , OpenDrainNoPull , 1 );
62
58
}
63
59
64
-
65
-
66
-
67
60
void onboard_modem_power_up ()
68
61
{
69
- #if defined(TARGET_UBLOX_C030_R410M )
70
- /* keep the power line low for 1 seconds */
71
- press_power_button (1000000 );
72
- #else
73
- /* keep the power line low for 50 microseconds */
62
+ onboard_modem_init ();
63
+
74
64
gpio_t gpio ;
75
65
gpio_init_in (& gpio , MON_1V8 );
76
66
77
- if (gpio_is_connected (& gpio ) != 0 && gpio_read (& gpio ) != 0 ) {
67
+ if (gpio_is_connected (& gpio ) && ! gpio_read (& gpio )) {
78
68
unsigned int i = 0 ;
79
- while (i < 5 )
69
+ while (i < 3 )
80
70
{
81
- press_power_button ( 2000000 );
82
- wait_ms (1000 );
83
- onboard_modem_deinit ();
84
- wait_ms (1000 );
85
- onboard_modem_init ();
71
+ press_power_button (150000 );
86
72
wait_ms (250 );
87
73
88
- if (gpio_is_connected ( & gpio ) != 0 && gpio_read (& gpio ) == 0 )
74
+ if (gpio_read (& gpio ))
89
75
{
90
76
break ;
91
77
}
92
78
i ++ ;
93
79
}
94
80
}
95
-
96
- press_power_button ( 2000000 );
97
-
98
- #endif
99
-
100
- /* give modem a little time to respond */
101
- wait_ms (500 );
102
81
}
103
82
104
83
void onboard_modem_power_down ()
105
84
{
106
- #if defined(TARGET_UBLOX_C030_R410M )
107
- /* keep the power line low for 1.5 seconds */
85
+ /* Activate PWR_ON for 1.5s to switch off */
108
86
press_power_button (1500000 );
109
- #else
110
- /* keep the power line low for 1 seconds */
111
- press_power_button (300000 );
112
- #endif
87
+ // check for 1.8v low if not, take reset low for 10s
113
88
}
114
89
115
90
#endif //MODEM_ON_BOARD
0 commit comments