Files
Cnomicon/include/libcan++/DbcParser.h
2021-01-22 10:16:20 -05:00

88 lines
2.2 KiB
C++

//****************************************************************************
// Copyright (C) 2007
// Nissan North America
// All Rights Reserved. Proprietary and Confidential.
//============================================================================
/* prevent multiple inclusions */
#ifndef __DbcParser__
#define __DbcParser__
/* includes *****************************************************************/
#include <regex.h>
#include <vector>
#include "CanMessage.h"
#include "CanSignal.h"
/* defines ******************************************************************/
/* macros *******************************************************************/
/* structs & typedefs *******************************************************/
// 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;
} DbcFilter;
/* c class definitions ******************************************************/
//
// Uses the Peak Systems CAN Linux driver and Nissan CAN data
//
class DbcParser {
// public data
public:
std::vector<DbcFilter *> MsgFilters; // message filter
std::vector<DbcFilter *> SigFilters; // signal filter
std::vector<CanMessage *> Messages;
std::vector<CanSignal *> Signals;
// private data
private:
// 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
private:
};
#endif