Skip to content

Commit af00360

Browse files
committed
subsys: ctr_gnss: Upgrade HW calls handling for CHESTER-M/U1
Signed-off-by: Karel Blavka <[email protected]>
1 parent bf2049e commit af00360

File tree

3 files changed

+67
-21
lines changed

3 files changed

+67
-21
lines changed

include/chester/ctr_gnss.h

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ typedef void (*ctr_gnss_user_cb)(enum ctr_gnss_event event, union ctr_gnss_event
6666
int ctr_gnss_set_handler(ctr_gnss_user_cb user_cb, void *user_data);
6767
int ctr_gnss_start(int *corr_id);
6868
int ctr_gnss_stop(bool keep_bckp_domain, int *corr_id);
69+
int ctr_gnss_is_running(bool *running);
6970

7071
/** @} */
7172

subsys/ctr_gnss/ctr_gnss.c

+41-21
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ static ctr_gnss_user_cb m_user_cb;
5656
static void *m_user_data;
5757
static atomic_t m_corr_id;
5858
static bool m_running;
59+
enum ctr_info_product_family m_product_family;
5960

6061
K_MSGQ_DEFINE_STATIC(m_cmd_msgq, sizeof(struct cmd_msgq_item), CMD_MSGQ_MAX_ITEMS, 4);
6162
#if defined(CONFIG_CTR_LTE_V2_GNSS)
@@ -72,28 +73,27 @@ static void lte_v2_gnss_handler(const struct ctr_lte_v2_gnss_update *update, voi
7273
static int process_req_start(const struct cmd_msgq_item *item)
7374
{
7475
int ret;
75-
enum ctr_info_product_family product_family;
7676

77-
ret = ctr_info_get_product_family(&product_family);
77+
ret = ctr_info_get_product_family(&m_product_family);
7878
if (ret) {
7979
LOG_ERR("Call `ctr_info_get_product_family` failed: %d", ret);
8080
return ret;
8181
}
8282

8383
#if defined(CONFIG_CTR_GNSS_M8)
84-
if (product_family == CTR_INFO_PRODUCT_FAMILY_CHESTER_M) {
84+
if (m_product_family == CTR_INFO_PRODUCT_FAMILY_CHESTER_M) {
8585
ctr_gnss_m8_set_handler(m_user_cb, m_user_data);
8686
return ctr_gnss_m8_start();
8787
}
8888
#endif
8989

9090
#if defined(CONFIG_CTR_LTE_V2_GNSS)
91-
if (product_family == CTR_INFO_PRODUCT_FAMILY_CHESTER_U1) {
91+
if (m_product_family == CTR_INFO_PRODUCT_FAMILY_CHESTER_U1) {
9292
ctr_lte_v2_gnss_set_handler(lte_v2_gnss_handler, NULL);
9393
return ctr_lte_v2_gnss_set_enable(true);
9494
}
9595
#endif
96-
LOG_ERR("Unsupported product family: 0x%03x", product_family);
96+
LOG_ERR("Unsupported product family: 0x%03x", m_product_family);
9797

9898
return -ENOTSUP;
9999
}
@@ -103,11 +103,15 @@ static int process_req_stop(const struct cmd_msgq_item *item)
103103
int ret = -ENOTSUP;
104104

105105
#if defined(CONFIG_CTR_GNSS_M8)
106-
ret = ctr_gnss_m8_stop(item->data.stop.keep_bckp_domain);
106+
if (m_product_family == CTR_INFO_PRODUCT_FAMILY_CHESTER_M) {
107+
ret = ctr_gnss_m8_stop(item->data.stop.keep_bckp_domain);
108+
}
107109
#endif
108110

109111
#if defined(CONFIG_CTR_LTE_V2_GNSS)
110-
ret = ctr_lte_v2_gnss_set_enable(false);
112+
if (m_product_family == CTR_INFO_PRODUCT_FAMILY_CHESTER_U1) {
113+
ret = ctr_lte_v2_gnss_set_enable(false);
114+
}
111115
#endif
112116

113117
return ret;
@@ -198,24 +202,29 @@ static void dispatcher_thread(void)
198202
int ret;
199203

200204
#if defined(CONFIG_CTR_GNSS_M8)
201-
ret = ctr_gnss_m8_process_data();
202-
if (ret) {
203-
LOG_ERR("Call `ctr_gnss_m8_process_data` failed: %d", ret);
205+
if (m_product_family == CTR_INFO_PRODUCT_FAMILY_CHESTER_M) {
206+
ret = ctr_gnss_m8_process_data();
207+
if (ret) {
208+
LOG_ERR("Call `ctr_gnss_m8_process_data` failed: %d", ret);
209+
}
204210
}
205211
#endif
206212

207213
#if defined(CONFIG_CTR_LTE_V2_GNSS)
208-
struct ctr_lte_v2_gnss_update update;
209-
ret = k_msgq_get(&m_lte_v2_msgq, &update, K_MSEC(100));
210-
if (!ret) {
211-
union ctr_gnss_event_data data = {0};
212-
data.update.fix_quality = -1;
213-
data.update.satellites_tracked = -1;
214-
data.update.latitude = update.latitude;
215-
data.update.longitude = update.longitude;
216-
data.update.altitude = update.altitude;
217-
if (m_user_cb) {
218-
m_user_cb(CTR_GNSS_EVENT_UPDATE, &data, m_user_data);
214+
if (m_product_family == CTR_INFO_PRODUCT_FAMILY_CHESTER_U1) {
215+
struct ctr_lte_v2_gnss_update update;
216+
ret = k_msgq_get(&m_lte_v2_msgq, &update, K_MSEC(100));
217+
if (!ret) {
218+
union ctr_gnss_event_data data = {0};
219+
data.update.fix_quality = -1;
220+
data.update.satellites_tracked = -1;
221+
data.update.latitude = update.latitude;
222+
data.update.longitude = update.longitude;
223+
data.update.altitude = update.altitude;
224+
if (m_user_cb) {
225+
m_user_cb(CTR_GNSS_EVENT_UPDATE, &data,
226+
m_user_data);
227+
}
219228
}
220229
}
221230
#endif
@@ -284,3 +293,14 @@ int ctr_gnss_stop(bool keep_bckp_domain, int *corr_id)
284293

285294
return 0;
286295
}
296+
297+
int ctr_gnss_is_running(bool *running)
298+
{
299+
if (!running) {
300+
return -EINVAL;
301+
}
302+
303+
*running = m_running;
304+
305+
return 0;
306+
}

subsys/ctr_gnss/ctr_gnss_shell.c

+25
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,27 @@ static int cmd_stop(const struct shell *shell, size_t argc, char **argv)
6565
return 0;
6666
}
6767

68+
static int cmd_state(const struct shell *shell, size_t argc, char **argv)
69+
{
70+
if (argc > 1) {
71+
shell_error(shell, "command not found: %s", argv[1]);
72+
shell_help(shell);
73+
return -EINVAL;
74+
}
75+
76+
bool running;
77+
int ret = ctr_gnss_is_running(&running);
78+
if (ret) {
79+
LOG_ERR("Call `ctr_gnss_is_running` failed: %d", ret);
80+
shell_error(shell, "command failed");
81+
return ret;
82+
}
83+
84+
shell_print(shell, "running: %s", running ? "yes" : "no");
85+
86+
return 0;
87+
}
88+
6889
static int print_help(const struct shell *shell, size_t argc, char **argv)
6990
{
7091
if (argc > 1) {
@@ -91,6 +112,10 @@ SHELL_STATIC_SUBCMD_SET_CREATE(
91112
"Stop receiver.",
92113
cmd_stop, 1, 0),
93114

115+
SHELL_CMD_ARG(state, NULL,
116+
"Get receiver state.",
117+
cmd_state, 1, 0),
118+
94119
SHELL_SUBCMD_SET_END
95120
);
96121

0 commit comments

Comments
 (0)