dcf5371cde
It's u16 in kernelspace, not WORD. Cc: Daniel Krueger <daniel.krueger@systec-electronic.com> Cc: Ronald Sieber <Ronald.Sieber@systec-electronic.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
457 lines
20 KiB
C
457 lines
20 KiB
C
/****************************************************************************
|
|
|
|
(c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
|
|
www.systec-electronic.com
|
|
|
|
Project: openPOWERLINK
|
|
|
|
Description: include file for api function of EplOBD-Module
|
|
|
|
License:
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions
|
|
are met:
|
|
|
|
1. Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
2. Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
|
|
3. Neither the name of SYSTEC electronic GmbH nor the names of its
|
|
contributors may be used to endorse or promote products derived
|
|
from this software without prior written permission. For written
|
|
permission, please contact info@systec-electronic.com.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
Severability Clause:
|
|
|
|
If a provision of this License is or becomes illegal, invalid or
|
|
unenforceable in any jurisdiction, that shall not affect:
|
|
1. the validity or enforceability in that jurisdiction of any other
|
|
provision of this License; or
|
|
2. the validity or enforceability in other jurisdictions of that or
|
|
any other provision of this License.
|
|
|
|
-------------------------------------------------------------------------
|
|
|
|
$RCSfile: EplObd.h,v $
|
|
|
|
$Author: D.Krueger $
|
|
|
|
$Revision: 1.5 $ $Date: 2008/04/17 21:36:32 $
|
|
|
|
$State: Exp $
|
|
|
|
Build Environment:
|
|
Microsoft VC7
|
|
|
|
-------------------------------------------------------------------------
|
|
|
|
Revision History:
|
|
|
|
2006/06/02 k.t.: start of the implementation, version 1.00
|
|
|
|
****************************************************************************/
|
|
|
|
#ifndef _EPLOBD_H_
|
|
#define _EPLOBD_H_
|
|
|
|
#include "EplInc.h"
|
|
|
|
// ============================================================================
|
|
// defines
|
|
// ============================================================================
|
|
|
|
#define EPL_OBD_TABLE_INDEX_END 0xFFFF
|
|
|
|
// for the usage of BOOLEAN in OD
|
|
#define OBD_TRUE 0x01
|
|
#define OBD_FALSE 0x00
|
|
|
|
// default OD index for Node id
|
|
#define EPL_OBD_NODE_ID_INDEX 0x1F93
|
|
// default subindex for NodeId in OD
|
|
#define EPL_OBD_NODE_ID_SUBINDEX 0x01
|
|
// default subindex for NodeIDByHW_BOOL
|
|
#define EPL_OBD_NODE_ID_HWBOOL_SUBINDEX 0x02
|
|
|
|
// ============================================================================
|
|
// enums
|
|
// ============================================================================
|
|
|
|
// directions for access to object dictionary
|
|
typedef enum {
|
|
kEplObdDirInit = 0x00, // initialising after power on
|
|
kEplObdDirStore = 0x01, // store all object values to non volatile memory
|
|
kEplObdDirLoad = 0x02, // load all object values from non volatile memory
|
|
kEplObdDirRestore = 0x03, // deletes non volatile memory (restore)
|
|
kEplObdDirOBKCheck = 0xFF // reserved
|
|
} tEplObdDir;
|
|
|
|
// commands for store
|
|
typedef enum {
|
|
kEplObdCommNothing = 0x00,
|
|
kEplObdCommOpenWrite = 0x01,
|
|
kEplObdCommWriteObj = 0x02,
|
|
kEplObdCommCloseWrite = 0x03,
|
|
kEplObdCommOpenRead = 0x04,
|
|
kEplObdCommReadObj = 0x05,
|
|
kEplObdCommCloseRead = 0x06,
|
|
kEplObdCommClear = 0x07,
|
|
kEplObdCommUnknown = 0xFF
|
|
} tEplObdCommand;
|
|
|
|
//-----------------------------------------------------------------------------------------------------------
|
|
// events of object callback function
|
|
typedef enum {
|
|
// m_pArg points to
|
|
// ---------------------
|
|
kEplObdEvCheckExist = 0x06, // checking if object does exist (reading and writing) NULL
|
|
kEplObdEvPreRead = 0x00, // before reading an object source data buffer in OD
|
|
kEplObdEvPostRead = 0x01, // after reading an object destination data buffer from caller
|
|
kEplObdEvWrStringDomain = 0x07, // event for changing string/domain data pointer or size struct tEplObdVStringDomain in RAM
|
|
kEplObdEvInitWrite = 0x04, // initializes writing an object (checking object size) size of object in OD (tEplObdSize)
|
|
kEplObdEvPreWrite = 0x02, // before writing an object source data buffer from caller
|
|
kEplObdEvPostWrite = 0x03, // after writing an object destination data buffer in OD
|
|
// kEplObdEvAbortSdo = 0x05 // after an abort of an SDO transfer
|
|
|
|
} tEplObdEvent;
|
|
|
|
// part of OD (bit oriented)
|
|
typedef unsigned int tEplObdPart;
|
|
|
|
#define kEplObdPartNo 0x00 // nothing
|
|
#define kEplObdPartGen 0x01 // part (0x1000 - 0x1FFF)
|
|
#define kEplObdPartMan 0x02 // manufacturer part (0x2000 - 0x5FFF)
|
|
#define kEplObdPartDev 0x04 // device part (0x6000 - 0x9FFF)
|
|
#define kEplObdPartUsr 0x08 // dynamic part e.g. for ICE61131-3
|
|
|
|
// combinations
|
|
#define kEplObdPartApp ( kEplObdPartMan | kEplObdPartDev | kEplObdPartUsr) // manufacturer and device part (0x2000 - 0x9FFF) and user OD
|
|
#define kEplObdPartAll (kEplObdPartGen | kEplObdPartMan | kEplObdPartDev | kEplObdPartUsr) // whole OD
|
|
|
|
//-----------------------------------------------------------------------------------------------------------
|
|
// access types for objects
|
|
// must be a difine because bit-flags
|
|
typedef unsigned int tEplObdAccess;
|
|
|
|
#define kEplObdAccRead 0x01 // object can be read
|
|
#define kEplObdAccWrite 0x02 // object can be written
|
|
#define kEplObdAccConst 0x04 // object contains a constant value
|
|
#define kEplObdAccPdo 0x08 // object can be mapped in a PDO
|
|
#define kEplObdAccArray 0x10 // object contains an array of numerical values
|
|
#define kEplObdAccRange 0x20 // object contains lower and upper limit
|
|
#define kEplObdAccVar 0x40 // object data is placed in application
|
|
#define kEplObdAccStore 0x80 // object data can be stored to non volatile memory
|
|
|
|
// combinations (not all combinations are required)
|
|
#define kEplObdAccR (0 | 0 | 0 | 0 | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccW (0 | 0 | 0 | 0 | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccRW (0 | 0 | 0 | 0 | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
#define kEplObdAccCR (0 | 0 | 0 | 0 | kEplObdAccConst | 0 | kEplObdAccRead)
|
|
#define kEplObdAccGR (0 | 0 | kEplObdAccRange | 0 | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccGW (0 | 0 | kEplObdAccRange | 0 | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccGRW (0 | 0 | kEplObdAccRange | 0 | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
#define kEplObdAccVR (0 | kEplObdAccVar | 0 | 0 | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccVW (0 | kEplObdAccVar | 0 | 0 | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccVRW (0 | kEplObdAccVar | 0 | 0 | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
#define kEplObdAccVPR (0 | kEplObdAccVar | 0 | kEplObdAccPdo | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccVPW (0 | kEplObdAccVar | 0 | kEplObdAccPdo | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccVPRW (0 | kEplObdAccVar | 0 | kEplObdAccPdo | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
#define kEplObdAccVGR (0 | kEplObdAccVar | kEplObdAccRange | 0 | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccVGW (0 | kEplObdAccVar | kEplObdAccRange | 0 | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccVGRW (0 | kEplObdAccVar | kEplObdAccRange | 0 | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
#define kEplObdAccVGPR (0 | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccVGPW (0 | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccVGPRW (0 | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
#define kEplObdAccSR (kEplObdAccStore | 0 | 0 | 0 | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccSW (kEplObdAccStore | 0 | 0 | 0 | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccSRW (kEplObdAccStore | 0 | 0 | 0 | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
#define kEplObdAccSCR (kEplObdAccStore | 0 | 0 | 0 | kEplObdAccConst | 0 | kEplObdAccRead)
|
|
#define kEplObdAccSGR (kEplObdAccStore | 0 | kEplObdAccRange | 0 | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccSGW (kEplObdAccStore | 0 | kEplObdAccRange | 0 | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccSGRW (kEplObdAccStore | 0 | kEplObdAccRange | 0 | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
#define kEplObdAccSVR (kEplObdAccStore | kEplObdAccVar | 0 | 0 | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccSVW (kEplObdAccStore | kEplObdAccVar | 0 | 0 | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccSVRW (kEplObdAccStore | kEplObdAccVar | 0 | 0 | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
#define kEplObdAccSVPR (kEplObdAccStore | kEplObdAccVar | 0 | kEplObdAccPdo | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccSVPW (kEplObdAccStore | kEplObdAccVar | 0 | kEplObdAccPdo | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccSVPRW (kEplObdAccStore | kEplObdAccVar | 0 | kEplObdAccPdo | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
#define kEplObdAccSVGR (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | 0 | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccSVGW (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | 0 | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccSVGRW (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | 0 | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
#define kEplObdAccSVGPR (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0 | 0 | kEplObdAccRead)
|
|
#define kEplObdAccSVGPW (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0 | kEplObdAccWrite | 0 )
|
|
#define kEplObdAccSVGPRW (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0 | kEplObdAccWrite | kEplObdAccRead)
|
|
|
|
typedef unsigned int tEplObdSize; // For all objects as objects size are used an unsigned int.
|
|
|
|
// -------------------------------------------------------------------------
|
|
// types for data types defined in DS301
|
|
// -------------------------------------------------------------------------
|
|
|
|
// types of objects in object dictionary
|
|
// DS-301 defines these types as u16
|
|
typedef enum {
|
|
// types which are always supported
|
|
kEplObdTypBool = 0x0001,
|
|
|
|
kEplObdTypInt8 = 0x0002,
|
|
kEplObdTypInt16 = 0x0003,
|
|
kEplObdTypInt32 = 0x0004,
|
|
kEplObdTypUInt8 = 0x0005,
|
|
kEplObdTypUInt16 = 0x0006,
|
|
kEplObdTypUInt32 = 0x0007,
|
|
kEplObdTypReal32 = 0x0008,
|
|
kEplObdTypVString = 0x0009,
|
|
kEplObdTypOString = 0x000A,
|
|
kEplObdTypDomain = 0x000F,
|
|
|
|
kEplObdTypInt24 = 0x0010,
|
|
kEplObdTypUInt24 = 0x0016,
|
|
|
|
kEplObdTypReal64 = 0x0011,
|
|
kEplObdTypInt40 = 0x0012,
|
|
kEplObdTypInt48 = 0x0013,
|
|
kEplObdTypInt56 = 0x0014,
|
|
kEplObdTypInt64 = 0x0015,
|
|
kEplObdTypUInt40 = 0x0018,
|
|
kEplObdTypUInt48 = 0x0019,
|
|
kEplObdTypUInt56 = 0x001A,
|
|
kEplObdTypUInt64 = 0x001B,
|
|
kEplObdTypTimeOfDay = 0x000C,
|
|
kEplObdTypTimeDiff = 0x000D
|
|
} tEplObdType;
|
|
// other types are not supported in this version
|
|
|
|
// -------------------------------------------------------------------------
|
|
// types for data types defined in DS301
|
|
// -------------------------------------------------------------------------
|
|
|
|
typedef unsigned char tEplObdBoolean; // 0001
|
|
typedef signed char tEplObdInteger8; // 0002
|
|
typedef signed short int tEplObdInteger16; // 0003
|
|
typedef signed long tEplObdInteger32; // 0004
|
|
typedef unsigned char tEplObdUnsigned8; // 0005
|
|
typedef unsigned short int tEplObdUnsigned16; // 0006
|
|
typedef unsigned long tEplObdUnsigned32; // 0007
|
|
typedef float tEplObdReal32; // 0008
|
|
typedef unsigned char tEplObdDomain; // 000F
|
|
typedef signed long tEplObdInteger24; // 0010
|
|
typedef unsigned long tEplObdUnsigned24; // 0016
|
|
|
|
typedef s64 tEplObdInteger40; // 0012
|
|
typedef s64 tEplObdInteger48; // 0013
|
|
typedef s64 tEplObdInteger56; // 0014
|
|
typedef s64 tEplObdInteger64; // 0015
|
|
|
|
typedef u64 tEplObdUnsigned40; // 0018
|
|
typedef u64 tEplObdUnsigned48; // 0019
|
|
typedef u64 tEplObdUnsigned56; // 001A
|
|
typedef u64 tEplObdUnsigned64; // 001B
|
|
|
|
typedef double tEplObdReal64; // 0011
|
|
|
|
typedef tTimeOfDay tEplObdTimeOfDay; // 000C
|
|
typedef tTimeOfDay tEplObdTimeDifference; // 000D
|
|
|
|
// -------------------------------------------------------------------------
|
|
// structur for defining a variable
|
|
// -------------------------------------------------------------------------
|
|
// -------------------------------------------------------------------------
|
|
typedef enum {
|
|
kVarValidSize = 0x01,
|
|
kVarValidData = 0x02,
|
|
// kVarValidCallback = 0x04,
|
|
// kVarValidArg = 0x08,
|
|
|
|
kVarValidAll = 0x03 // currently only size and data are implemented and used
|
|
} tEplVarParamValid;
|
|
|
|
typedef tEplKernel(*tEplVarCallback) (CCM_DECL_INSTANCE_HDL_ void *pParam_p);
|
|
|
|
typedef struct {
|
|
tEplVarParamValid m_ValidFlag;
|
|
unsigned int m_uiIndex;
|
|
unsigned int m_uiSubindex;
|
|
tEplObdSize m_Size;
|
|
void *m_pData;
|
|
// tEplVarCallback m_fpCallback;
|
|
// void * m_pArg;
|
|
|
|
} tEplVarParam;
|
|
|
|
typedef struct {
|
|
void *m_pData;
|
|
tEplObdSize m_Size;
|
|
/*
|
|
#if (EPL_PDO_USE_STATIC_MAPPING == FALSE)
|
|
tEplVarCallback m_fpCallback;
|
|
void * m_pArg;
|
|
#endif
|
|
*/
|
|
} tEplObdVarEntry;
|
|
|
|
typedef struct {
|
|
tEplObdSize m_Size;
|
|
u8 *m_pString;
|
|
|
|
} tEplObdOString; // 000C
|
|
|
|
typedef struct {
|
|
tEplObdSize m_Size;
|
|
char *m_pString;
|
|
} tEplObdVString; // 000D
|
|
|
|
typedef struct {
|
|
tEplObdSize m_Size;
|
|
char *m_pDefString; // $$$ d.k. it is unused, so we could delete it
|
|
char *m_pString;
|
|
|
|
} tEplObdVStringDef;
|
|
|
|
typedef struct {
|
|
tEplObdSize m_Size;
|
|
u8 *m_pDefString; // $$$ d.k. it is unused, so we could delete it
|
|
u8 *m_pString;
|
|
|
|
} tEplObdOStringDef;
|
|
|
|
//r.d. parameter struct for changing object size and/or pointer to data of Strings or Domains
|
|
typedef struct {
|
|
tEplObdSize m_DownloadSize; // download size from SDO or APP
|
|
tEplObdSize m_ObjSize; // current object size from OD - should be changed from callback function
|
|
void *m_pData; // current object ptr from OD - should be changed from callback function
|
|
|
|
} tEplObdVStringDomain; // 000D
|
|
|
|
// ============================================================================
|
|
// types
|
|
// ============================================================================
|
|
// -------------------------------------------------------------------------
|
|
// subindexstruct
|
|
// -------------------------------------------------------------------------
|
|
|
|
// Change not the order for this struct!!!
|
|
typedef struct {
|
|
unsigned int m_uiSubIndex;
|
|
tEplObdType m_Type;
|
|
tEplObdAccess m_Access;
|
|
void *m_pDefault;
|
|
void *m_pCurrent; // points always to RAM
|
|
|
|
} tEplObdSubEntry;
|
|
|
|
// r.d.: has always to be because new OBD-Macros for arrays
|
|
typedef tEplObdSubEntry *tEplObdSubEntryPtr;
|
|
|
|
// -------------------------------------------------------------------------
|
|
// callback function for objdictionary modul
|
|
// -------------------------------------------------------------------------
|
|
|
|
// parameters for callback function
|
|
typedef struct {
|
|
tEplObdEvent m_ObdEvent;
|
|
unsigned int m_uiIndex;
|
|
unsigned int m_uiSubIndex;
|
|
void *m_pArg;
|
|
u32 m_dwAbortCode;
|
|
|
|
} tEplObdCbParam;
|
|
|
|
// define type for callback function: pParam_p points to tEplObdCbParam
|
|
typedef tEplKernel(*tEplObdCallback) (CCM_DECL_INSTANCE_HDL_ tEplObdCbParam *pParam_p);
|
|
|
|
// do not change the order for this struct!!!
|
|
|
|
typedef struct {
|
|
unsigned int m_uiIndex;
|
|
tEplObdSubEntryPtr m_pSubIndex;
|
|
unsigned int m_uiCount;
|
|
tEplObdCallback m_fpCallback; // function is called back if object access
|
|
|
|
} tEplObdEntry;
|
|
|
|
// allways pointer
|
|
typedef tEplObdEntry *tEplObdEntryPtr;
|
|
|
|
// -------------------------------------------------------------------------
|
|
// structur to initialize OBD module
|
|
// -------------------------------------------------------------------------
|
|
|
|
typedef struct {
|
|
tEplObdEntryPtr m_pPart;
|
|
tEplObdEntryPtr m_pManufacturerPart;
|
|
tEplObdEntryPtr m_pDevicePart;
|
|
|
|
#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE))
|
|
|
|
tEplObdEntryPtr m_pUserPart;
|
|
|
|
#endif
|
|
|
|
} tEplObdInitParam;
|
|
|
|
// -------------------------------------------------------------------------
|
|
// structur for parameters of STORE RESTORE command
|
|
// -------------------------------------------------------------------------
|
|
|
|
typedef struct {
|
|
tEplObdCommand m_bCommand;
|
|
tEplObdPart m_bCurrentOdPart;
|
|
void *m_pData;
|
|
tEplObdSize m_ObjSize;
|
|
|
|
} tEplObdCbStoreParam;
|
|
|
|
typedef tEplKernel(*tInitTabEntryCallback) (void *pTabEntry_p, unsigned int uiObjIndex_p);
|
|
|
|
typedef tEplKernel(*tEplObdStoreLoadObjCallback) (CCM_DECL_INSTANCE_HDL_ tEplObdCbStoreParam *pCbStoreParam_p);
|
|
|
|
// -------------------------------------------------------------------------
|
|
// this stucture is used for parameters for function ObdInitModuleTab()
|
|
// -------------------------------------------------------------------------
|
|
typedef struct {
|
|
unsigned int m_uiLowerObjIndex; // lower limit of ObjIndex
|
|
unsigned int m_uiUpperObjIndex; // upper limit of ObjIndex
|
|
tInitTabEntryCallback m_fpInitTabEntry; // will be called if ObjIndex was found
|
|
void *m_pTabBase; // base address of table
|
|
unsigned int m_uiEntrySize; // size of table entry // 25-feb-2005 r.d.: expansion from u8 to u16 necessary for PDO bit mapping
|
|
unsigned int m_uiMaxEntries; // max. tabel entries
|
|
|
|
} tEplObdModulTabParam;
|
|
|
|
//-------------------------------------------------------------------
|
|
// enum for function EplObdSetNodeId
|
|
//-------------------------------------------------------------------
|
|
typedef enum {
|
|
kEplObdNodeIdUnknown = 0x00, // unknown how the node id was set
|
|
kEplObdNodeIdSoftware = 0x01, // node id set by software
|
|
kEplObdNodeIdHardware = 0x02 // node id set by hardware
|
|
} tEplObdNodeIdType;
|
|
|
|
// ============================================================================
|
|
// global variables
|
|
// ============================================================================
|
|
|
|
// ============================================================================
|
|
// public functions
|
|
// ============================================================================
|
|
|
|
#endif // #ifndef _EPLOBD_H_
|