Skip to content

Commit

Permalink
cleanup lots of things and debug
Browse files Browse the repository at this point in the history
  • Loading branch information
plskeggs committed Jan 8, 2025
1 parent 638619b commit 5b5c80d
Show file tree
Hide file tree
Showing 12 changed files with 138 additions and 142 deletions.
8 changes: 0 additions & 8 deletions include/net/nrf_cloud.h
Original file line number Diff line number Diff line change
Expand Up @@ -625,14 +625,6 @@ struct nrf_cloud_gnss_data {
};
};

#ifdef CONFIG_NRF_CLOUD_GATEWAY
/** @brief Structure to hold message received from nRF Cloud. */
struct nrf_cloud_gw_data {
struct nrf_cloud_data data;
uint16_t id;
};
#endif

/** @brief Data to control behavior of the nrf_cloud library from the
* cloud side. This data is stored in the device shadow.
*/
Expand Down
5 changes: 3 additions & 2 deletions samples/cellular/nrf_cloud_ble_gateway/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,8 @@ CONFIG_STREAM_FLASH_ERASE=y
#CONFIG_BUILD_S1_VARIANT=y
#CONFIG_SPM_SERVICE_S0_ACTIVE=y

# Location Services configuration
# Services configuration
CONFIG_TEMP_TRACKING=n
CONFIG_LOCATION_TRACKING=n
CONFIG_LOCATION=n
CONFIG_LOCATION_METHOD_GNSS=n
Expand All @@ -115,7 +116,7 @@ CONFIG_MODEM_INFO_ADD_SIM=y
CONFIG_NRF_CLOUD_PGPS=n
#CONFIG_NRF_CLOUD_PGPS_REPLACEMENT_THRESHOLD=4
#CONFIG_NRF_CLOUD_PGPS_REQUEST_UPON_INIT=y
CONFIG_TEMP_TRACKING=n
CONFIG_NRF_CLOUD_MQTT_SHADOW_TRANSFORMS=y

# Date Time lib - Used by PGPS and main application
CONFIG_DATE_TIME=y
Expand Down
13 changes: 4 additions & 9 deletions samples/cellular/nrf_cloud_ble_gateway/src/ble/ble.c
Original file line number Diff line number Diff line change
Expand Up @@ -246,15 +246,12 @@ void send_notify_data(int unused1, int unused2, int unused3)

while (1) {
int err;
struct rec_data_t *rx_data = k_fifo_get(&rec_fifo, K_NO_WAIT);
struct rec_data_t *rx_data = k_fifo_get(&rec_fifo, K_FOREVER);

if (rx_data == NULL) {
/* no pending notifications, so let others take turn */
k_sleep(K_MSEC(10));
continue;
}
err = ble_conn_mgr_get_conn_by_addr(rx_data->addr_trunc,
&connected_ptr);
err = ble_conn_mgr_get_conn_by_addr(rx_data->addr_trunc, &connected_ptr);
if (err) {
LOG_ERR("Connection not found for addr %s",
rx_data->addr_trunc);
Expand All @@ -273,8 +270,7 @@ void send_notify_data(int unused1, int unused2, int unused3)
rx_data->addr_trunc, handle);
}

