Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef ASEBA_CAN
00022 #define ASEBA_CAN
00023
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027
00028 #include "../../common/types.h"
00029
00046
00047
00048
00050 typedef struct
00051 {
00052 uint8 data[8] __attribute__((aligned(sizeof(int))));
00053 unsigned id:11;
00054 unsigned len:4;
00055 unsigned used:1;
00056 } CanFrame;
00057
00059 typedef void (*AsebaCanVoidVoidFP)();
00060
00062 typedef int (*AsebaCanIntVoidFP)();
00063
00065 typedef void (*AsebaCanSendFrameFP)(const CanFrame *frame);
00066
00078 void AsebaCanInit(uint16 id, AsebaCanSendFrameFP sendFrameFP, AsebaCanIntVoidFP isFrameRoomFP, AsebaCanVoidVoidFP receivedPacketDroppedFP, AsebaCanVoidVoidFP sentPacketDroppedFP, CanFrame* sendQueue, size_t sendQueueSize, CanFrame* recvQueue, size_t recvQueueSize);
00079
00085 uint16 AsebaCanSend(const uint8 *data, size_t size);
00086
00093 uint16 AsebaCanSendSpecificSource(const uint8 *data, size_t size, uint16 source);
00094
00102 uint16 AsebaCanRecv(uint8 *data, size_t size, uint16 *source);
00103
00106 void AsebaCanFlushQueue(void);
00107
00110 void AsebaCanRecvFreeQueue(void);
00111
00112
00113
00115 void AsebaIdle(void);
00116
00118 uint16 AsebaShouldDropPacket(uint16 source, const uint8* data);
00119
00120
00121
00123 void AsebaCanFrameReceived(const CanFrame *frame);
00124
00126 void AsebaCanFrameSent();
00127
00129 uint16 AsebaCanRecvBufferEmpty(void);
00130
00133 #ifdef __cplusplus
00134 }
00135 #endif
00136
00137 #endif