From 2f50ae8864aa2ba9e5807432eb878552389a9cb2 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 4 Jan 2015 21:02:45 +0100 Subject: o Reworking the code after implementing much more on the Android app. --- trygvisio_soil_moisture.ino | 110 +++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 62 deletions(-) (limited to 'trygvisio_soil_moisture.ino') diff --git a/trygvisio_soil_moisture.ino b/trygvisio_soil_moisture.ino index b8b3bfd..9d9f9f9 100644 --- a/trygvisio_soil_moisture.ino +++ b/trygvisio_soil_moisture.ino @@ -6,11 +6,19 @@ #include "app.h" static services_pipe_type_mapping_t services_pipe_type_mapping[NUMBER_OF_PIPES] = SERVICES_PIPE_TYPE_MAPPING_CONTENT; -static hal_aci_data_t setup_msgs[NB_SETUP_MESSAGES] PROGMEM = SETUP_MESSAGES_CONTENT; +PROGMEM static hal_aci_data_t setup_msgs[NB_SETUP_MESSAGES] = SETUP_MESSAGES_CONTENT; static struct aci_state_t aci_state; static hal_aci_evt_t aci_data; -static bool timing_change_done = false; +static boolean timing_change_done = false; + +static const uint8_t pipe_set = PIPE_SOIL_MOISTURE_SOIL_MOISTURE_CONTROL_SET; +static const uint8_t pipe_tx = PIPE_SOIL_MOISTURE_SOIL_MOISTURE_CONTROL_TX; +static const uint8_t pipe_rx = PIPE_SOIL_MOISTURE_SOIL_MOISTURE_CONTROL_RX_ACK_AUTO; +static const uint8_t pipe_rx_max_size = PIPE_SOIL_MOISTURE_SOIL_MOISTURE_CONTROL_RX_ACK_AUTO_MAX_SIZE; + +static void setup_rf(); +static void show_pipes(); void __ble_assert(const char *file, uint16_t line) { @@ -50,7 +58,7 @@ void setup() { setup_rf(); } -void setup_rf() { +static void setup_rf() { Serial.println(F("setup_rf()")); // Point ACI data structures to the the setup data that the nRFgo studio generated for the nRF8001 if (NULL != services_pipe_type_mapping) { @@ -91,12 +99,12 @@ void setup_rf() { Serial.println(F("lib_aci_init done")); } -static bool rf_started = false; -static bool setup_required = false; +static boolean rf_started = false; +static boolean setup_required = false; static void aci_loop() { uint8_t pipe_number; - int ret; +// int ret; // We enter the if statement only when there is a ACI event available to be processed if (lib_aci_event_get(&aci_state, &aci_data)) { @@ -126,10 +134,9 @@ static void aci_loop() { else { 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); - ret = lib_aci_open_adv_pipe(PIPE_SOIL_MOISTURE_SOIL_MOISTURE_LEVEL_BROADCAST); - Serial.print(F("Advertising started, ret=")); - Serial.println(ret, DEC); +// ret = lib_aci_open_adv_pipe(PIPE_BATTERY_BATTERY_LEVEL_BROADCAST); +// ret = lib_aci_open_adv_pipe(PIPE_SOIL_MOISTURE_SOIL_MOISTURE_LEVEL_BROADCAST); + Serial.println(F("Advertising started")); } break; case ACI_DEVICE_INVALID: @@ -190,17 +197,7 @@ static void aci_loop() { Serial.println(F("ACI_EVT_DISCONNECTED")); lib_aci_connect(180/* in seconds */, 0x0100 /* advertising interval 100ms*/); - ret = lib_aci_open_adv_pipe(PIPE_BATTERY_BATTERY_LEVEL_BROADCAST); - ret = lib_aci_open_adv_pipe(PIPE_SOIL_MOISTURE_SOIL_MOISTURE_LEVEL_BROADCAST); - Serial.print(F("Advertising started, ret=")); - Serial.println(ret, DEC); - -// Serial.print(F("ACI_EVT_DISCONNECTED: ")); -// Serial.println(ACI_STATUS_ERROR_ADVT_TIMEOUT == aci_evt->params.disconnected.aci_status ? -// F("Broadcasting timed out") : F("Link loss")); - // lib_aci_broadcast(10/* in seconds */, 0x0100 /* advertising interval 100ms */); - // Serial.print(F("Broadcast advertising started, ret=")); - // Serial.println(ret, DEC); + Serial.println(F("Advertising started")); break; case ACI_EVT_DATA_RECEIVED: @@ -208,24 +205,10 @@ static void aci_loop() { Serial.print(F("ACI_EVT_DATA_RECEIVED: pipe_number=")); Serial.println(pipe_number, DEC); - /* - if (pipe_number == PIPE_FIKEN_STATUS_PANEL_GAUGE_DATA_RX_ACK) { - if (aci_evt->len != PIPE_FIKEN_STATUS_PANEL_GAUGE_DATA_RX_ACK_MAX_SIZE) { - break; - } - on_gauge_data(aci_evt->params.data_received.rx_data.aci_data, aci_evt->len - 2); - lib_aci_send_ack(&aci_state, PIPE_FIKEN_STATUS_PANEL_GAUGE_DATA_RX_ACK); - } - - if (pipe_number == PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_RX) { - uint8_t len = aci_evt->len - 2; - // if (aci_evt->len != PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_RX_MAX_SIZE) { - // break; - // } - - on_gauge_ctrl(aci_evt->params.data_received.rx_data.aci_data, len); + + if (pipe_number == pipe_rx) { + on_soil_moisture_ctrl(aci_evt->params.data_received.rx_data.aci_data, aci_evt->len); } - */ break; case ACI_EVT_DATA_CREDIT: @@ -343,18 +326,13 @@ void loop() { } else if (!setup_required) { value++; -// lib_aci_set_local_data(&aci_state, PIPE_FIKEN_STATUS_PANEL_GAUGE_DATA_SET, &value, 1); -// Serial.print(F("value=")); -// Serial.println(value, HEX); - - // show_pipes(); } } on_loop(); } -void show_pipes() { +static void show_pipes() { for (uint8_t i = 1; i <= NUMBER_OF_PIPES; i++) { uint8_t x = lib_aci_is_pipe_available(&aci_state, i); Serial.print(F("pipe #")); @@ -363,14 +341,14 @@ void show_pipes() { Serial.println(x, DEC); } } - -bool tx__moisture(sm_res *res) { +/* +boolean tx_moisture(sm_res *res) { static const uint8_t pipe = PIPE_SOIL_MOISTURE_SOIL_MOISTURE_LEVEL_TX; uint8_t *data = (uint8_t *)res; uint8_t len = 2 + res->len; - bool status = false; + boolean status = false; - bool available = lib_aci_is_pipe_available(&aci_state, pipe); + boolean available = lib_aci_is_pipe_available(&aci_state, pipe); Serial.print(F("tx_soil_moisture, len=")); Serial.println(len, DEC); @@ -387,7 +365,7 @@ bool tx__moisture(sm_res *res) { } return status; } - +*/ void notify_battery_level(uint8_t value) { static const uint8_t pipe = PIPE_BATTERY_BATTERY_LEVEL_SET; @@ -396,25 +374,33 @@ void notify_battery_level(uint8_t value) { value = value % 101; - lib_aci_set_local_data(&aci_state, pipe, &value, 1); + lib_aci_send_data(pipe, &value, 1); } -void notify_soil_moisture(sm_res *res) { - static const uint8_t pipe = PIPE_SOIL_MOISTURE_SOIL_MOISTURE_LEVEL_SET; +void notify_soil_moisture(const struct sm_res& res, uint8_t body_len) { +#if SM_DEBUG == 1 + write_res(res); +#endif - uint8_t *data = (uint8_t *)res; - uint8_t len = 2 + res->len; - bool status = false; + uint8_t *data = (uint8_t *)&res; + uint8_t len = SM_RES_HEADER_SIZE + body_len; - Serial.print(F("notify_soil_moisture, len=")); - Serial.println(len, DEC); - Serial.print(F("aci_state.data_credit_available=")); - Serial.println(aci_state.data_credit_available, DEC); + Serial.print(F("notify_soil_moisture, code=")); + Serial.print(res.code, DEC); + Serial.print(F(", body_len=")); + Serial.println(body_len, DEC); +// Serial.print(F("aci_state.data_credit_available=")); +// Serial.println(aci_state.data_credit_available, DEC); -// bool available = lib_aci_is_pipe_available(&aci_state, pipe); -// Serial.print(F("available=")); + boolean available = lib_aci_is_pipe_available(&aci_state, pipe_tx); +// Serial.print(F("pipe available=")); // Serial.println(available, DEC); - status = lib_aci_set_local_data(&aci_state, pipe, data, len); + if (available && aci_state.data_credit_available > 0) { + boolean sent = lib_aci_send_data(pipe_tx, data, len); + if (sent) { + aci_state.data_credit_available--; + } + } } -- cgit v1.2.3