@@ -52,6 +52,22 @@ static esp_err_t sim7600_handle_cbc(modem_dce_t *dce, const char *line)
52
52
return err ;
53
53
}
54
54
55
+ /**
56
+ * @brief Handle response from AT+CPOF
57
+ */
58
+ static esp_err_t sim7600_handle_cpof (modem_dce_t * dce , const char * line )
59
+ {
60
+ esp_err_t err = ESP_OK ;
61
+ if (strstr (line , MODEM_RESULT_CODE_SUCCESS )) {
62
+ err = esp_modem_process_command_done (dce , MODEM_STATE_SUCCESS );
63
+ } else if (strstr (line , MODEM_RESULT_CODE_NO_CARRIER )) {
64
+ err = ESP_OK ;
65
+ } else if (strstr (line , MODEM_RESULT_CODE_ERROR )) {
66
+ err = esp_modem_process_command_done (dce , MODEM_STATE_FAIL );
67
+ }
68
+ return err ;
69
+ }
70
+
55
71
/**
56
72
* @brief Get battery status
57
73
*
@@ -78,6 +94,26 @@ static esp_err_t sim7600_get_battery_status(modem_dce_t *dce, uint32_t *bcs, uin
78
94
return ESP_FAIL ;
79
95
}
80
96
97
+ /**
98
+ * @brief Set the SIM7600 device to power down mode
99
+ *
100
+ * @param dce common modem dce object (modem_dce_t)
101
+ * @return esp_err_t
102
+ * - ESP_OK on success
103
+ * - ESP_FAIL on error
104
+ */
105
+ static esp_err_t sim7600_power_down (modem_dce_t * dce )
106
+ {
107
+ modem_dte_t * dte = dce -> dte ;
108
+ dce -> handle_line = sim7600_handle_cpof ;
109
+ DCE_CHECK (dte -> send_cmd (dte , "AT+CPOF\r" , MODEM_COMMAND_TIMEOUT_POWEROFF ) == ESP_OK , "send command failed" , err );
110
+ DCE_CHECK (dce -> state == MODEM_STATE_SUCCESS , "power down failed" , err );
111
+ ESP_LOGD (DCE_TAG , "power down ok" );
112
+ return ESP_OK ;
113
+ err :
114
+ return ESP_FAIL ;
115
+ }
116
+
81
117
/**
82
118
* @brief Create and initialize SIM7600 object
83
119
*
@@ -86,5 +122,6 @@ modem_dce_t *sim7600_init(modem_dte_t *dte)
86
122
{
87
123
modem_dce_t * dce = bg96_init (dte );
88
124
dte -> dce -> get_battery_status = sim7600_get_battery_status ;
125
+ dte -> dce -> power_down = sim7600_power_down ;
89
126
return dce ;
90
127
}
0 commit comments