aboutsummaryrefslogtreecommitdiff
path: root/trygvisio_soil_moisture.ino
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2015-01-04 21:02:45 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2015-01-04 21:02:45 +0100
commit2f50ae8864aa2ba9e5807432eb878552389a9cb2 (patch)
treed4d028587942f109f10fcead918d9682a70f9bad /trygvisio_soil_moisture.ino
parent7c0e1f7ffb750813a788940fdd55e9800c2f701d (diff)
downloadtrygvisio_soil_moisture-2f50ae8864aa2ba9e5807432eb878552389a9cb2.tar.gz
trygvisio_soil_moisture-2f50ae8864aa2ba9e5807432eb878552389a9cb2.tar.bz2
trygvisio_soil_moisture-2f50ae8864aa2ba9e5807432eb878552389a9cb2.tar.xz
trygvisio_soil_moisture-2f50ae8864aa2ba9e5807432eb878552389a9cb2.zip
o Reworking the code after implementing much more on the Android app.
Diffstat (limited to 'trygvisio_soil_moisture.ino')
-rw-r--r--trygvisio_soil_moisture.ino110
1 files changed, 48 insertions, 62 deletions
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--;
+ }
+ }
}