diff --git a/include/libcan++/CanDatabase.h b/include/libcan++/CanDatabase.h index 99fceec..63a9330 100644 --- a/include/libcan++/CanDatabase.h +++ b/include/libcan++/CanDatabase.h @@ -29,34 +29,34 @@ * CAN class to handle database of CAN signals from DBC (.dbc) file */ class CanDatabase : public DbcParser { - // public data + // public data public: - - // private data + + // private data private: - - // static data - - // public methods + + // static data + + // public methods public: - // constructors - CanDatabase(); - - // destructor - virtual ~CanDatabase(); - - // virtual functions - - // public methods - int FormatHeader( char *buf, int max ); - int FormatMessage( char *buf, int max ); - - int SubscribeCan( CanSocket *pCan ); - int ReadCan( CanSocket *pCan ); - - // static methods - - // private methods + // constructors + CanDatabase(); + + // destructor + virtual ~CanDatabase(); + + // virtual functions + + // public methods + int FormatHeader( char *buf, int max ); + int FormatMessage( char *buf, int max ); + + int SubscribeCan( CanSocket *pCan ); + int ReadCan( CanSocket *pCan ); + + // static methods + + // private methods private: }; diff --git a/include/libcan++/CanMessage.h b/include/libcan++/CanMessage.h index 7a478b9..c5d7639 100644 --- a/include/libcan++/CanMessage.h +++ b/include/libcan++/CanMessage.h @@ -31,43 +31,43 @@ // Uses the Peak Systems CAN Linux driver and Nissan CAN data // class CanMessage { - // public data + // public data public: - std::string Name; // Signal Name - std::string Module; // Module Name - u_int32_t Address; // 29 bits (standard or extended) - u_int8_t Data[64]; // Data - u_int Size; // DLC (CAN-FD > 8) - - - // list of signals in the message - std::vector Signals; - - // private data + std::string Name; // Signal Name + std::string Module; // Module Name + u_int32_t Address; // 29 bits (standard or extended) + u_int8_t Data[64]; // Data + u_int Size; // DLC (CAN-FD > 8) + + + // list of signals in the message + std::vector Signals; + + // private data private: - - // static data - - // public methods + + // static data + + // public methods public: - // constructors - CanMessage(); - - // destructor - virtual ~CanMessage(); - - // virtual functions - - // public methods - int Read(CanFrame *frame); - int Write(CanFrame *frame); - int Convert(CanFrame *frame) {return Read(frame);}; - int Subscribe(void); - int Unsubscribe(void); - - // static methods - - // private methods + // constructors + CanMessage(); + + // destructor + virtual ~CanMessage(); + + // virtual functions + + // public methods + int Read(CanFrame *frame); + int Write(CanFrame *frame); + int Convert(CanFrame *frame) {return Read(frame);}; + int Subscribe(void); + int Unsubscribe(void); + + // static methods + + // private methods private: }; diff --git a/include/libcan++/CanSignal.h b/include/libcan++/CanSignal.h index 560ed54..88541e3 100644 --- a/include/libcan++/CanSignal.h +++ b/include/libcan++/CanSignal.h @@ -38,11 +38,11 @@ class CanSignal : public BaseSignal, public VoltType { class CanSignal { #endif // public data -public: + public: std::string Name; // Signal Name std::string Units; // Signal Units u_int32_t Address; // 29 bits (standard or extended) - + // data conversion (from .dbc file) u_char StartBit; // 0..63 u_char NumBits; // 1..32 @@ -50,7 +50,7 @@ public: u_char IsSigned; // 0 = unsigned, 1 = 2's Complement double Scale; // scale double Offset; // offset - + // conversion help u_char StartByte; // 0..7 u_char NumBytes; // 1..4 @@ -58,7 +58,7 @@ public: u_char LowBit; // #bits after u_int64_t Mask; // 64 bit mask u_int64_t Sign; // 64 bit sign mask - + // status, data u_char doSubscribe; // CanSocket filter u_char isNew; @@ -67,28 +67,28 @@ public: int64_t currValue; int64_t lastValue; double realValue; - + // misc u_int64_t activity; // activity counter void *userData; // user data int userIndex; // user index - - + + // private data -private: - + private: + // static data - + // public methods -public: + public: // constructors CanSignal(); - + // destructor virtual ~CanSignal(); - + // virtual functions - + // public methods int Init( void ); int Convert(CanFrame *frame) {return Read(frame->data);}; @@ -100,17 +100,17 @@ public: long Write(double value, u_char *pbyData); void Subscribe(void) {doSubscribe=1;}; void Unsubscribe(void) {doSubscribe=0;}; - + #ifndef __VoltType__ void SetScaling( double scale=1.0, double offset=0.0 ) { Scale=scale; Offset=offset; }; double GetScale( void ) { return Scale; }; double GetOffset( void ) { return Offset; }; #endif - + // static methods - + // private methods -private: + private: }; #endif diff --git a/include/libcan++/CanSocket.h b/include/libcan++/CanSocket.h index d0ac06c..fba01d8 100644 --- a/include/libcan++/CanSocket.h +++ b/include/libcan++/CanSocket.h @@ -32,8 +32,8 @@ typedef struct can_filter CanFilter; typedef struct can_frame CanFrame; typedef struct _BcmFrame { - struct bcm_msg_head head; - struct can_frame frame; + struct bcm_msg_head head; +// struct can_frame frame; } BcmFrame; /* c class definitions ******************************************************/ @@ -42,60 +42,60 @@ typedef struct _BcmFrame { // Uses the Peak Systems CAN Linux driver and Nissan CAN data // class CanSocket { - // public data + // public data public: - int m_sock; - int m_proto; - - // private data + int m_sock; + int m_proto; + + // private data private: - // device - int m_flags; - - // errors - bool m_logerrs; - long m_errcount; - - // static data - - // public methods + // device + int m_flags; + + // errors + bool m_logerrs; + long m_errcount; + + // static data + + // public methods public: - // constructors - CanSocket(); - - // destructor - virtual ~CanSocket(); - - // virtual functions - - // public methods - void AddrFlags( u_long f ) { m_flags = f; }; - int GetSock(void) {return m_sock;}; - int GetSocket(void) {return m_sock;}; - int GetProto(void) {return m_proto;}; - int CanOpen( const char *dev="can0", int proto=CAN_RAW, int flags=0 ); - void CanClose(void); - - // misc - int ClearFilters( void ); - int Blocking(bool block=true); - int NonBlocking(void) { return Blocking(false); }; - int Loopback(bool loop=true); - int NoLoopback(void) { return Loopback(false); }; - void LogErrors(bool logerrs=true) {m_logerrs = logerrs;}; - - // rx filter - int CanAddRx( u_int32_t addr ); - int CanAddRx( const CanFilter *filter, int max=1 ); - int CanDelRx( u_int32_t addr ); - - // raw - int CanRawRead( CanFrame *buf, int max=1 ); - int CanRawWrite( const CanFrame *buf, int max=1 ); - - // bcm - int CanBcmRead( BcmFrame *msg, int max=1 ); - int CanBcmWrite( BcmFrame *msg, int max=1 ); + // constructors + CanSocket(); + + // destructor + virtual ~CanSocket(); + + // virtual functions + + // public methods + void AddrFlags( u_long f ) { m_flags = f; }; + int GetSock(void) {return m_sock;}; + int GetSocket(void) {return m_sock;}; + int GetProto(void) {return m_proto;}; + int CanOpen( const char *dev="can0", int proto=CAN_RAW, int flags=0 ); + void CanClose(void); + + // misc + int ClearFilters( void ); + int Blocking(bool block=true); + int NonBlocking(void) { return Blocking(false); }; + int Loopback(bool loop=true); + int NoLoopback(void) { return Loopback(false); }; + void LogErrors(bool logerrs=true) {m_logerrs = logerrs;}; + + // rx filter + int CanAddRx( u_int32_t addr ); + int CanAddRx( const CanFilter *filter, int max=1 ); + int CanDelRx( u_int32_t addr ); + + // raw + int CanRawRead( CanFrame *buf, int max=1 ); + int CanRawWrite( const CanFrame *buf, int max=1 ); + + // bcm + int CanBcmRead( BcmFrame *msg, int max=1 ); + int CanBcmWrite( BcmFrame *msg, int max=1 ); }; #endif diff --git a/include/libcan++/DbcParser.h b/include/libcan++/DbcParser.h index fec0a17..96f003c 100644 --- a/include/libcan++/DbcParser.h +++ b/include/libcan++/DbcParser.h @@ -24,19 +24,19 @@ // based on .dbc data typedef struct _DbcFilter { - // signal information - char Name[32]; // Signal name - regex_t preg; - - // address range - u_int32_t CanAddrLo; // 29 bits - u_int32_t CanAddrHi; - - // data conversion - u_char StartBit; // 0..63 - u_char NumBits; // 1..32 - - int found; + // signal information + char Name[32]; // Signal name + regex_t preg; + + // address range + u_int32_t CanAddrLo; // 29 bits + u_int32_t CanAddrHi; + + // data conversion + u_char StartBit; // 0..63 + u_char NumBits; // 1..32 + + int found; } DbcFilter; /* c class definitions ******************************************************/ @@ -45,42 +45,42 @@ typedef struct _DbcFilter { // Uses the Peak Systems CAN Linux driver and Nissan CAN data // class DbcParser { - // public data + // public data public: - std::vector MsgFilters; // message filter - std::vector SigFilters; // signal filter - std::vector Messages; - std::vector Signals; - - // private data + std::vector MsgFilters; // message filter + std::vector SigFilters; // signal filter + std::vector Messages; + std::vector Signals; + + // private data private: - - // static data - - // private methods - DbcFilter *AddFilter( char *name, u_int32_t addr1, u_int32_t addr2 ); - - // public methods + + // static data + + // private methods + DbcFilter *AddFilter( char *name, u_int32_t addr1, u_int32_t addr2 ); + + // public methods public: - // constructors - DbcParser(); - - // destructor - virtual ~DbcParser(); - - // virtual functions - - // public methods - int AddMsgFilter( char *name, u_int32_t addr1, u_int32_t addr2 ); - int AddSigFilter( char *name, u_int32_t addr1, u_int32_t addr2 ); - int AddMessage( char *name, u_int32_t addr, u_int32_t size, char *module ); - int AddSignal( char *name, char *units, u_int32_t addr, char start, char num, char endian, char sign, float scale, float offset ); - - int LoadDatabase( const char *file ); - - // static methods - - // private methods + // constructors + DbcParser(); + + // destructor + virtual ~DbcParser(); + + // virtual functions + + // public methods + int AddMsgFilter( char *name, u_int32_t addr1, u_int32_t addr2 ); + int AddSigFilter( char *name, u_int32_t addr1, u_int32_t addr2 ); + int AddMessage( char *name, u_int32_t addr, u_int32_t size, char *module ); + int AddSignal( char *name, char *units, u_int32_t addr, char start, char num, char endian, char sign, float scale, float offset ); + + int LoadDatabase( const char *file ); + + // static methods + + // private methods private: }; diff --git a/src/libcan++/CMakeLists.txt b/src/libcan++/CMakeLists.txt index f3b0a42..0e04b21 100644 --- a/src/libcan++/CMakeLists.txt +++ b/src/libcan++/CMakeLists.txt @@ -28,6 +28,8 @@ set(LIBSRC # includes include_directories(../include) +add_compile_options(-Warray-bounds) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) diff --git a/src/libcan++/CanSocket.cpp b/src/libcan++/CanSocket.cpp index 0defe5c..bc54027 100644 --- a/src/libcan++/CanSocket.cpp +++ b/src/libcan++/CanSocket.cpp @@ -255,7 +255,7 @@ int CanSocket::CanAddRx( u_int32_t addr ) // mask msg.head.nframes = 1; - U64_DATA(&msg.frame) = (__u64) 0xFFFFFFFFFFFFFFFFULL; // all 64 bits + U64_DATA(&msg.head.frames[0]) = (__u64) 0xFFFFFFFFFFFFFFFFULL; // all 64 bits // send it down if (write(m_sock, &msg, sizeof(msg)) < 0) diff --git a/src/libcan++/CanSocket.h b/src/libcan++/CanSocket.h index 9005a85..fba01d8 100644 --- a/src/libcan++/CanSocket.h +++ b/src/libcan++/CanSocket.h @@ -33,7 +33,7 @@ typedef struct can_frame CanFrame; typedef struct _BcmFrame { struct bcm_msg_head head; - struct can_frame frame; +// struct can_frame frame; } BcmFrame; /* c class definitions ******************************************************/