11/*
2- * SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
2+ * SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD
33 *
44 * SPDX-License-Identifier: Apache-2.0
55 */
@@ -156,7 +156,7 @@ extern "C" esp_err_t esp_modem_set_mode(esp_modem_dce_t *dce_wrap, esp_modem_dce
156156
157157extern " C" esp_err_t esp_modem_read_pin (esp_modem_dce_t *dce_wrap, bool *pin)
158158{
159- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
159+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || pin == nullptr ) {
160160 return ESP_ERR_INVALID_ARG;
161161 }
162162
@@ -183,7 +183,7 @@ extern "C" esp_err_t esp_modem_sms_txt_mode(esp_modem_dce_t *dce_wrap, bool txt)
183183
184184extern " C" esp_err_t esp_modem_send_sms (esp_modem_dce_t *dce_wrap, const char *number, const char *message)
185185{
186- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
186+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || number == nullptr || message == nullptr ) {
187187 return ESP_ERR_INVALID_ARG;
188188 }
189189 std::string number_str (number);
@@ -202,7 +202,7 @@ extern "C" esp_err_t esp_modem_sms_character_set(esp_modem_dce_t *dce_wrap)
202202
203203extern " C" esp_err_t esp_modem_set_pin (esp_modem_dce_t *dce_wrap, const char *pin)
204204{
205- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
205+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || pin == nullptr ) {
206206 return ESP_ERR_INVALID_ARG;
207207 }
208208 std::string pin_str (pin);
@@ -211,47 +211,57 @@ extern "C" esp_err_t esp_modem_set_pin(esp_modem_dce_t *dce_wrap, const char *pi
211211
212212extern " C" esp_err_t esp_modem_at (esp_modem_dce_t *dce_wrap, const char *at, char *p_out, int timeout)
213213{
214- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
214+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || at == nullptr ) {
215215 return ESP_ERR_INVALID_ARG;
216216 }
217217 std::string out;
218218 std::string at_str (at);
219219 auto ret = command_response_to_esp_err (dce_wrap->dce ->at (at_str, out, timeout));
220- if ((p_out != NULL ) && (!out. empty ()) ) {
220+ if ((p_out != NULL )) {
221221 strlcpy (p_out, out.c_str (), CONFIG_ESP_MODEM_C_API_STR_MAX);
222222 }
223223 return ret;
224224}
225225
226226extern " C" esp_err_t esp_modem_get_signal_quality (esp_modem_dce_t *dce_wrap, int *rssi, int *ber)
227227{
228- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
228+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || (rssi == nullptr && ber == nullptr ) ) {
229229 return ESP_ERR_INVALID_ARG;
230230 }
231- return command_response_to_esp_err (dce_wrap->dce ->get_signal_quality (*rssi, *ber));
231+ int rssi_val, ber_val;
232+ auto ret = command_response_to_esp_err (dce_wrap->dce ->get_signal_quality (rssi_val, ber_val));
233+ if (ret == ESP_OK) {
234+ if (rssi != nullptr ) {
235+ *rssi = rssi_val;
236+ }
237+ if (ber != nullptr ) {
238+ *ber = ber_val;
239+ }
240+ }
241+ return ret;
232242}
233243
234244extern " C" esp_err_t esp_modem_get_imsi (esp_modem_dce_t *dce_wrap, char *p_imsi)
235245{
236- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
246+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || p_imsi == nullptr ) {
237247 return ESP_ERR_INVALID_ARG;
238248 }
239249 std::string imsi;
240250 auto ret = command_response_to_esp_err (dce_wrap->dce ->get_imsi (imsi));
241- if (ret == ESP_OK && !imsi. empty () ) {
251+ if (ret == ESP_OK) {
242252 strlcpy (p_imsi, imsi.c_str (), CONFIG_ESP_MODEM_C_API_STR_MAX);
243253 }
244254 return ret;
245255}
246256
247257extern " C" esp_err_t esp_modem_at_raw (esp_modem_dce_t *dce_wrap, const char *cmd, char *p_out, const char *pass, const char *fail, int timeout)
248258{
249- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
259+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || cmd == nullptr || pass == nullptr || fail == nullptr ) {
250260 return ESP_ERR_INVALID_ARG;
251261 }
252262 std::string out;
253263 auto ret = command_response_to_esp_err (dce_wrap->dce ->at_raw (cmd, out, pass, fail, timeout));
254- if ((p_out != NULL ) && (!out. empty ()) ) {
264+ if ((p_out != NULL )) {
255265 strlcpy (p_out, out.c_str (), CONFIG_ESP_MODEM_C_API_STR_MAX);
256266 }
257267 return ret;
@@ -276,56 +286,67 @@ extern "C" esp_err_t esp_modem_store_profile(esp_modem_dce_t *dce_wrap)
276286
277287extern " C" esp_err_t esp_modem_get_imei (esp_modem_dce_t *dce_wrap, char *p_imei)
278288{
279- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
289+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || p_imei == nullptr ) {
280290 return ESP_ERR_INVALID_ARG;
281291 }
282292 std::string imei;
283293 auto ret = command_response_to_esp_err (dce_wrap->dce ->get_imei (imei));
284- if (ret == ESP_OK && !imei. empty () ) {
294+ if (ret == ESP_OK) {
285295 strlcpy (p_imei, imei.c_str (), CONFIG_ESP_MODEM_C_API_STR_MAX);
286296 }
287297 return ret;
288298}
289299
290300extern " C" esp_err_t esp_modem_get_operator_name (esp_modem_dce_t *dce_wrap, char *p_name, int *p_act)
291301{
292- if (dce_wrap == nullptr || dce_wrap->dce == nullptr || p_name == nullptr || p_act == nullptr ) {
302+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || ( p_name == nullptr && p_act == nullptr ) ) {
293303 return ESP_ERR_INVALID_ARG;
294304 }
295305 std::string name;
296306 int act;
297307 auto ret = command_response_to_esp_err (dce_wrap->dce ->get_operator_name (name, act));
298- if (ret == ESP_OK && !name.empty ()) {
299- strlcpy (p_name, name.c_str (), CONFIG_ESP_MODEM_C_API_STR_MAX);
300- *p_act = act;
308+ if (ret == ESP_OK) {
309+ if (p_name != nullptr ) {
310+ strlcpy (p_name, name.c_str (), CONFIG_ESP_MODEM_C_API_STR_MAX);
311+ }
312+ if (p_act != nullptr ) {
313+ *p_act = act;
314+ }
301315 }
302316 return ret;
303317}
304318
305319extern " C" esp_err_t esp_modem_get_module_name (esp_modem_dce_t *dce_wrap, char *p_name)
306320{
307- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
321+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || p_name == nullptr ) {
308322 return ESP_ERR_INVALID_ARG;
309323 }
310324 std::string name;
311325 auto ret = command_response_to_esp_err (dce_wrap->dce ->get_module_name (name));
312- if (ret == ESP_OK && !name. empty () ) {
326+ if (ret == ESP_OK) {
313327 strlcpy (p_name, name.c_str (), CONFIG_ESP_MODEM_C_API_STR_MAX);
314328 }
315329 return ret;
316330}
317331
318332extern " C" esp_err_t esp_modem_get_battery_status (esp_modem_dce_t *dce_wrap, int *p_volt, int *p_bcs, int *p_bcl)
319333{
320- if (dce_wrap == nullptr || dce_wrap->dce == nullptr || p_bcs == nullptr || p_bcl == nullptr || p_volt == nullptr ) {
334+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr ||
335+ (p_volt == nullptr && p_bcs == nullptr && p_bcl == nullptr )) {
321336 return ESP_ERR_INVALID_ARG;
322337 }
323- int bcs, bcl, volt ;
338+ int volt, bcs, bcl ;
324339 auto ret = command_response_to_esp_err (dce_wrap->dce ->get_battery_status (volt, bcs, bcl));
325340 if (ret == ESP_OK) {
326- *p_volt = volt;
327- *p_bcs = bcs;
328- *p_bcl = bcl;
341+ if (p_volt != nullptr ) {
342+ *p_volt = volt;
343+ }
344+ if (p_bcs != nullptr ) {
345+ *p_bcs = bcs;
346+ }
347+ if (p_bcl != nullptr ) {
348+ *p_bcl = bcl;
349+ }
329350 }
330351 return ret;
331352}
@@ -340,7 +361,7 @@ extern "C" esp_err_t esp_modem_power_down(esp_modem_dce_t *dce_wrap)
340361
341362extern " C" esp_err_t esp_modem_set_operator (esp_modem_dce_t *dce_wrap, int mode, int format, const char *oper)
342363{
343- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
364+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || oper == nullptr ) {
344365 return ESP_ERR_INVALID_ARG;
345366 }
346367 std::string operator_str (oper);
@@ -357,7 +378,7 @@ extern "C" esp_err_t esp_modem_set_network_attachment_state(esp_modem_dce_t *dce
357378
358379extern " C" esp_err_t esp_modem_get_network_attachment_state (esp_modem_dce_t *dce_wrap, int *p_state)
359380{
360- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
381+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || p_state == nullptr ) {
361382 return ESP_ERR_INVALID_ARG;
362383 }
363384 int state;
@@ -378,7 +399,7 @@ extern "C" esp_err_t esp_modem_set_radio_state(esp_modem_dce_t *dce_wrap, int st
378399
379400extern " C" esp_err_t esp_modem_get_radio_state (esp_modem_dce_t *dce_wrap, int *p_state)
380401{
381- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
402+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || p_state == nullptr ) {
382403 return ESP_ERR_INVALID_ARG;
383404 }
384405 int state;
@@ -407,7 +428,7 @@ extern "C" esp_err_t esp_modem_set_preferred_mode(esp_modem_dce_t *dce_wrap, int
407428
408429extern " C" esp_err_t esp_modem_set_network_bands (esp_modem_dce_t *dce_wrap, const char *mode, const int *bands, int size)
409430{
410- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
431+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || mode == nullptr || bands == nullptr ) {
411432 return ESP_ERR_INVALID_ARG;
412433 }
413434 std::string mode_str (mode);
@@ -416,7 +437,7 @@ extern "C" esp_err_t esp_modem_set_network_bands(esp_modem_dce_t *dce_wrap, cons
416437
417438extern " C" esp_err_t esp_modem_get_network_system_mode (esp_modem_dce_t *dce_wrap, int *p_mode)
418439{
419- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
440+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || p_mode == nullptr ) {
420441 return ESP_ERR_INVALID_ARG;
421442 }
422443 int mode;
@@ -437,7 +458,7 @@ extern "C" esp_err_t esp_modem_set_gnss_power_mode(esp_modem_dce_t *dce_wrap, in
437458
438459extern " C" esp_err_t esp_modem_get_gnss_power_mode (esp_modem_dce_t *dce_wrap, int *p_mode)
439460{
440- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
461+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || p_mode == nullptr ) {
441462 return ESP_ERR_INVALID_ARG;
442463 }
443464 int mode;
@@ -450,7 +471,7 @@ extern "C" esp_err_t esp_modem_get_gnss_power_mode(esp_modem_dce_t *dce_wrap, in
450471
451472extern " C" esp_err_t esp_modem_config_psm (esp_modem_dce_t *dce_wrap, int mode, const char *tau, const char *active_time)
452473{
453- if (dce_wrap == nullptr || dce_wrap->dce == nullptr || mode > 3 ) {
474+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || mode > 3 || tau == nullptr || active_time == nullptr ) {
454475 return ESP_ERR_INVALID_ARG;
455476 }
456477
@@ -496,7 +517,7 @@ extern "C" esp_err_t esp_modem_config_mobile_termination_error(esp_modem_dce_t *
496517
497518extern " C" esp_err_t esp_modem_config_edrx (esp_modem_dce_t *dce_wrap, int mode, int access_technology, const char *edrx_value)
498519{
499- if (dce_wrap == nullptr || dce_wrap->dce == nullptr || mode > 3 || access_technology > 5 ) {
520+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || mode > 3 || access_technology > 5 || edrx_value == nullptr ) {
500521 return ESP_ERR_INVALID_ARG;
501522 }
502523
@@ -509,7 +530,7 @@ extern "C" esp_err_t esp_modem_config_edrx(esp_modem_dce_t *dce_wrap, int mode,
509530
510531extern " C" esp_err_t esp_modem_sqn_gm02s_connect (esp_modem_dce_t *dce_wrap, const esp_modem_PdpContext_t *pdp_context)
511532{
512- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
533+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || pdp_context == nullptr ) {
513534 return ESP_ERR_INVALID_ARG;
514535 }
515536
@@ -521,12 +542,15 @@ extern "C" esp_err_t esp_modem_sqn_gm02s_connect(esp_modem_dce_t *dce_wrap, cons
521542
522543extern " C" esp_err_t esp_modem_reset (esp_modem_dce_t *dce_wrap)
523544{
545+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
546+ return ESP_ERR_INVALID_ARG;
547+ }
524548 return command_response_to_esp_err (dce_wrap->dce ->reset ());
525549}
526550
527551extern " C" esp_err_t esp_modem_set_pdp_context (esp_modem_dce_t *dce_wrap, esp_modem_PdpContext_t *c_api_pdp)
528552{
529- if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
553+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || c_api_pdp == nullptr ) {
530554 return ESP_ERR_INVALID_ARG;
531555 }
532556 esp_modem::PdpContext pdp{c_api_pdp->apn };
@@ -555,11 +579,17 @@ extern "C" esp_err_t esp_modem_command(esp_modem_dce_t *dce_wrap, const char *co
555579
556580extern " C" esp_err_t esp_modem_set_baud (esp_modem_dce_t *dce_wrap, int baud)
557581{
582+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr ) {
583+ return ESP_ERR_INVALID_ARG;
584+ }
558585 return command_response_to_esp_err (dce_wrap->dce ->set_baud (baud));
559586}
560587
561588extern " C" esp_err_t esp_modem_set_apn (esp_modem_dce_t *dce_wrap, const char *apn)
562589{
590+ if (dce_wrap == nullptr || dce_wrap->dce == nullptr || apn == nullptr ) {
591+ return ESP_ERR_INVALID_ARG;
592+ }
563593 auto new_pdp = std::unique_ptr<PdpContext>(new PdpContext (apn));
564594 dce_wrap->dce ->get_module ()->configure_pdp_context (std::move (new_pdp));
565595 return ESP_OK;
0 commit comments