samples: net: gsm: should be able to start/stop freely
The gsm modem should be able to be started or stopped freely,
independent from the networking state.
Signed-off-by: Yong Cong Sin <yongcong.sin@gmail.com>
diff --git a/samples/net/gsm_modem/src/main.c b/samples/net/gsm_modem/src/main.c
index 49b8295..bdbb975 100644
--- a/samples/net/gsm_modem/src/main.c
+++ b/samples/net/gsm_modem/src/main.c
@@ -18,18 +18,21 @@
static const struct device *gsm_dev;
static struct net_mgmt_event_callback mgmt_cb;
-static bool connected;
static bool starting = IS_ENABLED(CONFIG_GSM_PPP_AUTOSTART);
static int cmd_sample_modem_suspend(const struct shell *shell,
size_t argc, char *argv[])
{
- if (!connected) {
- shell_fprintf(shell, SHELL_NORMAL, "Not connected.\n");
+ ARG_UNUSED(argc);
+ ARG_UNUSED(argv);
+
+ if (!starting) {
+ shell_fprintf(shell, SHELL_NORMAL, "Modem is already stopped.\n");
return -ENOEXEC;
}
gsm_ppp_stop(gsm_dev);
+ starting = false;
return 0;
}
@@ -37,18 +40,16 @@
static int cmd_sample_modem_resume(const struct shell *shell,
size_t argc, char *argv[])
{
- if (starting) {
- shell_fprintf(shell, SHELL_NORMAL,
- "Please wait for network connection.\n");
- return -ENOEXEC;
- }
+ ARG_UNUSED(argc);
+ ARG_UNUSED(argv);
- if (connected) {
- shell_fprintf(shell, SHELL_NORMAL, "Already connected.\n");
+ if (starting) {
+ shell_fprintf(shell, SHELL_NORMAL, "Modem is already started.\n");
return -ENOEXEC;
}
gsm_ppp_start(gsm_dev);
+ starting = true;
return 0;
}
@@ -70,22 +71,21 @@
static void event_handler(struct net_mgmt_event_callback *cb,
uint32_t mgmt_event, struct net_if *iface)
{
+ ARG_UNUSED(cb);
+ ARG_UNUSED(iface);
+
if ((mgmt_event & (NET_EVENT_L4_CONNECTED
| NET_EVENT_L4_DISCONNECTED)) != mgmt_event) {
return;
}
- starting = false;
-
if (mgmt_event == NET_EVENT_L4_CONNECTED) {
LOG_INF("Network connected");
- connected = true;
return;
}
if (mgmt_event == NET_EVENT_L4_DISCONNECTED) {
LOG_INF("Network disconnected");
- connected = false;
return;
}
}