drivers: modem: gsm: declare structs in gsm_modem
Move the declarations of a few structs into the struct gsm_modem Signed-off-by: Yong Cong Sin <yongcong.sin@gmail.com>
This commit is contained in:
parent
768c5d42c0
commit
b2b9343c95
1 changed files with 58 additions and 57 deletions
|
@ -80,6 +80,11 @@ static struct gsm_modem {
|
||||||
|
|
||||||
struct net_if *iface;
|
struct net_if *iface;
|
||||||
|
|
||||||
|
struct k_thread rx_thread;
|
||||||
|
struct k_work_q workq;
|
||||||
|
struct k_work_delayable rssi_work_handle;
|
||||||
|
struct gsm_ppp_modem_info minfo;
|
||||||
|
|
||||||
int rssi_retries;
|
int rssi_retries;
|
||||||
int attach_retries;
|
int attach_retries;
|
||||||
bool mux_enabled : 1;
|
bool mux_enabled : 1;
|
||||||
|
@ -99,14 +104,9 @@ NET_BUF_POOL_DEFINE(gsm_recv_pool, GSM_RECV_MAX_BUF, GSM_RECV_BUF_SIZE,
|
||||||
K_KERNEL_STACK_DEFINE(gsm_rx_stack, GSM_RX_STACK_SIZE);
|
K_KERNEL_STACK_DEFINE(gsm_rx_stack, GSM_RX_STACK_SIZE);
|
||||||
K_THREAD_STACK_DEFINE(gsm_workq_stack, GSM_WORKQ_STACK_SIZE);
|
K_THREAD_STACK_DEFINE(gsm_workq_stack, GSM_WORKQ_STACK_SIZE);
|
||||||
|
|
||||||
struct k_thread gsm_rx_thread;
|
|
||||||
static struct k_work_q gsm_workq;
|
|
||||||
static struct k_work_delayable rssi_work_handle;
|
|
||||||
static struct gsm_ppp_modem_info minfo;
|
|
||||||
|
|
||||||
static inline int gsm_work_reschedule(struct k_work_delayable *dwork, k_timeout_t delay)
|
static inline int gsm_work_reschedule(struct k_work_delayable *dwork, k_timeout_t delay)
|
||||||
{
|
{
|
||||||
return k_work_reschedule_for_queue(&gsm_workq, dwork, delay);
|
return k_work_reschedule_for_queue(&gsm.workq, dwork, delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_MODEM_GSM_ENABLE_CESQ_RSSI)
|
#if defined(CONFIG_MODEM_GSM_ENABLE_CESQ_RSSI)
|
||||||
|
@ -217,11 +217,11 @@ MODEM_CMD_DEFINE(on_cmd_atcmdinfo_manufacturer)
|
||||||
{
|
{
|
||||||
size_t out_len;
|
size_t out_len;
|
||||||
|
|
||||||
out_len = net_buf_linearize(minfo.mdm_manufacturer,
|
out_len = net_buf_linearize(gsm.minfo.mdm_manufacturer,
|
||||||
sizeof(minfo.mdm_manufacturer) - 1,
|
sizeof(gsm.minfo.mdm_manufacturer) - 1,
|
||||||
data->rx_buf, 0, len);
|
data->rx_buf, 0, len);
|
||||||
minfo.mdm_manufacturer[out_len] = '\0';
|
gsm.minfo.mdm_manufacturer[out_len] = '\0';
|
||||||
LOG_INF("Manufacturer: %s", log_strdup(minfo.mdm_manufacturer));
|
LOG_INF("Manufacturer: %s", log_strdup(gsm.minfo.mdm_manufacturer));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -231,11 +231,11 @@ MODEM_CMD_DEFINE(on_cmd_atcmdinfo_model)
|
||||||
{
|
{
|
||||||
size_t out_len;
|
size_t out_len;
|
||||||
|
|
||||||
out_len = net_buf_linearize(minfo.mdm_model,
|
out_len = net_buf_linearize(gsm.minfo.mdm_model,
|
||||||
sizeof(minfo.mdm_model) - 1,
|
sizeof(gsm.minfo.mdm_model) - 1,
|
||||||
data->rx_buf, 0, len);
|
data->rx_buf, 0, len);
|
||||||
minfo.mdm_model[out_len] = '\0';
|
gsm.minfo.mdm_model[out_len] = '\0';
|
||||||
LOG_INF("Model: %s", log_strdup(minfo.mdm_model));
|
LOG_INF("Model: %s", log_strdup(gsm.minfo.mdm_model));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -245,11 +245,11 @@ MODEM_CMD_DEFINE(on_cmd_atcmdinfo_revision)
|
||||||
{
|
{
|
||||||
size_t out_len;
|
size_t out_len;
|
||||||
|
|
||||||
out_len = net_buf_linearize(minfo.mdm_revision,
|
out_len = net_buf_linearize(gsm.minfo.mdm_revision,
|
||||||
sizeof(minfo.mdm_revision) - 1,
|
sizeof(gsm.minfo.mdm_revision) - 1,
|
||||||
data->rx_buf, 0, len);
|
data->rx_buf, 0, len);
|
||||||
minfo.mdm_revision[out_len] = '\0';
|
gsm.minfo.mdm_revision[out_len] = '\0';
|
||||||
LOG_INF("Revision: %s", log_strdup(minfo.mdm_revision));
|
LOG_INF("Revision: %s", log_strdup(gsm.minfo.mdm_revision));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -259,10 +259,10 @@ MODEM_CMD_DEFINE(on_cmd_atcmdinfo_imei)
|
||||||
{
|
{
|
||||||
size_t out_len;
|
size_t out_len;
|
||||||
|
|
||||||
out_len = net_buf_linearize(minfo.mdm_imei, sizeof(minfo.mdm_imei) - 1,
|
out_len = net_buf_linearize(gsm.minfo.mdm_imei, sizeof(gsm.minfo.mdm_imei) - 1,
|
||||||
data->rx_buf, 0, len);
|
data->rx_buf, 0, len);
|
||||||
minfo.mdm_imei[out_len] = '\0';
|
gsm.minfo.mdm_imei[out_len] = '\0';
|
||||||
LOG_INF("IMEI: %s", log_strdup(minfo.mdm_imei));
|
LOG_INF("IMEI: %s", log_strdup(gsm.minfo.mdm_imei));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -273,10 +273,10 @@ MODEM_CMD_DEFINE(on_cmd_atcmdinfo_imsi)
|
||||||
{
|
{
|
||||||
size_t out_len;
|
size_t out_len;
|
||||||
|
|
||||||
out_len = net_buf_linearize(minfo.mdm_imsi, sizeof(minfo.mdm_imsi) - 1,
|
out_len = net_buf_linearize(gsm.minfo.mdm_imsi, sizeof(gsm.minfo.mdm_imsi) - 1,
|
||||||
data->rx_buf, 0, len);
|
data->rx_buf, 0, len);
|
||||||
minfo.mdm_imsi[out_len] = '\0';
|
gsm.minfo.mdm_imsi[out_len] = '\0';
|
||||||
LOG_INF("IMSI: %s", log_strdup(minfo.mdm_imsi));
|
LOG_INF("IMSI: %s", log_strdup(gsm.minfo.mdm_imsi));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -286,22 +286,22 @@ MODEM_CMD_DEFINE(on_cmd_atcmdinfo_iccid)
|
||||||
{
|
{
|
||||||
size_t out_len;
|
size_t out_len;
|
||||||
|
|
||||||
out_len = net_buf_linearize(minfo.mdm_iccid, sizeof(minfo.mdm_iccid) - 1,
|
out_len = net_buf_linearize(gsm.minfo.mdm_iccid, sizeof(gsm.minfo.mdm_iccid) - 1,
|
||||||
data->rx_buf, 0, len);
|
data->rx_buf, 0, len);
|
||||||
minfo.mdm_iccid[out_len] = '\0';
|
gsm.minfo.mdm_iccid[out_len] = '\0';
|
||||||
if (minfo.mdm_iccid[0] == '+') {
|
if (gsm.minfo.mdm_iccid[0] == '+') {
|
||||||
/* Seen on U-blox SARA: "+CCID: nnnnnnnnnnnnnnnnnnnn".
|
/* Seen on U-blox SARA: "+CCID: nnnnnnnnnnnnnnnnnnnn".
|
||||||
* Skip over the +CCID bit, which other modems omit.
|
* Skip over the +CCID bit, which other modems omit.
|
||||||
*/
|
*/
|
||||||
char *p = strchr(minfo.mdm_iccid, ' ');
|
char *p = strchr(gsm.minfo.mdm_iccid, ' ');
|
||||||
|
|
||||||
if (p) {
|
if (p) {
|
||||||
size_t len = strlen(p+1);
|
size_t len = strlen(p+1);
|
||||||
|
|
||||||
memmove(minfo.mdm_iccid, p+1, len+1);
|
memmove(gsm.minfo.mdm_iccid, p+1, len+1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG_INF("ICCID: %s", log_strdup(minfo.mdm_iccid));
|
LOG_INF("ICCID: %s", log_strdup(gsm.minfo.mdm_iccid));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -363,16 +363,16 @@ MODEM_CMD_DEFINE(on_cmd_atcmdinfo_rssi_cesq)
|
||||||
rxlev = ATOI(argv[0], 0, "rxlev");
|
rxlev = ATOI(argv[0], 0, "rxlev");
|
||||||
|
|
||||||
if (rsrp >= 0 && rsrp <= 97) {
|
if (rsrp >= 0 && rsrp <= 97) {
|
||||||
minfo.mdm_rssi = -140 + (rsrp - 1);
|
gsm.minfo.mdm_rssi = -140 + (rsrp - 1);
|
||||||
LOG_INF("RSRP: %d", minfo.mdm_rssi);
|
LOG_INF("RSRP: %d", gsm.minfo.mdm_rssi);
|
||||||
} else if (rscp >= 0 && rscp <= 96) {
|
} else if (rscp >= 0 && rscp <= 96) {
|
||||||
minfo.mdm_rssi = -120 + (rscp - 1);
|
gsm.minfo.mdm_rssi = -120 + (rscp - 1);
|
||||||
LOG_INF("RSCP: %d", minfo.mdm_rssi);
|
LOG_INF("RSCP: %d", gsm.minfo.mdm_rssi);
|
||||||
} else if (rxlev >= 0 && rxlev <= 63) {
|
} else if (rxlev >= 0 && rxlev <= 63) {
|
||||||
minfo.mdm_rssi = -110 + (rxlev - 1);
|
gsm.minfo.mdm_rssi = -110 + (rxlev - 1);
|
||||||
LOG_INF("RSSI: %d", minfo.mdm_rssi);
|
LOG_INF("RSSI: %d", gsm.minfo.mdm_rssi);
|
||||||
} else {
|
} else {
|
||||||
minfo.mdm_rssi = GSM_RSSI_INVALID;
|
gsm.minfo.mdm_rssi = GSM_RSSI_INVALID;
|
||||||
LOG_INF("RSRP/RSCP/RSSI not known");
|
LOG_INF("RSRP/RSCP/RSSI not known");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,7 +392,7 @@ MODEM_CMD_DEFINE(on_cmd_atcmdinfo_rssi_csq)
|
||||||
rssi = GSM_RSSI_INVALID;
|
rssi = GSM_RSSI_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
minfo.mdm_rssi = rssi;
|
gsm.minfo.mdm_rssi = rssi;
|
||||||
LOG_INF("RSSI: %d", rssi);
|
LOG_INF("RSSI: %d", rssi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -590,7 +590,7 @@ static void rssi_handler(struct k_work *work)
|
||||||
#if defined(CONFIG_MODEM_CELL_INFO)
|
#if defined(CONFIG_MODEM_CELL_INFO)
|
||||||
(void)gsm_query_cellinfo(&gsm);
|
(void)gsm_query_cellinfo(&gsm);
|
||||||
#endif
|
#endif
|
||||||
(void)gsm_work_reschedule(&rssi_work_handle,
|
(void)gsm_work_reschedule(&gsm.rssi_work_handle,
|
||||||
K_SECONDS(CONFIG_MODEM_GSM_RSSI_POLLING_PERIOD));
|
K_SECONDS(CONFIG_MODEM_GSM_RSSI_POLLING_PERIOD));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -708,8 +708,8 @@ attaching:
|
||||||
/* Read connection quality (RSSI) before PPP carrier is ON */
|
/* Read connection quality (RSSI) before PPP carrier is ON */
|
||||||
rssi_handler(NULL);
|
rssi_handler(NULL);
|
||||||
|
|
||||||
if (!(minfo.mdm_rssi && minfo.mdm_rssi != GSM_RSSI_INVALID &&
|
if (!(gsm->minfo.mdm_rssi && gsm->minfo.mdm_rssi != GSM_RSSI_INVALID &&
|
||||||
minfo.mdm_rssi < GSM_RSSI_MAXVAL)) {
|
gsm->minfo.mdm_rssi < GSM_RSSI_MAXVAL)) {
|
||||||
|
|
||||||
LOG_DBG("Not valid RSSI, %s", "retrying...");
|
LOG_DBG("Not valid RSSI, %s", "retrying...");
|
||||||
if (gsm->rssi_retries-- > 0) {
|
if (gsm->rssi_retries-- > 0) {
|
||||||
|
@ -766,7 +766,8 @@ attaching:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
modem_cmd_handler_tx_unlock(&gsm->context.cmd_handler);
|
modem_cmd_handler_tx_unlock(&gsm->context.cmd_handler);
|
||||||
k_work_schedule(&rssi_work_handle, K_SECONDS(CONFIG_MODEM_GSM_RSSI_POLLING_PERIOD));
|
k_work_schedule(&gsm->rssi_work_handle,
|
||||||
|
K_SECONDS(CONFIG_MODEM_GSM_RSSI_POLLING_PERIOD));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1038,7 +1039,7 @@ void gsm_ppp_start(const struct device *dev)
|
||||||
(void)gsm_work_reschedule(&gsm->gsm_configure_work, K_NO_WAIT);
|
(void)gsm_work_reschedule(&gsm->gsm_configure_work, K_NO_WAIT);
|
||||||
|
|
||||||
#if defined(CONFIG_GSM_MUX)
|
#if defined(CONFIG_GSM_MUX)
|
||||||
k_work_init_delayable(&rssi_work_handle, rssi_handler);
|
k_work_init_delayable(&gsm->rssi_work_handle, rssi_handler);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1083,9 +1084,9 @@ void gsm_ppp_register_modem_power_callback(const struct device *dev,
|
||||||
|
|
||||||
const struct gsm_ppp_modem_info *gsm_ppp_modem_info(const struct device *dev)
|
const struct gsm_ppp_modem_info *gsm_ppp_modem_info(const struct device *dev)
|
||||||
{
|
{
|
||||||
ARG_UNUSED(dev);
|
struct gsm_modem *gsm = dev->data;
|
||||||
|
|
||||||
return &minfo;
|
return &gsm->minfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gsm_init(const struct device *dev)
|
static int gsm_init(const struct device *dev)
|
||||||
|
@ -1116,15 +1117,15 @@ static int gsm_init(const struct device *dev)
|
||||||
|
|
||||||
#if defined(CONFIG_MODEM_SHELL)
|
#if defined(CONFIG_MODEM_SHELL)
|
||||||
/* modem information storage */
|
/* modem information storage */
|
||||||
gsm->context.data_manufacturer = minfo.mdm_manufacturer;
|
gsm->context.data_manufacturer = gsm->minfo.mdm_manufacturer;
|
||||||
gsm->context.data_model = minfo.mdm_model;
|
gsm->context.data_model = gsm->minfo.mdm_model;
|
||||||
gsm->context.data_revision = minfo.mdm_revision;
|
gsm->context.data_revision = gsm->minfo.mdm_revision;
|
||||||
gsm->context.data_imei = minfo.mdm_imei;
|
gsm->context.data_imei = gsm->minfo.mdm_imei;
|
||||||
#if defined(CONFIG_MODEM_SIM_NUMBERS)
|
#if defined(CONFIG_MODEM_SIM_NUMBERS)
|
||||||
gsm->context.data_imsi = minfo.mdm_imsi;
|
gsm->context.data_imsi = gsm->minfo.mdm_imsi;
|
||||||
gsm->context.data_iccid = minfo.mdm_iccid;
|
gsm->context.data_iccid = gsm->minfo.mdm_iccid;
|
||||||
#endif /* CONFIG_MODEM_SIM_NUMBERS */
|
#endif /* CONFIG_MODEM_SIM_NUMBERS */
|
||||||
gsm->context.data_rssi = &minfo.mdm_rssi;
|
gsm->context.data_rssi = &gsm->minfo.mdm_rssi;
|
||||||
#endif /* CONFIG_MODEM_SHELL */
|
#endif /* CONFIG_MODEM_SHELL */
|
||||||
|
|
||||||
gsm->context.is_automatic_oper = false;
|
gsm->context.is_automatic_oper = false;
|
||||||
|
@ -1147,17 +1148,17 @@ static int gsm_init(const struct device *dev)
|
||||||
LOG_DBG("iface->read %p iface->write %p",
|
LOG_DBG("iface->read %p iface->write %p",
|
||||||
gsm->context.iface.read, gsm->context.iface.write);
|
gsm->context.iface.read, gsm->context.iface.write);
|
||||||
|
|
||||||
k_thread_create(&gsm_rx_thread, gsm_rx_stack,
|
k_thread_create(&gsm->rx_thread, gsm_rx_stack,
|
||||||
K_KERNEL_STACK_SIZEOF(gsm_rx_stack),
|
K_KERNEL_STACK_SIZEOF(gsm_rx_stack),
|
||||||
(k_thread_entry_t) gsm_rx,
|
(k_thread_entry_t) gsm_rx,
|
||||||
gsm, NULL, NULL, K_PRIO_COOP(7), 0, K_NO_WAIT);
|
gsm, NULL, NULL, K_PRIO_COOP(7), 0, K_NO_WAIT);
|
||||||
k_thread_name_set(&gsm_rx_thread, "gsm_rx");
|
k_thread_name_set(&gsm->rx_thread, "gsm_rx");
|
||||||
|
|
||||||
/* initialize the work queue */
|
/* initialize the work queue */
|
||||||
k_work_queue_init(&gsm_workq);
|
k_work_queue_init(&gsm->workq);
|
||||||
k_work_queue_start(&gsm_workq, gsm_workq_stack, K_THREAD_STACK_SIZEOF(gsm_workq_stack),
|
k_work_queue_start(&gsm->workq, gsm_workq_stack, K_THREAD_STACK_SIZEOF(gsm_workq_stack),
|
||||||
K_PRIO_COOP(7), NULL);
|
K_PRIO_COOP(7), NULL);
|
||||||
k_thread_name_set(&gsm_workq.thread, "gsm_workq");
|
k_thread_name_set(&gsm->workq.thread, "gsm_workq");
|
||||||
|
|
||||||
gsm->iface = ppp_net_if();
|
gsm->iface = ppp_net_if();
|
||||||
if (!gsm->iface) {
|
if (!gsm->iface) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue