00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _USB_PACKET_H_
00024 #define _USB_PACKET_H_
00025
00026 #include "canio.h"
00027 #include <libplayercommon/playercommon.h>
00028
00029 typedef struct usb_packet {
00030 union {
00031 unsigned char pkt_data[18];
00032 struct {
00033 unsigned char usb_message_header;
00034 unsigned char usb_command_identifier;
00035 unsigned char command_type;
00036 unsigned char unused0;
00037 unsigned char unused1;
00038 unsigned char unused2;
00039 unsigned short can_message_header;
00040 unsigned char unused3;
00041 unsigned char can_message[8];
00042 unsigned char usb_message_checksum;
00043 };
00044 };
00045 } usb_packet_t;
00046
00047 class USBpacket {
00048
00049 private:
00050 unsigned short make_can_header( long id, unsigned int dlc, unsigned int flags );
00051 unsigned char compute_checksum();
00052
00053
00054 public:
00055
00056 typedef enum { CANA_DEV, USB_CMD_RESET } CommandType;
00057
00058 usb_packet_t pkt;
00059
00060 USBpacket();
00061 USBpacket( const CanPacket &pkt );
00062 operator CanPacket ();
00063 bool check();
00064
00065 void print();
00066
00067 };
00068
00069
00070 class USBIO {
00071 private:
00072 int fd;
00073 bool synced;
00074 public:
00075 USBIO() { fd = -1; synced = false; }
00076 int Init(const char *dev);
00077 int ReadPacket(CanPacket *pkt);
00078 int SyncRead( USBpacket &p );
00079 int WritePacket(CanPacket &pkt);
00080 int Shutdown();
00081 };
00082
00083 #endif