From 9b086f8c4b5e96b46a3904c3bcfe11af39347b80 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 26 Jul 2015 22:56:49 +0200 Subject: 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. --- trygvisio_soil_moisture.ino | 88 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 70 insertions(+), 18 deletions(-) (limited to 'trygvisio_soil_moisture.ino') 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(); -- cgit v1.2.3