Morse Micro IoT SDK  2.11.2
emmet.c
Go to the documentation of this file.
1/*
2 * Copyright 2021-2023 Morse Micro
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
73#include <string.h>
74#include "mmhal_app.h"
75#include "mmlog.h"
76#include "mmosal.h"
77#include "mmwlan.h"
78#include "mmregdb.h"
79#include "emmet.h"
80#include "mm_app_loadconfig.h"
81#include "mm_app_common.h"
82
88static void link_status_callback(const struct mmipal_link_status *link_status)
89{
90 uint32_t time_ms = mmosal_get_time_ms();
91 if (link_status->link_state == MMIPAL_LINK_UP)
92 {
93 printf("Link is up. Time: %lu ms", time_ms);
94 printf(", IP: %s", link_status->ip_addr);
95 printf(", Netmask: %s", link_status->netmask);
96 printf(", Gateway: %s\n", link_status->gateway);
97 }
98 else
99 {
100 printf("Link is down. Time: %lu ms\n", time_ms);
101 }
102}
103
104void emmet_hal_set_led(uint8_t led_id, uint8_t level)
105{
106 mmhal_set_led(led_id, level);
107}
108
110{
111 enum mmhal_button_state state = mmhal_get_button(BUTTON_ID_USER0);
112 if (state == BUTTON_RELEASED)
113 {
115 }
116 else
117 {
119 }
120}
121
123{
125 if (cb != NULL)
126 {
127 if (state == EMMET_BUTTON_RELEASED)
128 {
129 cb(BUTTON_ID_USER0, BUTTON_RELEASED);
130 }
131 else
132 {
133 cb(BUTTON_ID_USER0, BUTTON_PRESSED);
134 }
135 }
136}
137
142void app_init(void)
143{
144 /* Initialize Emmet first to ensure host interface is in a valid state. */
145 emmet_init();
146
147 MMLOG_PRINTF("\n\n");
148 MMLOG_APP("Morse Emmet Demo (Built " __DATE__ " " __TIME__ ")\n\n");
149
150 /* Initialize MMWLAN interface */
151 mmwlan_init();
153
154 /* Boot the WLAN interface so that we can retrieve the firmware version. */
155 struct mmwlan_boot_args boot_args = MMWLAN_BOOT_ARGS_INIT;
156 (void)mmwlan_boot(&boot_args);
158
159 /* Load IP stack settings from config store or defaults */
162
163 /* Initialize IP stack. */
164 enum mmipal_status ipal_status = mmipal_init(&mmipal_init_args);
165
166 if (ipal_status != MMIPAL_SUCCESS)
167 {
168 MMLOG_ERR("Error initializing network interface.\n");
169 MMOSAL_ASSERT(false);
170 }
171
173
174 /* Configure and start Emmet so that we can begin receiving commands from the host. */
175 emmet_set_reg_db(get_regulatory_db());
176
177 emmet_start();
178 MMLOG_APP("Emmet Started\n");
179}
static void link_status_callback(const struct mmipal_link_status *link_status)
Link status callback.
Definition: emmet.c:88
void app_init(void)
Main entry point to the application.
Definition: emmet.c:142
void emmet_hal_trigger_button_event(enum emmet_button_state state)
Trigger a button event to the application as if a user had pushed or released the button.
Definition: emmet.c:122
void emmet_hal_set_led(uint8_t led_id, uint8_t level)
Set LED state.
Definition: emmet.c:104
enum emmet_button_state emmet_hal_get_button_state(void)
Get the current button state.
Definition: emmet.c:109
void emmet_start(void)
Start Emmet.
enum mmwlan_status emmet_set_reg_db(const struct mmwlan_regulatory_db *reg_db)
Set the regulatory database for Emmet to use.
void emmet_init(void)
Initialize Emmet.
emmet_button_state
Enumeration of button states used by the Emmet HAL.
Definition: emmet.h:101
@ EMMET_BUTTON_PRESSED
Button pressed state.
Definition: emmet.h:105
@ EMMET_BUTTON_RELEASED
Button released state.
Definition: emmet.h:103
void(* mmhal_button_state_cb_t)(enum mmhal_button_id button_id, enum mmhal_button_state button_state)
Button state callback function prototype.
Definition: mmhal_app.h:97
mmhal_button_state
Enumeration for button states.
Definition: mmhal_app.h:91
mmhal_button_state_cb_t mmhal_get_button_callback(enum mmhal_button_id button_id)
Returns the registered callback handler for button state changes.
void mmhal_set_led(uint8_t led, uint8_t level)
Set the specified LED to the requested level.
enum mmhal_button_state mmhal_get_button(enum mmhal_button_id button_id)
Reads the state of the specified button.
enum mmipal_status mmipal_init(const struct mmipal_init_args *args)
Initialize the IP stack and enable the MMWLAN interface.
#define MMIPAL_INIT_ARGS_DEFAULT
Default values for mmipal_init_args.
Definition: mmipal.h:193
void mmipal_set_link_status_callback(mmipal_link_status_cb_fn_t fn)
Sets the callback function to be invoked on link status changes.
mmipal_status
Enumeration of status codes returned by MMIPAL functions.
Definition: mmipal.h:43
@ MMIPAL_LINK_UP
Link is up.
Definition: mmipal.h:62
@ MMIPAL_SUCCESS
Completed successfully.
Definition: mmipal.h:45
#define MMLOG_APP(fmt,...)
Display an APP level log message.
Definition: mmlog.h:238
#define MMLOG_PRINTF(...)
Logging printf definition.
Definition: mmlog.h:233
#define MMLOG_ERR(fmt,...)
Display an ERROR level log message.
Definition: mmlog.h:266
#define MMOSAL_ASSERT(expr)
Assert that the given expression evaluates to true and abort execution if not.
Definition: mmosal.h:1006
uint32_t mmosal_get_time_ms(void)
Get the system time in milliseconds.
enum mmwlan_status mmwlan_boot(const struct mmwlan_boot_args *args)
Boot the Morse Micro transceiver and leave it in an idle state.
#define MMWLAN_BOOT_ARGS_INIT
Initializer for mmwlan_boot_args.
Definition: mmwlan.h:623
void mmwlan_init(void)
Initialize the MMWLAN subsystem.
enum mmwlan_status mmwlan_set_channel_list(const struct mmwlan_s1g_channel_list *channel_list)
Set the list of channels that are supported by the regulatory domain in which the device resides.
Morse Micro application helper routines for initializing/de-initializing the Wireless LAN interface a...
void app_print_version_info(void)
Prints various version information.
const struct mmwlan_s1g_channel_list * load_channel_list(void)
Looks up country code and returns appropriate channel list.
void load_mmipal_init_args(struct mmipal_init_args *args)
Loads the provided structure with initialization parameters read from config store.
Initialize arguments structure.
Definition: mmipal.h:173
Arguments data structure for mmwlan_boot().
Definition: mmwlan.h:610