summaryrefslogtreecommitdiff
path: root/can.c
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@diac24.net>2012-09-20 11:03:21 +0200
committerDavid Lamparter <equinox@diac24.net>2012-09-20 11:03:21 +0200
commit415ca2037b3cefc64ee59279950fe85fa679e3cd (patch)
tree78c0836b73a6d3d642c5d9c6de20fa9a92818885 /can.c
parent8901251abbec6d08a13912bab774a0b32c05f16f (diff)
lightctrl: implement discovery protocol
Diffstat (limited to 'can.c')
-rw-r--r--can.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/can.c b/can.c
index 8969b7c..6deff37 100644
--- a/can.c
+++ b/can.c
@@ -4,10 +4,22 @@
*/
#define CANA_TIME 0x10080000
#define CANA_DISCOVERY 0x4c080000
+#define CANA_DISCOVERY_F(pg,dst) (CANA_DISCOVERY | (((uint32_t)(pg) & 0xf) << 12) | ((dst) & 0xfff))
#define CANA_LIGHT 0xcc080000
-#define CANA_LIGHT_F(src,dst) (CANA_LIGHT | (((src) << 12) & 0x3f) | ((dst) & 0xfff))
+#define CANA_LIGHT_F(src,dst) (CANA_LIGHT | (((src) & 0x3f) << 12) | ((dst) & 0xfff))
#define CANA_SENSOR 0xe6080000
#define CANA_SENSOR_F(src) (CANA_SENSOR | ((src) & 0xfff))
+#define CANA_DEBUG 0xe7000000
+
+#define CANA_PROTOCOL 0xffe80000
+
+#define can_rx_isext() (can_rx_addr.b[1] & 0x08)
+#define can_rx_ext_rr() (can_rx_dlc & 0x40)
+#define can_rx_len() (can_rx_dlc & 0x0f)
+
+#define can_rx_sublab_proto() ((can_rx_addr.b[0] << 8) | (can_rx_addr.b[1] & 0xe8))
+#define can_rx_sublab_addr() (((can_rx_addr.b[2] & 0x0f) << 8) | can_rx_addr.b[3])
+#define can_rx_sublab_disco_page() ((can_rx_addr.b[2] & 0xf0) >> 4)
#ifndef R0KET
#define spi_ss(x) PORTB = ((x) << B_SS) | 0x3;
@@ -118,7 +130,7 @@ static uint8_t can_CANSTAT(void)
* 15- 8 EID 15:8
* 7- 0 EID 7:0
*/
-static void can_send(uint32_t daddr, uint8_t len, uint8_t *data)
+static void can_send(uint32_t daddr, uint8_t len, const uint8_t *data)
{
spi_ss(0);
spi_wrrd(MCP2515_WRTXB | MCP2515_WRTXB_TXB0);