INTRODUCTION
Overview
Download and Install
Quick Start
Documentation
Publications

NONFRAMEWORK CODE
Driver Interfaces
Drivers
Libraries
Utilities

FRAMEWORK CODE
Interfaces
Components
Libraries
Utilities

Full Software Listings

DEVELOPER
Tutorials
Examples
Dev Guide
Dashboard

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         

usbftdirmpio.h

00001 /*
00002  * Orca-Robotics Project: Components for robotics 
00003  *               http://orca-robotics.sf.net/
00004  * Copyright (c) 2004-2009 Alex Brooks, Alexei Makarenko, Tobias Kaupp
00005  *
00006  * This copy of Orca is licensed to you under the terms described in
00007  * the LICENSE file included in this distribution.
00008  *
00009  */
00010 
00011 #ifndef ORCA2_SEGWAY_USB_FTDI_RMP_IO_H
00012 #define ORCA2_SEGWAY_USB_FTDI_RMP_IO_H
00013 
00014 #include <queue>
00015 #include <ftd2xx.h>
00016 #include "../canpacket.h"
00017 #include "../rmpio.h"
00018 
00019 namespace usbftdi {
00020     class UsbFtdi;
00021 }
00022 
00023 namespace segwayrmpacfr
00024 {
00025 
00026 //
00027 //
00028 //
00029 class UsbFtdiRmpIo : public RmpIo
00030 {
00031 public:
00032 
00033     UsbFtdiRmpIo();
00034     ~UsbFtdiRmpIo();
00035 
00036     // from RmpIo
00037     virtual void enable(int debugLevel);
00038     virtual void disable(void);
00039     virtual RmpIo::RmpIoStatus readPacket( CanPacket &pkt );
00040     virtual void writePacket( const CanPacket &pkt );
00041     
00042 private:
00043 
00044     // STORAGE
00045     
00046     bool isEnabled_;
00047 
00048     // a char buffer to read USB stream into
00049     std::vector<unsigned char> charBuffer_;
00050     // have to remember how many char are left in the buffer
00051     unsigned int charBufferBytes_;
00052     // a buffer to store parsed CAN messages
00053     std::queue<CanPacket> canBuffer_;
00054 
00055     // HARDWDARE
00056     
00057     // handle to the USB device inside our Segway
00058     usbftdi::UsbFtdi *usbFtdi_;
00059     
00060     // Don't call this if the buffer's empty.
00061     void getPacketFromCanBuffer( CanPacket* pkt );
00062     
00063     RmpIo::RmpIoStatus readPacketNonBlocking( CanPacket* pkt );
00064     RmpIo::RmpIoStatus readPacketBlocking( CanPacket* pkt );
00065     // Not used but keep for reference
00066     //RmpUsbIoStatus readPacketPolling( CanPacket* pkt );
00067     
00068     RmpIo::RmpIoStatus readFromUsbToBufferNonBlocking();
00069     RmpIo::RmpIoStatus readFromUsbToBufferBlocking();
00070     void readFromBufferToQueue();
00071     
00072     int parseUsbToCan( CanPacket *pkt, const unsigned char *bytes );
00073     int parseCanToUsb( const CanPacket *pkt, unsigned char *bytes );
00074     
00075     unsigned char usbMessageChecksum( unsigned char *msg );    
00076 
00077     int debugLevel_;
00078 };
00079 
00080 } // namespace
00081 
00082 #endif
 

Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)


Generated for Orca Robotics by  doxygen 1.4.5