NagaokaRoboticsClub_mbedTeam / ikarashiCAN

Dependencies:   DataControl

Revision:
0:b9571508f055
Child:
2:05d0790d0fc6
diff -r 000000000000 -r b9571508f055 ikarashiCAN.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ikarashiCAN.cpp	Tue Aug 23 16:59:47 2022 +0000
@@ -0,0 +1,115 @@
+
+#include "ikarashiCAN.h"
+
+ikarashiCAN::ikarashiCAN(PinName rd, PinName td, int msgID, int frequency):
+    can(rd, td, frequency), msg(msgID, reciever, 4)
+{
+    _msgID = msgID;
+    sended_msgID = 0;
+    can_s = 0;
+    can_r = 0;
+    _can_data = 0;
+}
+
+ikarashiCAN::ikarashiCAN(PinName rd, PinName td, int msgID):
+    can(rd, td, 50000), msg(msgID, reciever, 4)
+{
+    _msgID = msgID;
+    sended_msgID = 0;
+    can_s = 0;
+    can_r = 0;
+    _can_data = 0;
+}
+
+//----------------------bit controll------------------------
+int ikarashiCAN::getData()
+{
+   return dataCombine(msg.data, msg.len);
+}
+//--------------------------------------------------------//
+
+
+
+//---attach function---------------------------------------//
+void ikarashiCAN::send()
+{
+    if(can.write(CANMessage(_msgID, sender, separated_data_size))) {
+        can_s = 1;
+    } else {
+        can_s = 0;
+    }
+}
+
+void ikarashiCAN::recieve()
+{
+    if(can.read(msg)) {
+        can_r = 1;
+    }else{
+        can_r = 0;
+    }
+}
+//--------------------------------------------------------//
+
+
+
+//---attach-----------------------------------------------//
+void ikarashiCAN::startSend(float second)
+{
+    can_ticker.attach(this, &ikarashiCAN::send, second);
+}
+
+void ikarashiCAN::startRecieve()
+{
+    can_ticker.attach(this, &ikarashiCAN::recieve, CAN::TxIrq);
+}
+//--------------------------------------------------------//
+
+
+int ikarashiCAN::simpleGetData(int _id){
+    if(_id == msg.id && can_r){
+        _can_data = getData();
+        return getData();
+    }else{
+        return _can_data;
+    }
+}
+
+
+bool ikarashiCAN::checkSender()
+{
+    return can_s;
+}
+
+bool ikarashiCAN::checkReciever()
+{
+    return can_r;
+}
+
+int ikarashiCAN::recievedCanID(){
+    if(can_r){
+        return msg.id;
+    }else{
+        return -1;
+    }
+}
+
+int ikarashiCAN::myCanID(){
+    return _msgID;
+}
+
+int ikarashiCAN::CanLen(){
+    return msg.len;
+}
+
+void ikarashiCAN::sender_reset()
+{
+    for(int i=0; i<4; i++) sender[i] = 0;
+}
+
+void ikarashiCAN::reciever_reset()
+{
+    for(int i=0; i<4; i++) reciever[i] = 0;
+}
+
+
+