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

 

         

canpacket.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 ORCA_SEGWAY_RMP_CAN_PACKET_H_
00012 #define ORCA_SEGWAY_RMP_CAN_PACKET_H_
00013 
00014 #include <sys/types.h>
00015 #include <stdint.h>
00016 #include <string.h>
00017 
00018 namespace segwayrmpacfr
00019 {
00020 
00021 /*
00022   CAN Packets consist of:
00023     - Header (2 bytes in standard packet (which the RMP always uses))
00024     - Data Length Code (2 bytes, always '8' for RMP)
00025     - Data (8 bytes, split into 4 2-byte slots)
00026 
00027   Even if we're interfacing with USB, we still pass CAN packets
00028   (wrapped up in USB packets).
00029 
00030   @note This code originates from Player/Stage project
00031   http://playerstage.sf.net, file: canio.h
00032   @author Alex Makarenko
00033 */
00034 class CanPacket
00035 {
00036 public:
00037 
00038     // Always use all 8 bytes
00039     static const int CAN_DATA_SIZE = 8;
00040 
00041     CanPacket( uint32_t id=0 );
00042     
00043     // Sets the ID (what the RMP docs call the header)
00044     void setId( uint32_t id ) { id_ = id; }
00045 
00046     // RMP has fixed-size messages
00047     const uint16_t dataLengthCode() { return 0x0008; }
00048 
00049     // returns the value of the slotNum'th slot
00050     uint16_t getSlot(int slotNum) const;
00051 
00052     // sets the slotNum'th slot to val
00053     void putSlot(const int slotNum, const uint16_t val);
00054     
00055     // The id is the 'header' field in the RMP docs
00056     uint32_t id() const { return id_; }
00057 
00058     // Allow direct access for memcpy
00059     uint8_t *msg() { return msg_; }
00060     const uint8_t *msg() const { return msg_; }
00061 
00062     // Human-readable string for debugging
00063     char* toString() const;
00064 
00065 private:
00066 
00067     long id_;
00068     uint8_t msg_[CAN_DATA_SIZE];
00069 
00070     // Could store dataLengthCode and flags here,
00071     // but don't bother cause for the RMP they're always the same.
00072     //    uint32_t dlc;
00073     //    uint32_t flags;
00074 
00075 };
00076 
00077 //
00078 // Some functions for building CAN packets
00079 // (all values are in the RMP's native representation)
00080 //
00081 
00082 CanPacket
00083 statusCommandPacket( uint16_t statusCommandType, 
00084                      uint16_t value,
00085                      int16_t  speedCount,
00086                      int16_t  turnrateCount );
00087 
00088 CanPacket
00089 motionCommandPacket( int16_t speedCount,
00090                      int16_t turnrateCount );
00091 
00092 CanPacket
00093 shutdownCommandPacket();
00094 
00095 } // namespace
00096 
00097 #endif
 

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


Generated for Orca Robotics by  doxygen 1.4.5