aboutsummaryrefslogtreecommitdiff
path: root/trygvisio_soil_moisture.ino
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2015-07-26 22:56:49 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2015-07-26 22:56:49 +0200
commit9b086f8c4b5e96b46a3904c3bcfe11af39347b80 (patch)
tree5a11f24f21cd75ef51453178e32854663511ac3e /trygvisio_soil_moisture.ino
parent1268da96983b522266603989cffb9a2423679c9f (diff)
downloadtrygvisio_soil_moisture-9b086f8c4b5e96b46a3904c3bcfe11af39347b80.tar.gz
trygvisio_soil_moisture-9b086f8c4b5e96b46a3904c3bcfe11af39347b80.tar.bz2
trygvisio_soil_moisture-9b086f8c4b5e96b46a3904c3bcfe11af39347b80.tar.xz
trygvisio_soil_moisture-9b086f8c4b5e96b46a3904c3bcfe11af39347b80.zip
o Adding three new characteristics:
- Model number: Set to the board id. - Hardware revision: set to the device version data from the nRF8001 device. Not very useful right now. - Firmware revision: set to the string "Arduino: " + build time if not predefined from the outside.
Diffstat (limited to 'trygvisio_soil_moisture.ino')
-rw-r--r--trygvisio_soil_moisture.ino88
1 files changed, 70 insertions, 18 deletions
diff --git a/trygvisio_soil_moisture.ino b/trygvisio_soil_moisture.ino
index 4c9e0d7..183cb38 100644
--- a/trygvisio_soil_moisture.ino
+++ b/trygvisio_soil_moisture.ino
@@ -17,11 +17,43 @@
#include "Debug.h"
#ifdef PIPE_SOIL_MOISTURE_INTERMEDIATE_TEMPERATURE_SET
-#define USE_TEMPERATURE
+#define FEATURE_TEMPERATURE
+#endif
+
+#ifdef PIPE_DEVICE_INFORMATION_HARDWARE_REVISION_STRING_SET
+//#define FEATURE_HARDWARE_REVISION
#endif
#ifdef PIPE_BATTERY_BATTERY_LEVEL_SET
-#define USE_BATTERY
+#define FEATURE_BATTERY_LEVEL
+#endif
+
+#define xx(s) x(s)
+#define x(s) #s
+
+#ifdef PIPE_DEVICE_INFORMATION_MODEL_NUMBER_STRING_SET
+#define FEATURE_MODEL_NUMBER
+const char model_number[] = "Board type id: " xx(SM_BOARD_VERSION);
+#endif
+
+#ifdef PIPE_DEVICE_INFORMATION_FIRMWARE_REVISION_STRING_SET
+#define FEATURE_FIRMWARE_REVISION
+
+#ifdef FIRMWARE_REVISION
+const char firmware_revision[] = FIRMWARE_REVISION;
+#else
+const char firmware_revision[] = "Arduino: " __DATE__;
+#endif
+
+#endif // PIPE_DEVICE_INFORMATION_FIRMWARE_REVISION_STRING_SET
+
+#undef x
+#undef xx
+
+#ifdef USE_LOW_POWER
+static const bool use_low_power=1;
+#else
+static const bool use_low_power=0;
#endif
static void setup_rf();
@@ -51,12 +83,6 @@ void __ble_assert(const char *file, uint16_t line)
static void go_to_sleep();
-#ifdef USE_LOW_POWER
-static const bool use_low_power=1;
-#else
-static const bool use_low_power=0;
-#endif
-
void setup() {
#if defined(BLEND_MICRO_8MHZ)
// As the F_CPU = 8000000UL, the USB core make the PLLCSR = 0x02
@@ -162,6 +188,32 @@ static void aci_loop() {
delay(20); // Magic number used to make sure the HW error event is handled correctly.
}
else {
+#ifdef FEATURE_HARDWARE_REVISION
+ lib_aci_device_version();
+ debug.println(F("Requesting device version."));
+#endif
+
+#ifdef FEATURE_MODEL_NUMBER
+ debug.print(F("Model number: "));
+ debug.println(model_number);
+
+ size_t model_number_size = min(PIPE_DEVICE_INFORMATION_MODEL_NUMBER_STRING_SET_MAX_SIZE,
+ sizeof(model_number));
+ lib_aci_set_local_data(&aci_state, PIPE_DEVICE_INFORMATION_MODEL_NUMBER_STRING_SET,
+ (uint8_t *) model_number, model_number_size);
+#endif
+
+
+#ifdef FEATURE_FIRMWARE_REVISION
+ debug.print(F("Firmware revision: "));
+ debug.println(firmware_revision);
+
+ size_t firmware_revision_size = min(PIPE_DEVICE_INFORMATION_FIRMWARE_REVISION_STRING_SET_MAX_SIZE,
+ sizeof(firmware_revision));
+ lib_aci_set_local_data(&aci_state, PIPE_DEVICE_INFORMATION_FIRMWARE_REVISION_STRING_SET,
+ (uint8_t *) firmware_revision, firmware_revision_size);
+#endif
+
lib_aci_connect(180 /* in seconds */, 0x0050 /* advertising interval 50ms*/);
// lib_aci_broadcast(10/* in seconds */, 0x0100 /* advertising interval 100ms */);
// ret = lib_aci_open_adv_pipe(PIPE_BATTERY_BATTERY_LEVEL_BROADCAST);
@@ -194,13 +246,17 @@ static void aci_loop() {
// debug.print(F("Evt Cmd respone: Status "));
// debug.println(aci_evt->params.cmd_rsp.cmd_status, HEX);
}
+#ifdef FEATURE_HARDWARE_REVISION
if (aci_evt->params.cmd_rsp.cmd_opcode == ACI_CMD_GET_DEVICE_VERSION) {
+ debug.println(F("Got device version."));
//Store the version and configuration information of the nRF8001 in the Hardware Revision String Characteristic
- // lib_aci_set_local_data(&aci_state, PIPE_DEVICE_INFORMATION_HARDWARE_REVISION_STRING_SET,
- // (uint8_t *)&(aci_evt->params.cmd_rsp.params.get_device_version),
- // sizeof(aci_evt_cmd_rsp_params_get_device_version_t));
+ lib_aci_set_local_data(&aci_state, PIPE_DEVICE_INFORMATION_HARDWARE_REVISION_STRING_SET,
+ (uint8_t *)&(aci_evt->params.cmd_rsp.params.get_device_version),
+ sizeof(aci_evt_cmd_rsp_params_get_device_version_t));
}
-#ifdef USE_TEMPERATURE
+#endif // FEATURE_HARDWARE_REVISION
+
+#ifdef FEATURE_TEMPERATURE
if (aci_evt->params.cmd_rsp.cmd_opcode == ACI_CMD_GET_TEMPERATURE) {
debug.print(F("aci_evt->params.cmd_rsp.params.get_temperature="));
debug.print(aci_evt->params.cmd_rsp.params.get_temperature.temperature_value, DEC);
@@ -238,7 +294,7 @@ static void aci_loop() {
(uint8_t *) &temperature_measurement,
sizeof(temperature_measurement));
}
-#endif // USE_TEMPERATURE
+#endif // FEATURE_TEMPERATURE
break;
case ACI_EVT_CONNECTED:
@@ -248,11 +304,7 @@ static void aci_loop() {
debug.print(F("aci_state.data_credit_available="));
debug.println(aci_state.data_credit_available, DEC);
- // Get the device version of the nRF8001 and store it in the Hardware Revision String.
- // This will trigger a ACI_CMD_GET_DEVICE_VERSION.
- lib_aci_device_version();
-
-#ifdef USE_TEMPERATURE
+#ifdef FEATURE_TEMPERATURE
lib_aci_get_temperature();
#endif
sm_on_connect();