diff --git a/306-controller_interface.X/middleware/can/can_sender.c b/306-controller_interface.X/middleware/can/can_sender.c
index 1de392d..71163be 100644
--- a/306-controller_interface.X/middleware/can/can_sender.c
+++ b/306-controller_interface.X/middleware/can/can_sender.c
@@ -7,34 +7,56 @@
#include "can_sender.h"
-void CAN_SENDER_init(CAN_SENDER* me){
+void CANSENDER_init(CANSENDER* me){
me->state = STCS_INIT;
me->sendingTime = 1;
me->wait.f = NULL;
me->send.f = NULL;
}
-void CAN_SENDER_startBehaviour(CAN_SENDER* me){
- POST(me, &CAN_SENDER_processEvent, evCSinit, 0, 0);
+void CANSENDER_startBehaviour(CANSENDER* me){
+ POST(me, &CANSENDER_processEvent, evCSinit, 0, 0);
}
-bool CAN_SENDER_processEvent(Event* ev) {
+bool CANSENDER_processEvent(Event* ev) {
bool processed = false;
- CAN_SENDER* me = (CAN_SENDER*)Event_getTarget(ev);
- CAN_SENDER_STATES oldState = me->state;
+ CANSENDER* me = (CANSENDER*)Event_getTarget(ev);
+ CANSENDER_STATES oldState = me->state;
evIDT evid = Event_getId(ev);
+ uint64_t data = Event_getData(ev);
switch (me->state) { // onState
case STCS_INIT:
if (ev->id == evCSinit) {
-
+ CANSENDER.state = STCS_WAIT;
}
break;
case STCS_WAIT:
+ if (ev->id == evCSsend) {
+ CANSENDER.state = STCS_SEND;
+ }
break;
case STCS_SEND:
+ if (ev->id == evCSdone) {
+ CANSENDER.state = STCS_WAIT;
+ }
+
+ uCAN_MSG canMsg;
+ canMsg.frame.data0 = (uint8_t) data;
+ data = data >> 8;
+ canMsg.frame.data1 = (uint8_t) data;
+ data = data >> 8;
+ canMsg.frame.data2 = (uint8_t) data;
+ data = data >> 8;
+ canMsg.frame.data3 = (uint8_t) data;
+ data = data >> 8;
+ canMsg.frame.id = (uint32_t) data;
+ CAN_transmit(&canMsg);
+
+ CANSENDER_emitDone(me, 0);
+
break;
}
@@ -76,12 +98,12 @@ bool CAN_SENDER_processEvent(Event* ev) {
* Callbacks *
*************/
-void CAN_SENDER_onWait(CAN_SENDER* me, CAN_SENDER_CALLBACK_FUNCTION f, void* p) {
+void CANSENDER_onWait(CANSENDER* me, CANSENDER_CALLBACK_FUNCTION f, void* p) {
me->wait.f = f;
me->wait.p = p;
}
-void CAN_SENDER_onSend(CAN_SENDER* me, CAN_SENDER_CALLBACK_FUNCTION f, void* p) {
+void CANSENDER_onSend(CANSENDER* me, CANSENDER_CALLBACK_FUNCTION f, void* p) {
me->send.f = f;
me->send.p = p;
}
@@ -90,18 +112,20 @@ void CAN_SENDER_onSend(CAN_SENDER* me, CAN_SENDER_CALLBACK_FUNCTION f, void* p)
* EMITTERS *
************/
-void CAN_SENDER_emitSend(CAN_SENDER* me, uint16_t t) {
- POST(me, &CAN_SENDER_processEvent, evCSsend, t, 0);
+void CANSENDER_emitSend(CANSENDER* me, uint16_t t) {
+ POST(me, &CANSENDER_processEvent, evCSsend, t, 0);
}
-void CAN_SENDER_emitDone(CAN_SENDER* me, uint16_t t) {
- POST(me, &CAN_SENDER_processEvent, evCSdone, t, 0);
+void CANSENDER_emitDone(CANSENDER* me, uint16_t t) {
+ POST(me, &CANSENDER_processEvent, evCSdone, t, 0);
}
+CANSENDER_sendCanMsg(CANSENDER* me, uint8_t id, uint32_t data)
+
/***********
* SETTERS *
***********/
-void CAN_SENDER_setSendingTime(CAN_SENDER* me, uint8_t v) {
+void CANSENDER_setSendingTime(CANSENDER* me, uint8_t v) {
me->sendingTime = v;
}
diff --git a/306-controller_interface.X/middleware/can/can_sender.h b/306-controller_interface.X/middleware/can/can_sender.h
index 633cec3..3703e49 100644
--- a/306-controller_interface.X/middleware/can/can_sender.h
+++ b/306-controller_interface.X/middleware/can/can_sender.h
@@ -4,8 +4,8 @@
* @date August 2023
* @file can_sender.h
*/
-#ifndef CAN_SENDER_H
-#define CAN_SENDER_H
+#ifndef CANSENDER_H
+#define CANSENDER_H
#include "../../xf/xf.h"
@@ -13,65 +13,65 @@ typedef enum {
STCS_INIT,
STCS_WAIT,
STCS_SEND
-} CAN_SENDER_STATES;
+} CANSENDER_STATES;
typedef enum {
evCSinit = 15, // TODO change this number (< 256)
evCSsend,
evCSdone
-} CAN_SENDER_EVENTS;
+} CANSENDER_EVENTS;
-typedef void (*CAN_SENDER_CALLBACK_FUNCTION)(void*);
+typedef void (*CANSENDER_CALLBACK_FUNCTION)(void*);
typedef struct {
- CAN_SENDER_CALLBACK_FUNCTION f; // function
+ CANSENDER_CALLBACK_FUNCTION f; // function
void* p; // param(s)
-} CAN_SENDER_CALLBACK;
+} CANSENDER_CALLBACK;
typedef struct {
- CAN_SENDER_STATES state;
+ CANSENDER_STATES state;
uint8_t sendingTime;
- CAN_SENDER_CALLBACK wait;
- CAN_SENDER_CALLBACK send;
-} CAN_SENDER;
+ CANSENDER_CALLBACK wait;
+ CANSENDER_CALLBACK send;
+} CANSENDER;
/**
- * Initialize the CAN_SENDER
- * @param me the CAN_SENDER itself
+ * Initialize the CANSENDER
+ * @param me the CANSENDER itself
*/
-void CAN_SENDER_init(CAN_SENDER* me);
+void CANSENDER_init(CANSENDER* me);
/**
- * Start the CAN_SENDER state machine
- * @param me the CAN_SENDER itself
+ * Start the CANSENDER state machine
+ * @param me the CANSENDER itself
*/
-void CAN_SENDER_startBehaviour(CAN_SENDER* me);
+void CANSENDER_startBehaviour(CANSENDER* me);
/**
* Process the event
* @param ev the event to process
* @return true if the event is processed
*/
-bool CAN_SENDER_processEvent(Event* ev);
+bool CANSENDER_processEvent(Event* ev);
/*************
* Callbacks *
*************/
/**
- * Set the callback function to call when the CAN_SENDER is entering state wait
- * @param me the CAN_SENDER itself
+ * Set the callback function to call when the CANSENDER is entering state wait
+ * @param me the CANSENDER itself
* @param f the function to call
* @param p the param(s) to pass to the function
*/
-void CAN_SENDER_onWait(CAN_SENDER* me, CAN_SENDER_CALLBACK_FUNCTION f, void* p);
+void CANSENDER_onWait(CANSENDER* me, CANSENDER_CALLBACK_FUNCTION f, void* p);
/**
- * Set the callback function to call when the CAN_SENDER is entering state send
- * @param me the CAN_SENDER itself
+ * Set the callback function to call when the CANSENDER is entering state send
+ * @param me the CANSENDER itself
* @param f the function to call
* @param p the param(s) to pass to the function
*/
-void CAN_SENDER_onSend(CAN_SENDER* me, CAN_SENDER_CALLBACK_FUNCTION f, void* p);
+void CANSENDER_onSend(CANSENDER* me, CANSENDER_CALLBACK_FUNCTION f, void* p);
/************
* EMITTERS *
@@ -79,18 +79,22 @@ void CAN_SENDER_onSend(CAN_SENDER* me, CAN_SENDER_CALLBACK_FUNCTION f, void* p);
/**
* Emit the send event
- * @param me the CAN_SENDER itself
+ * @param me the CANSENDER itself
* @param t time to wait in ms before triggering event
*/
-void CAN_SENDER_emitSend(CAN_SENDER* me, uint16_t t);
+void CANSENDER_emitSend(CANSENDER* me, uint16_t t);
/**
* Emit the done event
- * @param me the CAN_SENDER itself
+ * @param me the CANSENDER itself
* @param t time to wait in ms before triggering event
*/
- void CAN_SENDER_emitDone(CAN_SENDER* me, uint16_t t);
-
+ void CANSENDER_emitDone(CANSENDER* me, uint16_t t);
+
+ void CANSENDER_sendCanMsg(CANSENDER* me, uint8_t id, uint32_t data);
+ void sendCanMsg(uint32_t id, uint32_t data);
+
+
/***********
* SETTERS *
***********/
@@ -100,6 +104,9 @@ void CAN_SENDER_emitSend(CAN_SENDER* me, uint16_t t);
* @param me
* @param v
*/
-void CAN_SENDER_setSendingTime(CAN_SENDER* me, uint8_t v);
+void CANSENDER_setSendingTime(CANSENDER* me, uint8_t v);
+
+void CANSENDER_seSender(CANSENDER* me, uint8_t s);
+void CANSENDER_setRecipient(CANSENDER* me, uint8_t r);
#endif
diff --git a/306-controller_interface.X/nbproject/configurations.xml b/306-controller_interface.X/nbproject/configurations.xml
index b7db225..cc66702 100644
--- a/306-controller_interface.X/nbproject/configurations.xml
+++ b/306-controller_interface.X/nbproject/configurations.xml
@@ -319,21 +319,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/UML/can.uxf b/UML/can.uxf
index 835b6d9..d40dc6b 100644
--- a/UML/can.uxf
+++ b/UML/can.uxf
@@ -1,5 +1,5 @@
-
+
15
UMLSpecialState
@@ -211,14 +211,18 @@ evCSdone
765
630
- 645
- 150
+ 705
+ 270
_*How to use*_
-CANSENDER_send(uint32_t id, uint32_t data);
-or
-CANSENDER_send(CANSENDER *me, uint8_t id, uint32_t data);
+*Like a static class:*
+sendCanMsg(uint32_t id, uint32_t data);
+
+*Or like an Object: *
+CANSENDER_seSender(CANSENDER* me, uint8_t s);
+CANSENDER_setRecipient(CANSENDER* me, uint8_t r);
+CANSENDER_sendCanMsg(CANSENDER* me, uint8_t id, uint32_t data);