system/custom_commands/main.c
/*
* EVALUATION AND USE OF THIS SOFTWARE IS SUBJECT TO THE TERMS AND
* CONDITIONS OF THE CONTROLLING LICENSE AGREEMENT FOUND AT LICENSE.md
* IN THIS SDK. IF YOU DO NOT AGREE TO THE LICENSE TERMS AND CONDITIONS,
* PLEASE RETURN ALL SOURCE FILES TO SILICON LABORATORIES.
* (c) Copyright 2018, Silicon Laboratories Inc. All rights reserved.
*/
/*
* Documentation for this app is available online.
* See https://docs.silabs.com/gecko-os/4/standard/latest/sdk/examples/system/custom-commands
*/
#include "gos.h"
#include "common.h"
#include "nvm_settings.h"
#define APPLICATION_START_LINE "\r\nCustom Commands example starting ..."
GOS_CMD_CREATE_GETTER_SETTER(sensor, temperature_period, "sensor.temperature.period", SC3('s','e','t','p'), 0, 1);
GOS_CMD_CREATE_GETTER_SETTER(sensor, temperature_enabled, "sensor.temperature.enabled",SC3('s','e','t','e'), 0, 1);
GOS_CMD_CREATE_GETTER_SETTER(sensor, humidity_period, "sensor.humidity.period", SC3('s','e','h','p'), 0, 1);
GOS_CMD_CREATE_GETTER_SETTER(sensor, humidity_enabled, "sensor.humidity.enabled", SC3('s','e','h','e'), 0, 1);
GOS_CMD_CREATE_GETTER_SETTER(sensor, cloud_interval, "sensor.cloud.interval", SC3('s','e','c','i'), 0, 1);
static struct
{
humidity_sensor_settings_t *humidity_sensor;
temperature_sensor_settings_t *temperature_sensor;
cloud_settings_t *cloud;
} settings;
/*************************************************************************************************/
void gos_app_init(void)
{
gos_result_t result;
GOS_LOG(APPLICATION_START_LINE);
GOS_LOG("\r\nView all available commands and shortcuts with command:");
GOS_LOG(" help commands");
GOS_LOG("View all available variables and shortcuts with command:");
GOS_LOG(" help variables");
GOS_LOG(" get sensor");
// Obtain a references to the cached NVM settings
{
GOS_LOG("Failed to retrieve reference to SENSOR.HUMIDITY settings from NVM, err:%d", result);
}
{
GOS_LOG("Failed to retrieve reference to SENSOR.TEMPERATURE settings from NVM, err:%d", result);
}
{
GOS_LOG("Failed to retrieve reference to CLOUD.SETTINGS from NVM, err:%d", result);
}
}
/*************************************************************************************************/
{
if (strcmp(argv[0], "temperature") == 0)
{
gos_event_register_periodic(temperature_event_handler, NULL, settings.temperature_sensor->polling_period, 0);
gos_cmd_format_response(GOS_CMD_SUCCESS, "Starting temperature sensor with period: %dms", settings.temperature_sensor->polling_period);
}
else if (strcmp(argv[0], "humidity") == 0)
{
gos_event_register_periodic(humidity_event_handler, NULL, settings.humidity_sensor->polling_period, 0);
gos_cmd_format_response(GOS_CMD_SUCCESS, "Starting humidity sensor with period: %dms", settings.humidity_sensor->polling_period);
}
else
{
}
}
/*************************************************************************************************/
{
if (strcmp(argv[0], "temperature") == 0)
{
gos_event_unregister(temperature_event_handler, NULL);
}
else if (strcmp(argv[0], "humidity") == 0)
{
gos_event_unregister(humidity_event_handler, NULL);
}
else
{
}
}
/*************************************************************************************************/
{
return GOS_CMD_SUCCESS;
}
/*************************************************************************************************/
{
GOS_CMD_PARSE_INT_ARG_WITH_VAR(uint16_t, settings.temperature_sensor->polling_period, argv[1], 100, 2000);
}
/*************************************************************************************************/
{
return GOS_CMD_SUCCESS;
}
/*************************************************************************************************/
{
}
/*************************************************************************************************/
{
return GOS_CMD_SUCCESS;
}
/*************************************************************************************************/
{
GOS_CMD_PARSE_INT_ARG_WITH_VAR(uint16_t, settings.humidity_sensor->polling_period, argv[1], 100, 2000);
return GOS_CMD_SET_OK;
}
/*************************************************************************************************/
{
return GOS_CMD_SUCCESS;
}
/*************************************************************************************************/
{
return gos_cmd_set_bool(argc, argv, &settings.humidity_sensor->enabled);
}
/*************************************************************************************************/
{
return GOS_CMD_SUCCESS;
}
/*************************************************************************************************/
{
GOS_CMD_PARSE_INT_ARG_WITH_VAR(uint16_t, settings.cloud->update_interval, argv[1], 100, 2000);
return GOS_CMD_SET_OK;
}
/*************************************************************************************************/
{
const char *cloud_url;
{
GOS_LOG("Failed to retrieve cloud URL from NVM");
}
return GOS_CMD_SUCCESS;
}
/*************************************************************************************************/
{
char *cloud_url;
{
GOS_LOG("Failed to retrieve cloud URL reference from NVM");
return GOS_CMD_FAILED;
}
}
/*************************************************************************************************/
{
{
GOS_LOG("Failed to parse hex string, must be %d hex char string", (DEVICE_KEY_LENGTH * 2));
return GOS_CMD_BAD_ARGS;
}
else
{
uint8_t *device_key;
{
GOS_LOG("Failed to retrieve device key reference from NVM");
return GOS_CMD_FAILED;
}
memcpy(device_key, argv[1], DEVICE_KEY_LENGTH);
return GOS_CMD_SET_OK;
}
}
/*************************************************************************************************/
static void temperature_event_handler(void *arg)
{
// Poll temperature sensor here ....
}
/*************************************************************************************************/
static void humidity_event_handler(void *arg)
{
// Poll humidity sensor here ....
}