00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef ASEBA_CAN
00026 #define ASEBA_CAN
00027
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031
00032 #include "../../common/types.h"
00033
00047
00048
00049
00051 typedef struct
00052 {
00053 uint8 data[8] __attribute__((aligned(sizeof(int))));
00054 unsigned id:11;
00055 unsigned len:4;
00056 unsigned used:1;
00057 } CanFrame;
00058
00060 typedef void (*AsebaCanVoidVoidFP)();
00061
00063 typedef int (*AsebaCanIntVoidFP)();
00064
00066 typedef void (*AsebaCanSendFrameFP)(const CanFrame *frame);
00067
00079 void AsebaCanInit(uint16 id, AsebaCanSendFrameFP sendFrameFP, AsebaCanIntVoidFP isFrameRoomFP, AsebaCanVoidVoidFP receivedPacketDroppedFP, AsebaCanVoidVoidFP sentPacketDroppedFP, CanFrame* sendQueue, size_t sendQueueSize, CanFrame* recvQueue, size_t recvQueueSize);
00080
00086 uint16 AsebaCanSend(const uint8 *data, size_t size);
00087
00094 uint16 AsebaCanSendSpecificSource(const uint8 *data, size_t size, uint16 source);
00095
00103 uint16 AsebaCanRecv(uint8 *data, size_t size, uint16 *source);
00104
00107 void AsebaCanFlushQueue(void);
00108
00111 void AsebaCanRecvFreeQueue(void);
00112
00113
00114
00116 void AsebaIdle(void);
00117
00119 uint16 AsebaShouldDropPacket(uint16 source, const uint8* data);
00120
00121
00122
00124 void AsebaCanFrameReceived(const CanFrame *frame);
00125
00127 void AsebaCanFrameSent();
00128
00130 uint16 AsebaCanRecvBufferEmpty(void);
00131
00134 #ifdef __cplusplus
00135 }
00136 #endif
00137
00138 #endif