00001 #ifndef _CAN_DEV_H_
00002 #define _CAN_DEV_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 #include <sys/types.h>
00066 #include <sys/device.h>
00067
00072
00073 #define CAN_IF_2A 0x01
00074 #define CAN_IF_2B 0x02
00075
00076
00077
00078
00079
00080 #define CAN_SPEED_10K 0
00081 #define CAN_SPEED_20K 1
00082 #define CAN_SPEED_50K 2
00083 #define CAN_SPEED_100K 3
00084 #define CAN_SPEED_125K 4
00085 #define CAN_SPEED_250K 5
00086 #define CAN_SPEED_500K 6
00087 #define CAN_SPEED_800K 7
00088 #define CAN_SPEED_1M 8
00089 #define CAN_SPEED_CUSTOM 255
00090
00091
00097 struct _CANFRAME {
00098 u_long id;
00099 u_char len;
00100 u_char byte[8];
00101 u_char ext;
00102 u_char rtr;
00103 };
00104
00109 typedef struct _CANFRAME CANFRAME;
00110
00115 struct _CANINFO {
00116 HANDLE volatile can_rx_rdy;
00117 HANDLE volatile can_tx_rdy;
00118 u_long can_rx_frames;
00119 u_long can_tx_frames;
00120 u_long can_interrupts;
00121 u_long can_overruns;
00122 u_long can_errors;
00123 };
00124
00128 typedef struct _CANINFO CANINFO;
00129
00136 struct ifcan {
00137 u_char can_type;
00138 u_long can_baudrate;
00139 u_char can_acc_mask[4];
00140 u_char can_acc_code[4];
00141 u_long can_rtimeout;
00143 u_char (*can_rxavail) (NUTDEVICE *);
00144 u_char (*can_txfree) (NUTDEVICE *);
00145 u_char (*can_recv) (NUTDEVICE *, CANFRAME *);
00146 void (*can_send) (NUTDEVICE *, CANFRAME *);
00147 void (*can_set_ac) (NUTDEVICE *, u_char*);
00148 void (*can_set_am) (NUTDEVICE *, u_char*);
00149 u_char (*can_set_baud) (NUTDEVICE *, u_long);
00150 };
00151
00155 typedef struct ifcan IFCAN;
00156
00157 u_char CAN_SetSpeed(NUTDEVICE *dev, u_long baudrate);
00158 void CAN_SetFilter(NUTDEVICE *dev, u_char *ac, u_char *am);
00159
00160 void CAN_TxFrame(NUTDEVICE *dev, CANFRAME *frame);
00161 u_char CAN_TryTxFrame(NUTDEVICE *dev, CANFRAME *frame);
00162 u_char CAN_TxFree(NUTDEVICE *dev);
00163
00164 u_char CAN_RxFrame(NUTDEVICE *dev, CANFRAME *frame);
00165 u_char CAN_TryRxFrame(NUTDEVICE *dev, CANFRAME *frame);
00166 u_char CAN_RxAvail(NUTDEVICE *dev);
00167 void CAN_SetRxTimeout(NUTDEVICE *dev, u_long timeout);
00168
00171 #endif