summaryrefslogtreecommitdiff
path: root/nrfdemo/src/main.c
diff options
context:
space:
mode:
authorMichal Hanus <mikehanus@protonmail.com>2025-05-26 22:51:43 +0200
committerMichal Hanus <mikehanus@protonmail.com>2025-05-26 22:51:43 +0200
commitf4b199f60188733cb3bafeb199bdf6fe3758616e (patch)
tree72f1c8bfb349f6a8ccb0723dbd98644c7a8dbef6 /nrfdemo/src/main.c
parenta407db2d45286f37eff10710c9a8e43755cedfc6 (diff)
only LTE
Diffstat (limited to 'nrfdemo/src/main.c')
-rw-r--r--nrfdemo/src/main.c175
1 files changed, 140 insertions, 35 deletions
diff --git a/nrfdemo/src/main.c b/nrfdemo/src/main.c
index e998d45..e44acaa 100644
--- a/nrfdemo/src/main.c
+++ b/nrfdemo/src/main.c
@@ -78,6 +78,12 @@ static int modem_configure(void)
return err;
}
+ err = lte_lc_system_mode_set(LTE_LC_SYSTEM_MODE_LTEM, LTE_LC_SYSTEM_MODE_PREFER_LTEM);
+ if (err) {
+ LOG_ERR("Failed to set system mode LTE-M: %d", err);
+ return err;
+ }
+
LOG_INF("Connecting to LTE network");
err = lte_lc_connect_async(lte_handler);
if (err) {
@@ -124,7 +130,7 @@ int publish_all()
err = data_publish(&client, MQTT_QOS_1_AT_LEAST_ONCE, CONFIG_BUTTON_EVENT_PUBLISH_MSG, sizeof(CONFIG_BUTTON_EVENT_PUBLISH_MSG)-1);
if (err) {
LOG_INF("Failed to send message, %d", err);
- return;
+ return 0;
}
sensor_sample_fetch(bme);
@@ -133,17 +139,82 @@ int publish_all()
sensor_channel_get(bme, SENSOR_CHAN_HUMIDITY, &humidity);
sensor_channel_get(bme, SENSOR_CHAN_GAS_RES, &gas_res);
- err |= publish_sensor(&client, "nrf/dk/temp", temp.val1, temp.val2);
- err |= publish_sensor(&client, "nrf/dk/pres", press.val1, press.val2);
- err |= publish_sensor(&client, "nrf/dk/humi", humidity.val1, humidity.val2);
- err |= publish_sensor(&client, "nrf/dk/gas", gas_res.val1, gas_res.val2);
-
-
- printf("Temp: %d.%02d degC; Press: %d.%02d kPa; RH: %d.%02d %%; G: %d.%02d Ohm\n",
+ LOG_INF("Temp: %d.%02d degC; Press: %d.%02d kPa; RH: %d.%02d %%; G: %d.%02d Ohm",
temp.val1, temp.val2,
press.val1, press.val2,
humidity.val1, humidity.val2,
gas_res.val1, gas_res.val2);
+
+
+ //k_msleep(20);
+ err |= publish_sensor(&client, "nrf/dk/temp", temp.val1, temp.val2);
+ //k_msleep(20);
+ err |= publish_sensor(&client, "nrf/dk/pres", press.val1, press.val2);
+ //k_msleep(20);
+ err |= publish_sensor(&client, "nrf/dk/humi", humidity.val1, humidity.val2);
+ //k_msleep(20);
+ err |= publish_sensor(&client, "nrf/dk/gas", gas_res.val1, 0);
+ //k_msleep(1000);
+
+
+
+ struct lte_lc_conn_eval_params params;
+ lte_lc_conn_eval_params_get(&params);
+ printf("--- LTE Connection Evaluation Parameters ---\n"
+ "RRC State: %d\n"
+ "Energy Estimate: %d\n"
+ "TAU Triggered: %d\n"
+ "CE Level: %d\n"
+ "EARFCN: %d\n"
+ "DL Pathloss: %d dB\n"
+ "RSRP: %d\n"
+ "RSRQ: %d\n"
+ "TX Repetitions: %d\n"
+ "RX Repetitions: %d\n"
+ "Physical Cell ID: %d\n"
+ "Band: %d\n"
+ "SNR: %d\n"
+ "TX Power: %d dBm\n"
+ "MCC: %d\n"
+ "MNC: %d\n",
+ params.rrc_state,
+ params.energy_estimate,
+ params.tau_trig,
+ params.ce_level,
+ params.earfcn,
+ params.dl_pathloss,
+ params.rsrp,
+ params.rsrq,
+ params.tx_rep,
+ params.rx_rep,
+ params.phy_cid,
+ params.band,
+ params.snr,
+ params.tx_power,
+ params.mcc,
+ params.mnc);
+ err |= publish_int(&client, "nrf/dk/rsrp", params.rsrp);
+ //k_msleep(20);
+ err |= publish_int(&client, "nrf/dk/rsrq", params.rsrq);
+ //k_msleep(20);
+ err |= publish_int(&client, "nrf/dk/snr", params.snr);
+ //k_msleep(20);
+ err |= publish_int(&client, "nrf/dk/enerest", params.energy_estimate);
+ //k_msleep(20);
+ err |= publish_int(&client, "nrf/dk/band", params.band);
+ //k_msleep(20);
+ err |= publish_int(&client, "nrf/dk/txp", params.tx_power);
+ //k_msleep(20);
+ err |= publish_int(&client, "nrf/dk/dlpl", params.dl_pathloss);
+ //k_msleep(20);
+
+
+ enum lte_lc_system_mode mode;
+ enum lte_lc_system_mode_preference preference;
+ lte_lc_system_mode_get(&mode, &preference);
+
+ err |= publish_sensor(&client, "nrf/dk/ltemode", mode, preference);
+
return err;
}
@@ -176,7 +247,7 @@ static void gnss_event_handler(int event)
num_satellites++;
}
}
- LOG_INF("%d", num_satellites);
+ LOG_INF("Sat: %d", num_satellites);
err = nrf_modem_gnss_read(&pvt_data, sizeof(pvt_data), NRF_MODEM_GNSS_DATA_PVT);
if (err) {
LOG_ERR("nrf_modem_gnss_read failed, err %d", err);
@@ -232,6 +303,7 @@ int main(void)
return 0;
}
+ #ifdef USE_GNSS
/* Activate only the GNSS stack */
if (lte_lc_func_mode_set(LTE_LC_FUNC_MODE_ACTIVATE_GNSS) != 0) {
LOG_ERR("Failed to activate GNSS functional mode");
@@ -264,6 +336,7 @@ int main(void)
LOG_ERR("Failed to start GNSS");
return 0;
}
+ #endif
@@ -285,8 +358,8 @@ int main(void)
do_connect:
if (connect_attempt++ > 0) {
LOG_INF("Reconnecting in %d seconds...",
- CONFIG_MQTT_RECONNECT_DELAY_S);
- k_sleep(K_SECONDS(CONFIG_MQTT_RECONNECT_DELAY_S));
+ 20);
+ k_sleep(K_SECONDS(20));
}
LOG_INF("Connection to broker using mqtt_connect");
@@ -304,7 +377,13 @@ do_connect:
while (1)
{
+ #ifdef USE_GNSS
+ err = mqtt_disconnect(&client);
+ if (err != 0){
+ LOG_INF("No mqtt disconnect");
+ }
err = lte_lc_func_mode_set(LTE_LC_FUNC_MODE_DEACTIVATE_LTE);
+ err |= lte_lc_func_mode_set(LTE_LC_FUNC_MODE_ACTIVATE_GNSS);
if (err != 0){
LOG_ERR("Failed to decativate LTE and enable GNSS functional mode");
break;
@@ -313,47 +392,73 @@ do_connect:
k_sem_take(&gnss_fixed, K_FOREVER);
err = lte_lc_func_mode_set(LTE_LC_FUNC_MODE_ACTIVATE_LTE);
+ err |= lte_lc_func_mode_set(LTE_LC_FUNC_MODE_DEACTIVATE_GNSS);
if (err != 0){
LOG_ERR("Failed to activate LTE");
break;
}
+ else {
+ LOG_ERR("Waiting for LTE connect");
+ }
k_sem_take(&lte_connected, K_FOREVER);
- for (int i = 0; i < 1000; i++)
- {
- k_msleep(10);
+ LOG_ERR("LTE connected");
- err = poll(&fds, 1, mqtt_keepalive_time_left(&client));
- if (err < 0) {
- LOG_ERR("Error in poll(): %d", errno);
+ err = mqtt_connect(&client);
+ if (err != 0){
+ LOG_ERR("Failed to connect to mqtt");
break;
}
- err = mqtt_live(&client);
- if ((err != 0) && (err != -EAGAIN)) {
- LOG_ERR("Error in mqtt_live: %d", err);
- break;
+ err = fds_init(&client,&fds);
+ if (err) {
+ LOG_ERR("Error in fds_init: %d", err);
+ return 0;
}
+ #endif
+
+ //for (int i = 0; i < 1000; i++)
+ //{
- if ((fds.revents & POLLIN) == POLLIN) {
- err = mqtt_input(&client);
- if (err != 0) {
- LOG_ERR("Error in mqtt_input: %d", err);
+ err = poll(&fds, 1, mqtt_keepalive_time_left(&client));
+ if (err < 0) {
+ LOG_ERR("Error in poll(): %d", errno);
break;
}
- }
- if ((fds.revents & POLLERR) == POLLERR) {
- LOG_ERR("POLLERR");
- break;
- }
+ err = mqtt_live(&client);
+ if ((err != 0) && (err != -EAGAIN)) {
+ LOG_ERR("Error in mqtt_live: %d", err);
+ break;
+ }
- if ((fds.revents & POLLNVAL) == POLLNVAL) {
- LOG_ERR("POLLNVAL");
- break;
- }
- }
+ if ((fds.revents & POLLIN) == POLLIN) {
+ err = mqtt_input(&client);
+ if (err != 0) {
+ LOG_ERR("Error in mqtt_input: %d", err);
+ break;
+ }
+ }
+
+ if ((fds.revents & POLLERR) == POLLERR) {
+ LOG_ERR("POLLERR");
+ break;
+ }
+
+ if ((fds.revents & POLLNVAL) == POLLNVAL) {
+ LOG_ERR("POLLNVAL");
+ break;
+ }
+
+ err = publish_all();
+
+ if (err) {
+ LOG_ERR("Publish error");
+ continue;
+ }
+ //}
+ k_msleep(5000);
}
LOG_INF("Disconnecting MQTT client");