err = ble_conn_mgr_get_uuid_by_handle(handle, uuid,
connected_ptr);
err = ble_conn_mgr_get_uuid_by_handle(handle, uuid, connected_ptr);
if (err) {
if (discover_in_progress) {
LOG_INF("Ignoring notification on %s due to BLE"
Expand All @@ -294,8 +290,7 @@ void send_notify_data(int unused1, int unused2, int unused3)
LOG_INF("Force ccc for handle %u", handle);
}

err = ble_conn_mgr_generate_path(connected_ptr, handle, path,
ccc);
err = ble_conn_mgr_generate_path(connected_ptr, handle, path, ccc);
if (err) {
LOG_ERR("Unable to generate path: %d", err);
goto cleanup;
Expand Down
91 changes: 43 additions & 48 deletions samples/cellular/nrf_cloud_ble_gateway/src/ble/ble_codec.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <zephyr/kernel.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#undef __XSI_VISIBLE
#define __XSI_VISIBLE 1
#include <time.h>
Expand All @@ -12,6 +13,7 @@
#endif /* CONFIG_NRF_MODEM_LIB */
#include <date_time.h>
#include <net/nrf_cloud.h>
#include <net/nrf_cloud_codec.h>

#include "cJSON.h"
#include "cJSON_os.h"
Expand All @@ -24,6 +26,7 @@

#define MAX_SERVICE_BUF_SIZE 300

#include <zephyr/logging/log_ctrl.h>
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(ble_codec, CONFIG_NRFCLOUD_BLE_GATEWAY_LOG_LEVEL);

Expand Down Expand Up @@ -200,7 +203,6 @@ int device_error_encode(char *ble_address, char *error_msg,

CJPRINT(root_obj, (char *)msg->data.ptr, msg->data_max_len, 0);
msg->data.len = strlen((char *)msg->data.ptr);
LOG_DBG("Device JSON: %s", (char *)msg->data.ptr);
ret = 0;

cleanup:
Expand Down Expand Up @@ -235,10 +237,6 @@ int device_found_encode(uint8_t num_devices_found, struct gw_msg *msg)
CJADDBOOLCS(event, "timeout", true);

for (int i = 0; i < num_devices_found; i++) {
LOG_DBG("Adding device %s RSSI: %d\n",
ble_scanned_devices[i].addr,
ble_scanned_devices[i].rssi);

/* TODO: Update for beacons */
CJADDARROBJ(devices, device);
CJADDSTRCS(device, "deviceType", "BLE");
Expand All @@ -261,7 +259,6 @@ int device_found_encode(uint8_t num_devices_found, struct gw_msg *msg)

CJPRINT(root_obj, (char *)msg->data.ptr, msg->data_max_len, 0);
msg->data.len = strlen((char *)msg->data.ptr);
LOG_DBG("Device JSON: %s", (char *)msg->data.ptr);
ret = 0;

cleanup:
Expand Down Expand Up @@ -308,7 +305,6 @@ int device_connect_result_encode(char *ble_address, bool conn_status,

CJPRINT(root_obj, (char *)msg->data.ptr, msg->data_max_len, 0);
msg->data.len = strlen((char *)msg->data.ptr);
LOG_DBG("Device JSON: %s", (char *)msg->data.ptr);
ret = 0;

cleanup:
Expand Down Expand Up @@ -354,7 +350,6 @@ int device_disconnect_result_encode(char *ble_address, bool conn_status,

CJPRINT(root_obj, (char *)msg->data.ptr, msg->data_max_len, 0);
msg->data.len = strlen((char *)msg->data.ptr);
LOG_DBG("Device JSON: %s", (char *)msg->data.ptr);
ret = 0;

cleanup:
Expand Down Expand Up @@ -411,7 +406,6 @@ int device_value_changed_encode(char *ble_address, char *uuid, char *path,

CJPRINT(root_obj, (char *)msg->data.ptr, msg->data_max_len, 0);
msg->data.len = strlen((char *)msg->data.ptr);
LOG_DBG("Device JSON: %s", (char *)msg->data.ptr);
ret = 0;

cleanup:
Expand Down Expand Up @@ -469,7 +463,6 @@ int device_value_write_result_encode(char *ble_address, char *uuid, char *path,

CJPRINT(root_obj, (char *)msg->data.ptr, msg->data_max_len, 0);
msg->data.len = strlen((char *)msg->data.ptr);
LOG_DBG("Device JSON: %s", (char *)msg->data.ptr);
ret = 0;

cleanup:
Expand Down Expand Up @@ -531,7 +524,6 @@ int device_descriptor_value_encode(char *ble_address, char *uuid,

CJPRINT(root_obj, (char *)msg->data.ptr, msg->data_max_len, 0);
msg->data.len = strlen((char *)msg->data.ptr);
LOG_DBG("Device JSON: %s", (char *)msg->data.ptr);
ret = 0;

cleanup:
Expand All @@ -555,7 +547,8 @@ int device_chrc_read_encode(char *ble_address, char *uuid, char *path,
cJSON *address = cJSON_CreateObject();
cJSON *chrc = cJSON_CreateObject();
cJSON *value_arr = cJSON_CreateArray();
char str[64];
char str[128];
bool is_string = false; /* Experiment: send string data as a JSON string */

if ((root_obj == NULL) || (event == NULL) || (device == NULL) ||
(address == NULL) || (chrc == NULL) || (value_arr == NULL)) {
Expand All @@ -566,7 +559,10 @@ int device_chrc_read_encode(char *ble_address, char *uuid, char *path,
CJADDSTRCS(root_obj, "gatewayId", gateway_id);
CJADDNULLCS(root_obj, "requestId");

CJADDSTRCS(event, "type", "device_characteristic_value_read_result");
CJADDSTRCS(event, "type", "device_characteristic_value_changed");
/** This used to use "device_characteristic_value_read_result"
* but that no longer works in the cloud backend.
*/
CJADDSTRCS(event, "timestamp", get_time_str(str, sizeof(str)));

CJADDSTRCS(device, "id", ble_address);
Expand All @@ -577,19 +573,38 @@ int device_chrc_read_encode(char *ble_address, char *uuid, char *path,
CJADDSTRCS(chrc, "uuid", uuid);
CJADDSTRCS(chrc, "path", path);

CJADDREFCS(device, "address", address);

LOG_DBG("value: %*s, len: %d", value_length, value, value_length);

for (int i = 0; i < value_length; i++) {
CJADDARRNUM(value_arr, value[i]);
if ((value[i] == '\0') && (i == (value_length - 1))) {
break;
}
if (!isprint(value[i])) {
is_string = false;
LOG_DBG("char at %d not printable: 0x%02X", i, value[i]);
break;
}
}

if (is_string && (value_length > 1)) {
strncpy(str, value, sizeof(str) - 1);
str[sizeof(str) - 1] = '\0';
CJADDSTRCS(chrc, "value", str);
} else {
for (int i = 0; i < value_length; i++) {
CJADDARRNUM(value_arr, value[i]);
}
CJADDREFCS(chrc, "value", value_arr);
}

CJADDREFCS(device, "address", address);
CJADDREFCS(chrc, "value", value_arr);
CJADDREFCS(event, "device", device);
CJADDREFCS(event, "characteristic", chrc);
CJADDREFCS(root_obj, "event", event);

CJPRINT(root_obj, (char *)msg->data.ptr, msg->data_max_len, 0);
msg->data.len = strlen((char *)msg->data.ptr);
LOG_DBG("Device JSON: %s", (char *)msg->data.ptr);
ret = 0;

cleanup:
Expand Down Expand Up @@ -719,7 +734,6 @@ int gateway_reported_encode(struct gw_msg *msg)

CJPRINT(root_obj, (char *)msg->data.ptr, msg->data_max_len, 0);
msg->data.len = strlen((char *)msg->data.ptr);
LOG_DBG("JSON: %s", (char *)msg->data.ptr);
cJSON_Delete(root_obj);
return 0;

Expand Down Expand Up @@ -778,7 +792,6 @@ int gateway_desired_list_encode(struct desired_conn *desired, int num_desired,

CJPRINT(root_obj, (char *)msg->data.ptr, msg->data_max_len, 0);
msg->data.len = strlen((char *)msg->data.ptr);
LOG_DBG("JSON: %s", (char *)msg->data.ptr);

ret = 0;

Expand Down Expand Up @@ -810,8 +823,6 @@ static int device_discover_add_service(char *discovered_json,
}
msg->data.len = strlen(ptr);

LOG_DBG("JSON Size: %d", msg->data.len);

memset(discovered_json, 0, MAX_SERVICE_BUF_SIZE);
first_service = false;
first_chrc = true;
Expand All @@ -834,8 +845,6 @@ static int device_discover_add_chrc(char *discovered_json,
}
msg->data.len = strlen(ptr);

LOG_DBG("JSON Size: %d", msg->data.len);

memset(discovered_json, 0, MAX_SERVICE_BUF_SIZE);

first_chrc = false;
Expand All @@ -855,8 +864,6 @@ static int device_discover_add_ccc(char *discovered_json,
strcat(ptr, "}");
msg->data.len = strlen(ptr);

LOG_DBG("JSON Size: %d", msg->data.len);

memset(discovered_json, 0, MAX_SERVICE_BUF_SIZE);

first_chrc = false;
Expand All @@ -883,8 +890,6 @@ static int svc_attr_encode(char *uuid, char *path,

/* Print services and add to wrapper */
CJPRINT(services, service_buffer, MAX_SERVICE_BUF_SIZE, 0);
LOG_DBG("JSON: %s", service_buffer);
LOG_DBG("Encoding service %s", uuid);
ret = device_discover_add_service(service_buffer, msg);

cleanup:
Expand Down Expand Up @@ -951,7 +956,6 @@ static int chrc_attr_encode(char *uuid, char *path, uint8_t properties,

/* Print parent_chrhc and add to service */
CJPRINT(parent_chrc, service_buffer, MAX_SERVICE_BUF_SIZE, 0);
LOG_DBG("JSON: %s", service_buffer);
ret = device_discover_add_chrc(service_buffer, msg);

cleanup:
Expand All @@ -978,7 +982,6 @@ static int ccc_attr_encode(char *uuid, char *path,
}
uint8_t val = sub_enabled ? BT_GATT_CCC_NOTIFY : 0;

LOG_DBG("value: %u", val);
CJADDSTRCS(descriptor, "uuid", uuid);
CJADDARRNUM(value_arr, val);
CJADDARRNUM(value_arr, 0);
Expand Down Expand Up @@ -1014,14 +1017,10 @@ static int attr_encode(struct uuid_handle_pair *uuid_handle,
ret = svc_attr_encode(uuid_str, path, ble_conn_ptr, msg);

} else if (uuid_handle->attr_type == BT_ATTR_CHRC) {
LOG_DBG("Encoding Characteristic : UUID: %s PATH: %s",
uuid_str, path);
ret = chrc_attr_encode(uuid_str, path, uuid_handle->properties,
ble_conn_ptr, msg);

} else if (uuid_handle->attr_type == BT_ATTR_CCC) {
LOG_DBG("Encoding CCC : UUID: %s PATH: %s",
uuid_str, path);
ret = ccc_attr_encode(uuid_str, path, ble_conn_ptr, msg,
other_handle ?
other_handle->sub_enabled : 0);
Expand Down Expand Up @@ -1173,24 +1172,19 @@ static char *get_addr_from_des_conn_array(cJSON *array, int index)
return NULL;
}

int gateway_state_handler(void *root_obj)
int desired_conns_handler(cJSON *desired_connections_obj)
{
cJSON *desired_connections_obj;

if (root_obj == NULL) {
return 0;
}
bool changed = false;
int num_cons;
char *addr;

desired_connections_obj = cJSON_GetObjectItem(root_obj,
"desiredConnections");
if (desired_connections_obj == NULL) {
if (!desired_connections_obj) {
return 0;
}

bool changed = false;
int num_cons;
char *addr;
struct desired_conn *cons = get_desired_array(&num_cons);
char *ptr = cJSON_Print(desired_connections_obj);
LOG_INF("Desired conns: %s", ptr);
nrf_cloud_free(ptr);

if (!cJSON_GetArraySize(desired_connections_obj)) {
/* there are none, so we can't tell what format the nrfcloud
Expand All @@ -1203,8 +1197,9 @@ int gateway_state_handler(void *root_obj)
desired_conns_strings = false;
}

/* check whether anything has actually changed */
struct desired_conn *cons = get_desired_array(&num_cons);

/* check whether anything has actually changed */
/* first, search for additions to the array */
for (int i = 0; i < cJSON_GetArraySize(desired_connections_obj); i++) {
addr = get_addr_from_des_conn_array(desired_connections_obj, i);
Expand Down Expand Up @@ -1314,6 +1309,6 @@ int gateway_state_handler(void *root_obj)

void ble_codec_init(void)
{
nrf_cloud_register_gateway_state_handler(gateway_state_handler);
/* Nothing to do. */
}

1 change: 1 addition & 0 deletions samples/cellular/nrf_cloud_ble_gateway/src/ble/ble_codec.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,6 @@ int gateway_reported_encode(struct gw_msg *msg);
void get_uuid_str(struct uuid_handle_pair *uuid_handle, char *str, size_t len);
char *get_time_str(char *dst, size_t len);
void ble_codec_init(void);
int desired_conns_handler(cJSON *desired_connections_obj);

#endif
Loading

0 comments on commit 5b5c80d

Please sign in to comment.