summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2014-12-07 00:06:27 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2014-12-07 00:06:27 +0100
commit90f5e8958e0f49e2c303abfb9d1f557e28caf78c (patch)
treeaf1e110bedb83c4a9c69b81c83d14c6b31b1d3f1
parentd015c05c7a141f183647fe0cd64c332b7af23800 (diff)
downloadfiken_status_panel-master.tar.gz
fiken_status_panel-master.tar.bz2
fiken_status_panel-master.tar.xz
fiken_status_panel-master.zip
o Implementing getting and setting of values.HEADmaster
-rw-r--r--app.cpp52
-rw-r--r--app.h53
-rw-r--r--fiken_status_panel.ino25
-rw-r--r--services.h43
4 files changed, 125 insertions, 48 deletions
diff --git a/app.cpp b/app.cpp
index 8163ad8..ce3b15e 100644
--- a/app.cpp
+++ b/app.cpp
@@ -1,5 +1,6 @@
#include "app.h"
+#include <Arduino.h>
#include <HardwareSerial.h>
// http://bleaklow.com/2010/09/05/progmem_and_gcc_bug_34734.html
@@ -9,8 +10,14 @@
#define GAUGE_COUNT 4
// See http://redbearlab.com/blendmicro/
-int gauge_pins[GAUGE_COUNT] = {
- 9, 10, 11, 13
+struct gauge {
+ uint8_t pin;
+ uint8_t value;
+} gauges[] = {
+ { 9, 0},
+ {10, 0},
+ {11, 0},
+ {13, 0}
};
void on_gauge_data(uint8_t *data, uint8_t len) {
@@ -21,21 +28,48 @@ void on_gauge_data(uint8_t *data, uint8_t len) {
}
void on_gauge_ctrl(uint8_t *data, uint8_t len) {
- Serial.print(F("on_gauge_data, data[0]="));
+ Serial.print(F("on_gauge_ctrl, data[0]="));
Serial.print(data[0], HEX);
Serial.print(F(", data[1]="));
Serial.println(data[1], HEX);
- uint8_t res[2];
+ struct fsp_req *cmd = (struct fsp_req *) data;
+ struct fsp_res res;
- switch(data[0]) {
- case FSP_CMD_GAUGE_COUNT:
- res[0] = FSP_CMD_GAUGE_COUNT;
- res[1] = GAUGE_COUNT;
- send_ctrl(res, 2);
+ res.code = cmd->code;
+
+ Serial.print("code=");
+ Serial.println(cmd->code, DEC);
+
+ switch(cmd->code) {
+ case FSP_CMD_GET_GAUGE_COUNT:
+ res.len = sizeof(struct fsp_get_gauge_count_res);
+ res.get_gauge_count.count = GAUGE_COUNT;
+ break;
+ case FSP_CMD_SET_GAUGE:
+ res.len = sizeof(struct fsp_set_gauge_res);
+ if (cmd->set_gauge.gauge < GAUGE_COUNT) {
+ analogWrite(gauges[cmd->set_gauge.gauge].pin, cmd->set_gauge.value);
+ gauges[cmd->set_gauge.gauge].value = cmd->set_gauge.value;
+ }
+
+ break;
+ case FSP_CMD_GET_GAUGE:
+ res.len = sizeof(struct fsp_get_gauge_res);
+ if (cmd->get_gauge.gauge < GAUGE_COUNT) {
+ res.get_gauge.gauge = cmd->get_gauge.gauge;
+ res.get_gauge.value = gauges[cmd->get_gauge.gauge].value;
+ } else {
+ res.code = FSP_CMD_FAIL;
+ res.len = 0;
+ }
break;
default:
+ res.code = FSP_CMD_FAIL;
+ res.len = 0;
break;
}
+
+ send_ctrl(&res);
}
diff --git a/app.h b/app.h
index e892a42..eaf6465 100644
--- a/app.h
+++ b/app.h
@@ -3,10 +3,57 @@
#include <stdint.h>
-#define FSP_CMD_GAUGE_COUNT 1
-#define FSP_CMD_GAUGE_INFO 2
+enum fsp_cmd_code {
+ FSP_CMD_GET_GAUGE_COUNT = 1,
+ FSP_CMD_SET_GAUGE = 2,
+ FSP_CMD_GET_GAUGE = 3,
+ FSP_CMD_FAIL = 255,
+};
-bool send_ctrl(uint8_t *data, uint8_t len);
+struct fsp_get_gauge_count_req {
+};
+
+struct fsp_get_gauge_count_res {
+ uint8_t count;
+};
+
+struct fsp_set_gauge_req {
+ uint8_t gauge;
+ uint8_t value;
+};
+
+struct fsp_set_gauge_res {
+};
+
+struct fsp_get_gauge_req {
+ uint8_t gauge;
+};
+
+struct fsp_get_gauge_res {
+ uint8_t gauge;
+ uint8_t value;
+};
+
+struct fsp_req {
+ uint8_t code;
+ union {
+ struct fsp_get_gauge_count_req get_gauge_count;
+ struct fsp_get_gauge_req get_gauge;
+ struct fsp_set_gauge_req set_gauge;
+ };
+};
+
+struct fsp_res {
+ uint8_t len;
+ uint8_t code;
+ union {
+ struct fsp_get_gauge_count_res get_gauge_count;
+ struct fsp_get_gauge_res get_gauge;
+ struct fsp_set_gauge_res set_gauge;
+ };
+};
+
+bool send_ctrl(struct fsp_res *res);
void on_gauge_data(uint8_t *data, uint8_t len);
void on_gauge_ctrl(uint8_t *data, uint8_t len);
diff --git a/fiken_status_panel.ino b/fiken_status_panel.ino
index 35b3d40..82c4671 100644
--- a/fiken_status_panel.ino
+++ b/fiken_status_panel.ino
@@ -1,5 +1,4 @@
#include <SPI.h>
-#include <Watchdog.h>
#include <lib_aci.h>
#include <aci_setup.h>
@@ -48,8 +47,11 @@ void setup() {
delay(1000);
#endif
- Serial.println(F("setup()"));
+ setup_rf();
+}
+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) {
aci_state.aci_setup_info.services_pipe_type_mapping = &services_pipe_type_mapping[0];
@@ -93,7 +95,7 @@ static bool setup_required = false;
static void aci_loop() {
uint8_t pipe_number;
-
+
// 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)) {
aci_evt_t * aci_evt;
@@ -302,16 +304,19 @@ void loop() {
if (!rf_started) {
static int count = 0;
count++;
+ /*
if(count == 3) {
- Serial.println(F("RF did not start, resetting"));
-
- asm volatile ("jmp 0");
+ Serial.println(F("RF did not start, resetting RF"));
+ // asm volatile ("jmp 0");
+ // lib_aci_pin_reset();
+ setup_rf();
count = 0;
return;
} else {
Serial.println(F("waiting for RF to start"));
}
+ */
}
else if (!setup_required) {
value++;
@@ -319,7 +324,7 @@ void loop() {
Serial.print(F("value="));
Serial.println(value, HEX);
- show_pipes();
+ // show_pipes();
}
}
}
@@ -334,7 +339,9 @@ void show_pipes() {
}
}
-bool send_ctrl(uint8_t *data, uint8_t len) {
+bool send_ctrl(fsp_res *res) {
+ uint8_t *data = (uint8_t *)res;
+ uint8_t len = 2 + res->len;
bool status = false;
Serial.print(F("send_ctrl, len="));
@@ -343,7 +350,7 @@ bool send_ctrl(uint8_t *data, uint8_t len) {
Serial.println(aci_state.data_credit_available, DEC);
Serial.print(F("available="));
Serial.println(lib_aci_is_pipe_available(&aci_state, PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_TX), DEC);
-
+
if (lib_aci_is_pipe_available(&aci_state, PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_TX) &&
aci_state.data_credit_available >= 1) {
status = lib_aci_send_data(PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_TX, data, len);
diff --git a/services.h b/services.h
index ad217d1..8f57541 100644
--- a/services.h
+++ b/services.h
@@ -11,7 +11,7 @@
#define SETUP_ID 1
#define SETUP_FORMAT 3 /** nRF8001 D */
-#define ACI_DYNAMIC_DATA_SIZE 141
+#define ACI_DYNAMIC_DATA_SIZE 143
/* Service: Gap - Characteristic: Device name - Pipe: SET */
#define PIPE_GAP_DEVICE_NAME_SET 1
@@ -25,26 +25,21 @@
#define PIPE_FIKEN_STATUS_PANEL_GAUGE_DATA_SET 3
#define PIPE_FIKEN_STATUS_PANEL_GAUGE_DATA_SET_MAX_SIZE 2
-/* Service: Fiken Status Panel - Characteristic: Led - Pipe: RX_ACK */
-#define PIPE_FIKEN_STATUS_PANEL_LED_RX_ACK 4
-#define PIPE_FIKEN_STATUS_PANEL_LED_RX_ACK_MAX_SIZE 3
-
/* Service: Fiken Status Panel - Characteristic: Gauge Control - Pipe: TX */
-#define PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_TX 5
-#define PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_TX_MAX_SIZE 2
+#define PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_TX 4
+#define PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_TX_MAX_SIZE 10
/* Service: Fiken Status Panel - Characteristic: Gauge Control - Pipe: RX */
-#define PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_RX 6
-#define PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_RX_MAX_SIZE 2
+#define PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_RX 5
+#define PIPE_FIKEN_STATUS_PANEL_GAUGE_CONTROL_RX_MAX_SIZE 10
-#define NUMBER_OF_PIPES 6
+#define NUMBER_OF_PIPES 5
#define SERVICES_PIPE_TYPE_MAPPING_CONTENT {\
{ACI_STORE_LOCAL, ACI_SET}, \
{ACI_STORE_LOCAL, ACI_RX_ACK}, \
{ACI_STORE_LOCAL, ACI_SET}, \
- {ACI_STORE_LOCAL, ACI_RX_ACK}, \
{ACI_STORE_LOCAL, ACI_TX}, \
{ACI_STORE_LOCAL, ACI_RX}, \
}
@@ -54,7 +49,7 @@
#define GAP_PPCP_SLAVE_LATENCY 0
#define GAP_PPCP_CONN_TIMEOUT 0xffff /** Connection Supervision timeout multiplier as a multiple of 10msec, 0xFFFF means no specific value requested */
-#define NB_SETUP_MESSAGES 20
+#define NB_SETUP_MESSAGES 19
#define SETUP_MESSAGES_CONTENT {\
{0x00,\
{\
@@ -63,7 +58,7 @@
},\
{0x00,\
{\
- 0x1f,0x06,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x06,0x00,0x01,0x00,0x00,0x06,0x00,0x00,\
+ 0x1f,0x06,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x05,0x00,0x01,0x00,0x00,0x06,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
},\
},\
@@ -123,35 +118,29 @@
{0x00,\
{\
0x1f,0x06,0x20,0xa8,0x00,0x0b,0x00,0x02,0x02,0x12,0x34,0x04,0x04,0x13,0x13,0x00,0x0c,0x28,0x03,0x01,\
- 0x0a,0x0d,0x00,0x3f,0xd8,0x1f,0x4a,0x8e,0xbc,0xd3,0x70,0xc5,\
- },\
- },\
- {0x00,\
- {\
- 0x1f,0x06,0x20,0xc4,0x59,0x5d,0x03,0x03,0x00,0xd0,0x32,0x46,0x14,0x04,0x03,0x00,0x0d,0x00,0x03,0x02,\
- 0x00,0x00,0x00,0x04,0x04,0x13,0x13,0x00,0x0e,0x28,0x03,0x01,\
+ 0x14,0x0d,0x00,0x3f,0xd8,0x1f,0x4a,0x8e,0xbc,0xd3,0x70,0xc5,\
},\
},\
{0x00,\
{\
- 0x1f,0x06,0x20,0xe0,0x14,0x0f,0x00,0x3f,0xd8,0x1f,0x4a,0x8e,0xbc,0xd3,0x70,0xc5,0x59,0x5d,0x03,0x04,\
- 0x00,0xd0,0x32,0x56,0x10,0x03,0x02,0x00,0x0f,0x00,0x04,0x02,\
+ 0x1f,0x06,0x20,0xc4,0x59,0x5d,0x03,0x04,0x00,0xd0,0x32,0x54,0x10,0x0a,0x00,0x00,0x0d,0x00,0x04,0x02,\
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x14,\
},\
},\
{0x00,\
{\
- 0x11,0x06,0x20,0xfc,0x00,0x00,0x46,0x14,0x03,0x02,0x00,0x10,0x29,0x02,0x01,0x00,0x00,0x00,\
+ 0x0d,0x06,0x20,0xe0,0x03,0x02,0x00,0x0e,0x29,0x02,0x01,0x00,0x00,0x00,\
},\
},\
{0x00,\
{\
0x1f,0x06,0x40,0x00,0x2a,0x00,0x01,0x00,0x80,0x04,0x00,0x03,0x00,0x00,0x00,0x02,0x02,0x00,0x90,0x04,\
- 0x00,0x0b,0x00,0x00,0x00,0x03,0x02,0x00,0x10,0x04,0x00,0x0d,\
+ 0x00,0x0b,0x00,0x00,0x00,0x04,0x02,0x00,0x0a,0x04,0x00,0x0d,\
},\
},\
{0x00,\
{\
- 0x0f,0x06,0x40,0x1c,0x00,0x00,0x00,0x04,0x02,0x00,0x0a,0x04,0x00,0x0f,0x00,0x10,\
+ 0x05,0x06,0x40,0x1c,0x00,0x0e,\
},\
},\
{0x00,\
@@ -161,12 +150,12 @@
},\
{0x00,\
{\
- 0x0f,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0c,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
},\
},\
{0x00,\
{\
- 0x06,0x06,0xf0,0x00,0x03,0x9e,0x82,\
+ 0x06,0x06,0xf0,0x00,0x03,0x77,0x58,\
},\
},\
}