diff --git a/.gitignore b/.gitignore index c6127b3..3d0e645 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,9 @@ -# Prerequisites -*.d - # Object files *.o *.ko *.obj *.elf -# Linker output -*.ilk -*.map -*.exp - # Precompiled Headers *.gch *.pch @@ -25,7 +17,7 @@ # Shared objects (inc. Windows DLLs) *.dll *.so -*.so.* +#*.so.* *.dylib # Executables @@ -39,14 +31,18 @@ # Debug files *.dSYM/ *.su -*.idb -*.pdb -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf +# CMake files +build +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +CMakeScripts +Ignore +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +_deps diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a0e6dc8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,28 @@ +cmake_minimum_required(VERSION 3.7) +project(Cnomicon) +set(CMAKE_INSTALL_PREFIX /usr/local/cnomicon) + +# list of header files +set(SUB_DIRS + src daemons #tests apps utils + ) + +foreach(SUB_DIR ${SUB_DIRS}) + add_subdirectory(${SUB_DIR}) +endforeach() + +# installs +file(GLOB BIN_SCRIPTS "bin-scripts/*") +file(GLOB SBIN_SCRIPTS "sbin-scripts/*") + +install(FILES ${BIN_SCRIPTS} + DESTINATION bin + PERMISSIONS WORLD_EXECUTE WORLD_READ OWNER_WRITE +) +install (FILES ${SBIN_SCRIPTS} + DESTINATION sbin + PERMISSIONS WORLD_EXECUTE WORLD_READ OWNER_WRITE +) + +install(DIRECTORY include/ DESTINATION include) +install(DIRECTORY lib/ DESTINATION lib) diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..7d43cce --- /dev/null +++ b/Doxyfile @@ -0,0 +1,278 @@ +# Doxyfile 1.5.1 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "ProbeStar Telematics Software" +PROJECT_NUMBER = +OUTPUT_DIRECTORY = doc/ +CREATE_SUBDIRS = YES +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = /home/nprobert/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = include \ + src \ + apps \ + daemons +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.PY +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = YES +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = YES +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = YES +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = YES +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = YES +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = YES +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = YES +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = YES diff --git a/README b/README new file mode 100644 index 0000000..e69de29 diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt new file mode 100644 index 0000000..a790793 --- /dev/null +++ b/apps/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.7) +project(Cnomicon) + +# list of header files +set(SUB_DIRS + ) + +foreach(SUB_DIR ${SUB_DIRS}) + add_subdirectory(${SUB_DIR}) +endforeach() diff --git a/apps/bin b/apps/bin new file mode 120000 index 0000000..19f285a --- /dev/null +++ b/apps/bin @@ -0,0 +1 @@ +../bin \ No newline at end of file diff --git a/apps/include b/apps/include new file mode 120000 index 0000000..f5030fe --- /dev/null +++ b/apps/include @@ -0,0 +1 @@ +../include \ No newline at end of file diff --git a/apps/lib b/apps/lib new file mode 120000 index 0000000..dc598c5 --- /dev/null +++ b/apps/lib @@ -0,0 +1 @@ +../lib \ No newline at end of file diff --git a/bin-scripts/can-down b/bin-scripts/can-down new file mode 100755 index 0000000..18888cd --- /dev/null +++ b/bin-scripts/can-down @@ -0,0 +1,6 @@ +#!/bin/sh + +killall candump 2> /dev/null + +ifconfig can0 down 2> /dev/null +ifconfig vcan0 down 2> /dev/null diff --git a/bin-scripts/can-dump b/bin-scripts/can-dump new file mode 100755 index 0000000..661b561 --- /dev/null +++ b/bin-scripts/can-dump @@ -0,0 +1,5 @@ +#!/bin/sh + +can-info +candump -cae can0 + diff --git a/bin-scripts/can-log-replay b/bin-scripts/can-log-replay new file mode 100755 index 0000000..9aec35d --- /dev/null +++ b/bin-scripts/can-log-replay @@ -0,0 +1,5 @@ +#/bin/sh + +echo "can-logging $1 replaying to CAN any indefinitely" +canplayer -l i -I $@ + diff --git a/bin-scripts/can-log-start b/bin-scripts/can-log-start new file mode 100755 index 0000000..10946eb --- /dev/null +++ b/bin-scripts/can-log-start @@ -0,0 +1,26 @@ +#!/bin/sh + +# log file name based on time +TIMESTAMP=`date +'%Y-%m-%d_%H%M%S'` +LOGDIR=. +LOGFILE=$LOGDIR/candump-$TIMESTAMP.log +PIDDIR=. +PIDFILE=$PIDDIR/can-log.pid +IF=any + +# log directory +if [ ! -d $LOGDIR ]; then + echo "Please run cnomicon-setup!" + exit 1 +fi + +# kill if already running (restart) +if [ -f $PIDFILE ]; then + sudo pkill -F $PIDFILE +fi + +# let 'er rip +candump -L -l any > $LOGFILE & +echo $! > $PIDFILE + +echo "CANdump logging started to $LOGFILE" diff --git a/bin-scripts/can-log-stop b/bin-scripts/can-log-stop new file mode 100755 index 0000000..3c36647 --- /dev/null +++ b/bin-scripts/can-log-stop @@ -0,0 +1,12 @@ +#!/bin/sh + +# log file name based on time +PIDDIR=. +PIDFILE=$PIDDIR/can-log.pid + +# kill if already running (restart) +if [ -f $PIDFILE ]; then + pkill -F $PIDFILE + echo "CANdump logging stopped" + rm -f $PIDFILE +fi diff --git a/bin-scripts/can-record b/bin-scripts/can-record new file mode 100755 index 0000000..22aefb5 --- /dev/null +++ b/bin-scripts/can-record @@ -0,0 +1,5 @@ +#!/bin/sh + +can-info +candump -l can0 + diff --git a/bin-scripts/can-replay b/bin-scripts/can-replay new file mode 100755 index 0000000..cfc70b2 --- /dev/null +++ b/bin-scripts/can-replay @@ -0,0 +1,4 @@ +#!/bin/sh + +canplayer -I $1 $2 $3 $4 $5 $6 $7 $8 $9 + diff --git a/bin-scripts/can-status b/bin-scripts/can-status new file mode 100755 index 0000000..29280fd --- /dev/null +++ b/bin-scripts/can-status @@ -0,0 +1,8 @@ +#!/bin/sh + +lspcan +ls -l /dev/pcan* +cat /proc/pcan +ifconfig can0 +ifconfig vcan0 +can-info diff --git a/bin-scripts/can-up b/bin-scripts/can-up new file mode 100755 index 0000000..7f07273 --- /dev/null +++ b/bin-scripts/can-up @@ -0,0 +1,13 @@ +#!/bin/sh + +# PCAN +echo "Can0" +modprobe pcan +ip link set can0 up type can bitrate 500000 +ifconfig can0 up + +# VCAN +echo "Vcan0" +modprobe vcan +ip link add dev vcan0 type vcan +ip link set up vcan0 diff --git a/bin-scripts/nmea2kml b/bin-scripts/nmea2kml new file mode 100755 index 0000000..c186ba5 --- /dev/null +++ b/bin-scripts/nmea2kml @@ -0,0 +1,9 @@ +#!/bin/sh + +for i in $@ +do + BAS=`basename $i .nmea` + KML=$BAS.kml + gpsbabel -t -i nmea -f $i -o kml,units=m -f $KML +done + diff --git a/bin/keepme b/bin/keepme new file mode 100644 index 0000000..e69de29 diff --git a/cbuild.sh b/cbuild.sh new file mode 100755 index 0000000..3e4b9f9 --- /dev/null +++ b/cbuild.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +mkdir -p build lib +cd build +cmake .. +make diff --git a/cclean.sh b/cclean.sh new file mode 100755 index 0000000..e4de6ed --- /dev/null +++ b/cclean.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +rm -rf `find . -name CMakeCache.txt` +rm -rf `find . -name CMakeFiles` +rm -rf `find . -name cmake_install.cmake` +rm -rf `find . -name Makefile` diff --git a/cinstall.sh b/cinstall.sh new file mode 100755 index 0000000..7e37b49 --- /dev/null +++ b/cinstall.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cd build +sudo make install | grep -v "Up-to-date:" diff --git a/daemons/.gitignore b/daemons/.gitignore new file mode 100644 index 0000000..ef60b68 --- /dev/null +++ b/daemons/.gitignore @@ -0,0 +1,7 @@ +cand/cand +gpsd/gpsd +logd/logd +rtcmd/rtcmd +seriald/seriald +stdiod/stdiod +trackd/trackd diff --git a/daemons/CMakeLists.txt b/daemons/CMakeLists.txt new file mode 100644 index 0000000..0f388ab --- /dev/null +++ b/daemons/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.7) +project(Cnomicon) +set(CMAKE_INSTALL_PREFIX ../bin) + +# list of header files +set(SUB_DIRS + logd seriald stdiod cand gpsd rtcmd + ) + +foreach(SUB_DIR ${SUB_DIRS}) + add_subdirectory(${SUB_DIR}) +endforeach() diff --git a/daemons/cand/CMakeLists.txt b/daemons/cand/CMakeLists.txt new file mode 100644 index 0000000..206898e --- /dev/null +++ b/daemons/cand/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME cand) +project(Cnomicon-Daemon) +set(TARGET ${NAME}) +set(CMAKE_INSTALL_PREFIX ..) + +# includes +include_directories( + /usr/include/libxml2 + ../include/libcan++ ../include/libgps++ ../include/libnet++ ../include) +link_directories(../lib) +link_libraries(can++ gps++ net++ net emb kmlbase kmldom kmlengine xml2 pthread rt) + +# sources +set(SRCS + CanDaemon.cpp + CanListener.cpp + CanRxListener.cpp + CanTxGenerator.cpp + ) + +# executables +add_executable(${TARGET} ${TARGET}.cpp ${SRCS}) + +install(TARGETS ${TARGET} DESTINATION sbin) diff --git a/daemons/cand/CanDaemon.cpp b/daemons/cand/CanDaemon.cpp new file mode 100644 index 0000000..7f940dc --- /dev/null +++ b/daemons/cand/CanDaemon.cpp @@ -0,0 +1,138 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CanDaemon.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +typedef struct _Can2DsrcMap { + int Signal; + double Scale; + int Offset; +} Can2DsrcMap; + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +CanDaemon::CanDaemon() +{ + /* open a log file */ + log_open( CAND_NAME ); + SetTimeout( 1000000L ); +} + +CanDaemon::~CanDaemon() +{ +} + +/* Server *******************************************************************/ + +void CanDaemon::DaemonStartup(void) +{ + // start threads and detach + Vehicle.Start( &Can, true ); // Receive CAN messages + Generator.Start( NULL, true ); // Send TX packets + + Receiver.Caster = this; + Receiver.Start( NULL, true ); // Receive RX and TX Echo packets +} + +void CanDaemon::DaemonShutdown(void) +{ + Receiver.Stop(); + Generator.Stop(); + Vehicle.Stop(); +} + +int CanDaemon::ServerSocket(void) +{ + int nrec=0; + + return nrec; +} + +int CanDaemon::ServerTimeout(void) +{ + if ( NumClients() ) + { + // status + // char str[128]; + // int n = snprintf( str, sizeof(str), "CANd: %ld sent, %ld recv\n", + // Generator.SentCount(), Echo.RecvCount() ); + // ClientCast( str, n ); + } + + return 0; +} + +int CanDaemon::ClientIn( int sock, const char *buf, int n ) +{ + // commands? + + + return 0; +} + +void CanDaemon::ClientCast( const char *buf, int n ) +{ + TcpServer::ClientCast( buf, n ); +} + +/* other stuff **************************************************************/ + +int CanDaemon::CanOpen( const char *uri ) +{ + return Can.CanOpen( uri ); +} diff --git a/daemons/cand/CanDaemon.h b/daemons/cand/CanDaemon.h new file mode 100644 index 0000000..2109a79 --- /dev/null +++ b/daemons/cand/CanDaemon.h @@ -0,0 +1,76 @@ +//**************************************************************************** +// Copyright (C) 2012 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __CanDaemon__ +#define __CanDaemon__ + +/* includes *****************************************************************/ + +#include "TcpDaemon.h" + +#include "CanDatabase.h" + +#include "UdpCaster.h" + +#include "CanListener.h" +#include "CanTxGenerator.h" +#include "CanRxListener.h" + +/* defines ******************************************************************/ + +/* BSMPd */ +#define CAND_NAME "cand" +#define CAND_SERVICE "cand" +#define CAND_PORT "2946" + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class CanDaemon : public TcpDaemon { + // public data +public: + CanTxGenerator Generator; + CanRxListener Receiver; + CanListener Vehicle; + + CanSocket Can; + + // private data +private: + + // public methods +public: + // constructors + CanDaemon(); + + // destructor + virtual ~CanDaemon(); + + // virtual functions + void DaemonStartup(void); + void DaemonShutdown(void); + int ClientIn( int sock, const char *buf, int n ); + void ClientCast( const char *buf, int n ); + int ServerSocket( void ); + int ServerTimeout( void ); + + // public methods + int CanOpen( const char *can ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/daemons/cand/CanListener.cpp b/daemons/cand/CanListener.cpp new file mode 100644 index 0000000..398d026 --- /dev/null +++ b/daemons/cand/CanListener.cpp @@ -0,0 +1,321 @@ +// +// Linux Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "libxml/parser.h" +#include "libxml/tree.h" + +#include "CanSignal.h" +#include "CanListener.h" +#include "CanRxListener.h" +#include "CanTxGenerator.h" + +#include "CAN_Packet.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +#define MAX_DSRC_PARSERS 32 + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +// write into the TX buffer +CAN_Packet Can = {}; + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +static int num_parsers = 0; + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +CanListener::CanListener() +{ + m_accel_from_speed = false; + m_debug = false; + m_reverse = false; +} + +CanListener::~CanListener() +{ +} + +bool CanListener::CanParser( CanSignal *pSig, const unsigned char *data ) +{ + // successful and valid conversion with new data + if (!pSig->isNew) + return false; + + // data has changed + // if ( m_debug ) + // printf( "%s (%x) = %g (%ld)\n", pSig->Name.c_str(), pSig->Address, dValue, lValue ); + + // match CAN signal to CAN_Packet an copy + + return true; +} + +int CanListener::CanMapping( const char *file ) +{ + // parse XML + xmlDocPtr doc = NULL; + xmlNodePtr root = NULL; + + /*parse the file and get the DOM */ + if ( file ) + { + if ( !(doc = xmlParseFile( file )) ) + { + log_printf( "CANd: %s read error", file ); + return -1; + } + } + else + { // m/s^2 + + log_printf( "CANd: %s file not found", file ); + return -1; + } + + xmlChar *dbc = NULL; + int error = 0; + + // Get the root element node + root = xmlDocGetRootElement(doc); + if ( !root ) + return -1; + // only + if ( xmlStrcmp( root->name, (const xmlChar *)"HeartBeat" ) != 0 ) + return -1; + + /* walk the tree */ + xmlNodePtr node = root->xmlChildrenNode; + + while ( node ) + { + if ( xmlStrcmp( node->name, (const xmlChar *)"text" ) == 0 ) + ; + else if ( xmlStrcmp( node->name, (const xmlChar *)"HeartBeat" ) == 0 ) + ; // + else if ( xmlStrcmp( node->name, (const xmlChar *)"Description" ) == 0 ) + ; + else if ( xmlStrcmp( node->name, (const xmlChar *)"Database" ) == 0 ) + { + // database file name + dbc = xmlNodeGetContent( node ); + } + else if ( xmlStrcmp( node->name, (const xmlChar *)"CAN" ) == 0 ) + { + xmlNodePtr item = node->xmlChildrenNode; + + while ( item ) + { + // CAN Signals + if ( xmlStrcmp( item->name, (const xmlChar *)"text" ) == 0 ) + ; + else if ( xmlStrcmp( item->name, (const xmlChar *)"Message" ) == 0 ) + { + // get name and address + xmlNodePtr message = item->xmlChildrenNode; + xmlChar *name = NULL; + xmlChar *address = NULL; + u_long addr = 0; + + while ( message ) + { + if ( xmlStrcmp( message->name, (const xmlChar *)"text" ) == 0 ) + ; + else if ( xmlStrcmp( message->name, (const xmlChar *)"Name" ) == 0 ) + name = xmlNodeGetContent( message ); + else if ( xmlStrcmp( message->name, (const xmlChar *)"Address" ) == 0 ) + address = xmlNodeGetContent( message ); + + message = message->next; + } + + // add filter by name and address + if ( address ) + addr = strtol( (char *)address, NULL, 10 ); + if ( name ) + AddMsgFilter( (char *)name, addr, addr ); + } + else if ( xmlStrcmp( item->name, (const xmlChar *)"Signal" ) == 0 ) + { + // get name and address + xmlNodePtr signal = item->xmlChildrenNode; + xmlChar *name = NULL; + xmlChar *address = NULL; + u_long addr = 0; + + while ( signal ) + { + if ( xmlStrcmp( signal->name, (const xmlChar *)"text" ) == 0 ) + ; + else if ( xmlStrcmp( signal->name, (const xmlChar *)"Name" ) == 0 ) + name = xmlNodeGetContent( signal ); + else if ( xmlStrcmp( signal->name, (const xmlChar *)"Address" ) == 0 ) + address = xmlNodeGetContent( signal ); + + signal = signal->next; + } + + // add filter by name and address + if ( address ) + addr = strtol( (char *)address, NULL, 10 ); + if ( name ) + AddSigFilter( (char *)name, addr, addr ); + } + item = item->next; + } + + } + else + { + error++; + break; + } + node = node->next; + } + + // Load the database after the filters are loaded and parse everything! + if ( dbc ) + { + int n = LoadDatabase( (char*)dbc ); + + if (n < 0) + { + log_printf( "CANd: Database \"%s\" open failed!", (char*)dbc ); + error = 1; + } + } + else + { + log_printf( "CANd: No database!" ); + error = 1; + } + + /* free the document */ + xmlFreeDoc(doc); + xmlCleanupParser(); + + // errors parsing + if ( error ) + return -1; + + if ( num_parsers ) + { + log_printf( "CANd: Parsers found = %d", num_parsers ); + } + else + { + log_printf( "CANd: Errors found or no work to do (no CAN signals)!" ); + return 0; + } + + return num_parsers; +} + +void *CanListener::Run(void *arg) +{ + pCan = (CanSocket*)arg; + + // wait till other threads have time to start + sleep(1); + + // subscribed marked signals + SubscribeCan( pCan ); + pCan->Blocking(0); // does this even work? + + // setup for select() + fd_set rfds; + struct timeval tv; + int retval; + FD_ZERO(&rfds); + + // run forever + while(1) + { + // select() + FD_SET(pCan->m_sock, &rfds); + tv.tv_sec = 0; + tv.tv_usec = 10000; + retval = select(pCan->m_sock+1, &rfds, NULL, NULL, &tv); + + if (retval == -1) + perror("select()"); + else if (retval) + { + CanFrame frame[20]; + int n, sigs = 0; + + // frame from CAN device (will block on more than 1) + if ( (n = pCan->CanRawRead( frame, sizeof(frame)/sizeof(CanFrame) )) > 0 ) + { + for ( int i=0 ; iRead(&frame[i]) ) + { + for (u_int k=0 ; kSignals.size() ; k++) + { + if ( CanParser( Messages[j]->Signals[k], frame[i].data ) ) + sigs++; + } + break; + } + } + } + } + } + } + + return NULL; +} diff --git a/daemons/cand/CanListener.h b/daemons/cand/CanListener.h new file mode 100644 index 0000000..b778c03 --- /dev/null +++ b/daemons/cand/CanListener.h @@ -0,0 +1,70 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __CanListener__ +#define __CanListener__ + +/* includes *****************************************************************/ + +#include + +#include + +#include "netlib.h" + +#include "Thread.h" +#include "Mutex.h" + +#include "UdpCaster.h" + +#include "CanSocket.h" +#include "CanDatabase.h" + +#include "CanTxGenerator.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class CanListener : public Thread, public CanDatabase { + // public data +public: + bool m_accel_from_speed; + bool m_debug; + bool m_reverse; + + // protected data +protected: + CanSocket *pCan; + + // private data +private: + + // private methods + + // public methods +public: + // constructors + CanListener(); + + // destructor + virtual ~CanListener(); + + // public methods + bool CanParser( CanSignal *pSig, const unsigned char * ); + int CanMapping( const char *file ); + + // virtual overrides + void *Run(void*); + +private: + // signal catchers (do not override) +}; + +#endif diff --git a/daemons/cand/CanRxListener.cpp b/daemons/cand/CanRxListener.cpp new file mode 100644 index 0000000..392ce10 --- /dev/null +++ b/daemons/cand/CanRxListener.cpp @@ -0,0 +1,107 @@ +// +// Linux Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ClockTimer.h" +#include "CanRxListener.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +extern CAN_Packet Can; + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +CanRxListener::CanRxListener() +{ + m_debug = false; + nTxEcho = nRxBsm = nRxOem = 0; +} + +CanRxListener::~CanRxListener() +{ +} + +// listener hooks +void *CanRxListener::Run(void *arg) +{ + unsigned char buf[2048]; + + while(1) + { + // WSU RX or TX Echo packets + int nread = Recv( buf, sizeof(buf) ); + + if ( nread == 0 ) + continue; + + char timebuf[32]; + + if ( Logging.IsLogging() ) + { + struct timeval tv; + struct tm tm; + gettimeofday( &tv, NULL ); + gmtime_r( &tv.tv_sec, &tm ); + sprintf( timebuf, "%4d/%02d/%02d-%02d:%02d:%02d.%03ld", + tm.tm_year+1900, tm.tm_mon, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec, + tv.tv_usec / 1000L + ); + } + + // incoming + } + + return NULL; +} + diff --git a/daemons/cand/CanRxListener.h b/daemons/cand/CanRxListener.h new file mode 100644 index 0000000..d98430c --- /dev/null +++ b/daemons/cand/CanRxListener.h @@ -0,0 +1,67 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __CanRxListener__ +#define __CanRxListener__ + +/* includes *****************************************************************/ + +#include +#include "netlib.h" + +#include "Thread.h" +#include "Mutex.h" + +#include "GpsPoint.h" +#include "UdpThread.h" +#include "TcpServer.h" +#include "UdpCaster.h" +#include "LogData.h" + +#include "CAN_Packet.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class CanRxListener : public UdpThread { + // public data +public: + bool m_debug; + TcpServer *Caster; + UdpCaster Forward; + LogData Logging; + + // protected data +protected: + int nTxEcho; + int nRxBsm; + int nRxOem; + + // private data +private: + + // private methods + + // public methods +public: + // constructors + CanRxListener(); + + // destructor + virtual ~CanRxListener(); + + // virtual overrides + void *Run(void*); + +private: + // signal catchers (do not override) +}; + +#endif diff --git a/daemons/cand/CanTxGenerator.cpp b/daemons/cand/CanTxGenerator.cpp new file mode 100644 index 0000000..da81056 --- /dev/null +++ b/daemons/cand/CanTxGenerator.cpp @@ -0,0 +1,139 @@ +// +// Linux Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ClockTimer.h" +#include "CanTxGenerator.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +#ifndef min +#define min(A,B) ((A)<(B)?(A):(B)) +#endif + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +extern CAN_Packet Can; + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +static CanTxGenerator *Self = NULL; + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +CanTxGenerator::CanTxGenerator() +{ + Self = this; + m_period = 100; +} + +CanTxGenerator::~CanTxGenerator() +{ +} + +// generator itself +void *CanTxGenerator::Run(void *arg) +{ + ClockTimer Loop; + + Loop.Start( m_period * 1000 ); // usec + + while (1) + { + + // send out + SendTo( &Can, sizeof(Can) ); + + // log this message // log this message + if ( Logging.IsLogging() ) + { + struct timeval tv; + struct tm tm; + gettimeofday( &tv, NULL ); + gmtime_r( &tv.tv_sec, &tm ); + char buf[32]; + sprintf( buf, "%4d/%2d/%2d-%2d:%2d:%2d.%03ld", + tm.tm_year+1900, tm.tm_mon, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec, + tv.tv_usec / 1000L + ); + + Logging.LogPrintf( "%s,%s,%f,%f,%f,%f,%u,%f,%u,%f,%f,%f,%f,%f,%u,%u,%u,%f,%u,%f", + buf, + "TX", + 0.0, + 0.0, + 0.0, + 0.0, + 0, + Can.fSpeed, + Can.byTransmission, + Can.fSteering, + Can.fAccelLongitudinal, + Can.fAccelLateral, + Can.fAccelVertical, + Can.fYawRate, + Can.wBrakeSystemStatus, + Can.wEventFlags, + Can.byExteriorLights, + Can.fThrottle, + Can.byFrontWipers, + 0.0 + ); + } + + // 100 msec, leave a little time to do the work + Loop.Sync(); + // msleep( m_period - 10L ); + + } + + return NULL; +} + diff --git a/daemons/cand/CanTxGenerator.h b/daemons/cand/CanTxGenerator.h new file mode 100644 index 0000000..729e625 --- /dev/null +++ b/daemons/cand/CanTxGenerator.h @@ -0,0 +1,60 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __CanTxGenerator__ +#define __CanTxGenerator__ + +/* includes *****************************************************************/ + +#include + +#include "Thread.h" +#include "Mutex.h" +#include "UdpCaster.h" +#include "UdpThread.h" +#include "LogData.h" + +#include "CAN_Packet.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class CanTxGenerator : public UdpThread { + // public data +public: + LogData Logging; + unsigned long m_period; + + // protected data +protected: + UdpClient *pCan; + + // private data +private: + + // public methods +public: + // constructors + CanTxGenerator(); + + // destructor + virtual ~CanTxGenerator(); + + // public methods + void SetPeriod(unsigned long period) {m_period=period;}; + + // virtual overrides + void *Run(void*); + + // private methods +private: +}; + +#endif diff --git a/daemons/cand/Infiniti_M37_JX35_ADAS.dbc b/daemons/cand/Infiniti_M37_JX35_ADAS.dbc new file mode 100644 index 0000000..5d7b708 --- /dev/null +++ b/daemons/cand/Infiniti_M37_JX35_ADAS.dbc @@ -0,0 +1,18862 @@ +VERSION "HIPBYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY9>>%%%94/'%**4YYY///" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: HB DTCO _6MTA eACT2 HMI IT_M_MCN ITS_HMI_CONT ASCD HAS SMB ANC AHL DSC IDM SBW EMCU LCU IT_M_LCN PBW PDM TCU AVM XX6 AIR_LEV OBC E_HPS DCM VCM PSS_SSS I_CON ShBW FFP SR ADAS eACT AT_OIL LBC MG_INV PTC BIC XCP_tool B_LSD E_PKB VDC USM TPMS TCS STRG SONAR SEC_E RENAULT RAS RADAR PSD PSB PUEH PBD OTHER METER LKC LKA LDW LC LASER ITMU IT_M IPDM42V I_KEY HVAC HCM ForceFauge EPS ENGST EHS ECM ECB e4WD E_SUS E_EOL DIU_TOBE DIFFLOCK DDR DCU DC CVT CONSULT CHECKER CGW BCU BCM42V BCM BC42V AT AFS ADP ACU ICC ABS MTA _4WD _4WAS RCU +VAL_TABLE_ LB_HEATSTOPMAIL_REQ_TCU 1 "Heat Stop Mail send request" 0 "No request" ; +VAL_TABLE_ LB_HEATSTARTMAIL_REQ_TCU 1 "Heat Start Mail send request" 0 "No request" ; +VAL_TABLE_ CLUTCHSW 3 "invalid" 2 "Not used" 1 "pedal pressed" 0 "pedal not pressed (clutched)" ; +VAL_TABLE_ FDTTD 3 "torq req can't be achieved" 2 "tran state prev torq req realize" 1 "exact torq req can't be achieved" 0 "normal" ; +VAL_TABLE_ FT_PASS_BELT_REM 3 "Not Used" 2 "Warning Level 2" 1 "Warning Level 1" 0 "No Warning" ; +VAL_TABLE_ DAS_Warn 1 "warning" 0 "No warning" ; +VAL_TABLE_ DAS_Attention_Level 15 "System Malfunction" 14 "System Stand by" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Level 8" 8 "Level 7" 7 "Level 6" 6 "Level 5" 5 "Level 4" 4 "Level 3" 3 "Level 2" 2 "Level 1" 1 "System OFF" 0 "No display" ; +VAL_TABLE_ SET_DR_AT 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ AirQualitySensorSensitivityStatu 7 "7" 6 "6" 5 "5" 4 "4" 3 "3" 2 "2" 1 "1" 0 "BLANK(Non display)" ; +VAL_TABLE_ ASSIST_SW 31 "Not Used" 30 "Not Used" 29 "Not Used" 28 "Navi_Coop ICC SW SW is pushed" 27 "BCITemp SW Back SW is pushed" 26 "BCI SW Back SW is pushed" 25 "BRKSensitivity Back SW is pushed" 24 "BRKSensitivity Next SW is pushed" 23 "Distance Back SW is pushed" 22 "Distance Next SW is pushed" 21 "SideIndBright Back SW is pushed" 20 "SideIndBright Next SW is pushed" 19 "Lane timing Back SW is pushed" 18 "Lane timing Next SW is pushed" 17 "Warning Volume Back SW is pushed" 16 "Warning Volume Next SW is pushed" 15 "BSI Switch is pushed" 14 "LDP Switch is pushed" 13 "DCA Switch is pushed" 12 "NaviCoopICC SW is pushed" 11 "SPDSetAssistASL SW is pushed" 10 "SPDSetAssistICC SW is pushed" 9 "TSR Switch is pushed" 8 "ACA Switch is pushed" 7 "DAS Switch is pushed" 6 "CAB Switch is pushed" 5 "IBA Switch is pushed" 4 "Not used" 3 "BSW Switch is pushed" 2 "LDW Switch is pushed" 1 "FCW Switch is pushed" 0 "No operation" ; +VAL_TABLE_ MSS_OFF_A_BW 1 "Disp 'BCI OFF' " 0 "No message" ; +VAL_TABLE_ MSS_MAL_A_BW 1 "Disp 'BCI malfunction' " 0 "No message" ; +VAL_TABLE_ MSS_MAL_A_FW 1 "Disp 'FCA malfunction' " 0 "No message" ; +VAL_TABLE_ MSS_MAL_D_BS 1 "Disp 'BSI malfunction' " 0 "No message" ; +VAL_TABLE_ MSS_MAL_D_LN 1 "Disp 'LDP malfunction' " 0 "No message" ; +VAL_TABLE_ MSS_MAL_D_FW 1 "Disp 'DCA malfunction' " 0 "No message" ; +VAL_TABLE_ MSS_SB_A_BW 1 "Disp 'BCI Side radar blocked'" 0 "No message" ; +VAL_TABLE_ MSS_SB_D_BS 1 "Disp 'BSI Side radar blocked'" 0 "No message" ; +VAL_TABLE_ MSS_SB_W_BS 1 "Disp 'BSW Side radar blocked'" 0 "No message" ; +VAL_TABLE_ MSS_C_D_BS 1 "BSI cancel" 0 "No display" ; +VAL_TABLE_ MSS_C_D_LN 1 "LDP cancel" 0 "No display" ; +VAL_TABLE_ MSS_C_D_FW 1 "DCA cancel" 0 "No display" ; +VAL_TABLE_ MSS_C_CC 1 "Cruise system cancel" 0 "No display" ; +VAL_TABLE_ MSS_CNCL_C 3 "Disp VDC OFF cancel MSG" 2 "Disp Snow mode active cancel MSG" 1 "Disp Slippery load cancel MSG" 0 "No display" ; +VAL_TABLE_ MSS_NO_W 1 "Disp NoSelectDrivingAids(WRN)MSG" 0 "No message" ; +VAL_TABLE_ MSS_NO_D 1 "Disp NoSelectDrivingAids(DYN)MSG" 0 "No message" ; +VAL_TABLE_ MSS_FB_A_FW 1 "Disp 'FCA Fr. radar blocked'" 0 "No message" ; +VAL_TABLE_ MSS_FB_D_FW 1 "Disp 'DCA Fr. radar blocked'" 0 "No message" ; +VAL_TABLE_ MSS_FB_W_FW 1 "Disp 'FCW Fr. radar blocked'" 0 "No message" ; +VAL_TABLE_ MSS_FB_CC 1 "Disp 'CRUISE Fr. radar blocked'" 0 "No message" ; +VAL_TABLE_ MSS_CH_D_BS 1 "Disp 'BSI Camera high temp.'" 0 "No message" ; +VAL_TABLE_ MSS_CH_D_LN 1 "Disp 'LDP Camera high temp.'" 0 "No message" ; +VAL_TABLE_ MSS_CH_W_LN 1 "Disp 'LDW Camera high temp.'" 0 "No message" ; +VAL_TABLE_ MSS_MAL_W_BS 1 "Disp 'BSW malfunction'" 0 "No message" ; +VAL_TABLE_ MSS_MAL_W_LN 1 "Disp 'LDW malfunction'" 0 "No message" ; +VAL_TABLE_ MSS_MAL_W_FW 1 "Disp 'FCW malfunction'" 0 "No message" ; +VAL_TABLE_ MSS_PH_A_FW 1 "Disp 'FCA Pedal High temp.'" 0 "No message" ; +VAL_TABLE_ MSS_PH_A_BW 1 "Disp 'BCI Pedal High temp.'" 0 "No message" ; +VAL_TABLE_ MSS_PH_D_FW 1 "Disp 'DCA Pedal High temp.'" 0 "No message" ; +VAL_TABLE_ SET_D_RR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_DCA_CUR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ STS_RR 7 "not used" 6 "not used" 5 "Display System Fail" 4 "Display Status Temporary Failure" 3 "Display Status Temporary OFF" 2 "Display Status ON" 1 "Display Status OFF" 0 "No setting" ; +VAL_TABLE_ SET_FR_SNS 3 "Display setting LATE" 2 "Display setting STANDARD" 1 "Display setting EARLY" 0 "No setting" ; +VAL_TABLE_ SET_FR_DST 3 "Display setting SHORT" 2 "Display setting MIDDLE" 1 "Display setting LONG" 0 "No setting" ; +VAL_TABLE_ SET_BS_BRT 3 "Display setting DARK" 2 "Display setting NORMAL" 1 "Display setting BRIGHT" 0 "No setting" ; +VAL_TABLE_ SET_LN_T 3 "Display setting LATE" 2 "Display setting STANDARD" 1 "Display setting EARLY" 0 "No setting" ; +VAL_TABLE_ SET_WARN_VOL 3 "Display setting High" 2 "Display setting Middle" 1 "Display setting Low" 0 "No setting" ; +VAL_TABLE_ SET_D_BS 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_D_LN 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_D_FR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_ICC_CUR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_ASL_SPD 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_ICC_SPD 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_W_TS 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_ACCEL_CNT 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_A_BR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_BA 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_W_BS 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_W_LN 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_W_FR 3 "Not used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ CLL_STS 1 "ITS status display" 0 "Not request" ; +VAL_TABLE_ STS_W_FW 3 "Display (Malfunction)" 2 "Display (Temporary OFF)" 1 "Display (System ON)" 0 "No Display" ; +VAL_TABLE_ FW_OBJ 1 "Curve" 0 "Forward Vehicle" ; +VAL_TABLE_ WRN_FW 1 "Warning Forward" 0 "No Display" ; +VAL_TABLE_ WRN_BS_R 1 "Warning right blind spot" 0 "No Display" ; +VAL_TABLE_ WRN_BS_L 1 "Warning left blind spot" 0 "No Display" ; +VAL_TABLE_ WRN_LN_R 1 "Warning right lane" 0 "No Display" ; +VAL_TABLE_ WRN_LN_L 1 "Warning left lane" 0 "No Display" ; +VAL_TABLE_ TGT_FW 3 "Display (Collision Warning)" 2 "Display (Approach Warning)" 1 "Display (Forward object) " 0 "No Display" ; +VAL_TABLE_ MOED_CC 1 "Intelligent Cruise Control mode" 0 "Auto Speed Control Device mode" ; +VAL_TABLE_ STS_CC 3 "Display (Malfunction)" 2 "Display (Temporary OFF)" 1 "Display (Cruise Control Mode ON)" 0 "No Display" ; +VAL_TABLE_ MSS_SR_B 7 "Disp BSI & BSW & BCI cancel MSG" 6 "Disp BSI & BSW cancel MSG" 5 "Disp BSI & BCI cancel MSG" 4 "Disp BSI cancel MSG" 3 "Disp BSW & BCI cancel MSG" 2 "Disp BSW cancel MSG" 1 "Disp BCI cancel MSG" 0 "No Display" ; +VAL_TABLE_ MSS_LC_H 7 "Disp LDP & LDW & BSI cancel MSG" 6 "Disp LDP & LDW cancel MSG" 5 "Disp LDP & BSI cancel MSG" 4 "Disp LDP cancel MSG" 3 "Disp LDW & BSI cancel MSG" 2 "Disp LDW cancel MSG" 1 "Disp BSI cancel MSG" 0 "No message" ; +VAL_TABLE_ MSS_B_R 3 "Disp VDC OFF cancel MSG" 2 "Disp Snow mode active cancel MSG" 1 "Disp Slippery load cancel MSG" 0 "No display" ; +VAL_TABLE_ MSS_B_C 3 "Disp ICC&DynDrvAssist cancel MSG" 2 "Disp ICC cancel MSG" 1 "Disp DynDrvAssist cancel MSG" 0 "No display " ; +VAL_TABLE_ MSS_FR_R 3 "Disp Weather condition MSG" 2 "Disp ElectromagnetInterfer MSG" 1 "Disp FrontRadar blocked MSG" 0 "No display " ; +VAL_TABLE_ MSS_FR_C 15 "Disp ICC&DCA&FCW&IBA cancel MSG" 14 "Disp ICC&DCA&FCW cancel MSG" 13 "Disp ICC&DCA&IBA cancel MSG" 12 "Disp ICC&DCA cancel MSG" 11 "Disp ICC&FCW&IBA cancel MSG" 10 "Disp ICC&FCW cancel MSG" 9 "Disp ICC&IBA cancel MSG" 8 "Disp ICC cancel MSG" 7 "Disp DCA&FCW&IBA cancel MSG" 6 "Disp DCA&FCW cancel MSG" 5 "Disp DCA&IBA cancel MSG" 4 "Disp DCA cancel MSG" 3 "Disp FCW&IBA cancel MSG" 2 "Disp FCW cancel MSG" 1 "Disp IBA cancel MSG" 0 "No display" ; +VAL_TABLE_ MSS_SR_D 1 "Display SideRadar deactivate MSG" 0 "No message" ; +VAL_TABLE_ MSS_FP_H 3 "Display BCI & DCA cancel message" 2 "Display DCA cancel message" 1 "Display BCI cancel message" 0 "No message" ; +VAL_TABLE_ SET_BA 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_D_RR_I 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_MOD 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_D_FR_D 3 "Display setting SHORT" 2 "Not used" 1 "Display setting LONG" 0 "No setting" ; +VAL_TABLE_ SET_D_BS 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_D_LN 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_D_FR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_D_RR_A 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_W_BS_B 3 "Display setting DARK" 2 "Display setting NORMAL" 1 "Display setting BRIGHT" 0 "Nothing" ; +VAL_TABLE_ SET_W_LN_T 3 "Display setting LATE" 2 "Not used" 1 "Display setting EARLY" 0 "Nothing" ; +VAL_TABLE_ SET_W_BS 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_W_LN 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_W_FR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ TGT_RV 3 "Display (Left radar stand by)" 2 "Display (Left vehicle warning)" 1 "Not used" 0 "No Display" ; +VAL_TABLE_ TGT_LV 3 "Display (Left radar stand by)" 2 "Display (Left vehicle warning)" 1 "Not used" 0 "No Display" ; +VAL_TABLE_ STS_D_Rr 7 "Malfunction" 6 "No Display" 5 "Display (Inactive)" 4 "Display (Active)" 3 "Display (Stand by)" 2 "Display (System ON)" 1 "Display (System OFF)" 0 "No Display" ; +VAL_TABLE_ MSS_N_D 1 "Display" 0 "No Display" ; +VAL_TABLE_ MSS_N_W 1 "Display" 0 "No Display" ; +VAL_TABLE_ MSS_F 1 "Display" 0 "No Display" ; +VAL_TABLE_ SIG_SPDA 1 "Blink" 0 "Not Blink" ; +VAL_TABLE_ SIG_W_S 1 "Warning status display" 0 "Not request" ; +VAL_TABLE_ BZR_REQ 7 "Not used" 6 "Status change Alarm" 5 "Lane Alarm" 4 "Target approach Alarm" 3 "Operation Alarm" 2 "Collision Alarm" 1 "Cancel Alarm" 0 "No Alarm" ; +VAL_TABLE_ SIG_SPD 255 "'- -' indicator request" 254 "Set speed request" 253 "Set speed request" 252 "Set speed request" 251 "Set speed request" 250 "Set speed request" 249 "Set speed request" 248 "Set speed request" 247 "Set speed request" 246 "Set speed request" 245 "Set speed request" 244 "Set speed request" 243 "Set speed request" 242 "Set speed request" 241 "Set speed request" 240 "Set speed request" 239 "Set speed request" 238 "Set speed request" 237 "Set speed request" 236 "Set speed request" 235 "Set speed request" 234 "Set speed request" 233 "Set speed request" 232 "Set speed request" 231 "Set speed request" 230 "Set speed request" 229 "Set speed request" 228 "Set speed request" 227 "Set speed request" 226 "Set speed request" 225 "Set speed request" 224 "Set speed request" 223 "Set speed request" 222 "Set speed request" 221 "Set speed request" 220 "Set speed request" 219 "Set speed request" 218 "Set speed request" 217 "Set speed request" 216 "Set speed request" 215 "Set speed request" 214 "Set speed request" 213 "Set speed request" 212 "Set speed request" 211 "Set speed request" 210 "Set speed request" 209 "Set speed request" 208 "Set speed request" 207 "Set speed request" 206 "Set speed request" 205 "Set speed request" 204 "Set speed request" 203 "Set speed request" 202 "Set speed request" 201 "Set speed request" 200 "Set speed request" 199 "Set speed request" 198 "Set speed request" 197 "Set speed request" 196 "Set speed request" 195 "Set speed request" 194 "Set speed request" 193 "Set speed request" 192 "Set speed request" 191 "Set speed request" 190 "Set speed request" 189 "Set speed request" 188 "Set speed request" 187 "Set speed request" 186 "Set speed request" 185 "Set speed request" 184 "Set speed request" 183 "Set speed request" 182 "Set speed request" 181 "Set speed request" 180 "Set speed request" 179 "Set speed request" 178 "Set speed request" 177 "Set speed request" 176 "Set speed request" 175 "Set speed request" 174 "Set speed request" 173 "Set speed request" 172 "Set speed request" 171 "Set speed request" 170 "Set speed request" 169 "Set speed request" 168 "Set speed request" 167 "Set speed request" 166 "Set speed request" 165 "Set speed request" 164 "Set speed request" 163 "Set speed request" 162 "Set speed request" 161 "Set speed request" 160 "Set speed request" 159 "Set speed request" 158 "Set speed request" 157 "Set speed request" 156 "Set speed request" 155 "Set speed request" 154 "Set speed request" 153 "Set speed request" 152 "Set speed request" 151 "Set speed request" 150 "Set speed request" 149 "Set speed request" 148 "Set speed request" 147 "Set speed request" 146 "Set speed request" 145 "Set speed request" 144 "Set speed request" 143 "Set speed request" 142 "Set speed request" 141 "Set speed request" 140 "Set speed request" 139 "Set speed request" 138 "Set speed request" 137 "Set speed request" 136 "Set speed request" 135 "Set speed request" 134 "Set speed request" 133 "Set speed request" 132 "Set speed request" 131 "Set speed request" 130 "Set speed request" 129 "Set speed request" 128 "Set speed request" 127 "Set speed request" 126 "Set speed request" 125 "Set speed request" 124 "Set speed request" 123 "Set speed request" 122 "Set speed request" 121 "Set speed request" 120 "Set speed request" 119 "Set speed request" 118 "Set speed request" 117 "Set speed request" 116 "Set speed request" 115 "Set speed request" 114 "Set speed request" 113 "Set speed request" 112 "Set speed request" 111 "Set speed request" 110 "Set speed request" 109 "Set speed request" 108 "Set speed request" 107 "Set speed request" 106 "Set speed request" 105 "Set speed request" 104 "Set speed request" 103 "Set speed request" 102 "Set speed request" 101 "Set speed request" 100 "Set speed request" 99 "Set speed request" 98 "Set speed request" 97 "Set speed request" 96 "Set speed request" 95 "Set speed request" 94 "Set speed request" 93 "Set speed request" 92 "Set speed request" 91 "Set speed request" 90 "Set speed request" 89 "Set speed request" 88 "Set speed request" 87 "Set speed request" 86 "Set speed request" 85 "Set speed request" 84 "Set speed request" 83 "Set speed request" 82 "Set speed request" 81 "Set speed request" 80 "Set speed request" 79 "Set speed request" 78 "Set speed request" 77 "Set speed request" 76 "Set speed request" 75 "Set speed request" 74 "Set speed request" 73 "Set speed request" 72 "Set speed request" 71 "Set speed request" 70 "Set speed request" 69 "Set speed request" 68 "Set speed request" 67 "Set speed request" 66 "Set speed request" 65 "Set speed request" 64 "Set speed request" 63 "Set speed request" 62 "Set speed request" 61 "Set speed request" 60 "Set speed request" 59 "Set speed request" 58 "Set speed request" 57 "Set speed request" 56 "Set speed request" 55 "Set speed request" 54 "Set speed request" 53 "Set speed request" 52 "Set speed request" 51 "Set speed request" 50 "Set speed request" 49 "Set speed request" 48 "Set speed request" 47 "Set speed request" 46 "Set speed request" 45 "Set speed request" 44 "Set speed request" 43 "Set speed request" 42 "Set speed request" 41 "Set speed request" 40 "Set speed request" 39 "Set speed request" 38 "Set speed request" 37 "Set speed request" 36 "Set speed request" 35 "Set speed request" 34 "Set speed request" 33 "Set speed request" 32 "Set speed request" 31 "Set speed request" 30 "Set speed request" 29 "Set speed request" 28 "Set speed request" 27 "Set speed request" 26 "Set speed request" 25 "Set speed request" 24 "Set speed request" 23 "Set speed request" 22 "Set speed request" 21 "Set speed request" 20 "Set speed request" 19 "Set speed request" 18 "Set speed request" 17 "Set speed request" 16 "Set speed request" 15 "Set speed request" 14 "Set speed request" 13 "Set speed request" 12 "Set speed request" 11 "Set speed request" 10 "Set speed request" 9 "Set speed request" 8 "Set speed request" 7 "Set speed request" 6 "Set speed request" 5 "Set speed request" 4 "Set speed request" 3 "Set speed request" 2 "Set speed request" 1 "Set speed request" 0 "not request" ; +VAL_TABLE_ STS_D_FW 3 "Display (Malfunction)" 2 "Display (Temporary OFF)" 1 "Display (System ON)" 0 "No Display" ; +VAL_TABLE_ STS_BA 3 "Display (Malfunction)" 2 "Display (Temporary OFF)" 1 "Display (System ON)" 0 "No Display" ; +VAL_TABLE_ STS_W_BS 3 "Display (Malfunction)" 2 "Display (Temporary OFF)" 1 "Display (System ON)" 0 "No Display" ; +VAL_TABLE_ STS_W_FW 3 "Display (Malfunction)" 2 "Display (Temporary OFF)" 1 "Display (System ON)" 0 "No Display" ; +VAL_TABLE_ TGT_LN 3 "Not used" 2 "Display (Lane Warning)" 1 "Display (Lane)" 0 "No Display" ; +VAL_TABLE_ TGT_FV 3 "Display (Collision Warning)" 2 "Display (Approach Warning)" 1 "Display (Forward vehicle)" 0 "No Display" ; +VAL_TABLE_ SIG_UNIT 1 "Unit of SPD Ind req (KMH or MPH)" 0 "not request" ; +VAL_TABLE_ SIG_DIS 3 "Display (Long)" 2 "Display (Middle)" 1 "Display (Short)" 0 "No Display" ; +VAL_TABLE_ SIG_RDY 1 "Display" 0 "No Display" ; +VAL_TABLE_ SIG_SET 1 "Display" 0 "No Display" ; +VAL_TABLE_ STS_CC 3 "Display (Malfunction)" 2 "Display (ASCD Mode ON)" 1 "Display (ICC Mode ON)" 0 "No Display" ; +VAL_TABLE_ BUZZ_REQ 1 "buzzer request" 0 "no buzzer request" ; +VAL_TABLE_ HVAC_SMAPREQ_hea 7 "Request7" 6 "Request6" 5 "Request5" 4 "Request4" 3 "Request3" 2 "Request2" 1 "Request1" 0 "No Request" ; +VAL_TABLE_ KGF_MES_REQ 1 "message on" 0 "message off" ; +VAL_TABLE_ KPA_MES_REQ 1 "message on" 0 "message off" ; +VAL_TABLE_ PSI_MES_REQ 1 "message on" 0 "message off" ; +VAL_TABLE_ CHG_STA_TCU 3 "stop request" 2 "quick charge" 1 "normal charge" 0 "other" ; +VAL_TABLE_ ActiveGoodCheck 1 "During ActiveGoodCheck" 0 "Not in ActiveGoodCheck" ; +VAL_TABLE_ RollerBench_Type 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Not used" 2 "FrontAxle" 1 "Not used" 0 "Passive" ; +VAL_TABLE_ RollerBench_NotAllowed 1 "RollerBench mode is not allowed" 0 "RollerBench mode is allowed" ; +VAL_TABLE_ RUN_AIM_WORK 1 "Working" 0 "Not work of Runtime-Aiming-Func" ; +VAL_TABLE_ DTCT_DISCONTI_3_R 1 "discont detection in wide" 0 "Normal" ; +VAL_TABLE_ DTCT_DISCONTI_3_L 1 "discont detection in wide" 0 "Normal" ; +VAL_TABLE_ DTCT_DISCONTI_2_R 1 "discont detection in narrow" 0 "Normal" ; +VAL_TABLE_ DTCT_DISCONTI_2_L 1 "discont detection in narrow" 0 "Normal" ; +VAL_TABLE_ LDW_STATUS_R 1 "from lane to right side lane" 0 "not from lane to right side lane" ; +VAL_TABLE_ LDW_STATUS_L 1 "from lane to left side lane" 0 "not from lane to left side lane" ; +VAL_TABLE_ MARKER_TYPE_R 7 "difficult to irregularity road" 6 "Tar strips" 5 "slow down area" 4 "fork road (bifurcation)" 3 "Bott's Dots" 2 "Dashed line" 1 "Solid line" 0 "None" ; +VAL_TABLE_ MARKER_TYPE_L 7 "difficult to irregularity road " 6 "Tar strips" 5 "slow down area" 4 "fork road (bifurcation)" 3 "Bott's Dots" 2 "Dashed line" 1 "Solid line" 0 "None" ; +VAL_TABLE_ DIAG_STATUS 7 "CUF or Not ICA + CCAD or UVR+ATD" 6 "CUF or Not ICA + CCAD or UVR" 5 "CUF or Not ICA + ATD" 4 "CUF or Not ICA" 3 "ATD + CCAD or UVR" 2 "CCAD or UVR" 1 "Abnorma Temperature Detection" 0 "Nothing abnormal detected" ; +VAL_TABLE_ MARKER_VALID_R 1 "right hand lane marker is valid" 0 "right hand lane mark isn't valid" ; +VAL_TABLE_ MARKER_VALID_L 1 "left hand lane marker is valid" 0 "left hand lane mark is not valid" ; +VAL_TABLE_ REQ_DISP_MET 1 "Sonar detection display request" 0 "No sonar detection display req" ; +VAL_TABLE_ fSPEED_LIMIT_CHANGE 1 "Require the speed limit indi" 0 "Require normal speed limit indi" ; +VAL_TABLE_ BLINK_REQ 1 "Request for blinking speed limit" 0 "No req for blinking speed limit" ; +VAL_TABLE_ fSPEED_LIMIT_DISP 1 "based on ADAS indication" 0 "based on origin navigation func" ; +VAL_TABLE_ STS_D_BS 3 "BSI Malfunction" 2 "BSI ON(Flashing)" 1 "BSI ON" 0 "OFF" ; +VAL_TABLE_ STS_D_LN 3 "LDP Malfunction" 2 "LDP ON(Flashing)" 1 "LDP ON" 0 "OFF" ; +VAL_TABLE_ STS_W_LN 3 "LDW Malfunction" 2 "LDW ON(Flashing)" 1 "LDW ON" 0 "OFF" ; +VAL_TABLE_ STS_D_BS_ADAS 3 "BSI Malfunction" 2 "BSI ON(Flashing)" 1 "BSI ON" 0 "OFF" ; +VAL_TABLE_ STS_D_LN_ADAS 3 "LDP Malfunction" 2 "LDP ON(Flashing)" 1 "LDP ON" 0 "OFF" ; +VAL_TABLE_ STS_W_LN_ADAS 3 "LDW Malfunction" 2 "LDW ON(Flashing)" 1 "LDW ON" 0 "OFF" ; +VAL_TABLE_ STS_W_LN_ADAS 3 "LDW Malfunction" 2 "LDW ON(Flashing)" 1 "LDW ON" 0 "OFF" ; +VAL_TABLE_ MODE_SELCT_SW_ITM 1 "80% chg or priority to Pri A/C" 0 "100% chg or priority to chg" ; +VAL_TABLE_ LB_STATUS 3 "Caution Request" 2 "Battery less start Request" 1 "Motor torque OFF Request" 0 "normal start Request or Fail Req" ; +VAL_TABLE_ RDY 1 "ready" 0 "not ready" ; +VAL_TABLE_ EGST 1 "ENGINE Starting Requested" 0 "ENGINE Starting Not Requested" ; +VAL_TABLE_ EGSTTYP 7 "not used" 6 "not used" 5 "not used" 4 "not used" 3 "not used" 2 "Egn sta to sta performance" 1 "Egn sta of giving priority" 0 "Normal engine start" ; +VAL_TABLE_ FCSTP 1 "Reqest Fuel Cut" 0 "Not Reqest Fuel Cut" ; +VAL_TABLE_ IDLRQ 1 "Engine ISC request" 0 "Not request" ; +VAL_TABLE_ ISFBDRQ 1 "Idle stop prohibit request" 0 "Idle stop prohibit not request" ; +VAL_TABLE_ SBKEXP 1 "First ignition finished" 0 "First ignition not finished" ; +VAL_TABLE_ FCUTNUM 15 "not used" 14 "not used" 13 "not used" 12 "not used" 11 "not used" 10 "not used" 9 "not used" 8 "not used" 7 "not used" 6 "6 cylinder Fuel-cut" 5 "5 cylinder Fuel-cut" 4 "4 cylinder Fuel-cut" 3 "3 cylinder Fuel-cut" 2 "2 cylinder Fuel-cut" 1 "1 cylinder Fuel-cut" 0 "Fuel-cut is not executing" ; +VAL_TABLE_ FCFBDRQ 1 "Fuel cut prohibit request" 0 "Fuel cut prohibit not request" ; +VAL_TABLE_ Curv_20_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_19_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_18_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_17_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_16_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_15_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_14_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_13_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_12_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_11_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_10_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_9_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_8_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_7_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_6_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_5_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_4_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_3_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_2_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_1_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Curv_0_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_TABLE_ Unit_SpeedLimt_Next 1 "km/h" 0 "Mile/h" ; +VAL_TABLE_ Next_RoadType 3 "local road" 2 "national road" 1 "Highway" 0 "No data" ; +VAL_TABLE_ AnotherRoad_Matching 1 "matching with different route" 0 "match with prev estimated route" ; +VAL_TABLE_ GPS_ERR 1 "error" 0 "not error" ; +VAL_TABLE_ Unit_SpeedLimt 1 "km/h" 0 "Mile/h" ; +VAL_TABLE_ SpeedLimit_Sign_Sts 3 "While others display" 2 "Blinks and displays speed limits" 1 "Lights and displays speed limits" 0 "No display" ; +VAL_TABLE_ CORRECT_DEV_STA 15 "area code 15" 14 "area code 14" 13 "area code 13" 12 "area code 12" 11 "area code 11" 10 "area code 10" 9 "area code 9" 8 "area code 8" 7 "area code 7" 6 "area code 6" 5 "area code 5" 4 "area code 4" 3 "area code 3" 2 "area code 2" 1 "area code 1" 0 "invalid" ; +VAL_TABLE_ COMP_CAL 3 "Invalid" 2 "calibration normal" 1 "calibration cancel" 0 "calibration start" ; +VAL_TABLE_ EcoAC_SW 1 "WITH" 0 "WITHOUT" ; +VAL_TABLE_ RrAC_DirectSetting 7 "Not used" 6 "Not used" 5 "Not used" 4 "Heater & Cooler" 3 "AUTO" 2 "Cooler" 1 "Heater " 0 "OFF" ; +VAL_TABLE_ INITIALIZING_BIT 1 "Initializing" 0 "Not initializing" ; +VAL_TABLE_ RrDefSW 1 "Switch push" 0 "Switch not push" ; +VAL_TABLE_ S_HEAT_AS_SWLONG 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_DR_SWLONG 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_AS_LOSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_AS_MIDSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_AS_HISW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_DR_LOSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_DR_MIDSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_DR_HISW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ ST_HEAT_AUTO_SET 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ IDLSTP_HVAC_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_AS_AUTDN 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_AS_AUTUP 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_DR_AUTDN 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_DR_AUTUP 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_AS_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_DR_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_AS_AUTOSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_AS_OFFSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_DR_AUTOSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ S_HEAT_DR_OFFSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ ST_HEATER_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ SPORT_SMBSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ SPORT_SMBSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ SPORT_SMBSW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ STD_SMBSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ STD_SMBSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ STD_SMBSW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ PRSNL_ASASW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ PRSNL_ASASW_ON 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ PRSNL_CSTM_SMBSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ PRSNL_CSTM_SMBSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ PRSNL_CSTM_SMBSW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ COPYITSSET 1 "Copy" 0 "Not copy" ; +VAL_TABLE_ COPYDRVSET 1 "Copy" 0 "Not copy" ; +VAL_TABLE_ COPYNO_FR_USER 7 "Not used" 6 "Not used" 5 "Not used" 4 "User4" 3 "User3" 2 "User2" 1 "User1" 0 "Not Copy" ; +VAL_TABLE_ COPYNO_TO_USER 7 "Not used" 6 "Not used" 5 "Not used" 4 "User4" 3 "User3" 2 "User2" 1 "User1" 0 "Not Copy" ; +VAL_TABLE_ USER4CHGSW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ USER3CHGSW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ USER2CHGSW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ USER1CHGSW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ CURLOGIN_USERINFO 3 "User4" 2 "User3" 1 "User2" 0 "User1" ; +VAL_TABLE_ DRVMODE_RESETRQ 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ LOGINKEYLINKSET 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ USER4_REGINFO 1 "Registration" 0 "Non-Registration" ; +VAL_TABLE_ USER3_REGINFO 1 "Registration" 0 "Non-Registration" ; +VAL_TABLE_ USER2_REGINFO 1 "Registration" 0 "Non-Registration" ; +VAL_TABLE_ USER1_REGINFO 1 "Registration" 0 "Non-Registration" ; +VAL_TABLE_ INIT_FLAG 1 "Initializing" 0 "Intialized" ; +VAL_TABLE_ G_EON1 1 "EngineON request" 0 "No EngineON request" ; +VAL_TABLE_ G_BLON 1 "Blower Fan ON" 0 "Blower Fan OFF" ; +VAL_TABLE_ G_SBLW 1 "cool down status" 0 "not cool down status" ; +VAL_TABLE_ G_FRRE 1 "Except for REC" 0 "REC" ; +VAL_TABLE_ MVP_HCM_STAT 3 "Not use" 2 "HCM error" 1 "Sensor error" 0 "Normal" ; +VAL_TABLE_ DEICE_REQ 3 "Not used" 2 "Request HI" 1 "Request LO" 0 "No request" ; +VAL_TABLE_ HVAC_MF_REQ 7 "Not used" 6 "100%" 5 "90%" 4 "80%" 3 "65%" 2 "40%" 1 "20%" 0 "0%" ; +VAL_TABLE_ S_HEAT_AS_ONDISP 1 "display" 0 "gray" ; +VAL_TABLE_ S_HEAT_DR_ONDISP 1 "display" 0 "gray" ; +VAL_TABLE_ S_HEAT_AS_AUTSET 3 "Hi" 2 "Mid" 1 "Lo" 0 "Not Used" ; +VAL_TABLE_ S_HEAT_HI_ASIND 1 "ON" 0 "OFF" ; +VAL_TABLE_ S_HEAT_MID_ASIND 1 "ON" 0 "OFF" ; +VAL_TABLE_ S_HEAT_LO_ASIND 1 "ON" 0 "OFF" ; +VAL_TABLE_ S_HEAT_OFF_ASIND 1 "ON" 0 "OFF" ; +VAL_TABLE_ S_HEAT_DR_AUTSET 3 "Hi" 2 "Mid" 1 "Lo" 0 "Not Used" ; +VAL_TABLE_ S_HEAT_HI_DRIND 1 "ON" 0 "OFF" ; +VAL_TABLE_ S_HEAT_MID_DRIND 1 "ON" 0 "OFF" ; +VAL_TABLE_ S_HEAT_LO_DRIND 1 "ON" 0 "OFF" ; +VAL_TABLE_ S_HEAT_OFF_DRIND 1 "ON" 0 "OFF" ; +VAL_TABLE_ RrAC_SW_FB 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ UpperVentSW_IND 1 "ON" 0 "OFF" ; +VAL_TABLE_ UpperVentAutoStatus 1 "AUTO" 0 "BLANK(Non display)" ; +VAL_TABLE_ B_PLR_VentStatus 3 "Not used" 2 "BLANK(Non display)" 1 "open" 0 "shut" ; +VAL_TABLE_ S_HEAT_AUTO_ASIND 1 "ON" 0 "OFF" ; +VAL_TABLE_ S_HEAT_AUTO_DRIND 1 "ON" 0 "OFF" ; +VAL_TABLE_ Rear_on_display_Status 1 "indicate" 0 "BLANK(Non display)" ; +VAL_TABLE_ RearAC_SystemStatus 7 "Not used" 6 "Not used" 5 "Not used" 4 "heater & Cooler" 3 "AUTO" 2 "Cooler" 1 "heater" 0 "OFF" ; +VAL_TABLE_ HumiditySensorSensitivity_SOD 1 "display" 0 "gray" ; +VAL_TABLE_ AirQualitySensorSensitivity_SOD 1 "display" 0 "gray" ; +VAL_TABLE_ VariableAirFlowCycle_PASS_SOD 1 "display" 0 "gray" ; +VAL_TABLE_ VariableAirFlowCycle_DR_SOD 1 "display" 0 "gray" ; +VAL_TABLE_ _3rdVentStatus 3 "Not used" 2 "BLANK(Non display)" 1 "open" 0 "shut" ; +VAL_TABLE_ RearAC_FanSpeedStatus 15 "INDICATE FAN FLAME " 14 "14speed" 13 "13speed " 12 "12speed" 11 "11speed" 10 "10speed" 9 "9speed" 8 "8speed" 7 "7speed" 6 "6speed" 5 "5speed" 4 "4speed" 3 "3speed" 2 "2speed" 1 "1speed" 0 "ALL OFF" ; +VAL_TABLE_ PTC_IdleUpRequest 1 "idle up request" 0 "no idle up request" ; +VAL_TABLE_ STA_ST_HEAT_AUTO 1 "ON" 0 "OFF" ; +VAL_TABLE_ ST_HEAT_AUTO_EXT 1 "exist" 0 "not exist" ; +VAL_TABLE_ S_HEAT_AS_IND 1 "ON" 0 "OFF" ; +VAL_TABLE_ S_HEAT_AS_EXIST 1 "exist" 0 "not exist" ; +VAL_TABLE_ S_HEAT_DR_EXIST 1 "exist" 0 "not exist" ; +VAL_TABLE_ ST_HEAT_SWIND 1 "ON" 0 "OFF" ; +VAL_TABLE_ ST_HEAT_EXIST 1 "exist" 0 "not exist" ; +VAL_TABLE_ STA_IDLSTP_HVAC 1 "ON" 0 "OFF" ; +VAL_TABLE_ S_HEAT_DR_IND 1 "ON" 0 "OFF" ; +VAL_TABLE_ IDLSTP_HVAC_EXST 1 "exist" 0 "not exist" ; +VAL_TABLE_ STATUS_OF_EV_HEATER 1 "ON" 0 "OFF" ; +VAL_TABLE_ EV_HEATER_EXIST 1 "exist" 0 "not exist" ; +VAL_TABLE_ AutoStatus_Dr 3 "Not used" 2 "BLANK(Non display)" 1 "AUTO" 0 "MANUAL" ; +VAL_TABLE_ RearAC_ExistAndType 3 "heater&cooler" 2 "cooler only" 1 "heater only" 0 "not exist" ; +VAL_TABLE_ VentirationStatus_Fr 1 "Fan mark ON" 0 "Fan mark OFF" ; +VAL_TABLE_ AirQualitySensorSensitivityStatu 7 "7" 6 "6" 5 "5" 4 "4" 3 "3" 2 "2" 1 "1" 0 "BLANK(Non display)" ; +VAL_TABLE_ Max_level_of_air_quality_sensor 7 "level7" 6 "level6" 5 "level5" 4 "level4" 3 "level3" 2 "level2" 1 "level1" 0 "No function" ; +VAL_TABLE_ VSP_IND_STA 1 "IND ON" 0 "IND OFF" ; +VAL_TABLE_ DSC_REFUSE 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ A_B_LIGHT_CRSH_ORD 15 "Frontal light Crash Occurrence" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Not used" 2 "Not used" 1 "Not used" 0 "No Frontal light Crash Occur" ; +VAL_TABLE_ _2ND_ROW_R_BELT_STA 3 "unavailable" 2 "SB fastened" 1 "SB unfastened" 0 "SB not monitored" ; +VAL_TABLE_ _2ND_ROW_C_BELT_STA 3 "unavailable" 2 "SB fastened" 1 "SB unfastened" 0 "SB not monitored" ; +VAL_TABLE_ _2ND_ROW_L_BELT_STA 3 "unavailable" 2 "SB fastened" 1 "SB unfastened" 0 "SB not monitored" ; +VAL_TABLE_ BELT_BUCK_STA_PASS 3 "unavailable" 2 "SB fastened" 1 "SB unfastened" 0 "SB not monitored" ; +VAL_TABLE_ AIRBAG_FAIL 1 "AIRBAG system malfunction" 0 "no AIRBAG system malfunction" ; +VAL_TABLE_ ABS_STATE 1 "ABS Operation status is ON" 0 "ABS Operation status is OFF" ; +VAL_TABLE_ IBA_FLG 1 "IBA flag status is ON" 0 "IBA flag status is OFF" ; +VAL_TABLE_ LH_STATE 15 "invalid" 14 "invalid" 13 "invalid" 12 "invalid" 11 "Mode Release output to LH Motor" 10 "Mode WL output to LH Motor" 9 "Mode ELB output to LH Motor" 8 "Mode ER output to LH Motor" 7 "Mode EH output to LH Motor" 6 "Mode EC output to LH Motor" 5 "Mode EAB output to LH Motor" 4 "Mode EFB output to LH Motor" 3 "Mode CDR output to LH Motor" 2 "Mode CBR output to LH Motor" 1 "Mode CS output to LH Motor" 0 "No output to LH Motor" ; +VAL_TABLE_ RH_STATE 15 "invalid" 14 "invalid" 13 "invalid" 12 "invalid" 11 "Mode Release output to RH Motor" 10 "Mode WL output to RH Motor" 9 "Mode ELB output to RH Motor" 8 "Mode ER output to RH Motor" 7 "Mode EH output to RH Motor" 6 "Mode EC output to RH Motor" 5 "Mode EAB output to RH Motor" 4 "Mode EFB output to RH Motor" 3 "Mode CDR output to RH Motor" 2 "Mode CBR output to RH Motor" 1 "Mode CS output to RH Motor" 0 "No output to RH Motor" ; +VAL_TABLE_ IGN_SW 1 "Ignition SW Status is ON" 0 "Ignition SW Status is OFF" ; +VAL_TABLE_ RL_TGS 3 "Not used" 2 "OutFrame TurmON & InSide TurmON" 1 "Outer Frame Turm ON" 0 "No Request" ; +VAL_TABLE_ RR_TGS 3 "Not used" 2 "OutFrame TurmON & InSide TurmON" 1 "Outer Frame Turm ON" 0 "No Request" ; +VAL_TABLE_ FL_TGS 3 "Not used" 2 "OutFrame TurmON & InSide TurmON" 1 "Outer Frame Turm ON" 0 "No Request" ; +VAL_TABLE_ FR_TGS 3 "Not used" 2 "OutFrame TurmON & InSide TurmON" 1 "Outer Frame Turm ON" 0 "No Request" ; +VAL_TABLE_ QDTZ_RL 1 "Quickly deflating to zero" 0 "Normal" ; +VAL_TABLE_ QDTZ_RR 1 "Quickly deflating to zero" 0 "Normal" ; +VAL_TABLE_ QDTZ_FL 1 "Quickly deflating to zero" 0 "Normal" ; +VAL_TABLE_ QDTZ_FR 1 "Quickly deflating to zero " 0 "Normal " ; +VAL_TABLE_ TPMS_HAZARD_ON 1 "Hazard lamp ON" 0 "Hazard lamp OFF" ; +VAL_TABLE_ PRESS_REAR 15 "340kPa 49psi 3.4bar 3.4kg/cm2" 14 "330kPa 48psi 3.3bar 3.3kg/cm2" 13 "320kPa 46psi 3.2bar 3.2kg/cm2" 12 "310kPa 45psi 3.1bar 3.1kg/cm2" 11 "300kPa 44psi 3.0bar 3.0kg/cm2" 10 "290kPa 42psi 2.9bar 2.9kg/cm2" 9 "280kPa 41psi 2.8bar 2.8kg/cm2" 8 "270kPa 39spi 2.7bar 2.7kg/cm2" 7 "260kPa 38psi 2.6bar 2.6kg/cm2" 6 "250kPa 36psi 2.5bar 2.5kg/cm2" 5 "240kPa 35psi 2.4bar 2.4kg/cm2" 4 "230kPa 33psi 2.3bar 2.3kg/cm2" 3 "220kPa 32psi 2.2bar 2.2kg/cm2" 2 "210kPa 30psi 2.1bar 2.1kg/cm2" 1 "200kPa 29psi 2.0bar 2.0kg/cm2" 0 "Not used" ; +VAL_TABLE_ PRESS_FRONT 15 "340kPa 49psi 3.4bar 3.4kg/cm2" 14 "330kPa 48psi 3.3bar 3.3kg/cm2" 13 "320kPa 46psi 3.2bar 3.2kg/cm2" 12 "310kPa 45psi 3.1bar 3.1kg/cm2" 11 "300kPa 44psi 3.0bar 3.0kg/cm2" 10 "290kPa 42psi 2.9bar 2.9kg/cm2" 9 "280kPa 41psi 2.8bar 2.8kg/cm2" 8 "270kPa 39spi 2.7bar 2.7kg/cm2" 7 "260kPa 38psi 2.6bar 2.6kg/cm2" 6 "250kPa 36psi 2.5bar 2.5kg/cm2" 5 "240kPa 35psi 2.4bar 2.4kg/cm2" 4 "230kPa 33psi 2.3bar 2.3kg/cm2" 3 "220kPa 32psi 2.2bar 2.2kg/cm2" 2 "210kPa 30psi 2.1bar 2.1kg/cm2" 1 "200kPa 29psi 2.0bar 2.0kg/cm2" 0 "Not used" ; +VAL_TABLE_ W_REQ 1 "TPMS warning lamp is ON" 0 "TPMS warning lamp is OFF" ; +VAL_TABLE_ ETCFAIL 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "torque request can't be achieved" 2 "tran state torq req realization" 1 "exact torq req can't be achieved" 0 "normal" ; +VAL_TABLE_ ESCL_STATUS 1 "LOCK" 0 "UNLOCK" ; +VAL_TABLE_ KEY_WARNING_BUZZER 1 "KEY warning buzzer on" 0 "KEY warning buzzer off" ; +VAL_TABLE_ WARNING_REQ_PIC 23 "Lock warning" 22 "CAUTION_3" 21 "CAUTION_2" 20 "CAUTION_1" 19 "Push engine start (only Push)" 18 "Pull out the card key" 17 "shift N position" 16 "shift P or N position" 15 "reserved" 14 "reserved" 13 "3-5 Fob take out warning" 12 "3-4 key battery" 11 "3-3 insart the card key" 10 "3-2 shift P position" 9 "3-1-2 steering rotate B" 8 "3-1-1 steering rotate A" 7 "KEY ID NG" 6 "KEY ID OK" 5 "2-1-2 brake & PUES(IGN)" 4 "2-1-1 brake & PUES(not IGN)" 3 "1-3 CAUTION A" 2 "1-2 WAIT" 1 "1-1 Welcome" 0 "No contents" ; +VAL_TABLE_ RING_ILLUMI_REQ 1 "meter ring illumination on" 0 "meter ring illumination off" ; +VAL_TABLE_ AHL_IND_REQ 1 "ON" 0 "OFF" ; +VAL_TABLE_ ENG_STP_REQ 1 "Norinal eng stop req by driver" 0 "No eng stop req by driver" ; +VAL_TABLE_ Warning_Request_picture 24 "Reserved" 23 "Reserved" 21 "WELCOME" 20 "KEY BATTERY" 19 "SELECT NEUTRAL" 18 "BRAKE & PUSH ENGINE START" 17 "SELECT PARK 1" 16 "PRESS CLUTCH + START" 15 "STRG rotate" 14 "INSERT THE KEYCARD" 13 "CHECK KEYCARD READER" 12 "Pull out the card key" 11 "ID NG" 10 "CARD NOT DETECTED" 9 "PRESS AND HOLD START2" 8 "STEERING NOT LOCKED" 7 "CHECK BRAKE LIGHTS" 6 "CHECK THE VEHICLE" 5 "CHECK ENGINE IMMOBILIZER" 3 "PRESS AND HOLD START1" 2 "RISK OF STEERING LOCKING" 1 "SELECT PARK 2" 0 "Not operate" ; +VAL_TABLE_ REMORT_ENGST_STA 1 "IGN-ON by Remote ENG-ST" 0 "Remote ENG-ST not operation" ; +VAL_TABLE_ REMORT_ENGST_REG 1 "Remote ENG-ST registration" 0 "Remote ENG-ST not registration" ; +VAL_TABLE_ CLUSTER_IND_LAMP_REQ 7 "Yellow & Red indi lamo blink req" 6 "Red indicator lamp blink request" 5 "Yellow indicator lamo blink req" 4 "Reserved" 3 "Yellow & Red indi lamp on req" 2 "Red indicator lamp on request" 1 "Yellow indicator lamp on Requset" 0 "Indicator off" ; +VAL_TABLE_ ENG_ST_SW 1 "engine start sw ON" 0 "engine start sw OFF" ; +VAL_TABLE_ SUPER_LOCK 1 "without super lock" 0 "with super lock" ; +VAL_TABLE_ EXTERNAL_RELAY_STATE 1 "relay open" 0 "relay close" ; +VAL_TABLE_ ANSWER_BACK_SPEED 1 "quick blink" 0 "normal blink" ; +VAL_TABLE_ PERMIT_CRANKING 1 "permit cranking" 0 "prohibit cranking" ; +VAL_TABLE_ PUSH_SW 1 "on" 0 "off" ; +VAL_TABLE_ HAZARD_REQ 3 "three times" 2 "twice" 1 "once" 0 "off" ; +VAL_TABLE_ HORN_CHIRP_REQ 1 "horn chirp" 0 "off" ; +VAL_TABLE_ ALARM_RESET 1 "alarm reset" 0 "invalid" ; +VAL_TABLE_ BACK_DOOR_OPEN_SW 1 "accept back door open switch" 0 "ignor back door open swith" ; +VAL_TABLE_ CHALLENGE_STANDBY 1 "challenge request" 0 "invalid" ; +VAL_TABLE_ LEFT_PSD_MOVE_REVERSE 3 "Not used" 2 "reverse on RL PSD" 1 "move on RL PSD" 0 "OFF" ; +VAL_TABLE_ PBD_OPEN_CLOSE 1 "PBD SW on" 0 "invalid" ; +VAL_TABLE_ RIGHT_PSD_MOVE_REVERSE 3 "Not used" 2 "reverse on RR PSD" 1 "move on RR PSD" 0 "OFF" ; +VAL_TABLE_ CHANGE_ANSWER 1 "mode change request" 0 "invalid" ; +VAL_TABLE_ PANIC_ALARM_REQ 1 "panic action" 0 "invalid" ; +VAL_TABLE_ P_WDW_DOWN_REQ 1 "P/WDW down request" 0 "invalid" ; +VAL_TABLE_ CHALLENGE_BCM 1 "challenge to BCM" 0 "invalid" ; +VAL_TABLE_ ANTI_HIJACK 1 "anti hijack deactivated" 0 "anti hijack activated" ; +VAL_TABLE_ ID_INFO 1 "Not registration" 0 "Registration" ; +VAL_TABLE_ RESPONSE_TO_BCM 1 "response to BCM" 0 "invalid" ; +VAL_TABLE_ CALLENGE_FOR_SEC_CLEAR 1 "challenge for S-SEC clear" 0 "invalid" ; +VAL_TABLE_ SUPER_LOCK__RELEASE_REQ 1 "super lock release request" 0 "invalid" ; +VAL_TABLE_ ALL_DOOR_UNLOCK_REQ 1 "all doors unlock requested" 0 "invalid" ; +VAL_TABLE_ IKEY_WAKE_SLEEP_REQ 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_TABLE_ IKEY_REFUSE 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ PBD_MOVE_REVERSE 3 "Not used" 2 "reverse on PBD" 1 "move on PBD" 0 "invalid" ; +VAL_TABLE_ LINK 228 "5th Key inserted" 220 "4th Key inserted" 212 "3rd Key inserted" 164 "Some key inserted" 28 "2nd Key inserted" 20 "1st Key inserted" ; +VAL_TABLE_ DTRL_REQ 1 "day time run light requested" 0 "day time run light not requested" ; +VAL_TABLE_ AC_IND 1 "Aircon IND ON Request" 0 "Aircon IND OFF Request" ; +VAL_TABLE_ Rear_WIP_REQ 3 "Not used" 2 "RearWiper ON Request" 1 "RearWiper forced stop" 0 "Rear Wiper stop position" ; +VAL_TABLE_ REMOTE_AC_REQ 1 "ON Request / OFF Request" 0 "not Request" ; +VAL_TABLE_ RR_DEF_REQ 3 "rear defrost req and engaged" 2 "rear defrost not req and engaged" 1 "rear defrost req and not engaged" 0 "rear defrost not req" ; +VAL_TABLE_ ALARM 1 "alarm on" 0 "alarm off" ; +VAL_TABLE_ TPMS_W_L_REQ 1 "TPMS warning lamp is ON" 0 "TPMS warning lamp is OFF" ; +VAL_TABLE_ TPMS_RFWL_REQ 1 "TPMS Run Flat warn lamp is ON" 0 "TPMS Run Flat warn lamp is OFF" ; +VAL_TABLE_ WAKEUP 3 "invalid" 2 "invalid" 1 "USM awaked" 0 "USM ready to sleep" ; +VAL_TABLE_ ST_position 1 "ST position" 0 "OFF / ACC / IGN position" ; +VAL_TABLE_ Driver_Door 1 "Driver Door Opened" 0 "Driver Door Closed" ; +VAL_TABLE_ MTSRC_SW 1 "MT SyncRev Ctrl main sw active" 0 "MT SyncRev Ctrl main sw not act" ; +VAL_TABLE_ AIRBAG_LAMP_OPE 1 "lamp OK" 0 "lamp malfunction" ; +VAL_TABLE_ SELCT_SAT_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_TABLE_ SELCT_FRI_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_TABLE_ SELCT_THU_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_TABLE_ SELCT_WED_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_TABLE_ SELCT_TUE_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_TABLE_ TIMER_SELCT_MET 1 "Timer charge ON / Pri A/C ON" 0 "Timer charge OFF / Pri A/C OFF" ; +VAL_TABLE_ C_TIME_UPDATE_MET 1 "Request" 0 "No Request" ; +VAL_TABLE_ MDWNSTA 1 "Manual down shift status" 0 "Not manual down shift status" ; +VAL_TABLE_ TIMER_STATUS_MET 3 "Change Content Request" 2 "VCM Change Content Display" 1 "Change Content Pre-Request" 0 "Current" ; +VAL_TABLE_ TIMER_SW_SELECTER_MET 7 "Not used" 6 "next Pri A/C" 5 "next Timer charge" 4 "Pri A/C Timer No,2" 3 "Pri A/C Timer No,1" 2 "Timer charge No,2" 1 "Timer charge No,1" 0 "default " ; +VAL_TABLE_ SELCT_MON_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_TABLE_ SELCT_SUN_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_TABLE_ MET_CUR_DAY_W 7 "Saturday" 6 "Friday" 5 "Thursday" 4 "Wednesday" 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Not used" ; +VAL_TABLE_ STAT_CHG_REQ_IDM 6 "SSA Setting: ALL" 5 "SSA Setting: UPHILL" 4 "ASA Setting: ON" 3 "ASA Setting: OFF" 2 "ADA1 Setting: ON" 1 "ADA1 Setting: OFF" 0 "No request" ; +VAL_TABLE_ Disp_Unit 1 "MPH" 0 "km/h" ; +VAL_TABLE_ DOOR_SW_STA 1 "door SW status is valid" 0 "door SW status is invalid" ; +VAL_TABLE_ ETSWRN1 1 "ETS meter multi disp warn1 on" 0 "ETS meter multi disp warn1 off" ; +VAL_TABLE_ ETSWRN2 1 "ETS meter multi disp warn2 on" 0 "ETS meter multi disp warn2 off" ; +VAL_TABLE_ MODE_STATUS 3 "Not used" 2 "Mode C" 1 "Mode B" 0 "Mode A " ; +VAL_TABLE_ MODE_TRANSITION 1 "Transition" 0 "Not Transition" ; +VAL_TABLE_ CMDFAIL_SMB 1 "Abnormal" 0 "Normal" ; +VAL_TABLE_ INH_SMB 1 "Inhibit" 0 "Not inhibit" ; +VAL_TABLE_ SBWFAIL 1 "Abnormal" 0 "Normal" ; +VAL_TABLE_ ISS_INHIBIT_EPS 1 "ISS Inhibit" 0 "ISS Accept" ; +VAL_TABLE_ EHS_STA 3 "Invalid" 2 "Not used" 1 "EHS_valve_active" 0 "EHS_valve_passive" ; +VAL_TABLE_ REGENTGTQU 3 "Not used" 2 "Invalid" 1 "Normal" 0 "Not Initialized " ; +VAL_TABLE_ BLSPTSQU 3 "Faulty" 2 "Normal" 1 "Reduced Monitored " 0 "Not Initialized " ; +VAL_TABLE_ BLSPTS 1 "Brake pedal is pressed" 0 "Brake pedal is not pressed" ; +VAL_TABLE_ P_BuQU 3 "Not used" 2 "Invalid" 1 "Normal" 0 "Not Initialized " ; +VAL_TABLE_ P_Bu 1 "Pressure ON" 0 "Pressure OFF" ; +VAL_TABLE_ BSVFAIL 1 "Fail" 0 "Normal" ; +VAL_TABLE_ FXTGTDRVQU 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Invalid" 2 "Back up" 1 "Normal" 0 "Not Initialized " ; +VAL_TABLE_ Acmh_state 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "Active" 6 "ActiveWoBackup" 5 "ActiveWoRegen" 4 "ActiveWoRegenWoExternal" 3 "Reduced" 2 "PreRun" 1 "Diag" 0 "Off" ; +VAL_TABLE_ DLCFAIL 1 "Fail" 0 "Normal" ; +VAL_TABLE_ VEHI_TYPE 15 "type11(TBD)" 14 "type10(TBD)" 13 " +type9(TBD)" 12 "type8(TBD)" 11 "type7(TBD)" 10 "type6(TBD)" 9 "type5(TBD)" 8 "type4(TBD)" 7 "type3(TBD)" 6 "type2(TBD)" 5 "type1(TBD)" 4 "L53H-Euro" 3 "L53H-SportsUpper" 2 "L53H-FZ3(Mid)" 1 "L53H-FZ1h(Hevy)" 0 "None" ; +VAL_TABLE_ MARKET_INFO 255 "others" 56 "JPN" 49 "USA" 42 "CAN" 35 "EUR-R" 28 "EUR-L" 21 "AUS" 14 "GOM" 7 "THI" 6 "MEX" 5 "RUS" 4 "GCC" 3 "KOR" 2 "TWN" 1 "CHI" 0 "None" ; +VAL_TABLE_ GIVEIMG 1 "CAMERA giveup" 0 "CAMERA not giveup" ; +VAL_TABLE_ MARK_TYPE_R 7 "Not used" 6 "Bold dash" 5 "Tar strips" 4 "Triple dash" 3 "Solid line" 2 "Dash line" 1 "Bott's dots" 0 "None" ; +VAL_TABLE_ MARK_TYPE_L 7 "Not used" 6 "Bold dash" 5 "Tar strips" 4 "Triple dash" 3 "Solid line" 2 "Dash line" 1 "Bott's dots" 0 "None" ; +VAL_TABLE_ OFFSET_R_VALID 1 "Right offset measure is valid" 0 "Right offset measure is invalid" ; +VAL_TABLE_ OFFSET_L_VALID 1 "Left offset measure is valid" 0 "Left offset measure is invalid" ; +VAL_TABLE_ IDM_STATUS 1 "Abnormal" 0 "Normal" ; +VAL_TABLE_ SOUND4_STOP 1 "Immediate switch" 0 "Periodic switch" ; +VAL_TABLE_ SOUND4_REQ 7 "Sound the File7 spec" 6 "Sound the File6 spec" 5 "Sound the File5 spec" 4 "Sound the File4 spec" 3 "Sound the File3 spec" 2 "Sound the File2 spec" 1 "Sound the File1 spec" 0 "No sound" ; +VAL_TABLE_ SOUND3_STOP 1 "Immediate switch" 0 "Periodic switch" ; +VAL_TABLE_ SOUND3_REQ 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Not used" 2 "Not used" 1 "Sound the FCA warning" 0 "No Sound" ; +VAL_TABLE_ SOUND2_STOP 1 "Immediate switch" 0 "Periodic switch" ; +VAL_TABLE_ SOUND2_REQ 7 "Sound the cancel sound" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Sound the DCA warning" 2 "Sound the FCW" 1 "Sound the Distance warning" 0 "No sound" ; +VAL_TABLE_ SOUND1_STOP 1 "Immediate switch" 0 "Periodic switch" ; +VAL_TABLE_ SOUND1_REQ 7 "Sound the cancel sound" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Sound the BSI warning" 2 "Sound the BSW" 1 "Sound the LDW" 0 "No sound" ; +VAL_TABLE_ IDM_LDP_BSI_ACT 1 "LDP/BSI active" 0 "LDP/BSI not active" ; +VAL_TABLE_ BSI_F_OFF 1 "Forcibly stop" 0 "Normal" ; +VAL_TABLE_ LDP_F_OFF 1 "Forcibly stop" 0 "Normal" ; +VAL_TABLE_ WRN_LN_R 1 "Warning right lane" 0 "No Display" ; +VAL_TABLE_ WRN_LN_L 1 "Warning left lane" 0 "No Display" ; +VAL_TABLE_ STS_D_BS_IDM 3 "BSI Malfunction" 2 "BSI ON(Flashing)" 1 "BSI ON" 0 "OFF" ; +VAL_TABLE_ STS_D_LN_IDM 3 "LDP Malfunction" 2 "LDP ON(Flashing)" 1 "LDP ON" 0 "OFF" ; +VAL_TABLE_ STS_W_LN_IDM 3 "LDW Malfunction" 2 "LDW ON(Flashing)" 1 "LDW ON" 0 "OFF" ; +VAL_TABLE_ BSI_HMI_ORDER_R 1 "BSW LED(R) request" 0 "BSW LED(R) not request" ; +VAL_TABLE_ BSI_HMI_ORDER_L 1 "BSW LED(L) request" 0 "BSW LED(L) not request" ; +VAL_TABLE_ SI_RDR_BL 1 "Radar blockage cancel" 0 "Normal" ; +VAL_TABLE_ BSI_LC_HT 1 "BSI camera high temp abnormal" 0 "Normal" ; +VAL_TABLE_ LDP_LC_HT 1 "LDP camera high temp abnormal" 0 "Normal" ; +VAL_TABLE_ LDW_LC_HT 1 "LDW camera high temp abnormal" 0 "Normal" ; +VAL_TABLE_ BSI_BR_C_RSN 3 "VDC OFF" 2 "Snow mode ON" 1 "Slipperly road" 0 "No request" ; +VAL_TABLE_ LDP_BR_C_RSN 3 "VDC OFF" 2 "Snow mode ON" 1 "Slipperly road" 0 "No request" ; +VAL_TABLE_ TURN_SIG 3 "Turning both on" 2 "Turning Right side lamp on" 1 "Turning left side lamp on" 0 "Not work or Turn sig unit fail" ; +VAL_TABLE_ WIPER 3 "Wiper unit failure" 2 "High" 1 "Low" 0 "Not working" ; +VAL_TABLE_ F_REQ_BSI 1 "Request" 0 "Not request" ; +VAL_TABLE_ F_REQ_LDP 1 "Request" 0 "Not request" ; +VAL_TABLE_ F_REQ_SMB 1 "Request" 0 "Not request" ; +VAL_TABLE_ SYS_STATUS 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "BSI + LDP + SMB ON" 6 "BSI + LDP ON" 5 "BSI + SMB ON" 4 "BSI ON" 3 "SMB + LDP ON" 2 "LDP ON" 1 "SMB ON" 0 "All OFF" ; +VAL_TABLE_ VEHHEVQU 7 "Not used" 6 "Invalid Under Voltage" 5 "Not Calculated" 4 "Reduced Monitored" 3 "Different Calculated" 2 "Faulty" 1 "Normal" 0 "Not Initialized " ; +VAL_TABLE_ FXTGTEXQU 3 "Not used" 2 "Invalid" 1 "Normal" 0 "Not Initialized " ; +VAL_TABLE_ FXTGTEXAc 1 "Active" 0 "Normal " ; +VAL_TABLE_ ABSAVAI 1 "Available" 0 "Not available" ; +VAL_TABLE_ ABSACT 1 "Active" 0 "Normal" ; +VAL_TABLE_ STNDSTILLSTS 1 "Faulty" 0 "Normal" ; +VAL_TABLE_ STNDSTILL 1 "Standstill" 0 "Not defineable" ; +VAL_TABLE_ STABMRGN_Quali 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Not used" 2 "Faulty" 1 "Normal" 0 "Not Initialized" ; +VAL_TABLE_ FQCPUSHSTPMON 1 "Ctrl State on Stop/State of Stop" 0 "Operation track state of output" ; +VAL_TABLE_ QCSQNO2MON 3 "after CHAdeMO ver. 1.0" 2 "CHAdeMO ver. 1.0" 1 "CHAdeMO ver. 0.9" 0 "CHAdeMO ver. R4 or before " ; +VAL_TABLE_ FRESTOK 1 "Ready" 0 "Not ready" ; +VAL_TABLE_ FQCIRSENS 1 "Exist" 0 "Absent" ; +VAL_TABLE_ QCRLYCKST 3 "Both relays are NG" 2 "Positive relay is NG" 1 "Negative relay is NG" 0 "p & n relays OK or diag not comp" ; +VAL_TABLE_ FQCGFCKEND 1 "Completed" 0 "Not completed" ; +VAL_TABLE_ FQCRELAYST 1 "Close" 0 "Open" ; +VAL_TABLE_ EVSEST2 1 "Valid PWM input" 0 "No PWM input (EVSE_Wait)" ; +VAL_TABLE_ CANWAKEPDM 1 "Request" 0 "No request" ; +VAL_TABLE_ REFUSETOSLEEP 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ FQRLYCHKFIN2 1 "Completed" 0 "Not completed" ; +VAL_TABLE_ QRLYCHKEND2 3 "Both relays are NG" 2 "Positive relay is NG" 1 "Negative relay is NG" 0 "p & n relays OK or diag not comp" ; +VAL_TABLE_ FQRLYCHKFIN 1 "Completed" 0 "Not completed" ; +VAL_TABLE_ FHCCONDET 1 "Connected" 0 "Disconnected/input circuit fail" ; +VAL_TABLE_ MGPWRBST 1 "MG POWER BOOST IS READY" 0 "MG POWER BOOST IS NOT READY" ; +VAL_TABLE_ MGMODE 1 "Revolution Control Mode" 0 "Torque Control Mode" ; +VAL_TABLE_ BTA_MAIL_SEND_RQ 1 "Mail send request" 0 "no request" ; +VAL_TABLE_ LB_FAN_CON 3 "FAN Hi" 2 "FAN Mid" 1 "FAN Lo" 0 "FAN OFF" ; +VAL_TABLE_ LB_COOL_REQ 3 "High Battery Cooling Request" 2 "Middle Battery Cooling Request" 1 "Low Battery Cooling Request" 0 "Battery Cooling Not Request" ; +VAL_TABLE_ LB_IRSEN 1 "Malfunction" 0 "Normal" ; +VAL_TABLE_ LB_FANREQ 7 "level7 rotation" 6 "level6 rotation" 5 "level5 rotation" 4 "level4 rotation" 3 "level3 rotation" 2 "level2 rotation" 1 "level1 rotation" 0 "Stop" ; +VAL_TABLE_ LB_POUT_STATUS 3 "Immediate limit POUT" 2 "High rate limit POUT" 1 "Normal limit POUT" 0 "Not used" ; +VAL_TABLE_ LB_INTERLOCK 1 "Inter Lock connected" 0 "Not Inter Lock connected" ; +VAL_TABLE_ NAVISHIFTINDREQ 1 "Indicatior Request" 0 "No Indicatior Request" ; +VAL_TABLE_ DCM_PRI_ACON_Unit 1 "degF" 0 "degC" ; +VAL_TABLE_ RMT_AC_HVAC 1 "Remote control A/C ON" 0 "Remote control A/C OFF" ; +VAL_TABLE_ CanREFUSE_SLEEPP 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ EngStartNgJudgeAtcu 1 "Prohibit" 0 "Permit" ; +VAL_TABLE_ Engagement_Control_State 3 "Engage status" 2 "Shift phase" 1 "KickCharge, Precharge, HOLD sts" 0 "Not engage status " ; +VAL_TABLE_ ASC_MODE 15 "Not used" 14 "Not used" 13 "Not used" 12 "P33" 11 "ECO and Deceleration Increase" 10 "P32" 9 "P22" 8 "Normal and Deceleration Increase" 7 "P31" 6 "P21" 5 "P11" 4 "ECO" 3 "P30" 2 "P20" 1 "P10" 0 "Normal" ; +VAL_TABLE_ NextGP_MAP 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "neutral or parking" 9 "Reverse" 8 "8th gear(HCM Not used)" 7 "7th gear" 6 "6th gear" 5 "5th gear" 4 "4th gear" 3 "3rd gear" 2 "2nd gear" 1 "1st gear" 0 "declutched at rest" ; +VAL_TABLE_ CNIDLSTB 1 "Coast N-Idle standby OK" 0 "Coast N-Idle standby NG" ; +VAL_TABLE_ CNISCREQ 1 "Coast N-Idle Engine Control req" 0 "Not Coast N-Idle Eng Control req" ; +VAL_TABLE_ SELCT_TUE_VCM 3 "Not used" 2 "Timer2" 1 "Timer1" 0 "OFF" ; +VAL_TABLE_ TIMER_SELCT_VCM 1 "Pri A/C ON or Timer Charge ON" 0 "Pri A/C OFF or Timer Charge OFF" ; +VAL_TABLE_ SELCT_SAT_VCM 3 "Not used" 2 "Timer2" 1 "Timer1" 0 "OFF" ; +VAL_TABLE_ SELCT_FRI_VCM 3 "Not used" 2 "Timer2" 1 "Timer1" 0 "OFF" ; +VAL_TABLE_ CHG_TYP_INFO 3 "100V normal charge enforcement" 2 "200V normal charge PCS enforce" 1 "quick charge enforcement" 0 "Non enforcement (invalid)" ; +VAL_TABLE_ SELCT_THU_VCM 3 "Not used" 2 "Timer2" 1 "Timer1" 0 "OFF" ; +VAL_TABLE_ TIMER_START_DAY_VCM 7 "Saturday" 6 "Friday" 5 "Thursday" 4 "Wednesday" 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_TABLE_ SELCT_WED_VCM 3 "Not used" 2 "Timer2" 1 "Timer1" 0 "OFF" ; +VAL_TABLE_ SELCT_MON_VCM 3 "Not used" 2 "Timer2" 1 "Timer1" 0 "OFF" ; +VAL_TABLE_ MODE_SELCT_SW_VCM 1 "priority to Pri A/C or 80%Charge" 0 "priority to charge or 100%Charge" ; +VAL_TABLE_ SELCT_SUN_VCM 3 "Not used" 2 "Timer2" 1 "Timer1" 0 "OFF" ; +VAL_TABLE_ VCM_SPEC_NO 3 "Not used" 2 "Not used" 1 "timer 3type" 0 "timer 2type" ; +VAL_TABLE_ CHG_TYP_INFO2 1 "100V charge enforcement" 0 "200V charge enforcement" ; +VAL_TABLE_ NEW_VCM_SPEC_NO 3 "timer 3type + POI" 2 "timer 3type + POI" 1 "timer 3type + POI" 0 "default" ; +VAL_TABLE_ PRI_AC_SET1_IND_VCM 1 "ON" 0 "OFF" ; +VAL_TABLE_ PRI_AC_SET2_IND_VCM 1 "ON" 0 "OFF" ; +VAL_TABLE_ TOTAL_SMB_ONOFF 1 "SW is Pushed by 0b" 0 "SW is Pushed by 1b" ; +VAL_TABLE_ ECO_SMBSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ ECO_SMBSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ ECO_SMBSW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ SNOW_SMBSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ SNOW_SMBSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ SNOW_SMBSW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ STRRESPSW_SLOW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ STRRESPSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ STRRESPSW_QUICK 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ STREFFRTSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ STREFFRTSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ STREFFRTSW_HEAVY 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ TRQRESPSW_SNOW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ TRQRESPSW_ECO 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ TRQRESPSW_STD 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ TRQRESPSW_SPORT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_TABLE_ DRVMODE_SCREEN 7 "not setting screen" 6 "Not Used" 5 "CUSTOMIZE" 4 "Not Used" 3 "ECO" 2 "SNOW" 1 "SPORT" 0 "STANDARD" ; +VAL_TABLE_ ENGSHTDWN_DISP 3 "Not used" 2 "Shutting Down ON" 1 "ENGINE Reseting ON" 0 "Turn OFF" ; +VAL_TABLE_ NOTENGST_WARN 3 "Not used" 2 "Warning2 ON " 1 "Warning1 ON" 0 "Turn OFF" ; +VAL_TABLE_ BTA_MAIL_SEND_OK 1 "OK" 0 "NG" ; +VAL_TABLE_ VCM_WakeUpSleepCmd_For_ShBW 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "GoToSleep" ; +VAL_TABLE_ AT_354_FAIL 1 "failure" 0 "normal" ; +VAL_TABLE_ AT_245_FAIL 1 "failure" 0 "normal" ; +VAL_TABLE_ EGVRBTOK 1 "Battery temp is over 10 degC" 0 "Battery temp is below 10 degC" ; +VAL_TABLE_ EGVRHCFL 1 "HEV components have failure" 0 "HEV components have not failure" ; +VAL_TABLE_ REMOTE_AC_ANS_BK 3 "Remote A/C Refusal" 2 "Remote A/C Stop" 1 "Remote A/C Permission" 0 "OFF" ; +VAL_TABLE_ F_INDOORAIR 1 "Request" 0 "No Request" ; +VAL_TABLE_ AC_ECO_MODE_RQ 1 "request" 0 "no request" ; +VAL_TABLE_ CDMODERQ 7 "Not used" 6 "Not used +" 5 "Not used" 4 "Not used" 3 "Not used" 2 "Not used" 1 "request" 0 "no request" ; +VAL_TABLE_ RQASA 1 "require" 0 "not require" ; +VAL_TABLE_ BRKCOMSTAT 1 "abnormal" 0 "normal" ; +VAL_TABLE_ VCMRBFAIL 1 "abnormal" 0 "normal" ; +VAL_TABLE_ P_LOCK_KEY 1 "unlock" 0 "lock" ; +VAL_TABLE_ EGVR_OPERATION 1 "Request" 0 "No Request" ; +VAL_TABLE_ VCMINHIBIT 3 "P to other" 2 "D to R, or R to D " 1 "P to not N or N to not P" 0 "no Inhibit" ; +VAL_TABLE_ VCM_SIFT 3 "P range" 2 "D range or B range" 1 "R range" 0 "N range" ; +VAL_TABLE_ VIBCONTRQ 3 "FF & FB stop" 2 "Not used" 1 "FB stop" 0 "Not stop" ; +VAL_TABLE_ RLYP 1 "MainRelayPlus Output" 0 "MainRelayPlus Not Output" ; +VAL_TABLE_ BONPRRQ 1 "Request For Preparing HVPS" 0 "Not Request For Preparing HVPS" ; +VAL_TABLE_ BTSTRQ 1 "HEV System Start" 0 "HEV System Stop" ; +VAL_TABLE_ EXBK_STATUS 3 "Exh brake Requested and active" 2 "Exh brake Req but not active" 1 "Exh Brake Error" 0 "Exh Brake not requested" ; +VAL_TABLE_ DISCHARGERQ 1 "Discharge Request" 0 "Not Discharge Request" ; +VAL_TABLE_ SYSTEMCOMP 1 "System Down Complete " 0 "System Down Not Complete " ; +VAL_TABLE_ PWMOFFRQ 1 "PWM Stop" 0 "Normal" ; +VAL_TABLE_ fTTCL2ln 1 "Permit" 0 "Not permit" ; +VAL_TABLE_ ATMAP_CNG 15 "Not Used" 14 "Not Used" 13 "Not Used" 12 "Not Used" 11 "Not Used" 10 "Not Used" 9 "Not Used" 8 "INV PROTECTION" 7 "FS2" 6 "FS1" 5 "SOC" 4 "OPT2" 3 "OPT1" 2 "FAIL" 1 "POW" 0 "Not Request" ; +VAL_TABLE_ ASC_STOP_MODE 3 "Not Permit" 2 "LIMIT2" 1 "LIMIT1" 0 "Permit" ; +VAL_TABLE_ CL2TMODE 6 "Not Used" 5 "Not Used" 4 "Not Used" 1 "Not Used" 7 "No Request" 3 "Smooth L/U ON" 2 "Follow To TTCL2" 0 "OPEN CL2 Request" ; +VAL_TABLE_ SHIFTREVREQ 7 "4000rpm" 6 "No Limit" 5 "No Limit" 4 "No Limit" 3 "No Limit" 2 "No Limit" 1 "No Limit" 0 "No Limit" ; +VAL_TABLE_ fCL2SLPTAG 1 "EV@micro SLIP" 0 "Except EV@micro SLIP" ; +VAL_TABLE_ CABRBSW_HCM 1 "SW ON" 0 "SW OFF" ; +VAL_TABLE_ IDLRQ 1 "Request" 0 "NoRequest" ; +VAL_TABLE_ EGVRJGAR 1 "within the area OK/NG judged" 0 "outside of the area OK/NG judged" ; +VAL_TABLE_ EGVRAVJG 1 "EGVR monitor available" 0 "EGVR monitor not available" ; +VAL_TABLE_ DriveMode_Status 3 "Snow" 2 "Sports" 1 "ECO" 0 "Standard" ; +VAL_TABLE_ MFAN_MAINTE_ALERT 1 "Alert display request" 0 "No request" ; +VAL_TABLE_ ACSTRK 3 "full destroke" 2 "by HVAC and lowered to 3degC" 1 "full stroke and lowered to 3degC" 0 "by HVAC" ; +VAL_TABLE_ BUZZ_REQ_6MTA 3 "invaild" 2 "Door open for setting off etc." 1 "Clutch over-heat etc." 0 "no buzzer request" ; +VAL_TABLE_ RELEASE 3 "invalid" 2 "Not used" 1 "EHS release" 0 "EHS hold" ; +VAL_TABLE_ G_POSITION 254 "Error" 251 "Parking" 250 "Front" 249 "Front" 248 "Front" 247 "Front" 246 "Front" 245 "Front" 244 "Front" 243 "Front" 242 "Front" 241 "Front" 240 "Front" 239 "Front" 238 "Front" 237 "Front" 236 "Front" 235 "Front" 234 "Front" 233 "Front" 232 "Front" 231 "Front" 230 "Front" 229 "Front" 228 "Front" 227 "Front" 226 "Front" 225 "Front" 224 "Front" 223 "Front" 222 "Front" 221 "Front" 220 "Front" 219 "Front" 218 "Front" 217 "Front" 216 "Front" 215 "Front" 214 "Front" 213 "Front" 212 "Front" 211 "Front" 210 "Front" 209 "Front" 208 "Front" 207 "Front" 206 "Front" 205 "Front" 204 "Front" 203 "Front" 202 "Front" 201 "Front" 200 "Front" 199 "Front" 198 "Front" 197 "Front" 196 "Front" 195 "Front" 194 "Front" 193 "Front" 192 "Front" 191 "Front" 190 "Front" 189 "Front" 188 "Front" 187 "Front" 186 "Front" 185 "Front" 184 "Front" 183 "Front" 182 "Front" 181 "Front" 180 "Front" 179 "Front" 178 "Front" 177 "Front" 176 "Front" 175 "Front" 174 "Front" 173 "Front" 172 "Front" 171 "Front" 170 "Front" 169 "Front" 168 "Front" 167 "Front" 166 "Front" 165 "Front" 164 "Front" 163 "Front" 162 "Front" 161 "Front" 160 "Front" 159 "Front" 158 "Front" 157 "Front" 156 "Front" 155 "Front" 154 "Front" 153 "Front" 152 "Front" 151 "Front" 150 "Front" 149 "Front" 148 "Front" 147 "Front" 146 "Front" 145 "Front" 144 "Front" 143 "Front" 142 "Front" 141 "Front" 140 "Front" 139 "Front" 138 "Front" 137 "Front" 136 "Front" 135 "Front" 134 "Front" 133 "Front" 132 "Front" 131 "Front" 130 "Front" 129 "Front" 128 "Front" 127 "Front" 126 "Front" 125 "Neutral" 124 "Back" 123 "Back" 122 "Back" 121 "Back" 120 "Back" 119 "Back" 118 "Back" 117 "Back" 116 "Back" 115 "Back" 114 "Back" 113 "Back" 112 "Back" 111 "Back" 110 "Back" 109 "Back" 108 "Back" 107 "Back" 106 "Back" 105 "Back" 104 "Back" 103 "Back" 102 "Back" 101 "Back" 100 "Back" 99 "Back" 98 "Back" 97 "Back" 96 "Back" 95 "Back" 94 "Back" 93 "Back" 92 "Back" 91 "Back" 90 "Back" 89 "Back" 88 "Back" 87 "Back" 86 "Back" 85 "Back" 84 "Back" 83 "Back" 82 "Back" 81 "Back" 80 "Back" 79 "Back" 78 "Back" 77 "Back" 76 "Back" 75 "Back" 74 "Back" 73 "Back" 72 "Back" 71 "Back" 70 "Back" 69 "Back" 68 "Back" 67 "Back" 66 "Back" 65 "Back" 64 "Back" 63 "Back" 62 "Back" 61 "Back" 60 "Back" 59 "Back" 58 "Back" 57 "Back" 56 "Back" 55 "Back" 54 "Back" 53 "Back" 52 "Back" 51 "Back" 50 "Back" 49 "Back" 48 "Back" 47 "Back" 46 "Back" 45 "Back" 44 "Back" 43 "Back" 42 "Back" 41 "Back" 40 "Back" 39 "Back" 38 "Back" 37 "Back" 36 "Back" 35 "Back" 34 "Back" 33 "Back" 32 "Back" 31 "Back" 30 "Back" 29 "Back" 28 "Back" 27 "Back" 26 "Back" 25 "Back" 24 "Back" 23 "Back" 22 "Back" 21 "Back" 20 "Back" 19 "Back" 18 "Back" 17 "Back" 16 "Back" 15 "Back" 14 "Back" 13 "Back" 12 "Back" 11 "Back" 10 "Back" 9 "Back" 8 "Back" 7 "Back" 6 "Back" 5 "Back" 4 "Back" 3 "Back" 2 "Back" 1 "Back" 0 "Back" ; +VAL_TABLE_ C_STROKE 254 "Error" ; +VAL_TABLE_ OBD_GENERAL_TRIP 1 "GT for PDTC clear is comp" 0 "GT for PDTC clear is not comp" ; +VAL_TABLE_ AC_FD_TYPE 1 "Nissan" 0 "Renault" ; +VAL_TABLE_ COMPDEST_REQ 1 "compressor destroke requested" 0 "no compressor destroke requested" ; +VAL_TABLE_ R_DEF_REQ 1 "rear defrost request" 0 "no rear defrost request" ; +VAL_TABLE_ MOTOR_FAN_REQ 3 "high speed engine fan request" 2 "mid speed engine fan request" 1 "low speed engine fan request" 0 "no engine fan requested" ; +VAL_TABLE_ EGVRRQ 1 "EGVR is required" 0 "EGVR is not required" ; +VAL_TABLE_ EGVRMTNG 1 "confirmed NG" 0 "not confirmed NG" ; +VAL_TABLE_ EGVRRQMD 3 "not used" 2 "EGVR req normal temp mode" 1 "EGVR req low temp mode" 0 "EGVR req extremely low temp mode" ; +VAL_TABLE_ CNIDLE 1 "Coast N-Idle is permitted" 0 "Coast N-Idle is not permitted" ; +VAL_TABLE_ BMCEXE 1 "BMC active" 0 "BMC not active" ; +VAL_TABLE_ BMCACK 1 "BMC Acknowledgement" 0 "BMC not Acknowledgement" ; +VAL_TABLE_ SW_ST_MET 1 "Meter display Switch ON" 0 "Meter display Switch OFF" ; +VAL_TABLE_ RBSNC 1 "Brake Pedal Depressed" 0 "Brake Pedal released" ; +VAL_TABLE_ MBSNO 1 "Brake Pedal Depressed" 0 "Brake Pedal released" ; +VAL_TABLE_ TIMER_STATUS_MET 3 "Change Content Request" 2 "VCM Change Content Display" 1 "Change Content Pre-Request" 0 "Current" ; +VAL_TABLE_ CC_SL_STATUS 3 "SL active" 2 "CC active" 1 "Not used" 0 "CC & SL not active" ; +VAL_TABLE_ RESET_TRIP_METER 1 "reset request" 0 "not request" ; +VAL_TABLE_ TPMS_POSI_SYNC 1 "synchronize" 0 "unsynchronize" ; +VAL_TABLE_ TOWMODE 1 "ON" 0 "OFF" ; +VAL_TABLE_ TEMP_HIVOLTBATT_LAMP 3 "Not used" 2 "Turn on a low temp indicator" 1 "Turn on a high temp indicator" 0 "Lights out" ; +VAL_TABLE_ ADA1_PERMIT 1 "ADA1 possible" 0 "ADA1 impossible" ; +VAL_TABLE_ CHGTYPE 3 "Charge and A/C request exist" 2 "Timer/remote A/C request exists" 1 "Charge request exists" 0 "No request" ; +VAL_TABLE_ CHG_TYP_INFO_QUk 3 "100V normal charge enforcement" 2 "200V normal charge or with PCS" 1 "quick charge enforcement" 0 "Non enforcement (invalid)" ; +VAL_TABLE_ CHG_TYP_INFO 3 "not used" 2 "normal charge or with PCS" 1 "quick charge enforcement" 0 "Non enforcement" ; +VAL_TABLE_ AUTOSTOP 1 "Stop control operation" 0 "Stop control not operation" ; +VAL_TABLE_ Dischg_Stop_Warning 1 "request" 0 "not request" ; +VAL_TABLE_ Dischg_Stop_AlmSet 1 "enable" 0 "disenable" ; +VAL_TABLE_ SET_ITS 1 "Req Disp ITS setting view" 0 "Req Disp no ITS setting view" ; +VAL_TABLE_ MOD_STATUS 1 "Request to disp set ON of MOD" 0 "Request to disp set OFF of MOD" ; +VAL_TABLE_ BSW_STATUS 1 "Request to disp set ON of BSW" 0 "Request to disp sett OFF of BSW" ; +VAL_TABLE_ LDW_STATUS 1 "Request to disp set ON of LDW" 0 "Request to disp set OFF of LDW" ; +VAL_TABLE_ STRG_MODE 15 "UNKNOWN" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "STRG_MODE_PatternI" 7 "STRG_MODE_PatternH" 6 "STRG_MODE_PatternG" 5 "STRG_MODE_PatternF" 4 "STRG_MODE_PatternE" 3 "STRG_MODE_PatternD" 2 "STRG_MODE_PatternC" 1 "STRG_MODE_PatternB" 0 "STRG_MODE_PatternA" ; +VAL_TABLE_ DRIVE_MODE_POPREQ 1 "Request" 0 "Not Request" ; +VAL_TABLE_ VEHICLE_DRIVE_MODE 7 "Not used" 6 "Not used" 5 "Personal - Customize" 4 "Personal - TOURING" 3 "Personal - ECO" 2 "Personal - SNOW" 1 "Sport" 0 "Standard" ; +VAL_TABLE_ CURLOGIN_USERNUM_IDM 3 "User4" 2 "User3" 1 "User2" 0 "User1" ; +VAL_TABLE_ DGI_FAIL_FLAG 1 "DiGiAssi fail" 0 "DiGiAssi not fail" ; +VAL_TABLE_ LOGIN_KEYLMK_STAT 1 "LogIn ON" 0 "LogIn OFF" ; +VAL_TABLE_ LOGIN_PERM_FLAG 1 "User Change Permit" 0 "User Change Not Permit" ; +VAL_TABLE_ SPO_SMB 3 "Not Used" 2 "Middle" 1 "Light" 0 "Off" ; +VAL_TABLE_ STD_ASA 3 "Not Used" 2 "Not Used" 1 "OFF" 0 "ON" ; +VAL_TABLE_ STD_SMB 3 "Not Used" 2 "Middle" 1 "Light" 0 "Normal" ; +VAL_TABLE_ STD_STG_RES 3 "Not Used" 2 "Slow" 1 "Middle" 0 "Quick" ; +VAL_TABLE_ STD_STG_EFO 3 "Not Used" 2 "Light" 1 "Middle" 0 "Heavy" ; +VAL_TABLE_ STD_PT 3 "SNOW" 2 "ECO" 1 "SPORT" 0 "STANDARD" ; +VAL_TABLE_ BMCREQ 1 "Body Motion Control exe request" 0 "Body Motion Control stop request" ; +VAL_TABLE_ IRTACT 1 "IRT in regulation" 0 "IRT not in regulation" ; +VAL_TABLE_ EBS_LAMP 3 "ON : Brake is failed or lamp chk" 2 "Frashing(slow) : Under" 1 "Frashing(fast) : Finished" 0 "Brake is not failed" ; +VAL_TABLE_ FPCSCONDET_380 1 "connected" 0 "PCS not connected" ; +VAL_TABLE_ AT_TorqueRequestInProgress_174 7 " full torque control (switch)" 6 "torque increase (MAX)" 5 "torque reduction (MIN)" 4 "Not used" 3 "req of synchro rev cont_AT only" 2 " Not used" 1 " Not used" 0 "torque limit w/o AT shift change" ; +VAL_TABLE_ NEXTGP_174 15 "AT in limphome" 14 "Not used" 13 "Not used" 12 "Not used" 11 "CVT in continuous mode" 10 "neutral or parking" 9 "Reverse" 8 "8th gear" 7 " 7th gear" 6 "6th gear" 5 "5th gear" 4 "4th gear" 3 "3rd gear" 2 "2nd gear" 1 "1st gear" 0 " idle Neutral control" ; +VAL_TABLE_ HSA_STATUS_5E0 1 "HSA active" 0 "HSA inactive" ; +VAL_TABLE_ TCSBRACT_245 1 "TCS(ASR) Brake regulation" 0 "no TCS(ASR) Brake regulation" ; +VAL_TABLE_ ACC_AND_INCHIG_RANGE_2B3 1 "ACC and INCHING operating range" 0 "ACC&INCHING not operating range" ; +VAL_TABLE_ IGOFF_DELAY_REQUEST_580 1 "IGN_OFF_DELAY_REQUESTED" 0 "READY_TO_INITIATE_IGNOFF_SEQ" ; +VAL_TABLE_ ACC_SW_60D 1 "accessory supply on" 0 "accessory supply off" ; +VAL_TABLE_ ENGINE_STOP_35D 188 "Emergency engine stop request" ; +VAL_TABLE_ EPSTQONT_300 1 "below prescribed value for TA" 0 "morethanprescribedvalue for TA" ; +VAL_TABLE_ TACVTOK_177 1 "Torque Assist OK" 0 "Torque Assist NG" ; +VAL_TABLE_ TAACTorTAOK_6E2 1 "in operation" 0 "Not in operation" ; +VAL_TABLE_ SHINDREQ_6E2 1 "ON" 0 "OFF" ; +VAL_TABLE_ INTERRUPT_DISP_56C 7 "not used" 6 "not used" 5 "not used" 4 "not used" 3 "HDC activated" 2 "HSA/SSAactivate(assiststartveh)" 1 "HSA / SSA activated" 0 "No interrupt request" ; +VAL_TABLE_ TURN_EFFECT_56C 3 "not used" 2 "Right turn effect" 1 "Left turn effect" 0 "Default display" ; +VAL_TABLE_ SSA_SETTINGS_56C 3 "not used" 2 "ON" 1 "OFF" 0 "No Customization Available" ; +VAL_TABLE_ ASA_SETTINGS_56C 3 "not used" 2 "ON" 1 "OFF" 0 "No Customization Available" ; +VAL_TABLE_ ADA1_SETTINGS_56C 3 "not used" 2 "ON" 1 "OFF" 0 "No Customization Available" ; +VAL_TABLE_ CAR_EFFECT_56C 3 "Effect 3" 2 "Effect 2" 1 "Effect 1" 0 "Default display" ; +VAL_TABLE_ RR_TIRE_EFFECT_56C 3 "Effect 3" 2 "Effect 2" 1 "Effect 1" 0 "Default display" ; +VAL_TABLE_ RL_TIRE_EFFECT_56C 3 "Effect 3" 2 "Effect 2" 1 "Effect 1" 0 "Default display" ; +VAL_TABLE_ FR_TIRE_EFFECT_56C 3 "Effect 3" 2 "Effect 2" 1 "Effect 1" 0 "Default display" ; +VAL_TABLE_ FL_TIRE_EFFECT_56C 3 "Effect 3" 2 "Effect 2" 1 "Effect 1" 0 "Default display" ; +VAL_TABLE_ IDM_BUZZER_56C 3 " Not Used" 2 "SMB Function Limit Buzzer" 1 "SMB Cancel Buzzer" 0 "No Request" ; +VAL_TABLE_ MODE_SELECT_56C 3 "Not Used" 2 "PERSONAL" 1 "SPORT" 0 "STANDARD" ; +VAL_TABLE_ SMB_STA_56C 3 "SMB Malfunction" 2 "SMB ON(Flashing)" 1 "SMB ON" 0 "SMB OFF" ; +VAL_TABLE_ IDM_LAMP_56C 1 " IDM StateLamp ON" 0 " IDM StateLamp OFF" ; +VAL_TABLE_ SSA_STA_56C 3 "not used" 2 "Release" 1 "Activated" 0 "No Activation" ; +VAL_TABLE_ SMB_CTRL_LEVEL_56C 7 "not used" 6 "not used" 5 "not used" 4 "Control level 4" 3 "Control level 3" 2 "Control level 2" 1 "Control level 1" 0 "Control level 0" ; +VAL_TABLE_ MEGVRSTOP_1DA 1 "MG EGVR STOP" 0 "MG EGVR NOT STOP" ; +VAL_TABLE_ LIMIT_VOL_CTRL_4E2 1 "control" 0 "not control" ; +VAL_TABLE_ CPY_DEST_ACS_4_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_DEST_ACS_3_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_DEST_ACS_2_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_DEST_ACS_1_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_DEST_SET_8_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_DEST_SET_7_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_DEST_SET_6_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_DEST_SET_5_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_DEST_SET_4_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_DEST_SET_3_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_DEST_SET_2_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_DEST_SET_1_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_ACS_4_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_ACS_3_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_ACS_2_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_ACS_1_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_SET_8_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_SET_7_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_SET_6_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_SET_5_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_SET_4_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_SET_3_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_SET_2_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ CPY_SOUR_SET_1_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ DEL_ACS_OPERATE_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ DEL_SET_OPERATE_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ ACS_NUM_SELECT_4E2 3 "Select sound No 4" 2 "Select sound No 3" 1 "Select sound No 2" 0 "Select sound No 1" ; +VAL_TABLE_ SDS_NUM_SELECT_4E2 7 "Select sound No 8" 6 "Select sound No 7" 5 "Select sound No 6" 4 "Select sound No 5" 3 "Select sound No 4" 2 "Select sound No 3" 1 "Select sound No 2" 0 "Select sound No 1" ; +VAL_TABLE_ SUS_NUM_SELECT_4E2 7 "Select sound No 8" 6 "Select sound No 7" 5 "Select sound No 6" 4 "Select sound No 5" 3 "Select sound No 4" 2 "Select sound No 3" 1 "Select sound No 2" 0 "Select sound No 1" ; +VAL_TABLE_ RES_NUM_SELECT_4E2 7 "Select sound No 8" 6 "Select sound No 7" 5 "Select sound No 6" 4 "Select sound No 5" 3 "Select sound No 4" 2 "Select sound No 3" 1 "Select sound No 2" 0 "Select sound No 1" ; +VAL_TABLE_ SET_NUM_SELECT_4E2 7 "Select sound No 8" 6 "Select sound No 7" 5 "Select sound No 6" 4 "Select sound No 5" 3 "Select sound No 4" 2 "Select sound No 3" 1 "Select sound No 2" 0 "Select sound No 1" ; +VAL_TABLE_ ACS_VOL_UD_4E2 1 "Up operation" 0 "Down operation" ; +VAL_TABLE_ STRT_SHUT_VOL_UD_4E2 1 "Up operation" 0 "Down operation" ; +VAL_TABLE_ ACS_VOL_SW_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ STRT_SHUT_VOL_SW_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ ACS_SW_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ STRT_SHUT_SW_4E2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ SOUND_SETTING_SELECT_4E2 3 "User_Preset" 2 "Preset3" 1 "Preset2" 0 "Preset1" ; +VAL_TABLE_ INITIAL_4E2 1 " Initializing" 0 "Not initializing" ; +VAL_TABLE_ WARN_STATUS_CPY_DEL_4E1 7 "Not used" 6 "Not used" 5 "Not used" 4 "Delete finished" 3 "Under delete" 2 " Copy finished" 1 " Under copy" 0 " Initial value" ; +VAL_TABLE_ WARN_STATUS_CPY_DEL_CHANGE_4E1 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ WARN_STATUS_SD_4E1 7 "Not used" 6 "Not used" 5 "SDcard read finished" 4 "SDcard reading" 3 "SDcard data Error" 2 "SDcard read Error" 1 "SDcard not exist" 0 "Initial value" ; +VAL_TABLE_ WARN_STATUS_SD_CHANGE_4E1 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ AVAIL_EXT_ACS_LIST_4_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ AVAIL_EXT_ACS_LIST_3_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ AVAIL_EXT_ACS_LIST_2_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ AVAIL_EXT_ACS_LIST_1_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ AVAIL_EXT_SET_LIST_8_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ AVAIL_EXT_SET_LIST_7_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ AVAIL_EXT_SET_LIST_6_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ AVAIL_EXT_SET_LIST_5_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ AVAIL_EXT_SET_LIST_4_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ AVAIL_EXT_SET_LIST_3_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ AVAIL_EXT_SET_LIST_2_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ AVAIL_EXT_SET_LIST_1_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ ACS_IND_STATUS_4E1 7 "Not used" 6 "Not used" 5 "Not used" 4 "Select sound No 4" 3 "Select sound No 3" 2 "Select sound No 2" 1 "Select sound No 1" 0 "Not selected" ; +VAL_TABLE_ SDS_IND_STATUS_4E1 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Select sound No 8" 7 "Select sound No 7" 6 "Select sound No 6" 5 "Select sound No 5" 4 "Select sound No 4" 3 "Select sound No 3" 2 "Select sound No 2" 1 "Select sound No 1" 0 "Not selected" ; +VAL_TABLE_ SUS_IND_STATUS_4E1 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Select sound No 8" 7 "Select sound No 7" 6 "Select sound No 6" 5 "Select sound No 5" 4 "Select sound No 4" 3 "Select sound No 3" 2 "Select sound No 2" 1 "Select sound No 1" 0 "Not selected" ; +VAL_TABLE_ RES_IND_STATUS_4E1 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Select sound No 8" 7 "Select sound No 7" 6 "Select sound No 6" 5 "Select sound No 5" 4 "Select sound No 4" 3 "Select sound No 3" 2 "Select sound No 2" 1 "Select sound No 1" 0 "Not selected" ; +VAL_TABLE_ SET_IND_STATUS_4E1 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Select sound No 8" 7 "Select sound No 7" 6 "Select sound No 6" 5 "Select sound No 5" 4 "Select sound No 4" 3 "Select sound No 3" 2 "Select sound No 2" 1 "Select sound No 1" 0 "Not selected" ; +VAL_TABLE_ AVAIL_ACS_LIST_4_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ AVAIL_ACS_LIST_3_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ AVAIL_ACS_LIST_2_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ AVAIL_ACS_LIST_1_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ AVAIL_SET_LIST_8_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ AVAIL_SET_LIST_7_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ AVAIL_SET_LIST_6_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ AVAIL_SET_LIST_5_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ AVAIL_SET_LIST_4_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ AVAIL_SET_LIST_3_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ AVAIL_SET_LIST_2_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ AVAIL_SET_LIST_1_4E1 1 "Enable" 0 " Disable" ; +VAL_TABLE_ ACS_VOL_STATUS_4E1 7 " Volume level +3" 6 " Volume level +2" 5 " Volume level +1" 4 " Volume level 0" 3 " Volume level -1" 2 " Volume level -2" 1 " Volume level -3" 0 "Not used" ; +VAL_TABLE_ STRT_SHUT_VOL_STATUS_4E1 7 " Volume level +3" 6 " Volume level +2" 5 " Volume level +1" 4 " Volume level 0" 3 " Volume level -1" 2 " Volume level -2" 1 " Volume level -3" 0 "Not used" ; +VAL_TABLE_ ACS_STATUS_4E1 1 "On" 0 "Off" ; +VAL_TABLE_ STRT_SHUT_STATUS_4E1 1 "On" 0 "off" ; +VAL_TABLE_ USR_CST_AVAIL_4E1 1 "Enable" 0 "Disable" ; +VAL_TABLE_ SOUND_SETTING_STATUS_4E1 3 "User_Preset" 2 "Preset3" 1 "Preset2" 0 "Preset1" ; +VAL_TABLE_ STAT_CHG_REQ_TPMS_5FE 32 "TPMS changedefaultstatussignal" 31 "340kpa for rear" 30 "330kpa for rear" 29 "320kpa for rear" 28 "310kpa for rear" 27 "300kpa for rear" 26 "290kpa for rear" 25 "280kpa for rear" 24 "270kpa for rear" 23 "260kpa for rear" 22 "250kpa for rear" 21 "240kpa for rear" 20 "230kpa for rear" 19 "220kpa for rear" 18 "210kpa for rear" 17 "200kpa for rear" 16 "TPMS Reset request" 15 "340kpa for front" 14 "330kpa for front" 13 " 320kpa for front" 12 "310kpa for front" 11 "300kpa for front" 10 "290kpa for front" 9 "280kpa for front" 8 "270kpa for front" 7 "260kpa for front" 6 "250kpa for front" 5 "240kpa for front" 4 "230kpa for front" 3 "220kpa for front" 2 "210kpa for front" 1 "200kpa for front" 0 "No request" ; +VAL_TABLE_ RESET_TPMS_5E8 3 "no definition" 2 "support and reset" 1 "support" 0 "not support this function" ; +VAL_TABLE_ SELECT_PRESS_SUPPORT_5E8 1 "support" 0 "not support" ; +VAL_TABLE_ STAT_CHG_REQ_355 63 "not used" 62 "not used" 61 "not used" 60 "not used" 59 "DAS on" 58 "DAS off" 57 "not used" 56 "not used" 55 "SONAR_DETECTION_RANGE_NEAR" 54 "SONAR_DETECTION_RANGE_MIDDLE" 53 "SONAR_DETECTION_RANGE_FAR" 52 "not used" 51 "SONAR_BUZZER_VOLUME_LOW" 50 "SONAR_BUZZER_VOLUME_MIDDLE" 49 "SONAR_BUZZER_VOLUME_HIGH" 48 "not used" 47 "SONAR_SYSTEM_PAUSE_ON" 46 "SONAR_SYSTEM_ON(FR only)" 45 "SONAR_SYSTEM_ON(FR&RR)" 44 "SONAR_SYSTEM_OFF" 43 "not used" 42 "not used" 41 "SONAR_AUTO_DISPLAY_ON" 40 "SONAR_AUTO_DISPLAY_OFF" 39 "not used" 38 "not used" 37 "not used" 36 "not used" 35 "not used" 34 "Factory setting reset signal" 33 "not used" 32 "not used" 31 "not used" 30 "not used" 29 "not used" 28 "not used" 27 "MOD ON" 26 "MOD OFF" 25 "not used" 24 "not used" 23 "not used" 22 "Dark(BSW Brightness)" 21 "Standard(BSW Brightness)" 20 "Bright(BSW Brightness)" 19 "Late(LDW Timing)" 18 "Middle(LDW Timing)" 17 "Early(LDW Timing)" 16 "not used" 15 "not used" 14 "not used" 13 "not used" 12 "not used" 11 "not used" 10 "not used" 9 "not used" 8 "not used" 7 "not used" 6 "BSW ON" 5 "BSW OFF" 4 "LDW ON" 3 "LDW OFF" 2 "not used" 1 "not used" 0 " NO_REQUEST" ; +VAL_TABLE_ LB_EGVR_STOP_REQ_55B 1 "EGVR Stop Request" 0 "EGVR Not Stop Request" ; +VAL_TABLE_ LB_EGVR_MNTR_STOP_REQ_55B 1 "EGVR Monitor Stop Request" 0 "EGVR Monitor Not Stop Request" ; +VAL_TABLE_ TGETFON_1D1 1 "Request the retard" 0 "No Request" ; +VAL_TABLE_ HVAC_WaterPump_eng_Rq_4C3 1 "engaged request" 0 "disengaged request" ; +VAL_TABLE_ HVAC_EngIdleRPM_Inc_Rq_4C3 1 "idle increase request" 0 "no idle increase request" ; +VAL_TABLE_ Term61_Actv_Sub_N_554 1 "request Charge Lamp ON" 0 "sub battery is OK" ; +VAL_TABLE_ BRKLMPOFFRLY_FAIL_288 1 "Abnormal" 0 "Normal" ; +VAL_TABLE_ BRKLMPOFFRLYD_209 3 "Not Used" 2 "BNO Abnormal" 1 "BNC Abnormal" 0 "normal" ; +VAL_TABLE_ PROBAB_EXIST_OBJ4_474 7 "< 99.99%" 6 "< 99.9%" 5 "< 99%" 4 "< 90%" 3 "< 75%" 2 " < 50%" 1 "< 25%" 0 "invalid" ; +VAL_TABLE_ LOST_REASON_OBJ3_473 4 "RANGE_REDUCTION" 3 "ELEVATION" 2 "AZIMUTH_RIGHT" 1 "AZIMUTH_LEFT" 0 "NO_INFO" ; +VAL_TABLE_ STATUS_OBJ3_473 3 "not used" 2 "OBJ_VALID" 1 "VALID_NEW" 0 "NO_OBJ" ; +VAL_TABLE_ DYN_OBJ3_473 5 "CROSS" 4 "ONCOME" 3 "MOVING" 2 "STOPPED" 1 "STANDING" 0 "NO_DYNAMIC" ; +VAL_TABLE_ PROBAB_EXIST_OBJ3_472 7 "< 99.99%" 6 "< 99.9%" 5 "< 99%" 4 "< 90%" 3 "< 75%" 2 "< 50%" 1 "< 25%" 0 "invalid" ; +VAL_TABLE_ LOST_REASON_OBJ2_471 4 "RANGE_REDUCTION" 3 " ELEVATION" 2 " AZIMUTH_RIGHT" 1 " AZIMUTH_LEFT" 0 "NO_INFO" ; +VAL_TABLE_ STATUS_OBJ2_471 3 "not used" 2 "OBJ_VALID" 1 "VALID_NEW" 0 "NO_OBJ" ; +VAL_TABLE_ DYN_OBJ2_471 5 "CROSS" 4 "ONCOME" 3 "MOVING" 2 "STOPPED" 1 "STANDING" 0 "NO_DYNAMIC" ; +VAL_TABLE_ PROBAB_EXIST_OBJ2_470 7 " < 99.99%" 6 " < 99.9%" 5 " < 99%" 4 "< 90%" 3 "< 75%" 2 "< 50%" 1 "< 25%" 0 "invalid" ; +VAL_TABLE_ MEAS_OBJ_24D 1 "Object measured(Valid)" 0 "Object not measured" ; +VAL_TABLE_ DYN_PROP_OBJ_24D 4 "oncoming" 3 "moving" 2 "stopped" 1 "standing" 0 "unclassified" ; +VAL_TABLE_ MEAS_OBJ_24C 1 "Object measured(Valid)" 0 "Object not measured" ; +VAL_TABLE_ DYN_PROP_OBJ_24C 4 "oncoming" 3 "moving" 2 "stopped" 1 "standing" 0 "unclassified" ; +VAL_TABLE_ LS_CUT_IN_4EC 8 "left outside is valid. " 4 "left inside is valid. " 2 "right inside is valid. " 1 "right outsideis valid." 0 "This signal is invalid" ; +VAL_TABLE_ ASCDON_DISP_4E9 7 "vehicle not equipped with CC&SL" 6 "CC requested and in failure" 5 "(CC ON& inactive)or suspended" 4 "CC active" 3 "SL requested and in failure" 2 "(SL on & inactive)or suspended" 1 "SL active" 0 "Cruise Control&Speed Limit OFF" ; +VAL_TABLE_ SPDBLREQ_4E9 1 "flashing display" 0 "fix display" ; +VAL_TABLE_ MSS_OFF_A_BW_4CC 1 "display BCI OFF message" 0 "No message" ; +VAL_TABLE_ MSS_MAL_A_BW_4CC 1 "display BCI malfunction message" 0 "No message" ; +VAL_TABLE_ MSS_MAL_A_FW_4CC 1 "display FCA malfunction message" 0 "No message" ; +VAL_TABLE_ MSS_MAL_D_BS_4CC 1 "display BSI malfunction message" 0 "No message" ; +VAL_TABLE_ MSS_MAL_D_LN_4CC 1 "display LDP malfunction message" 0 "No message" ; +VAL_TABLE_ MSS_MAL_D_FW_4CC 1 "display DCA malfunction message" 0 "No message" ; +VAL_TABLE_ MSS_SB_A_BW_4CC 1 "disp_BCISideradarblocked message" 0 "No message" ; +VAL_TABLE_ MSS_SB_D_BS_4CC 1 "disp_BCISideradarblocked message" 0 "No message" ; +VAL_TABLE_ MSS_SB_W_BS_4CC 1 "disp_BSWSideradarblockedmessage" 0 "No message" ; +VAL_TABLE_ MSS_C_D_BS_4CC 1 "BSI cancel" 0 "No display" ; +VAL_TABLE_ MSS_C_D_LN_4CC 1 "LDP cancel" 0 "No display" ; +VAL_TABLE_ MSS_C_D_FW_4CC 1 "DCA cancel" 0 "No display" ; +VAL_TABLE_ MSS_C_CC_4CC 1 "Cruise system cancel" 0 "No display" ; +VAL_TABLE_ MSS_CNCL_C_4CC 3 "Display VDC OFF cancel message" 2 "Disp_Snowmodeactivat_cancelmess" 1 "DisplaySlipperyloadcancelmessage" 0 "No display" ; +VAL_TABLE_ MSS_NO_W_4CC 1 "displaynoselectdrivingaidmessage" 0 "No message" ; +VAL_TABLE_ MSS_NO_D_4CC 1 "DISP_noselectdrivingaidsmessage" 0 "No message" ; +VAL_TABLE_ MSS_FB_A_FW_4CC 1 "displayFCAFrradarblocked message" 0 "No message" ; +VAL_TABLE_ MSS_FB_D_FW_4CC 1 "displayDCAFrradarblocked message" 0 "No message" ; +VAL_TABLE_ MSS_FB_W_FW_4CC 1 "display FCWFrradarblockedmessage" 0 "No message" ; +VAL_TABLE_ MSS_FB_CC_4CC 1 "DISP_CRUISEFrradarblockedmessage" 0 "No message" ; +VAL_TABLE_ MSS_CH_D_BS_4CC 1 "display BSICamerahightempmessage" 0 "No message" ; +VAL_TABLE_ MSS_CH_D_LN_4CC 1 "display LDPCamerahightempmessage" 0 "No message" ; +VAL_TABLE_ MSS_CH_W_LN_4CC 1 "display LDWCamerahightempmessage" 0 "No message" ; +VAL_TABLE_ MSS_MAL_W_DS_4CC 1 "display BSW malfunction message" 0 "No message" ; +VAL_TABLE_ MSS_MAL_W_LN_4CC 1 "display LDW malfunction message" 0 "No message" ; +VAL_TABLE_ MSS_MAL_W_FW_4CC 1 "display FCW malfunction message" 0 "No message" ; +VAL_TABLE_ MSS_PH_A_FW_4CC 1 "display FCAPedalHightemp message" 0 "No message" ; +VAL_TABLE_ MSS_PH_A_BW_4CC 1 "display BCIPedalHightempmessage" 0 "No message" ; +VAL_TABLE_ MSS_PH_D_FW_4CC 1 "display DCA PedalHightempmessage" 0 "No message" ; +VAL_TABLE_ Warning_Driver_Attention_4CC 1 "warning" 0 "No warning" ; +VAL_TABLE_ Driver_Attention_Level_4CC 15 "System Malfunction" 14 "System Stand by" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Level 8" 8 "Level 7" 7 "Level 6" 6 "Level 5" 5 "Level 4" 4 "Level 3" 3 "Level 2" 2 "Level 1" 1 "System OFF" 0 "No display" ; +VAL_TABLE_ SET_D_RR_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_DCA_CUR_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ STS_RR_4CB 7 "not used" 6 "not used" 5 "Display System Failure" 4 "Display Status Temporary Failure" 3 "Display Status Temporary OFF" 2 "Display Status ON" 1 "Display Status OFF" 0 "No setting" ; +VAL_TABLE_ SET_FR_SNS_4CB 3 "Display setting LATE" 2 "Display setting STANDARD" 1 "Display setting EARLY" 0 "No setting" ; +VAL_TABLE_ SET_FR_DST_4CB 3 "Display setting SHORT" 2 "Display setting MIDDLE" 1 "Display setting LONG" 0 "No setting" ; +VAL_TABLE_ SET_BS_BRT_4CB 3 "Display setting DARK" 2 "Display setting NORMAL" 1 "Display setting BRIGHT" 0 "No setting" ; +VAL_TABLE_ SET_LN_T_4CB 3 "Display setting LATE" 2 "Display setting STANDARD" 1 "Display setting EARLY" 0 "No setting" ; +VAL_TABLE_ SET_WARN_VOL_4CB 3 "Display setting HIGH" 2 "Display setting MIDDLE" 1 "Display setting LOW" 0 "No setting" ; +VAL_TABLE_ SET_D_BS_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_D_LN_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_D_FR_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_ICC_CUR_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_ASL_SPD_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_ICC_SPD_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_W_TS_4CB 3 "Not used" 2 "Status ON" 1 "Status OFF" 0 "Nothing" ; +VAL_TABLE_ SET_ACCEL_CNT_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_DR_AT_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_A_BR_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_BA_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_W_BS_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_W_LN_4CB 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SET_W_FR_4CB 3 "Not used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_TABLE_ SSA_Enbl_Rq_AS_100 1 "stop/start enabled" 0 "stop/start not enabled " ; +VAL_TABLE_ OFC_Supp_Rq_AS_100 3 "SNA" 2 "Enable" 1 "Suppress" 0 "No request" ; +VAL_TABLE_ EngTrqMax_Rq_AS_100 1 "maximum request" 0 "no maximum request" ; +VAL_TABLE_ EngTrqMin_Rq_AS_100 1 "minimum request" 0 "no minimum request" ; +VAL_TABLE_ IDM_Alive_288 1 "IDM normal" 0 "IDM abnormal" ; +VAL_TABLE_ IDM_Enable_288 1 "IDM ready state" 0 "IDM non state operation" ; +VAL_TABLE_ IDM_YMC_REQ_288 3 "not used" 2 "AUC request" 1 "AVDC request" 0 "ADAS request" ; +VAL_TABLE_ IDM_REQ_288 1 "IDM request" 0 "ADAS request" ; +VAL_TABLE_ SSA_DsablPrmnt_Rq_SBC 1 "stop/start permanently disabled" 0 "stop/start not disabled" ; +VAL_TABLE_ SSA_Enbl_Rq_SBC_0D5 1 "stop/start permitted" 0 "stop/start not permitted" ; +VAL_TABLE_ IntrvntnMd_SBC_0D5 3 "Torque increasing" 2 "Torque decreasing" 1 "Intervention mode fastest" 0 "Intvn mode min fuel consumption" ; +VAL_TABLE_ EngTrqMax_Rq_SBC_0D5 1 "maximum request" 0 "no maximum request" ; +VAL_TABLE_ EngTrqMin_Rq_SBC_0D5 1 "minimum request" 0 "no minimum request" ; +VAL_TABLE_ DPF_RegenActive_Mode_4C5 1 "DPF regeneration" 0 "no DPF regeneration" ; +VAL_TABLE_ GenStatus_4C5 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "alt" 6 "alternator fault is detected" 5 "alternator comm faulT confirmed" 4 "alternator comm fault detected" 3 "power limitation" 2 "ECM is a simple Gate" 1 "Starting Sequence" 0 "not initialized" ; +VAL_TABLE_ GenSupplr_N_4C5 7 "Not used" 6 "Visteon" 5 "Melco" 4 "Denso" 3 "Hitachi" 2 "Delphi" 1 "Valeo" 0 "Bosch" ; +VAL_TABLE_ AddPwrCnsmr_On_Rq_4C5 1 "additional PWR consumer request" 0 "no add power consumer request" ; +VAL_TABLE_ FGLWRLST_DIESEL_N_4C5 1 "Glowing is active" 0 "Glowing not active" ; +VAL_TABLE_ Gear_type_19B 3 "DCT" 2 "CVT" 1 "Automatic gearbox" 0 "Manual gearbox" ; +VAL_TABLE_ Gear_position_19B 15 "AT in limphome(unavailable)" 14 "Not used" 13 "Not used" 12 "Not used" 11 "CVT in contious mode" 10 "Neautral or parking" 9 "Reverse gear" 8 "8th gear" 7 " 7th gear" 6 "6th gear" 5 "5th gear" 4 "4th gear" 3 "3rd gear" 2 "2nd gear" 1 "1st gear" 0 "decluthed at rest" ; +VAL_TABLE_ IdleStop_Relaunch_19B 3 "Not in used" 2 "S&S Relaunch OK" 1 "S&S Relaunch Failure" 0 "Unavailable" ; +VAL_TABLE_ EngineStopRequestOrigine_19B 8 "ENG stopped by emergency req" 7 "Not used" 6 "Not used" 5 "Not used" 4 "ENG stopped by normal driver req" 3 "Not used" 2 "ENG stopped by normal sys req" 1 "Engine stopped by other causes" 0 "No engine stop request" ; +VAL_TABLE_ PartOFC_Actv_150 1 "active" 0 "Not active" ; +VAL_TABLE_ FullOFC_Actv_150 1 "active" 0 "Not active" ; +VAL_TABLE_ Idle_Stop_Indicator_Request_554 3 "high-cycle:2Hz +buzzersound2Hz" 2 "(low cycle: 1Hz)" 1 "light" 0 "off" ; +VAL_TABLE_ ISS_STANDBY_IND_19A 1 "IS Standby" 0 "IS not Standby" ; +VAL_TABLE_ IDLESTOPINHI_19A 1 "Auto Start is requested" 0 "Auto Stop is authrized" ; +VAL_TABLE_ STOPAUTOREQ_19A 1 "autorized" 0 "failure" ; +VAL_TABLE_ ShftChrDsp_Rq_SBC_106 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "SKL10" 9 "SKL9" 8 "SKL8" 7 "SKL7" 6 "SKL6" 5 "SKL5" 4 "SKL4" 3 "SKL3" 2 "SKL2" 1 "SKL1" 0 "SKL0" ; +VAL_TABLE_ PwrFreeD_Supp_Rq_AS_106 3 "Not used" 2 "powerfree in D not allowed" 1 "powerfree in D allowed" 0 "nopowerfreeinDsuppressionrequest" ; +VAL_TABLE_ GrMin_Rq_SBC_106 7 "Requested gear, lower limit = 7" 6 "Requested gear, lower limit = 6" 5 "Requested gear, lower limit = 5" 4 "Requested gear, lower limit = 4" 3 "Requested gear, lower limit = 3" 2 "Requested gear, lower limit = 2" 1 "Requested gear, lower limit = 1" 0 "Passive value" ; +VAL_TABLE_ GrMax_Rq_SBC_106 7 "Requested gear, upper limit = 7" 6 "Requested gear, upper limit = 6" 5 "Requested gear, upper limit = 5" 4 "Requested gear, upper limit = 4" 3 "Requested gear, upper limit = 3" 2 "Requested gear, upper limit = 2" 1 "Requested gear, upper limit = 1" 0 "Passive value" ; +VAL_TABLE_ GrMinMax_Rq_DTR_106 1 "min/max req from Cruise Control" 0 "min/max request from ESP" ; +VAL_TABLE_ HSA_Sys_Flt_011 1 "Fault" 0 "No fault" ; +VAL_TABLE_ ESP_Sys_Stat_011 3 "Exhaust emission test" 2 "Diagnostics" 1 "Normal operation" 0 "System error" ; +VAL_TABLE_ BrkIntrvntn_Actv_ESP_011 1 "ESP Brake Intervention active" 0 "No ESP Brake Intervention" ; +VAL_TABLE_ FullBrk_Actv_011 1 "ABS Braking" 0 "No ABS Braking" ; +VAL_TABLE_ Brk_Stat_011 3 "Signal Not Available" 2 "Not defined" 1 " Braking" 0 "No Braking" ; +VAL_TABLE_ BrkPdl_Stat_011 3 "Signal Not Available" 2 "Not defined" 1 "Pedal Pressed " 0 "Pedal Upstopped " ; +VAL_TABLE_ FVHMGVOL_1F2 1 "The voltage of inverter > = 60V" 0 "The voltage of inverter < 60V" ; +VAL_TABLE_ GrMax_Rq_SBC_2B0 7 "Requested gear, upper limit = 7" 6 "Requested gear, upper limit = 6" 5 "Requested gear, upper limit = 5" 4 "Requested gear, upper limit = 4" 3 "Requested gear, upper limit = 3" 2 "Requested gear, upper limit = 2" 1 "Requested gear, upper limit = 1" 0 "Passive value" ; +VAL_TABLE_ GrMin_Rq_SBC_2B0 7 "Requested gear, lower limit = 7" 6 "Requested gear, lower limit = 6" 5 "Requested gear, lower limit = 5" 4 "Requested gear, lower limit = 4" 3 "Requested gear, lower limit = 3" 2 "Requested gear, lower limit = 2" 1 "Requested gear, lower limit = 1" 0 "Passive value" ; +VAL_TABLE_ ACCACT_2B0 1 "EngineTorque Request" 0 "EngineTorque Not Request" ; +VAL_TABLE_ ST_DRV_STA_1D4 1 "Starter driven" 0 "Not starter driven" ; +VAL_TABLE_ STCL1_1D4 1 "Clutch1 : connect" 0 "Clutch1 : open" ; +VAL_TABLE_ fCOAST_1D4 1 "COAST" 0 "Not COAST" ; +VAL_TABLE_ QKRESTIMP_191 1 "Quick restart impossible" 0 "Quick restart possible" ; +VAL_TABLE_ CRANKING_PERMISSION_191 1 "CRANKING OK" 0 "CRANKING NG" ; +VAL_TABLE_ ESANSBK_191 1 "starter engine start required " 0 "starterenginestartnotrequired" ; +VAL_TABLE_ STS_EXT_BEEP_57A 1 "Beeped" 0 "No beep" ; +VAL_TABLE_ CUTOFF_SW_HCM_50B 1 "SW is pulled(power cut)" 0 "SW is pushed(power supply)" ; +VAL_TABLE_ AWD_FLAG_50B 1 " AWD Vehicle" 0 "2WD Vehicle" ; +VAL_TABLE_ NLACT_50B 1 "During no load enforcement" 0 "not during no load enforcement" ; +VAL_TABLE_ Inverter_Cooling_condition_50B 1 "not Normal" 0 "Normal" ; +VAL_TABLE_ InvertercoolingWaterpumpcond_50B 7 "Fail revolution" 6 "Not used" 5 "Not used" 4 "Not used" 3 "High revolution" 2 "Mid revolution" 1 "Low revolution" 0 "Stop" ; +VAL_TABLE_ HCM_IGN_CONDITION_1D4 1 "IGN-ON" 0 " IGN-OFF" ; +VAL_TABLE_ PDMCODE_393 0 "No fail" ; +VAL_TABLE_ ChargingSound_Status_559 3 "Invalid" 2 "Admit to charge Battery SOUND ON" 1 "Charging-Plug SOUND ON" 0 "OFF" ; +VAL_TABLE_ SUS_Status_559 3 "Invalid" 2 "MLD_SOUND ON" 1 "SOD_SOUND ON" 0 "OFF" ; +VAL_TABLE_ VSP_Status_559 3 "REVERSE_SOUND" 2 "DRIVE_SOUND" 1 "START_SOUND" 0 "OFF" ; +VAL_TABLE_ ResetInfo_DSC_559 1 "exit from reset" 0 "not reset" ; +VAL_TABLE_ SUS_SET_STA_559 15 "Not Used" 14 "Not Used" 13 "Not Used" 12 "Not Used" 11 "Not Used" 10 "Not Used" 9 "Not Used" 8 "Not Used" 7 "Not Used" 6 "Not Used" 5 "Not Used" 4 "Not Used" 3 "SOUND3" 2 "SOUND2" 1 "SOUND1" 0 "OFF" ; +VAL_TABLE_ VSP_IND_STA_559 1 "IND ON" 0 "IND OFF" ; +VAL_TABLE_ DSC_REFUSE_559 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ VSP_SOUND_CHG_REQ_5E3 1 "Request" 0 "No Request" ; +VAL_TABLE_ SUS_SOUND_5E3 15 "Not Used" 14 "Not Used" 13 "Not Used" 12 "Not Used" 11 "Not Used" 10 "Not Used" 9 "Not Used" 8 "Not Used" 7 "Not Used" 6 "Not Used" 5 "Not Used" 4 "Not Used" 3 "SOUND3" 2 "SOUND2" 1 "SOUND1" 0 "OFF" ; +VAL_TABLE_ VSP_REV_BUZZER_355 1 "Trigger ON" 0 "Trigger OFF" ; +VAL_TABLE_ CHG_SOUND_REQ_50D 3 "Unlock Charging-Plug SOUND ON" 2 "Admit to charge Battery SOUND ON" 1 "Charge-Plug SOUND ON" 0 "OFF" ; +VAL_TABLE_ STAT_CHG_REQ_4F2 63 "BCI auto resume ON" 62 "BCI auto resume OFF" 61 "not used" 60 "not used" 59 "DAS on" 58 "DAS off" 57 "not used" 56 "not used" 55 "SONAR_DETECTION_RANGE_NEAR" 54 "SONAR_DETECTION_RANGE_MIDDLE" 53 "SONAR_DETECTION_RANGE_FAR" 52 "not used" 51 "SONAR_BUZZER_VOLUME_LOW" 50 "SONAR_BUZZER_VOLUME_MIDDLE" 49 "SONAR_BUZZER_VOLUME_HIGH" 48 "not used" 47 "not used" 46 "SONAR_REAR_ON" 45 "SONAR_REAR_OFF" 44 "SONAR_FRONT_ON" 43 "SONAR_FRONT_OFF" 42 "not used" 41 "SONAR_AUTO_DISPLAY_ON" 40 "SONAR_AUTO_DISPLAY_OFF" 39 "not used" 38 "not used" 37 "not used" 36 "IBA ON" 35 "IBA OFF" 34 "Factory setting reset signal" 33 "not used" 32 "not used" 31 "not used" 30 "not used" 29 "BCI ON" 28 "BCI OFF" 27 "MOD ON" 26 "MOD OFF" 25 "Low(DCA Pedal Sens)" 24 "Middle(DCA Pedal Sens)" 23 "High(DCA Pedal Sens)" 22 "Dark(BSW Brightness)" 21 "Standard(BSW Brightness)" 20 "Bright(BSW Brightness)" 19 "Late(LDW Timing)" 18 "Middle(LDW Timing)" 17 "Early(LDW Timing)" 16 "not used" 15 "not used" 14 "BSI OFF" 13 "BSI OFF" 12 "LDP ON" 11 "LDP OFF" 10 "DCA ON" 9 "DCA OFF" 8 "TSR ON" 7 "TSR OFF" 6 "BSW ON" 5 "BSW OFF" 4 "LDW ON" 3 "LDW OFF" 2 "not used" 1 "not used" 0 " NO_REQUEST" ; +VAL_TABLE_ SOC_DISP_50D 255 "no display (blank)" 254 "display as ---" ; +VAL_TABLE_ REQ_APO_MB_2B0 1 "request" 0 "no request" ; +VAL_TABLE_ PFCW_ACT_2B0 1 "activate" 0 "not activate" ; +VAL_TABLE_ IPA_FAIL_27D 1 "Fail" 0 "normal" ; +VAL_TABLE_ IPA_STATUS_27D 3 "Not used" 2 "IPA ON and Steering ON" 1 "IPA ON and Steering OFF" 0 "IPA OFF" ; +VAL_TABLE_ DDC_MON 3 "Component Fail" 2 "Output limitation" 1 "Active" 0 "Stop (Inactive)" ; +VAL_TABLE_ IS_REQ_ACM 1 "Request" 0 "Not request" ; +VAL_TABLE_ REV_UP_REQ_HIGH_OIL 1 "Rev up request" 0 "Non-Rev up request" ; +VAL_TABLE_ FS_LMT_ENG_REV 3 " engine revolution limit level 3" 2 " engine revolution limit level 2" 1 " engine revolution limit level 1" 0 "Non limit request" ; +VAL_TABLE_ CLENGENA 1 "engage enable " 0 "engage disable" ; +VAL_TABLE_ FS_SFCUTM_RQ 1 "Safety fuel cut mode request" 0 "Non-Safety fuel cut mode request" ; +VAL_TABLE_ FS_LMT_ENG_PWR 1 "engine power limit request" 0 "Non-engine power limit request" ; +VAL_TABLE_ FS_LMT_APO 1 "delta APO limit reqest " 0 "Non-delta APO limit reqest " ; +VAL_TABLE_ INTER_LOCK_OK 1 "Intermediate-lock status" 0 "Not intermediate-lock status" ; +VAL_TABLE_ ACCUT_ENG 1 "ENG AC CUT Reques" 0 "ENG AC CUT NOT Request " ; +VAL_TABLE_ DISCHG_ALARM_REQ 1 "ON request" 0 "OFF request" ; +VAL_TABLE_ FDDC_INHREQ 1 "Prohibition of 12VDCDCoperation" 0 " Permission of 12VDCDCoperation" ; +VAL_TABLE_ PORT_LOCK_INTSW 3 "unlock" 2 "lock" 1 "Auto lock" 0 "OFF" ; +VAL_TABLE_ SOW_SEN_DISABLE 1 "invalid" 0 "valid" ; +VAL_TABLE_ SOW_SEN_MODE 1 "Active" 0 "Static" ; +VAL_TABLE_ SOW_SEN_COND 1 "Report" 0 " Not report" ; +VAL_TABLE_ SOW_SEN_INIT 1 "Initialization" 0 "Not initialization" ; +VAL_TABLE_ SOW_SEN_FAIL 1 "Fail" 0 "not Fail" ; +VAL_TABLE_ ALERT_IND_DRIVE 1 "method2" 0 "method1" ; +VAL_TABLE_ SOW_SEN_CONFIDENCE 1 "Active mode" 0 "default mode" ; +VAL_TABLE_ CTA_FUNC_ACT 1 "CTA function activation" 0 "CTA function deactivation" ; +VAL_TABLE_ SOW_SEN_FUNC_STAT 1 "CTA recognition mode" 0 " BSD recognition mode" ; +VAL_TABLE_ WARN 3 " Not used" 2 " Not used" 1 "ON (for SOW function)" 0 "OFF" ; +VAL_TABLE_ ALERT_IND_PAT 3 "pattern4" 2 "pattern3" 1 "pattern2" 0 "pattern1" ; +VAL_TABLE_ INITIAL 1 "Initialize" 0 "Not initialize" ; +VAL_TABLE_ BEEP_TYPE 1 "Sound Error BEEP" 0 "Sound Normal BEEP" ; +VAL_TABLE_ VIEW_CH_REQ 1 "Req disp view of cam" 0 "Req disp othr thn view of cam" ; +VAL_TABLE_ BEEP_REQ 1 "Request message is sent by 0b" 0 "Request message is sent by 1b" ; +VAL_TABLE_ AOD_BEEP2_REQ 1 "AOD Beep B" 0 " No request" ; +VAL_TABLE_ AOD_BEEP1_REQ 1 "AOD Beep A" 0 " No request" ; +VAL_TABLE_ ZKREQ_Copy_17 1 "road property conf request" 0 "no road property conf request" ; +VAL_TABLE_ MOD_BUZ_REQ 1 "demand" 0 " no demand" ; +VAL_TABLE_ NEAR_OBJ_FLAG 1 "detection object is near" 0 "detection object is not near" ; +VAL_TABLE_ PARK_GUIDE_STATUS 3 " reservation" 2 " reservation" 1 " Among parking guides" 0 "Besides a parking guide" ; +VAL_TABLE_ MOD_SYS_STATUS 3 "Temporary OFF" 2 "Inactive" 1 "Active" 0 "Permanent OFF" ; +VAL_TABLE_ MOD_DETECT 4 "detect it in the rear" 3 "detect it in the left" 2 "detect it in the right" 1 "detect it in the front" 0 "no detection" ; +VAL_TABLE_ STAT_CHG_REQ 5 "SONAR_SYSTEM_OFF" 4 " not used" 3 "SONAR_AUTO_DISPLAY_ON" 2 "SONAR_AUTO_DISPLAY_OFF" 1 "not used" 0 "NO_REQUEST" ; +VAL_TABLE_ STS_XX 3 "Max detection range Near (- 10%)" 2 "Max detection level Middle" 1 "Max detection level Far (+ 10%)" 0 "RESERVE" ; +VAL_TABLE_ REQ_DISP 1 "sonar detec disp req" 0 "No sonar detec disp req" ; +VAL_TABLE_ NOSENSOR_SENSOR 1 "sensor" 0 "No sensor" ; +VAL_TABLE_ STS_SETTING 1 "Meter Setting avaiilable" 0 "Meter Set unav (AVM setting)" ; +VAL_TABLE_ STS_AUTO_DISP 1 "DISPLAY OFF" 0 "DISPLAY ON" ; +VAL_TABLE_ SOUND_CONT 1 "Continuous" 0 "Discontinuous" ; +VAL_TABLE_ SONAR_S_REQ 3 "SONAR deactivated(long)" 2 "SONAR deactivated(short)" 1 "SONAR activated" 0 "no SONAR status display request" ; +VAL_TABLE_ XX_CEN 1 "101b, 110b, 111b" 0 "000b" ; +VAL_TABLE_ RR_FR 3 "Detect level 3 (50~30cm)" 2 "Detect level 2 (60~50cm)" 1 "Reserve" 0 "No detection" ; +VAL_TABLE_ STS_DISTANCE 3 "40cm / 16in" 2 "30cm / 12in" 1 "STOP (continuous tone)" 0 "No detection" ; +VAL_TABLE_ OFF_IT_M 1 "OFF Setting" 0 "ON Setting" ; +VAL_TABLE_ OFF_VCM 1 "OFF Setting" 0 "ON Setting" ; +VAL_TABLE_ SBW_CANFALSTAT 1 "fail with RX,CRC,PRUN of 1D4" 0 "not fail" ; +VAL_TABLE_ ShBW_ENCODERST 1 "encoder failure occured" 0 "encoder failure not occured" ; +VAL_TABLE_ RAWP 1 "forbidden value (transt fail)" 0 "pedal hard point override" ; +VAL_TABLE_ ECFL1 1 "engine level 1b failure" 0 "no engine level 1b failure" ; +VAL_TABLE_ DT_TWN 1 " down transition in progress" 0 "no down transition in progress" ; +VAL_TABLE_ INHI_CUTOFF 1 "cut request" 0 "no cut request(Initial Value)" ; +VAL_TABLE_ COMP_ACT 1 "compressor activ req" 0 "no compressor activ req" ; +VAL_TABLE_ MANUPOS 1 "mqanual shift =4 gear" 0 "mqanual shift =6 gear" ; +VAL_TABLE_ FDTLIN 1 "LU inhibited" 0 "LU not inhibited" ; +VAL_TABLE_ ENG_OSCO 1 "high threshold" 0 " low threshold" ; +VAL_TABLE_ KDACT 1 "Kick down activated" 0 "Kick down OFF" ; +VAL_TABLE_ VTCNOACT 1 "VTC OFF" 0 " not VTC OFF" ; +VAL_TABLE_ HIGH_ENGOIL_TMP 1 "high engine oil temp" 0 "not high engine oil temp" ; +VAL_TABLE_ REGGAS 1 "Judge to regular octance gas" 0 " Judge to high octane gas" ; +VAL_TABLE_ IDSTSTS 1 " IS is permitted" 0 " IS is not permitted" ; +VAL_TABLE_ TIDLE_SW2 1 "IDLE SW OFF" 0 "IDLE SW ON" ; +VAL_TABLE_ ISMSKSW 1 "idle stop prohibition" 0 " idle stop permission" ; +VAL_TABLE_ ISACT 1 "idle stop control is active" 0 " idle stop control is not active" ; +VAL_TABLE_ OBD_RDY_ON 1 "HEV sys Ready" 0 "HEV sys Not-Ready" ; +VAL_TABLE_ HEATUP_STA 1 "Heat Up Switch ON" 0 "Heat Up Switch OFF" ; +VAL_TABLE_ GLW_RY_STA 1 "Glow Relay Active " 0 "Glow Relay Not Active " ; +VAL_TABLE_ OBD_GENERAL_TRIP 1 "GenTrip for PDTC clear comp" 0 "GenTrip for PDTC clear not comp" ; +VAL_TABLE_ CAP_IND_REQ 1 " Fuel fill cap indic turn on" 0 " Fuel fill cap indic turn off" ; +VAL_TABLE_ FLAG_FC 1 " fuel cut go" 0 " fuel cut no go" ; +VAL_TABLE_ FCOK 1 "fuel cut control effective" 0 "fuel cut control not effective" ; +VAL_TABLE_ FCNG 1 " fuel cut control not effective" 0 " fuel cut control effective" ; +VAL_TABLE_ ACCPLUP 1 "Line Pressure UP" 0 "Except for Line Pressure UP" ; +VAL_TABLE_ ETSCANOK 1 "ETS control effective" 0 "ETS control not effective" ; +VAL_TABLE_ ETCFAIL 1 "ETC fail (stop fuction)" 0 " ETC normal" ; +VAL_TABLE_ ETCOK 1 "ETC control effective" 0 "ETC control not effective" ; +VAL_TABLE_ ETCNG 1 "ETC control not effective" 0 "ETC control effective" ; +VAL_TABLE_ SPDCTINH 1 "Engine speed sync cntrl inhi" 0 "Engine speed sync cntrl allow" ; +VAL_TABLE_ OBD_ENG_ON 1 "Engine have started" 0 "Engine have not started" ; +VAL_TABLE_ TWDTNG 1 "Enginecoolant temp.ses diag NG" 0 "Enginecoolant temp.ses diag OK" ; +VAL_TABLE_ STPENA 1 "ENG Stop Permit" 0 "ENG Stop Prohibit" ; +VAL_TABLE_ ECMNG 1 "ECM control not effective" 0 "ECM control effective" ; +VAL_TABLE_ ECMACCON 1 "During control (ACC req)" 0 "During not control (ACC req)" ; +VAL_TABLE_ ELAMP 1 " Eco mode lamp ON" 0 " Eco mode lamp OFF" ; +VAL_TABLE_ IDSTREQ 1 "ECM is idle stop standby OK" 0 "ECM is idle stop standby NG" ; +VAL_TABLE_ ECMOK 1 "ECM control effective" 0 "ECM control not effective" ; +VAL_TABLE_ ECOMENU 1 "Display ECO_mode_menu ON" 0 "Display ECO_mode_menu OFF" ; +VAL_TABLE_ TRQDNINH 1 "data received consisten" 0 "data received not consisten" ; +VAL_TABLE_ ATTRQAC 1 "data received is consistent" 0 "data received is not consistent" ; +VAL_TABLE_ RTOHOLD 1 "CVTratiohodctrlofECMis work" 0 "CVTratiohodctrlofECMisnot work" ; +VAL_TABLE_ AC_PDCUT 1 "normal" 0 " cut" ; +VAL_TABLE_ CANOK 1 "CAN communication effective" 0 "CAN communication not effective" ; +VAL_TABLE_ CANNG 1 "CAN communication not eff" 0 "CAN communication eff" ; +VAL_TABLE_ BRKSWTM 1 "Brake SW ON" 0 "Brake SW OFF" ; +VAL_TABLE_ MANUAUP 1 "Automatic up shift ON" 0 "Automatic up shift OFF" ; +VAL_TABLE_ MANUMOD 1 "CVT Gear Mode" 0 "AT Gear Mode" ; +VAL_TABLE_ ACCFAIL 1 "ACC fail" 0 "ACC not fail" ; +VAL_TABLE_ ACCINH_S 1 " ACC uninhibited" 0 " ACC inhibited" ; +VAL_TABLE_ ISINDMD 3 "Blink(high cycle:2Hz)&buzz(2Hz)" 2 "Blinking(low cycle:1Hz)" 1 "Turn ON" 0 "Turn OFF" ; +VAL_TABLE_ CLUTCHSW 3 "invalid" 2 "Not used" 1 "pedal pressed" 0 " pedal not pressed (clutched)" ; +VAL_TABLE_ FDTTD 3 "torque request can not be achi" 2 "ransient sta prev trq req reali" 1 "exact torq req cannot be achi" 0 " normal" ; +VAL_TABLE_ POW_CUT 3 "Invalid" 2 "elec consum inhi req" 1 "elec consum freezing req" 0 "no request" ; +VAL_TABLE_ REQ 3 "open lock-up(fast)" 2 "open lock-up(slow)" 1 "close lock-up" 0 " no request" ; +VAL_TABLE_ FREE_SHIFT 3 "Not used" 2 "DownShift" 1 "UpShift " 0 " No Display " ; +VAL_TABLE_ OIL_DRAIN_ALERT 3 "Uot used" 2 "Oil drain requested" 1 "Oil drain to be anticipated" 0 "No alert display requested" ; +VAL_TABLE_ LED 3 "MIL lamp autotest in progress" 2 " MIL flashing" 1 "MIL lamp on" 0 "MIL lamp off" ; +VAL_TABLE_ ENG_STA 3 "engine cranking" 2 " engine running" 1 "engine stalled" 0 "engine stopped" ; +VAL_TABLE_ CRNOKAT 3 "information not available" 2 "Manual gear box" 1 "cranking allowed" 0 "cranking not allowed" ; +VAL_TABLE_ CRANOKECM 3 "cranking not allowed/ECM failure" 2 "cranking stopped required" 1 "cranking allowed" 0 "cranking not allowed" ; +VAL_TABLE_ SHIFT_IND 3 "both Lighting" 2 "Down shift Lighting" 1 "Up shift Lighting" 0 " both Lights out" ; +VAL_TABLE_ GSINXTGP 3 "3rd" 2 "2nd" 1 "1st" 0 "OFF" ; +VAL_TABLE_ SMAPREQ_hea 3 "Request3" 2 "Request2" 1 "Request1" 0 " No request" ; +VAL_TABLE_ VELHGTNE 3 "5400rpm" 2 "4900rpm" 1 "4400rpm" 0 "No request" ; +VAL_TABLE_ TWN_REG 3 "105 degC" 2 "100 degC" 1 "95 degC" 0 "90 degC" ; +VAL_TABLE_ AC_FS 3 "55%" 2 "40%" 1 "25%" 0 "0%" ; +VAL_TABLE_ DTCCODE 0 "no failure" ; +VAL_TABLE_ ECO_DISP_RQ 3 "3" 2 "2" 1 "1" 0 "Turn OFF Indicator" ; +VAL_TABLE_ RQ_ENBR 1 "correct not requested" 0 "correct requested" ; +VAL_TABLE_ BNCSW 1 "Breake ON" 0 "Breake OFF" ; +VAL_TABLE_ DADV_RS 1 "with DADV ign tmng retard cont" 0 "w/o DADV ign tmng retard cont" ; +VAL_TABLE_ OBD_WUC 1 "Warm Up Cycle is comp" 0 "Warm Up Cycle is not comp" ; +VAL_TABLE_ ISSAP 1 "Vehicle equip with I/S sys" 0 "Vehicle equip without I/S sys" ; +VAL_TABLE_ FLEAN 1 "lean" 0 "stoiki" ; +VAL_TABLE_ SportModeLamp 1 "Sport mode lamp ON" 0 "Sport mode lamp OFF" ; +VAL_TABLE_ SNOWMODE 1 "Snow mode control" 0 "Snow mode not control" ; +VAL_TABLE_ TCSOPX 1 "not select TCS request" 0 "select TCS request" ; +VAL_TABLE_ FDTFCSEL 1 "fuel cut" 0 "retard" ; +VAL_TABLE_ ADVCD5 1 "retard control on" 0 " retard control off" ; +VAL_TABLE_ AC_FD_TYPE 1 "Nissan" 0 "Renault" ; +VAL_TABLE_ PTDFAIL 1 "PTD fail" 0 "PTD not fail" ; +VAL_TABLE_ POSDTNG 1 "POS Sesnor Diagnosis NG" 0 "POS Sesnor Diagnosis OK" ; +VAL_TABLE_ TIMTYPE 1 "LPG or GNV consumption" 0 " petrol consumption" ; +VAL_TABLE_ ATIDLSW2 1 "OFF" 0 "ON" ; +VAL_TABLE_ ASCDODOF 1 "OD cancel request" 0 "OD cancel not request" ; +VAL_TABLE_ NOTSELECT_SELECT 1 "SELECT" 0 "NOTSELECT" ; +VAL_TABLE_ TCSOP 1 "select TCS request" 0 "not select TCS request" ; +VAL_TABLE_ NIDLEOK 1 "N_Idle instruction" 0 "Not N_Idle instruction" ; +VAL_TABLE_ TE_LM_ON 1 "limited" 0 "not limited " ; +VAL_TABLE_ MODELMT 1 "limitation Request" 0 " Not limitation Request" ; +VAL_TABLE_ FLNST 1 "transit" 0 "normal" ; +VAL_TABLE_ NORMAL_FAIL 1 "fail" 0 "normal" ; +VAL_TABLE_ FSMPWRLRQ 1 "Fail SafeMotorPowLimit Req" 0 "NonFail SafeMotorPowLimit Req" ; +VAL_TABLE_ FSEVRQ 1 "Fail Safe EV Request" 0 "Non Fail Safe EV Request" ; +VAL_TABLE_ ETCDEF 1 "ETC Default Fail Safe Req" 0 "Non ETC Default Fail Safe Req" ; +VAL_TABLE_ WTENP 1 "water temperature warn" 0 "no water temperature warn" ; +VAL_TABLE_ DIWA_FILTER 1 "water detected in diesel" 0 " no water detected in diesel" ; +VAL_TABLE_ OILPRE_STA 1 "OIL Pressure Warning" 0 "No Warning" ; +VAL_TABLE_ ISBRKREQ 1 "request" 0 "No request" ; +VAL_TABLE_ PWM_MFAN 1 "pwm m/fan relay requested" 0 "no pwm m/fan relay requested" ; +VAL_TABLE_ PFILTER_FAILDIS 1 "particu filter fail warn msg" 0 "No particu filter fail warn msg" ; +VAL_TABLE_ RINF 1 " exit from reset" 0 "no exit from reset" ; +VAL_TABLE_ RSTREQ 1 "engine start request" 0 "no engine start request" ; +VAL_TABLE_ ECFL2 1 "engine level 2 failure" 0 "no engine level 2 failure" ; +VAL_TABLE_ AC_FDT 3 "1.5min" 2 "1min" 1 "0.5min" 0 "No Request" ; +VAL_TABLE_ PFILTER_STA 1 "Warning clog up filter" 0 "No warning message" ; +VAL_TABLE_ fINIT_CAN_LR 1 "Initialize" 0 "Usual" ; +VAL_TABLE_ fLS_GYRO_OFFSET 1 "Not permission to use" 0 "permission to use" ; +VAL_TABLE_ OK_NG 1 "NG" 0 "OK" ; +VAL_TABLE_ fLS_CAN_FAIL 1 "Laser CAN Fail" 0 "OK" ; +VAL_TABLE_ fLS_FAIL_EXAM 1 "Investigation of LASER fail" 0 "OK" ; +VAL_TABLE_ LAS_DGN1_3 1 "High Temperature" 0 "OK" ; +VAL_TABLE_ fLS_LOOK 1 "Axis fail" 0 "OK" ; +VAL_TABLE_ OB_ST_OTYP 1 "object-type stationary" 0 " object-type dynamical" ; +VAL_TABLE_ OB_ST_ODV 1 "object-data valid" 0 "object-data invalid" ; +VAL_TABLE_ ST_CHG 1 "Object exist" 0 "Object changed" ; +VAL_TABLE_ fLS_ACT 1 "orerating" 0 "not operating" ; +VAL_TABLE_ ST_OTYP 1 "Object Type Stationary" 0 "Not object" ; +VAL_TABLE_ RAD_ST4 1 "Object Data Vallid" 0 "Not object" ; +VAL_TABLE_ ST_ODV 1 " Object Data Valid" 0 "Not object" ; +VAL_TABLE_ fCAN_LR_NG 1 "Laser Fail" 0 "Normal" ; +VAL_TABLE_ LAS_DGN1_3 1 "High Temperature" 0 "Normal" ; +VAL_TABLE_ LAS_DGN1_7 1 "Invalid Operation" 0 "Nomal Operation" ; +VAL_TABLE_ fLS_AXIS_ALIGN 1 "Not Adjustment" 0 "End of Adjustment" ; +VAL_TABLE_ ASCDSWA2 1 "terminal for switch is open" 0 " terminal is normal" ; +VAL_TABLE_ ACCFAIL2 1 "System NG" 0 "System OK" ; +VAL_TABLE_ ACCFAIL1 1 "System OK" 0 "System NG" ; +VAL_TABLE_ ASCDSWA1 1 "switch input value is abnormal" 0 "switch input value is normal" ; +VAL_TABLE_ AUTOSTOP 1 "Stop control operation" 0 "Stop control not operation" ; +VAL_TABLE_ ASCDSWA5 1 "SET switch is on" 0 "SET switch is off" ; +VAL_TABLE_ ASCDSWA4 1 " RES switch is on" 0 " RES switch is off" ; +VAL_TABLE_ BST_ACTV2 1 "Pressure control not operating" 0 "Pressure control operating" ; +VAL_TABLE_ BST_ACTV1 1 "Pressure control operating" 0 "Pressure control not operating" ; +VAL_TABLE_ PBS2_PRESS_O_F 1 "PBS2 pressure ordering" 0 "PBS2 pressure not ordering" ; +VAL_TABLE_ PBS2_PRESS_G_F 1 "PBS2 pressure generating" 0 "PBS2 pressure not generating" ; +VAL_TABLE_ PBS2_OFF 1 "PBS2 not operating" 0 "PBS2 operating" ; +VAL_TABLE_ FTRG_ACC 1 "ACC Trouble" 0 "OK" ; +VAL_TABLE_ R_ECD_FUNCTION 1 "Requiring" 0 "Not Requiring" ; +VAL_TABLE_ DECON 1 "Reduce the Speed" 0 "Not Reduce the Speed" ; +VAL_TABLE_ FLS_TRGT 1 "Blink" 0 "Not Blink" ; +VAL_TABLE_ ACC_ALIVE 1 "Alive" 0 "Not Alive" ; +VAL_TABLE_ CONTROLl_BYTE 1 "System NG" 0 "Normal" ; +VAL_TABLE_ ERR_ST1 1 "Laser Dirty Fail" 0 "Normal" ; +VAL_TABLE_ ACC_VALVE 1 " Bulb Check Mode" 0 "Normal Mode" ; +VAL_TABLE_ PBS_REQUEST 1 "Activation" 0 " NoActivation" ; +VAL_TABLE_ fCONTROL_LAMP_BLINK 1 "blink" 0 " No blink" ; +VAL_TABLE_ fINITIAL_STATE_CHANGE 1 " blink LED_F/W lamp and buzzer" 0 "no blink LED_F/W lamp and buzz" ; +VAL_TABLE_ NICC_SET 1 "Navi-ICC ON" 0 "Navi-ICC OFF" ; +VAL_TABLE_ MAIN_MB 1 "MB system ON" 0 "MB system OFF" ; +VAL_TABLE_ MAIN_SWA 1 "Main SW ON" 0 "Main SW OFF" ; +VAL_TABLE_ fLDW_SW_MAIN 1 "LDW ON" 0 "LDW OFF" ; +VAL_TABLE_ fLDP_SW_MAIN 1 "LDP ON" 0 "LDP OFF" ; +VAL_TABLE_ DIRTY_LASER 1 "LASER window dirty" 0 "LASER window clear" ; +VAL_TABLE_ NICC_IND 1 "Indicator Turn ON" 0 "Indicator Turn OFF" ; +VAL_TABLE_ INCHNG_CONTROL 1 "Inching control operating" 0 "Inching control not operating" ; +VAL_TABLE_ fFCW_SW_MAIN 1 "FCW ON" 0 "FCW OFF" ; +VAL_TABLE_ WIPERIMP 1 "Wiper opn+SET Opn" 0 "Except for Wiper opn+SET Opn" ; +VAL_TABLE_ RNGIMP 1 "Not D range+SET Operation" 0 "Except for Not D range+SET Opn" ; +VAL_TABLE_ HVIMP 1 "High Speed+SET Operation" 0 "Except for High Speed+SETOpn" ; +VAL_TABLE_ BRKIMP 1 "Brake+SET Operation" 0 "Except for Brake+SET Operation" ; +VAL_TABLE_ ACCACT 1 "EngineTorque Request" 0 "EngineTorque Not Request" ; +VAL_TABLE_ ASCDSWA6 1 "CAN switch is on" 0 "CAN switch is off" ; +VAL_TABLE_ FQCFAIL 1 "Request to stop normal charge an" 0 "No request" ; +VAL_TABLE_ FNCFAIL 1 "Request to stop normal charge an" 0 "No request" ; +VAL_TABLE_ FCHGLMPREQ 1 "Request" 0 "No request" ; +VAL_TABLE_ FCAUTION 1 "Request" 0 "No request" ; +VAL_TABLE_ UPMGTRQ_DIS 1 "For Negative Torque" 0 "For Positive Toruque" ; +VAL_TABLE_ LB_COOL_REQ 1 "request" 0 "not request" ; +VAL_TABLE_ STOP_PKB_ST 1 "request status" 0 "not request status" ; +VAL_TABLE_ CHG_STA_FOR_MET 7 "Not used" 6 "Not used" 5 "fail" 4 "Not used" 3 "quick charge" 2 "normal charge 200V Series" 1 "normal charge 100V Series" 0 "OFF" ; +VAL_TABLE_ OBD_AT_TEMP_DIAG_COMPLETED 1 "Complete" 0 "Not complete" ; +VAL_TABLE_ IDM_MODE_SW 3 "NOT USE" 2 "UNKNOWN" 1 "ON" 0 "OFF" ; +VAL_TABLE_ M4VDCCHK 1 "with VDC" 0 "without VDC" ; +VAL_TABLE_ TSOC_ITM 1 "Deterioration restraint" 0 "100%" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_46 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_45 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_44 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_43 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_42 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_41 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_40 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_39 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_38 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_37 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_36 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_35 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_34 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_33 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_32 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_31 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_30 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_29 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_28 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_27 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_26 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_25 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_24 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_23 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_22 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_21 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_20 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_19 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_18 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_17 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_16 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_15 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_14 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_13 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_12 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_11 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_10 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_9 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ LINKF_REQ_FLG_Copy_8 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ WIPER_ON 1 " Wiper state ON" 0 " Wiper state OFF" ; +VAL_TABLE_ Permit_Inhibit 1 "inhibit" 0 "permit" ; +VAL_TABLE_ PBS2_ACT_MAINBRK 1 "PBS2 MAIN BRAKE ACTIVITY" 0 "PBS2 MAIN BRAKE INACTIVITY" ; +VAL_TABLE_ PUMP_STOP_REQ 1 "Requiring" 0 "Not Requiring" ; +VAL_TABLE_ RAD_ST4_toAT 1 "Object Data Vallid" 0 "Not object" ; +VAL_TABLE_ RAD_ST3_toAT 1 "Object Type Stationary" 0 "Not object/Object Type Mnt" ; +VAL_TABLE_ LASER_FAILtoAT 1 "fail" 0 "Not fail" ; +VAL_TABLE_ LINKF_REQ_FLG 1 "Link missmatch flag record req" 0 " no request" ; +VAL_TABLE_ CURVE_IN_ACTIVE 1 "curve cutting applied" 0 "no curve cutting applied" ; +VAL_TABLE_ SOW_SYSTEM_BUZZER 1 "Buzzer Request" 0 "No Buzzer Request" ; +VAL_TABLE_ MAIN_MB 1 "MB system ON" 0 "MB system OFF" ; +VAL_TABLE_ MAIN_SWA 1 " Main SW ON" 0 " Main SW OFF" ; +VAL_TABLE_ LDP_FAIL 1 "LDP fail" 0 "LDP not fail" ; +VAL_TABLE_ BCI_STATUS_MOD 1 "active" 0 "Inactive" ; +VAL_TABLE_ ACCACT 1 "EngineTorque Request" 0 " EngineTorque Not Request" ; +VAL_TABLE_ ENG_ON 1 "Engine ON" 0 "Engine OFF" ; +VAL_TABLE_ INHECOPF 1 "ECO Pedal ACT Impossible" 0 "ECO Pedal ACT Possible" ; +VAL_TABLE_ CRUSTER_ILL_REQ 1 "cluster illumination request" 0 "cluster illumination not request" ; +VAL_TABLE_ BCI_BUZ2_SNR 1 " buzzer2 demand ON" 0 "buzzer2 demand OFF" ; +VAL_TABLE_ BCI_BUZ1_SNR 1 "buzzer1 demand ON" 0 "buzzer1 demand OFF" ; +VAL_TABLE_ BCI_BUZ_DMD_MOD 1 "Buzzer demand ON" 0 "Buzzer demand OFF" ; +VAL_TABLE_ CTA_CHANGE_REQ 1 "CTA recognition mode" 0 "BSD recognition mode" ; +VAL_TABLE_ BPFS_NC 1 " Brake Pedal OFF" 0 " Brake Pedal ON" ; +VAL_TABLE_ BPFS_NO 1 "Brake Pedal ON" 0 "Brake Pedal OFF" ; +VAL_TABLE_ BLS_ON_flag 1 "Brake Lamp Switch active" 0 "Brake Lamp Switch not active" ; +VAL_TABLE_ AUTOSTOP 1 "Auto stop mode on" 0 "Auto stop mode off" ; +VAL_TABLE_ ASCDCRU 1 "ACC Cruise Flag ON" 0 "ACC Cruise Flag OFF" ; +VAL_TABLE_ FUNC_ALIVE 1 "normal" 0 "Abnormal (Standstill)" ; +VAL_TABLE_ HMISTATE_R 3 "Continuous at HMIORDER_R" 2 "High Frequency" 1 "Low Frequency" 0 "OFF" ; +VAL_TABLE_ HMISTATE_L 3 "Continuous at HMIORDER_L" 2 "High Frequency" 1 "Low Frequency" 0 "OFF" ; +VAL_TABLE_ PUMP_MAP_TYPE 3 "not used" 2 "Pump map type 2" 1 "Pump map type 1" 0 "Not Requiring" ; +VAL_TABLE_ HI_GEAR_INH_ADAS 3 "Highest gear - 2 inhibit request" 2 "Highest gear - 1 inhibit request" 1 "Highest gear inhibit request" 0 "Not inhibit request" ; +VAL_TABLE_ LDP_SHIFTMP_CHG_REQ_VDC 3 "not used" 2 "map2" 1 "map1" 0 "No Request" ; +VAL_TABLE_ BRANCH_FLG 3 "Not Used" 2 "right branch" 1 "left branch" 0 " no branch" ; +VAL_TABLE_ BDY_STYL 3 "Style3" 2 "Style2" 1 "Style1" 0 "Style0" ; +VAL_TABLE_ MARKET 3 "GCC" 2 "KOR" 1 "TWN" 0 "CHI" ; +VAL_TABLE_ VOICE_TFLG 3 "Right curve soon" 2 "Left curve soon" 1 "Curve soon" 0 "no request" ; +VAL_TABLE_ FNCRELAYSTATUS 1 "Closed" 0 "Open" ; +VAL_TABLE_ FCHSSI1 1 "ON" 0 "OFF" ; +VAL_TABLE_ FCHSSI2 1 "ON" 0 "OFF " ; +VAL_TABLE_ FRESTARTOK 1 "ready" 0 "Not ready" ; +VAL_TABLE_ FQCHGIRSENS 1 "Present" 0 "Not present" ; +VAL_TABLE_ NotCompleted_Completed 1 "Completed" 0 "Not completed" ; +VAL_TABLE_ FQCCONDET 1 "Connected" 0 "Charge coupler not connected" ; +VAL_TABLE_ FQCRELAYON 1 "either of the relays are closed" 0 "Both +ve and -ve relays are open" ; +VAL_TABLE_ FNCHGOK 1 "Available" 0 "AC i/p PWMsig frmEVSE not av" ; +VAL_TABLE_ READYTOSLP 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ ACVOLJUDG 3 "Invalid" 2 "200V (>=145V)" 1 "100V (60~145V)" 0 "No input (<60V)" ; +VAL_TABLE_ NCCONDET 3 "Failure" 2 "Fully connected" 1 "Partially connected" 0 "Charge coupler not connected" ; +VAL_TABLE_ QRLYCHKEND 3 " Both relays are NG" 2 "Negative relay is NG" 1 "Main Relay On Permission" 0 "+ve& -ve relaysOK/diag not comp" ; +VAL_TABLE_ MDISCSTATUS 1 "Discharge Status" 0 "Not Discharge Status" ; +VAL_TABLE_ MG_MIL 1 "MIL ON is required" 0 "MIL ON is not required" ; +VAL_TABLE_ MCRESTATST 1 "MG ReStart OK" 0 "MG ReStart NG" ; +VAL_TABLE_ MPRSTATUS 1 "MG PreCharge OK" 0 "MG PreCharge NG" ; +VAL_TABLE_ MSTFN 1 "MG control OK" 0 "MG control NG" ; +VAL_TABLE_ MCPFN 1 " MG Condenser Chg Comp" 0 " MG Condenser Chg not Comp" ; +VAL_TABLE_ MC_Slave_RefuseToSleep 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ LCNT 3 "counter value" 2 "MIN value" 1 "MAX value" 0 "realtime value" ; +VAL_TABLE_ RFCNTMG 3 "Not used" 2 "Hi" 1 "mid" 0 "OFF" ; +VAL_TABLE_ MGSTATUS 3 "RLY OFF Request" 2 "Stop PWM" 1 "Lamp Request" 0 "No Request" ; +VAL_TABLE_ MGDPA 3 "MG cannot Recover" 2 "Low Voltage" 1 "MG High Temperature" 0 " MG DPA No Request" ; +VAL_TABLE_ LB_HEATEXIST 1 "With Battery heating" 0 "Without Battery heating" ; +VAL_TABLE_ LB_CAPSW 1 "Full capacity " 0 "Remainig capacity" ; +VAL_TABLE_ BTCDOWN 1 "request" 0 " not request" ; +VAL_TABLE_ LB_FCHGEND 1 "Full charge completed" 0 "Not completed" ; +VAL_TABLE_ LB_EMPTY 1 "Batt Empty" 0 "Not Batt Empty" ; +VAL_TABLE_ LB_DCDC 1 "Malfunction" 0 "Normal" ; +VAL_TABLE_ LB_MIL 1 "MIL Lamp On Request" 0 " No-Request" ; +VAL_TABLE_ LB_ND4INTTRG 1 "DATA store Request" 0 " No-Request" ; +VAL_TABLE_ LB_HEATSTOPMAIL_REQ 1 "Heat Stop Mail send request" 0 "no request" ; +VAL_TABLE_ LB_HEATSTARTMAIL_REQ 1 "Heat Start Mail send request" 0 " no request" ; +VAL_TABLE_ LB_FRLYON 1 "Main Relay On Permission" 0 "No Permission" ; +VAL_TABLE_ LB_REFUSE 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 " reserved" ; +VAL_TABLE_ LB_PIN_STATUS 3 "Immediate limit PIN" 2 "High rate limit PIN" 1 "Normal limit PIN" 0 " Not used" ; +VAL_TABLE_ LB_HIS_DATA_SW 3 "Minimum data" 2 "Average data" 1 "Maximum data" 0 "Not calculated" ; +VAL_TABLE_ LB_STATUS 3 "Caution Request" 2 "Battery less start Request" 1 "Motor torque OFF Request" 0 "normal start Req_Fail Request" ; +VAL_TABLE_ LB_FAIL 3 "Main Relay OFF Request" 2 "not used" 1 "not used" 0 "No-Request" ; +VAL_TABLE_ DCDC_STATUS 3 "DC/DC FAN sutatus H+OC" 2 "DC/DC FAN sutatus H" 1 "DC/DC FAN sutatus M" 0 " DC/DC FAN sutatus L" ; +VAL_TABLE_ LB_RLIMIT 3 "High Temperature" 2 "LBC Malfunction" 1 "Capacity Drop" 0 "Normal" ; +VAL_TABLE_ LB_STATUS 3 "Main Relay OFF Request" 2 "Charging Mode Stop Request" 1 "Main Relay OFF Request" 0 "normal start Request" ; +VAL_TABLE_ LB_CODECON 3 "No.7,8" 2 "No.5,6" 1 "No.3,4" 0 "No.1,2" ; +VAL_TABLE_ LB_BPCUPRATE 3 "BPC MAX Uprate Level 4(2.5kW/s)" 2 "BPC MAX Uprate Level 3(1.5kW/s)" 1 "BPC MAX Uprate Level 2(0.8kW/s)" 0 "BPC MAX Uprate Level 1(0.1kW/s)" ; +VAL_TABLE_ LB_RCHGTCON 3 "Normal Charge 100V Full charge" 2 "Normal Charge 200V lng life chg" 1 "Normal Charge 200V Full charge" 0 "Quick charge" ; +VAL_TABLE_ SPDREQ 1 "unavble (RV/LV fail or not pres)" 0 "RV/LV OFF or LV OFF" ; +VAL_TABLE_ ALU_Q 1 "ALU Type B" 0 "ALU Type A" ; +VAL_TABLE_ SHIFTREVREQ 2 "No Limit" 1 "4000rpm" 0 "No Limit" ; +VAL_TABLE_ CL2TMODE 3 "No Request" 2 "Smooth L/U ON" 1 "Follow To TTCL2" 0 " OPEN CL2 Request" ; +VAL_TABLE_ HCM_WSC 1 "WSC is active" 0 "WSC is not active" ; +VAL_TABLE_ ENG_OIL_WARNING_LAMP 1 "WARNING_LAMP_ON" 0 "WARNING_LAMP_OFF" ; +VAL_TABLE_ TURN_OFF_ON 1 "TURN ON" 0 "TURN OFF" ; +VAL_TABLE_ FDTTD 1 "TorqueDown not inhibited" 0 "TorqueDown inhibited" ; +VAL_TABLE_ MGCTLMD 1 "Revolution Control" 0 "Torque Control" ; +VAL_TABLE_ ASCDSW2 1 "terminal for switch is open" 0 "terminal for switch is not open" ; +VAL_TABLE_ ACCMDFAIL 1 "target value NG(ACC inhibited)" 0 "target value OK" ; +VAL_TABLE_ ASCDSW1 1 "switch input value is abnormal" 0 "switch input value is normal" ; +VAL_TABLE_ CANMASK 1 "CAN rectrans fail authorized" 0 "CAN rectrans fail not authorized" ; +VAL_TABLE_ G_DG22 1 "STB signal is ON" 0 "STB signal is OFF" ; +VAL_TABLE_ G_STBS 1 "STB ON" 0 "STB OFF" ; +VAL_TABLE_ CHGPNG 1 "Shift Forbid" 0 "Shift Permit" ; +VAL_TABLE_ ASCDSW5 1 "SET switch is ON" 0 "SET switch is OFF" ; +VAL_TABLE_ ASCDSW4 1 "RES switch is ON" 0 "RES switch is OFF" ; +VAL_TABLE_ INTAKE 1 "Except for REC" 0 "REC" ; +VAL_TABLE_ ASCDFAIL 1 "NG" 0 "OK" ; +VAL_TABLE_ OPDRIVE 1 "O/P DRIVE PERMIT" 0 "O/P DRIVE NOT PERMIT" ; +VAL_TABLE_ MSR_S_I 1 "Inhibit" 0 " notInhibit" ; +VAL_TABLE_ IGN_OFF_PERMISSION 1 "PERMIT_TO_IGN_OFF" 0 "NOT_PERMIT_TO_IGN_OFF" ; +VAL_TABLE_ ONEACC 1 "temporary acceleration" 0 " not temporary acceleration" ; +VAL_TABLE_ SDSW 1 "SDSW Connect" 0 "Not SDSW Connect" ; +VAL_TABLE_ ENGCNKOK 1 "Running" 0 "Not Running" ; +VAL_TABLE_ RDY 1 "ready" 0 "not ready" ; +VAL_TABLE_ HCM_EGSTP 1 "operating to stop the Engine" 0 "not operating" ; +VAL_TABLE_ CL1_Standby 1 "OPEN" 0 "Not OPEN" ; +VAL_TABLE_ TE_LM_ON 1 "limited" 0 " not limited" ; +VAL_TABLE_ NEUT_SW 1 "in Neutral position" 0 "not in Neutral position" ; +VAL_TABLE_ TIDLE_SW 1 "Foot Up" 0 " Not Foot Up" ; +VAL_TABLE_ NOFAIL_FAIL 1 "fail" 0 "not fail" ; +VAL_TABLE_ ENGSTART 1 "Engine Start" 0 " Not Engine Start" ; +VAL_TABLE_ HCM_EGSTT 1 "crunking" 0 "not crunking" ; +VAL_TABLE_ C_Down 1 "cool down status" 0 "not cool down status" ; +VAL_TABLE_ G_DG23 1 "STB short" 0 "normal" ; +VAL_TABLE_ G_DG37 1 "Self check error" 0 " Normal" ; +VAL_TABLE_ G_DG36 1 "LowTemperature" 0 "Normal" ; +VAL_TABLE_ G_CHAW 1 "abnomal state, turn on" 0 "Normal state, turn off" ; +VAL_TABLE_ ETCDEFRQ 1 "ETC Default Request" 0 "Non ETC Default Request" ; +VAL_TABLE_ PREIGOFF 1 "Eng stop del req at Ign OFF" 0 "Non Eng stop del req at Ign OFF" ; +VAL_TABLE_ NERV 1 "Engine running" 0 "Non Engine running" ; +VAL_TABLE_ G_STBO 1 "STB OPEN" 0 "nomal" ; +VAL_TABLE_ G_AINV 1 "Brake ON" 0 "nomal" ; +VAL_TABLE_ fEGST_COLD 1 "Low Temp Engine Start Request" 0 "No Requset" ; +VAL_TABLE_ PRESTP 1 "notification of engine stop" 0 "no notification" ; +VAL_TABLE_ VCMMIL 1 "MIL ON is required" 0 "MIL ON is not required" ; +VAL_TABLE_ MGCHGPNG 1 "MG Shift Forbid" 0 "MG Shift Permit" ; +VAL_TABLE_ ECMMB_ACTIVATE 1 "MB opeartional" 0 "MB not opeartional" ; +VAL_TABLE_ MAIN_SWE 1 " main switch ON" 0 " main switch OFF" ; +VAL_TABLE_ ASCDSW8 1 "MAIN switch is oN" 0 "MAIN switch is off" ; +VAL_TABLE_ LDP_ON_SW 1 "LDP switch ON" 0 "LDP switch OFF" ; +VAL_TABLE_ KDACT 1 "Kick down ON" 0 "Kick down OFF" ; +VAL_TABLE_ AIDLE_SW 1 "IDLE SW on" 0 "IDLE SW off" ; +VAL_TABLE_ G_AWP 1 "HeaterWaterPump is operating" 0 "HeaterWaterPump is stopped" ; +VAL_TABLE_ E_NIDLE_RQ 1 "Emission-reqest" 0 "Fuel-economy-reqest" ; +VAL_TABLE_ CAP_IND_REQ 1 "Fuel fill cap indicator turn ON" 0 "Fuel fill cap indicator turn OFF" ; +VAL_TABLE_ SPDBLREQ 1 "flashing display" 0 " fix display" ; +VAL_TABLE_ ASCDSW3 1 "all switch are off" 0 "except" ; +VAL_TABLE_ ETSTRQAC 1 "ETS_Torque valid(normal)" 0 "ETS_Torque invalid(Abnormal)" ; +VAL_TABLE_ ECOPMENU 1 "ECO Pedal Force setting Menu ON" 0 "ECO Pedal Force setting Menu OFF" ; +VAL_TABLE_ ECMACCON 1 " During control " 0 " During not control " ; +VAL_TABLE_ ASCDSW6 1 "DIST switch is ON" 0 "DIST switch is OFF" ; +VAL_TABLE_ NVSFTMEN 1 " Display NAVI_SHIFT_menu ON" 0 " Display NAVI_SHIFT_menu OFF" ; +VAL_TABLE_ ECOMENU 1 "Display ECO_mode_menu ON" 0 "Display ECO_mode_menu OFF" ; +VAL_TABLE_ TRQDNINH 1 "Brake_Stab Cntr consistent" 0 "Brake_Stab Cntr not consistent" ; +VAL_TABLE_ PDCUTREQ 1 "no cut requested" 0 "cut requested" ; +VAL_TABLE_ ASCDSW7 1 "CAN switch is ON" 0 "CAN switch is OFF" ; +VAL_TABLE_ BNCSW 1 "Brake OFF" 0 "Brake ON" ; +VAL_TABLE_ BNOSW 1 "Brake ON" 0 "Brake OFF" ; +VAL_TABLE_ HCMASCD_ACTIVATE 1 "ASCD activating" 0 "ASCD not activating" ; +VAL_TABLE_ PEDALERR 1 "APS fail" 0 "APS not fail" ; +VAL_TABLE_ ACCINH 1 "ACC inhibited" 0 "ACC not inhibited" ; +VAL_TABLE_ ACCINH_S 1 "ACC not inhibited" 0 "ACC inhibited" ; +VAL_TABLE_ _4WDFLAG 1 "4WD" 0 "2WD" ; +VAL_TABLE_ G_RDY 3 "turn off" 2 "between ST-ON &RDY1Hz blinking" 1 "READY state, turn on" 0 "IGN-OFF or IGN-ON " ; +VAL_TABLE_ G_STA 3 " turn off" 2 "btw ST-ON and READY,1Hz blinking" 1 "READY state, turn on" 0 "IGN-OFF/IGN-ON/ " ; +VAL_TABLE_ G_CMH2 3 "Normal state, turn off" 2 "homologation mode , 1Hz blinking" 1 "abnomal state, turn on" 0 "Normal state, turn off" ; +VAL_TABLE_ G_CHMH 3 "Normal state, turn off" 2 "maintenance mode, 1Hz blinking" 1 "gabnomal state, turn on" 0 "Normal state, turn off" ; +VAL_TABLE_ G_MBLO 3 "Normal state, turn off" 2 "abnomal state, turn on" 1 "homologation mode, 1Hz blinking" 0 "Normal state, turn off" ; +VAL_TABLE_ G_CAU 3 "Normal state, turn off" 2 "abnomal state, turn on" 1 "maintenance mode, 1Hz blinking" 0 "Normal state, turn off" ; +VAL_TABLE_ ENG_TYPE 3 "TypeC" 2 "TypeB" 1 "TypeA" 0 "Unknown" ; +VAL_TABLE_ ECOPSTCB 3 "ECO Pdl Force setng status Std" 2 "ECO Pdl Force setng status soft" 1 "ECO Pdl Force setng status OFF" 0 "Not Used" ; +VAL_TABLE_ FODINH 3 "Highest gear - 2 inhibit request" 2 "Highest gear - 1 inhibit request" 1 "Highest gear inhibit request" 0 "Not inhibit request" ; +VAL_TABLE_ G_DG26 3 "System stopped abnormally " 2 "not used" 1 "Start failure" 0 "normal" ; +VAL_TABLE_ G_DG20 3 "The thermistor is abnormal" 2 "Overheating S" 1 "Overheating L" 0 "normal" ; +VAL_TABLE_ G_DG14 3 "Abnormal current detected" 2 "Output line open" 1 "Output line short" 0 "normal" ; +VAL_TABLE_ G_DG24 3 " not used" 2 "Control power supply is abnormal" 1 "not used" 0 "normal" ; +VAL_TABLE_ IDH 3 "OC limit ctrl & Pwr save 30A" 2 "Power save with 30A" 1 "Overcurrent limiting control" 0 "normal condition" ; +VAL_TABLE_ LED 3 "MIL lamp autotest in progress" 2 "MIL flashing" 1 "MIL lamp on" 0 "MIL lamp off" ; +VAL_TABLE_ G_DG16 3 "HB voltage abnormal" 2 "HB voltage too high" 1 "HB voltage too low" 0 "HB voltage normal" ; +VAL_TABLE_ ECOIND 3 "Green Turn ON &Amber Turn ON" 2 "Green Turn OFF &Amber Turn ON" 1 "Green Turn ON &Amber Turn OFF" 0 "Green&Amber Turn OFF" ; +VAL_TABLE_ ENG_STA 3 "engine cranking" 2 "engine running" 1 "engine stalled" 0 "engine stopped" ; +VAL_TABLE_ DCDC_STATUS 3 "DC/DC FAN sutatus H + OC" 2 "DC/DC FAN sutatus H" 1 "DC/DC FAN sutatus M" 0 "DC/DC FAN sutatus L" ; +VAL_TABLE_ ASCDON 3 "Not used" 2 "CC or SL active" 1 " pedal recovery" 0 " CC and SL inactive" ; +VAL_TABLE_ TIRE_ROT 3 "Not used" 2 "car run state (forward)" 1 "car run state (back)" 0 "car run state (stop)" ; +VAL_TABLE_ G_DG11 3 "Software over current" 2 "Motor current restriction" 1 "Voltage restriction" 0 " normal" ; +VAL_TABLE_ ETCFAIL 3 "torque request cannot achiev" 2 "trans st prevent trq req reali" 1 "exact trq req cannot be achie" 0 "normal" ; +VAL_TABLE_ E_FLOW3 3 " Low-Power " 2 "No Power" 1 "Low-Power " 0 " High-Power " ; +VAL_TABLE_ CCSD 3 "SL requested and in failure" 2 "SL on and inactive) or suspended" 1 "SL active" 0 "Cruise Control,Speed Limit OFF" ; +VAL_TABLE_ BLW_SPD 3 "FAN + Level3" 2 "FAN + Level2" 1 "FAN + Level1" 0 "OFF" ; +VAL_TABLE_ QCHGVOLSENSINF 3 "Not used" 2 "Voltage sensor operating normall" 1 "Voltage sensor operating abnorma" 0 "Voltage sensor operating normall" ; +VAL_TABLE_ FNCCONFSRLYINF1 1 "Request to limit vehicle power" 0 "No request" ; +VAL_TABLE_ FNCCONFSRLYINF2 1 "Request to prohibit vehicle runn" 0 "No request" ; +VAL_TABLE_ FACTIVTRACK 1 "Request" 0 "No request" ; +VAL_TABLE_ PCFST 1 "ON" 0 "OFF" ; +VAL_TABLE_ ACVOLST 3 "Unable to judge (Voltage detecti" 2 "200V-class" 1 "100V-class" 0 "No input" ; +VAL_TABLE_ FFSCRLYONNG 1 "Failure" 0 "No failure" ; +VAL_TABLE_ TCSOC_DISP 1 "80% display" 0 "100% display" ; +VAL_TABLE_ CHG_TIME_PERMISSION 1 "Display ON" 0 "Display OFF" ; +VAL_TABLE_ CHG_TIME_SW 3 "100V Charge" 2 "200V Charge" 1 "200V Charge(&KW)" 0 "Quick Charge" ; +VAL_TABLE_ CHG_OPTION_6KW 1 "option(6KW Charger)" 0 "none" ; +VAL_TABLE_ VOLT_INFO_GOM 1 "100V series display is requested" 0 "100V series display is not reque" ; +VAL_TABLE_ LB_VOL_LATCH 1 "ON" 0 "OFF" ; +VAL_TABLE_ ASCDBRESW 1 "brake activated" 0 "brake not activated" ; +VAL_TABLE_ PORT_LOCK_SW 3 "unlock" 2 "lock" 1 "AUTO_lock" 0 "OFF" ; +VAL_TABLE_ VCMCANFAULT 1 "fail with CRC,PRUN from 11A" 0 "not fail" ; +VAL_TABLE_ FACTIVTRACK 1 "Request" 0 "No_request" ; +VAL_TABLE_ SBW_CANFALSTAT 1 "fail_with_RX,CRC,PRUN,_of_1D4" 0 "not_fail" ; +VAL_TABLE_ HVAC_CODE_HV2 3 "DTC of PTC heater (Communication" 2 "DTC of PTC heater (Automatic res" 1 "DTC of PTC heater (Automatic res" 0 "No DTC of electrical compressor " ; +VAL_TABLE_ HVAC_CODE_HV1 1 "DTC_of_electrical_compressor_is_" 0 "No_DTC_of_electrical_compressor" ; +VAL_TABLE_ HVAC_OP_MODE 7 "Not_used" 6 "Not_used" 5 "Not_used" 4 "De_ice" 3 "Dehumidification_heating" 2 "Heating" 1 "Air_conditioning(Cooling)" 0 "OFF" ; +VAL_TABLE_ TSOC_MET 1 "Deterioration restrant" 0 "100%" ; +VAL_TABLE_ AHL_FAIL 3 "Unavailable" 2 "AHL NO Failure" 1 "AHL Failure" 0 "Not used" ; +VAL_TABLE_ AHL_REQ 3 "Unavailable" 2 "High Beam Requested" 1 "Low Beam Requested" 0 "No beam Requested" ; +VAL_TABLE_ ALU_QUESTION_FOR_LBC 2 "Not used" 1 "second question" 0 "first question" ; +VAL_TABLE_ IGN_OFF_PERMISSION 1 "PERMIT_TO_IGN_OFF" 0 "NOT_PERMIT_TO_IGN_OFF" ; +VAL_TABLE_ COMP_ON_permission 1 "Compressor ON permit" 0 "Compressor ON forbiddance" ; +VAL_TABLE_ Prohibit_Cranking_HEV 1 "STcont prohibition" 0 "STcont permission" ; +VAL_TABLE_ VCM_STATUS 3 "Not Used" 2 "VCM SYSTEM RUNNING" 1 "Not Used" 0 "VCM SYSTEM STOP" ; +VAL_TABLE_ Lamp_request 3 "Not used" 2 "Turn ON" 1 "Blinking" 0 " Turn OFF" ; +VAL_TABLE_ EPS_StartActivationRequest 3 "Not used" 2 "Request" 1 "Not used" 0 "No Request" ; +VAL_TABLE_ VCM_WakeUpSleepCmd 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "GoToSleep" ; +VAL_TABLE_ Recommendwatchadjust_VCM 1 "VCM clock may be wrong" 0 "VCM clock may not be wrong" ; +VAL_TABLE_ Timer_Select 1 "timer No,2" 0 "timer No,1" ; +VAL_TABLE_ FS_ChargeRelay_St 1 "relay ON" 0 "relay OFF" ; +VAL_TABLE_ RearDefrostStatus 1 "rear defrost on" 0 "rear defrost off" ; +VAL_TABLE_ Pri_AC_priority_SW_VCM 1 "priority to Pri A/C" 0 " priority to charge" ; +VAL_TABLE_ PriAirConditionerStatusforHVAC 1 " Pri A/C ON" 0 " Pri A/C OFF" ; +VAL_TABLE_ Book_of_PriAC 1 "reserved" 0 "not reserved" ; +VAL_TABLE_ NRLYCHK_REFUSE_REQ 1 "Refuse" 0 "not Refuse" ; +VAL_TABLE_ Prohibit_De_icing 1 "prohibit" 0 "not prohibit" ; +VAL_TABLE_ DTE_flashing_request 1 "flashing" 0 " not flashing" ; +VAL_TABLE_ HiVoltSystem_DischargeFinish 1 "finish " 0 "not finish " ; +VAL_TABLE_ VehicleFaultStatusForQuickCharge 1 "fail" 0 "not fail" ; +VAL_TABLE_ CheckRelayEnable 1 "Enable" 0 "not Enable" ; +VAL_TABLE_ Keep_SOC_Request 1 "keep SOC charge mode " 0 "normal charge mode" ; +VAL_TABLE_ ShBW_checkWarning 1 "ShBW default warning" 0 "No ShBW default warning" ; +VAL_TABLE_ StatusOfHighVoltPowerSupplycopy 1 "High Voltage supply" 0 "High Voltage not supply" ; +VAL_TABLE_ HiVoltRelay_Status 1 " Hi voltage relay ON" 0 " Hi voltage relay OFF" ; +VAL_TABLE_ Temperature_unit_setting 1 "degF" 0 " degC" ; +VAL_TABLE_ VCM_BLBCHK_Status 1 "bulb check on" 0 "bulb check off" ; +VAL_TABLE_ AC_SW 1 "A/C SW ON" 0 "A/C SW OFF" ; +VAL_TABLE_ TargetCharge_SOC 1 " Deterioration restraint" 0 " 100%" ; +VAL_TABLE_ VCM_RefusetoSleep 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ Charge_Status 3 "stop request" 2 "quick charge" 1 "normal charge" 0 "other" ; +VAL_TABLE_ StopAndPKB_Request 3 "not used" 2 "DC/DC fault with VSP" 1 "DC/DC fault" 0 " OFF" ; +VAL_TABLE_ Distance_to_empty_Request 3 "Not used" 2 "bar is displayed" 1 "bar is flashed" 0 " DTE value is displayed" ; +VAL_TABLE_ Check_QuickChargeRelay_Request 3 "Nrelay ON and Prelay ON" 2 "Nrelay OFF and Prelay ON" 1 "Nrelay ON and Prelay OFF" 0 " all OFF" ; +VAL_TABLE_ CauseOfSLOW_Lamp 3 "low SOC" 2 "Battety cold" 1 "overheat" 0 "power limit nothing" ; +VAL_TABLE_ BookDisplay_False_Status 3 "False set of Book information " 2 "False set of Pri A/C information" 1 "False set of Timer Chg info" 0 "OK" ; +VAL_TABLE_ Timer_No_VCM 3 "Pri A/C Timer No.1" 2 "Timer charge No.2" 1 "Timer charge No.1" 0 " No setting" ; +VAL_TABLE_ Current_Stauts 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_TABLE_ Timer_Status_VCM 3 "not used" 2 "During" 1 "not used" 0 "Current" ; +VAL_TABLE_ CruiseControlStatusDisplay 3 "SL requested and in failure" 2 "SL on and inactive or suspended" 1 "SL active" 0 "CruiseCtrl and SpdLmt (SL) OFF" ; +VAL_TABLE_ ECO_Meter1 3 "seg1~3 ON" 2 "seg1~2 ON" 1 "seg1 ON" 0 "OFF" ; +VAL_TABLE_ Charge_History_Data2 15 "Invalid value" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Not used" 2 "Quick charge" 1 "200V" 0 " 100V" ; +VAL_TABLE_ ECO_Meter2 3 "seg1-1~1-3 ON" 2 "seg1-1~1-2 ON" 1 "seg1-1 ON" 0 "OFF" ; +VAL_TABLE_ ATCVT_RangeIndication 3 "N range" 2 "R range" 1 "P range" 0 "OFF" ; +VAL_TABLE_ StatusFFPMode 3 "Invalid" 2 "Invalid" 1 "Ready" 0 "Init" ; +VAL_TABLE_ MC_Slave_RefuseToSleep 3 " reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ MG_MIL 1 " MIL ON is required" 0 "MIL ON is not required" ; +VAL_TABLE_ DCM_WS_REQ 3 "Wakeup" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_TABLE_ DCM_REFUSE 3 "reserved" 2 "Ready To Sleep" 1 "Refuse To Sleep" 0 "reserved" ; +VAL_TABLE_ DCM_PRI_ACON 3 "Not Used" 2 "Stop" 1 "request" 0 "no request" ; +VAL_TABLE_ CAM_SW_PRESS 1 "Camera switch is pressed by 0b" 0 "Camera switch is pressed by 1b" ; +VAL_TABLE_ INITIAL 1 "initialize" 0 "Not initialize" ; +VAL_TABLE_ SET_LAN_REQ 31 "Not used" 30 "Not used" 29 "Blank" 28 "Thai" 27 "Norwegian" 26 "Finnish" 25 "Swedish" 24 "Danish" 23 "Hungarian" 22 "Slovak" 21 "Czech" 20 "Poland" 19 "Greek (Greek Alphabet)" 18 "Greek (Latin)" 17 "Trukish" 16 "Portuguese (For Brazil)" 15 " French (For Canada)" 14 "Spanish (For Mexico)" 13 "English (For U.K.)" 12 "Arabic" 11 "Korean" 10 "Chinese(Kantai)" 9 "Chinese(Hantai)" 8 "Japanese" 7 "Russian" 6 " Portuguese (For Portogal)" 5 "Italian" 4 "German" 3 "Dutch" 2 "French (For other than Canada)" 1 " Spanish (For other than Mexico)" 0 "English (For U.S.)" ; +VAL_TABLE_ AirQualitySensOperationType 1 "Direct setting" 0 "UP & DOWN" ; +VAL_TABLE_ SELCT_SUN_ITM 1 "timer No,2" 0 "timer No,1" ; +VAL_TABLE_ PUSH_SW1 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_TABLE_ REC_FLAG 1 "Reception completion" 0 "Reception non-completion" ; +VAL_TABLE_ VentOperationType_Dr 1 "Direct setting" 0 "Push by push" ; +VAL_TABLE_ PRI_AC_PRIORITY_ITM 1 "priority to Pri A/C" 0 "priority to charge" ; +VAL_TABLE_ OffSwType 1 "fan down & off included" 0 "off sw separated" ; +VAL_TABLE_ TurningFlag 1 "turn" 0 "not turn" ; +VAL_TABLE_ MatchingResetFlag 1 "reset" 0 "not reset" ; +VAL_TABLE_ NICC_SW 1 "operation" 0 "not operation" ; +VAL_TABLE_ MatchingSta 1 "matching" 0 " not matching" ; +VAL_TABLE_ INITIALIZING_BIT 1 "Initializing (>3 tmsafterreboot)" 0 "Not initializing" ; +VAL_TABLE_ InGuidingRoot 1 "in the guiding root" 0 "not in the guiding root" ; +VAL_TABLE_ NAVI_ERR 1 "error" 0 "not error" ; +VAL_TABLE_ BOOT_FLG 1 "Boot" 0 "Not boot" ; +VAL_TABLE_ NoRequest_Request 1 "Request" 0 "No Request" ; +VAL_TABLE_ COP2_ERROR_FLG 1 "ERROR" 0 "NO ERROR" ; +VAL_TABLE_ D_BRANCH_FLG 1 "multiple branch" 0 " no branch or single branch" ; +VAL_TABLE_ LINKF_FLG 1 "Link missmatch exist" 0 "Link missmatch no exist" ; +VAL_TABLE_ EcoNavi_SW 1 " Eco-Navi_SW is pushed" 0 " Eco-Navi_SW is not pushed" ; +VAL_TABLE_ EcoMode_SW 1 "ECO mode SW is pushed." 0 "ECO mode SW is not pushed" ; +VAL_TABLE_ TEMP_UNIT_SET 1 "degF" 0 "degC" ; +VAL_TABLE_ CompressorOperationType 1 " A/C economy integrated" 0 "A/C economy separated" ; +VAL_TABLE_ RrAC_VentDirectSetting 3 "Not used" 2 "FOOT" 1 "B/L" 0 "VENT" ; +VAL_TABLE_ AIRVENTDIRECTSETTING_DR 3 "D/F" 2 "FOOT" 1 "B/L" 0 "VENT" ; +VAL_TABLE_ TempOperationType_Dr 3 "Not used" 2 "Differential" 1 "Direct setting" 0 "UP & DOWN" ; +VAL_TABLE_ RrAC_TempOpeTyp 1 "road property conf request" 0 "no road property conf request" ; +VAL_TABLE_ RootGuideSta 3 "other" 2 "except toll road" 1 "distance" 0 "toll road" ; +VAL_TABLE_ FanSpeedOperationType 3 " Direct setting" 2 "Dial" 1 "UP & DOWN" 0 " Push by push " ; +VAL_TABLE_ IntakeOperationType 3 "Not used" 2 "Direct setting" 1 "FRE & REC" 0 " Push by push " ; +VAL_TABLE_ RrVentDirectSetting 3 "FOOT" 2 "B/L" 1 "VENT" 0 " OFF" ; +VAL_TABLE_ OUTREADY 3 "Not used" 2 "right branch" 1 "left branch" 0 "no branch " ; +VAL_TABLE_ AreaCode 3 "other" 2 "USA(Alaska)" 1 "CANADA" 0 "JAPAN/USA(except ALASKA)/Hawaii" ; +VAL_TABLE_ ECOPDLSW 3 " ECO PedalForceSet STD SW ON" 2 " ECO PedalForceSet softSW ON" 1 " ECO PedalForceSet OFFSW ON" 0 " ECO PedalForceSet SW NotUse " ; +VAL_TABLE_ CompressorDirctSetting 3 "Not used" 2 "economy" 1 "compressor on" 0 "compressor off" ; +VAL_TABLE_ Link_type 3 "Junction link 2" 2 "Junction link 1" 1 "Up-down sep link (main road)" 0 "Up-down insep link (main road)" ; +VAL_TABLE_ RrAC_DirectSetting 3 "AUTO" 2 "Cooler" 1 "Heater" 0 "OFF" ; +VAL_TABLE_ DAS_SW 3 "SCP SW operation" 2 "LDP SW operation" 1 "DCA SW operation" 0 " not operation" ; +VAL_TABLE_ CUR_DAY_ITM 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_TABLE_ Road_type 3 "national road" 2 "toll road" 1 "urban expressway" 0 "intercity expressway" ; +VAL_TABLE_ IntakeDirectSetting 3 "AUTO FRE" 2 " REC" 1 "AUTO" 0 "FRE" ; +VAL_TABLE_ TIMER_STATUS_ITM 3 "Change Content Request" 2 "VCM Change Content Display" 1 "Change Content Pre-Request" 0 " Current" ; +VAL_TABLE_ TIMER_SW_SELECTER_ITM 3 "Pri A/C Timer No,1" 2 "Timer charge No,2" 1 "Timer charge No,1" 0 "No Setting" ; +VAL_TABLE_ AirQualitySensDirectSetting 3 "3" 2 "2" 1 "1" 0 "Not used" ; +VAL_TABLE_ COMPSTR 1 " comp stroke is permitted. " 0 " comp stroke is not permitted. " ; +VAL_TABLE_ COMPDST 1 "The comp destroke is perm " 0 "The comp destroke is not perm " ; +VAL_TABLE_ ChangeStatus_XX 1 " Sw is pushed by 0b" 0 " Sw is pushed by 1b" ; +VAL_TABLE_ G_STBR 1 "STB ON" 0 "STB OFF " ; +VAL_TABLE_ UpperVentStatus 1 "open" 0 "shut" ; +VAL_TABLE_ REC 1 " Except for REC" 0 "REC" ; +VAL_TABLE_ RearDef_REQ 1 " rear defrost requested" 0 " rear defrost not requested" ; +VAL_TABLE_ OldAndNewMessage 1 "NEW" 0 "OLD" ; +VAL_TABLE_ OFF_ON 1 "ON" 0 "OFF" ; +VAL_TABLE_ G_WPR 1 "ON request" 0 "OFF request" ; +VAL_TABLE_ NUP_flag 1 " NUP ON" 0 " NUP OFF" ; +VAL_TABLE_ REC_Status 1 "re-circulation" 0 "Not re-circulation" ; +VAL_TABLE_ FRE_Status 1 "fresh" 0 "Not fresh" ; +VAL_TABLE_ ForestAC_Existence 1 "forest" 0 "not forest" ; +VAL_TABLE_ FogStatus 1 "fog" 0 " not fog" ; +VAL_TABLE_ EXIST_NOTEXIST 1 "exist" 0 "not exist" ; +VAL_TABLE_ RR_CoolerFAN_Existence 1 "exisits" 0 " not exist" ; +VAL_TABLE_ XX_Existence 1 "exist" 0 "not exist" ; +VAL_TABLE_ C_Down 1 "cool down status" 0 "not cool down status" ; +VAL_TABLE_ IntakeAutoStatus 1 "Auto" 0 "Not auto" ; +VAL_TABLE_ EVCOMFAIL 1 "abnormal" 0 "normal" ; +VAL_TABLE_ EngON_REQ 1 "EngineON request" 0 "No EngineON request" ; +VAL_TABLE_ AC_request 1 "Air Conditioning Requested" 0 "No Air Conditioning Requested" ; +VAL_TABLE_ Max_min_PTC_range 1 "MAX" 0 "MIN" ; +VAL_TABLE_ IDLE_UP_REQ 1 " Idle Up Request" 0 " Idle Up Not Request" ; +VAL_TABLE_ ISOKAC 1 " Idle stop is permitted." 0 " Idle stop is not permitted." ; +VAL_TABLE_ GREY_DISPLAY 1 "Display" 0 "gray" ; +VAL_TABLE_ AutoDefrosterStatus 1 "indicate " 0 "do not indicate " ; +VAL_TABLE_ COMP_ON_FLG 1 "Compressor ON" 0 "Compressor OFF" ; +VAL_TABLE_ XX_RLY_ST 1 "Command of relay is ON" 0 "Command of relay is OFF" ; +VAL_TABLE_ Plasuma_gene 1 "Quick&Clean" 0 "Clean&Ion" ; +VAL_TABLE_ FanON_REQ 1 "blower fan motor on" 0 "blower fan motor off" ; +VAL_TABLE_ Rear_on_display_Status 1 "indicate" 0 " BLANK(Non display)" ; +VAL_TABLE_ UpperVentAutoStatus 1 "AUTO" 0 "BLANK(Non display)" ; +VAL_TABLE_ G_AC 1 "AC_SW ON" 0 "AC_SW OFF" ; +VAL_TABLE_ Dual_exist 3 "Not used" 2 "temperature & air vents dual" 1 "temperature dual" 0 " single" ; +VAL_TABLE_ VentStatus 3 "Not used" 2 "BLANK(Non display)" 1 "open" 0 "shut" ; +VAL_TABLE_ HVAC_RefuseToSleep 3 "reserved" 2 "ReadyToSleep" 1 " RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ MODE_SW 3 "NOT USED" 2 "UNKNOWN" 1 "ON" 0 "OFF" ; +VAL_TABLE_ AC_SystemStatus 3 "Not used" 2 "ram air blow" 1 " on" 0 " off" ; +VAL_TABLE_ RearAirPurifierStatus 3 "Auto" 2 "high" 1 "low" 0 "off" ; +VAL_TABLE_ Status_of_plasma_cluster 3 " clean&refresh" 2 "refresh" 1 "clean" 0 "off" ; +VAL_TABLE_ PlasmaCluster_IND 3 "clean&refresh on" 2 " refresh on" 1 "clean on" 0 " off" ; +VAL_TABLE_ AromaStatus 3 " no effect" 2 " relax" 1 "awakening" 0 "OFF" ; +VAL_TABLE_ RearAirVent_ExistAndType 3 "vent & foot & B/L" 2 "vent & foot" 1 "vent only" 0 " not exist" ; +VAL_TABLE_ RearAC_ExistAndType 3 " heater&cooler" 2 "cooler only" 1 "heater only" 0 "not exist" ; +VAL_TABLE_ CabinAirPolutionLevel 3 "LEVEL3" 2 "LEVEL2" 1 "LEVEL1" 0 "not display" ; +VAL_TABLE_ IDLUP_REQ 3 "IdleUpState3" 2 "IdleUpState2" 1 " IdleUpState1" 0 " No Request" ; +VAL_TABLE_ AutoStatus_XX 3 "Not used" 2 "BLANK(Non display)" 1 "AUTO" 0 "MANUAL" ; +VAL_TABLE_ ACSTRKRE 1 "Compressor is contr Full Stroke" 0 "Compressor is contr by HVAC." ; +VAL_TABLE_ TempUnit 3 "Fahrenheit off" 2 "Fahrenheit on" 1 "Centigrade on" 0 " Centigrade off" ; +VAL_TABLE_ VariableAirFlowStatus 3 "not use" 2 "variable air flow OFF" 1 " variable air flow ON" 0 " BLANK(no display)" ; +VAL_TABLE_ VariableAirFlowLevel_DR 3 "not use" 2 "hi" 1 "Lo" 0 "BLANK(no display)" ; +VAL_TABLE_ CAV_CONT_EXISTANCE 3 "Auto recirc(Hardware SW)" 2 "CLEAN(Software SW)" 1 " Auto recirc(Software SW)" 0 "Without CAV" ; +VAL_TABLE_ RearAC_SystemStatus 3 "AUTO" 2 "Cooler" 1 "Heater" 0 " OFF" ; +VAL_TABLE_ IdleUpRequest 3 "up request 3" 2 "up request 2" 1 "up request 1" 0 "not request " ; +VAL_TABLE_ Max_lvl_of_air_qual_sens 3 " level3" 2 " level2" 1 " level1" 0 "No function" ; +VAL_TABLE_ RearAirVentStatus 3 "FOOT " 2 "B/L" 1 "VENT or ON" 0 "CLOSE" ; +VAL_TABLE_ AirQualitySensSensitiSts 3 "3" 2 "2" 1 "1" 0 " BLANK(Non display)" ; +VAL_TABLE_ AirFlowBalanceLevel_XX 3 "-1" 2 "-2" 1 " -3" 0 "BLANK(no display)" ; +VAL_TABLE_ AirFlowBalanceLevel 3 "3" 2 "2" 1 "1" 0 "BLANK(no display)" ; +VAL_TABLE_ AirVentStatus_XX 3 "FOOT" 2 "B/L" 1 "VENT" 0 "ALL OFF" ; +VAL_TABLE_ Rear_AC_system_indicator 3 "Auto" 2 "Cooler" 1 "Heater " 0 " ALL OFF" ; +VAL_TABLE_ PollutionLevel 3 "3" 2 "2" 1 "1" 0 "0" ; +VAL_TABLE_ BLW_SPD 8 "Not used" 7 " FAN + Level7" 6 " FAN + Level6" 5 " FAN + Level5" 4 " FAN + Level4" 3 "FAN + Level3" 2 "FAN + Level2" 1 "FAN + Level1" 0 "OFF" ; +VAL_TABLE_ I_BLW_F 3 "Blower FAN Mode 3" 2 "Blower FAN Mode 2" 1 "Blower FAN Mode 1" 0 "Blower FAN OFF" ; +VAL_TABLE_ HumiditySensorSensitivity 3 "3" 2 "2" 1 "1" 0 "BLANK(no display)" ; +VAL_TABLE_ FanSpeedStatus 3 "3 speed" 2 "2 speed" 1 "1speed" 0 "ALL OFF" ; +VAL_TABLE_ HVAC_CODE 3 "AMB Sensor open circuit" 2 "AMB Sensor short circuit" 1 "CAN COMMUNICATION" 0 " NO DTC" ; +VAL_TABLE_ RHT_METER_SIG 1 "Meter display is enable" 0 "Meter display is disable" ; +VAL_TABLE_ RHT_MOV_MSG 1 "Roof isn't movable" 0 "Roof is movable" ; +VAL_TABLE_ ROOF_OPE_BUZ 3 " Buzzer req3" 2 " Buzzer req2" 1 " Buzzer req1" 0 "No request" ; +VAL_TABLE_ TONO_BOARD_MSG 3 "Ton Board s/w error" 2 "Ton Board ~sets in luggage room" 1 "Ton Board sets in luggage room" 0 "Reserved" ; +VAL_TABLE_ RHT_Status_MSG 3 "Roof error" 2 "Roof is Open" 1 "Roof is intermidiate position" 0 "Roof is Closed" ; +VAL_TABLE_ PBD_HAZ_REQ 3 "not used" 2 "ON" 1 "OFF" 0 "IDLE" ; +VAL_TABLE_ PBD_WAKE_SLEEP_REQ 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_TABLE_ PBD_REFUSE 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 " reserved" ; +VAL_TABLE_ PSD_L_WUS_REQ 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_TABLE_ PSD_L_REF_SLP 3 " reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ PSD_L_CDL_REQ 3 "not used" 2 "All doors Unlock_L" 1 "All doors Lock_L" 0 "No request_L" ; +VAL_TABLE_ PSD_L_UL_FOBSW 1 "L_FOB-SW Request" 0 " No_request" ; +VAL_TABLE_ PSD_L_UL_DRSW 1 "L_DR-SW Request" 0 "No_request" ; +VAL_TABLE_ PSD_L_ALL_UL_TSW 1 "SW-Request_L" 0 "No_request" ; +VAL_TABLE_ PSD_L_ONE_UL_TSW 1 "SW-Request_L" 0 "No_request" ; +VAL_TABLE_ PSD_R_WUS_REQ 3 " WakeUp" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_TABLE_ PSD_R_REF_SLP 3 "reserved" 2 "Ready ToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ PSD_R_CDL_REQ 3 " not used" 2 "All doors Unlock_R" 1 "All doors Lock_R" 0 " No request_R" ; +VAL_TABLE_ PSD_R_UL_FOBSW 1 "R_FOB-SW Request" 0 "No_request" ; +VAL_TABLE_ PSD_R_UL_DRSW 1 "R_DR-SW Request" 0 "No_request" ; +VAL_TABLE_ PSD_R_ALL_UL_TSW 1 "SW-Request_R" 0 "No_request" ; +VAL_TABLE_ PSD_R_ONE_UL_TSW 1 "SW-Request_R" 0 " No_request" ; +VAL_TABLE_ ROLL_BAR_MALFUNC_OUT 1 "Malfn of Roll-bar is dete" 0 "Malfn of Roll-bar isn't dete" ; +VAL_TABLE_ ROLL_BAR_OUT 1 " Roll-bar is deployed" 0 " Roll-bar isn't deployed" ; +VAL_TABLE_ ROLL_MALFUNC_OUT 1 "Malfn of rollover detec fn " 0 "Normal of rollover detec fn " ; +VAL_TABLE_ ROLLOVER_OUT 1 "Rollover detection" 0 "Rollover not detection" ; +VAL_TABLE_ PRE_ROLL_OUT 1 "Pre-Rollover detection" 0 "Pre-Rollover not detection" ; +VAL_TABLE_ CUTOFF_REQ 1 "Cutoff telltale lamp on" 0 "Cutoff telltale lamp off" ; +VAL_TABLE_ SERV_LMP_PEQ 1 "Service lamp on" 0 "Service lamp off" ; +VAL_TABLE_ ATQCUT 1 " torque down S request" 0 "torque down S not request" ; +VAL_TABLE_ A_B_CRSH_ORD 3 "ACU judges Fuel cutoff Fn unav" 2 "ACUjudges Door Unlock Fn unav" 1 "Launch Heavy Crash Actions" 0 "Launch Medium Crash Actions" ; +VAL_TABLE_ FLGST 1 "operating Mode 2" 0 " Not operating Mode 2" ; +VAL_TABLE_ RPOS 1 "road property conf request" 0 " Shift pos is except for Rev Pos" ; +VAL_TABLE_ BCLSWLH 1 "Switch state is ON" 0 "Switch state is OFF" ; +VAL_TABLE_ BCLSWRH 1 "Switch state is ON" 0 "Switch state is OFF" ; +VAL_TABLE_ FLGST_WARN 1 "operating Mode 1" 0 " Not operating Mode 1" ; +VAL_TABLE_ AFSFAIL 1 "AFS_Fail" 0 "AFS_Normal" ; +VAL_TABLE_ AFSACT 1 "AFS_Operating" 0 "AFS_NotOperating" ; +VAL_TABLE_ HAZARD_REQ_DOP 1 "hazard lights requested" 0 "hazard not requested" ; +VAL_TABLE_ HL_LOW_REQ_DOP 1 "low beam lights requested" 0 "low beam lights not requested" ; +VAL_TABLE_ TAIL_L_REQ_DOP 1 "position lights requested" 0 "position lights not requested" ; +VAL_TABLE_ EST_RR_DEF_REQ 1 " Rear def requested" 0 " Rear def not requested" ; +VAL_TABLE_ SPEED_PRESSURE_MLSANDPLATION 1 "Vehicle speed NOT adapt pressure" 0 " Vehicle speed adapted pressure" ; +VAL_TABLE_ SSPP_STOP_LAMP 1 "ON" 0 "OFF" ; +VAL_TABLE_ LTP_XX 1 "road property conf request" 0 "Normal" ; +VAL_TABLE_ FT_XX 1 "Flat Tire" 0 "Normal" ; +VAL_TABLE_ TIRE_FAIL 1 "Fail" 0 "Normal" ; +VAL_TABLE_ TPMS_BZ_REQ 1 "TPMS buzzer is requested" 0 "no buzzer request" ; +VAL_TABLE_ LOAD_PRESSURE_MLSADAPLATION 1 "Load NOT adapted pressure" 0 "Load adapted pressure" ; +VAL_TABLE_ SYSTEM_FAIL_TPMS 1 "Indicate text oN" 0 "Indicate text off" ; +VAL_TABLE_ TPMS_HORN_REQ 1 "Horn Chirp ON" 0 "Horn Chirp OFF" ; +VAL_TABLE_ HAZARD_REQ_TPMS 1 "Hazard Request ON" 0 "Hazard Request OFF " ; +VAL_TABLE_ TS_XX 1 " Normal " 0 "Failure or not display" ; +VAL_TABLE_ D_STYLE 3 " Warn with pos, without display" 2 " Press disp with position" 1 " Press disp without position" 0 "Warning Lamp only" ; +VAL_TABLE_ VEHICLE_PRESSURE_STA 3 "Not used" 2 "Vehicle under-pressure" 1 "Vehicle over-pressure" 0 "OK" ; +VAL_TABLE_ SSPP_LAMP 3 "Not used" 2 "Flashing" 1 "ON" 0 "OFF" ; +VAL_TABLE_ REG_STATUS 3 "unsucc regiof incorrect press " 2 "unsucc reg of no trans" 1 "successful registration " 0 "normal " ; +VAL_TABLE_ SSPP_LEAKAGE_LAMP 3 " Not used" 2 "Slow leak (Flashing)" 1 "= Puncture (Lamp ON constant)" 0 " No Leak" ; +VAL_TABLE_ LEFT_RIGHT_WHEEL_IMBALANCE 3 "imbal Left/Right FR &Rear Axle" 2 "imbal Left/Right Rear Axle" 1 "Imbal Left/Right Front Axle" 0 " Everything normal" ; +VAL_TABLE_ XX_WHEEL_STA 3 "Tyre Over-inflated" 2 "Tyre Too Much Over-inflated" 1 " Missing Sensor" 0 "Pressure OK" ; +VAL_TABLE_ KEYFOB_BATT 1 " transbatt conditn warn req" 0 " transbatt cond warn not req" ; +VAL_TABLE_ S_SLEEP_REQ 3 "invalid" 2 "invalid" 1 "sleep mode requested" 0 "sleep mode not requested" ; +VAL_TABLE_ WAKEUP_REQ 3 "invalid" 2 " invalid" 1 "wake up requested" 0 "no wake up requested" ; +VAL_TABLE_ TURN_IND 1 " left ON,right trailer warn OFF" 0 " left,right trailer warning OFF" ; +VAL_TABLE_ CHILD_LOCK 1 "warning request" 0 "warning not request" ; +VAL_TABLE_ TAIL_L 1 "position lights ON" 0 "position lights OFF" ; +VAL_TABLE_ RR_DEF 1 " Heated Backwindow ON" 0 " Heated Backwindow OFF" ; +VAL_TABLE_ DOOR_SW 4 "rear driver door closed" 3 "front passenger door open" 2 "front passenger door closed" 1 "front driver door open" 0 "front driver door closed" ; +VAL_TABLE_ DsREQ 1 "Ds mode" 0 " not Ds mode" ; +VAL_TABLE_ AutoP_C 1 "Auto P control cancelled" 0 "normal" ; +VAL_TABLE_ SBW_WARNIGLAMP 1 "ShBW default warn lamp" 0 " No ShBW default warn lamp" ; +VAL_TABLE_ REFUSE_BUZZER 1 "Request" 0 "No Request" ; +VAL_TABLE_ ShBW_SHIFTLOCK 1 "unlock state" 0 " lock state" ; +VAL_TABLE_ REFUSE_SLEEP 3 " reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 " reserved" ; +VAL_TABLE_ ShBW_WATCH 3 "Not Use" 2 "False" 1 "True" 0 "Not Started" ; +VAL_TABLE_ SBW_FALSTATT 3 "fail with torque cut" 2 "fail without torque down" 1 "fail with torque down" 0 "not fail" ; +VAL_TABLE_ SBW_WARNING_MSG 4 "Neutral is not judged" 3 "Confirm lever position" 2 "Shift System Error" 1 "Parking Brake" 0 " No Request" ; +VAL_TABLE_ CUR_RNG 3 "Not used" 2 "Not used" 1 "P" 0 " Not Calibrated(bef calibration)" ; +VAL_TABLE_ TGT_RNG 3 "N" 2 "R" 1 "P" 0 "Hold(default)(once after IGN-ON)" ; +VAL_TABLE_ POW_SAVE_OP 1 "Sub_OP_STOPrequest" 0 "normal" ; +VAL_TABLE_ STEP_OUT_OP 1 "OP_step_out" 0 "normal" ; +VAL_TABLE_ NORMAL_ABNORMAL 1 "abnormal" 0 " normal" ; +VAL_TABLE_ INVREADY 1 "INVReady" 0 "INVnoReady" ; +VAL_TABLE_ BTQCUT 1 " torque down L request" 0 "torque down L not request" ; +VAL_TABLE_ SMODESIG 1 "in SHARP mode" 0 " not in SHARP mode" ; +VAL_TABLE_ CVTLMPSIG 1 "warning lamp on" 0 "warning lamp off" ; +VAL_TABLE_ MUPSFTTD 1 " torque down request" 0 " torque down not request" ; +VAL_TABLE_ NEXTGPDX 1 "Sub trans target gear pos 2nd" 0 "Sub trans target gear pos 1st " ; +VAL_TABLE_ CURGPDX 1 "Sub trans current gear pos 2nd " 0 "Sub trans current gear pos 1st " ; +VAL_TABLE_ OFF_ON 1 " ON" 0 " OFF" ; +VAL_TABLE_ ACCDIS 1 "inhibit" 0 "not inhibit" ; +VAL_TABLE_ INDSSIG 1 "in SPORT mode" 0 "not in SPORT mode(" ; +VAL_TABLE_ SMODESIG 1 "in SPORT mode" 0 "not in SPORT mode" ; +VAL_TABLE_ MMODESIG 1 "MANUAL mode" 0 "not in MANUAL mode" ; +VAL_TABLE_ IDLEUP 1 "idle up request" 0 "idle up not request" ; +VAL_TABLE_ INDSRNG 1 "S range" 0 " Except in S range" ; +VAL_TABLE_ INDLRNG 1 "L range" 0 "Except in L range" ; +VAL_TABLE_ ATCLD 1 "Low Temperature" 0 "Except for Low Temperature" ; +VAL_TABLE_ ONLUFLG 1 "During Lockup " 0 "Except for Lockup " ; +VAL_TABLE_ ACCLIM 1 "During Limit" 0 "Except for Limit " ; +VAL_TABLE_ INDDSRNG 1 "Ds range" 0 "Except for Ds range" ; +VAL_TABLE_ DriveMode_Status 1 "ECO_mode" 0 "Except ECO_mode" ; +VAL_TABLE_ AT_Req_NAVI_SHIFT_menu 1 " ECO NAVI menu on" 0 " ECO NAVI menu off" ; +VAL_TABLE_ AT_Req_ECO_mode_menu 1 "ECO mode menu on" 0 " ECO mode menu off" ; +VAL_TABLE_ CVTLOAD 3 " Level 4" 2 " Level 3" 1 " Level 2" 0 " Level 1" ; +VAL_TABLE_ KTFTMP 3 " Not used" 2 " Not used" 1 "Not used" 0 "temp. low" ; +VAL_TABLE_ RNGSIG 3 "N range" 2 "Ds range" 1 "-" 0 "D range" ; +VAL_TABLE_ MMODEGP 3 "4th" 2 "3rd" 1 "2nd" 0 "1st" ; +VAL_TABLE_ ALU_ANSWER 2 "others = Not used" 1 "55h = Answer2" 0 "AAh = Answer1" ; +VAL_TABLE_ ATLAMP 1 "Warning lamp is ON" 0 "Warning lamp is OFF " ; +VAL_TABLE_ TORQUE_CONTROL_PROHIBIT 1 "Torque compensation inhibot" 0 "Torque compensation permitted" ; +VAL_TABLE_ ROBOTIZED_GTP 1 "to be defined" 0 "to be defined" ; +VAL_TABLE_ MUX_OP 1 "stro ofCANmute/absfail auth" 0 "stro ofCANmute/absfailnotauth" ; +VAL_TABLE_ REQUEST 1 "Request" 0 "Request nothing " ; +VAL_TABLE_ RNG_NG 1 " Range is abnormal " 0 " Range is normal " ; +VAL_TABLE_ PTDOFF 1 " PTD inhibit" 0 " PTD not inhibit" ; +VAL_TABLE_ POWLAMP 1 " POWER lamp is OFF" 0 " POWER lamp is OFF" ; +VAL_TABLE_ M4WDINHSIG 1 " Inhibition of activating e4WD" 0 "Permission of activating e4WD" ; +VAL_TABLE_ TEST_OP 1 "TRQ request" 0 "OilPressure request" ; +VAL_TABLE_ ODCLAMP 1 "OD cancellation lamp is ON" 0 " OD cancellation lamp is OFF " ; +VAL_TABLE_ NIDLESTB 1 "N_Idle Standby" 0 "Not N_Idle Standby" ; +VAL_TABLE_ NIDLELRN 1 "N_Idle Learning" 0 "Not N_Idle Learning" ; +VAL_TABLE_ MMODE 1 "MANUAL mode" 0 "not MANUAL mode" ; +VAL_TABLE_ Fail_notFail 1 " fail" 0 "Not fail" ; +VAL_TABLE_ CLROP 1 "clear" 0 "not clear" ; +VAL_TABLE_ Sub_OP_StopRequest 1 "request" 0 "no request" ; +VAL_TABLE_ TOWMODEREQ 1 "TOW mode indicator req" 0 "No TOW mode indicator req" ; +VAL_TABLE_ SNOW_MODE_REQ 1 "Snow mode request" 0 "No snow mode request" ; +VAL_TABLE_ TORQUE_REQ_PROGRESS 1 "shift in progress" 0 " no shift in progress" ; +VAL_TABLE_ RESET_INF 1 "exit from reset" 0 "no reset" ; +VAL_TABLE_ LNTIR 1 "request" 0 "no request" ; +VAL_TABLE_ EX_BK_INH_REQ 1 "Exhaust Brake Inhibit Request" 0 " No Request" ; +VAL_TABLE_ ADFCRREQ 1 "Recover request" 0 " no Recover request" ; +VAL_TABLE_ RGB_PBP_REQ 1 "Push brake pedal requested" 0 "No push brake request" ; +VAL_TABLE_ MAJOR_FAIL 1 "major failure (ECM stop request)" 0 "no major failure" ; +VAL_TABLE_ ATSLREQ 1 "Limit request" 0 "no Limit request" ; +VAL_TABLE_ FAN_REQ 1 "engine fan request" 0 "no engine fan request" ; +VAL_TABLE_ ECO_MODE_REQ 1 "Eco mode request" 0 "No eco mode request" ; +VAL_TABLE_ OPEN_DOOR 1 "AT_OpenDoorWarning" 0 "No AT_OpenDoorWarning" ; +VAL_TABLE_ ODCLAMP_INDSSIG 1 "AT/CVT indicate request" 0 "No AT/CVT indicate request" ; +VAL_TABLE_ ATHITEMP 1 "AT/CVT high temp warning" 0 "No AT/CVT high temp warning" ; +VAL_TABLE_ ATLAMP_INDSSIG_CVTLAMPSIG 1 "AT/CVT default warning" 0 "No AT/CVT default warning" ; +VAL_TABLE_ OBD_MILREQ 1 " MIL ON" 0 " MIL OFF" ; +VAL_TABLE_ fNoOpnPrs1 1 "release plessure min" 0 "release plessure not min" ; +VAL_TABLE_ OILPNG 1 " idle up request" 0 " idle up not request" ; +VAL_TABLE_ RGB_GP_REFUSE 1 "gear shift not accepted" 0 "gear shift accepted" ; +VAL_TABLE_ GRRTOHLD 1 "It is gear ratio hold " 0 "Gear ratio chg permi " ; +VAL_TABLE_ SMLUFLG 1 "During smooth Lockup" 0 "Except for smooth Lockup " ; +VAL_TABLE_ ONSHIFT 1 " during shiftting" 0 "Except for shiftting " ; +VAL_TABLE_ DOWNVSP 1 "Rappied slowdown " 0 " Except for Rappied slowdown " ; +VAL_TABLE_ INDRRNG 1 "R range" 0 "Except for R range" ; +VAL_TABLE_ INDPRNG 1 "P range" 0 "Except for P range" ; +VAL_TABLE_ INDNRNG 1 "N range" 0 "Except for N range" ; +VAL_TABLE_ D4MODE 1 "D-4 range" 0 "Except for D-4 range" ; +VAL_TABLE_ INDDRNG 1 "D range" 0 "Except for D range" ; +VAL_TABLE_ IND4RNG 1 "4 range" 0 "Except for 4 range" ; +VAL_TABLE_ IND3RNG 1 "3 range" 0 "Except for 3range" ; +VAL_TABLE_ IND2RNG 1 "2range" 0 "Except for 2range" ; +VAL_TABLE_ MMODE_INDMRNG 1 "Manual range mode" 0 "Except for Manual range mode " ; +VAL_TABLE_ ONLUFLG 1 "During Lockup " 0 " Except for Lockup " ; +VAL_TABLE_ IND1RNG 1 "1 range" 0 "Except for 1 range" ; +VAL_TABLE_ Eco_mode_Status 1 "ECO mode" 0 "Except ECO mode" ; +VAL_TABLE_ CL2TMP_D_or_R_Flag 1 "Estimated temp on RevB( R )" 0 " Estimated temp on LowB( D )" ; +VAL_TABLE_ ENGINE_START_INHIBIT 1 "engine start not avairable" 0 "engine start avairable" ; +VAL_TABLE_ Eco_Navi_Status 1 " ECO_NAVI ON" 0 " ECO_NAVI OFF" ; +VAL_TABLE_ AT_Req_NAVI_SHIFT_menu 1 "ECO NAVI menu on" 0 "ECO NAVI menu off" ; +VAL_TABLE_ AT_Req_ECO_mode_menu 1 "ECO mode menu on" 0 "ECO mode menu off" ; +VAL_TABLE_ TMISFAIL 1 "CVT is fail" 0 "CVT is not fail" ; +VAL_TABLE_ IDSTSTBY 1 "CVT is idle stop standby OK" 0 "CVT is idle stop standby NG" ; +VAL_TABLE_ IDSTSTBYI 1 "CVT idlestop stndby indicator OK" 0 "CVT idlestop stndby indicator NG" ; +VAL_TABLE_ ISRESTD 1 "CVT req torque-down" 0 "CVT don't req torque-down" ; +VAL_TABLE_ ISHRDREQ 1 "CVT req HSA release delay" 0 "CVT don't req HSA release delay" ; +VAL_TABLE_ FSCKATIH 1 "Control prohibition" 0 "Control permission" ; +VAL_TABLE_ ATCOLD 1 "ATF temperture is low" 0 "ATF temperture is not low" ; +VAL_TABLE_ TM_TYPE 1 "MT(ECM)" 0 "AT/CVT/AMT" ; +VAL_TABLE_ ONLUFLG_SMLUFLG_174 3 "Not used" 2 "locked up converter" 1 "sliding converter" 0 "unlocked converter" ; +VAL_TABLE_ Anti_RGB_PUMP_STA 3 "not used" 2 "RGB pump inactive" 1 "RGB pump active" 0 "Unavailable" ; +VAL_TABLE_ AT_FAIL_STATUS 1 "Restr of shftchg&1st rear take" 0 " No restriction" ; +VAL_TABLE_ CVTLOAD 3 "Level 4" 2 "Level 3" 1 "Level 2" 0 "Level 1" ; +VAL_TABLE_ CRANKING_AUTHORISATION 3 "Unavailable" 2 " reserved" 1 " cranking authorized" 0 "cranking not allowed" ; +VAL_TABLE_ AT_TorqueRequestInProgress 3 "Not Used" 2 "Not Used" 1 "Not Used" 0 "torque limit w/o AT shift change" ; +VAL_TABLE_ AscMode_Status 3 "Drive Style P3(AT only)" 2 "Drive Style P2(AT only)" 1 "Drive Style P1" 0 "Drive Style Normal" ; +VAL_TABLE_ CURGPV_CURGP_NEXTGP 3 "4th" 2 "3rd" 1 "2nd" 0 "1st" ; +VAL_TABLE_ AT_TorqueControlType 3 "Rev ctrl chg req at kicDown" 2 "Rev ctrl chg req at CoastUp" 1 "Rev ctrl chg req at DriveUp" 0 "Trq limit w/o AT shift change " ; +VAL_TABLE_ SFTVCTR 3 "Shiftting 4-5" 2 "Shiftting 3-4" 1 "Shiftting 2-3" 0 "Shiftting 1-2" ; +VAL_TABLE_ DRIVETD 3 "static,Trq dwn req of 3 gear" 2 "static,Trq dwn req of 2 gear" 1 "static,Trq dwn req of 1st gear" 0 "request nothing" ; +VAL_TABLE_ TA_POSITION 3 "drive" 2 "neutral " 1 "reverse" 0 " parking" ; +VAL_TABLE_ NEXTGP_CURGP 3 "Gear 3" 2 "Gear 2" 1 "Gear 1" 0 "idle Neutral control" ; +VAL_TABLE_ GP 3 "3rd range" 2 "2nd range" 1 "1st range" 0 "declutched at rest" ; +VAL_TABLE_ IND_RNG 3 " N range" 2 "R range" 1 "P range" 0 "OFF" ; +VAL_TABLE_ AT_FAIL 3 "1*b = CL1 Sol is failure" 2 "****0*b = CL1 Sol is normal" 1 "*****1b = Sub O/P is failure" 0 "*****0b = Sub O/P is normal" ; +VAL_TABLE_ LOCK_UNLOK_REQ_DOP 3 "Trunk open operation" 2 "UNLOCK operation" 1 "LOCK operation" 0 "no operation" ; +VAL_TABLE_ DOOR_SW 3 "front right door open" 2 "front right door closed" 1 "front left door open" 0 " front left door closed" ; +VAL_TABLE_ DR_AND_OTHER_DOORLOCK_INF 3 "Other doors locked" 2 "Other doors not locked" 1 "Driver's door locked" 0 "Driver's door not locked" ; +VAL_TABLE_ DOOR_LOCK 3 "doors locked" 2 "doors not locked" 1 "boot (back door) locked" 0 "boot (back door) not locked" ; +VAL_TABLE_ ENGINE_STOP 1 "Fuel Cut Request" 0 " Remote engine run flag" ; +VAL_TABLE_ VEHICLE_RUNNING 1 "vehicle running (speed > 7km/h)" 0 " vehicle stopped" ; +VAL_TABLE_ AT_POW 1 "powerlatch holding requested" 0 "powerlatch holding not requested" ; +VAL_TABLE_ BLOWER 1 "ON" 0 "OFF" ; +VAL_TABLE_ CUSTOMER_IDDLE_REQ 1 "eng idle speed req by custome" 0 "no eng idle speed req by custome" ; +VAL_TABLE_ HL_WASH_SELECTION 1 "Right HL washer sel " 0 " left HL washer sel or high Prs" ; +VAL_TABLE_ HL_WASH_REQ 1 " headlamps washer requested" 0 " headlamps washer not requested" ; +VAL_TABLE_ PORT_OPEN_REQ 1 "Open Request" 0 "not Request" ; +VAL_TABLE_ DELIVERY_INF 1 "delivery mode" 0 " customer mode" ; +VAL_TABLE_ TYRE_PRE 1 " veh without TPMS" 0 " veh with TPMS" ; +VAL_TABLE_ ESCL_STATUS 1 "LOCK" 0 "UNLOCK" ; +VAL_TABLE_ KEYLESS_DR_DOOR_UNLOCK 1 " unlock actuator drive on" 0 " unlock actuator drive off" ; +VAL_TABLE_ TRUNK_SW 1 " trunk open" 0 " trunk closed" ; +VAL_TABLE_ CUTOFF_SW 1 "SW is pulled (power cut)" 0 " SW is pushed(power supply)" ; +VAL_TABLE_ STOP_Indicator 1 " STOPindicator on request" 0 " STOPindicator off request" ; +VAL_TABLE_ STARTER_CONT_STA 1 "starter relay on" 0 "starter relay off" ; +VAL_TABLE_ ST_CutInfo 1 " Start cut" 0 " Start not cut" ; +VAL_TABLE_ SERVICE_Indicator 1 "SERVICE indicator onrequest" 0 "SERVICE indicator off request" ; +VAL_TABLE_ RISE_UP_REQ 1 "Riseup request" 0 "Riseup not request" ; +VAL_TABLE_ H_POSITION 1 "LHD" 0 " RHD" ; +VAL_TABLE_ RR_FOG_L 1 "rear fog light on" 0 "rear fog light off" ; +VAL_TABLE_ RR_DEF_REQ 1 " rear defrost manually requested" 0 " rear defrost not requested man" ; +VAL_TABLE_ RAP 1 "RAP on" 0 "RAP off" ; +VAL_TABLE_ IGN_SW 1 " Primary ignition supply on" 0 "Primary ignition supply off" ; +VAL_TABLE_ BRAKE_picture 1 "PRESS BRAKE on" 0 "PRESS BRAKE off" ; +VAL_TABLE_ TAIL_L_REQ 1 " position lights requested" 0 " position lights not requested" ; +VAL_TABLE_ OIL_P_SW 1 "oil pressure sw closed(lamp ON)" 0 "oil pressure switch open(normal)" ; +VAL_TABLE_ IGNOFF_NOTIFICATION 1 "UNDER_IGN_OFF_OPERATION" 0 "NOT_IGN_OFF_OPERATION" ; +VAL_TABLE_ PORT_OPEN_REQ 1 "Open Request" 0 "not Request" ; +VAL_TABLE_ OPERATION_ACTR 1 "operated actr by SMART" 0 "not operated actr by SMART" ; +VAL_TABLE_ WIP_MAL 1 "wiping malf" 0 "no wiping malf" ; +VAL_TABLE_ TRAILER 1 "trailer detected" 0 "no trailer detected" ; +VAL_TABLE_ IDLE_UP_REQ 1 "idle speed increase req" 0 "no idle speed increase req" ; +VAL_TABLE_ RES_BCM 1 "exit from reset" 0 " no exit from reset" ; +VAL_TABLE_ CHILDPROOF_LOCK 1 "childproof lock mf warn msg" 0 "No childproof lock mf warn msg" ; +VAL_TABLE_ ALS_FAIL 1 "ALS failure" 0 "no ALS failure" ; +VAL_TABLE_ INHI_N_SW 1 "neutral contact reached" 0 "neutral contact not reached" ; +VAL_TABLE_ RING_ILLUMI_REQ 1 "meter ring illumination on" 0 "meter ring illumination off" ; +VAL_TABLE_ HL_LOW_REQ 1 "low beam requested" 0 " low beam not requested" ; +VAL_TABLE_ KEYLESS_PUSH 1 " Keyless(IGN KNOB) push pres" 0 " Keyless(IGN KNOB) push not pres" ; +VAL_TABLE_ KEY_KEYLESS 1 "Vehicle with Key" 0 "Keyless vehicle" ; +VAL_TABLE_ KeyinSW 1 " Key-In SWon" 0 " Key-In SW off" ; +VAL_TABLE_ KEY_WARNING_BUZZER 1 "KEY warning buzzer on" 0 "KEY warning buzzer off" ; +VAL_TABLE_ CHALENGE_STAND 1 "ChallengeRequest" 0 "invalid" ; +VAL_TABLE_ S_SECODE_CLEAR 1 "S_SMART_CLEAR" 0 " invalid" ; +VAL_TABLE_ RESPONSE_SMART 1 "response to Smart" 0 " invalid" ; +VAL_TABLE_ REG_INF 1 "registration ID" 0 "Invalid" ; +VAL_TABLE_ CAL_REQ 1 "calculation request" 0 " invalid" ; +VAL_TABLE_ SMART_SEC_OK 1 "ACK" 0 " invalid" ; +VAL_TABLE_ INTERLOCK_NPSW 1 "InterLock/NP switchON" 0 "InterLock/NP switchOFF" ; +VAL_TABLE_ INHIBIT_REQ 1 " INHIBIT RELAY ON REQUEST" 0 " INHIBIT RELAY OFF REQUEST" ; +VAL_TABLE_ IMMOBILIZER_FAILURE 1 " immobilser Failure" 0 " immobilser OK" ; +VAL_TABLE_ IMMOBI_OK_FLAG 1 " immobi OK flag on" 0 " immobi OK flag off" ; +VAL_TABLE_ IGNON_REQ 1 " IGN RELAY ON REQUEST" 0 " IGN RELAY OFF REQUEST" ; +VAL_TABLE_ HORN_REQ 1 "horn charp request" 0 "horn charp not request" ; +VAL_TABLE_ HL_HIGH_REQ 1 "high beam requested" 0 "high beam not requested" ; +VAL_TABLE_ HEATER_F 1 " heater unit set pnt frozen" 0 " heater unit set pnt not frozen" ; +VAL_TABLE_ GLASS_HATCH 1 "Glass Hatch Open" 0 "Glass Hatch closed" ; +VAL_TABLE_ WARNING_REQ_BUZZER2 1 "buzzer2 on" 0 "buzzer2 off" ; +VAL_TABLE_ FR_FOG_L_REQ 1 "front fog lights requested" 0 " front fog lights not requested" ; +VAL_TABLE_ BACK_DOOR_LOCK_STA 1 "Permit" 0 " forbiddance" ; +VAL_TABLE_ ESCL_RELAY_REQ 1 "ESCL RELAY ON REQUEST" 0 "ESCL RELAY OFF REQUEST" ; +VAL_TABLE_ DAY_NIGHT_INF 1 "NIght time" 0 "Day time" ; +VAL_TABLE_ DTRL_REQ 1 "day time running light req" 0 "day time running light not req" ; +VAL_TABLE_ CRANKING_AUTHORIZATION 1 "cranking authorized" 0 "cranking inhibited" ; +VAL_TABLE_ CANMASK 1 "count store of CAN mute/abs" 0 "no count store of CAN mute/abs" ; +VAL_TABLE_ CLUSTER_ILL_REQ 1 " cluster illumination req" 0 " cluster illumination not req" ; +VAL_TABLE_ CLIMATE_COOLING 1 "climate compressor on" 0 " climate compressor off" ; +VAL_TABLE_ WARNING_REQ_BUZZER1 1 "buzzer1 on" 0 "buzzer1 off" ; +VAL_TABLE_ BLOWER_FAN 1 " blower fan motor on" 0 " blower fan motor off" ; +VAL_TABLE_ BATTERY_LOW 1 "battery LOW" 0 "battery OK" ; +VAL_TABLE_ AUTOMATIC_WIPING_MAL 1 "automatic wiping failure" 0 "automatic wiping OK" ; +VAL_TABLE_ ANTI_HORN_REQ 1 "anti theft horn request" 0 "anti theft horn not request" ; +VAL_TABLE_ ANTI_HIJACK 1 "anti hijack off" 0 "anti hijack on" ; +VAL_TABLE_ ALS_ACT 1 " ALS activated" 0 " ALS not activated" ; +VAL_TABLE_ ALARM 1 " alarm on" 0 " alarm off" ; +VAL_TABLE_ AC_COMP_REQ 1 "air conditioning requested" 0 "air conditioning not requested" ; +VAL_TABLE_ ACC_SW 1 "accessory supply on" 0 "accessory supply off" ; +VAL_TABLE_ AC_TYPE 1 " A/C TypeB(clim connect CAN nw )" 0 " A/CTypeA(clim connect CAN nw )" ; +VAL_TABLE_ TURN_SW 3 "invalid" 2 "Turn SW Right is ON" 1 "Turn SW Left is ON" 0 "Turn SW Left Right are OFF" ; +VAL_TABLE_ REV_SW 3 "Not used" 2 "invalid" 1 "rear gear engaged" 0 "rear gear not engaged" ; +VAL_TABLE_ RR_DEF_REQ 3 "rear defrost req and engaged" 2 "rear defrost not req and engaged" 1 "rear defrost req and not engaged" 0 "rear defrost not requested" ; +VAL_TABLE_ OTHER_DOOR_ACTR_INF 3 "invalid" 2 "other doors lock operate" 1 "other doors unlock operate" 0 "other doors no operation" ; +VAL_TABLE_ ABD_MOVE_REVERSE 3 "open" 2 "reverse" 1 "move" 0 "off" ; +VAL_TABLE_ RIGHT_PSD_MOVE_REVERSE 3 "invalid" 2 "reverse on RR PSD" 1 "move on RR PSD" 0 "OFF" ; +VAL_TABLE_ LEFT_PSD_MOVE_REVERSE 3 "invalid" 2 "reverse on RL PSD" 1 "move on RL PSD" 0 "OFF" ; +VAL_TABLE_ Auto_Door_Lock 3 "Reserve" 2 "AutoDoorLocking off" 1 "AutoDoorLocking on" 0 "off" ; +VAL_TABLE_ BCM_DONGLE_COM 3 " Not used" 2 "ID write" 1 "ID request" 0 "normal case" ; +VAL_TABLE_ TRIP_SCROLLING_REQ 3 "invalid" 2 "downward scrolling request" 1 "upward scrolling request" 0 "no request" ; +VAL_TABLE_ BRAKE_PAD 3 "Not used" 2 "pad to be changed" 1 "short circuit 12 V" 0 " no fault" ; +VAL_TABLE_ WARNING_REQ_IND 3 "KEY indicator off request" 2 "KEY indicator blink request" 1 "KEY indicator on request" 0 " KEY indicator off request" ; +VAL_TABLE_ LOCK_UNLOK_REQ 7 "Trunk Open request" 6 "RL door Unlock request" 5 "RR door Unlock request" 4 "As door Unlock request" 3 "Dr door Unlock request" 2 "All doors Unlock request" 1 "All doors Lock request" 0 "No request" ; +VAL_TABLE_ IGN_STATER 3 " igni request and starter req" 2 "ignition request and starter off" 1 " ignition off and starter req" 0 " ignition off and starter off" ; +VAL_TABLE_ HARD_TOP_POSITION 3 "Invalid" 2 "not equiped" 1 " hardtop open" 0 " hardtop closed" ; +VAL_TABLE_ BCM_WAKE_SLEEP_COM 3 "Wakep Up" 2 "reserved" 1 "reserved" 0 " GoToSleep" ; +VAL_TABLE_ DR_DOOR_ACTR_INF 3 "invalid" 2 "driver's door lock operate" 1 "driver's door unlock operate" 0 "driver's door no operation" ; +VAL_TABLE_ CORN_L_REQ 3 "Invalid" 2 "cornering lamp Right request" 1 "cornering lamp left request" 0 "cornering lamp not request" ; +VAL_TABLE_ CLUTCH_SW_MAX_TRAVEL 3 "invalid" 2 "not equipped" 1 "= clutch pressed" 0 "clutch not pressed" ; +VAL_TABLE_ CABRESW 3 "invalid" 2 "Not used" 1 "brake activated" 0 "brake not activated" ; +VAL_TABLE_ STEERING_LOCK 3 "reserved" 2 "steering column locking failure" 1 " electronical failure BCM/STOP" 0 "no steering lock failure" ; +VAL_TABLE_ No_INFOR 3 "Key No.3" 2 "Key No.2" 1 "Key No.1 " 0 "No Keyless Operation " ; +VAL_TABLE_ KEY_NO 3 "key less 3" 2 "key less 2" 1 "key less 1" 0 "no key less operation" ; +VAL_TABLE_ TURN_IND 2 "left OFF and right ON" 1 "left ONand right flash indi OFF" 0 "left and right flash indi OFF" ; +VAL_TABLE_ FR_WIP_REQ 3 "one high speed wiping requested" 2 "one low speed wiping requested" 1 " front wiper forced to stop" 0 " front wiper in stop position" ; +VAL_TABLE_ PTC_RLY 3 "PTC RLY3 ON" 2 "PTC RLY2 ON" 1 "PTC RLY1 ON" 0 "All PTC RLY OFF" ; +VAL_TABLE_ CARD_KEY_NUM 3 "Not Used" 2 "card / key no.2 identi by BCM" 1 "card / key no1 identi by BCM" 0 "Not used" ; +VAL_TABLE_ CLUSTER_DISP 3 "card not detected" 2 "insert card" 1 "welcome" 0 "nothing to display" ; +VAL_TABLE_ Warning_Request_picture 3 "PRESS AND HOLD START1" 2 "RISK OF STEERING LOCKING" 1 "SELECT PARK 2" 0 " Not operate" ; +VAL_TABLE_ BUZZ_REQ 3 "automatic lock up deactivated" 2 "automatic lock up activated" 1 "position lights omission" 0 "no buzzer request" ; +VAL_TABLE_ PKB_IND 1 "parking brake tightened" 0 "parking brake released" ; +VAL_TABLE_ RR_DEF_SW 1 "RearDefoggerSwitch On" 0 "RearDefoggerSwitch OFF" ; +VAL_TABLE_ Thermo_SW 1 "Thermo AMP On" 0 "Thermo AMP OFF" ; +VAL_TABLE_ AC_SW 1 "Aircon SW On" 0 "Aircon SW OFF" ; +VAL_TABLE_ BlowerFanMoter_OFF 1 " BlowerFanMoter ON" 0 "BlowerFanMoter OFF" ; +VAL_TABLE_ HL_WASH_SW 1 " HeadLampWasherSwitch On" 0 " HeadLampWasherSwitch OFF" ; +VAL_TABLE_ RR_AS_SW 1 "Rear Wiper moving" 0 "Rear Wiper stop position" ; +VAL_TABLE_ RR_WIP 1 "Rear Wiper on" 0 "Rear Wiper off" ; +VAL_TABLE_ OK_COMMUTE 3 "invalid(commutation allowed)" 2 "commutation allowed" 1 "network in preparation" 0 "commutation not allowed" ; +VAL_TABLE_ USM_WAKE_SLEEP_REQ 3 " WakeUp" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_TABLE_ BAT_L 1 "battery lamp on" 0 "battery lamp off" ; +VAL_TABLE_ BAT_LOW 1 "batt volt low (disp msg on clu)" 0 "batt volt overthres(no display)" ; +VAL_TABLE_ STARTER 3 "cranking relay switched on" 2 " long relaxation active" 1 "short relaxation active" 0 "cranking relay switched off" ; +VAL_TABLE_ STSYS_TYPE 1 "Key Engine Start System" 0 "Push Engine Start System" ; +VAL_TABLE_ ESCL_STATUS 1 "Unlock condition" 0 "Except Unlock condition" ; +VAL_TABLE_ USM_REFUSE 3 " reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_TABLE_ IGN_CONF 1 "primary ignition supply " 0 "no primary ignition supply " ; +VAL_TABLE_ HL_WASH 1 "headlamp washer on" 0 "headlamp washer off" ; +VAL_TABLE_ OIL_P_SW 1 "pressure switch closed" 0 "pressure switch open" ; +VAL_TABLE_ FR_WIP_PROT 3 " front wiper blocked" 2 "front wiper protected in HS" 1 "front wiper protected in LS" 0 " no protection" ; +VAL_TABLE_ RES_USM 1 " exit from reset" 0 "no reset" ; +VAL_TABLE_ FR_FOG 1 " front fog lights on" 0 " front fog lights off" ; +VAL_TABLE_ HL_HIGH 1 " high beam on" 0 " high beam off" ; +VAL_TABLE_ HL_LOW 1 " low beam on" 0 " low beam off" ; +VAL_TABLE_ TAIL_L 1 "position lights off" 0 "position lights on" ; +VAL_TABLE_ AC_COMP 1 "Climate cooling compressor on" 0 "Climate cooling compressor off" ; +VAL_TABLE_ RR_DEF 1 "rear defrost on" 0 "rear defrost off" ; +VAL_TABLE_ AUTO_S_SW 1 "stop position reached" 0 " stop position not reached" ; +VAL_TABLE_ FR_WIP 3 "invalid" 2 "high speed active" 1 "low speed active" 0 "front wiper stopped" ; +VAL_TABLE_ STA_RLY 3 "cranking relay switched on" 2 " long relaxation active" 1 "short relaxation active" 0 "cranking relay switched off" ; +VAL_TABLE_ PUSH_SW 3 "invalid" 2 "Not used" 1 "push switch on" 0 "push switch off" ; +VAL_TABLE_ FUEL_FILTER 1 "water detected in diesel" 0 "no water detected in diesel" ; +VAL_TABLE_ INTERLOCK_NPSW 1 " InterLock/NP switch on" 0 " InterLock/NP switch off" ; +VAL_TABLE_ IGN_RLY 1 "IGN relay on" 0 "IGN relay off" ; +VAL_TABLE_ IGN_CONT_STA 1 " ign control on" 0 " ign control off" ; +VAL_TABLE_ HOOD_SW_2 1 "Hood_SW_2 ON" 0 "Hood_SW_2 OFF" ; +VAL_TABLE_ HOOD_SW 1 " hood SW on" 0 " hood SW off" ; +VAL_TABLE_ ESCL_RELAY 1 "ESCL relay on" 0 "ESCL relay off" ; +VAL_TABLE_ DETENT_SW 3 "invalid" 2 "Not used" 1 "detent sw off (P-range)" 0 "detent sw on (except P-range)" ; +VAL_TABLE_ BRK_OIL_SW 1 "Brake Oil Sw ON or Brk Lmp ON" 0 " Brake Oil Sw is OFF or No Req" ; +VAL_TABLE_ ANTI_T_HORN 1 "anti theft horn on" 0 "anti theft horn off" ; +VAL_TABLE_ StarterInhibitorCutStatus 3 "Starter & Inhibit Cut " 2 "Starter cut & Inhibit not Cut " 1 "Starter not cut & Inhibit Cut " 0 "Starter & Inhibit not Cut " ; +VAL_TABLE_ STARTER_INHIBIT_RELAY 3 "ST relay on " 2 "invalid" 1 " ST relay off & INHI relay on" 0 " ST relay off & INHI relay off" ; +VAL_TABLE_ REV_SW 3 "invalid" 2 "Not used" 1 "rear gear engaged" 0 "rear gear not engaged" ; +VAL_TABLE_ USM_DONGLE_COM 3 "Blank" 2 "Not used" 1 " ID tansmit" 0 "normal" ; +VAL_TABLE_ INHI_N_SW 3 "invalid" 2 "not equipped" 1 "neutral contact reached" 0 " neutral contact not reached" ; +VAL_TABLE_ MOTOR_FAN 3 "high speed motor fan active" 2 " mid speed motor fan active" 1 "low speed motor fan active" 0 "motor fan stopped" ; +VAL_TABLE_ COLUMU_LOCK_STA 3 "lock status NG" 2 "ESCL unlock" 1 " ESCL lock" 0 "lock status NG" ; +VAL_TABLE_ CORN_L 3 "invalid" 2 "cornering lamp right on" 1 "cornering lamp left on" 0 " cornering lamp off" ; +VAL_TABLE_ ALT_NO 3 "alternator 3" 2 "alternator 2" 1 "alternator 1" 0 " invalid" ; +VAL_TABLE_ DOOR_SW 9 " boot (back door) open" 8 "boot (back door) closed" 7 " rear right door open" 6 " rear right door closed" 5 " rear left door open" 4 "rear left door closed" 3 "front right door open" 2 "front right door closed" 1 "front left door open" 0 " front left door closed" ; +VAL_TABLE_ POSITION_LIGHT 1 "position lights on" 0 "position lights off" ; +VAL_TABLE_ AIRBAG_LAMPOFF_STA 1 " PassengerAIRBAG_OFF lamp ON" 0 " PassengerAIRBAG_OFF lamp OFF" ; +VAL_TABLE_ AIRBAG_LAMPOFF_OPE 1 "PassengerAIRBAG_OFF lamp OK" 0 "PassengerAIRBAG_OFF lamp mf" ; +VAL_TABLE_ ZKREQ 1 "road property conf request" 0 "no road property conf request" ; +VAL_TABLE_ RES_METER 1 " SPORTSW is pushed" 0 " no reset" ; +VAL_TABLE_ MUTE_RADIO_ORDER 1 "mute radio order" 0 " No mute radio order" ; +VAL_TABLE_ LAMP_AUTOCHECK 1 "autotest in progress" 0 " no autotest in progress" ; +VAL_TABLE_ LPG_LOW 1 " LPG level low" 0 "LPG level OK" ; +VAL_TABLE_ R_DEF_SW 1 "LOAD SW ON(HIGH)" 0 "LOAD SW OFF(Low)" ; +VAL_TABLE_ AIRBAG_LAMP_STA_VtSig 1 " SPORTSW is pushed" 0 "SPORTSW is not pushed" ; +VAL_TABLE_ AIRBAG_LAMP_OPE_VtSig 1 "lamp OK" 0 "lamp malfunction" ; +VAL_TABLE_ BRAKE_FLUID_WARNING_VtSig 1 " brake fluid level low" 0 " brake fluid level OK" ; +VAL_TABLE_ VSPID_VtSig 3 "vehspd copy from sens(Ren2)" 2 "vehspd copy from sens(Ren1)" 1 "vehspd copy from Sens(Nissan)" 0 "vehspd copy from ABS/ESP" ; +VAL_TABLE_ BELT_LAMP_VtSig 3 "Description for the value '0x3'" 2 "Safety belt not fast&speed>thres" 1 "Safety Belt not fast(Lamp on)" 0 " Safety Belt fastened (Lamp off)" ; +VAL_TABLE_ FGUAG_DIAG_VtSig 3 "reserved" 2 " short circuit" 1 "open circuit" 0 "fuel gauge link OK" ; +VAL_TABLE_ VEHICLE_TYPE_VtSig 3 " X65 ph2" 2 "X81" 1 "X73" 0 "X74" ; +VAL_TABLE_ SportMode_SW_VtSig 1 " SPORTSW is pushed" 0 "SPORTSW is not pushed" ; +VAL_TABLE_ SNOW_SW_VtSig 1 "snow mode switch on" 0 "snow mode switch off" ; + + +BO_ 3221225472 VECTOR__INDEPENDENT_SIG_MSG: 0 Vector__XXX + SG_ DAS_Warn : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DAS_Attention_Level : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_OFF_A_BW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_MAL_A_BW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_MAL_A_FW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_MAL_D_BS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_MAL_D_LN : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_MAL_D_FW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_SB_A_BW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_SB_D_BS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_SB_W_BS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_C_D_BS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_C_D_LN : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_C_D_FW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_C_CC : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_CNCL_C : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_NO_W : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_NO_D : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_FB_A_FW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_FB_D_FW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_FB_W_FW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_FB_CC : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_CH_D_BS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_CH_D_LN : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_CH_W_LN : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_MAL_W_BS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_MAL_W_LN : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_MAL_W_FW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_PH_A_FW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_PH_A_BW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_PH_D_FW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_DR_AT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_D_RR : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_DCA_CUR : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_RR : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_FR_SNS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_FR_DST : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_BS_BRT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_LN_T : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_WARN_VOL : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_D_BS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_D_LN : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_D_FR : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_ICC_CUR : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_ASL_SPD : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_ICC_SPD : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_W_TS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_ACCEL_CNT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_A_BR : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_BA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_W_BS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_W_LN : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_W_FR : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_SR_B : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_LC_H : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_B_R : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_B_C : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_FR_R : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_FR_C : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_SR_D : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_FP_H : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_BA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_D_RR_I : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_MOD : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_D_FR_D : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_D_BS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_D_LN : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_D_FR : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_D_RR_A : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_W_BS_B : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_W_LN_T : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_W_BS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_W_LN : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_W_FR : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ BUZZ_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ AC_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Rear_WIP_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ EXBK_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ AMAET : 0|12@0+ (0.5,-400) [-400|1647] "Nm" Vector__XXX + SG_ K_OFF_TIMER : 0|9@0+ (1,0) [0|511] "min" Vector__XXX + SG_ RBSNC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MBSNO : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CC_SL_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TQTMDYN : 0|12@0+ (0.5,-400) [-400|1647] "Nm" Vector__XXX + SG_ TQTMSTA : 0|12@0+ (0.5,-400) [-400|1647] "Nm" Vector__XXX + SG_ NEXTGP : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|4@1+ (1,0) [1|15] "" Vector__XXX + SG_ AT_TorqueRequestInProgress : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ ONLUFLG_SMLUFLG : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DRIVEMODE_FAC : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ TORQUE_LOSSES : 0|8@1+ (2,-100) [-100|408] "Nm" Vector__XXX + SG_ EX_BK_INH_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_Req_ECO_mode_menu : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_Req_NAVI_SHIFT_menu : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DriveMode_Status : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LNTIR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LIMIT_VOL_CTRL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_ACS_4 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_ACS_3 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_ACS_2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_ACS_1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_SET_8 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_SET_7 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_SET_6 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_SET_5 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_SET_4 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_SET_3 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_SET_2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_DEST_SET_1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_ACS_4 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_ACS_3 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_ACS_2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_ACS_1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_SET_8 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_SET_7 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_SET_6 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_SET_5 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_SET_4 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_SET_3 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_SET_2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CPY_SOUR_SET_1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DEL_ACS_OPERATE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DEL_SET_OPERATE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ACS_NUM_SELECT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SDS_NUM_SELECT : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SUS_NUM_SELECT : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ RES_NUM_SELECT : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_NUM_SELECT : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ ACS_VOL_SW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ACS_VOL_UD : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STRT_SHUT_VOL_SW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STRT_SHUT_VOL_UD : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ACS_SW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STRT_SHUT_SW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND_SETTING_SELECT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ INITIAL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_SET_LIST_3 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_SET_LIST_1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ WARN_STATUS_CPY_DEL : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ WARN_STATUS_CPY_DEL_CHANGE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ WARN_STATUS_SD : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ WARN_STATUS_SD_CHANGE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_ACS_LIST_4 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_ACS_LIST_3 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_ACS_LIST_2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_ACS_LIST_1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_SET_LIST_8 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_SET_LIST_7 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_SET_LIST_6 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_SET_LIST_5 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_SET_LIST_4 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_EXT_SET_LIST_2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ACS_IND_STATUS : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SDS_IND_STATUS : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ SUS_IND_STATUS : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ RES_IND_STATUS : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_IND_STATUS : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_ACS_LIST_4 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_ACS_LIST_3 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_ACS_LIST_2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_ACS_LIST_1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_SET_LIST_8 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_SET_LIST_7 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_SET_LIST_6 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_SET_LIST_5 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_SET_LIST_4 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_SET_LIST_3 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_SET_LIST_1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVAIL_SET_LIST_2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ACS_VOL_STATUS : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ STRT_SHUT_VOL_STATUS : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ ACS_STATUS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STRT_SHUT_STATUS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ USR_CST_AVAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND_SETTING_STATUS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ KGF_MES_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ KPA_MES_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PSI_MES_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ RE_SET_TPMS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELECT_PRESS_SUPPORT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDON_DISP : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SPDBLREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SPDREQ : 0|8@0+ (1,0) [0|253] "km/h or mile/h" Vector__XXX + SG_ DATABYTE7 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE7 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ BRKLMPOFFRLY_FAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ EGTRQMX : 0|12@0+ (0.5,-400) [-400|1647.5] "Nm" Vector__XXX + SG_ TRQVTL : 0|12@0+ (0.5,-400) [-400|1647.5] "Nm" Vector__XXX + SG_ STAT_CHG_REQ_TPMS : 0|5@0+ (1,0) [0|0] "" Vector__XXX + SG_ ILL_CONT_DUTY : 0|10@0+ (0.1,0) [0|100] "%" Vector__XXX + SG_ TPMS_RST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STAT_CHG_REQ_IDM : 0|5@0+ (1,0) [0|0] "" Vector__XXX + SG_ ICCExistance : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STAT_CHG_REQ : 0|6@0+ (1,0) [0|0] "" Vector__XXX + SG_ BRKLMPOFFRLYD : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHKSUM : 0|8@0+ (1,0) [0|255] "-" Vector__XXX + SG_ MSGCOUNT : 0|2@0+ (1,0) [0|3] "-" Vector__XXX + SG_ BMCREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BMCTRQ : 0|10@0+ (0.1,-50) [-50|52.3] "Nm" Vector__XXX + SG_ MSGCOUNT : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ WARN_SOUND_VOL : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ BSW_FAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_D_BS_ADAS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_D_LN_ADAS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_W_LN_ADAS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STRG_SW_FAILURE : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ADAS_HW_FAILURE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DIST_WARN : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ IBA_ACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_ACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ IDM_LDP_BSI_ACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ BSI_F_OFF : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LDP_F_OFF : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ WRN_LN_R : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ WRN_LN_L : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_D_BS_IDM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_D_LN_IDM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_W_LN_IDM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ BSI_HMI_ORDER_R : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BSI_HMI_ORDER_L : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SI_RDR_BL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BSI_LC_HT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LDP_LC_HT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LDW_LC_HT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BSI_BR_C_RSN : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ LDP_BR_C_RSN : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHECKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCOUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ GIVEIMG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MARK_TYPE_R : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ MARK_TYPE_L : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHECKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCOUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ OFFSET_R_VALID : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFFSET_L_VALID : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CURVATURE : 0|12@0- (1E-005,0) [-0.02|0.02] "1/m" Vector__XXX + SG_ OFFSET_R : 0|10@0- (0.01,0) [-5.12|5.11] "m" Vector__XXX + SG_ OFFSET_L : 0|10@0- (0.01,0) [-5.12|5.11] "m" Vector__XXX + SG_ COMP_ACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ V_APO : 0|8@0+ (0.39215686275,0) [0|100] "%" Vector__XXX + SG_ VDCFAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ VDCACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ABSACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CABRBSW_HCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSG_CTR : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ HMI_STATUS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ HMI_SOUND_STATUS : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ ADAS_STATUS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSG_CTR : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ SOUND4_VOLUME : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ SOUND4_STOP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND4_REQ : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND3_VOLUME : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ SOUND3_STOP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND3_REQ : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND2_VOLUME : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ SOUND2_STOP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND2_REQ : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND1_VOLUME : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ SOUND1_STOP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND1_REQ : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSG_CTR : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ IDM_STATUS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND4_VOLUME : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ SOUND4_STOP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND4_REQ : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND3_VOLUME : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ SOUND3_STOP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND3_REQ : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND2_VOLUME : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ SOUND2_STOP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND2_REQ : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND1_VOLUME : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ SOUND1_STOP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND1_REQ : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ ActiveGoodCheck : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ IRTACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHCKSUM : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCNT : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ REGENTGTQU : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ BLSPTSQU : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ BLSPTS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ P_BuQU : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ P_Bu : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BSVFAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FXTGTDRVQU : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ Acmh_state : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ DLCFAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FXTGTDRV : 0|15@0+ (4,-131068) [-131068|0] "N" Vector__XXX + SG_ REGENTGT : 0|16@0+ (1,-32767) [-32767|32767] "Nm" Vector__XXX + SG_ RollerBench_Type : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ RollerBench_NotAllowed : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ VEHHEVQU : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHCKSUM : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCNT : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ VEHHEV : 0|13@0+ (0.015625,0) [0|129.984375] "m/s" Vector__XXX + SG_ FXTGTEXQU : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FXTGTEXAc : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FXTGTEX : 0|15@0+ (4,-131068) [-131068|0] "" Vector__XXX + SG_ ABSAVAI : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ABSACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STNDSTILLSTS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STNDSTILL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STABMRGN_Quali : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ STAB_MRGN : 0|8@0+ (0.0039,0) [0|0.9945] "" Vector__XXX + SG_ CHECKSUM : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ P_RUN : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCOUNT : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ RUN_AIM_COMPLT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DTCT_POSI_VARI_R : 0|4@0+ (1,0) [0|15] "Pix" Vector__XXX + SG_ DTCT_POSI_VARI_L : 0|4@0+ (1,0) [0|15] "Pix" Vector__XXX + SG_ RUN_AIM_WORK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ROAD_AND_VEHICLE_MODEL : 0|7@0+ (1,0) [-64|63] "deg" Vector__XXX + SG_ AMOUNT_CHAR_R : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMOUNT_CHAR_L : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ DTCT_DISCONTI_3_R : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DTCT_DISCONTI_3_L : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DTCT_DISCONTI_2_R : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DTCT_DISCONTI_2_L : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LDW_STATUS_R : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LDW_STATUS_L : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MARKER_TYPE_R : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ MARKER_TYPE_L : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ CURVATURE : 0|16@0- (2E-007,0) [-0.0065536|0.0065532] "1/m" Vector__XXX + SG_ MSGCOUNT : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ DIAG_STATUS : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ YAW_ANGLE : 0|11@0- (0.0001,0) [-0.1024|0.1022] "rad" Vector__XXX + SG_ DTCT_DISCONTI_1_R : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DTCT_DISCONTI_1_L : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MARKER_VALID_R : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MARKER_VALID_L : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFFSET_R : 0|14@0- (0.001,0) [-8.192|8.19] "m" Vector__XXX + SG_ OFFSET_L : 0|14@0- (0.001,0) [-8.192|8.19] "m" Vector__XXX + SG_ VentirationStatus_Fr : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRIAC_TEMP_HVAC_degF : 0|8@0+ (1,0) [0|255] "degC" Vector__XXX + SG_ PRIAC_TEMP_HVAC_degC : 0|8@0+ (0.5,0) [0|127.5] "degC" Vector__XXX + SG_ INTERRUPT_DISP : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ TURN_EFFECT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ CAR_EFFECT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ASA_SETTINGS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ADA1_SETTINGS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ RR_TIRE_EFFECT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ RL_TIRE_EFFECT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FR_TIRE_EFFECT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FL_TIRE_EFFECT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ IDM_BUZZER : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MODE_SELECT : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SMB_STA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ IDM_LAMP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SSA_STA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SSA_SETTINGS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SMB_CTRL_LEVEL : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHKSUM : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCOUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ SBW_STRSPD : 0|12@0+ (0.015625,0) [-32|31.96875] "rad/sec" Vector__XXX + SG_ REF_ANG_SBW : 0|16@0- (0.0004882813,0) [-16|15.999023438] "rad" Vector__XXX + SG_ SHAFT_FORCE : 0|12@0- (1,0) [-2048|2046] "N" Vector__XXX + SG_ CHKSUM : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCOUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ FFB_ANG_OFST_REQ : 0|20@0+ (3.05176E-005,0) [-16|15.99994] "rad" Vector__XXX + SG_ OFFSET_FORCE_REQ : 0|12@0- (1,0) [-2048|2046] "N" Vector__XXX + SG_ CHKSUM : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCOUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ F_REQ_SMB : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ F_REQ_LDP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ F_REQ_BSI : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SYS_STATUS : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ DAMPING_FACTOR : 0|16@0+ (0.0009765625,0) [-21|63] "N(rad/sec)" Vector__XXX + SG_ TRQ_REQ : 0|16@0- (0.0009765625,0) [-21|31.998046875] "N" Vector__XXX + SG_ ANG_REQ : 0|16@0- (1.52588E-005,0) [-0.5|0.49996948242] "rad" Vector__XXX + SG_ CHKSUM : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ MODE_STATUS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MODE_TRANSITION : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CMDFAIL_SMB : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ INH_SMB : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SBWFAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FFB_IQ_CRNT : 0|16@0- (0.0078125,0) [-256|255.984375] "A" Vector__XXX + SG_ FFB_ANG : 0|16@0- (0.0009765625,0) [-32|31.998046875] "rad" Vector__XXX + SG_ MSGCOUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ PINION_ANG : 0|16@0- (2E-011,0) [-16|15.999023438] "rad" Vector__XXX + SG_ OUT_TEMP : 0|4@0+ (8,-40) [-40|72] "degC" Vector__XXX + SG_ CAM_PITCH : 0|6@0+ (0.1,1) [1|7.2] "deg" Vector__XXX + SG_ CAM_LAT_POSI : 0|9@0+ (1,-256) [-255|255] "min" Vector__XXX + SG_ CAM_HEIGH : 0|8@0+ (4,970) [974|1990] "mm" Vector__XXX + SG_ CAM_DIST : 0|8@0+ (5,600) [605|1875] "mm" Vector__XXX + SG_ MSGCOUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ VEHI_WIDE : 0|9@0+ (1,1650) [1650|2160] "min" Vector__XXX + SG_ VEHI_TYPE : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ MARKET_INFO : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ TURN_SIG : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ WIPER : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ VSP : 0|8@0+ (1,0) [0|254] "kmpk" Vector__XXX + SG_ MSGCOUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ YAW_RATE_02 : 0|12@0+ (0.1,-204.8) [-200|200] "deg/s" Vector__XXX + SG_ CSTR_ASA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ LOGIN_PERM_FLAG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LOGIN_KEYLMK_STAT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CSTR_STG_RES : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ CSTR_STG_EFO : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ CSTR_SMB : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ CSTR_PT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_STG_RES : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_STG_EFO : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_SMB : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_PT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_ASA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_STG_RES : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_STG_EFO : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_SMB : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_PT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_ASA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_STG_RES : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_STG_EFO : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_SMB : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_PT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_ASA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SPO_STG_RES : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SPO_STG_EFO : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SPO_SMB : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SPO_PT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SPO_ASA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STD_STG_RES : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STD_STG_EFO : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STD_SMB : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STD_PT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STD_ASA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ AHL_REQ : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ AHL_FAIL : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ LB_USABLE_SOC : 0|7@0+ (1,0) [0|100] "%" Vector__XXX + SG_ LB_FAN_CON : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ LB_EVA_TMP : 0|8@0+ (0.33,-30) [0|53.82] "degC" Vector__XXX + SG_ LB_COOL_REQ : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ LB_FULLCAPQC : 0|9@0+ (100,0) [0|50000] "wh" Vector__XXX + SG_ LB_CAPRQ : 0|9@0+ (100,0) [0|50000] "wh" Vector__XXX + SG_ PDMCODE : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ NCSQNO : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ CHECKSUM393 : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ MPRUN393 : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ FQCPUSHSTPMON : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ QCSQNO2MON : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ DDC_MON : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FQCRELAYST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FQCFAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FNCFAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FCAUTION : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ QCHGVOLSENSINF : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FNCCONFSRLYINF1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FNCCONFSRLYINF2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FACTIVTRACK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PCFST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ACVOLST : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FFSCRLYONNG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FQCIRSENS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MAXCHGPOUT : 0|9@0+ (0.1,0) [0|50] "kW" Vector__XXX + SG_ FQCCONDET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ NCCONDET : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FRESTOK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FQCGFCKEND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FQCRELAYON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EVSEST2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CANWAKEPDM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ REFUSETOSLEEP : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FCHGSTPREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHECKSUM390 : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ MPRUN390 : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ QCRLYCKST : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FQCRLYCHKFIN : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHGPWR : 0|9@0+ (0.1,0) [0|50] "kw" Vector__XXX + SG_ CHECK_SUM : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCTADAS : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ RADAR_DIST : 0|6@0+ (0.5,0) [0|31.5] "m" Vector__XXX + SG_ SETZ : 0|12@0+ (0.001,0) [0|3] "m" Vector__XXX + SG_ SETY : 0|12@0+ (0.001,0) [0|3] "m" Vector__XXX + SG_ SETX : 0|12@0- (0.001,0) [-1.25|1.25] "m" Vector__XXX + SG_ CURVE_IN_ACTIVE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SETPITCH : 0|15@0+ (0.001,0) [0|10] "deg" Vector__XXX + SG_ CHECK_SUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCOUNT : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ width : 0|12@0+ (0.001,0) [0|2.5] "m" Vector__XXX + SG_ LDP_FAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MARKET : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOTAL_SMB_ONOFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_SMBSW_OFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_TOUR_SETRQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_SNOW_SETRQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_ECO_SETRQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_CSTM_SETRQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SPORT_SMBSW_OFF : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SPORT_SMBSW_MID : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SPORT_SMBSW_LIGHT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STD_SMBSW_OFF : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STD_SMBSW_MID : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STD_SMBSW_LIGHT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_CSTM_SMBSW_OFF : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_CSTM_SMBSW_MID : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_CSTM_SMBSW_LIGHT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_ASASW_ON : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_ASASW_OFF : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_TOUR_SMBSW_OFF : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_TOUR_SMBSW_MID : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRSNL_TOUR_SMBSW_LIGHT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_SMBSW_MID : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_SMBSW_LIGHT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_SMBSW_OFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_SMBSW_MID : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_SMBSW_LIGHT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STRRESPSW_SLOW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STRRESPSW_QUICK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STRRESPSW_MID : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STREFFRTSW_MID : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STREFFRTSW_LIGHT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STREFFRTSW_HEAVY : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRQRESPSW_STD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRQRESPSW_SPORT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRQRESPSW_SNOW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRQRESPSW_ECO : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DRVMODE_SCREEN : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ COPYNO_TO_USER : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ COPYNO_FR_USER : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ COPYITSSET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ COPYDRVSET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ USER4CHGSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ USER3CHGSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ USER2CHGSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ USER1CHGSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CURLOGIN_USERINFO : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCNTR : 0|1@0+ (1,0) [0|1] "-" Vector__XXX + SG_ DRVMODE_RESETRQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LOGINKEYLINKSET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ USER4_REGINFO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ USER3_REGINFO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ USER2_REGINFO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ USER1_REGINFO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ INIT_FLAG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_MODE_REQ_TOUR : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_MODE_REQ_STD : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_MODE_REQ_SPO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_MODE_REQ_SNOW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_MODE_REQ_ECO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_MODE_REQ_CSTM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CSTM_STGRES_QIK_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CSTM_STGRES_MID_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CSTM_STGEFO_SLW_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CSTM_STGEFO_MID_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CSTM_STGEFO_LGT_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CSTM_STGEFO_HVY_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_STGRES_QIK_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_STGRES_MID_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_STGEFO_SLW_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_STGEFO_MID_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_STGEFO_LGT_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_STGEFO_HVY_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_SMB_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_PT_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOUR_ASA_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_STGRES_QIK_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_STGRES_MID_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_STGEFO_SLW_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_STGEFO_MID_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_STGEFO_LGT_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_STGEFO_HVY_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_SMB_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_PT_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_ASA_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_SMB_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_ASA_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_STGRES_QIK_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_STGRES_MID_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_STGEFO_SLW_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_STGEFO_MID_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_STGEFO_LGT_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_STGEFO_HVY_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_PT_HATIREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_SMB_REQ_OFF_STD : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_SMB_REQ_OFF_SPO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_SMB_REQ_OFF_PER : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_SMB_REQ_MID_STD : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_SMB_REQ_MID_SPO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_SMB_REQ_MID_PER : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_SMB_REQ_LGT_STD : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_SMB_REQ_LGT_SPO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_SMB_REQ_LGT_PER : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_STG_REQ_RES : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_STG_REQ_EFO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_SMB_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_ASA_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_PT_REQ_STD : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_PT_REQ_SPO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_PT_REQ_SNOW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISP_PT_REQ_ECO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SMB_POPREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DRIVE_MODE_POPREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ VEHICLE_DRIVE_MODE : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ CURLOGIN_USERNUM_IDM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ DGI_FAIL_FLAG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SW_ST_MET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_STATUS_MET : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MET_DISCHG_ALARM_STA : 0|4@0+ (1,1) [0|11] "Segment" Vector__XXX + SG_ TIMER_START_M_MET : 0|3@0+ (10,0) [0|50] "min" Vector__XXX + SG_ TIMER_START_H_MET : 0|5@0+ (1,0) [0|23] "hour" Vector__XXX + SG_ PRUN509 : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ SELCT_THU_MET : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_SELCT_MET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ C_TIME_UPDATE_MET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_STATUS_MET : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_WED_MET : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_TUE_MET : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_SUN_MET : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_SAT_MET : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_MON_MET : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_FRI_MET : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_SW_SELECTER_MET : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ MET_CUR_SEC : 0|6@0+ (1,0) [0|59] "sec" Vector__XXX + SG_ MET_CUR_MIN : 0|6@0+ (1,0) [0|59] "min" Vector__XXX + SG_ MET_CUR_H : 0|5@0+ (1,0) [0|23] "hour" Vector__XXX + SG_ MET_CUR_DAY_W : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_STOP_M_MET : 0|3@0+ (10,0) [0|50] "min" Vector__XXX + SG_ TIMER_STOP_H_MET : 0|5@0+ (1,0) [0|23] "hour" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ MCPRS : 0|10@0+ (0.05,0) [0|30] "Mpa" Vector__XXX + SG_ IRSTRK : 0|10@0+ (0.05,0) [0|50] "mm" Vector__XXX + SG_ CheckSum : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCNTR : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ VDCPURQC : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ RDY : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ EGST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AOR : 0|8@0+ (0.392156862745098,0) [0|100] "%" Vector__XXX + SG_ EGSTTYP : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ HCMNSETL : 0|8@0+ (12.5,0) [0|3187.5] "rpm" Vector__XXX + SG_ HCMNSETH : 0|8@0+ (12.5,0) [0|3187.5] "rpm" Vector__XXX + SG_ TGETRQF : 0|12@0+ (0.5,-400) [-400|1647.5] "Nm" Vector__XXX + SG_ TGETFON : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PMSMODE : 0|5@0+ (1,0) [0|32] "" Vector__XXX + SG_ PRESTP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PREIGOFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ VSP_IND_STA : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DSC_REFUSE : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SUS_SET_STA : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ DSC_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBW_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ STAT_CHG_REQ_TPMS : 0|6@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVE_FUEL_RESET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MOD_PRESS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BSW_PRESS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LDW_PRESS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SET_LAN_REQ : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAM_SW_PR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAM_SW_KEEP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAM_OFF_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INTIAL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VSP_SOUND_CHG_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SUS_SOUND : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ AVE_ELECMP : 0|10@0+ (0.1,0) [0|99.9] "km/kwh" Vector__XXX + SG_ BAT_LOW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AVE_ELECMP_ACON : 0|10@0+ (0.1,0) [0|102.2] "km/kwh" Vector__XXX + SG_ AVE_ELECMP_ACOFF : 0|10@0+ (0.1,0) [0|102.2] "km/kwh" Vector__XXX + SG_ DTE_DEF : 0|8@1+ (1,-127) [-127|127] "km" Vector__XXX + SG_ PDM_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PKB_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_DEF_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Themo_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BLOWER_FAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HL_WASH_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_WIP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_AS_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SECREVDX : 0|14@0+ (1,0) [0|16382] "rpm" Vector__XXX + SG_ ATCLKDX : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ CURGPDX : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NEXTGPDX : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TTCL2 : 0|12@0+ (0.25,-100) [-100|923.75] "Nm" Vector__XXX + SG_ _1stREGEN_OK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ COMP_ACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ fTTCL2ln : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ wvTRCL2ln : 0|9@0+ (0.5,-128) [-128|127] "Nm" Vector__XXX + SG_ ATMAP_CNG : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ ASC_STOP_MODE : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ CL2TMODE : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ CL1PRES : 0|12@0+ (0.2,0) [0|819] "kPa" Vector__XXX + SG_ CL1_Standby : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ALU_Q : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ SHIFTREVREQ : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ BDY_STYL : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHECKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCOUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ MODEL_IDEN : 0|11@0+ (1,0) [1|1260] "" Vector__XXX + SG_ LUM_R : 0|8@1+ (1,0) [0|100] "" Vector__XXX + SG_ LUM_L : 0|8@0+ (1,0) [0|100] "" Vector__XXX + SG_ WIPER_ON : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BCI_STATUS_MOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BCI_DISP_DMD_MOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BCI_BUZ_DMD_MOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BCI_BUZ2_SNR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BCI_BUZ1_SNR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCOUNT : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ Vehicle_Speed : 0|16@0+ (0.1,0) [0|6553.5] "km/h" Vector__XXX + SG_ IDLRQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CGINPTRQ : 0|12@0+ (0.5,-400) [-400|1647.5] "Nm" Vector__XXX + SG_ VDCACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ VDCFAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ GPHOJI : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ fCL2SLPTAG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ V_APO : 0|8@0+ (0.39215686275,0) [0|100] "%" Vector__XXX + SG_ CABRBSW_HCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ABSACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHGPNG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ENGCNKOK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ENGSTART : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OPSTART : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ETTMIN : 0|12@0+ (0.5,-400) [-400|1647] "Nm" Vector__XXX + SG_ MGCHGPNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OPDRIVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MDWNSTA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EngStartNgJudgeAtcu : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TrqPh_adv : 0|6@0+ (1.5873015873,0) [0|100] "%" Vector__XXX + SG_ Engagement_Control_State : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ASC_MODE : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ NextGP_MAP : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ CHECKSUM : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ fNoOpnPrs1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CL2TMP_D_or_P_Flag : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CL2_TEMP : 0|8@0+ (2,40) [40|548] "degC" Vector__XXX + SG_ AT_TorqueControlType : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ MGRDOFS : 0|8@0- (0.17578125,0) [-22.5|22.1] "deg" Vector__XXX + SG_ AT_FAIL_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALU_ANSWER : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ Sub_OP_StopRequest : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_FAIL : 0|6@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASC_INH_ITS2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MGCOUNT_4DF : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ ASC_INH_ITS3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASC_INH_ITS1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASC_INH_ALL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RAD_ST4_toAT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RAD_ST3_toAT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RAD_ST2_toAT : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ CAMERA_FAILtoAT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LASER_FAILtoAT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Z_ABST_toAT : 0|16@0+ (0.1,0) [0|150] "m" Vector__XXX + SG_ EngineAirTemp : 0|7@0+ (1,-40) [-40|86] "degC" Vector__XXX + SG_ ISFBDRQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SBKEXP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FCUTNUM : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRETRQ : 0|12@0+ (0.5,-400) [-400|1647.5] "Nm" Vector__XXX + SG_ CLENGENA : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FS_SFCUTM_RQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FS_LMT_ENG_PWR : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FS_LMT_APO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ INTER_LOCK_OK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PD_PRESSURE : 0|8@0+ (0.02,0) [0|5.1] "MPa" Vector__XXX + SG_ EGVRRQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CRC_191 : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PRUN_191 : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ ENE : 0|12@0+ (3.125,0) [0|12796.875] "" Vector__XXX + SG_ STPENA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FSMPWRLRQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FSEVRQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETCDEF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NSET : 0|8@0+ (12.5,0) [0|3187.5] "rpm" Vector__XXX + SG_ FCFBDRQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ENGTQMDF : 0|8@0+ (0.78125,0) [0|198.4375] "%" Vector__XXX + SG_ ACCUT_ENG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TENGUPLM : 0|12@0+ (0.5,-400) [0|1647.5] "Nm" Vector__XXX + SG_ TENGLRLM : 0|12@0+ (0.5,-400) [0|1647.5] "Nm" Vector__XXX + SG_ EGVRMTNG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ EGVRRQMD : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ POSDTNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TWDTNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FCSTP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ IDLRQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ENGLDTRQ : 0|12@0+ (0.5,-400) [-400|1647.5] "Nm" Vector__XXX + SG_ TGENGTRQ : 0|12@0+ (0.5,-400) [-400|1647.5] "Nm" Vector__XXX + SG_ CHK_CRC_1D0 : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ P_RUN_1D0 : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ EGVRJGAR : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ EGVRAVJG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ HCMVB : 0|8@0+ (80,0) [0|20400] "mV" Vector__XXX + SG_ NERV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETCDEFRQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_ON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND_RNG : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHECKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCOUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ Steering_Angle : 0|16@0- (0.1,0) [-864|864] "deg" Vector__XXX + SG_ FR_WIP_REQ : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ FUNC_ALIVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CRUSTER_ILL_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_ACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HMISTATE_R : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ HMISTATE_L : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ HMIORDER_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HMIORDER_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HMIIMMDIATE_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HMIIMMDIATE_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HMI_ACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CTA_CHANGE_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DIST_INNER : 0|8@0+ (2,0) [0|508] "cm" Vector__XXX + SG_ CHECKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ COUNTER : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ DIST_ROR : 0|8@1+ (2,0) [0|508] "cm" Vector__XXX + SG_ DIST_ROL : 0|8@1+ (2,0) [0|508] "cm" Vector__XXX + SG_ DIST_RIR : 0|8@1+ (2,0) [0|508] "cm" Vector__XXX + SG_ DIST_RIL : 0|8@1+ (2,0) [0|508] "cm" Vector__XXX + SG_ MSGCTACC : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ CHKSUM_1D6 : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ V_APO : 0|8@1+ (0.3921569,0) [0|100] "%" Vector__XXX + SG_ PEDALERR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RDY : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HCMFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HCMASCD_ACTIVATE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HCM_WSC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HCM_EGSTT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HCM_EGSTP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ THOCAST : 0|13@0- (0.25,0) [-1000|1000] "Nm" Vector__XXX + SG_ THMAX_upper : 0|8@1+ (8,0) [0|6000] "Nm" Vector__XXX + SG_ THMAX_lower : 0|2@1+ (8,0) [0|6000] "Nm" Vector__XXX + SG_ THEST : 0|16@0- (0.25,0) [-1000|6000] "Nm" Vector__XXX + SG_ LB_HIS_CELL_VOL : 0|8@0+ (50,2000) [2000|4260] "mV" Vector__XXX + SG_ BTA_MAIL_SEND_RQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LB_NXTWTIM_60 : 0|5@0+ (60,0) [0|1800] "min" Vector__XXX + SG_ LB_HEATEXIST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_HEATSTOPMAIL_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LB_HEATSTARTMAIL_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LBC_DTC : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ LB_NXTWTIM_20 : 0|5@0+ (20,0) [0|580] "min" Vector__XXX + SG_ LB_HIS_TEMP_WUP : 0|7@1+ (1,-40) [-40|86] "degC" Vector__XXX + SG_ LB_HIS_TEMP : 0|7@1+ (1,-40) [-40|86] "degC" Vector__XXX + SG_ LB_HIS_INTG_CUR : 0|8@1+ (0.6,0) [-76.8|76.2] "Ah" Vector__XXX + SG_ LB_HIS_HLVOL_TIMS : 0|4@1+ (1,0) [0|10] "time" Vector__XXX + SG_ LB_HIS_DEG_REGI : 0|7@1+ (1,0) [0|100] "%" Vector__XXX + SG_ LB_HIS_DATA_SW : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_HIS_CELL_VOL : 0|6@1+ (40,1900) [1900|4380] "mV" Vector__XXX + SG_ MSG_CNT : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ NEAR_OBJ_FLAG_RR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NEAR_OBJ_FLAG_FR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PARK_GUIDE_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOD_SYS_STATUS_TOP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOD_SYS_STATUS_RR : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOD_SYS_STATUS_FR : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOD_FAIL_FLAG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOD_DETECT_DISP_PINT_Y_TOP : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MOD_DETECT_DISP_PINT_Y_RR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MOD_DETECT_DISP_PINT_Y_RR : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MOD_DETECT_DISP_PINT_X_TOP : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MOD_DETECT_DISP_PINT_X_RR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MOD_DETECT_DISP_PINT_X_FR : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MOD_DETECT_AREA_TOP : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOD_DETECT_DETECTION_RR : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOD_DETECT_DETECTION_FR : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOD_BUZ2_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOD_BUZ1_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VCM_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ SET_ITS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MOD_STATUS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LDW_STATUS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BSW_STATUS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ INTIAL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BEEP_TYPE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BEEP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VIEW_CH_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AOD_BEEP2_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AOD_BEEP1_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STAT_CHG_REQ : 0|6@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SYSTEM_BUZZER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_LMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_FAIL_BUZZER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CTA_DIST_BEAM6_R : 0|8@0+ (0.1,0) [0|25.5] "m" Vector__XXX + SG_ CTA_DIST_BEAM5_R : 0|8@0+ (0.1,0) [0|25.5] "m" Vector__XXX + SG_ CTA_DIST_BEAM4_R : 0|8@0+ (0.1,0) [0|25.5] "m" Vector__XXX + SG_ CTA_DIST_BEAM3_R : 0|8@0+ (0.1,0) [0|25.5] "m" Vector__XXX + SG_ SOW_SEN_FUNC_STAT_3FE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CTA_TRACK_ID_TR3_R : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_BEAM_ID_TR3_R : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_TTC_TR3_R : 0|6@0+ (0.125,0) [0|7.875] "sec" Vector__XXX + SG_ CTA_TSP_TR3_R : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ CTA_TRACK_ID_TR2_R : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_BEAM_ID_TR2_R : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_TSP_TR2_R : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ SOW_SEN_FUNC_STAT_3FD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CTA_TTC_TR2_R : 0|6@0+ (0.125,0) [0|7.875] "sec" Vector__XXX + SG_ CTA_TRACK_ID_TR1_R : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_BEAM_ID_TR1_R : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_TTC_TR1_R : 0|6@0+ (0.125,0) [0|7.875] "sec" Vector__XXX + SG_ CTA_TSP_TR1_R : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ CTA_TRACK_ID_TRTTC_R : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_BEAM_ID_TRTTC_R : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_TTC_TRTTC_R : 0|6@0+ (1,0) [0|7.875] "sec" Vector__XXX + SG_ CTA_TSP_TRTTC_R : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ CTA_TRACK_ID_AL1_R : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_TTC_AL1_R : 0|6@0+ (0.125,0) [0|7.875] "sec" Vector__XXX + SG_ CTA_TSP_AL1_R : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ CTA_TSP_ALTTC_R : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ CTA_DIST_BEAM6_L : 0|8@0+ (0.1,0) [0|25.5] "m" Vector__XXX + SG_ CTA_DIST_BEAM5_L : 0|8@0+ (0.1,0) [0|25.5] "m" Vector__XXX + SG_ CTA_DIST_BEAM4_L : 0|8@0+ (0.1,0) [0|25.5] "m" Vector__XXX + SG_ CTA_DIST_BEAM3_L : 0|8@0+ (0.1,0) [0|25.5] "m" Vector__XXX + SG_ SOW_SEN_FUNC_STAT_3FC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CTA_TRACK_ID_TR3_L : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_BEAM_ID_TR3_L : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_TTC_TR3_L : 0|6@0+ (0.125,0) [0|7.875] "sec" Vector__XXX + SG_ CTA_TSP_TR3_L : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ CTA_TRACK_ID_TR2_L : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_BEAM_ID_TR2_L : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_TSP_TR2_L : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ SOW_SEN_FUNC_STAT_3FB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CTA_TTC_TR2_L : 0|6@0+ (0.125,0) [0|7.875] "sec" Vector__XXX + SG_ CTA_TRACK_ID_TR1_L : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_BEAM_ID_TR1_L : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_TTC_TR1_L : 0|6@0+ (0.125,0) [0|7.875] "sec" Vector__XXX + SG_ CTA_TSP_TR1_L : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ CTA_TRACK_ID_TRTTC_L : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_BEAM_ID_TRTTC_L : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_TTC_TRTTC_L : 0|6@0+ (1,0) [0|7.875] "sec" Vector__XXX + SG_ CTA_TSP_TRTTC_L : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ CTA_TRACK_ID_AL1_L : 0|3@0+ (1,0) [0|7] "" Vector__XXX + SG_ CTA_TSP_AL1_L : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ CTA_TTC_AL1_L : 0|6@0+ (0.125,0) [0|7.875] "sec" Vector__XXX + SG_ CTA_TSP_ALTTC_L : 0|6@0+ (1,0) [0|45] "km/h" Vector__XXX + SG_ CLROP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TTOP : 0|8@1+ (0.02,0) [0|5.1] "Nm" Vector__XXX + SG_ TEST_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MUX_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRSOP : 0|12@0+ (1,0) [0|4095] "kPa" Vector__XXX + SG_ INT_EL_ANO_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BUSSOFF_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MUTE_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABSENT_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SYS_FAIL_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASENSOR_FAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RLY_OFF_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RLY_ON_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOT_LO_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOT_HI_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEMPSEN_LO_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEMPSEN_HI_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEMP_FAIL_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STOP : 0|8@1+ (0.02,0) [0|5.1] "Nm" Vector__XXX + SG_ INVREADY : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STEP_OUT_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ POW_SAVE_OP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RNOP : 0|12@0+ (1,0) [0|4095] "rpm" Vector__XXX + SG_ T_PWR : 0|8@0+ (2,-100) [-100|410] "kW" Vector__XXX + SG_ CRC : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PRUN : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALU_Q_LBC : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ C_Down : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INTAKE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BLW_SPD : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ INC_TEMP : 0|8@1+ (0.5,-10) [-10|60] "degC" Vector__XXX + SG_ OFF_WED_IT_M : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_TUE_IT_M : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_THU_IT_M : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_SUN_IT_M : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_SAT_IT_M : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_MON_IT_M : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_FRI_IT_M : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TSOC_ITM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_WED_ITM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_TUE_ITM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_THU_ITM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_SUN_ITM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_SAT_ITM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_MON_ITM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_FRI_ITM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MODE_SELCT_SW_ITM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_SELCT_ITM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_STOP_M_ITM : 0|3@0+ (10,0) [0|50] "min" Vector__XXX + SG_ TIMER_STOP_H_ITM : 0|5@0+ (1,0) [0|23] "hour" Vector__XXX + SG_ TIMER_START_M_ITM : 0|3@0+ (10,0) [0|50] "min" Vector__XXX + SG_ TIMER_START_H_ITM : 0|5@0+ (1,0) [0|23] "hour" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ NEXT_CHG_DAY_ITM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_WED_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_TUE_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_THU_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_SUN_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_SAT_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_MON_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_FRI_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STP_CAPAACITY_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_SW_SELECTER_ITM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_STATUS_ITM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ Timer_Setting_2_MIN_ITM : 0|3@1+ (10,0) [0|50] "min" Vector__XXX + SG_ Timer_Setting_2_H_ITM : 0|5@1+ (1,0) [0|23] "hour" Vector__XXX + SG_ Timer_Setting_1_MIN_ITM : 0|3@1+ (10,0) [0|50] "min" Vector__XXX + SG_ Timer_Setting_1_H_ITM : 0|5@1+ (1,0) [0|23] "hour" Vector__XXX + SG_ Timer_No_ITM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_CHG_SW_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_CHG_SELECT2_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_CHG_SELECT1_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ NEXT_PRI_AC_DAY_ITM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRI_AC_SET2_IND_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRI_AC_SET1_IND_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRI_AC_PRIORITY_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRI_AC_INFO_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CUR_MIN_ITM : 0|6@1+ (1,0) [0|59] "min" Vector__XXX + SG_ CUR_H_ITM : 0|5@1+ (1,0) [0|23] "hour" Vector__XXX + SG_ CUR_DAY_ITM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ REC_FLAG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GPS_CUR_YEAR : 0|5@1+ (1,2008) [2008|2039] "year" Vector__XXX + SG_ GPS_CUR_MONTH : 0|4@1+ (1,0) [0|12] "month" Vector__XXX + SG_ GPS_CUR_DAY : 0|5@1+ (1,0) [0|31] "day" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ TONO_BOARD_MSG : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ROOF_OPE_BUZ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RHT_Status_MSG : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RHT_MOV_MSG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RHT_METER_SIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INSTANT_ELECMP : 0|10@0+ (0.05,0) [0|51.1] "km/kWh" Vector__XXX + SG_ AVE_ELECMP_ACON_V : 0|10@0+ (0.1,0) [0|102.2] "km/kwh" Vector__XXX + SG_ AVE_ELECMP_ACOFF_V : 0|10@0+ (0.1,0) [0|102.2] "km/kwh" Vector__XXX + SG_ DTE_DEF_VCM : 0|8@0+ (1,-127) [-127|127] "km" Vector__XXX + SG_ EMPTY_RQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DTE_VCM : 0|13@0+ (0.1,0) [0|819] "km" Vector__XXX + SG_ DTE_RQ : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ DTE_FLASH : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MVP_HCM : 0|8@0+ (0.4,-12.4) [-12.4|89.2] "kPa" Vector__XXX + SG_ MVP_HCM_STAT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ErgonomicPedal_4WDAPOST : 0|8@0+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ BMCEXE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BMCACK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ RQTRQASA : 0|8@0+ (10,0) [0|2540] "Nm" Vector__XXX + SG_ RQASA : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CDMODERQ : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHKSUM : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCNTR : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ BRKCOMSTAT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ VCMRBFAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STRB : 0|10@0+ (2.5,0) [0|2555] "Nm" Vector__XXX + SG_ OB_Width : 0|8@1+ (0.1,0) [0|25.5] "deg" Vector__XXX + SG_ Lateral_Position : 0|16@1- (0.1,0) [-25.5|25.5] "deg" Vector__XXX + SG_ OBJ_GRP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HI_BEAM_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_RELE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OTYP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_ODV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OBJ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_CHG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ VRES : 0|13@1- (0.1,0) [-20|60] "m/s" Vector__XXX + SG_ HL_LOW_SCAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_WHOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_HOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABST : 0|11@1+ (0.1,0) [0|150] "m" Vector__XXX + SG_ OB_Width : 0|8@1+ (0.1,0) [0|25.5] "deg" Vector__XXX + SG_ Lateral_Position : 0|16@1- (0.1,0) [-25.5|25.5] "deg" Vector__XXX + SG_ OBJ_GRP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HI_BEAM_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_RELE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OTYP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_ODV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OBJ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_CHG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ VRES : 0|13@1- (0.1,0) [-20|60] "m/s" Vector__XXX + SG_ HL_LOW_SCAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_WHOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_HOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABST : 0|11@1+ (0.1,0) [0|150] "m" Vector__XXX + SG_ OB_Width : 0|8@1+ (0.1,0) [0|25.5] "deg" Vector__XXX + SG_ Lateral_Position : 0|16@1- (0.1,0) [-25.5|25.5] "deg" Vector__XXX + SG_ OBJ_GRP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HI_BEAM_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_RELE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OTYP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_ODV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OBJ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_CHG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ VRES : 0|13@1- (0.1,0) [-20|60] "m/s" Vector__XXX + SG_ HL_LOW_SCAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_WHOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_HOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABST : 0|11@1+ (0.1,0) [0|150] "m" Vector__XXX + SG_ OB_Width : 0|8@1+ (0.1,0) [0|25.5] "deg" Vector__XXX + SG_ Lateral_Position : 0|16@1- (0.1,0) [-25.5|25.5] "deg" Vector__XXX + SG_ OBJ_GRP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HI_BEAM_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_RELE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OTYP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_ODV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OBJ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_CHG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ VRES : 0|13@1- (0.1,0) [-20|60] "m/s" Vector__XXX + SG_ HL_LOW_SCAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_WHOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_HOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABST : 0|11@1+ (0.1,0) [0|150] "m" Vector__XXX + SG_ OB_Width : 0|8@1+ (0.1,0) [0|25.5] "deg" Vector__XXX + SG_ Lateral_Position : 0|16@1- (0.1,0) [-25.5|25.5] "deg" Vector__XXX + SG_ OBJ_GRP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HI_BEAM_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_RELE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OTYP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_ODV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OBJ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_CHG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ VRES : 0|13@1- (0.1,0) [-20|60] "m/s" Vector__XXX + SG_ HL_LOW_SCAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_WHOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_HOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABST : 0|11@1+ (0.1,0) [0|150] "m" Vector__XXX + SG_ OB_Width : 0|8@1+ (0.1,0) [0|25.5] "deg" Vector__XXX + SG_ Lateral_Position : 0|16@1- (0.1,0) [-25.5|25.5] "deg" Vector__XXX + SG_ OBJ_GRP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HI_BEAM_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_RELE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OTYP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_ODV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OBJ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_CHG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ VRES : 0|13@1- (0.1,0) [-20|60] "m/s" Vector__XXX + SG_ HL_LOW_SCAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_WHOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_HOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABST : 0|11@1+ (0.1,0) [0|150] "m" Vector__XXX + SG_ OB_Width : 0|8@1+ (0.1,0) [0|25.5] "deg" Vector__XXX + SG_ Lateral_Position : 0|16@1- (0.1,0) [-25.5|25.5] "deg" Vector__XXX + SG_ OBJ_GRP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HI_BEAM_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_RELE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OTYP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_ODV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OBJ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_CHG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ VRES : 0|13@1- (0.1,0) [-20|60] "m/s" Vector__XXX + SG_ HL_LOW_SCAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_WHOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_HOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABST : 0|11@1+ (0.1,0) [0|150] "m" Vector__XXX + SG_ OB_Width : 0|8@1+ (0.1,0) [0|25.5] "deg" Vector__XXX + SG_ Lateral_Position : 0|16@1- (0.1,0) [-25.5|25.5] "deg" Vector__XXX + SG_ OBJ_GRP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HI_BEAM_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_RELE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OTYP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_ODV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_OBJ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_CHG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_DET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ VRES : 0|13@1- (0.1,0) [-20|60] "m/s" Vector__XXX + SG_ HL_LOW_SCAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_WHOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMP_HOL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEAK_WIDTH_UNFIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABST : 0|11@1+ (0.1,0) [0|150] "m" Vector__XXX + SG_ ATM_PRES : 0|10@0+ (0.1,0) [0.1|102.3] "kPa" Vector__XXX + SG_ IS_REQ_ACM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ REV_UP_REQ_HIGH_OIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FS_LMT_ENG_REV : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ VTCNOACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HIGH_ENGOIL_TMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REGGAS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBD_WUC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBD_VALUE : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ OBD_RDY_ON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBD_MARKER : 0|4@1+ (1,0) [0|10] "" Vector__XXX + SG_ OBD_GENERAL_TRIP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBD_MILREQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ VB : 0|6@0+ (0.5,0) [0|31.5] "V" Vector__XXX + SG_ RFCNTMG : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MC_Slave_RefuseToSleep : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LCNT : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MONI_T_WATER : 0|6@1+ (2,-40) [-40|86] "degC" Vector__XXX + SG_ MONI_T_MG : 0|8@1+ (1,-40) [-40|215] "degC" Vector__XXX + SG_ MONI_T_INV : 0|8@1+ (1,-40) [-40|215] "degC" Vector__XXX + SG_ MONI_T_CALINV : 0|8@1+ (1,-40) [-40|215] "degC" Vector__XXX + SG_ MONI_T_C : 0|8@1+ (1,-40) [-40|215] "degC" Vector__XXX + SG_ MONI_SEQMD : 0|5@1+ (1,0) [0|31] "-" Vector__XXX + SG_ DGCDMG : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MG_MIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_FANREQ : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_EGVR_STOP_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LB_EGVR_MNTR_STOP_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LB_TBMIN : 0|8@1+ (1,-40) [-40|105] "degC" Vector__XXX + SG_ LB_DCDC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_REFUSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CRC : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MPR55B : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_EMPTY : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_SOC : 0|10@0+ (0.1,0) [0|100] "%" Vector__XXX + SG_ LB_IRSEN_VOL : 0|10@0+ (4.8828125,0) [0|4090] "mV" Vector__XXX + SG_ LB_IRSEN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_ALU_ANSWER : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ BTCDOWN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DCDC_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_MIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CYCLE_CNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ CHG_HTY_D8 : 0|10@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_HTY_D7 : 0|6@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_HTY_D6 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_HTY_D5 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_HTY_D4 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_HTY_D3 : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_HTY_D2 : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_HTY_D1 : 0|6@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_EX_CNT : 0|5@1+ (1,0) [0|30] "time" Vector__XXX + SG_ CHG_DAT_NO : 0|3@1+ (1,0) [0|5] "" Vector__XXX + SG_ CHG_TYP_INFO : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ VCM_SPEC_NO : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_TYP_INFO2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ NEW_VCM_SPEC_NO : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_SAT_VCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_WED_VCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_THU_VCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_FRI_VCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_TUE_VCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_MON_VCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_SUN_VCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_TUE_VCM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ RE_WATCH_ADJ_VCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_SELCT_VCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_THU_VCM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_SAT_VCM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_FRI_VCM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_START_DAY_VCM : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ CUR_DAY_VCM : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ CUR_MIN_VCM : 0|6@0+ (1,0) [0|59] "min" Vector__XXX + SG_ CUR_H_VCM : 0|5@0+ (1,0) [0|23] "hour" Vector__XXX + SG_ SELCT_WED_VCM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MODE_SELCT_SW_VCM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_SUN_VCM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_MON_VCM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_STOP_M_VCM : 0|3@0+ (10,0) [0|50] "min" Vector__XXX + SG_ TIMER_STOP_H_VCM : 0|5@0+ (1,0) [0|23] "hour" Vector__XXX + SG_ TIMER_START_M_VCM : 0|3@0+ (10,0) [0|50] "min" Vector__XXX + SG_ TIMER_START_H_VCM : 0|5@0+ (1,0) [0|23] "hour" Vector__XXX + SG_ CHG_TYP_INFO : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ BOOKDIPLAY_STATUS : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ NEXT_CHG_DAY_VCM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_WED_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_TUE_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_THU_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_SUN_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_SAT_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_MON_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SELCT_FRI_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RE_WATCH_ADJ_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STP_CAPACITY_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_CHG_SELCT2_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_CHG_SELCT1_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIMER_STATUS_VCM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ Timer_Setting_2_MIN_VCM : 0|3@1+ (10,0) [0|50] "min" Vector__XXX + SG_ Timer_Setting_2_H_VCM : 0|5@1+ (1,0) [0|23] "hour" Vector__XXX + SG_ Timer_Setting_1_MIN_VCM : 0|3@1+ (10,0) [0|50] "min" Vector__XXX + SG_ Timer_Setting_1_H_VCM : 0|5@1+ (1,0) [0|23] "hour" Vector__XXX + SG_ Timer_No_VCM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RESET_TRIP_METER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Dischg_Stop_AlmSet : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Trip_auto_reset : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DISCHG_LOW_LIMIT_SOC : 0|4@0+ (1,1) [0|11] "Segment" Vector__XXX + SG_ CHG_FN_DAY : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ NEXT_CHG_STOP_H_VCM : 0|5@1+ (1,0) [0|23] "hour" Vector__XXX + SG_ NEXT_CHG_START_H_VCM : 0|5@1+ (1,0) [0|23] "hour" Vector__XXX + SG_ NEXT_CHG_STOP_MIN_VCM : 0|3@1+ (10,0) [0|50] "min" Vector__XXX + SG_ DEPARTU_MIN1_VCM : 0|6@1+ (1,0) [0|59] "min" Vector__XXX + SG_ NEXT_CHG_START_MIN_VCM : 0|3@1+ (10,0) [0|50] "min" Vector__XXX + SG_ DEPARTU_H1_VCM : 0|5@1+ (1,0) [0|23] "hour" Vector__XXX + SG_ NEXT_PRI_AC_DAY_VCM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ NEXT_CHG_DAY_VCM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRI_AC_PRIORITY_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRI_AC_SET2_IND_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRI_AC_SET1_IND_VCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CUR_MIN_VCM : 0|6@1+ (1,0) [0|59] "min" Vector__XXX + SG_ CUR_H_VCM : 0|5@1+ (1,0) [0|23] "hour" Vector__XXX + SG_ CUR_DAY_VCM : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ BOOST_PRESSURE : 0|8@1+ (1,0) [0|254] "kpa" Vector__XXX + SG_ AC_FS : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ AC_FDT : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ HVAC_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ ChargeTime200V_6kW_D : 0|11@0+ (1,0) [0|2046] "min" Vector__XXX + SG_ CHG_OPTION_6KW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AC_EXPECT_SUM : 0|5@1+ (160,0) [0|4800] "Wh" Vector__XXX + SG_ FULL_CAP_SEG : 0|5@0+ (1,0) [0|31] "" Vector__XXX + SG_ REAL_CAP_SEG : 0|5@1+ (1,0) [0|31] "" Vector__XXX + SG_ ChargeTime200V_D : 0|11@0+ (1,0) [0|2046] "min" Vector__XXX + SG_ ChargeTime100V_D : 0|11@0+ (1,0) [0|2046] "min" Vector__XXX + SG_ STMG : 0|11@0- (0.5,0) [-338|340] "Nm" Vector__XXX + SG_ STMG : 0|11@0- (0.5,0) [-220|290] "Nm" Vector__XXX + SG_ STMG : 0|11@0- (0.5,0) [-338|340] "Nm" Vector__XXX + SG_ STMG : 0|11@0- (0.5,0) [-274|274] "Nm" Vector__XXX + SG_ STMG : 0|11@0- (0.5,0) [-220|290] "Nm" Vector__XXX + SG_ STMG : 0|11@0- (0.5,0) [-200|270] "Nm" Vector__XXX + SG_ MGPWRBST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MGMODE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MEGVRSTOP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ UPMGTRQ_VAL : 0|6@0+ (2,0) [0|100] "%" Vector__XXX + SG_ UPMGTRQ_DIS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MGDPA : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MGSTATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MPRUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ CRC : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MCRESTATST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RNMG : 0|15@0- (1,0) [-16384|16382] "rpm" Vector__XXX + SG_ STMG : 0|11@0- (0.5,0) [-300|300] "Nm" Vector__XXX + SG_ UPMGTRQ : 0|7@1+ (1,0) [0|100] "%" Vector__XXX + SG_ MPRSTATUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MCPFN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSTFN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MDISCSTATUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VHMG : 0|8@1+ (2,0) [0|508] "V" Vector__XXX + SG_ LB_USABLE_SOC : 0|7@0+ (1,0) [0|100] "%" Vector__XXX + SG_ LB_VOL_LATCH : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LB_ND4INTTRG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_CURRENT_10 : 0|10@0- (0.5,0) [-250|150] "A" Vector__XXX + SG_ LB_POUT : 0|6@1+ (1,0) [0|60] "kW" Vector__XXX + SG_ LB_PIN : 0|6@1+ (1,0) [0|27] "kW" Vector__XXX + SG_ LB_MINVOL : 0|7@1+ (0.5,0) [0|63.5] "V" Vector__XXX + SG_ LB_MAXVOL : 0|7@1+ (0.5,0) [0|63.5] "V" Vector__XXX + SG_ LB_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_FAIL : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_POUT_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_FRLYON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_STATUS : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_FAIL : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_CURRENT : 0|11@0- (0.5,0) [-400|200] "A" Vector__XXX + SG_ LB_INTERLOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_FCHGEND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CRC : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MPR1DB : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ LB_VOLTAGE : 0|10@0+ (0.5,0) [0|450] "V" Vector__XXX + SG_ LB_FRLYON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STCL1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ fCOAST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TTMG1 : 0|12@0- (0.25,0) [-318|320] "Nm" Vector__XXX + SG_ DLIMMG1 : 0|8@0+ (2.5,0) [0|340] "Nm" Vector__XXX + SG_ TTMG : 0|12@0- (2,0) [0|7000] "rpm" Vector__XXX + SG_ TTMG : 0|12@0- (2,0) [0|7000] "rpm" Vector__XXX + SG_ TTMG1 : 0|12@0- (0.25,0) [-254|254] "Nm" Vector__XXX + SG_ TTMG1 : 0|12@0- (0.25,0) [-280|280] "Nm" Vector__XXX + SG_ RLIMMG1 : 0|8@0+ (2.5,-317.5) [-220|290] "Nm" Vector__XXX + SG_ RLIMMG1 : 0|8@0+ (2.5,-317.5) [-200|270] "Nm" Vector__XXX + SG_ RLIMMG1 : 0|8@0+ (-2.5,0) [-275|0] "Nm" Vector__XXX + SG_ RLIMMG1 : 0|8@1+ (2.5,-317.5) [-317.5|320] "Nm" Vector__XXX + SG_ RLIMMG1 : 0|8@0+ (2.5,-317.5) [-317.5|320] "Nm" Vector__XXX + SG_ DLIMMG1 : 0|8@0+ (2.5,-317.5) [-220|290] "Nm" Vector__XXX + SG_ DLIMMG1 : 0|8@0+ (2.5,-317.5) [-200|270] "Nm" Vector__XXX + SG_ DLIMMG1 : 0|8@0+ (2.5,0) [0|275] "Nm" Vector__XXX + SG_ DLIMMG1 : 0|8@0+ (2.5,-317.5) [-317.5|320] "Nm" Vector__XXX + SG_ EGVR_OPERATION : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STOP_PKB_ST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDBRESW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ VCMCANFAULT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ P_LOCK_KEY : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ VCMINHIBIT : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MGCTLMD : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ fEGST_COLD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SDSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ POUT_UP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TNMG : 0|12@0+ (2,0) [0|7000] "rpm" Vector__XXX + SG_ RLYP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VCM_SIFT : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CRC : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ VIBCONTRQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ PWMOFFRQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BTONFN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BONPRRQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BTSTRQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DISCHARGERQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SYSTEMCOMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT_52D : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ OB_ST_OTYP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OB_ST_ODV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OB_ST_CC : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ TEMP_INFO : 0|8@1- (1,0) [-60|120] "degC" Vector__XXX + SG_ fNIT_CAN_LR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fCAN_LR_NG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_LOOK_UP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_LOOK_RIGHT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_LOOK_LEFT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_LOOK_DOWN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fls_CAN_FAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fls_ACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_GYRO_OFFSET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_FAIL_EXAM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_AXIS_ALIGN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAS_DGN1_7 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAS_DGN1_6 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAS_DGN1_5 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAS_DGN1_4 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAS_DGN1_3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAS_DGN1_2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ND4RCDRQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CDMOODEACK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CDMODESTAT : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CRC : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCNTR : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ ASAINH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASAACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DBRKOVRD : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRKLMPOFFRLYD : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TGBKForce : 0|10@0+ (10,0) [0|10220] "N" Vector__XXX + SG_ DCDCVRQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ BBWFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VCMCOMSTAT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRKRBFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RBEXE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RBCOM : 0|10@0+ (2.5,0) [0|2555] "Nm" Vector__XXX + SG_ MSGCOUNT_52E : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ STR_ANGLE_OFFSET : 0|8@1- (0.1,0) [-12.8|12.7] "deg" Vector__XXX + SG_ AMP_RIGHT : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ AMP_LEFT : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ AMP_CENTER : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PRIAC_TEMP_ITM_degF : 0|8@0+ (1,0) [0|254] "degC" Vector__XXX + SG_ PRIAC_TEMP_ITM_degC : 0|8@0+ (0.5,0) [0|127] "degC" Vector__XXX + SG_ PORT_LOCK_ITMSW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ REC_FLAG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_TYP_INFO_CLR : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TEMP_UNIT_SET_QUk : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ GPS_CUR_YEAR : 0|5@0+ (1,2008) [2008|2039] "year" Vector__XXX + SG_ GPS_CUR_MONTH : 0|4@0+ (1,0) [0|12] "month" Vector__XXX + SG_ GPS_CUR_DAY : 0|5@0+ (1,0) [0|31] "day" Vector__XXX + SG_ ChargeTime200V_ITM : 0|11@0+ (1,0) [0|2046] "min" Vector__XXX + SG_ ChargeTime100V_ITM : 0|11@0+ (1,0) [0|2046] "min" Vector__XXX + SG_ CHG_TYP_INFO_CLR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ C_TIME_UPDATE_ITM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GPS_CUR_SEC : 0|6@1+ (1,0) [0|59] "sec" Vector__XXX + SG_ GPS_CUR_MIN : 0|6@0+ (1,0) [0|59] "min" Vector__XXX + SG_ GPS_CUR_H : 0|5@1+ (1,0) [0|23] "hour" Vector__XXX + SG_ GPS_CUR_DAY : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEMP_UNIT_SET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTC_AIR_TEMP : 0|8@0+ (0.5,-20) [-20|107] "degC" Vector__XXX + SG_ HVAC_CODE_HV2 : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ HVAC_CODE_HV1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ HVAC_OP_MODE : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ DEICE_REQ : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ HVAC_MF_REQ : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ PTC_WATER_TEMP : 0|7@0+ (1,-30) [-30|97] "degC" Vector__XXX + SG_ STEER_RLY_ST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SEAT_RLY_ST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HVAC_CODE : 0|6@0+ (1,0) [0|0] "" Vector__XXX + SG_ IDLUP_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ COMP_ON_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EngON_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AW_INV : 0|8@1+ (50,0) [0|5100] "W" Vector__XXX + SG_ C_Down : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INTAKE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BLW_SPD : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ INC_TEMP : 0|8@1+ (0.5,-10) [-10|60] "degC" Vector__XXX + SG_ PRI_AC_TIME : 0|5@1+ (5,0) [0|120] "min" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ EVCOMFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HVAC_RefuseToSleep : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ HiVoLT_PTC_consumption : 0|6@1+ (0.25,0) [0|10] "kw" Vector__XXX + SG_ REMAIN_DIST_OIL : 0|14@0+ (5,0) [0|81910] "km" Vector__XXX + SG_ TAN : 0|8@0+ (1,-50) [-50|204] "degC" Vector__XXX + SG_ CAP_IND_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ENGTQMDF : 0|8@0+ (0.78125,0) [0|198.4375] "%" Vector__XXX + SG_ OBD_M_TEMP_SOAK_COMPLETED : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TWN : 0|8@1+ (1,-40) [-40|214] "degC" Vector__XXX + SG_ MFDTYENG_7bit : 0|7@1+ (1,0) [0|100] "%" Vector__XXX + SG_ MFDTYENG_8bit : 0|8@1+ (0.5,0) [0|100] "%" Vector__XXX + SG_ TIM_FINE : 0|16@0+ (0.3125,0) [0|20480] "mm3" Vector__XXX + SG_ PDCUTREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_OIL_WARNING_LAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_TYPE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_STA : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TWN : 0|8@1+ (1,-50) [-50|205] "deg" Vector__XXX + SG_ CRC : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCNTR : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ EBD_LAMP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EBS_LAMP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VDCPURQC : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ PFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STRBABS : 0|6@1+ (0.1,0) [0|6.2] "MPa" Vector__XXX + SG_ BAS_RQ : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ WHCTRLD : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ RQPRR : 0|8@1+ (0.1,0) [0|25.4] "MPa" Vector__XXX + SG_ RQPRL : 0|8@1+ (0.1,0) [0|25.4] "MPa" Vector__XXX + SG_ RQPFR : 0|8@1+ (0.1,0) [0|25.4] "MPa" Vector__XXX + SG_ RQPFL : 0|8@1+ (0.1,0) [0|25.4] "MPa" Vector__XXX + SG_ BNO : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BLOFFRLYDIAG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCNTR : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ PRDSTENBL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VDCPUSTS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PUFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BASINH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BASACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VDCACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TCSACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABSFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABSACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EBDFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EBDACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ OFST_YAW_RATE : 0|13@0- (0.01,0) [-30|30] "deg/s" Vector__XXX + SG_ OFST_LAT_ACCL : 0|12@0+ (0.001,-2.048) [-2|2] "G" Vector__XXX + SG_ STR_ANGL_VDC : 0|13@0- (0.1,0) [-360|360] "deg" Vector__XXX + SG_ GRAD_YAW : 0|9@0- (0.2,0) [-30|30] "deg/s2" Vector__XXX + SG_ DROVER_TGT_YAWRATE : 0|13@0- (0.01,0) [-30|30] "deg/s" Vector__XXX + SG_ CHKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSG_CNT : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ PRSSR_SENSR_VAL : 0|11@0+ (0.05,0) [0|100] "bar" Vector__XXX + SG_ PBA_STATUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_STATUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LDP_STATUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LDP_ENBL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LDP_ALIVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FCAAS_STATUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FCAAS_ENBL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FCAAS_ALIVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBA_ENBL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBA_ALIVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_ALIVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_ENBL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBFS_NO : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBFS_NC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RELEASE_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ITS_TRGT_YAW_CLKB : 0|14@0- (0.5,0) [-4095.5|4095.5] "Nm" Vector__XXX + SG_ ITS_TRGT_PRSSR_CLKB : 0|11@0+ (0.05,0) [0|100] "bar" Vector__XXX + SG_ DCM_WAKEUP : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ D_REGEMAX_7 : 0|7@0+ (1,0) [0|100] "%" Vector__XXX + SG_ D_MGMAX_7 : 0|7@0+ (1,0) [0|100] "%" Vector__XXX + SG_ D_MTRPOWER_QUk : 0|12@0+ (0.05,-100) [-100|100] "%" Vector__XXX + SG_ D_REGEMAX : 0|8@1+ (1,0) [0|254] "kW" Vector__XXX + SG_ D_MTRPOWER : 0|12@0+ (0.125,-50) [-50|150] "kW" Vector__XXX + SG_ D_MGMAX : 0|8@1+ (1,0) [0|254] "kW" Vector__XXX + SG_ TCSOC_DISP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_TIME_PERMISSION : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOH_DISP : 0|8@0+ (1,0) [0|240] "-" Vector__XXX + SG_ SOC_DISP : 0|8@0+ (1,0) [0|240] "-" Vector__XXX + SG_ CHG_TIME_SW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_OPTION_6KW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHARGE_TIME : 0|11@0+ (1,0) [0|2046] "min" Vector__XXX + SG_ VOLT_INFO_GOM : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BAT_DETERIORATE : 0|7@0+ (1,0) [0|127] "%" Vector__XXX + SG_ TEMP_HIVOLTBATT_DISP : 0|8@0+ (1,0) [0|240] "-" Vector__XXX + SG_ FULL_CAP_SEG : 0|5@0+ (1,0) [0|31] "" Vector__XXX + SG_ REAL_CAP_SEG : 0|5@1+ (1,0) [0|31] "" Vector__XXX + SG_ TCSOC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEMP_HIVOLBATT : 0|7@1+ (1,-40) [-40|86] "degC" Vector__XXX + SG_ D_REALCAPA : 0|10@0+ (80,0) [0|81760] "Wh" Vector__XXX + SG_ ChargeTime200V : 0|11@0+ (1,0) [0|2046] "min" Vector__XXX + SG_ ChargeTime100V : 0|11@0+ (1,0) [0|2046] "min" Vector__XXX + SG_ CHECKSUM5BF : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ MPRUN5BF : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ QCHGPTEMPMAX : 0|5@0+ (4,60) [60|184] "degC" Vector__XXX + SG_ CHGCUR : 0|5@0+ (1,0) [0|20] "A" Vector__XXX + SG_ FCHSSI2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FCHSSI1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PWRDEVTEMPMAX : 0|6@0+ (1,60) [60|120] "degC" Vector__XXX + SG_ CHGSNO : 0|5@0+ (1,0) [0|30] "" Vector__XXX + SG_ CHGVOL : 0|8@0+ (1,260) [0|420] "V" Vector__XXX + SG_ MAXACCURE : 0|8@0+ (0.2,0) [0|40] "A" Vector__XXX + SG_ ACFREQ : 0|8@0+ (0.2,0) [30|80] "Hz" Vector__XXX + SG_ CHGCODE : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ FQRLYCHKFIN2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ QRLYCHKEND2 : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FPCSCONDET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FACTIVTRACK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FQCRELAYSTATUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FNCRELAYSTATUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FQCHGIRSENS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACVOL : 0|9@0+ (0.5,70) [70|270] "V" Vector__XXX + SG_ FQRLYCHKFIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FNRLYCHKFIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FNCHGOK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FCHGSTPREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAXCHGPOUT : 0|9@0+ (0.1,0) [0|50] "kW" Vector__XXX + SG_ READYTOSLP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ QRLYCHKEND : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ NRLYCHKEND : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FQGFCEND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FRESTARTOK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FHCCONDET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FQCRELAYON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACVOLJUDG : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ QCHGVOLSENSINF : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHECKSUM380 : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MPRUN380 : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ CHGPWR : 0|9@0+ (0.1,0) [0|50] "kw" Vector__XXX + SG_ FQCCONDET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NCCONDET : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ LB_HEATSTOPMAIL_REQ_TCU : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LB_HEATSTARTMAIL_REQ_TCU : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_STA_TCU : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MFAN_MAINTE_ALERT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_STA_FOR_MET : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ PORT_LOCK_SW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ OPMIS_INCHG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REFUSE_BUZZER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SBW_WARNINGLAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SBW_WARNING_MSG : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ OutsideTemp_AD : 0|8@1+ (0.5,-40.5) [-40|60] "degC" Vector__XXX + SG_ D_OTH_POWER : 0|5@1+ (0.1,0) [0|3] "kW" Vector__XXX + SG_ D_AC_POWER : 0|6@1+ (0.25,0) [0|15.5] "kW" Vector__XXX + SG_ TIM_MTR : 0|8@1+ (0.2,0) [0|50.8] "Wh" Vector__XXX + SG_ VCM_BLBCHK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIM_OTHER : 0|4@0+ (0.02,0) [0|0.28] "Wh" Vector__XXX + SG_ TIM_AC : 0|5@0+ (0.02,0) [0|0.6] "Wh" Vector__XXX + SG_ SOONCHGSW_RQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_Meter2 : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_Meter1 : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_CAPSEG : 0|8@0+ (1,0) [0|240] "" Vector__XXX + SG_ LB_TEMP_HIVOLTBATT_DISP : 0|8@0+ (0.41666666667,0) [0|100] "%" Vector__XXX + SG_ LB_SOH : 0|7@1+ (1,0) [0|100] "%" Vector__XXX + SG_ LB_FULLCAP : 0|10@0+ (80,20000) [20000|24000] "mh" Vector__XXX + SG_ LB_CAPR : 0|10@0+ (80,0) [0|24000] "mh" Vector__XXX + SG_ LB_RLIMT : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_RCHGTIM : 0|13@0+ (1,0) [0|8190] "min" Vector__XXX + SG_ LB_RCHGTCON : 0|5@0+ (1,0) [0|0] "" Vector__XXX + SG_ LB_CAPSEG : 0|4@1+ (1,0) [0|12] "" Vector__XXX + SG_ LB_CAPSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LB_AVET : 0|8@1+ (1,-40) [-40|105] "degC" Vector__XXX + SG_ LB_BPCUPRATE : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_BPCMAX : 0|10@0+ (0.1,-10) [-10|90] "kw" Vector__XXX + SG_ LB_POUT : 0|10@0+ (0.25,0) [0|254] "kW" Vector__XXX + SG_ LB_PIN_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_PIN : 0|10@0+ (0.25,0) [0|254] "kW" Vector__XXX + SG_ LB_CODECON : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ LB_CODE2 : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ LB_CODE1 : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ MPR1DB : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ CRC : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ CHGTYPE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FVHMGVOL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1_SEQCT : 0|8@0+ (1,0) [0|255] "-" Vector__XXX + SG_ DATABYTE0_HTYVCM : 0|10@0+ (1,0) [0|1023] "-" Vector__XXX + SG_ DDC_VCNTRL : 0|6@0+ (0.1,10) [12.5|15.5] "V" Vector__XXX + SG_ FDDC_INHREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHKQCRLY : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FCHKRLYEN : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ KEEP_SOC_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BPCMAX_VCM : 0|10@0+ (0.1,-10) [-10|50] "kw" Vector__XXX + SG_ TCSOC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NRLYCHK_REFUSE_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FVERRDISP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MPRUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ CHG_STA_RQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FSCHGRLY_ST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HIVOLT_ST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HIVOLT_DISC_FN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_STA : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DCM_PRI_ACON_temp : 0|5@1+ (1,60) [60|91] "degF" Vector__XXX + SG_ DCM_PRI_ACON_temp : 0|5@1+ (1,16) [16|47] "degC" Vector__XXX + SG_ DCM_PRI_ACON_Unit : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DCM_DOOR_UNLOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DCM_DOOR_LOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DCM_WS_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DCM_REFUSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DCM_PRI_ACON : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DCM_CHG_RQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ EstimateGrade : 0|8@0- (0.25,0) [-21|31.5] "%" Vector__XXX + SG_ AT_354_FAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AT_245_FAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_SW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ EGVRHCFL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ EGVRBTOK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CAP_IND_RST_STA : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BTA_MAIL_SEND_OK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ VCM_WakeUpSleepCmd_For_ShBW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ VCMMIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VCM_WakeUpSleepCmd : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ VCM_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CANMASK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STRKSFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STRKSAVV : 0|8@1+ (0.0196,0) [0|4.9784] "V" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TEMP_HIVOLTBATT_LAMP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ Dischg_Stop_Warning : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_SOUND_REQ : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOC_DISP : 0|8@0+ (1,0) [0|100] "" Vector__XXX + SG_ ENGSHTDWN_DISP : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ NOTENGST_WARN : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SHIFT_CAUTION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STOP_PKB_RQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ SLOW_CAUSE : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASSIST_CHARGE : 0|7@1+ (1.5873015873,-100) [-100|100] "%" Vector__XXX + SG_ SOC_DISP : 0|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ ECO_APO : 0|7@1+ (1,0) [0|100] "%" Vector__XXX + SG_ APO_DISP : 0|7@1+ (1,0) [0|100] "%" Vector__XXX + SG_ SLOW_RQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RQ_SHIFTP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ READY_RQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ HILLHOLD_RQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EV_RQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BAT_RQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAUTION_RQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TRGINFO : 0|16@0+ (1,0) [0|0] "" Vector__XXX + SG_ IGNCNT : 0|16@0+ (1,0) [0|65535] "Time" Vector__XXX + SG_ TIMESTAMP : 0|16@0+ (1,0) [0|65535] "ms" Vector__XXX + SG_ LBCDATA : 0|64@0+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ RrACsetting_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ChangeStatus_54E : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Aroma_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HumidtySensorSensitivity_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirQualitySensorSensitivity_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VariableAirFlowCycle_PASS_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VariableAirFlowCycle_DR_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VariableAirFlow_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Uppervent_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ForestSetting_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ForestDisplaySeting_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DUAL_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirFlowBalance_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CabinAirPolutionLevel : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirPurifier_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ _4zone_SOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirFlowBalanceLevel_DR : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirFlowBalanceLevel : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ VariableAirFlowSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VariableAirFlowStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ VariableAirFlowLevel_DR : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ HumidtySensorSensitivity : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ FogStatus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AutoDefrosterStatus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VariableAirFlowExistence : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HumidtySensorExistence : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ForestSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ForestAC_Existence : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ClimateSwitchExistence : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ _4zoneSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AromaSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AromaStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AromaExistence : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirFlowBalanceExistence : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_ONDISP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_ONDISP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_AUTSET : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_OFF_ASIND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_MID_ASIND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_LO_ASIND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_HI_ASIND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_AUTSET : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_OFF_DRIND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_MID_DRIND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_LO_DRIND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_HI_DRIND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AUTO_DRIND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AUTO_ASIND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CAV_CONT_EXISTANCE : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_SW_FB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STATUS_CAV_SW_DISP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_CoolerFAN_existence : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_TempStatus_RR_PASS : 0|8@1+ (0.5,0) [0|127.5] "degC" Vector__XXX + SG_ ChangeStatus_54D : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ _3rdVentSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ _3rdVentStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ UpperVentSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UpperVentStatus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UpperVentAutoSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UpperVentAutoStatus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ B_PLR_VentSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ B_PLR_VentStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_SelfDiagnosing : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_FanSpeedStatus : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ RearAC_AutoSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_AutoStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_AirVentStatus : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_SystemStatus : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ Rear_on_display_status : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Rear_off_Status : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Rear_AC_system_indicator : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_TempUpSW_RrPass : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_TempDownSW_RrPass : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_AirVentSW_RrPass : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HumidtySensorSensitivityDownSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HumidtySensorSensitivityUpSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirFlowBalancePASSp_AdjustSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirFlowBalanceDRp_AdjustSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VariableAirFlowSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VariableAirFlowCycleSlowSW_DR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VariableAirFlowCycleQuickSW_DR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ForestSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AromaSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ _4zoneSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STATUS_OF_PERIOD : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ INITIALIZING_BIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NAVI_DISP_SPEED_LIMIT : 0|8@0+ (1,0) [0|255] "-" Vector__XXX + SG_ Unit_SpeedLimt_Navi : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BLINK_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ fSPEED_LIMIT_CHANGE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ fSPEED_LIMIT_DISP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Voice_talk_flag : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ LINKF_REQ_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Link_Fail_point : 0|5@1+ (1,0) [0|30] "" Vector__XXX + SG_ Link_Fail_count : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ CheckSum_5EA : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ branch_flag : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ STRG_MODE : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ SPORT_MODE_SW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ STANDARD_MODE_SW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_MODE_SW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_MODE_SW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ CUR_STATE_R_8 : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ CUR_STATE_R_5 : 0|5@0+ (1,0) [0|31] "" Vector__XXX + SG_ SUM3F5 : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGC3F5 : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ ACQUIRED_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WARN_R : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_DISABLE_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_CONFIDENCE_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_COND_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALERT_IND_PAT_R : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_MODE_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_IRRAD_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_FAIL_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_INIT_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_BLOCK_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALERT_IND_DRIVE_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALERT_COND_R : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ BEAM_FOV_MODE_R : 0|4@1+ (1,0) [0|7] "" Vector__XXX + SG_ BEAM_FOV_MEAN_R : 0|8@1+ (1,0) [0|70] "" Vector__XXX + SG_ VEL_FOV_R : 0|12@0- (0.1,0) [-100|100] "m/s" Vector__XXX + SG_ CTA_TTC_ALTTC_R : 0|6@0+ (0.125,0) [0|7.875] "sec" Vector__XXX + SG_ SOW_SEN_FUNC_STAT_3F5 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SUM3F4 : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGC3F4 : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ DIST_R7 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_R6 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_R5 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_FOV_R : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ SOW_SEN_FUNC_STAT_3F4 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CTA_FUNC_ACT_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SUM3F3 : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGC3F3 : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ DIST_R4 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_R3 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_R2 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_R1 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ SOW_SEN_FUNC_STAT_3F3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CUR_STATE_L_8 : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ CUR_STATE_L_5 : 0|5@0+ (1,0) [0|31] "" Vector__XXX + SG_ SUM3F2 : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGC3F2 : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ ACQUIRED_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WARN_L : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_MODE_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_IRRAD_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_INIT_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_FAIL_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_DISABLE_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_CONFIDENCE_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_COND_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOW_SEN_BLOCK_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALERT_IND_PAT_L : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALERT_IND_DRIVE_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALERT_COND_L : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ BEAM_FOV_MODE_L : 0|4@1+ (1,0) [0|7] "" Vector__XXX + SG_ BEAM_FOV_MEAN_L : 0|8@1+ (1,0) [0|70] "" Vector__XXX + SG_ VEL_FOV_L : 0|12@0- (0.1,0) [-100|100] "m/s" Vector__XXX + SG_ CTA_TTC_ALTTC_L : 0|6@0+ (0.125,0) [0|7.875] "sec" Vector__XXX + SG_ SOW_SEN_FUNC_STAT_3F2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SUM3F1 : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGC3F1 : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ DIST_L7 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_L6 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_L5 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_FOV_L : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ SOW_SEN_FUNC_STAT_3F1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CTA_FUNC_ACT_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SUM3F0 : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGC3F0 : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ DIST_L4 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_L3 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_L2 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ DIST_L1 : 0|12@0+ (0.01,0) [0|24] "m" Vector__XXX + SG_ SOW_SEN_FUNC_STAT_3F0 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ShBW_ENCODERST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SBW_CANFALSTAT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ShBW_SHIFTLOCK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AutoP_C : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REFUSE_SLEEP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ WATCH_NO : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ShBW_WATCH4 : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ShBW_WATCH3 : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ShBW_WATCH2 : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ShBW_WATCH1 : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DsREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CUR_RNG : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ SBW_FALSTATT : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ REFUSE_BUZZER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SBW_WARNINGLAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SBW_WARNING_MSG : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ CRC_CODE : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PRUN : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TGT_RNG : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ TENG2 : 0|8@1+ (2,-100) [-100|410] "Nm" Vector__XXX + SG_ MIN_TORQUE : 0|8@1+ (2,-100) [-100|410] "Nm" Vector__XXX + SG_ KDACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ErgonomicPedal_ATAPOST : 0|8@1+ (1,0) [0|253] "%" Vector__XXX + SG_ ASCDON : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ WSPFR : 0|7@0+ (1,0) [0|96] "top" Vector__XXX + SG_ WSPRR : 0|7@0+ (1,0) [0|96] "top" Vector__XXX + SG_ WSPRL : 0|7@0+ (1,0) [0|96] "top" Vector__XXX + SG_ WSPFL : 0|7@0+ (1,0) [0|96] "top" Vector__XXX + SG_ MSGCOUNT : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ WSPRR : 0|4@0+ (1,0) [0|14] "" Vector__XXX + SG_ WSPRL : 0|4@0+ (1,0) [0|14] "" Vector__XXX + SG_ POSITION_LIGHT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NIGHT_LIGHT_MAX : 0|8@1+ (0.4,0) [0|100] "%" Vector__XXX + SG_ DIS_SPEED : 0|16@0+ (0.01,0) [0|655.34] "km/h" Vector__XXX + SG_ DAY_LIGHT_MAX : 0|8@1+ (0.4,0) [0|100] "%" Vector__XXX + SG_ BELT_LAMP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ASSIST_SW : 0|5@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECOPDLSW : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ NAVI_SW_ERR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DAS_SW : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ PT_ERR_flg : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EcoNavi_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EcoMode_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ COP2_SW_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ COP2_ERROR_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHCKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ NICC_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BOOT_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NAVI_ERR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VSP_NAVI : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ vUpdate_Counter : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHCKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ Curve_20 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_19 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_18 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_17 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_16 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_15 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_14 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ CHCKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ vUpdate_Counter : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ Curve_9 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_8 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_7 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_13 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_12 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_11 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_10 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ CHCKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ vUpdate_Counter : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ Curve_6 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_5 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_4 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_3 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_2 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_1 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ Curve_0 : 0|8@1+ (1,0) [0|0] "ãm" Vector__XXX + SG_ AreaCode : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CURVATURE_DIRECTION : 0|5@0+ (1,0) [0|19] "" Vector__XXX + SG_ OWN_LOCATION : 0|5@1+ (1,0) [0|30] "" Vector__XXX + SG_ D_BRANCH_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LINKF_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LINKF_DIST : 0|5@1+ (25,0) [0|500] "m" Vector__XXX + SG_ OUTREADY : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ OUT_DIST : 0|8@1+ (10,-500) [0|1000] "m" Vector__XXX + SG_ vUpdate_Counter : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ GPSPositionSta : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TurningFlag : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MatchingSta : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MatchingResetFlag : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DistTollgate : 0|6@1+ (10,0) [0|630] "m" Vector__XXX + SG_ DistDivergence : 0|6@1+ (10,0) [0|630] "m" Vector__XXX + SG_ CurvatureErrorFlag : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHCKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ RootGuidingFlag : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RootGuideSta : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RoadType : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ LinkType : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ InGuidingRoot : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSS_02 : 0|8@0+ (1,0) [0|254] "bar" Vector__XXX + SG_ MVP_NG : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MVP_COUNT : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ MVP : 0|4@1+ (5,0) [0|75] "kPa" Vector__XXX + SG_ PSS_02 : 0|8@1+ (1,-20) [-20|234] "bar" Vector__XXX + SG_ RQTRQ_02 : 0|12@0+ (1,0) [0|4000] "Nm" Vector__XXX + SG_ REQ_DISP_MET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_EXT_BEEP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND_ZONE : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOUND_DISCON : 0|7@1+ (0.1,0) [0|10] "Hz" Vector__XXX + SG_ SOUND_CONT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STS_VOLUME : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ STS_SYS_MODE : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ STS_DISTANCE : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ STS_DETEC_LV : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ STS_AUTO_DISP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ A_FR_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ A_FR_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ A_RR_R : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ A_RR_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ A_FR_CEN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ A_RR_CEN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_R : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_L : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_CEN : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_R : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_L : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_CEN : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ SONAR_S_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ STS_SETTING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REQ_DISP_CEN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SONAR_D_DISP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ LAMP_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHECK_SUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ FAIL : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ REAR_STEER : 0|16@1- (0.005,0) [-2|2] "deg" Vector__XXX + SG_ FRONT_STEER : 0|16@1- (0.1,0) [-942.5|942.5] "deg" Vector__XXX + SG_ RMT_AC_HVAC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DISCHG_ALARM_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ REMOTE_AC_ANS_BK : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ PROHIBIT_DE_ICE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ VCM_REFUSE : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ AC_RLY_ST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_ECO_MODE_RQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PW_INV : 0|8@1+ (50,0) [0|12750] "W" Vector__XXX + SG_ COMP_ON_permission : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DCDC_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ BTCDOWN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRIAC_HVAC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BOOK_PRI_AC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRIAC_OFF_TIME : 0|5@1+ (5,0) [0|120] "min" Vector__XXX + SG_ RR_DEF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PDPRS : 0|8@1+ (0.02,0) [0|5.1] "Mpa" Vector__XXX + SG_ TEMPEARTUREUNITSETTING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BTONFN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRI_AC_DCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ F_INDOORAIR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ VCM_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ Prohibit_Cranking_HEV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGN_OFF_PERMISSION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EPSSTRQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CANMASK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE7 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE7 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ MOTOR_CURRENT : 0|8@1+ (0.05,0) [0|12.75] "A" Vector__XXX + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ POWER_SUPPLY : 0|8@1+ (0.08,0) [0|20.4] "V" Vector__XXX + SG_ STATUS_FFP : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSG_CNT : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ ANG_AVL_FFP : 0|8@1+ (0.39215686275,0) [0|100] "%" Vector__XXX + SG_ FORCE_FFP_CB : 0|8@1+ (0.2,0) [0|51] "N" Vector__XXX + SG_ FTRG_ACC : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCFAIL1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_FAIL2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INCHING_CONTROL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_AND_INCHING_RANGE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DIRTY_LASER_JPN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DIRTY_LASER_USA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TARGET_CHANGING_BUZZER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer_3rd : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer_2nd : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BST_ACTV_RB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BST_ACTV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_OFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_VAVLE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SET_VSP : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAR_M : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AUTO_BARK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND_BAR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND_KMH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCD_SET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_WARNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DISTWARN : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLS_TRGT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SET_DIST : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ANGLE_FFP : 0|8@1+ (0.39215686275,0) [0|100] "%" Vector__XXX + SG_ ACCEL_POS : 0|8@1+ (0.39215686275,0) [0|100] "%" Vector__XXX + SG_ FUNC_FFP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CANMASK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MONT_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSG_CNT : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ FORCE_FFP : 0|8@1+ (0.2,0) [0|51] "N" Vector__XXX + SG_ FTRG_ACC : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCFAIL1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_FAIL2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INCHING_CONTROL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_AND_INCHING_RANGE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DIRTY_LASER_JPN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DIRTY_LASER_USA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TARGET_CHANGING_BUZZER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer_3rd : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer_2nd : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BST_ACTV_RB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BST_ACTV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_OFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_VAVLE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SET_VSP : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAR_M : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AUTO_BARK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND_BAR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND_KMH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCD_SET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_WARNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DISTWARN : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLS_TRGT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SET_DIST : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OP_BYTE6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OP_BYTE5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OP_BYTE4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OP_BYTE3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OP_BYTE2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OP_BYTE1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MOD_BYTE : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ NUM_VLDT : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OP_BYTE6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OP_BYTE5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OP_BYTE4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OP_BYTE3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OP_BYTE2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PO_BYTE1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MOD_BYTE : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ NUM_VLDT : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ STRCALIB : 0|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ LGND2F47 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F46 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F45 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F44 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F43 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F37 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F36 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F35 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F34 : 0|1@1- (1,0) [0|0] "" Vector__XXX + SG_ LGND2F33 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F32 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F31 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F30 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F27 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F26 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F25 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F24 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F23 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F22 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F21 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F20 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F17 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F16 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F15 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F14 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F13 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F12 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F11 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F10 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ENSTNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECMNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETCNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FCNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CANNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECCSMSG8C : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ DTCCODE : 0|16@1+ (1,0) [0|0] "" Vector__XXX + SG_ C_CODE : 0|16@1+ (1,0) [0|0] "" Vector__XXX + SG_ VIGN : 0|8@1+ (0.12,0) [0|30.6] "V" Vector__XXX + SG_ ABSWL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MTRMON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ARMON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RLOSOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RLISOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RROSOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RRISOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLOSOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLISOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FROSOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FRISOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RLAV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RLEV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RRAV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RREV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLEV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FRAV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FREV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VECU : 0|8@1+ (0.078,0) [0|19.89] "V" Vector__XXX + SG_ PSS : 0|16@1- (1.32,0) [-39.6|297] "bar" Vector__XXX + SG_ LGSS : 0|8@1- (0.19,0) [-24.32|24.13] "deg/sec2" Vector__XXX + SG_ YRSS : 0|8@1- (0.48,0) [-61.44|60.96] "deg/sec" Vector__XXX + SG_ E_VLP_ACT_minus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ E_VLP_ACT_plus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MRACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VRACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SMAVACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PMAVACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SUSVACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PUSVACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RL_AV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RL_EV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_AV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_EV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_AV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_EV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FL_AV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FL_EV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAG_CAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STRLMP_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LIS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PKB_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VDC_OFF_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VWRL : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ VWRR : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ VWFL : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ VWFR : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ SPARE_WHEEL_PRESSURE : 0|8@1+ (13.725,0) [0|3486] "mbar" Vector__XXX + SG_ RL_WHEEL_PRESSURE : 0|8@1+ (13.725,0) [0|3486] "mbar" Vector__XXX + SG_ RR_WHEEL_PRESSURE : 0|8@1+ (13.725,0) [0|3486] "mbar" Vector__XXX + SG_ FR_WHEEL_PRESSURE : 0|8@1+ (13.725,0) [0|3486] "mbar" Vector__XXX + SG_ FL_WHEEL_PRESSURE : 0|8@1+ (13.725,0) [0|3486] "mbar" Vector__XXX + SG_ RR_WHEEL_STA : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RL_WHEEL_STA : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ LEFT_RIGHT_WHEEL_IMBALANCE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ SSPP_LEAKAGE_LAMP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FL_WHEEL_STA : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_WHEEL_STA : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ SSPP_STOP_LAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SSPP_SERVICE_LAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SPEED_PRESSURE_MILSANDPLATION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SSPP_LAMP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LOAD_PRESSUR_MLSADAPLATION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VEHIVLE_PRESSURE_STA : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ CODE4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ CODE3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ CODE2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ CODE1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ LINK : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ D_VSPA : 0|8@1- (0.05,0) [0|12.75] "m/ss" Vector__XXX + SG_ VSPCOM_A : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ VSP_A : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ FTRG_ACC3 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ FTRG_ACC2 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ FTRG_ACC : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DATABYTE7 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DIAG_CODE : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ ESP_VOLT : 0|8@1+ (0.1,0) [0|25.4] "V" Vector__XXX + SG_ LGND2F47 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F46 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F45 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F44 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F43 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F37 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F36 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F35 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F34 : 0|1@1- (1,0) [0|0] "" Vector__XXX + SG_ LGND2F33 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F32 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F31 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F30 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F27 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F26 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F25 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F24 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F23 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F22 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F21 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F20 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F17 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F16 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F15 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F14 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F13 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F12 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F11 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2F10 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2FA7 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2FA6 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2FA5 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2FA4 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2FA3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LGND2FA2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DRIVE_DC : 0|8@1+ (0.1,0) [0|25.5] "V" Vector__XXX + SG_ MOTOR_AC : 0|8@1+ (0.1,0) [0|25.5] "A" Vector__XXX + SG_ ENCODE : 0|16@0+ (1,0) [0|65280] "deg" Vector__XXX + SG_ LG_ACTR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TIRRERCODE : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ D_VSPA : 0|8@1- (0.05,0) [0|12.75] "m/ss" Vector__XXX + SG_ VSPCOM_A : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ VSP_A : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ FTRG_ACC3 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ FTRG_ACC2 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ FTRG_ACC : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ LOSS : 0|8@1- (0.2,0) [-25.6|25.4] "ms2" Vector__XXX + SG_ VECU : 0|8@1+ (0.078,0) [0|19.89] "V" Vector__XXX + SG_ PSS : 0|16@1- (1.32,0) [-39.6|297] "bar" Vector__XXX + SG_ LGSS : 0|8@1- (0.19,0) [-24.32|24.13] "m/s2" Vector__XXX + SG_ YRSS : 0|8@1- (0.54,0) [-69.12|68.58] "deg/sec" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ E_VLP_ACT_MINUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ E_VLP_ACT_PLUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MRACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VRACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SHSVACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PHSVACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SUSVACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PUSVACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RL_AV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RL_EV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_AV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_EV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_AV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_EV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FL_AV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FL_EV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAG_CAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STRLMP_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LIS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PKB_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VWRL : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ VWRR : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ VWFL : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ VWFR : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ C_CODE : 0|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ VIGN : 0|8@1+ (0.12,0) [0|30.6] "V" Vector__XXX + SG_ ABSWL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MTRMON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ARMON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RLOSOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RLISOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RROSOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RRISOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLOSOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLISOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FROSOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FRISOLM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RLAV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RLEV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RRAV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RREV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLEV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FRAV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FREV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TAACTorTAOK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SHINDREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SportModeLamp : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ISBRKREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACSTRK : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBD_MARKER : 0|4@1+ (1,0) [0|10] "" Vector__XXX + SG_ OBD_VALUE : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ ECO_DISP_RQ : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ IDSTREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ISACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ISSAP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ISMSKSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ISINDMD : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ IDSTSTS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHRGLREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBD_WUC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBD_GENERAL_TRIP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBD_ENG_ON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECCSMSG8C : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ DTCCODE : 0|16@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ RESP6 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ RESP5 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ RESP4 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ RESP3 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ RESP2 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ RESP1 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ COMRES : 0|16@0+ (1,0) [0|0] "" Vector__XXX + SG_ PARAM6 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PARAM5 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PARAM4 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PARAM3 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ RARAM2 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PARAM1 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ REQCOM : 0|16@0+ (1,0) [0|0] "" Vector__XXX + SG_ ST_AGL_V : 0|8@1+ (4,0) [0|1016] "deg/s" Vector__XXX + SG_ STRG_AGL : 0|16@0- (0.1,0) [-756|756] "" Vector__XXX + SG_ IBA_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABS_STATE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RH_STATE : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ LH_STATE : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ FLGST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FLGST_WARN : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ RPOS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ VSP_PSB_2nd : 0|16@0+ (0.01,0) [0|655.34] "km/h" Vector__XXX + SG_ BPSR : 0|8@1+ (1,-50) [-50|204] "%" Vector__XXX + SG_ LHRTR : 0|8@1+ (0.1,0) [0|30.6] "A" Vector__XXX + SG_ RHMTR : 0|8@1+ (0.1,0) [0|30.6] "A" Vector__XXX + SG_ OUT2 : 0|8@1+ (0.02,0) [0|5.1] "V" Vector__XXX + SG_ OUT1 : 0|8@1+ (0.02,0) [0|5.1] "V" Vector__XXX + SG_ VSP_PSB_1st : 0|16@1+ (0.1,0) [0|6553.5] "km/h" Vector__XXX + SG_ BCLSWRH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BCLSWLH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGN_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DOOR_SW : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ VER_LKC2 : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCOUNT : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ VER_LKC1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ SETPITCH : 0|16@0- (0.0002,0) [-6.5536|6.5534] "deg" Vector__XXX + SG_ SETYAW : 0|16@0- (0.0002,0) [-6.5536|6.5534] "deg" Vector__XXX + SG_ RN_third : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ RN_second : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ RN_first : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PN_fifth : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PN_fouth : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PN_third : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PN_sencond : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PN_first : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ GIVEIMG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ READYIMG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RESAIM : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ PHENI30 : 0|16@0- (1,0) [-32768|32767] "mm" Vector__XXX + SG_ PHENI20 : 0|16@0- (1,0) [-32768|32767] "mm" Vector__XXX + SG_ PHENI10 : 0|16@0- (1,0) [-32768|32767] "mm" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DATABYTE7 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE7 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE7 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE7 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ Checksum : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ V_POS_IMG : 0|8@1+ (0.1,0) [0|25.5] "m" Vector__XXX + SG_ FLAG_V_POS7 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAG_V_POS6 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAG_V_POS5 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAG_V_POS4 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAG_V_POS3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAG_V_POS2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAG_V_POS1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAG_V_POS0 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LK_VALVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LKLMP1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LKLMP2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LKC_ERR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Message_Counter : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ LKSW_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LKSWSEN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLS_LG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GiveUp3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INSTCAM : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ GiveUp2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ READY_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LK_ACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SYSTEM_FAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GiveUp1_4 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GiveUp1_3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GiveUp1_2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GiveUp1_1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GiveUp : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBD_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_R_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_L_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ EST_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ BCM_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ I_KEY_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ STSYS_TYPE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ESCL_STATUS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ OK_COMMUTE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ USM_DONGEL_COM : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ USM_DONGEL_ID : 0|10@0+ (1,0) [0|1023] "" Vector__XXX + SG_ OIL_P_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HL_WASH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BAT_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGN_CONF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ USM_WAKE_SLEEP_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ USM_REFUSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ VB : 0|8@1+ (0.0625,0) [0|15.875] "v" Vector__XXX + SG_ AC_COMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TAIL_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HL_LOW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HL_HIGH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_FOG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RES_USM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_WIP_PROT : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGN_RLY : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BAT_LOW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STA_RLY : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_WIP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AUTO_S_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_DEF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LR_Y : 0|16@1+ (0.00390625,0) [0|153.5] "m" Vector__XXX + SG_ LR_X : 0|16@1- (0.00390625,0) [-16.2|16.2] "m" Vector__XXX + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ WIPERIMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HVIMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRKIMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RNGIMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSG_COUNT : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ FTRG_ACC2 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCFAIL1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCFAIL2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INCHING_CONTROL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_AND_INCHING_RANGE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DIRTY_LASER_JPN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DIRTY_LASER_USA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_ACTI_MAINBRK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TARGET_CHANGING_BUZZER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer_3rd : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer_2nd : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ERR_ST1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BST_ACTV2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BST_ACTV1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_OFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_VALVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SET_VSP : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ CAR_M : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AUTO_BRK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND_BAR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND_KMH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_FAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCD_SET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_WARNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_ACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DISTWARN : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLS_TRGT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SETDIST : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TCSHANGE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LPUPSIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DECON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TGCHANGE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAGCTACC : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ V_APS_F : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ TURN_IND : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSWA1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSWA2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSWA3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSWA4 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSWA5 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSWA6 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TECMD_S_upper : 0|8@1- (0.4,0) [-819.2|818.8] "Nm" Vector__XXX + SG_ TECMD_M_upper : 0|4@1- (0.4,0) [-819.2|818.8] "Nm" Vector__XXX + SG_ TECMD_S_lower : 0|4@1- (0.4,0) [-819.2|818.8] "Nm" Vector__XXX + SG_ TECMD_M_lower : 0|8@1- (0.4,0) [-819.2|818.8] "Nm" Vector__XXX + SG_ BPFS_NC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BPFS_NO : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDCRU : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ODCANACC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_FAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AUTOSTOP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAIN_SWA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CLUSTER_DISP : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ BATTERY_LOW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRIP_SCROLLING_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ HEATER_F : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DTRL_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REV_SW : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CARD_KEY_NUM : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_TEMP : 0|8@1+ (1,-40) [-40|214] "deg" Vector__XXX + SG_ EX_TEMP : 0|8@1+ (1,-40) [-40|214] "deg" Vector__XXX + SG_ AUTOMATIC_WIPING_MAL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_DEF_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BUZZ_REQ : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRAILER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STEERING_LOCK : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ DOOR_LOOK : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_FOG_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WIP_MAL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TYRE_PRE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGN_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FR_FOG_L_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DOOR_SW : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ RES_BCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ResetMile : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SpeetSetSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SpeedSet : 0|5@1+ (10,0) [0|300] "km/h" Vector__XXX + SG_ AFSIND : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ POWER_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHG_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OPS_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Buckle_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PKB_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBDResp_AT : 0|64@1+ (1,0) [0|0] "" Vector__XXX + SG_ CLUSTER_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ CGW_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ USM_WAKEUP_SIGNAL : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_CS : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ G_IV : 0|16@0+ (1,0) [0|12000] "rpm" Vector__XXX + SG_ N_HEATER : 0|8@1+ (25,0) [0|6375] "rpm" Vector__XXX + SG_ G_EON1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NUP_flag : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_CPON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_AC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_STBR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_WPR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_AIV : 0|8@1+ (2,100) [100|600] "V" Vector__XXX + SG_ G_AI : 0|8@1+ (1,0) [0|255] "deg" Vector__XXX + SG_ G_MI : 0|8@1+ (0.1,0) [0|25.5] "A" Vector__XXX + SG_ G_AW : 0|8@1+ (50,0) [0|12750] "W" Vector__XXX + SG_ G_AM : 0|16@0+ (1,0) [0|12000] "rpm" Vector__XXX + SG_ EPS_DONGLE_COM : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ EPS_DONGLE_ID : 0|10@0+ (1,0) [0|0] "" Vector__XXX + SG_ INDEXEPS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EPSFAIL : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RESETEPS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SLIP_INFO_RR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SLIP_INFO_RL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SLIP_INFO_FR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SLIP_INFO_FL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABS_DONGLE_COM : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABS_DONGLE_ID : 0|10@0+ (1,0) [0|1023] "" Vector__XXX + SG_ HSA_STATUS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ EHS_STA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ I_BLW_F : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ B_TM : 0|16@0+ (1,0.005) [0|319] "V" Vector__XXX + SG_ AIR_2 : 0|8@0+ (0.08,0) [0|20] "bar" Vector__XXX + SG_ AIR_1 : 0|8@0+ (0.08,0) [0|20] "bar" Vector__XXX + SG_ OUTSIDE_TEMP : 0|7@1+ (1,-30) [-30|55] "degC" Vector__XXX + SG_ ILL_PWN : 0|8@1+ (0.4,20) [20|100] "%" Vector__XXX + SG_ SLOPE_RL : 0|5@0+ (5,-40) [-40|40] "deg" Vector__XXX + SG_ SLOPE_FR : 0|5@0+ (5,-40) [-40|40] "deg" Vector__XXX + SG_ CORRECT_DEV : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ COMP_CAL_STA : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ BAROMETER : 0|9@0+ (1,650) [650|1050] "hpa" Vector__XXX + SG_ ALTIMETER : 0|9@0+ (10,-500) [-500|4000] "m" Vector__XXX + SG_ COMPASS : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ _4WD_Existence : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ vUpdate_Counter6 : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ Curv_9_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_8_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_7_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_6_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_5_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_4_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_3_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_2_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_20_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_1_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_19_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_18_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_17_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_16_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_15_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_14_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_13_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_12_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_11_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_10_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Curv_0_Direction : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Unit_SpeedLimt_Next : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Next_RoadType : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ AnotherRoad_Matching : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ GPS_ERR : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Unit_SpeedLimt : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ Dist_SpeedLimit_Sign : 0|6@0+ (10,0) [0|620] "m" Vector__XXX + SG_ SpeedLimit_Sign_Sts : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ Next_SpeedLimit : 0|8@0+ (1,0) [0|254] "-" Vector__XXX + SG_ Current_SpeedLimit : 0|8@0+ (1,0) [0|254] "-" Vector__XXX + SG_ MTSRC_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DriverDoor : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ MUTE_RADIO_ORDER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FULE_LEVEL : 0|7@1+ (1,0) [0|80] "l" Vector__XXX + SG_ SNOW_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAMP_AUTOCHECK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DOOR_SW : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ VEHICLE_TYPE : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ CLUSTER_WAKE_SLEEP_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LPG_LOW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIRBG_LAMP_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIRBAG_LAMPOFF_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIRBAG_LAMP_OPE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIRBAG_LAMPOFF_OPE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BAC_SW_or_MTSR_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DIS_TOTAL : 0|24@0+ (1,0) [0|999999] "km or mile" Vector__XXX + SG_ CLUSTER_REFUSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FULE_LOW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RES_METER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRAKE_SYSTEM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HAND_BRAKE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FGUAG_DIAG : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_DG37 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_DG36 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_DG26 : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_DG24 : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_DG23 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_DG22 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_DG20 : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_DG16 : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_DG14 : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_DG11 : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_DG10 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ E_SUS_MODE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ E_SUS_FAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DL_BUZ_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHECK_SUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ SOL_MNTR : 0|8@1+ (47.4,0) [0|12087] "mA" Vector__XXX + SG_ DL_APPROVAL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DL_P_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DL_RELAY : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WRR : 0|16@0+ (0.041667,0) [0|2730.62] "rpm" Vector__XXX + SG_ DL_OPERATING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DL_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DL_INDICATOR : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DL_FAIL : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ METER_P_FAULT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INHIBITION_WARNING : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ IMMOBI_WARNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRAKE_PEDAL_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PKB_FAIL_IND : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ EPKB_STATUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EPKB_REFUSE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRAKING_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ APB_WARNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ APB_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PKB_IND : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ IG_OFF_DELAY_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ GSINXTGP : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAP_IND_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ NVSFTMEN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECOPSTCB : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECOPMENU : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECOPADF : 0|5@1+ (0.5,0) [0|15.5] "N" Vector__XXX + SG_ ECOMENU : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECOIND : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_OIL_TEMP : 0|8@1+ (1,-50) [-50|205] "degC" Vector__XXX + SG_ MessageCounterMV : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ MastervacPre : 0|5@1+ (3,0) [0|90] "kPa" Vector__XXX + SG_ ENG_OIL_WARNING_LAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_OIL_PRESSURE : 0|8@1+ (0.003847,-0.098) [-0.098|0.879] "MPa" Vector__XXX + SG_ SMAPREQ_hea : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ SMAPREQ_emi : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_TYPE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIM_FINE : 0|16@0+ (0.3125,0) [0|20480] "mm3" Vector__XXX + SG_ PBD_WAKE_SLEEP_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBD_REFUSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBD_HAZ_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_R_WUS_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_R_UL_FOBSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_R_UL_DRSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_R_REF_SLP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_R_ONE_UL_TSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_R_CDL_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_R_ALL_UL_TSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_L_WUS_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_L_UL_FOBSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_L_UL_DRSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_L_REF_SLP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_L_ONE_UL_TSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_L_CDL_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PSD_L_ALL_UL_TSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_FRRE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_SBLW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_BLON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_TRB : 0|8@1+ (0.25,-6.5) [-6.5|57.25] "deg" Vector__XXX + SG_ AT_Minimum_IdleSpeedRequest : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_Eco_Selected_Mode : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_Snow_Selected_mode : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_Impulsive_Selected_Mode : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GearShiftRefused : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ResetInfo_AT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BrakePedalRequest : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Underdrive : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_Warning : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_PositionDisplay : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ Robotized_gear_TRANS_PUMP_STATE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_ProgSelect : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_Faults_States : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ TransmRangeEngaged_copy : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ ADA1_PERMIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEMPSEN : 0|8@1+ (1,-40) [-40|215] "deg" Vector__XXX + SG_ OBD_AT_TEMP_DIAG_COMPLETED : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ IDLEUPRQBYHT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ISHRDREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GSENVAL : 0|10@0+ (0.0037,-1.8907) [-1.5022|1.4985] "G" Vector__XXX + SG_ INDPRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TMISFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ISRESTD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IDSTSTBYI : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IDSTSTBY : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBD_MILREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBDDATA : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OBDMARK : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TEMPSEN : 0|8@1+ (1,0) [0|255] "COUNT" Vector__XXX + SG_ NTIM : 0|8@1+ (80,0) [0|20400] "mm3" Vector__XXX + SG_ PDCUTREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ELAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DIWA_FILTER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PFILTER_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TWN_REG : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ DT_TWN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SPDBLREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDON_DISP : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_OSCO : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIMTYPE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_STA : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ SPDREQ : 0|8@0+ (1,0) [0|253] "km/h or mile/h" Vector__XXX + SG_ CANMASK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LED : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ WTENP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_LAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECFL1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECFL2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RINF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ISCREQ : 0|8@1+ (8,0) [0|2032] "Tr/min" Vector__XXX + SG_ TIM : 0|8@1+ (80,0) [0|20400] "mm3" Vector__XXX + SG_ TWN : 0|8@1+ (1,-40) [-40|214] "degC" Vector__XXX + SG_ ART_KONF : 0|6@1- (1,0) [-32|63] "deg" Vector__XXX + SG_ HVAC_SMAPREQ_hea : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECV_duty : 0|7@0+ (1,0) [0|100] "%" Vector__XXX + SG_ ISOKAC : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ COMPSTR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ COMPDST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACSTRKRE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ IdleUpRequest : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ BFNVLT : 0|5@1+ (0.5,0) [0|15.5] "V" Vector__XXX + SG_ OutsideTemp_AD : 0|8@1+ (0.5,-40.5) [-40|60] "degC" Vector__XXX + SG_ UpperVentStatus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UpperVentAutoStatus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UpperVentSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UpperVentAutoSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ _3rdVentStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ _3rdVentSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ChangeStatus_54C : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_FanSpeedStatus : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ RearAC_SelfDiagnosing : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ B_PLR_VentStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ B_PLR_VentSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_AutoStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_AutoSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_AirVentStatus : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTC_IdleUpRequest : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_SystemStatus : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ Rear_off_Status : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Rear_AC_system_indicator : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ Rear_on_display_status : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_request : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FanOn_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearDef_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTC_Consumption : 0|5@1+ (100,0) [0|3000] "wattts" Vector__XXX + SG_ TargetEvaTemp : 0|8@1+ (0.333,-30) [-30|55] "degC" Vector__XXX + SG_ EvaTemp : 0|8@1+ (0.333,-30) [-30|55] "degC" Vector__XXX + SG_ STA_ST_HEAT_AUTO : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ST_HEAT_AUTO_EXT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_IND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_EXIST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_EXIST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ST_HEAT_SWIND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ST_HEAT_EXIST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STA_IDLSTP_HVAC : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_IND : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ IDLSTP_HVAC_EXST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STATUS_OF_EV_HEATER : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ EV_HEATER_EXIST : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECON_Status : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAirVentStatus : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAirVent_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Minus_sign_outside_temp : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_SelfDiagnosing : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ChangeStatus_54B : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirQualitySensorSensitivityStatu : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ PollutionLevel : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECON_SW_IND : 0|1@1+ (1,0) [0|15] "" Vector__XXX + SG_ RearAirPurifierStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAirPurifier_IND : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ Status_of_plasma_cluster : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PlasmaCluster_IND : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ IntakeAutoSW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FanSpeedStatus : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ FanAutoStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FrontAirPurifierStatus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Def_SW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DualStatus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Dual_SW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FRE_Status : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REC_Status : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IntakeAutoStatus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FRE_SW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REC_SW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AutoStatus_Pass : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirVentStatus_Dr : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ AirVentStatus_Pass : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_SystemStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_SW_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Status_of_AC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AutoStatus_Dr : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AutoSW_IND_Dr : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AutoSW_IND_Pass : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UpperVentExist : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ B_PLR_vent_exist : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ _3rd_vent_exist : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FrontAirPurifierExist : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAirPurifierExist : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TempSW_LongPushOperation : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FanSW_LongPushOperation : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Status_of_off : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Plasuma_gene : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OutsideTemp : 0|8@1+ (1,-40) [-40|215] "degC or degF" Vector__XXX + SG_ Rear_PTC : 0|8@1+ (0.5,0) [0|127.5] "degC" Vector__XXX + SG_ Passenger_PTC : 0|8@1+ (0.5,0) [0|127.5] "degC" Vector__XXX + SG_ Dr_PTC : 0|8@1+ (0.5,0) [0|127.5] "degC" Vector__XXX + SG_ Air_quality_sensor_exist : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Max_level_of_air_quality_sensor : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TempUnit : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ OldAndNewMessage : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ChangeStatus_54A : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Max_level_of_fan_speed : 0|4@1+ (1,0) [0|15] "SPEED" Vector__XXX + SG_ Max_level_of_rear_ac_fan_Speed : 0|4@1+ (1,0) [0|15] "SPEED" Vector__XXX + SG_ Econ_exist : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Dual_exist : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAirVent_ExistAndType : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_ExistAndType : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ Plasma_cluster_exist : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Max_min_PTC_range : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTC_range : 0|7@1+ (1,0) [0|127] "degC or degF" Vector__XXX + SG_ CORRECT_DEV_STA : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ COMP_CAL : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ EcoAC_SW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_DirectSetting : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_VentDirectSetting : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrVentDirectSetting : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ STATUS_OF_PERIOD : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ RrAC_TempDirectSetting : 0|8@1+ (0.5,0) [0|127.5] "degC" Vector__XXX + SG_ RearAcFanSpeedDirectSetting : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_FanSpeedDirectSetting : 0|4@0+ (1,0) [0|15] "SPEED" Vector__XXX + SG_ AirQualitySensDirectSetting : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIRVENTDIRECTSETTING_DR : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIRVENTDIRECTSETTING_PASS : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ CompressorDirectSetting : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TempDirectSetting_Pass : 0|8@1+ (0.5,0) [0|127.5] "degC" Vector__XXX + SG_ TempDirectSetting_Dr : 0|8@1+ (0.5,0) [0|127.5] "degC" Vector__XXX + SG_ INITIALIZING_BIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FanSpeedDirectSetting : 0|4@1+ (1,0) [0|15] "SPEED" Vector__XXX + SG_ IntakeDirectSetting : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TemperatureUnitSetting : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirQualitySensUpSW_SWfre : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirQualitySensDownSW_SWrec : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_SelfDiagStartSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_SelfDiagStartSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FailSafeStartSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STATUS_OF_PREIOD : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ B_PLR_VentOnOffSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ B_PLRand3rdVentSameOnOffSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ B_PLRand3rdVentOffSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ B_PLRand3rdVentOnOffSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VentOnOffSW_3rd : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PlasmaClusterModeSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAirPurifierUpSW_or_FRSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAirPurifierDownSW_or_RearSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_FanSpeedSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_FanSpeedUpSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_FanSpeedDownSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAirVentSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_VentSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_VentDownSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_OffSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_TempUpSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_TempDownSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RcAC_AutoSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AUTOSWITCH_DR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AUTOSWITCH_PASS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FanSpeedSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FanSpeedUpSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FanSpeedDownSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FanSpeedDownSW_LongPush : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEMPUPSWITCH_DR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TempDownSW_Dr : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TempUpSW_PASS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEMPDOWNSWITCH_PASS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DUALSWITCH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ COMPRESSORSWITCH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECONOMYSWITCH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_OffSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrDefSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VoiceRecognitionExeuting : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IntakeSwitch : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IntakeSW_LongPush : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FRE_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FRE_SW_LongPush : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REC_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REC_SW_LongPush : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INITIALIZING_BIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UpperVentAutoSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UpperVentOpenCloseSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIRVENTSWITCH_DR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIRVENTSWITCH_PASS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIRVENTDOWNSWITCH_DR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIRVENTDOWNSWITCH_PASS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DEFROSTERSWITCH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_HEAT_AUTO_SET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ IDLSTP_HVAC_SW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_SWLONG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_SW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_OFFSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_MIDSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_LOSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_HISW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_AUTUP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_AUTOSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_DR_AUTDN : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_SWLONG : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_SW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_OFFSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_MIDSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_LOSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_HISW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_AUTUP : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_AUTOSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ S_HEAT_AS_AUTDN : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ST_HEATER_SW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ EV_HEATER_SW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TemperatureSwLongPush : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FanSpeedSwLongPush : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_TempSwLongPush : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RearAC_FanSpeedSwLongPush : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STATUS_OF_PERIOD : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ RrAC_OperationType : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_TempOpeTyp : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_VentOperationType : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrVentOperationType : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAC_FanSpeedOperationType : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RrAirPurifierOperationType : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OffSwType : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FanSpeedOperationType : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CompressorOperationType : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IntakeOperationType : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AirQualitySensOperationType : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INITIALISING_BIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TempOperationType_Dr : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TempOperationType_Pass : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ VentOperationType_Dr : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VentOperationType_Pass : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REG_PWR : 0|8@1+ (0.25,0) [0|63.5] "kw" Vector__XXX + SG_ E_FLOW5 : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ E_FLOW6 : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ AWD_FLAG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ E_FLOW3 : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ E_FLOW4 : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIRE_ROT : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ E_FLOW1 : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ E_FLOW2 : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGN_OFF_PERMISSION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ CHKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ G_SPRS : 0|16@0+ (0.01,0) [0|655.3] "km/h" Vector__XXX + SG_ G_INL : 0|8@1+ (50,0) [0|12750] "W" Vector__XXX + SG_ BTCDOWN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IDH : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_AWP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_AINV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_STBO : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_STBS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AFSACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AFSFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OB_VREL : 0|16@1- (0.1,0) [-200|600] "m/s" Vector__XXX + SG_ OB_ABST_U : 0|8@1+ (0.1,0) [0|150] "m" Vector__XXX + SG_ OB_ABST_L : 0|3@1+ (0.1,0) [0|150] "m" Vector__XXX + SG_ OB_ST_CC : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ OB_ST_OTYP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OB_ST_ODV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEMP_INFO : 0|8@1- (1,0) [-60|120] "degC" Vector__XXX + SG_ fLS_LOOK_RIGHT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_LOOK_LEFT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_LOOK_DOWN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_LOOK_UP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_FAIL_EXAM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLA_ACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_AXIS_ALIGN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLS_GYRO_OFFSET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fNIT_CAN_LR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fCAN_LR_NG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAS_DGN1_6 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAS_DGN1_2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAS_DGN1_3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAS_DGN1_4 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LAS_DGN1_5 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_flag_truuble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Pressure_trouble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Power_supply2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Power_supply1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAN_trouble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ booster_truoble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Release_sw_trouble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ pressure_sen_trouble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BCU_trouble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ solenoid_voltage : 0|8@1+ (0.07343,0) [0|18.72465] "V" Vector__XXX + SG_ PWN_ratio : 0|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ solenoid_current : 0|8@1+ (15.5,0) [0|3952.5] "mA" Vector__XXX + SG_ third_ND2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ second_ND2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ first_ND2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TAIL_L_REQ_DOP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HL_LOW_REQ_DOP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HAZARD_REQ_DOP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EST_RR_DEF_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DATA1_EST : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DATA0_EST : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ COMM2_EST : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ COMM1_EST : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ LOCK_UNLOK_REQ_DOP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DATA1_BCM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DATA0_BCM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ COMM2_BCM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ COMM1_BCM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DATA1_ECM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DATA0_ECM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ SID_ECM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ FMT_ECM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ LOCK_REQ : 0|48@1+ (1,0) [0|0] "" Vector__XXX + SG_ SL_REQ : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSG_CNT : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ CENTER : 0|8@1+ (1,0) [0|150] "m" Vector__XXX + SG_ CUTIN_L : 0|8@1+ (1,0) [0|150] "m" Vector__XXX + SG_ CUTIN_R : 0|8@1+ (1,0) [0|150] "m" Vector__XXX + SG_ SUPPORT_L : 0|8@1+ (1,0) [0|150] "m" Vector__XXX + SG_ SUPPORT_R : 0|8@1+ (1,0) [0|150] "m" Vector__XXX + SG_ YRSS : 0|16@1- (0.05,0) [-15|15] "deg/s" Vector__XXX + SG_ MSG_CNT : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ CURV : 0|16@1- (0.0001,0) [-0.2|0.2] "1/m" Vector__XXX + SG_ RAD_ST2 : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RAD_ST3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RAD_ST4 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Z_VRES : 0|16@1- (0.1,0) [-20|60] "m/s" Vector__XXX + SG_ Z_ABST : 0|16@1+ (0.1,0) [0|150] "m" Vector__XXX + SG_ SoftwareLockValue : 0|32@0+ (1,0) [0|4278190080] "" Vector__XXX + SG_ SLockValueControl : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ OFBD_DT7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OFBD_DT6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OFBD_DT5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OFBD_DT4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OFBD_DT3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OFBD_DT2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OFBD_DT1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ECM_NUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OFBD_DG2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OFBD_DG1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ECU_NUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ RN_third : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ RN_second : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ RN_first : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PN_fifth : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PN_fouth : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PN_third : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PN_second : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PN_first : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ GLW_RY_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HEATUP_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IDLE_UP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTC_POW_CONS : 0|5@1+ (100,0) [0|3000] "W" Vector__XXX + SG_ NAVISHIFTINDREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TOWMODEREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Eco_Navi_Status : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Eco_mode_Status : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GS_REFUSE_BZ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENGINE_START_INHIBIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_MODE_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_MODE_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OPEN_DOOR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ROBOTIZED_GTP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RGB_PBP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RGB_GP_REFUSE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ RESET_INF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TM_TYPE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND_RNG : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATLAMP_INDSSIG_CVTLAMPSIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATHITEMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ODCLAMP_INDSSIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RL_TGS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ RR_TGS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FL_TGS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ FR_TGS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ QDTZ_RL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ QDTZ_RR : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ QDTZ_FL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ QDTZ_FR : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TPMS_HAZARD_ON : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRESS_REAR : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRESS_FRONT : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ W_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TPMS_POSI_SYNC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REG_STATUS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TPD_RL_05 : 0|8@1+ (0.5,0) [0|127.5] "PSI" Vector__XXX + SG_ TPD_RR_05 : 0|8@1+ (0.5,0) [0|127.5] "PSI" Vector__XXX + SG_ TPD_FL_05 : 0|8@1+ (0.5,0) [0|127.5] "PSI" Vector__XXX + SG_ TPD_FR_05 : 0|8@1+ (0.5,0) [0|127.5] "PSI" Vector__XXX + SG_ P_level_RR : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ P_level_RL : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ P_level_FR : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ P_level_FL : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ TPMS_HORN_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TPMS_HAZARD_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TPMS_BZ_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SYSTEM_FAIL_TPMS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HAZARD_REQ_TPMS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TS_FR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TS_FL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TS_RR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TS_RL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TPD_RL : 0|8@1+ (0.25,0) [0|63.75] "PSI" Vector__XXX + SG_ TPD_RR : 0|8@1+ (0.25,0) [0|63.75] "PSI" Vector__XXX + SG_ TPD_FL : 0|8@1+ (0.25,0) [0|63.75] "PSI" Vector__XXX + SG_ TPD_FR : 0|8@1+ (0.25,0) [0|63.75] "PSI" Vector__XXX + SG_ FT_FR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FT_FL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FT_RR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FT_RL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LTP_FR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LTP_FL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LTP_RR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LTP_RL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIRE_FAIL_or_W_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ D_STYLE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENGINE_STOP : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ REMOTE_AC_REQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PORT_OPEN_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CUTOFF_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENGINE_STOP : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ IMMOBILIZER_FAILURE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CRANKING_AUTHORIZATION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CLIMATE_COOLING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HARD_TOP_POSITION : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ KEYLESS_PUSH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ KEY_KEYLESS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CANMASK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRAKE_PAD : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CUSTOMER_IDDLE_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHILDPROOF_LOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DAY_NIGHT_INF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_POW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VHICLE_RUNNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CLUTCH_SW_MAX_TRAVEL : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DELIVERY_INF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BLOWER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HL_WASH_SELECTION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BCM_DONGLE_COM : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ EL_POW_DRI : 0|5@1+ (100,0) [0|3000] "watts" Vector__XXX + SG_ BCM_DONGLE_ID2 : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ HL_WASH_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BCM_DONGLE_ID1 : 0|6@1+ (1,0) [0|63] "" Vector__XXX + SG_ BCM_WAKE_SLEEP_COM : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGN_STATER : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ IDLE_UP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALS_ACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALS_FAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_DEF_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_COMP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RISE_UP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TURN_SW : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ H_POSITION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INHI_N_SW : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ BCM_SMT_ID_INF : 0|16@0+ (1,0) [0|255] "" Vector__XXX + SG_ S_SECODE_CLEAR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SMART_SEC_OK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHALENGE_STAND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RESPONSE_SMART : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAL_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REG_INF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DR_AND_OTHER_DOORLOCK_INF : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TPMS_W_L_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RIGHT_PSD_MOVE_REVERSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ LEFT_PSD_MOVE_REVERSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALARM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RAP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ANTI_HIJACK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ KEYLESS_DR_DOOR_UNLOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GLASS_HATCH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OIL_P_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DR_DOOR_ACTR_INF : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ OTHER_DOOR_ACTR_INF : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ OPERATION_ACTR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_TYPE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTC_RLY : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRUNK_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CLUSTER_ILL_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BLOWER_FAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABD_MOVE_REVERSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ BACK_DOOR_LOCK_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TPMS_RFWL_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ANTI_HORN_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HORN_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CORN_L_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ KEY_NO : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ KeyinSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VSP_REV_BUZZER : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TSOC_MET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STAT_CHG_REQ : 0|6@1+ (1,0) [0|0] "" Vector__XXX + SG_ OIL_CHANGE_RESET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VS_DISP : 0|16@0+ (0.01,0) [0|655.34] "km/h" Vector__XXX + SG_ MARKET : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ EX_TEMP : 0|8@1+ (1,-40) [0|204] "degC" Vector__XXX + SG_ VSPID : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ Disp_Unit : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ICCExistance : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ZKON1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ZOKU1 : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ VSP40_MET : 0|16@0+ (0.01,0) [0|655.34] "km/h" Vector__XXX + SG_ ISBRK_STB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WLOCK_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HDC_LAMP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ EBS_LAMP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AUTO_CHECK_LMP : 0|1@1+ (1,0) [0|3] "" Vector__XXX + SG_ VSU_PRESENCE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABSFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STPLMSW : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ WARNING_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FILL_STA : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ EBDACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ VSU_LAMP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCNTRR : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ VDC_LAMP : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABS_LAMP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ EBD_LAMP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RESETABS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VSO : 0|16@0+ (0.01,0) [0|655.3] "km/h" Vector__XXX + SG_ KEY_WARNING_BUZZER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WARNING_REQ_PIC : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ RING_ILLUMI_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LOCK_UNLOCK_REQ : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ AHL_IND_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_STP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Warning_Request_picture : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ REMORT_ENGST_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ REMORT_ENGST_REG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CLUSTER_IND_LAMP_REQ : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_ST_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SUPER_LOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EXTERNAL_RELAY_STATE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ANSWER_BACK_SPEED : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PERMIT_CRANKING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PUSH_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HAZARD_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ HORN_CHIRP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALARM_RESET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BACK_DOOR_OPEN_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHALLENGE_STANDBY : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WARNING_REQ : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ LEFT_PSD_MOVE_REVERSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBD_OPEN_CLOSE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RIGHT_PSD_MOVE_REVERSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHANGE_ANSWER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PANIC_ALARM_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_WDW_DOWN_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SMT_BCM_ID_INF : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ CHALLENGE_BCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ANTI_HIJACK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ID_INFO : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RESPONSE_TO_BCM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CALLENGE_FOR_SEC_CLEAR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SUPER_LOCK__RELEASE_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALL_DOOR_UNLOCK_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IKEY_WAKE_SLEEP_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ IKEY_REFUSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBD_MOVE_REVERSE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AHL_HL_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_Cutinfo : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ No_INFOR : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGNON_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STARTER_CONT_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INTERLOCK_NPSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INHIBIT_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ESCL_RELAY_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IMMOBI_OK_FLAG_or_ESCL_STAUS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGNOFF_NOTIFICATION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Auto_Door_Lock : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ KEY_WARNING_BUZZER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ESCL_STATUS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ STOP_Indicator : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SERVICE_Indicator : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRAKE_picture : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WARNING_REQ_PIC : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ WARNING_REQ_IND : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ WARNING_REQ_BUZZER2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ WARNING_REQ_BUZZER1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RING_ILLUMI_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LOCK_UNLOK_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DATA1_SBCM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DATA0_SBCM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ SID_SBCM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ FMT_SBCM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TURN_IND : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ WAKEUP_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ S_SLEEP_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ KEYFOB_BATT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DOOR_SW : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ RR_DEF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TAIL_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHILD_LOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_flag_truoble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Pressure_trouble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Power_supply2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Power_supply1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAN_trouble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ booster_yrouble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Release_sw_trouble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Release_sen_trouble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BCU_trouble : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ solenoid_voltage : 0|8@1+ (0.07343,0) [0|17.7246] "V" Vector__XXX + SG_ PWM_ratio : 0|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ solenoid_current : 0|8@1+ (15.5,0) [0|3952.5] "mA" Vector__XXX + SG_ third_ND2 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ second_ND2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ first_ND2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ EPSTQONT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ISS_INHIBIT_EPS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ EPSTQON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BATTERY_CURRENT : 0|8@1+ (1,0) [0|254] "A" Vector__XXX + SG_ TOWMODE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ B_Circuit_ST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SportMode_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRANS_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TPMS_RST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Eco_mode_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DTE : 0|16@0+ (0.1,0) [0|6553.4] "km" Vector__XXX + SG_ AVE_ECO : 0|12@0+ (0.1,0) [0|99.9] "km/l" Vector__XXX + SG_ EconomyOffset : 0|6@1+ (1,-32) [-32|31] "%" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ SYNCMODE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RNGSW1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ODOFFSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGN_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRAKESW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ POWSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCD4SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDCSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RENSWN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RENSWP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STRDWNSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STRUPSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DOWNSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UPSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NOTMRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ABSVDC_ABSENT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MO_FL : 0|8@1+ (0.11,0) [0|25.5] "km/h" Vector__XXX + SG_ AVE_FL : 0|8@1+ (0.1,0) [0|25.5] "km/l" Vector__XXX + SG_ VSP : 0|16@1+ (0.1,0) [0|6553.5] "km/h" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ NAVING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ZKREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ZKON1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ZOKU1 : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RD_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RD_Detect_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FGAUGE : 0|16@1+ (1,0) [0|1022] "" Vector__XXX + SG_ MARKET : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ L_4WD_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ VSP : 0|16@1+ (0.1,0) [0|6553.5] "km/h" Vector__XXX + SG_ S_REMINDER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ H_LAMP_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MIL_CHECK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ R_DEF_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ H_FAN_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TLED_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HTA_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BATT_SOC : 0|8@1+ (0.390625,0) [0|100] "%" Vector__XXX + SG_ G_RDY : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ T_PWR : 0|12@0+ (0.125,-50) [-50|150] "kw" Vector__XXX + SG_ G_CMH2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_CHAW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_CAU : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_CHMH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_MBLO : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_NDBW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CCSD : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ OIL_P_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EOFF_LAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HICAS_CHECK_SUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ HICASFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HICASMSG_PRUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ HICAS_RAS : 0|16@1- (6.1E-005,0) [-1.999|2] "deg" Vector__XXX + SG_ PBFS_NO : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBFS_NC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Message_Counter : 0|4@1+ (1,0) [0|14] "" Vector__XXX + SG_ CHK_SUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ release_sw : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ flag_pressure_flag : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECU_initialize : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ Brake_demande_prichibition : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Booster_error : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Pressure_order_callback : 0|8@1+ (0.05,0) [0|12.75] "Mpa" Vector__XXX + SG_ Pressure : 0|16@0+ (0.001,0) [0|5.6] "Mpa" Vector__XXX + SG_ ACC_AND_INCHIG_RANGE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ COP2_SET_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ COP2_ADD_FLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NICC_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NICC_SET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MB_TGT_FLS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MB_FLS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MB_TGT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MB_IND : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FTRG_ACC : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCFAIL1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCFAIL2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INCHING_CONTROL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DIRTY_LASER_JPN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DIRTY_LASER_USA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TARGET_CHANGING_BUZZER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer_3rd : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer_2nd : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BST_ACTV_RB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BST_ACTV : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_OFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_VALVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SET_VSP : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAR_M : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AUTO_BRK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND_BAR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND_KMH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCD_SET : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_Buzzer : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_WARNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DISTWARN : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLS_TRGT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SET_DIST : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHK_SUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCTACC : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ LOW_CUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SPEED_VALUE : 0|16@1+ (0.001695,0) [0|2.45] "m/ss" Vector__XXX + SG_ ECD_FUNCTION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_ALIVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CONTROL_BYTE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ THCMD_S_8712 : 0|2@1+ (0.25,-1000) [-1000|3000] "Nm" Vector__XXX + SG_ THCMD_M_8732 : 0|2@1+ (0.25,-1000) [-1000|3000] "Nm" Vector__XXX + SG_ GrMax_Rq_SBC : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ GrMin_Rq_SBC : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ ACCACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PFCW_ACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ THCMD_S : 0|12@0+ (0.25,-1000) [-1000|3000] "Nm" Vector__XXX + SG_ THCMD_M : 0|12@0+ (0.25,-1000) [-1000|3000] "Nm" Vector__XXX + SG_ INHECOPF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HI_GEAR_INH_ADAS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ THCMD_S_upper : 0|8@1+ (0.25,-1000) [-1000|3000] "Nm" Vector__XXX + SG_ THCMD_S_lower : 0|4@1+ (0.25,-1000) [-1000|3000] "Nm" Vector__XXX + SG_ THCMD_M_upper : 0|4@1+ (0.25,-1000) [-1000|3000] "Nm" Vector__XXX + SG_ THCMD_M_lower : 0|8@1+ (0.25,-1000) [-1000|3000] "Nm" Vector__XXX + SG_ APOCMD4 : 0|4@1+ (0.125,0) [0|127.75] "%" Vector__XXX + SG_ APOCMD3 : 0|2@1+ (0.125,0) [0|127.75] "%" Vector__XXX + SG_ APOCMD2 : 0|2@1+ (0.125,0) [0|127.75] "%" Vector__XXX + SG_ REQ_APO_MB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ APOCMD1 : 0|2@1+ (0.125,0) [0|127.75] "%" Vector__XXX + SG_ MAIN_MB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ V_APS_F : 0|8@1+ (0.392157,0) [0|99.9999993] "%" Vector__XXX + SG_ MSGCTACC : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ CHECK_SUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TSCHABGE : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ PBS2_ACT_MAINBRK : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ DECON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AUTOSTOP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDCRU : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ODCANACC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_FAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAIN_SWA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BPFS_NO : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ BPFS_NC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ETQDNR_ETS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GPHOJI_ETS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FTCSON_ETS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DETRG_ETS : 0|8@1+ (20,0) [0|5100] "Nm/sec" Vector__XXX + SG_ ETQETS : 0|8@1+ (2,0) [-234|508] "Nm" Vector__XXX + SG_ M4VDCCHK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ M4CHKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ M4PRUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ M4STATE1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4STATE2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4TRQG : 0|8@1+ (0.8,0) [0|204] "Nm" Vector__XXX + SG_ M4RECVF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4TRANS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4LMPRQX : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4LMPRQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4TCSACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4NELIMTX : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4NELIMT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4SUBSTOP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4TCSFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4WARN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4ETQDNR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4TCSOFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4GPHOJI : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4FTCSONX : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ M4DETRQ : 0|8@1+ (20,0) [0|5100] "Nm/s" Vector__XXX + SG_ M4ETQTCS : 0|8@1- (3,150) [-234|531] "Nm" Vector__XXX + SG_ OBD2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TORQRATE : 0|8@1+ (0.5,0) [0|127.5] "%" Vector__XXX + SG_ TETS : 0|8@1+ (5,0) [0|1275] "Nm" Vector__XXX + SG_ TRQD : 0|8@1+ (10,0) [0|2550] "Nm" Vector__XXX + SG_ ETSWL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SLIPLAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETS_MODE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETS_MODE_LAMP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRQMTR : 0|8@1+ (0.2,0) [0|50] "kgfm" Vector__XXX + SG_ ABSFAILR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETSFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETSLOCK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABSFJDG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VDCFJDG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TCSFJDG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ YGIN : 0|8@1- (0.012,0) [-1.2|1.2] "G" Vector__XXX + SG_ CHKSUMRR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCNTRR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ G_SFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_VPFAIL : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ G_VPLOW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ XGIN : 0|8@1+ (0.01,-1.28) [-1.28|1.27] "g" Vector__XXX + SG_ RQTRQ : 0|8@1+ (3,0) [0|762] "Nm" Vector__XXX + SG_ YawRate : 0|16@0+ (0.2,-6553.4) [-200|200] "deg/s" Vector__XXX + SG_ TRANS_ACC : 0|16@0+ (0.004,-131.068) [-1.8|1.8] "g" Vector__XXX + SG_ LONG_ACC : 0|8@1+ (0.05,-10) [-1.8|1.8] "G" Vector__XXX + SG_ CHKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ STCENTER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ LONGSS : 0|8@1- (0.01,0) [-1.28|1.27] "G" Vector__XXX + SG_ VCVT : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ RECVF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STPLMSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EBDACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABSACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TCSACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VDCACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EBDFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABSFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TCSFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VDCFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETQUPR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETQDNR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GPHOJI : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FTCSON : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ DETRQ : 0|8@1+ (20,0) [0|5100] "Nm/sec" Vector__XXX + SG_ ETQTCS : 0|8@1- (3,150) [-234|531] "" Vector__XXX + SG_ CheckSum : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PBS_ENABLE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS_ACTIVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MessageCounter : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ SlowdownMonitorLow : 0|16@1+ (0.0017,0) [0|2.45] "m/s2" Vector__XXX + SG_ SlowdownOrderCallbackLow : 0|16@1+ (0.0017,0) [0|2.45] "m/s2" Vector__XXX + SG_ PresureFlag : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BrakesLamp : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DriverBrake : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ABS_Operation : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAN_TIME_OUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FunctionEnable : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FunctionStatus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FunctionAlive : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ControlByte : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ VMETER : 0|16@1+ (0.5,0) [0|32767.5] "rpm" Vector__XXX + SG_ CHKSUMRR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCNTRR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ WRRL : 0|16@1+ (0.5,0) [0|32767.5] "rpm" Vector__XXX + SG_ WRRR : 0|16@1+ (0.5,0) [0|32767.5] "rpm" Vector__XXX + SG_ CHKSUMFR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCNTFR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ YRSS_RAW : 0|16@1- (0.27,0) [-8847.36|8847.09] "deg/sec" Vector__XXX + SG_ WRFL : 0|16@1+ (0.5,0) [0|32767.5] "rpm" Vector__XXX + SG_ WRFR : 0|16@1+ (0.5,0) [0|32767.5] "rpm" Vector__XXX + SG_ CHKSUMRR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCNTRR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ETSFAILR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLG_AMR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLG_BMR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RQ_TRQ : 0|8@1+ (10,0) [0|1275] "Nm" Vector__XXX + SG_ PBS_ENABLE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS_ACTIVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Message_Counter : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ CHECK_SUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ SlowdownOrderCallbackLow : 0|16@1+ (0.0017,0) [0|2.45] "m/s2" Vector__XXX + SG_ SlowdownMonitorLow : 0|16@1+ (0.0017,0) [0|2.45] "m/s2" Vector__XXX + SG_ PresureFlag : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ControlByte : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ CAN_TIME_OUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BrakesLamp : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FunctionStatus : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FunctionEnable : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FunctionAlive : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VehicleSpeed_TCU : 0|16@0+ (0.01,0) [0|655.3] "km/h" Vector__XXX + SG_ CHKSUMFR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCOUNT : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ VCVT : 0|8@1+ (1,0) [0|255] "km/h" Vector__XXX + SG_ WRRL : 0|16@0+ (0.0416667,0) [0|2730.58] "rpm" Vector__XXX + SG_ WRRR : 0|16@0+ (0.0416667,0) [0|2730.58] "rpm" Vector__XXX + SG_ CHKSUMFR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSGCOUNT : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ WRFL : 0|16@0+ (0.0416667,0) [0|2730.58] "rpm" Vector__XXX + SG_ WRFR : 0|16@0+ (0.0416667,0) [0|2730.58] "rpm" Vector__XXX + SG_ PBW_WARNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CAP_IND_RST_STA : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ACFRDEFSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FUEL_WARNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_COOLANT_WARNING : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHARGE_WARNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIRBAG_WARNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FMad_upper : 0|2@1+ (1,0) [0|1023] "" Vector__XXX + SG_ BRAKE_FLUID_WARNING : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FMad_lower : 0|8@1+ (1,0) [0|1023] "" Vector__XXX + SG_ VSP20_MET : 0|16@0+ (0.01,0) [0|655.34] "km/h" Vector__XXX + SG_ DONGLE_COM : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FGAUGE_upper : 0|2@1+ (1,0) [0|1022] "" Vector__XXX + SG_ Dongle_ID_CLUSTER : 0|10@0+ (1,0) [0|0] "" Vector__XXX + SG_ FGAUGE_lower : 0|8@1+ (1,0) [0|1022] "" Vector__XXX + SG_ DOOR_SW : 0|5@1+ (1,0) [0|0] "" Vector__XXX + SG_ DOOR_SW_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BAC_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DC_EXISTANCE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte7 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte6 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte5 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte4 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte3 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte2 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte1 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ DataByte0 : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TQTMSTA : 0|8@1+ (2,-100) [-100|408] "Nm" Vector__XXX + SG_ PTNHI : 0|8@1+ (50,0) [0|12700] "rpm" Vector__XXX + SG_ NOTMRANG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CVTFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCDIS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDDSRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDDRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDNRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDRRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDPRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEINER : 0|8@1- (0.4,0) [-51.2|50.8] "Nm" Vector__XXX + SG_ KTFTMP : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TSENFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BTQCUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATQCUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CVTLOAD : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATCLD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IDLEUP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTDOFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OILPHG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ONLUFLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DOWNVSP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CVTLMPSIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RNGSIG : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ SMODESIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MMODESIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MMODEGP : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ DriveMode_Status : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_Req_NAVI_SHIFT_menu : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_Req_ECO_mode_menu : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TQTMSTA : 0|8@1+ (2,-100) [-100|408] "Nm" Vector__XXX + SG_ PTNHI : 0|8@1+ (50,0) [0|12700] "rpm" Vector__XXX + SG_ AGBCLOCK : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDLRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDSRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDDRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDNRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDRRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDPRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDSSIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDMSIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDMGP : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ CVTIUPRQ : 0|4@1+ (100,500) [500|2000] "rpm" Vector__XXX + SG_ ACCLIML : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCLIMH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCDIS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CVTFAILVDC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NIDLESTB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CVTLOAD : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PLMINTLM_or_NIDLELRN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATCOLD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IDLEUP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTDOFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OILPNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ONLUFLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DOWNVSP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MUPSFTTD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RNGSIG : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ SMODESIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MMODESIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MMODEGP : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TQTMDYN : 0|8@1+ (2,-100) [-100|408] "Nm" Vector__XXX + SG_ TEMPSEN : 0|8@1+ (1,0) [0|255] "COUNT" Vector__XXX + SG_ OUTREV : 0|16@1+ (1,0) [0|65535] "rpm" Vector__XXX + SG_ INPREV : 0|16@1+ (1,0) [0|65535] "rpm" Vector__XXX + SG_ RATIO0 : 0|16@1+ (3.9062E-005,0) [0|2.55996] "" Vector__XXX + SG_ TBNREV : 0|16@1+ (1,0) [0|10000] "rpm" Vector__XXX + SG_ OUTREV : 0|16@1+ (1,0) [0|10000] "rpm" Vector__XXX + SG_ TDRTARG : 0|8@1+ (0.00390625,0) [0|0.996] "" Vector__XXX + SG_ ATOILPOMP : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TEMPSEN : 0|8@1+ (1,0) [0|255] "COUNT" Vector__XXX + SG_ CURGPV : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ FSCKATIH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ LNTIR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBDDATA : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ OBDMARK : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ P_RUN : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ PTDOFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ D4MODE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SFTVCTR : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ IDLEUP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ONLUFLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SMLUFLG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DOWNVSP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DWNSFTTD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRIRTD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UPSFTTDL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UPSFTTDS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND1RNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND2RNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND3RNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IND4RNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDDRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDNRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDRRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDPRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATLAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ POWLAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATHITEMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDGP : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ INDMRNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ODCLAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GRRTOHLD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RNG_NG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AT_TYPEorMINH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MMODE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NEXTGP : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ DRIVETD : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ ONSHIFT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CURGP : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ vI42 : 0|16@0- (0.1,0) [-250|250] "A" Vector__XXX + SG_ vV42 : 0|16@0+ (0.1,0) [0|230] "V" Vector__XXX + SG_ vSOC : 0|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ fVARI : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ fSTSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fIPSTSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fIPSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fBCSS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ vIUR42 : 0|4@1+ (25,0) [0|375] "rpm" Vector__XXX + SG_ vIALTB : 0|8@1+ (1,0) [0|50] "A" Vector__XXX + SG_ vIALTA : 0|8@1+ (1,0) [0|50] "A" Vector__XXX + SG_ MSR_DISABLED : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GPHOJI : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TCSBRACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ASRDTQRQ_VCM : 0|12@0- (2.5,0) [-5120|5115] "Nm" Vector__XXX + SG_ MSRTQRQ_VCM : 0|12@0- (2.5,0) [-5120|5115] "Nm" Vector__XXX + SG_ ASRSTQRQ_VCM : 0|12@0- (2.5,0) [-5120|5115] "Nm" Vector__XXX + SG_ FCW_SYSTEM_ON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSRACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ EARLY_GSUP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCNTRR1 : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ ASRDTQRQ : 0|12@0+ (0.5,-400) [-400|1647] "Nm" Vector__XXX + SG_ TCSFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FTCSON : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ COPinREG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCNTRR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TRQ_CONT_TYPE : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ VDCFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSRTQRQ : 0|12@0+ (0.5,-400) [-400|1647] "Nm" Vector__XXX + SG_ ASRSTQRQ : 0|12@0+ (0.5,-400) [-400|1647] "Nm" Vector__XXX + SG_ TCSACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VDCACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSRACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSR_DISABLED : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TCSFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FTCSON : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCNTRR : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ TRQ_CONT_TYPE : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ GPHOJI : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ EARLY_GSUP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VDCFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OFF_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSRTQRQ : 0|8@1+ (0.5,-25) [-25|102] "%" Vector__XXX + SG_ ASRDTQRQ : 0|8@1+ (0.5,-25) [-25|102] "%" Vector__XXX + SG_ ASRSTQRQ : 0|8@1+ (0.5,-25) [-25|102] "%" Vector__XXX + SG_ TXNELIM : 0|8@1+ (12.5,0) [0|3188] "rpm" Vector__XXX + SG_ M4TQLIM : 0|8@1+ (0.8,0) [0|204] "Nm" Vector__XXX + SG_ FFDTLIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VB : 0|4@1+ (400,10000) [10000|16000] "mV" Vector__XXX + SG_ PTDON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECCSMSG3C : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ ATAPOST : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ PAMBAT : 0|8@1+ (20,0) [0|5080] "mV" Vector__XXX + SG_ TENG2 : 0|16@1- (0.1,0) [-3176.8|3276.7] "Nm" Vector__XXX + SG_ ATAPOST2 : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ ASCDON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ADVDC5orSPDCTINH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATAPOSELorATTRQAC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FDTFCSEL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATTRQNG2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDODOFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIDLE_SW2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATAPSNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATFULLSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DADV_RS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLNST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLEAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FD3LU : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FODINH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FDTLIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FDTTD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TWN : 0|8@1+ (1,-50) [-40|205] "deg" Vector__XXX + SG_ TENG : 0|16@1- (0.1,0) [-3176.8|3276.7] "Nm" Vector__XXX + SG_ TACHO : 0|16@1+ (3.125,0) [0|12796.9] "rpm" Vector__XXX + SG_ V_APO : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ APO_FSP : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ ETCFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECCSMSG0C : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ CANMASK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLAG_FC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIDLE_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIDLE_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ vPDPREN : 0|8@1+ (0.02,0) [0|5.12] "Mpa" Vector__XXX + SG_ vETHDUTY : 0|8@1+ (0.390625,0) [0|100] "%" Vector__XXX + SG_ vEWPDUTY : 0|8@1+ (0.390625,0) [0|100] "%" Vector__XXX + SG_ vFPDUTY : 0|8@1+ (0.390625,0) [0|100] "%" Vector__XXX + SG_ fSTOFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fAMPSG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ vMFTGDT : 0|8@1+ (0.390625,0) [0|100] "%" Vector__XXX + SG_ vALTV : 0|8@1+ (0.5,0) [10|90] "%" Vector__XXX + SG_ MBAPLLMT : 0|10@0+ (0.125,0) [0|125] "%" Vector__XXX + SG_ TE_LM_ON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECMMB_ACTIVATE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ APS2_MB : 0|10@0+ (0.125,0) [0|125] "%" Vector__XXX + SG_ APS1_MB : 0|10@0+ (0.125,0) [0|125] "%" Vector__XXX + SG_ LDP_ON_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIDLE_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SNOW_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NEUT_SW : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ Message_Counter : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ BNOSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BNCSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCCANFAIL : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ASCDSW8 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW7 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW6 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW5 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW4 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAIN_SWE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ONEACC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECMACCON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AIDLE_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDFAIL : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ APS2_A : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ APS1_A : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ ACCMDFAIL : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ACCINH_S : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ACCINH : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ SMAPREQ_hea : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ SMAPREQ_emi : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MODELMT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRKSWTM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TCOLD : 0|8@1+ (2,-100) [-100|408] "Nm" Vector__XXX + SG_ TTEPTD : 0|8@1- (2,-100) [-100|408] "Nm" Vector__XXX + SG_ ACCVDEC_or_NIDLE_INSTRUCTION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCTGSEL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECCSMSG7C : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ ACCTGRTO : 0|10@0+ (5,0) [0|5115] "mV" Vector__XXX + SG_ LU_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ SMAPREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RTOHOLD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATIDLSW2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MANUAUP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MANUPOS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MANUMOD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTDAPO2 : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ ECCSMSG5C : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ CANNG2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECMNG2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ZKON2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SOKU2 : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCCANFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BNCSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BNOSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECCSMSG4C : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ ASCDSW1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW4 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW5 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW6 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW7 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDSW8 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TFD_ECM : 0|16@1+ (1,0) [-32768|32767] "N" Vector__XXX + SG_ V_APS : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ APS2_A : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ APS1_A : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ ACCINH_S : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECMACCON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCMDFAL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ONEACC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACCINH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TE_LM_ON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAIN_SWE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OBD_M_TEMP_SOAK_COMPLETED : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TACHO_upper : 0|8@1+ (3.125,-50) [-40|12796.9] "rpm" Vector__XXX + SG_ TACHO_lower : 0|8@1+ (3.125,-50) [-40|12796.9] "rpm" Vector__XXX + SG_ G_LAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LED2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OILPRE_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_PDCUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LED : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ELAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CRU_LAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SET_LAMP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIM : 0|16@1+ (1.6,0) [0|104856] "microec" Vector__XXX + SG_ TWN : 0|8@1+ (1,-50) [-50|205] "deg" Vector__XXX + SG_ ITO : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ PTDAPO : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ FHLCVT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FPTTFS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CANMASK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATTRQNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TENG2 : 0|16@1- (0.1,0) [-3176.8|3276.7] "Nm" Vector__XXX + SG_ PTDFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTDON : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RQ_ENBR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ K_ENBR : 0|5@1- (0.00390625,0) [0|0.05859] "G" Vector__XXX + SG_ TTEP : 0|8@1+ (2,-100) [-100|408] "Nm" Vector__XXX + SG_ FDTTD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FDTLIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATFULLSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATIDLESW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FLOESTJ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SNOWSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SNOWMODE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETCFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TCSOPX : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TCSOP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CNTLMT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECMOK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETCOK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FCOK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CANOK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRQUPNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TXNELIM : 0|8@1+ (12.5,0) [0|3187.5] "rpm" Vector__XXX + SG_ ETRQBK : 0|8@1- (3,150) [-234|531] "Nm" Vector__XXX + SG_ ETRQ : 0|8@1- (3,150) [-234|531] "Nm" Vector__XXX + SG_ ETRQDR : 0|8@1- (3,150) [-234|531] "Nm" Vector__XXX + SG_ APOFSP : 0|8@1+ (0.5,0) [0|100] "%" Vector__XXX + SG_ ETSCANOK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRQDNINH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECCSMSG1C : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ FCTCS : 0|4@1+ (1,0) [0|8] "CYL" Vector__XXX + SG_ TTEPTCS : 0|8@1- (3,150) [-234|531] "Nm" Vector__XXX + SG_ check_sum : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBFS_NC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBFS_NO : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BCU_message_counter : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ Pressure_order_callback : 0|8@1+ (0.05,0) [0|12.75] "Mpa" Vector__XXX + SG_ Pressure_hi : 0|16@0+ (0.001,0) [0|5.6] "Mpa" Vector__XXX + SG_ flag_pressure_flag : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ release_sw : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Brake_demande_prichibition : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ECU_initialize : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Booster_error : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ HOOD_SW2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FUEL_FILTER : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRK_OIL_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ESCL_RERAY : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGN_RLY : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ COLUMU_LOCK_STA : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ INTERLOCK_NPSW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DETENT_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STARTER_INHIBIT_RELAY : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ WAKEUP : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ HOOD_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CORN_L : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ANTI_T_HORN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ IGN_CONT_STA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PUSH_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ST_position : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ StarterInhibitorCutStatus : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PREDICTED_M_POWER : 0|8@1+ (40,0) [0|10160] "watts" Vector__XXX + SG_ INSTANT_M_POWER : 0|8@1+ (40,0) [0|10160] "watts" Vector__XXX + SG_ STARTER_INHIBIT_RELAY : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALT_NO : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ ROTOR_C : 0|8@1+ (0.0472,0) [0|12] "A" Vector__XXX + SG_ REV_SW : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ INHI_N_SW : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MOTOR_FAN : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ STARTER : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ALT_DF : 0|8@1+ (0.3906,0) [0|99.2188] "%" Vector__XXX + SG_ R_DEF_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AC_FD_TYPE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PWM_MFAN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MFDTY : 0|7@1+ (1,0) [0|100] "%" Vector__XXX + SG_ GENEV_REQ : 0|8@1+ (0.5,0) [0|100] "%" Vector__XXX + SG_ ALT_MAX : 0|8@1+ (40,0) [0|10200] "Watts" Vector__XXX + SG_ POW_ALL : 0|4@1+ (40,0) [0|600] "Watts/s" Vector__XXX + SG_ CRNOKAT : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CRANOKECM : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TACHO : 0|16@0+ (0.125,0) [0|8191.75] "Tr/min" Vector__XXX + SG_ COMPDEST_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ INHI_CUTOFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAX_POW_ALL : 0|5@1+ (100,0) [0|3000] "Watts" Vector__XXX + SG_ MOTOR_FAN_REQ : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ENG_STA : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ COMP_ACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CANMASKorR_DEF_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ POW_CUT : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ RELEASE : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ BUZZ_REQ_6MTA : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ G_POSITION : 0|8@1+ (1,-125) [-125|125] "Step" Vector__XXX + SG_ C_TORQUE : 0|16@1- (0.1,0) [-3276.8|3276.7] "Nm" Vector__XXX + SG_ C_STROKE : 0|8@1+ (0.4,0) [0|100] "%" Vector__XXX + SG_ fFCW_SW_MAIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLDW_SW_MAIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fLDP_SW_MAIN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fCONTROL_LAMP_BLINK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ fINITIAL_STATE_CHANGE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHECK_SUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PBS_REQUEST : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BST_ACTV2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCTACC : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ R_ECD_FUNCTION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_ALIVE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_ACT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_PRESS_O_F : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBS2_PRESS_G_F : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CONTROU_BYTE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ STARTING_LOW_CUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BST_ACTV1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ O_REDUCE_S_VALUE : 0|16@1+ (0.0017,-3) [-3|2.5] "m/ss" Vector__XXX + SG_ P_DMND : 0|16@0+ (0.05,0) [0|50] "bar" Vector__XXX + SG_ CanREFUSE_SLEEPP : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ETSWRN2 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ETSWRN1 : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ATPWL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OFFROAD_SW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TVIR_RR : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TVIR_RL : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TDR_FR : 0|8@1+ (0.5,0) [0|100] "%" Vector__XXX + SG_ ABSFJDG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VDCFJDG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TCSFJDG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ETQDNR_ETS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ETSFAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ETSWL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ETS_MODE : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ETS_MODE_LAMP : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ TETS : 0|8@0+ (10,0) [0|2550] "Nm" Vector__XXX + SG_ CLOCK : 0|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ ETQETS : 0|12@0+ (0.5,-400) [-400|1647] "Nm" Vector__XXX + SG_ CNIDLE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ OBD_M_TEMP_SOAK_COMPLETED : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SGSLLURQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NIDLEOK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ GSENSOR : 0|10@0+ (5,0) [0|5115] "mV" Vector__XXX + SG_ RSTREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRKSWTM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ VELHGTNE : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ RTOHOLD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DADV_RS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TTER : 0|10@0+ (2,-400) [-400|1646] "Nm" Vector__XXX + SG_ ADVCD5 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SMAPREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CRANKING_PERMISSION : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SPDCTINH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ M4TQLIM : 0|8@1+ (0.8,0) [0|204] "Nm" Vector__XXX + SG_ TXNELIM : 0|8@1+ (12.5,0) [0|3187.5] "rpm" Vector__XXX + SG_ FLAG_FC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ITO : 0|8@1+ (0.392157,0) [0|100] "%" Vector__XXX + SG_ CLUTCHSW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ ETSTRQAC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UPSHIFT_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OIL_DRAIN_ALERT : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FREE_SHIFT : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CANMASK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PFILTER_FAILDIS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FDTTD : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TRQDNINH : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TAPREQ : 0|8@0+ (2,-100) [-100|408] "Nm" Vector__XXX + SG_ RAWP : 0|8@0+ (1,0) [0|253] "%" Vector__XXX + SG_ TENG : 0|8@0+ (2,-100) [-100|408] "Nm" Vector__XXX + SG_ TACHO : 0|16@0+ (0.125,0) [0|8191.75] "Tr/min" Vector__XXX + SG_ ETCFAIL : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TTEPTD_ETRQDR_VCM : 0|12@0- (2.5,0) [-5120|5115] "Nm" Vector__XXX + SG_ TENG_VCM : 0|12@0- (2.5,0) [-5120|5115] "Nm" Vector__XXX + SG_ ETSTRQAC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SHIFT_IND : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSR_S_I : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CLUTCHSW : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ TRQDNINH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ RawPedal_APOFS : 0|10@0+ (0.125,0) [0|125] "%" Vector__XXX + SG_ TTEPTD_ETRQDR : 0|12@0+ (0.5,-400) [-400|1647.5] "Nm" Vector__XXX + SG_ TENG : 0|12@0+ (0.5,-400) [-400|1647] "Nm" Vector__XXX + SG_ TACHO : 0|16@0+ (0.125,0) [0|8191.75] "Tr/min" Vector__XXX + SG_ TACVTOK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ AT_drag_torque : 0|8@0+ (2,0) [0|510] "Nm" Vector__XXX + SG_ Shiftting_pattern_signal : 0|5@0+ (1,0) [0|0] "" Vector__XXX + SG_ Torque_down_rate_signal : 0|8@0+ (0.00390625,0) [0|0.99609375] "%" Vector__XXX + SG_ CNISCREQ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ CNIDLSTB : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ ECO_TH_GAIN : 0|6@0+ (2,0) [0|126] "%" Vector__XXX + SG_ M4WDINSIG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ADFCRREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NIDLELRN : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ NIDLESTB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CVTIUPRQ : 0|4@1+ (100,500) [500|2000] "rpm" Vector__XXX + SG_ ATSLREQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRIRTD_L : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRIRTD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ UPSFTTDS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DWNSFTTD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DRIVETD : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ CVTFALVDC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TORQUE_CONTROL_PROHIBIT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ DOWNVSP : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FSCKATIH : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CURGPV : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ MMODE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATCOLD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ D4MODE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTDOFF : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CVTFAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ OILPNG : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CVTLOAD : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ PTNHI : 0|8@1+ (50,0) [0|12700] "rpm" Vector__XXX + SG_ RATIO02 : 0|1@1+ (1,0) [0|0] "0.01/256" Vector__XXX + SG_ AscMode_Status : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_RUN : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ RATIO0 : 0|16@0+ (4E-005,0) [0|2.6214] "" Vector__XXX + SG_ INPREV : 0|16@0+ (1,0) [0|65534] "rpm" Vector__XXX + SG_ OUTREV : 0|16@0+ (1,0) [0|65534] "rpm" Vector__XXX + SG_ AT_TorquRequestProgress : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ TA_ACTUATOR_P : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TA_POSITION : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ Anti_RGB_PUMP_STA : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ CRANKING_AUTHORISATION : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ GP : 0|4@1+ (1,0) [0|0] "" Vector__XXX + SG_ TORQUE_REQ_PROGRESS : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FAN_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ MAJOR_FAIL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BMCEXE : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BMCACK : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ E_NIDLE_RQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATTRQAC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FDTTD : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FD3LU_FDTLIN_FDTLIN2 : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ FODINH : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ATAPOST2 : 0|10@0+ (0.125,0) [0|125] "%" Vector__XXX + SG_ KDACT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PEDALERR : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TIDLE_SW : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ASCDON : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ ErgonomicPedal_ATAPOST : 0|10@0+ (0.125,0) [0|125] "%" Vector__XXX + SG_ TENG2 : 0|12@0+ (0.5,-400) [-400|1647] "Nm" Vector__XXX + SG_ EngineTorque_WithoutGBReq : 0|12@0+ (0.5,-400) [-400|1647.5] "Nm" Vector__XXX + SG_ CHK_SUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ MSG_CNT : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ BLS : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ P_DMND : 0|16@1+ (0.05,0) [0|50] "bar" Vector__XXX + SG_ PRC_FUNC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ BA_FUNC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CTRLBYTE : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CHCKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ RESETSWA : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SWA_STA : 0|3@1+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCOUNT : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ STRSPEED : 0|16@0+ (0.1,-3276.7) [-3276.7|3276.7] "deg/s" Vector__XXX + SG_ STRANGLE : 0|16@0+ (0.1,-3276.7) [-3276.7|3276.7] "deg" Vector__XXX + SG_ FILL2 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ FILL1 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ FT_PASS_BELT_REM : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ _2ND_ROW_R_BELT_STA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ _2ND_ROW_L_BELT_STA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ _2ND_ROW_C_BELT_STA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ BELT_BUCK_STA_PASS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ AIRBAG_FAIL : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSGCNTR : 0|2@0+ (1,0) [0|3] "" Vector__XXX + SG_ A_B_LIGHT_CRSH_ORD : 0|4@0+ (1,0) [0|0] "" Vector__XXX + SG_ PRE_ROLL_OUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ROLLOVER_OUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ROLL_MALFUNC_OUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ROLL_BAR_OUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ROLL_BAR_MALFUNC_OUT : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CUT_OFF_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SERV_LMP_REQ : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ A_B_CRSH_ORD : 0|16@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE7 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE7 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 0|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ CHECKSUM2 : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ PSICOS : 0|8@1+ (19.53,0) [0|4960.6] "mV" Vector__XXX + SG_ PSISIN : 0|8@1+ (19.53,0) [0|4960.6] "mV" Vector__XXX + SG_ CHCKSUM : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ MSGCOUNT : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TEST5 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEST4 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEST3 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEST2 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TEST1 : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LWSTRIM : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LWSCAL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LWSOK : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CLL_STS : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ FW_OBJ : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ WRN_FW : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ WRN_BS_R : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ WRN_BS_L : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ WRN_LN_R : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ WRN_LN_L : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ TGT_FW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ MOED_CC : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_CC : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TGT_RV : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TGT_LV : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_D_Rr : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_N_D : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_N_W : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ MSS_F : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SIG_SPDA : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SIG_W_S : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ BZR_REQ : 0|3@0+ (1,0) [0|0] "" Vector__XXX + SG_ SIG_SPD : 0|8@0+ (1,-1) [0|253] "" Vector__XXX + SG_ STS_D_FW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_BA : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_W_BS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_W_FW : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TGT_LN : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ TGT_FV : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SIG_UNIT : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SIG_DIS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ SIG_RDY : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ SIG_SET : 0|1@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_CC : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_D_BS : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_D_LN : 0|2@0+ (1,0) [0|0] "" Vector__XXX + SG_ STS_W_LN : 0|2@0+ (1,0) [0|0] "" Vector__XXX + +BO_ 691 ACC_GeneralStatus_N1_ADAS: 8 Vector__XXX + SG_ DATABYTE7 : 63|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 55|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 47|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 39|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 31|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 23|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 15|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 7|8@0+ (1,0) [0|0] "" Vector__XXX + +BO_ 452 ADAStoMABX: 8 Vector__XXX + SG_ CHKSUM : 56|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TRGT_YAW_INV : 55|12@0- (1,0) [-1024|1023.5] "Nm" Vector__XXX + SG_ MSG_CNT : 40|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ BLS_ON_flag : 42|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SHIFT_STOP_REQ_VDC : 43|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ CBA_REQ : 44|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FCAAS_REQUEST : 45|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PBA_REQUEST : 46|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ACC_REQUEST : 47|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ YMC_REQ : 32|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRSSR_DISTRBT : 33|7@1+ (1,0) [0|100] "%" Vector__XXX + SG_ PUMP_STOP_REQ : 8|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PUMP_MAP_TYPE : 24|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ BRK_PRSSR_DIST_REQ : 9|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ LDP_SHIFTMP_CHR_REQ_VDC : 10|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ AUTOSTOP : 12|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ ITS_TRGT_YAW : 23|14@0- (0.5,0) [-4095.5|4095.5] "Nm" Vector__XXX + SG_ ITS_TRGT_PRSSR : 7|11@0+ (0.05,0) [0|100] "bar" Vector__XXX + +BO_ 372 AT_ToqueControl_RN1: 8 VCM + SG_ CURGP : 24|4@1+ (1,0) [0|0] "" VDC,USM,TCU,SBW,PSB,MG_INV,LBC,IDM,ICC,HCM,ECM,eACT2,eACT,e4WD,ADAS,ACU,_4WD,SEC_E + +BO_ 451 ADAStoBrakeSystem: 8 ADAS + SG_ CHKSUM : 56|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TRGT_YAW_INV : 55|12@0- (1,0) [-1024|1023.5] "Nm" Vector__XXX + SG_ MSG_CNT : 40|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ BLS_ON_flag : 42|1@1+ (1,0) [0|0] "" eACT2,VDC + SG_ SHIFT_STOP_REQ_VDC : 43|1@1+ (1,0) [0|0] "" eACT2,VDC + SG_ CBA_REQ : 44|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ FCAAS_REQUEST : 45|1@1+ (1,0) [0|0] "" eACT2,HCM,VDC + SG_ PBA_REQUEST : 46|1@1+ (1,0) [0|0] "" eACT2,HCM,VDC + SG_ ACC_REQUEST : 47|1@1+ (1,0) [0|0] "" eACT2,HCM,VDC + SG_ YMC_REQ : 32|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ PRSSR_DISTRBT : 33|7@1+ (1,0) [0|100] "%" eACT2,VDC + SG_ PUMP_STOP_REQ : 8|1@1+ (1,0) [0|0] "" eACT2,VDC + SG_ PUMP_MAP_TYPE : 24|2@1+ (1,0) [0|0] "" eACT2,VDC + SG_ BRK_PRSSR_DIST_REQ : 9|1@1+ (1,0) [0|0] "" eACT2,VDC + SG_ LDP_SHIFTMP_CHR_REQ_VDC : 10|2@1+ (1,0) [0|0] "" eACT2,VDC + SG_ AUTOSTOP : 12|1@1+ (1,0) [0|0] "" VDC + SG_ ITS_TRGT_YAW : 23|14@0- (0.5,0) [-4095.5|4095.5] "Nm" Vector__XXX + SG_ ITS_TRGT_PRSSR : 7|11@0+ (0.05,0) [0|100] "bar" Vector__XXX + +BO_ 658 VehicleDynamic02: 8 VDC + SG_ YAW_RATE_02 : 31|12@0+ (0.1,-204.8) [-200|200] "deg/s" _4WD,ADAS,AHL,AVM,eACT,eACT2,IDM,LASER,RADAR,SBW + SG_ TRANS_ACC_02 : 11|12@0+ (0.001,-2.048) [-2|2] "G" TCU,_4WD,ADAS,AT,AVM,CVT,E_SUS,eACT,eACT2,ECM,HCM,I_CON,IDM,IT_M,SBW + SG_ LONG_ACC_02 : 7|12@0+ (0.001,-2.048) [-2|2] "G" TCU,_4WD,AT,AVM,E_PKB,eACT,eACT2,ECM,EMCU,HCM,I_CON,IDM,IT_M + +BO_ 1549 BCM_GeneralStatus: 8 BCM + SG_ TURN_IND : 13|3@1+ (1,0) [0|0] "" ADAS,AT,AVM,CVT,EMCU,HVAC,IDM,IT_M,LC,METER,PTC,RADAR,SR,TCU,VDC + SG_ HL_HIGH_REQ : 11|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TAIL_L_REQ : 2|1@1+ (1,0) [0|0] "" ADAS,AVM,BIC,HVAC,I_CON,LCU,METER,PTC,TCU,USM + SG_ HL_LOW_REQ : 1|1@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 861 BCM_SystemControl: 8 BCM + SG_ CABRESW : 36|2@1+ (1,0) [0|0] "" _4WD,ASCD,ACU,ADAS,AT,CVT,DSC,E_PKB,ECM,EMCU,HCM,HVAC,IT_M,METER,PSD,PTC,RCU,TCU,VCM + SG_ FR_WIP_REQ : 21|3@1+ (1,0) [0|0] "" ADAS,AVM,HVAC,ICC,IDM,IT_M,LCU,PTC,TCU,USM,VCM,VDC + +BO_ 852 Brake_GeneralData: 8 VDC + SG_ ABSACT : 54|1@1+ (1,0) [0|0] "" _4WD,_6MTA,ACU,ADAS,AT,AVM,BCU,CVT,DIFFLOCK,e4WD,E_SUS,ECM,EMCU,HCM,ICC,IDM,IT_M,PSB,PUEH,TCU + SG_ ODOMETER : 23|16@0+ (0.1,0) [0|6553.5] "m" Vector__XXX + +BO_ 689 ITS_InfoStatus_N1: 8 ADAS + SG_ DATABYTE7 : 63|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE6 : 55|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE5 : 47|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE4 : 39|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE3 : 31|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE2 : 23|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE1 : 15|8@0+ (1,0) [0|0] "" Vector__XXX + SG_ DATABYTE0 : 7|8@0+ (1,0) [0|0] "" Vector__XXX + +BO_ 644 Front_Wheel_Speed_Frame: 8 VDC + SG_ VSO : 39|16@0+ (0.01,0) [0|655.3] "km/h" _4WD,ASCD,ACU,ADAS,ADP,AT,AVM,E_SUS,eACT,eACT2,ECM,EMCU,HCM,ICC,IDM,IT_M,METER,PBW,PUEH,RCU,TPMS,VCM + +BO_ 581 Brake_StabikityControl_RN1: 8 VDC + SG_ TCSACT : 47|1@1+ (1,0) [0|0] "" _4WD,ACU,ADAS,AT,AVM,CVT,DIFFLOCK,ECM,HCM,ICC,IDM,VCM + SG_ VDCACT : 46|1@1+ (1,0) [0|0] "" _4WD,ACU,ADAS,AT,AVM,CVT,DIFFLOCK,ECM,EMCU,HCM,ICC,IDM,VCM + SG_ OFF_SW : 24|1@1+ (1,0) [0|0] "" ADAS,AT,DIFFLOCK,eACT,eACT2,HCM,ICC,IDM,VCM + +BO_ 386 ECM_TorqueControl_N1: 8 ECM + SG_ V_APO : 32|8@1+ (0.3921569,0) [0|100] "%" _4WD,ADAS,AT,CVT,ICC + +BO_ 2 LWSOUT: 8 STRG + SG_ STRSPEED : 16|8@1+ (4,0) [0|1016] "deg/s" VDC + SG_ STRANGLE : 0|16@1- (0.1,0) [-1080|1080] "deg" VDC + +BO_TX_BU_ 372 : VCM,AT,CVT,MTA; +BO_TX_BU_ 658 : ABS,B_LSD,TCS,VDC; +BO_TX_BU_ 852 : ABS,B_LSD,TCS,VDC; +BO_TX_BU_ 689 : AVM,ADAS; +BO_TX_BU_ 644 : ABS,B_LSD,TCS,VDC; + + +CM_ BU_ HB "Hydraulic Booster"; +CM_ BU_ DTCO "Digital Tacho Graph"; +CM_ BU_ _6MTA "6th Manual Transmission Automatic "; +CM_ BU_ eACT2 "eACT2"; +CM_ BU_ HMI "Human Machine Interface"; +CM_ BU_ IT_M_MCN "IT-M Middle Cost Navi"; +CM_ BU_ ITS_HMI_CONT "ITS_Human Machine Interface_CONT"; +CM_ BU_ ASCD "Auto Speed Control Device"; +CM_ BU_ HAS "Hydralic Actuation System"; +CM_ BU_ SMB "Side Magic Bumper"; +CM_ BU_ ANC "Active Noise Control"; +CM_ BU_ AHL "Auto High Low"; +CM_ BU_ DSC "Digital Sound Communication"; +CM_ BU_ IDM "Intelligent Driving Module"; +CM_ BU_ SBW "Steer By Wire"; +CM_ BU_ EMCU "Energy Management Control Unit"; +CM_ BU_ LCU "LCV Control Unit (LCV=Light weight Commercial Vehicle)"; +CM_ BU_ IT_M_LCN "IT-M Low Cost Navi"; +CM_ BU_ PBW "Park By Wire"; +CM_ BU_ PDM "Power Distribution Module"; +CM_ BU_ TCU "Telematics Control Unit"; +CM_ BU_ AVM "Around View Monitor"; +CM_ BU_ XX6 "CANdb(Ver24.6) 2012MAR30 XX6 Odagiri Takashi"; +CM_ BU_ AIR_LEV "Air Levelizer"; +CM_ BU_ OBC "On Borad Charger"; +CM_ BU_ E_HPS "Electric-Hydraulic Power Steering"; +CM_ BU_ DCM "Data Communication Module"; +CM_ BU_ VCM "Vehicle Control Module"; +CM_ BU_ PSS_SSS "Parking Support System / Security Support System"; +CM_ BU_ I_CON "Integrated & Configurable SW Unit"; +CM_ BU_ ShBW "Shift By Wire"; +CM_ BU_ FFP "Force Feedback Pedal"; +CM_ BU_ SR "Side Radar"; +CM_ BU_ ADAS "Advanced Driver Assistance System control unit"; +CM_ BU_ eACT "eACT"; +CM_ BU_ AT_OIL "Automatic Transmission Oil unit"; +CM_ BU_ LBC "Lithium-ion Battery Controller"; +CM_ BU_ MG_INV "Motor Generator-Inverter"; +CM_ BU_ PTC "Positive emperature Coefficient heater"; +CM_ BU_ BIC "Communication of Interface Box"; +CM_ BU_ XCP_tool "XCPonCAN tool"; +CM_ BU_ B_LSD "Brake - Limited Slip Differential"; +CM_ BU_ E_PKB "Electricity - Parking Brake"; +CM_ BU_ VDC "Vehicle Dynamic Control"; +CM_ BU_ USM "Underhood Switching Module"; +CM_ BU_ TPMS "Tire Pressure Monitoring System"; +CM_ BU_ TCS "Traction Control System"; +CM_ BU_ STRG "Steering Sensor"; +CM_ BU_ SONAR "SONAR"; +CM_ BU_ SEC_E "Smart Entrance Controller Europe"; +CM_ BU_ RENAULT "RENAULT Message"; +CM_ BU_ RAS "Rear Active Suspention"; +CM_ BU_ RADAR "RADAR sensor"; +CM_ BU_ PSD "Power Slide Door"; +CM_ BU_ PSB "Precrash Seat Belt"; +CM_ BU_ PUEH "Pop Up Engine Hood "; +CM_ BU_ PBD "Power Back Door"; +CM_ BU_ OTHER "Pablic tool"; +CM_ BU_ METER "Combination meter / Cluster"; +CM_ BU_ LKC "Lane Keep Camera"; +CM_ BU_ LKA "Lane Keep Assist"; +CM_ BU_ LDW "Lane Departure Waring"; +CM_ BU_ LC "Lane Camera"; +CM_ BU_ LASER "LASER Radar sensor"; +CM_ BU_ ITMU "IT Mobil Unit"; +CM_ BU_ IT_M "Information Techology Master"; +CM_ BU_ IPDM42V "Intelligent Power Distribution Module 42V"; +CM_ BU_ I_KEY "Interigent Key"; +CM_ BU_ HVAC "Hearing Ventilation and Air Conditioning "; +CM_ BU_ HCM "Hybrid Control Module"; +CM_ BU_ ForceFauge "2 force gauge meter"; +CM_ BU_ EPS "Electric Power Steering"; +CM_ BU_ ENGST "Remoto Control Engine Starter"; +CM_ BU_ EHS "Easy Hill Start"; +CM_ BU_ ECM "Engine Control Module"; +CM_ BU_ ECB "Electrical Control Brake"; +CM_ BU_ e4WD "Electrical 4 Wheel Drive"; +CM_ BU_ E_SUS "Electronically controlled Suspention"; +CM_ BU_ E_EOL "Development tool(End of line)"; +CM_ BU_ DIU_TOBE "Display Information Unit"; +CM_ BU_ DIFFLOCK "Differential Lock"; +CM_ BU_ DDR "Diagnostic Data Recorder"; +CM_ BU_ DCU "Display Control Unit"; +CM_ BU_ DC "Drive Computer"; +CM_ BU_ CVT "Continuously Variable Transmission"; +CM_ BU_ CONSULT "Diagnosis Tool(CONSULT/DDT2000)"; +CM_ BU_ CHECKER "Development, Service, Supplier TOOL"; +CM_ BU_ CGW "CAN Gate Way"; +CM_ BU_ BCU "Booster Control Unit"; +CM_ BU_ BCM42V "Body Control Module 42V"; +CM_ BU_ BCM "Body Control Module"; +CM_ BU_ BC42V "Battery Control 42V"; +CM_ BU_ AT "Automatic Transmission"; +CM_ BU_ AFS "Adaptive Frontlighting System"; +CM_ BU_ ADP "Auto Driving Position"; +CM_ BU_ ACU "Airbug Control Unit"; +CM_ BU_ ICC "Interigent Cruise Control"; +CM_ BU_ ABS "Antilock Break System"; +CM_ BU_ MTA "Manual Transmission Automatic"; +CM_ BU_ _4WD "4 Wheel Drive"; +CM_ BU_ _4WAS "4 Wheel Active Steer"; +CM_ BU_ RCU "Roof Control Unit"; +CM_ BO_ 3221225472 "This is a message for not used signals, created by Vector CANdb++ DBC OLE DB Provider."; +CM_ SG_ 3221225472 Curve_20 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_19 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_18 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_17 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_16 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_15 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_14 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_9 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_8 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_7 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_13 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_12 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_11 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_10 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_6 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_5 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_4 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_3 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_2 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_1 "PhysicalValue = SignalValue^2/42.25"; +CM_ SG_ 3221225472 Curve_0 "PhysicalValue = SignalValue^2/42.25"; +BA_DEF_ "BusType" STRING ; +BA_DEF_ SG_ "FirstFrameValue" STRING ; +BA_DEF_ SG_ "Neutral Value" STRING ; +BA_DEF_ SG_ "Invalid Value" STRING ; +BA_DEF_ BO_ "GenMsgSendType" ENUM "-","Priodic","Priodic+Event","Event","NotClear","Other"; +BA_DEF_ BO_ "GenMsgCycleTime" INT 0 10000; +BA_DEF_ BO_ "Cycle Time Comment" STRING ; +BA_DEF_DEF_ "BusType" ""; +BA_DEF_DEF_ "FirstFrameValue" ""; +BA_DEF_DEF_ "Neutral Value" ""; +BA_DEF_DEF_ "Invalid Value" ""; +BA_DEF_DEF_ "GenMsgSendType" "-"; +BA_DEF_DEF_ "GenMsgCycleTime" 0; +BA_DEF_DEF_ "Cycle Time Comment" ""; +BA_ "BusType" "CAN"; +BA_ "Cycle Time Comment" BO_ 691 ""; +BA_ "GenMsgCycleTime" BO_ 691 20; +BA_ "GenMsgSendType" BO_ 691 1; +BA_ "GenMsgSendType" BO_ 452 1; +BA_ "GenMsgCycleTime" BO_ 452 10; +BA_ "Cycle Time Comment" BO_ 452 ""; +BA_ "GenMsgSendType" BO_ 372 1; +BA_ "GenMsgCycleTime" BO_ 372 10; +BA_ "Cycle Time Comment" BO_ 372 ""; +BA_ "GenMsgSendType" BO_ 451 1; +BA_ "GenMsgCycleTime" BO_ 451 10; +BA_ "Cycle Time Comment" BO_ 451 ""; +BA_ "GenMsgCycleTime" BO_ 658 20; +BA_ "GenMsgSendType" BO_ 658 1; +BA_ "Cycle Time Comment" BO_ 658 ""; +BA_ "GenMsgCycleTime" BO_ 1549 100; +BA_ "GenMsgSendType" BO_ 1549 2; +BA_ "Cycle Time Comment" BO_ 1549 ""; +BA_ "GenMsgCycleTime" BO_ 861 100; +BA_ "GenMsgSendType" BO_ 861 2; +BA_ "Cycle Time Comment" BO_ 861 ""; +BA_ "GenMsgSendType" BO_ 852 1; +BA_ "Cycle Time Comment" BO_ 852 "Bosch,UJ=40,Teves=35"; +BA_ "GenMsgCycleTime" BO_ 852 40; +BA_ "GenMsgCycleTime" BO_ 689 20; +BA_ "GenMsgSendType" BO_ 689 1; +BA_ "Cycle Time Comment" BO_ 689 ""; +BA_ "GenMsgSendType" BO_ 644 1; +BA_ "Cycle Time Comment" BO_ 644 "Bosch,UJ=20,Teves=14"; +BA_ "GenMsgCycleTime" BO_ 644 20; +BA_ "GenMsgCycleTime" BO_ 581 20; +BA_ "GenMsgSendType" BO_ 581 1; +BA_ "Cycle Time Comment" BO_ 581 ""; +BA_ "GenMsgCycleTime" BO_ 386 10; +BA_ "GenMsgSendType" BO_ 386 1; +BA_ "Cycle Time Comment" BO_ 386 ""; +BA_ "GenMsgCycleTime" BO_ 2 10; +BA_ "GenMsgSendType" BO_ 2 1; +BA_ "Cycle Time Comment" BO_ 2 ""; +BA_ "FirstFrameValue" SG_ 3221225472 BUZZ_REQ "00000b"; +BA_ "Neutral Value" SG_ 3221225472 BUZZ_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 BUZZ_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATABYTE1 "-"; +BA_ "Neutral Value" SG_ 3221225472 DATABYTE1 "-"; +BA_ "Invalid Value" SG_ 3221225472 DATABYTE1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATABYTE0 "-"; +BA_ "Neutral Value" SG_ 3221225472 DATABYTE0 "-"; +BA_ "Invalid Value" SG_ 3221225472 DATABYTE0 "-"; +BA_ "Invalid Value" SG_ 3221225472 P_RUN "-"; +BA_ "Neutral Value" SG_ 3221225472 P_RUN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 P_RUN "AT : 0h +CVT : 1h"; +BA_ "Invalid Value" SG_ 3221225472 TQTMDYN "CVT : I=FFFh +AT : -"; +BA_ "Neutral Value" SG_ 3221225472 TQTMDYN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TQTMDYN "CK,JK,FK,DX : 320h +FKk2,DZ : 7E4h +HG,JG : FFFh +other : FFEh"; +BA_ "Invalid Value" SG_ 3221225472 TQTMSTA "CVT : I = FFFh +AT : -"; +BA_ "Neutral Value" SG_ 3221225472 TQTMSTA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TQTMSTA "CK,JK,FK,DX : 320h +FKk2,DZ : 0h +HG?JG : FFFh +other : FFEh"; +BA_ "Invalid Value" SG_ 3221225472 NEXTGP "-"; +BA_ "Neutral Value" SG_ 3221225472 NEXTGP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NEXTGP "000b"; +BA_ "Invalid Value" SG_ 3221225472 AT_TorqueRequestInProgress "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_TorqueRequestInProgress "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_TorqueRequestInProgress "000b"; +BA_ "Invalid Value" SG_ 3221225472 ONLUFLG_SMLUFLG "-"; +BA_ "Neutral Value" SG_ 3221225472 ONLUFLG_SMLUFLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ONLUFLG_SMLUFLG "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 TORQUE_LOSSES "FFh"; +BA_ "Neutral Value" SG_ 3221225472 TORQUE_LOSSES "-"; +BA_ "Invalid Value" SG_ 3221225472 TORQUE_LOSSES "FFh"; +BA_ "Invalid Value" SG_ 3221225472 EX_BK_INH_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 EX_BK_INH_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EX_BK_INH_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 AT_Req_ECO_mode_menu "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_Req_ECO_mode_menu "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_Req_ECO_mode_menu "0b"; +BA_ "Invalid Value" SG_ 3221225472 AT_Req_NAVI_SHIFT_menu "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_Req_NAVI_SHIFT_menu "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_Req_NAVI_SHIFT_menu "0b"; +BA_ "Invalid Value" SG_ 3221225472 DriveMode_Status "-"; +BA_ "Neutral Value" SG_ 3221225472 DriveMode_Status "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 DriveMode_Status "0b"; +BA_ "Invalid Value" SG_ 3221225472 LNTIR "-"; +BA_ "Neutral Value" SG_ 3221225472 LNTIR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LNTIR "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 LIMIT_VOL_CTRL "0b"; +BA_ "Neutral Value" SG_ 3221225472 LIMIT_VOL_CTRL "-"; +BA_ "Invalid Value" SG_ 3221225472 LIMIT_VOL_CTRL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_ACS_4 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_ACS_4 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_ACS_4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_ACS_3 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_ACS_3 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_ACS_3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_ACS_2 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_ACS_2 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_ACS_2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_ACS_1 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_ACS_1 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_ACS_1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_SET_8 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_SET_8 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_SET_8 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_SET_7 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_SET_7 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_SET_7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_SET_6 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_SET_6 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_SET_6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_SET_5 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_SET_5 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_SET_5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_SET_4 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_SET_4 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_SET_4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_SET_3 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_SET_3 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_SET_3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_SET_2 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_SET_2 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_SET_2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_DEST_SET_1 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_DEST_SET_1 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_DEST_SET_1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_ACS_4 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_ACS_4 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_ACS_4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_ACS_3 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_ACS_3 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_ACS_3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_ACS_2 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_ACS_2 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_ACS_2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_ACS_1 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_ACS_1 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_ACS_1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_SET_8 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_SET_8 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_SET_8 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_SET_7 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_SET_7 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_SET_7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_SET_6 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_SET_6 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_SET_6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_SET_5 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_SET_5 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_SET_5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_SET_4 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_SET_4 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_SET_4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_SET_3 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_SET_3 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_SET_3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_SET_2 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_SET_2 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_SET_2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CPY_SOUR_SET_1 "0b"; +BA_ "Neutral Value" SG_ 3221225472 CPY_SOUR_SET_1 "-"; +BA_ "Invalid Value" SG_ 3221225472 CPY_SOUR_SET_1 "-"; +BA_ "Invalid Value" SG_ 3221225472 DEL_ACS_OPERATE "-"; +BA_ "Neutral Value" SG_ 3221225472 DEL_ACS_OPERATE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DEL_ACS_OPERATE "0b"; +BA_ "Invalid Value" SG_ 3221225472 DEL_SET_OPERATE "-"; +BA_ "Neutral Value" SG_ 3221225472 DEL_SET_OPERATE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DEL_SET_OPERATE "0b"; +BA_ "Invalid Value" SG_ 3221225472 ACS_NUM_SELECT "-"; +BA_ "Neutral Value" SG_ 3221225472 ACS_NUM_SELECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACS_NUM_SELECT "000b"; +BA_ "Invalid Value" SG_ 3221225472 SDS_NUM_SELECT "-"; +BA_ "Neutral Value" SG_ 3221225472 SDS_NUM_SELECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SDS_NUM_SELECT "000b"; +BA_ "Invalid Value" SG_ 3221225472 SUS_NUM_SELECT "-"; +BA_ "Neutral Value" SG_ 3221225472 SUS_NUM_SELECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUS_NUM_SELECT "000b"; +BA_ "Invalid Value" SG_ 3221225472 RES_NUM_SELECT "-"; +BA_ "Neutral Value" SG_ 3221225472 RES_NUM_SELECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RES_NUM_SELECT "000b"; +BA_ "Invalid Value" SG_ 3221225472 SET_NUM_SELECT "-"; +BA_ "Neutral Value" SG_ 3221225472 SET_NUM_SELECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SET_NUM_SELECT "000b"; +BA_ "Invalid Value" SG_ 3221225472 ACS_VOL_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 ACS_VOL_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACS_VOL_SW "0b"; +BA_ "Invalid Value" SG_ 3221225472 ACS_VOL_UD "-"; +BA_ "Neutral Value" SG_ 3221225472 ACS_VOL_UD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACS_VOL_UD "0b"; +BA_ "Invalid Value" SG_ 3221225472 STRT_SHUT_VOL_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 STRT_SHUT_VOL_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRT_SHUT_VOL_SW "0b"; +BA_ "Invalid Value" SG_ 3221225472 STRT_SHUT_VOL_UD "-"; +BA_ "Neutral Value" SG_ 3221225472 STRT_SHUT_VOL_UD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRT_SHUT_VOL_UD "0b"; +BA_ "Invalid Value" SG_ 3221225472 ACS_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 ACS_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACS_SW "0b"; +BA_ "Invalid Value" SG_ 3221225472 STRT_SHUT_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 STRT_SHUT_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRT_SHUT_SW "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOUND_SETTING_SELECT "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND_SETTING_SELECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND_SETTING_SELECT "00b"; +BA_ "Invalid Value" SG_ 3221225472 INITIAL "-"; +BA_ "Neutral Value" SG_ 3221225472 INITIAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INITIAL "1b"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_3 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_SET_LIST_3 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_1 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_SET_LIST_1 "-"; +BA_ "Invalid Value" SG_ 3221225472 WARN_STATUS_CPY_DEL "-"; +BA_ "Neutral Value" SG_ 3221225472 WARN_STATUS_CPY_DEL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARN_STATUS_CPY_DEL "-"; +BA_ "Invalid Value" SG_ 3221225472 WARN_STATUS_CPY_DEL_CHANGE "-"; +BA_ "Neutral Value" SG_ 3221225472 WARN_STATUS_CPY_DEL_CHANGE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARN_STATUS_CPY_DEL_CHANGE "-"; +BA_ "Invalid Value" SG_ 3221225472 WARN_STATUS_SD "-"; +BA_ "Neutral Value" SG_ 3221225472 WARN_STATUS_SD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARN_STATUS_SD "-"; +BA_ "Invalid Value" SG_ 3221225472 WARN_STATUS_SD_CHANGE "-"; +BA_ "Neutral Value" SG_ 3221225472 WARN_STATUS_SD_CHANGE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARN_STATUS_SD_CHANGE "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_ACS_LIST_4 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_ACS_LIST_4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_ACS_LIST_4 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_ACS_LIST_3 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_ACS_LIST_3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_ACS_LIST_3 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_ACS_LIST_2 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_ACS_LIST_2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_ACS_LIST_2 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_ACS_LIST_1 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_ACS_LIST_1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_ACS_LIST_1 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_8 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_8 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_SET_LIST_8 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_7 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_SET_LIST_7 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_6 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_SET_LIST_6 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_5 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_SET_LIST_5 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_4 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_SET_LIST_4 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_2 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_EXT_SET_LIST_2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_EXT_SET_LIST_2 "-"; +BA_ "Invalid Value" SG_ 3221225472 ACS_IND_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 ACS_IND_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACS_IND_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 SDS_IND_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 SDS_IND_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SDS_IND_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 SUS_IND_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 SUS_IND_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUS_IND_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 RES_IND_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 RES_IND_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RES_IND_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 SET_IND_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 SET_IND_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SET_IND_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_ACS_LIST_4 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_ACS_LIST_4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_ACS_LIST_4 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_ACS_LIST_3 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_ACS_LIST_3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_ACS_LIST_3 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_ACS_LIST_2 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_ACS_LIST_2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_ACS_LIST_2 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_ACS_LIST_1 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_ACS_LIST_1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_ACS_LIST_1 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_SET_LIST_8 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_SET_LIST_8 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_SET_LIST_8 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_SET_LIST_7 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_SET_LIST_7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_SET_LIST_7 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_SET_LIST_6 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_SET_LIST_6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_SET_LIST_6 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_SET_LIST_5 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_SET_LIST_5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_SET_LIST_5 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_SET_LIST_4 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_SET_LIST_4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_SET_LIST_4 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_SET_LIST_3 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_SET_LIST_3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_SET_LIST_3 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_SET_LIST_1 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_SET_LIST_1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_SET_LIST_1 "-"; +BA_ "Invalid Value" SG_ 3221225472 AVAIL_SET_LIST_2 "-"; +BA_ "Neutral Value" SG_ 3221225472 AVAIL_SET_LIST_2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVAIL_SET_LIST_2 "-"; +BA_ "Invalid Value" SG_ 3221225472 ACS_VOL_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 ACS_VOL_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACS_VOL_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 STRT_SHUT_VOL_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 STRT_SHUT_VOL_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRT_SHUT_VOL_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 ACS_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 ACS_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACS_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 STRT_SHUT_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 STRT_SHUT_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRT_SHUT_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 USR_CST_AVAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 USR_CST_AVAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USR_CST_AVAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND_SETTING_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND_SETTING_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND_SETTING_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 RE_SET_TPMS "-"; +BA_ "Neutral Value" SG_ 3221225472 RE_SET_TPMS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RE_SET_TPMS "-"; +BA_ "Invalid Value" SG_ 3221225472 SELECT_PRESS_SUPPORT "-"; +BA_ "Neutral Value" SG_ 3221225472 SELECT_PRESS_SUPPORT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELECT_PRESS_SUPPORT "-"; +BA_ "Invalid Value" SG_ 3221225472 ASCDON_DISP "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDON_DISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDON_DISP "000b"; +BA_ "Invalid Value" SG_ 3221225472 SPDBLREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SPDBLREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPDBLREQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 SPDREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SPDREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPDREQ "FEh"; +BA_ "FirstFrameValue" SG_ 3221225472 DATABYTE7 "-"; +BA_ "Neutral Value" SG_ 3221225472 DATABYTE7 "-"; +BA_ "Invalid Value" SG_ 3221225472 DATABYTE7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATABYTE6 "-"; +BA_ "Neutral Value" SG_ 3221225472 DATABYTE6 "-"; +BA_ "Invalid Value" SG_ 3221225472 DATABYTE6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATABYTE5 "-"; +BA_ "Neutral Value" SG_ 3221225472 DATABYTE5 "-"; +BA_ "Invalid Value" SG_ 3221225472 DATABYTE5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATABYTE3 "-"; +BA_ "Neutral Value" SG_ 3221225472 DATABYTE3 "-"; +BA_ "Invalid Value" SG_ 3221225472 DATABYTE3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATABYTE4 "-"; +BA_ "Neutral Value" SG_ 3221225472 DATABYTE4 "-"; +BA_ "Invalid Value" SG_ 3221225472 DATABYTE4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATABYTE2 "-"; +BA_ "Neutral Value" SG_ 3221225472 DATABYTE2 "-"; +BA_ "Invalid Value" SG_ 3221225472 DATABYTE2 "-"; +BA_ "Invalid Value" SG_ 3221225472 BRKLMPOFFRLY_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 BRKLMPOFFRLY_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRKLMPOFFRLY_FAIL "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 EGTRQMX "000h"; +BA_ "Neutral Value" SG_ 3221225472 EGTRQMX "-"; +BA_ "Invalid Value" SG_ 3221225472 EGTRQMX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRQVTL "000h"; +BA_ "Neutral Value" SG_ 3221225472 TRQVTL "-"; +BA_ "Invalid Value" SG_ 3221225472 TRQVTL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STAT_CHG_REQ_TPMS "000000b"; +BA_ "Neutral Value" SG_ 3221225472 STAT_CHG_REQ_TPMS "-"; +BA_ "Invalid Value" SG_ 3221225472 STAT_CHG_REQ_TPMS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ILL_CONT_DUTY "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 ILL_CONT_DUTY "-"; +BA_ "Invalid Value" SG_ 3221225472 ILL_CONT_DUTY "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 TPMS_RST "-"; +BA_ "Neutral Value" SG_ 3221225472 TPMS_RST "-"; +BA_ "Invalid Value" SG_ 3221225472 TPMS_RST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STAT_CHG_REQ_IDM "00000b"; +BA_ "Neutral Value" SG_ 3221225472 STAT_CHG_REQ_IDM "-"; +BA_ "Invalid Value" SG_ 3221225472 STAT_CHG_REQ_IDM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ICCExistance "0b"; +BA_ "Neutral Value" SG_ 3221225472 ICCExistance "-"; +BA_ "Invalid Value" SG_ 3221225472 ICCExistance "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STAT_CHG_REQ "000000b"; +BA_ "Neutral Value" SG_ 3221225472 STAT_CHG_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 STAT_CHG_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 BRKLMPOFFRLYD "-"; +BA_ "Neutral Value" SG_ 3221225472 BRKLMPOFFRLYD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRKLMPOFFRLYD "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 CHKSUM "-"; +BA_ "Neutral Value" SG_ 3221225472 CHKSUM "-"; +BA_ "Invalid Value" SG_ 3221225472 CHKSUM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGCOUNT "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGCOUNT "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGCOUNT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BMCREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 BMCREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 BMCREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BMCTRQ "1F4h"; +BA_ "Neutral Value" SG_ 3221225472 BMCTRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 BMCTRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARN_SOUND_VOL "00b"; +BA_ "Neutral Value" SG_ 3221225472 WARN_SOUND_VOL "-"; +BA_ "Invalid Value" SG_ 3221225472 WARN_SOUND_VOL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BSW_FAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 BSW_FAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 BSW_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_D_BS_ADAS "00b"; +BA_ "Neutral Value" SG_ 3221225472 STS_D_BS_ADAS "-"; +BA_ "Invalid Value" SG_ 3221225472 STS_D_BS_ADAS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_D_LN_ADAS "00b"; +BA_ "Neutral Value" SG_ 3221225472 STS_D_LN_ADAS "-"; +BA_ "Invalid Value" SG_ 3221225472 STS_D_LN_ADAS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_W_LN_ADAS "00b"; +BA_ "Neutral Value" SG_ 3221225472 STS_W_LN_ADAS "-"; +BA_ "Invalid Value" SG_ 3221225472 STS_W_LN_ADAS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRG_SW_FAILURE "-"; +BA_ "Neutral Value" SG_ 3221225472 STRG_SW_FAILURE "-"; +BA_ "Invalid Value" SG_ 3221225472 STRG_SW_FAILURE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ADAS_HW_FAILURE "-"; +BA_ "Neutral Value" SG_ 3221225472 ADAS_HW_FAILURE "-"; +BA_ "Invalid Value" SG_ 3221225472 ADAS_HW_FAILURE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_WARN "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_WARN "-"; +BA_ "Invalid Value" SG_ 3221225472 DIST_WARN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IBA_ACT "-"; +BA_ "Neutral Value" SG_ 3221225472 IBA_ACT "-"; +BA_ "Invalid Value" SG_ 3221225472 IBA_ACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_ACT "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_ACT "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_ACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDM_LDP_BSI_ACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 IDM_LDP_BSI_ACT "-"; +BA_ "Invalid Value" SG_ 3221225472 IDM_LDP_BSI_ACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BSI_F_OFF "0b"; +BA_ "Neutral Value" SG_ 3221225472 BSI_F_OFF "-"; +BA_ "Invalid Value" SG_ 3221225472 BSI_F_OFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDP_F_OFF "0b"; +BA_ "Neutral Value" SG_ 3221225472 LDP_F_OFF "-"; +BA_ "Invalid Value" SG_ 3221225472 LDP_F_OFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WRN_LN_R "0b"; +BA_ "Neutral Value" SG_ 3221225472 WRN_LN_R "-"; +BA_ "Invalid Value" SG_ 3221225472 WRN_LN_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WRN_LN_L "0b"; +BA_ "Neutral Value" SG_ 3221225472 WRN_LN_L "-"; +BA_ "Invalid Value" SG_ 3221225472 WRN_LN_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_D_BS_IDM "00b"; +BA_ "Neutral Value" SG_ 3221225472 STS_D_BS_IDM "-"; +BA_ "Invalid Value" SG_ 3221225472 STS_D_BS_IDM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_D_LN_IDM "00b"; +BA_ "Neutral Value" SG_ 3221225472 STS_D_LN_IDM "-"; +BA_ "Invalid Value" SG_ 3221225472 STS_D_LN_IDM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_W_LN_IDM "00b"; +BA_ "Neutral Value" SG_ 3221225472 STS_W_LN_IDM "-"; +BA_ "Invalid Value" SG_ 3221225472 STS_W_LN_IDM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BSI_HMI_ORDER_R "0b"; +BA_ "Neutral Value" SG_ 3221225472 BSI_HMI_ORDER_R "-"; +BA_ "Invalid Value" SG_ 3221225472 BSI_HMI_ORDER_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BSI_HMI_ORDER_L "0b"; +BA_ "Neutral Value" SG_ 3221225472 BSI_HMI_ORDER_L "-"; +BA_ "Invalid Value" SG_ 3221225472 BSI_HMI_ORDER_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SI_RDR_BL "0b"; +BA_ "Neutral Value" SG_ 3221225472 SI_RDR_BL "-"; +BA_ "Invalid Value" SG_ 3221225472 SI_RDR_BL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BSI_LC_HT "0b"; +BA_ "Neutral Value" SG_ 3221225472 BSI_LC_HT "-"; +BA_ "Invalid Value" SG_ 3221225472 BSI_LC_HT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDP_LC_HT "0b"; +BA_ "Neutral Value" SG_ 3221225472 LDP_LC_HT "-"; +BA_ "Invalid Value" SG_ 3221225472 LDP_LC_HT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDW_LC_HT "0b"; +BA_ "Neutral Value" SG_ 3221225472 LDW_LC_HT "-"; +BA_ "Invalid Value" SG_ 3221225472 LDW_LC_HT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BSI_BR_C_RSN "00b"; +BA_ "Neutral Value" SG_ 3221225472 BSI_BR_C_RSN "-"; +BA_ "Invalid Value" SG_ 3221225472 BSI_BR_C_RSN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDP_BR_C_RSN "00b"; +BA_ "Neutral Value" SG_ 3221225472 LDP_BR_C_RSN "-"; +BA_ "Invalid Value" SG_ 3221225472 LDP_BR_C_RSN "-"; +BA_ "Invalid Value" SG_ 3221225472 CHECKSUM "-"; +BA_ "Neutral Value" SG_ 3221225472 CHECKSUM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHECKSUM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GIVEIMG "0b"; +BA_ "Neutral Value" SG_ 3221225472 GIVEIMG "-"; +BA_ "Invalid Value" SG_ 3221225472 GIVEIMG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MARK_TYPE_R "000b"; +BA_ "Neutral Value" SG_ 3221225472 MARK_TYPE_R "-"; +BA_ "Invalid Value" SG_ 3221225472 MARK_TYPE_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MARK_TYPE_L "000b"; +BA_ "Neutral Value" SG_ 3221225472 MARK_TYPE_L "-"; +BA_ "Invalid Value" SG_ 3221225472 MARK_TYPE_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFFSET_R_VALID "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFFSET_R_VALID "-"; +BA_ "Invalid Value" SG_ 3221225472 OFFSET_R_VALID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFFSET_L_VALID "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFFSET_L_VALID "-"; +BA_ "Invalid Value" SG_ 3221225472 OFFSET_L_VALID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CURVATURE "0000h"; +BA_ "Neutral Value" SG_ 3221225472 CURVATURE "-"; +BA_ "Invalid Value" SG_ 3221225472 CURVATURE "7FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 OFFSET_R "0000h"; +BA_ "Neutral Value" SG_ 3221225472 OFFSET_R "-"; +BA_ "Invalid Value" SG_ 3221225472 OFFSET_R "1FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 OFFSET_L "0000h"; +BA_ "Neutral Value" SG_ 3221225472 OFFSET_L "-"; +BA_ "Invalid Value" SG_ 3221225472 OFFSET_L "1FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 COMP_ACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 COMP_ACT "-"; +BA_ "Invalid Value" SG_ 3221225472 COMP_ACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 V_APO "00h"; +BA_ "Neutral Value" SG_ 3221225472 V_APO "-"; +BA_ "Invalid Value" SG_ 3221225472 V_APO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VDCFAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 VDCFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 VDCFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VDCACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 VDCACT "-"; +BA_ "Invalid Value" SG_ 3221225472 VDCACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABSACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 ABSACT "-"; +BA_ "Invalid Value" SG_ 3221225472 ABSACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CABRBSW_HCM "HCM_DZ : 0b others : -"; +BA_ "Neutral Value" SG_ 3221225472 CABRBSW_HCM "-"; +BA_ "Invalid Value" SG_ 3221225472 CABRBSW_HCM "-"; +BA_ "Invalid Value" SG_ 3221225472 MSG_CTR "-"; +BA_ "Neutral Value" SG_ 3221225472 MSG_CTR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSG_CTR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HMI_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 HMI_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 HMI_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HMI_SOUND_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 HMI_SOUND_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 HMI_SOUND_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ADAS_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 ADAS_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 ADAS_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND4_VOLUME "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND4_VOLUME "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND4_VOLUME "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND4_STOP "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND4_STOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND4_STOP "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND4_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND4_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND4_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND3_VOLUME "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND3_VOLUME "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND3_VOLUME "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND3_STOP "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND3_STOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND3_STOP "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND3_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND3_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND3_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND2_VOLUME "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND2_VOLUME "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND2_VOLUME "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND2_STOP "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND2_STOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND2_STOP "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND2_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND2_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND2_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND1_VOLUME "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND1_VOLUME "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND1_VOLUME "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND1_STOP "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND1_STOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND1_STOP "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND1_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND1_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND1_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 IDM_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 IDM_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDM_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHCKSUM "-"; +BA_ "Neutral Value" SG_ 3221225472 CHCKSUM "-"; +BA_ "Invalid Value" SG_ 3221225472 CHCKSUM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGCNT "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGCNT "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGCNT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REGENTGTQU "-"; +BA_ "Neutral Value" SG_ 3221225472 REGENTGTQU "-"; +BA_ "Invalid Value" SG_ 3221225472 REGENTGTQU "10b"; +BA_ "FirstFrameValue" SG_ 3221225472 BLSPTSQU "-"; +BA_ "Neutral Value" SG_ 3221225472 BLSPTSQU "11b"; +BA_ "Invalid Value" SG_ 3221225472 BLSPTSQU "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BLSPTS "-"; +BA_ "Neutral Value" SG_ 3221225472 BLSPTS "-"; +BA_ "Invalid Value" SG_ 3221225472 BLSPTS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 P_BuQU "-"; +BA_ "Neutral Value" SG_ 3221225472 P_BuQU "10b"; +BA_ "Invalid Value" SG_ 3221225472 P_BuQU "-"; +BA_ "FirstFrameValue" SG_ 3221225472 P_Bu "-"; +BA_ "Neutral Value" SG_ 3221225472 P_Bu "-"; +BA_ "Invalid Value" SG_ 3221225472 P_Bu "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BSVFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 BSVFAIL "1b"; +BA_ "Invalid Value" SG_ 3221225472 BSVFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FXTGTDRVQU "-"; +BA_ "Neutral Value" SG_ 3221225472 FXTGTDRVQU "-"; +BA_ "Invalid Value" SG_ 3221225472 FXTGTDRVQU "011b"; +BA_ "FirstFrameValue" SG_ 3221225472 Acmh_state "-"; +BA_ "Neutral Value" SG_ 3221225472 Acmh_state "-"; +BA_ "Invalid Value" SG_ 3221225472 Acmh_state "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DLCFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 DLCFAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 DLCFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FXTGTDRV "-"; +BA_ "Neutral Value" SG_ 3221225472 FXTGTDRV "-"; +BA_ "Invalid Value" SG_ 3221225472 FXTGTDRV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REGENTGT "-"; +BA_ "Neutral Value" SG_ 3221225472 REGENTGT "-"; +BA_ "Invalid Value" SG_ 3221225472 REGENTGT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VEHHEV "-"; +BA_ "Neutral Value" SG_ 3221225472 VEHHEV "0000h"; +BA_ "Invalid Value" SG_ 3221225472 VEHHEV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FXTGTEXQU "-"; +BA_ "Neutral Value" SG_ 3221225472 FXTGTEXQU "-"; +BA_ "Invalid Value" SG_ 3221225472 FXTGTEXQU "10b"; +BA_ "FirstFrameValue" SG_ 3221225472 FXTGTEXAc "-"; +BA_ "Neutral Value" SG_ 3221225472 FXTGTEXAc "0b"; +BA_ "Invalid Value" SG_ 3221225472 FXTGTEXAc "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FXTGTEX "-"; +BA_ "Neutral Value" SG_ 3221225472 FXTGTEX "-"; +BA_ "Invalid Value" SG_ 3221225472 FXTGTEX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABSAVAI "-"; +BA_ "Neutral Value" SG_ 3221225472 ABSAVAI "0b"; +BA_ "Invalid Value" SG_ 3221225472 ABSAVAI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STNDSTILLSTS "-"; +BA_ "Neutral Value" SG_ 3221225472 STNDSTILLSTS "1b"; +BA_ "Invalid Value" SG_ 3221225472 STNDSTILLSTS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STNDSTILL "-"; +BA_ "Neutral Value" SG_ 3221225472 STNDSTILL "0b"; +BA_ "Invalid Value" SG_ 3221225472 STNDSTILL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STABMRGN_Quali "-"; +BA_ "Neutral Value" SG_ 3221225472 STABMRGN_Quali "-"; +BA_ "Invalid Value" SG_ 3221225472 STABMRGN_Quali "010b"; +BA_ "FirstFrameValue" SG_ 3221225472 STAB_MRGN "-"; +BA_ "Neutral Value" SG_ 3221225472 STAB_MRGN "00h"; +BA_ "Invalid Value" SG_ 3221225472 STAB_MRGN "-"; +BA_ "Invalid Value" SG_ 3221225472 DataByte7 "-"; +BA_ "Neutral Value" SG_ 3221225472 DataByte7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DataByte7 "-"; +BA_ "Invalid Value" SG_ 3221225472 DataByte6 "-"; +BA_ "Neutral Value" SG_ 3221225472 DataByte6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DataByte6 "-"; +BA_ "Invalid Value" SG_ 3221225472 DataByte5 "-"; +BA_ "Neutral Value" SG_ 3221225472 DataByte5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DataByte5 "-"; +BA_ "Invalid Value" SG_ 3221225472 DataByte4 "-"; +BA_ "Neutral Value" SG_ 3221225472 DataByte4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DataByte4 "-"; +BA_ "Invalid Value" SG_ 3221225472 DataByte3 "-"; +BA_ "Neutral Value" SG_ 3221225472 DataByte3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DataByte3 "-"; +BA_ "Invalid Value" SG_ 3221225472 DataByte2 "-"; +BA_ "Neutral Value" SG_ 3221225472 DataByte2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DataByte2 "-"; +BA_ "Invalid Value" SG_ 3221225472 DataByte1 "-"; +BA_ "Neutral Value" SG_ 3221225472 DataByte1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DataByte1 "-"; +BA_ "Invalid Value" SG_ 3221225472 DataByte0 "-"; +BA_ "Neutral Value" SG_ 3221225472 DataByte0 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DataByte0 "-"; +BA_ "Invalid Value" SG_ 3221225472 RUN_AIM_COMPLT "-"; +BA_ "Neutral Value" SG_ 3221225472 RUN_AIM_COMPLT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RUN_AIM_COMPLT "-"; +BA_ "Invalid Value" SG_ 3221225472 DTCT_POSI_VARI_R "-"; +BA_ "Neutral Value" SG_ 3221225472 DTCT_POSI_VARI_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTCT_POSI_VARI_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 DTCT_POSI_VARI_L "-"; +BA_ "Neutral Value" SG_ 3221225472 DTCT_POSI_VARI_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTCT_POSI_VARI_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 RUN_AIM_WORK "-"; +BA_ "Neutral Value" SG_ 3221225472 RUN_AIM_WORK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RUN_AIM_WORK "-"; +BA_ "Invalid Value" SG_ 3221225472 ROAD_AND_VEHICLE_MODEL "-"; +BA_ "Neutral Value" SG_ 3221225472 ROAD_AND_VEHICLE_MODEL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ROAD_AND_VEHICLE_MODEL "00h"; +BA_ "Invalid Value" SG_ 3221225472 AMOUNT_CHAR_R "-"; +BA_ "Neutral Value" SG_ 3221225472 AMOUNT_CHAR_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AMOUNT_CHAR_R "-"; +BA_ "Invalid Value" SG_ 3221225472 AMOUNT_CHAR_L "-"; +BA_ "Neutral Value" SG_ 3221225472 AMOUNT_CHAR_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AMOUNT_CHAR_L "-"; +BA_ "Invalid Value" SG_ 3221225472 DTCT_DISCONTI_3_R "-"; +BA_ "Neutral Value" SG_ 3221225472 DTCT_DISCONTI_3_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTCT_DISCONTI_3_R "-"; +BA_ "Invalid Value" SG_ 3221225472 DTCT_DISCONTI_3_L "-"; +BA_ "Neutral Value" SG_ 3221225472 DTCT_DISCONTI_3_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTCT_DISCONTI_3_L "-"; +BA_ "Invalid Value" SG_ 3221225472 DTCT_DISCONTI_2_R "-"; +BA_ "Neutral Value" SG_ 3221225472 DTCT_DISCONTI_2_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTCT_DISCONTI_2_R "-"; +BA_ "Invalid Value" SG_ 3221225472 DTCT_DISCONTI_2_L "-"; +BA_ "Neutral Value" SG_ 3221225472 DTCT_DISCONTI_2_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTCT_DISCONTI_2_L "-"; +BA_ "Invalid Value" SG_ 3221225472 LDW_STATUS_R "-"; +BA_ "Neutral Value" SG_ 3221225472 LDW_STATUS_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDW_STATUS_R "-"; +BA_ "Invalid Value" SG_ 3221225472 LDW_STATUS_L "-"; +BA_ "Neutral Value" SG_ 3221225472 LDW_STATUS_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDW_STATUS_L "-"; +BA_ "Invalid Value" SG_ 3221225472 MARKER_TYPE_R "-"; +BA_ "Neutral Value" SG_ 3221225472 MARKER_TYPE_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MARKER_TYPE_R "-"; +BA_ "Invalid Value" SG_ 3221225472 MARKER_TYPE_L "-"; +BA_ "Neutral Value" SG_ 3221225472 MARKER_TYPE_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MARKER_TYPE_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIAG_STATUS "000b"; +BA_ "Neutral Value" SG_ 3221225472 DIAG_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 DIAG_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 YAW_ANGLE "000h"; +BA_ "Neutral Value" SG_ 3221225472 YAW_ANGLE "-"; +BA_ "Invalid Value" SG_ 3221225472 YAW_ANGLE "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 DTCT_DISCONTI_1_R "0b"; +BA_ "Neutral Value" SG_ 3221225472 DTCT_DISCONTI_1_R "-"; +BA_ "Invalid Value" SG_ 3221225472 DTCT_DISCONTI_1_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTCT_DISCONTI_1_L "0b"; +BA_ "Neutral Value" SG_ 3221225472 DTCT_DISCONTI_1_L "-"; +BA_ "Invalid Value" SG_ 3221225472 DTCT_DISCONTI_1_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MARKER_VALID_R "0b"; +BA_ "Neutral Value" SG_ 3221225472 MARKER_VALID_R "-"; +BA_ "Invalid Value" SG_ 3221225472 MARKER_VALID_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MARKER_VALID_L "0b"; +BA_ "Neutral Value" SG_ 3221225472 MARKER_VALID_L "-"; +BA_ "Invalid Value" SG_ 3221225472 MARKER_VALID_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRIAC_TEMP_HVAC_degF "-"; +BA_ "Neutral Value" SG_ 3221225472 PRIAC_TEMP_HVAC_degF "-"; +BA_ "Invalid Value" SG_ 3221225472 PRIAC_TEMP_HVAC_degF "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 PRIAC_TEMP_HVAC_degC "-"; +BA_ "Neutral Value" SG_ 3221225472 PRIAC_TEMP_HVAC_degC "-"; +BA_ "Invalid Value" SG_ 3221225472 PRIAC_TEMP_HVAC_degC "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 INTERRUPT_DISP "-"; +BA_ "Neutral Value" SG_ 3221225472 INTERRUPT_DISP "-"; +BA_ "Invalid Value" SG_ 3221225472 INTERRUPT_DISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TURN_EFFECT "-"; +BA_ "Neutral Value" SG_ 3221225472 TURN_EFFECT "-"; +BA_ "Invalid Value" SG_ 3221225472 TURN_EFFECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAR_EFFECT "-"; +BA_ "Neutral Value" SG_ 3221225472 CAR_EFFECT "-"; +BA_ "Invalid Value" SG_ 3221225472 CAR_EFFECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASA_SETTINGS "-"; +BA_ "Neutral Value" SG_ 3221225472 ASA_SETTINGS "-"; +BA_ "Invalid Value" SG_ 3221225472 ASA_SETTINGS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ADA1_SETTINGS "-"; +BA_ "Neutral Value" SG_ 3221225472 ADA1_SETTINGS "-"; +BA_ "Invalid Value" SG_ 3221225472 ADA1_SETTINGS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_TIRE_EFFECT "-"; +BA_ "Neutral Value" SG_ 3221225472 RR_TIRE_EFFECT "-"; +BA_ "Invalid Value" SG_ 3221225472 RR_TIRE_EFFECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RL_TIRE_EFFECT "-"; +BA_ "Neutral Value" SG_ 3221225472 RL_TIRE_EFFECT "-"; +BA_ "Invalid Value" SG_ 3221225472 RL_TIRE_EFFECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_TIRE_EFFECT "-"; +BA_ "Neutral Value" SG_ 3221225472 FR_TIRE_EFFECT "-"; +BA_ "Invalid Value" SG_ 3221225472 FR_TIRE_EFFECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FL_TIRE_EFFECT "-"; +BA_ "Neutral Value" SG_ 3221225472 FL_TIRE_EFFECT "-"; +BA_ "Invalid Value" SG_ 3221225472 FL_TIRE_EFFECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDM_BUZZER "-"; +BA_ "Neutral Value" SG_ 3221225472 IDM_BUZZER "-"; +BA_ "Invalid Value" SG_ 3221225472 IDM_BUZZER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MODE_SELECT "000b"; +BA_ "Neutral Value" SG_ 3221225472 MODE_SELECT "-"; +BA_ "Invalid Value" SG_ 3221225472 MODE_SELECT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SMB_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 SMB_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 SMB_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDM_LAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 IDM_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 IDM_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SSA_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 SSA_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 SSA_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SSA_SETTINGS "-"; +BA_ "Neutral Value" SG_ 3221225472 SSA_SETTINGS "-"; +BA_ "Invalid Value" SG_ 3221225472 SSA_SETTINGS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SMB_CTRL_LEVEL "0000b"; +BA_ "Neutral Value" SG_ 3221225472 SMB_CTRL_LEVEL "-"; +BA_ "Invalid Value" SG_ 3221225472 SMB_CTRL_LEVEL "-"; +BA_ "Invalid Value" SG_ 3221225472 SBW_STRSPD "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 SBW_STRSPD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SBW_STRSPD "000h"; +BA_ "Invalid Value" SG_ 3221225472 REF_ANG_SBW "7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 REF_ANG_SBW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REF_ANG_SBW "0000h"; +BA_ "Invalid Value" SG_ 3221225472 SHAFT_FORCE "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 SHAFT_FORCE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SHAFT_FORCE "000h"; +BA_ "Invalid Value" SG_ 3221225472 FFB_ANG_OFST_REQ "7FFFFh"; +BA_ "Neutral Value" SG_ 3221225472 FFB_ANG_OFST_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FFB_ANG_OFST_REQ "00000h"; +BA_ "Invalid Value" SG_ 3221225472 OFFSET_FORCE_REQ "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 OFFSET_FORCE_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFFSET_FORCE_REQ "000h"; +BA_ "Invalid Value" SG_ 3221225472 F_REQ_SMB "-"; +BA_ "Neutral Value" SG_ 3221225472 F_REQ_SMB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 F_REQ_SMB "0b"; +BA_ "Invalid Value" SG_ 3221225472 F_REQ_LDP "-"; +BA_ "Neutral Value" SG_ 3221225472 F_REQ_LDP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 F_REQ_LDP "0b"; +BA_ "Invalid Value" SG_ 3221225472 F_REQ_BSI "-"; +BA_ "Neutral Value" SG_ 3221225472 F_REQ_BSI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 F_REQ_BSI "0b"; +BA_ "Invalid Value" SG_ 3221225472 SYS_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 SYS_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SYS_STATUS "0000b"; +BA_ "Invalid Value" SG_ 3221225472 DAMPING_FACTOR "7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 DAMPING_FACTOR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DAMPING_FACTOR "0000h"; +BA_ "Invalid Value" SG_ 3221225472 TRQ_REQ "7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 TRQ_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRQ_REQ "0000h"; +BA_ "Invalid Value" SG_ 3221225472 ANG_REQ "7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 ANG_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ANG_REQ "0000h"; +BA_ "Invalid Value" SG_ 3221225472 MODE_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 MODE_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MODE_STATUS "00b"; +BA_ "Invalid Value" SG_ 3221225472 MODE_TRANSITION "-"; +BA_ "Neutral Value" SG_ 3221225472 MODE_TRANSITION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MODE_TRANSITION "0b"; +BA_ "Invalid Value" SG_ 3221225472 CMDFAIL_SMB "-"; +BA_ "Neutral Value" SG_ 3221225472 CMDFAIL_SMB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CMDFAIL_SMB "0b"; +BA_ "Invalid Value" SG_ 3221225472 INH_SMB "-"; +BA_ "Neutral Value" SG_ 3221225472 INH_SMB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INH_SMB "0b"; +BA_ "Invalid Value" SG_ 3221225472 SBWFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 SBWFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SBWFAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 FFB_IQ_CRNT "7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 FFB_IQ_CRNT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FFB_IQ_CRNT "0000h"; +BA_ "Invalid Value" SG_ 3221225472 FFB_ANG "7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 FFB_ANG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FFB_ANG "0000h"; +BA_ "Invalid Value" SG_ 3221225472 PINION_ANG "7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 PINION_ANG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PINION_ANG "7FFFh"; +BA_ "Invalid Value" SG_ 3221225472 OUT_TEMP "Fh"; +BA_ "Neutral Value" SG_ 3221225472 OUT_TEMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OUT_TEMP "Fh"; +BA_ "Invalid Value" SG_ 3221225472 CAM_PITCH "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 CAM_PITCH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAM_PITCH "3Fh"; +BA_ "Invalid Value" SG_ 3221225472 CAM_LAT_POSI "000h"; +BA_ "Neutral Value" SG_ 3221225472 CAM_LAT_POSI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAM_LAT_POSI "000h"; +BA_ "Invalid Value" SG_ 3221225472 CAM_HEIGH "00h"; +BA_ "Neutral Value" SG_ 3221225472 CAM_HEIGH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAM_HEIGH "00h"; +BA_ "Invalid Value" SG_ 3221225472 CAM_DIST "00h"; +BA_ "Neutral Value" SG_ 3221225472 CAM_DIST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAM_DIST "00h"; +BA_ "Invalid Value" SG_ 3221225472 VEHI_WIDE "1FFh"; +BA_ "Neutral Value" SG_ 3221225472 VEHI_WIDE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VEHI_WIDE "1FFh"; +BA_ "Invalid Value" SG_ 3221225472 VEHI_TYPE "0000b"; +BA_ "Neutral Value" SG_ 3221225472 VEHI_TYPE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VEHI_TYPE "0000b"; +BA_ "Invalid Value" SG_ 3221225472 MARKET_INFO "00000000b"; +BA_ "Neutral Value" SG_ 3221225472 MARKET_INFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MARKET_INFO "00000000b"; +BA_ "Invalid Value" SG_ 3221225472 TURN_SIG "-"; +BA_ "Neutral Value" SG_ 3221225472 TURN_SIG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TURN_SIG "00b"; +BA_ "Invalid Value" SG_ 3221225472 WIPER "11b"; +BA_ "Neutral Value" SG_ 3221225472 WIPER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WIPER "00b"; +BA_ "Invalid Value" SG_ 3221225472 VSP "0000h"; +BA_ "Neutral Value" SG_ 3221225472 VSP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VSP "0000h"; +BA_ "Invalid Value" SG_ 3221225472 YAW_RATE_02 "FFFh"; +BA_ "Neutral Value" SG_ 3221225472 YAW_RATE_02 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 YAW_RATE_02 "FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CSTR_ASA "-"; +BA_ "Neutral Value" SG_ 3221225472 CSTR_ASA "-"; +BA_ "Invalid Value" SG_ 3221225472 CSTR_ASA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LOGIN_PERM_FLAG "-"; +BA_ "Neutral Value" SG_ 3221225472 LOGIN_PERM_FLAG "-"; +BA_ "Invalid Value" SG_ 3221225472 LOGIN_PERM_FLAG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LOGIN_KEYLMK_STAT "-"; +BA_ "Neutral Value" SG_ 3221225472 LOGIN_KEYLMK_STAT "-"; +BA_ "Invalid Value" SG_ 3221225472 LOGIN_KEYLMK_STAT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CSTR_STG_RES "-"; +BA_ "Neutral Value" SG_ 3221225472 CSTR_STG_RES "-"; +BA_ "Invalid Value" SG_ 3221225472 CSTR_STG_RES "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CSTR_STG_EFO "-"; +BA_ "Neutral Value" SG_ 3221225472 CSTR_STG_EFO "-"; +BA_ "Invalid Value" SG_ 3221225472 CSTR_STG_EFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CSTR_SMB "-"; +BA_ "Neutral Value" SG_ 3221225472 CSTR_SMB "-"; +BA_ "Invalid Value" SG_ 3221225472 CSTR_SMB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CSTR_PT "-"; +BA_ "Neutral Value" SG_ 3221225472 CSTR_PT "-"; +BA_ "Invalid Value" SG_ 3221225472 CSTR_PT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_STG_RES "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_STG_RES "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_STG_RES "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_STG_EFO "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_STG_EFO "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_STG_EFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_SMB "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_SMB "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_SMB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_PT "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_PT "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_PT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_ASA "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_ASA "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_ASA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_STG_RES "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_STG_RES "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_STG_RES "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_STG_EFO "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_STG_EFO "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_STG_EFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_SMB "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_SMB "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_SMB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_PT "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_PT "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_PT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_ASA "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_ASA "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_ASA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_STG_RES "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_STG_RES "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_STG_RES "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_STG_EFO "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_STG_EFO "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_STG_EFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_SMB "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_SMB "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_SMB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_PT "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_PT "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_PT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_ASA "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_ASA "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_ASA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPO_STG_RES "-"; +BA_ "Neutral Value" SG_ 3221225472 SPO_STG_RES "-"; +BA_ "Invalid Value" SG_ 3221225472 SPO_STG_RES "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPO_STG_EFO "-"; +BA_ "Neutral Value" SG_ 3221225472 SPO_STG_EFO "-"; +BA_ "Invalid Value" SG_ 3221225472 SPO_STG_EFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPO_SMB "-"; +BA_ "Neutral Value" SG_ 3221225472 SPO_SMB "-"; +BA_ "Invalid Value" SG_ 3221225472 SPO_SMB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPO_PT "-"; +BA_ "Neutral Value" SG_ 3221225472 SPO_PT "-"; +BA_ "Invalid Value" SG_ 3221225472 SPO_PT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPO_ASA "-"; +BA_ "Neutral Value" SG_ 3221225472 SPO_ASA "-"; +BA_ "Invalid Value" SG_ 3221225472 SPO_ASA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STD_STG_RES "-"; +BA_ "Neutral Value" SG_ 3221225472 STD_STG_RES "-"; +BA_ "Invalid Value" SG_ 3221225472 STD_STG_RES "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STD_STG_EFO "-"; +BA_ "Neutral Value" SG_ 3221225472 STD_STG_EFO "-"; +BA_ "Invalid Value" SG_ 3221225472 STD_STG_EFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STD_SMB "-"; +BA_ "Neutral Value" SG_ 3221225472 STD_SMB "-"; +BA_ "Invalid Value" SG_ 3221225472 STD_SMB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STD_PT "-"; +BA_ "Neutral Value" SG_ 3221225472 STD_PT "-"; +BA_ "Invalid Value" SG_ 3221225472 STD_PT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STD_ASA "-"; +BA_ "Neutral Value" SG_ 3221225472 STD_ASA "-"; +BA_ "Invalid Value" SG_ 3221225472 STD_ASA "-"; +BA_ "Invalid Value" SG_ 3221225472 AHL_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 AHL_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AHL_REQ "11b"; +BA_ "Invalid Value" SG_ 3221225472 AHL_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 AHL_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AHL_FAIL "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_USABLE_SOC "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 LB_USABLE_SOC "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_USABLE_SOC "7Fh"; +BA_ "Invalid Value" SG_ 3221225472 LB_FAN_CON "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_FAN_CON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_FAN_CON "00b"; +BA_ "Invalid Value" SG_ 3221225472 LB_EVA_TMP "FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_EVA_TMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_EVA_TMP "FFh"; +BA_ "Invalid Value" SG_ 3221225472 LB_COOL_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_COOL_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_COOL_REQ "00b"; +BA_ "Invalid Value" SG_ 3221225472 LB_FULLCAPQC "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_FULLCAPQC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_FULLCAPQC "1FFh"; +BA_ "Invalid Value" SG_ 3221225472 LB_CAPRQ "1FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_CAPRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_CAPRQ "1FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 PDMCODE "-"; +BA_ "Neutral Value" SG_ 3221225472 PDMCODE "-"; +BA_ "Invalid Value" SG_ 3221225472 PDMCODE "-"; +BA_ "Invalid Value" SG_ 3221225472 NCSQNO "-"; +BA_ "Neutral Value" SG_ 3221225472 NCSQNO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NCSQNO "-"; +BA_ "Invalid Value" SG_ 3221225472 CHECKSUM393 "-"; +BA_ "Neutral Value" SG_ 3221225472 CHECKSUM393 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHECKSUM393 "-"; +BA_ "Invalid Value" SG_ 3221225472 MPRUN393 "-"; +BA_ "Neutral Value" SG_ 3221225472 MPRUN393 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MPRUN393 "-"; +BA_ "Invalid Value" SG_ 3221225472 FQCPUSHSTPMON "-"; +BA_ "Neutral Value" SG_ 3221225472 FQCPUSHSTPMON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FQCPUSHSTPMON "1b"; +BA_ "Invalid Value" SG_ 3221225472 QCSQNO2MON "-"; +BA_ "Neutral Value" SG_ 3221225472 QCSQNO2MON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 QCSQNO2MON "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 DDC_MON "00b"; +BA_ "Neutral Value" SG_ 3221225472 DDC_MON "-"; +BA_ "Invalid Value" SG_ 3221225472 DDC_MON "-"; +BA_ "Invalid Value" SG_ 3221225472 FQCRELAYST "-"; +BA_ "Neutral Value" SG_ 3221225472 FQCRELAYST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FQCRELAYST "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 FQCFAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 FQCFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 FQCFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FNCFAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 FNCFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 FNCFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FCAUTION "0b"; +BA_ "Neutral Value" SG_ 3221225472 FCAUTION "-"; +BA_ "Invalid Value" SG_ 3221225472 FCAUTION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 QCHGVOLSENSINF "00b"; +BA_ "Neutral Value" SG_ 3221225472 QCHGVOLSENSINF "-"; +BA_ "Invalid Value" SG_ 3221225472 QCHGVOLSENSINF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FNCCONFSRLYINF1 "0b"; +BA_ "Neutral Value" SG_ 3221225472 FNCCONFSRLYINF1 "-"; +BA_ "Invalid Value" SG_ 3221225472 FNCCONFSRLYINF1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FNCCONFSRLYINF2 "0b"; +BA_ "Neutral Value" SG_ 3221225472 FNCCONFSRLYINF2 "-"; +BA_ "Invalid Value" SG_ 3221225472 FNCCONFSRLYINF2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FACTIVTRACK "-"; +BA_ "Neutral Value" SG_ 3221225472 FACTIVTRACK "-"; +BA_ "Invalid Value" SG_ 3221225472 FACTIVTRACK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PCFST "-"; +BA_ "Neutral Value" SG_ 3221225472 PCFST "-"; +BA_ "Invalid Value" SG_ 3221225472 PCFST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACVOLST "-"; +BA_ "Neutral Value" SG_ 3221225472 ACVOLST "-"; +BA_ "Invalid Value" SG_ 3221225472 ACVOLST "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 FFSCRLYONNG "0b"; +BA_ "Neutral Value" SG_ 3221225472 FFSCRLYONNG "-"; +BA_ "Invalid Value" SG_ 3221225472 FFSCRLYONNG "-"; +BA_ "Invalid Value" SG_ 3221225472 FQCIRSENS "-"; +BA_ "Neutral Value" SG_ 3221225472 FQCIRSENS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FQCIRSENS "1b"; +BA_ "Invalid Value" SG_ 3221225472 MAXCHGPOUT "1FFh"; +BA_ "Neutral Value" SG_ 3221225472 MAXCHGPOUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MAXCHGPOUT "021h"; +BA_ "Invalid Value" SG_ 3221225472 FQCCONDET "-"; +BA_ "Neutral Value" SG_ 3221225472 FQCCONDET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FQCCONDET "-"; +BA_ "Invalid Value" SG_ 3221225472 NCCONDET "-"; +BA_ "Neutral Value" SG_ 3221225472 NCCONDET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NCCONDET "-"; +BA_ "Invalid Value" SG_ 3221225472 FQCRELAYON "-"; +BA_ "Neutral Value" SG_ 3221225472 FQCRELAYON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FQCRELAYON "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 CANWAKEPDM "-"; +BA_ "Neutral Value" SG_ 3221225472 CANWAKEPDM "-"; +BA_ "Invalid Value" SG_ 3221225472 CANWAKEPDM "-"; +BA_ "Invalid Value" SG_ 3221225472 FCHGSTPREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 FCHGSTPREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FCHGSTPREQ "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 CHECKSUM390 "-"; +BA_ "Neutral Value" SG_ 3221225472 CHECKSUM390 "-"; +BA_ "Invalid Value" SG_ 3221225472 CHECKSUM390 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHGPWR "000h"; +BA_ "Neutral Value" SG_ 3221225472 CHGPWR "-"; +BA_ "Invalid Value" SG_ 3221225472 CHGPWR "1FFh"; +BA_ "Invalid Value" SG_ 3221225472 CHECK_SUM "-"; +BA_ "Neutral Value" SG_ 3221225472 CHECK_SUM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHECK_SUM "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGCTADAS "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGCTADAS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGCTADAS "-"; +BA_ "Invalid Value" SG_ 3221225472 RADAR_DIST "-"; +BA_ "Neutral Value" SG_ 3221225472 RADAR_DIST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RADAR_DIST "-"; +BA_ "Invalid Value" SG_ 3221225472 SETZ "-"; +BA_ "Neutral Value" SG_ 3221225472 SETZ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SETZ "-"; +BA_ "Invalid Value" SG_ 3221225472 SETY "-"; +BA_ "Neutral Value" SG_ 3221225472 SETY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SETY "-"; +BA_ "Invalid Value" SG_ 3221225472 SETX "-"; +BA_ "Neutral Value" SG_ 3221225472 SETX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SETX "-"; +BA_ "Invalid Value" SG_ 3221225472 CURVE_IN_ACTIVE "-"; +BA_ "Neutral Value" SG_ 3221225472 CURVE_IN_ACTIVE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CURVE_IN_ACTIVE "0b"; +BA_ "Invalid Value" SG_ 3221225472 SETPITCH "-"; +BA_ "Neutral Value" SG_ 3221225472 SETPITCH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SETPITCH "-"; +BA_ "Invalid Value" SG_ 3221225472 width "-"; +BA_ "Neutral Value" SG_ 3221225472 width "-"; +BA_ "FirstFrameValue" SG_ 3221225472 width "-"; +BA_ "Invalid Value" SG_ 3221225472 LDP_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 LDP_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDP_FAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 MARKET "'- (NTC) +I = 00000000b (NTCE)"; +BA_ "Neutral Value" SG_ 3221225472 MARKET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MARKET "'- (NTC) +00000000b (NTCE)"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_SMBSW_OFF "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_SMBSW_OFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_SMBSW_OFF "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_TOUR_SETRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_TOUR_SETRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_TOUR_SETRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_SNOW_SETRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_SNOW_SETRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_SNOW_SETRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_ECO_SETRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_ECO_SETRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_ECO_SETRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_CSTM_SETRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_CSTM_SETRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_CSTM_SETRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SPORT_SMBSW_OFF "-"; +BA_ "Neutral Value" SG_ 3221225472 SPORT_SMBSW_OFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPORT_SMBSW_OFF "-"; +BA_ "Invalid Value" SG_ 3221225472 SPORT_SMBSW_MID "-"; +BA_ "Neutral Value" SG_ 3221225472 SPORT_SMBSW_MID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPORT_SMBSW_MID "-"; +BA_ "Invalid Value" SG_ 3221225472 SPORT_SMBSW_LIGHT "-"; +BA_ "Neutral Value" SG_ 3221225472 SPORT_SMBSW_LIGHT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPORT_SMBSW_LIGHT "-"; +BA_ "Invalid Value" SG_ 3221225472 STD_SMBSW_OFF "-"; +BA_ "Neutral Value" SG_ 3221225472 STD_SMBSW_OFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STD_SMBSW_OFF "-"; +BA_ "Invalid Value" SG_ 3221225472 STD_SMBSW_MID "-"; +BA_ "Neutral Value" SG_ 3221225472 STD_SMBSW_MID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STD_SMBSW_MID "-"; +BA_ "Invalid Value" SG_ 3221225472 STD_SMBSW_LIGHT "-"; +BA_ "Neutral Value" SG_ 3221225472 STD_SMBSW_LIGHT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STD_SMBSW_LIGHT "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_CSTM_SMBSW_OFF "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_CSTM_SMBSW_OFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_CSTM_SMBSW_OFF "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_CSTM_SMBSW_MID "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_CSTM_SMBSW_MID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_CSTM_SMBSW_MID "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_CSTM_SMBSW_LIGHT "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_CSTM_SMBSW_LIGHT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_CSTM_SMBSW_LIGHT "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_ASASW_ON "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_ASASW_ON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_ASASW_ON "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_ASASW_OFF "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_ASASW_OFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_ASASW_OFF "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_TOUR_SMBSW_OFF "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_TOUR_SMBSW_OFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_TOUR_SMBSW_OFF "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_TOUR_SMBSW_MID "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_TOUR_SMBSW_MID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_TOUR_SMBSW_MID "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSNL_TOUR_SMBSW_LIGHT "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSNL_TOUR_SMBSW_LIGHT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSNL_TOUR_SMBSW_LIGHT "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_SMBSW_MID "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_SMBSW_MID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_SMBSW_MID "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_SMBSW_LIGHT "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_SMBSW_LIGHT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_SMBSW_LIGHT "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_SMBSW_OFF "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_SMBSW_OFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_SMBSW_OFF "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_SMBSW_MID "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_SMBSW_MID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_SMBSW_MID "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_SMBSW_LIGHT "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_SMBSW_LIGHT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_SMBSW_LIGHT "-"; +BA_ "Invalid Value" SG_ 3221225472 STRRESPSW_SLOW "-"; +BA_ "Neutral Value" SG_ 3221225472 STRRESPSW_SLOW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRRESPSW_SLOW "-"; +BA_ "Invalid Value" SG_ 3221225472 STRRESPSW_QUICK "-"; +BA_ "Neutral Value" SG_ 3221225472 STRRESPSW_QUICK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRRESPSW_QUICK "-"; +BA_ "Invalid Value" SG_ 3221225472 STRRESPSW_MID "-"; +BA_ "Neutral Value" SG_ 3221225472 STRRESPSW_MID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRRESPSW_MID "-"; +BA_ "Invalid Value" SG_ 3221225472 STREFFRTSW_MID "-"; +BA_ "Neutral Value" SG_ 3221225472 STREFFRTSW_MID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STREFFRTSW_MID "-"; +BA_ "Invalid Value" SG_ 3221225472 STREFFRTSW_LIGHT "-"; +BA_ "Neutral Value" SG_ 3221225472 STREFFRTSW_LIGHT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STREFFRTSW_LIGHT "-"; +BA_ "Invalid Value" SG_ 3221225472 STREFFRTSW_HEAVY "-"; +BA_ "Neutral Value" SG_ 3221225472 STREFFRTSW_HEAVY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STREFFRTSW_HEAVY "-"; +BA_ "Invalid Value" SG_ 3221225472 TRQRESPSW_STD "-"; +BA_ "Neutral Value" SG_ 3221225472 TRQRESPSW_STD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRQRESPSW_STD "-"; +BA_ "Invalid Value" SG_ 3221225472 TRQRESPSW_SPORT "-"; +BA_ "Neutral Value" SG_ 3221225472 TRQRESPSW_SPORT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRQRESPSW_SPORT "-"; +BA_ "Invalid Value" SG_ 3221225472 TRQRESPSW_SNOW "-"; +BA_ "Neutral Value" SG_ 3221225472 TRQRESPSW_SNOW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRQRESPSW_SNOW "-"; +BA_ "Invalid Value" SG_ 3221225472 TRQRESPSW_ECO "-"; +BA_ "Neutral Value" SG_ 3221225472 TRQRESPSW_ECO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRQRESPSW_ECO "-"; +BA_ "Invalid Value" SG_ 3221225472 DRVMODE_SCREEN "-"; +BA_ "Neutral Value" SG_ 3221225472 DRVMODE_SCREEN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DRVMODE_SCREEN "-"; +BA_ "Invalid Value" SG_ 3221225472 COPYNO_TO_USER "-"; +BA_ "Neutral Value" SG_ 3221225472 COPYNO_TO_USER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COPYNO_TO_USER "000b"; +BA_ "Invalid Value" SG_ 3221225472 COPYNO_FR_USER "-"; +BA_ "Neutral Value" SG_ 3221225472 COPYNO_FR_USER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COPYNO_FR_USER "000b"; +BA_ "Invalid Value" SG_ 3221225472 COPYITSSET "-"; +BA_ "Neutral Value" SG_ 3221225472 COPYITSSET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COPYITSSET "-"; +BA_ "Invalid Value" SG_ 3221225472 COPYDRVSET "-"; +BA_ "Neutral Value" SG_ 3221225472 COPYDRVSET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COPYDRVSET "-"; +BA_ "Invalid Value" SG_ 3221225472 USER4CHGSW "-"; +BA_ "Neutral Value" SG_ 3221225472 USER4CHGSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USER4CHGSW "-"; +BA_ "Invalid Value" SG_ 3221225472 USER3CHGSW "-"; +BA_ "Neutral Value" SG_ 3221225472 USER3CHGSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USER3CHGSW "-"; +BA_ "Invalid Value" SG_ 3221225472 USER2CHGSW "-"; +BA_ "Neutral Value" SG_ 3221225472 USER2CHGSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USER2CHGSW "-"; +BA_ "Invalid Value" SG_ 3221225472 USER1CHGSW "-"; +BA_ "Neutral Value" SG_ 3221225472 USER1CHGSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USER1CHGSW "-"; +BA_ "Invalid Value" SG_ 3221225472 CURLOGIN_USERINFO "-"; +BA_ "Neutral Value" SG_ 3221225472 CURLOGIN_USERINFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CURLOGIN_USERINFO "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGCNTR "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGCNTR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGCNTR "0h"; +BA_ "Invalid Value" SG_ 3221225472 DRVMODE_RESETRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 DRVMODE_RESETRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DRVMODE_RESETRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 LOGINKEYLINKSET "-"; +BA_ "Neutral Value" SG_ 3221225472 LOGINKEYLINKSET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LOGINKEYLINKSET "-"; +BA_ "Invalid Value" SG_ 3221225472 USER4_REGINFO "0b"; +BA_ "Neutral Value" SG_ 3221225472 USER4_REGINFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USER4_REGINFO "-"; +BA_ "Invalid Value" SG_ 3221225472 USER3_REGINFO "-"; +BA_ "Neutral Value" SG_ 3221225472 USER3_REGINFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USER3_REGINFO "-"; +BA_ "Invalid Value" SG_ 3221225472 USER2_REGINFO "-"; +BA_ "Neutral Value" SG_ 3221225472 USER2_REGINFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USER2_REGINFO "-"; +BA_ "Invalid Value" SG_ 3221225472 USER1_REGINFO "-"; +BA_ "Neutral Value" SG_ 3221225472 USER1_REGINFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USER1_REGINFO "-"; +BA_ "Invalid Value" SG_ 3221225472 INIT_FLAG "-"; +BA_ "Neutral Value" SG_ 3221225472 INIT_FLAG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INIT_FLAG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_MODE_REQ_TOUR "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_MODE_REQ_TOUR "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_MODE_REQ_TOUR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_MODE_REQ_STD "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_MODE_REQ_STD "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_MODE_REQ_STD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_MODE_REQ_SPO "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_MODE_REQ_SPO "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_MODE_REQ_SPO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_MODE_REQ_SNOW "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_MODE_REQ_SNOW "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_MODE_REQ_SNOW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_MODE_REQ_ECO "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_MODE_REQ_ECO "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_MODE_REQ_ECO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_MODE_REQ_CSTM "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_MODE_REQ_CSTM "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_MODE_REQ_CSTM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CSTM_STGRES_QIK_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CSTM_STGRES_QIK_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CSTM_STGRES_QIK_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CSTM_STGRES_MID_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CSTM_STGRES_MID_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CSTM_STGRES_MID_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CSTM_STGEFO_SLW_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CSTM_STGEFO_SLW_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CSTM_STGEFO_SLW_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CSTM_STGEFO_MID_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CSTM_STGEFO_MID_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CSTM_STGEFO_MID_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CSTM_STGEFO_LGT_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CSTM_STGEFO_LGT_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CSTM_STGEFO_LGT_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CSTM_STGEFO_HVY_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CSTM_STGEFO_HVY_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CSTM_STGEFO_HVY_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_STGRES_QIK_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_STGRES_QIK_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_STGRES_QIK_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_STGRES_MID_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_STGRES_MID_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_STGRES_MID_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_STGEFO_SLW_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_STGEFO_SLW_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_STGEFO_SLW_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_STGEFO_MID_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_STGEFO_MID_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_STGEFO_MID_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_STGEFO_LGT_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_STGEFO_LGT_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_STGEFO_LGT_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_STGEFO_HVY_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_STGEFO_HVY_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_STGEFO_HVY_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_SMB_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_SMB_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_SMB_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_PT_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_PT_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_PT_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOUR_ASA_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TOUR_ASA_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TOUR_ASA_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_STGRES_QIK_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_STGRES_QIK_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_STGRES_QIK_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_STGRES_MID_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_STGRES_MID_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_STGRES_MID_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_STGEFO_SLW_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_STGEFO_SLW_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_STGEFO_SLW_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_STGEFO_MID_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_STGEFO_MID_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_STGEFO_MID_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_STGEFO_LGT_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_STGEFO_LGT_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_STGEFO_LGT_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_STGEFO_HVY_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_STGEFO_HVY_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_STGEFO_HVY_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_SMB_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_SMB_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_SMB_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_PT_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_PT_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_PT_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_ASA_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_ASA_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_ASA_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_SMB_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_SMB_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_SMB_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_ASA_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_ASA_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_ASA_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_STGRES_QIK_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_STGRES_QIK_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_STGRES_QIK_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_STGRES_MID_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_STGRES_MID_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_STGRES_MID_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_STGEFO_SLW_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_STGEFO_SLW_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_STGEFO_SLW_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_STGEFO_MID_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_STGEFO_MID_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_STGEFO_MID_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_STGEFO_LGT_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_STGEFO_LGT_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_STGEFO_LGT_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_STGEFO_HVY_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_STGEFO_HVY_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_STGEFO_HVY_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_PT_HATIREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_PT_HATIREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_PT_HATIREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_SMB_REQ_OFF_STD "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_SMB_REQ_OFF_STD "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_SMB_REQ_OFF_STD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_SMB_REQ_OFF_SPO "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_SMB_REQ_OFF_SPO "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_SMB_REQ_OFF_SPO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_SMB_REQ_OFF_PER "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_SMB_REQ_OFF_PER "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_SMB_REQ_OFF_PER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_SMB_REQ_MID_STD "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_SMB_REQ_MID_STD "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_SMB_REQ_MID_STD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_SMB_REQ_MID_SPO "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_SMB_REQ_MID_SPO "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_SMB_REQ_MID_SPO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_SMB_REQ_MID_PER "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_SMB_REQ_MID_PER "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_SMB_REQ_MID_PER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_SMB_REQ_LGT_STD "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_SMB_REQ_LGT_STD "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_SMB_REQ_LGT_STD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_SMB_REQ_LGT_SPO "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_SMB_REQ_LGT_SPO "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_SMB_REQ_LGT_SPO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_SMB_REQ_LGT_PER "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_SMB_REQ_LGT_PER "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_SMB_REQ_LGT_PER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_STG_REQ_RES "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_STG_REQ_RES "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_STG_REQ_RES "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_STG_REQ_EFO "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_STG_REQ_EFO "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_STG_REQ_EFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_SMB_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_SMB_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_SMB_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_ASA_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_ASA_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_ASA_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_PT_REQ_STD "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_PT_REQ_STD "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_PT_REQ_STD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_PT_REQ_SPO "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_PT_REQ_SPO "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_PT_REQ_SPO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_PT_REQ_SNOW "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_PT_REQ_SNOW "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_PT_REQ_SNOW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISP_PT_REQ_ECO "-"; +BA_ "Neutral Value" SG_ 3221225472 DISP_PT_REQ_ECO "-"; +BA_ "Invalid Value" SG_ 3221225472 DISP_PT_REQ_ECO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SMB_POPREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SMB_POPREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SMB_POPREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DRIVE_MODE_POPREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 DRIVE_MODE_POPREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 DRIVE_MODE_POPREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VEHICLE_DRIVE_MODE "-"; +BA_ "Neutral Value" SG_ 3221225472 VEHICLE_DRIVE_MODE "-"; +BA_ "Invalid Value" SG_ 3221225472 VEHICLE_DRIVE_MODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CURLOGIN_USERNUM_IDM "-"; +BA_ "Neutral Value" SG_ 3221225472 CURLOGIN_USERNUM_IDM "-"; +BA_ "Invalid Value" SG_ 3221225472 CURLOGIN_USERNUM_IDM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DGI_FAIL_FLAG "0b"; +BA_ "Neutral Value" SG_ 3221225472 DGI_FAIL_FLAG "-"; +BA_ "Invalid Value" SG_ 3221225472 DGI_FAIL_FLAG "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_STATUS_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_STATUS_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_STATUS_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MET_DISCHG_ALARM_STA "0h"; +BA_ "Neutral Value" SG_ 3221225472 MET_DISCHG_ALARM_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 MET_DISCHG_ALARM_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_START_M_MET "7h"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_START_M_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_START_M_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_START_H_MET "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_START_H_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_START_H_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 PRUN509 "-"; +BA_ "Neutral Value" SG_ 3221225472 PRUN509 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRUN509 "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_THU_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_THU_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_THU_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_SELCT_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_SELCT_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_SELCT_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 C_TIME_UPDATE_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 C_TIME_UPDATE_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 C_TIME_UPDATE_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_WED_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_WED_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_WED_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_TUE_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_TUE_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_TUE_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_SUN_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_SUN_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_SUN_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_SAT_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_SAT_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_SAT_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_MON_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_MON_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_MON_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_FRI_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_FRI_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_FRI_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_SW_SELECTER_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_SW_SELECTER_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_SW_SELECTER_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 MET_CUR_SEC "-"; +BA_ "Neutral Value" SG_ 3221225472 MET_CUR_SEC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MET_CUR_SEC "-"; +BA_ "Invalid Value" SG_ 3221225472 MET_CUR_MIN "-"; +BA_ "Neutral Value" SG_ 3221225472 MET_CUR_MIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MET_CUR_MIN "-"; +BA_ "Invalid Value" SG_ 3221225472 MET_CUR_H "-"; +BA_ "Neutral Value" SG_ 3221225472 MET_CUR_H "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MET_CUR_H "-"; +BA_ "Invalid Value" SG_ 3221225472 MET_CUR_DAY_W "-"; +BA_ "Neutral Value" SG_ 3221225472 MET_CUR_DAY_W "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MET_CUR_DAY_W "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_STOP_M_MET "7h"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_STOP_M_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_STOP_M_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_STOP_H_MET "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_STOP_H_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_STOP_H_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MCPRS "-"; +BA_ "Neutral Value" SG_ 3221225472 MCPRS "-"; +BA_ "Invalid Value" SG_ 3221225472 MCPRS "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 IRSTRK "-"; +BA_ "Neutral Value" SG_ 3221225472 IRSTRK "-"; +BA_ "Invalid Value" SG_ 3221225472 IRSTRK "3FFh"; +BA_ "Invalid Value" SG_ 3221225472 CheckSum "-"; +BA_ "Neutral Value" SG_ 3221225472 CheckSum "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CheckSum "00h"; +BA_ "Invalid Value" SG_ 3221225472 VDCPURQC "-"; +BA_ "Neutral Value" SG_ 3221225472 VDCPURQC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VDCPURQC "0000b"; +BA_ "Invalid Value" SG_ 3221225472 TGETRQF "-"; +BA_ "Neutral Value" SG_ 3221225472 TGETRQF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TGETRQF "-"; +BA_ "Invalid Value" SG_ 3221225472 TGETFON "-"; +BA_ "Neutral Value" SG_ 3221225472 TGETFON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TGETFON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PMSMODE "-"; +BA_ "Neutral Value" SG_ 3221225472 PMSMODE "-"; +BA_ "Invalid Value" SG_ 3221225472 PMSMODE "-"; +BA_ "Invalid Value" SG_ 3221225472 PRESTP "-"; +BA_ "Neutral Value" SG_ 3221225472 PRESTP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRESTP "0b"; +BA_ "Invalid Value" SG_ 3221225472 PREIGOFF "-"; +BA_ "Neutral Value" SG_ 3221225472 PREIGOFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PREIGOFF "-"; +BA_ "Invalid Value" SG_ 3221225472 SUS_SET_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 SUS_SET_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUS_SET_STA "0001b"; +BA_ "Invalid Value" SG_ 3221225472 DSC_WAKEUP_SIGNAL "-"; +BA_ "Neutral Value" SG_ 3221225472 DSC_WAKEUP_SIGNAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DSC_WAKEUP_SIGNAL "00h"; +BA_ "Invalid Value" SG_ 3221225472 PBW_WAKEUP_SIGNAL "-"; +BA_ "Neutral Value" SG_ 3221225472 PBW_WAKEUP_SIGNAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBW_WAKEUP_SIGNAL "00h"; +BA_ "Invalid Value" SG_ 3221225472 AVE_FUEL_RESET "-"; +BA_ "Neutral Value" SG_ 3221225472 AVE_FUEL_RESET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVE_FUEL_RESET "0b"; +BA_ "Invalid Value" SG_ 3221225472 MOD_PRESS "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_PRESS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_PRESS "0b"; +BA_ "Invalid Value" SG_ 3221225472 BSW_PRESS "-"; +BA_ "Neutral Value" SG_ 3221225472 BSW_PRESS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BSW_PRESS "0b"; +BA_ "Invalid Value" SG_ 3221225472 LDW_PRESS "-"; +BA_ "Neutral Value" SG_ 3221225472 LDW_PRESS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDW_PRESS "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 SET_LAN_REQ "00000b"; +BA_ "Neutral Value" SG_ 3221225472 SET_LAN_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SET_LAN_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAM_SW_PR "0b"; +BA_ "Neutral Value" SG_ 3221225472 CAM_SW_PR "-"; +BA_ "Invalid Value" SG_ 3221225472 CAM_SW_PR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAM_SW_KEEP "0b"; +BA_ "Neutral Value" SG_ 3221225472 CAM_SW_KEEP "-"; +BA_ "Invalid Value" SG_ 3221225472 CAM_SW_KEEP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAM_OFF_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 CAM_OFF_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CAM_OFF_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INTIAL "1b"; +BA_ "Neutral Value" SG_ 3221225472 INTIAL "-"; +BA_ "Invalid Value" SG_ 3221225472 INTIAL "-"; +BA_ "Invalid Value" SG_ 3221225472 VSP_SOUND_CHG_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 VSP_SOUND_CHG_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VSP_SOUND_CHG_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 SUS_SOUND "-"; +BA_ "Neutral Value" SG_ 3221225472 SUS_SOUND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUS_SOUND "0001b"; +BA_ "Invalid Value" SG_ 3221225472 AVE_ELECMP "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 AVE_ELECMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVE_ELECMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BAT_LOW "0b"; +BA_ "Neutral Value" SG_ 3221225472 BAT_LOW "-"; +BA_ "Invalid Value" SG_ 3221225472 BAT_LOW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVE_ELECMP_ACON "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 AVE_ELECMP_ACON "-"; +BA_ "Invalid Value" SG_ 3221225472 AVE_ELECMP_ACON "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 AVE_ELECMP_ACOFF "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 AVE_ELECMP_ACOFF "-"; +BA_ "Invalid Value" SG_ 3221225472 AVE_ELECMP_ACOFF "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 DTE_DEF "FFh"; +BA_ "Neutral Value" SG_ 3221225472 DTE_DEF "-"; +BA_ "Invalid Value" SG_ 3221225472 DTE_DEF "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 PKB_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 PKB_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 PKB_IND "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_DEF_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 RR_DEF_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 RR_DEF_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Themo_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 Themo_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 Themo_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 AC_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BLOWER_FAN "0b"; +BA_ "Neutral Value" SG_ 3221225472 BLOWER_FAN "-"; +BA_ "Invalid Value" SG_ 3221225472 BLOWER_FAN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HL_WASH_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 HL_WASH_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 HL_WASH_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_WIP "0b"; +BA_ "Neutral Value" SG_ 3221225472 RR_WIP "-"; +BA_ "Invalid Value" SG_ 3221225472 RR_WIP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_AS_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 RR_AS_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 RR_AS_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 SECREVDX "3FFFh"; +BA_ "Neutral Value" SG_ 3221225472 SECREVDX "3FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 SECREVDX "0000h"; +BA_ "Invalid Value" SG_ 3221225472 ATCLKDX "-"; +BA_ "Neutral Value" SG_ 3221225472 ATCLKDX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATCLKDX "0h"; +BA_ "Invalid Value" SG_ 3221225472 CURGPDX "-"; +BA_ "Neutral Value" SG_ 3221225472 CURGPDX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CURGPDX "0b"; +BA_ "Invalid Value" SG_ 3221225472 NEXTGPDX "-"; +BA_ "Neutral Value" SG_ 3221225472 NEXTGPDX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NEXTGPDX "0b"; +BA_ "Invalid Value" SG_ 3221225472 TTCL2 "-"; +BA_ "Neutral Value" SG_ 3221225472 TTCL2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TTCL2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 _1stREGEN_OK "-"; +BA_ "Neutral Value" SG_ 3221225472 _1stREGEN_OK "-"; +BA_ "Invalid Value" SG_ 3221225472 _1stREGEN_OK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fTTCL2ln "-"; +BA_ "Neutral Value" SG_ 3221225472 fTTCL2ln "-"; +BA_ "Invalid Value" SG_ 3221225472 fTTCL2ln "-"; +BA_ "FirstFrameValue" SG_ 3221225472 wvTRCL2ln "-"; +BA_ "Neutral Value" SG_ 3221225472 wvTRCL2ln "-"; +BA_ "Invalid Value" SG_ 3221225472 wvTRCL2ln "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATMAP_CNG "-"; +BA_ "Neutral Value" SG_ 3221225472 ATMAP_CNG "-"; +BA_ "Invalid Value" SG_ 3221225472 ATMAP_CNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASC_STOP_MODE "-"; +BA_ "Neutral Value" SG_ 3221225472 ASC_STOP_MODE "-"; +BA_ "Invalid Value" SG_ 3221225472 ASC_STOP_MODE "-"; +BA_ "Invalid Value" SG_ 3221225472 CL2TMODE "-"; +BA_ "Neutral Value" SG_ 3221225472 CL2TMODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CL2TMODE "-"; +BA_ "Invalid Value" SG_ 3221225472 CL1PRES "-"; +BA_ "Neutral Value" SG_ 3221225472 CL1PRES "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CL1PRES "-"; +BA_ "Invalid Value" SG_ 3221225472 CL1_Standby "-"; +BA_ "Neutral Value" SG_ 3221225472 CL1_Standby "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 CL1_Standby "-"; +BA_ "Invalid Value" SG_ 3221225472 ALU_Q "-"; +BA_ "Neutral Value" SG_ 3221225472 ALU_Q "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALU_Q "-"; +BA_ "Invalid Value" SG_ 3221225472 SHIFTREVREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SHIFTREVREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SHIFTREVREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 BDY_STYL "-"; +BA_ "Neutral Value" SG_ 3221225472 BDY_STYL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BDY_STYL "000b"; +BA_ "Invalid Value" SG_ 3221225472 MODEL_IDEN "-"; +BA_ "Neutral Value" SG_ 3221225472 MODEL_IDEN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MODEL_IDEN "0000h"; +BA_ "Invalid Value" SG_ 3221225472 LUM_R "-"; +BA_ "Neutral Value" SG_ 3221225472 LUM_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LUM_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 LUM_L "-"; +BA_ "Neutral Value" SG_ 3221225472 LUM_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LUM_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 WIPER_ON "-"; +BA_ "Neutral Value" SG_ 3221225472 WIPER_ON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WIPER_ON "0b"; +BA_ "Invalid Value" SG_ 3221225472 BCI_STATUS_MOD "-"; +BA_ "Neutral Value" SG_ 3221225472 BCI_STATUS_MOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BCI_STATUS_MOD "0b"; +BA_ "Invalid Value" SG_ 3221225472 BCI_DISP_DMD_MOD "-"; +BA_ "Neutral Value" SG_ 3221225472 BCI_DISP_DMD_MOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BCI_DISP_DMD_MOD "0b"; +BA_ "Invalid Value" SG_ 3221225472 BCI_BUZ_DMD_MOD "-"; +BA_ "Neutral Value" SG_ 3221225472 BCI_BUZ_DMD_MOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BCI_BUZ_DMD_MOD "0b"; +BA_ "Invalid Value" SG_ 3221225472 BCI_BUZ2_SNR "-"; +BA_ "Neutral Value" SG_ 3221225472 BCI_BUZ2_SNR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BCI_BUZ2_SNR "0b"; +BA_ "Invalid Value" SG_ 3221225472 BCI_BUZ1_SNR "-"; +BA_ "Neutral Value" SG_ 3221225472 BCI_BUZ1_SNR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BCI_BUZ1_SNR "0b"; +BA_ "Invalid Value" SG_ 3221225472 Vehicle_Speed "-"; +BA_ "Neutral Value" SG_ 3221225472 Vehicle_Speed "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Vehicle_Speed "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDLRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 IDLRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 IDLRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CGINPTRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CGINPTRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CGINPTRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GPHOJI "-"; +BA_ "Neutral Value" SG_ 3221225472 GPHOJI "-"; +BA_ "Invalid Value" SG_ 3221225472 GPHOJI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fCL2SLPTAG "-"; +BA_ "Neutral Value" SG_ 3221225472 fCL2SLPTAG "-"; +BA_ "Invalid Value" SG_ 3221225472 fCL2SLPTAG "-"; +BA_ "Invalid Value" SG_ 3221225472 CHGPNG "-"; +BA_ "Neutral Value" SG_ 3221225472 CHGPNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHGPNG "-"; +BA_ "Invalid Value" SG_ 3221225472 ENGCNKOK "-"; +BA_ "Neutral Value" SG_ 3221225472 ENGCNKOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENGCNKOK "-"; +BA_ "Invalid Value" SG_ 3221225472 ENGSTART "-"; +BA_ "Neutral Value" SG_ 3221225472 ENGSTART "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENGSTART "-"; +BA_ "Invalid Value" SG_ 3221225472 OPSTART "-"; +BA_ "Neutral Value" SG_ 3221225472 OPSTART "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OPSTART "-"; +BA_ "Invalid Value" SG_ 3221225472 ETTMIN "-"; +BA_ "Neutral Value" SG_ 3221225472 ETTMIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETTMIN "-"; +BA_ "Invalid Value" SG_ 3221225472 MGCHGPNG "-"; +BA_ "Neutral Value" SG_ 3221225472 MGCHGPNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MGCHGPNG "-"; +BA_ "Invalid Value" SG_ 3221225472 OPDRIVE "-"; +BA_ "Neutral Value" SG_ 3221225472 OPDRIVE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OPDRIVE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EngStartNgJudgeAtcu "0b"; +BA_ "Neutral Value" SG_ 3221225472 EngStartNgJudgeAtcu "-"; +BA_ "Invalid Value" SG_ 3221225472 EngStartNgJudgeAtcu "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TrqPh_adv "00h"; +BA_ "Neutral Value" SG_ 3221225472 TrqPh_adv "-"; +BA_ "Invalid Value" SG_ 3221225472 TrqPh_adv "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Engagement_Control_State "00b"; +BA_ "Neutral Value" SG_ 3221225472 Engagement_Control_State "-"; +BA_ "Invalid Value" SG_ 3221225472 Engagement_Control_State "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASC_MODE "0001b"; +BA_ "Neutral Value" SG_ 3221225472 ASC_MODE "-"; +BA_ "Invalid Value" SG_ 3221225472 ASC_MODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NextGP_MAP "0001b"; +BA_ "Neutral Value" SG_ 3221225472 NextGP_MAP "-"; +BA_ "Invalid Value" SG_ 3221225472 NextGP_MAP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fNoOpnPrs1 "0b"; +BA_ "Neutral Value" SG_ 3221225472 fNoOpnPrs1 "-"; +BA_ "Invalid Value" SG_ 3221225472 fNoOpnPrs1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CL2TMP_D_or_P_Flag "0b"; +BA_ "Neutral Value" SG_ 3221225472 CL2TMP_D_or_P_Flag "-"; +BA_ "Invalid Value" SG_ 3221225472 CL2TMP_D_or_P_Flag "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CL2_TEMP "00h"; +BA_ "Neutral Value" SG_ 3221225472 CL2_TEMP "-"; +BA_ "Invalid Value" SG_ 3221225472 CL2_TEMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_TorqueControlType "0000b"; +BA_ "Neutral Value" SG_ 3221225472 AT_TorqueControlType "-"; +BA_ "Invalid Value" SG_ 3221225472 AT_TorqueControlType "-"; +BA_ "Invalid Value" SG_ 3221225472 MGRDOFS "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 MGRDOFS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MGRDOFS "7Fh"; +BA_ "Invalid Value" SG_ 3221225472 AT_FAIL_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_FAIL_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_FAIL_STATUS "00b"; +BA_ "Invalid Value" SG_ 3221225472 ALU_ANSWER "-"; +BA_ "Neutral Value" SG_ 3221225472 ALU_ANSWER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALU_ANSWER "-"; +BA_ "Invalid Value" SG_ 3221225472 Sub_OP_StopRequest "-"; +BA_ "Neutral Value" SG_ 3221225472 Sub_OP_StopRequest "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Sub_OP_StopRequest "0b"; +BA_ "Invalid Value" SG_ 3221225472 AT_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_FAIL "000000b"; +BA_ "Invalid Value" SG_ 3221225472 ASC_INH_ITS2 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASC_INH_ITS2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASC_INH_ITS2 "0b"; +BA_ "Invalid Value" SG_ 3221225472 MGCOUNT_4DF "-"; +BA_ "Neutral Value" SG_ 3221225472 MGCOUNT_4DF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MGCOUNT_4DF "0h"; +BA_ "Invalid Value" SG_ 3221225472 ASC_INH_ITS3 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASC_INH_ITS3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASC_INH_ITS3 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASC_INH_ITS1 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASC_INH_ITS1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASC_INH_ITS1 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASC_INH_ALL "-"; +BA_ "Neutral Value" SG_ 3221225472 ASC_INH_ALL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASC_INH_ALL "0b"; +BA_ "Invalid Value" SG_ 3221225472 RAD_ST4_toAT "-"; +BA_ "Neutral Value" SG_ 3221225472 RAD_ST4_toAT "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 RAD_ST4_toAT "0b"; +BA_ "Invalid Value" SG_ 3221225472 RAD_ST3_toAT "-"; +BA_ "Neutral Value" SG_ 3221225472 RAD_ST3_toAT "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 RAD_ST3_toAT "0b"; +BA_ "Invalid Value" SG_ 3221225472 RAD_ST2_toAT "-"; +BA_ "Neutral Value" SG_ 3221225472 RAD_ST2_toAT "0h"; +BA_ "FirstFrameValue" SG_ 3221225472 RAD_ST2_toAT "0h"; +BA_ "Invalid Value" SG_ 3221225472 CAMERA_FAILtoAT "-"; +BA_ "Neutral Value" SG_ 3221225472 CAMERA_FAILtoAT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAMERA_FAILtoAT "0b"; +BA_ "Invalid Value" SG_ 3221225472 LASER_FAILtoAT "-"; +BA_ "Neutral Value" SG_ 3221225472 LASER_FAILtoAT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LASER_FAILtoAT "0b"; +BA_ "Invalid Value" SG_ 3221225472 Z_ABST_toAT "-"; +BA_ "Neutral Value" SG_ 3221225472 Z_ABST_toAT "0000h"; +BA_ "FirstFrameValue" SG_ 3221225472 Z_ABST_toAT "0000h"; +BA_ "Invalid Value" SG_ 3221225472 EngineAirTemp "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 EngineAirTemp "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EngineAirTemp "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRETRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 PRETRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PRETRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CLENGENA "0b"; +BA_ "Neutral Value" SG_ 3221225472 CLENGENA "-"; +BA_ "Invalid Value" SG_ 3221225472 CLENGENA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FS_SFCUTM_RQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 FS_SFCUTM_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 FS_SFCUTM_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FS_LMT_ENG_PWR "0b"; +BA_ "Neutral Value" SG_ 3221225472 FS_LMT_ENG_PWR "-"; +BA_ "Invalid Value" SG_ 3221225472 FS_LMT_ENG_PWR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FS_LMT_APO "0b"; +BA_ "Neutral Value" SG_ 3221225472 FS_LMT_APO "-"; +BA_ "Invalid Value" SG_ 3221225472 FS_LMT_APO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INTER_LOCK_OK "0b"; +BA_ "Neutral Value" SG_ 3221225472 INTER_LOCK_OK "-"; +BA_ "Invalid Value" SG_ 3221225472 INTER_LOCK_OK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PD_PRESSURE "00h"; +BA_ "Neutral Value" SG_ 3221225472 PD_PRESSURE "-"; +BA_ "Invalid Value" SG_ 3221225472 PD_PRESSURE "-"; +BA_ "Invalid Value" SG_ 3221225472 EGVRRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 EGVRRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EGVRRQ "IM:-"; +BA_ "Invalid Value" SG_ 3221225472 CRC_191 "-"; +BA_ "Neutral Value" SG_ 3221225472 CRC_191 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CRC_191 "-"; +BA_ "Invalid Value" SG_ 3221225472 PRUN_191 "-"; +BA_ "Neutral Value" SG_ 3221225472 PRUN_191 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRUN_191 "-"; +BA_ "Invalid Value" SG_ 3221225472 ENE "-"; +BA_ "Neutral Value" SG_ 3221225472 ENE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENE "000h"; +BA_ "FirstFrameValue" SG_ 3221225472 STPENA "1b"; +BA_ "Neutral Value" SG_ 3221225472 STPENA "-"; +BA_ "Invalid Value" SG_ 3221225472 STPENA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FSMPWRLRQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 FSMPWRLRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 FSMPWRLRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FSEVRQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 FSEVRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 FSEVRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETCDEF "0b"; +BA_ "Neutral Value" SG_ 3221225472 ETCDEF "-"; +BA_ "Invalid Value" SG_ 3221225472 ETCDEF "-"; +BA_ "Invalid Value" SG_ 3221225472 ENGTQMDF "FFh"; +BA_ "Neutral Value" SG_ 3221225472 ENGTQMDF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENGTQMDF "80h"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCUT_ENG "0b"; +BA_ "Neutral Value" SG_ 3221225472 ACCUT_ENG "-"; +BA_ "Invalid Value" SG_ 3221225472 ACCUT_ENG "-"; +BA_ "Invalid Value" SG_ 3221225472 TENGUPLM "-"; +BA_ "Neutral Value" SG_ 3221225472 TENGUPLM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TENGUPLM "-"; +BA_ "Invalid Value" SG_ 3221225472 TENGLRLM "-"; +BA_ "Neutral Value" SG_ 3221225472 TENGLRLM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TENGLRLM "-"; +BA_ "Invalid Value" SG_ 3221225472 EGVRMTNG "-"; +BA_ "Neutral Value" SG_ 3221225472 EGVRMTNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EGVRMTNG "-"; +BA_ "Invalid Value" SG_ 3221225472 EGVRRQMD "-"; +BA_ "Neutral Value" SG_ 3221225472 EGVRRQMD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EGVRRQMD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 POSDTNG "0b"; +BA_ "Neutral Value" SG_ 3221225472 POSDTNG "-"; +BA_ "Invalid Value" SG_ 3221225472 POSDTNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TWDTNG "0b"; +BA_ "Neutral Value" SG_ 3221225472 TWDTNG "-"; +BA_ "Invalid Value" SG_ 3221225472 TWDTNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHK_CRC_1D0 "-"; +BA_ "Neutral Value" SG_ 3221225472 CHK_CRC_1D0 "-"; +BA_ "Invalid Value" SG_ 3221225472 CHK_CRC_1D0 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 P_RUN_1D0 "-"; +BA_ "Neutral Value" SG_ 3221225472 P_RUN_1D0 "-"; +BA_ "Invalid Value" SG_ 3221225472 P_RUN_1D0 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EGVRJGAR "-"; +BA_ "Neutral Value" SG_ 3221225472 EGVRJGAR "-"; +BA_ "Invalid Value" SG_ 3221225472 EGVRJGAR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EGVRAVJG "-"; +BA_ "Neutral Value" SG_ 3221225472 EGVRAVJG "-"; +BA_ "Invalid Value" SG_ 3221225472 EGVRAVJG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HCMVB "-"; +BA_ "Neutral Value" SG_ 3221225472 HCMVB "-"; +BA_ "Invalid Value" SG_ 3221225472 HCMVB "-"; +BA_ "Invalid Value" SG_ 3221225472 NERV "-"; +BA_ "Neutral Value" SG_ 3221225472 NERV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NERV "-"; +BA_ "Invalid Value" SG_ 3221225472 ETCDEFRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ETCDEFRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETCDEFRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ENG_ON "-"; +BA_ "Neutral Value" SG_ 3221225472 ENG_ON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENG_ON "0b"; +BA_ "Invalid Value" SG_ 3221225472 IND_RNG "00000b"; +BA_ "Neutral Value" SG_ 3221225472 IND_RNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IND_RNG "AY: - +JG,AYK3: 00000b +IK,HG,IM: 00001b"; +BA_ "Invalid Value" SG_ 3221225472 Steering_Angle "7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 Steering_Angle "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Steering_Angle "0000h"; +BA_ "Invalid Value" SG_ 3221225472 FR_WIP_REQ "100b,101b"; +BA_ "Neutral Value" SG_ 3221225472 FR_WIP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_WIP_REQ "000b"; +BA_ "Invalid Value" SG_ 3221225472 FUNC_ALIVE "-"; +BA_ "Neutral Value" SG_ 3221225472 FUNC_ALIVE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FUNC_ALIVE "0b"; +BA_ "Invalid Value" SG_ 3221225472 CRUSTER_ILL_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CRUSTER_ILL_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CRUSTER_ILL_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_ACT "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_ACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_ACT "0b"; +BA_ "Invalid Value" SG_ 3221225472 HMISTATE_R "-"; +BA_ "Neutral Value" SG_ 3221225472 HMISTATE_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HMISTATE_R "00b"; +BA_ "Invalid Value" SG_ 3221225472 HMISTATE_L "-"; +BA_ "Neutral Value" SG_ 3221225472 HMISTATE_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HMISTATE_L "00b"; +BA_ "Invalid Value" SG_ 3221225472 HMIORDER_R "-"; +BA_ "Neutral Value" SG_ 3221225472 HMIORDER_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HMIORDER_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 HMIORDER_L "-"; +BA_ "Neutral Value" SG_ 3221225472 HMIORDER_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HMIORDER_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 HMIIMMDIATE_R "-"; +BA_ "Neutral Value" SG_ 3221225472 HMIIMMDIATE_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HMIIMMDIATE_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 HMIIMMDIATE_L "-"; +BA_ "Neutral Value" SG_ 3221225472 HMIIMMDIATE_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HMIIMMDIATE_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 HMI_ACT "-"; +BA_ "Neutral Value" SG_ 3221225472 HMI_ACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HMI_ACT "0b"; +BA_ "Invalid Value" SG_ 3221225472 CTA_CHANGE_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_CHANGE_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_CHANGE_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 DIST_INNER "FFh"; +BA_ "Neutral Value" SG_ 3221225472 DIST_INNER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_INNER "00h"; +BA_ "Invalid Value" SG_ 3221225472 COUNTER "-"; +BA_ "Neutral Value" SG_ 3221225472 COUNTER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COUNTER "00b"; +BA_ "Invalid Value" SG_ 3221225472 DIST_ROR "FFh"; +BA_ "Neutral Value" SG_ 3221225472 DIST_ROR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_ROR "00h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_ROL "FFh"; +BA_ "Neutral Value" SG_ 3221225472 DIST_ROL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_ROL "00h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_RIR "FFh"; +BA_ "Neutral Value" SG_ 3221225472 DIST_RIR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_RIR "00h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_RIL "FFh"; +BA_ "Neutral Value" SG_ 3221225472 DIST_RIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_RIL "00h"; +BA_ "Invalid Value" SG_ 3221225472 MSGCTACC "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGCTACC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGCTACC "-"; +BA_ "Invalid Value" SG_ 3221225472 CHKSUM_1D6 "-"; +BA_ "Neutral Value" SG_ 3221225472 CHKSUM_1D6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHKSUM_1D6 "0h"; +BA_ "FirstFrameValue" SG_ 3221225472 PEDALERR "0b"; +BA_ "Neutral Value" SG_ 3221225472 PEDALERR "-"; +BA_ "Invalid Value" SG_ 3221225472 PEDALERR "-"; +BA_ "Invalid Value" SG_ 3221225472 HCMFAIL "*"; +BA_ "Neutral Value" SG_ 3221225472 HCMFAIL "*"; +BA_ "FirstFrameValue" SG_ 3221225472 HCMFAIL "*"; +BA_ "Invalid Value" SG_ 3221225472 THOCAST "-"; +BA_ "Neutral Value" SG_ 3221225472 THOCAST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 THOCAST "0000h"; +BA_ "Invalid Value" SG_ 3221225472 THMAX_upper "-"; +BA_ "Neutral Value" SG_ 3221225472 THMAX_upper "-"; +BA_ "FirstFrameValue" SG_ 3221225472 THMAX_upper "000h"; +BA_ "Invalid Value" SG_ 3221225472 THMAX_lower "-"; +BA_ "Neutral Value" SG_ 3221225472 THMAX_lower "-"; +BA_ "FirstFrameValue" SG_ 3221225472 THMAX_lower "000h"; +BA_ "Invalid Value" SG_ 3221225472 THEST "-"; +BA_ "Neutral Value" SG_ 3221225472 THEST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 THEST "0000h"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_HIS_CELL_VOL "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 LB_HIS_CELL_VOL "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_HIS_CELL_VOL "3Fh"; +BA_ "Invalid Value" SG_ 3221225472 BTA_MAIL_SEND_RQ "-"; +BA_ "Neutral Value" SG_ 3221225472 BTA_MAIL_SEND_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BTA_MAIL_SEND_RQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 LB_NXTWTIM_60 "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 LB_NXTWTIM_60 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_NXTWTIM_60 "1Fh"; +BA_ "Invalid Value" SG_ 3221225472 LB_HEATEXIST "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_HEATEXIST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_HEATEXIST "0b"; +BA_ "Invalid Value" SG_ 3221225472 LB_HEATSTOPMAIL_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_HEATSTOPMAIL_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_HEATSTOPMAIL_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 LB_HEATSTARTMAIL_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_HEATSTARTMAIL_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_HEATSTARTMAIL_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 LBC_DTC "-"; +BA_ "Neutral Value" SG_ 3221225472 LBC_DTC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LBC_DTC "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_NXTWTIM_20 "1Eh,1Fh"; +BA_ "Neutral Value" SG_ 3221225472 LB_NXTWTIM_20 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_NXTWTIM_20 "1Eh"; +BA_ "Invalid Value" SG_ 3221225472 LB_HIS_TEMP_WUP "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 LB_HIS_TEMP_WUP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_HIS_TEMP_WUP "7Fh"; +BA_ "Invalid Value" SG_ 3221225472 LB_HIS_TEMP "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 LB_HIS_TEMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_HIS_TEMP "7Fh"; +BA_ "Invalid Value" SG_ 3221225472 LB_HIS_INTG_CUR "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_HIS_INTG_CUR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_HIS_INTG_CUR "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_HIS_HLVOL_TIMS "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_HIS_HLVOL_TIMS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_HIS_HLVOL_TIMS "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_HIS_DEG_REGI "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 LB_HIS_DEG_REGI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_HIS_DEG_REGI "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_HIS_DATA_SW "00b"; +BA_ "Neutral Value" SG_ 3221225472 LB_HIS_DATA_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_HIS_DATA_SW "00b"; +BA_ "Invalid Value" SG_ 3221225472 MSG_CNT "-"; +BA_ "Neutral Value" SG_ 3221225472 MSG_CNT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSG_CNT "-"; +BA_ "Invalid Value" SG_ 3221225472 NEAR_OBJ_FLAG_RR "-"; +BA_ "Neutral Value" SG_ 3221225472 NEAR_OBJ_FLAG_RR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NEAR_OBJ_FLAG_RR "0b"; +BA_ "Invalid Value" SG_ 3221225472 NEAR_OBJ_FLAG_FR "-"; +BA_ "Neutral Value" SG_ 3221225472 NEAR_OBJ_FLAG_FR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NEAR_OBJ_FLAG_FR "0b"; +BA_ "Invalid Value" SG_ 3221225472 PARK_GUIDE_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 PARK_GUIDE_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PARK_GUIDE_STATUS "00b"; +BA_ "Invalid Value" SG_ 3221225472 MOD_SYS_STATUS_TOP "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_SYS_STATUS_TOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_SYS_STATUS_TOP "00b"; +BA_ "Invalid Value" SG_ 3221225472 MOD_SYS_STATUS_RR "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_SYS_STATUS_RR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_SYS_STATUS_RR "00b"; +BA_ "Invalid Value" SG_ 3221225472 MOD_SYS_STATUS_FR "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_SYS_STATUS_FR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_SYS_STATUS_FR "00b"; +BA_ "Invalid Value" SG_ 3221225472 MOD_FAIL_FLAG "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_FAIL_FLAG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_FAIL_FLAG "0b"; +BA_ "Invalid Value" SG_ 3221225472 MOD_DETECT_DISP_PINT_Y_TOP "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_DETECT_DISP_PINT_Y_TOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_DETECT_DISP_PINT_Y_TOP "-"; +BA_ "Invalid Value" SG_ 3221225472 MOD_DETECT_DISP_PINT_Y_RR "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_DETECT_DISP_PINT_Y_RR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_DETECT_DISP_PINT_Y_RR "-"; +BA_ "Invalid Value" SG_ 3221225472 MOD_DETECT_DISP_PINT_X_TOP "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_DETECT_DISP_PINT_X_TOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_DETECT_DISP_PINT_X_TOP "-"; +BA_ "Invalid Value" SG_ 3221225472 MOD_DETECT_DISP_PINT_X_RR "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_DETECT_DISP_PINT_X_RR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_DETECT_DISP_PINT_X_RR "-"; +BA_ "Invalid Value" SG_ 3221225472 MOD_DETECT_DISP_PINT_X_FR "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_DETECT_DISP_PINT_X_FR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_DETECT_DISP_PINT_X_FR "-"; +BA_ "Invalid Value" SG_ 3221225472 MOD_DETECT_AREA_TOP "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_DETECT_AREA_TOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_DETECT_AREA_TOP "0000b"; +BA_ "Invalid Value" SG_ 3221225472 MOD_DETECT_DETECTION_RR "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_DETECT_DETECTION_RR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_DETECT_DETECTION_RR "0000b"; +BA_ "Invalid Value" SG_ 3221225472 MOD_DETECT_DETECTION_FR "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_DETECT_DETECTION_FR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_DETECT_DETECTION_FR "0000b"; +BA_ "Invalid Value" SG_ 3221225472 MOD_BUZ2_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_BUZ2_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_BUZ2_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 MOD_BUZ1_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_BUZ1_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_BUZ1_REQ "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 VCM_WAKEUP_SIGNAL "00h"; +BA_ "Neutral Value" SG_ 3221225472 VCM_WAKEUP_SIGNAL "-"; +BA_ "Invalid Value" SG_ 3221225472 VCM_WAKEUP_SIGNAL "-"; +BA_ "Invalid Value" SG_ 3221225472 SET_ITS "-"; +BA_ "Neutral Value" SG_ 3221225472 SET_ITS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SET_ITS "-"; +BA_ "Invalid Value" SG_ 3221225472 MOD_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 LDW_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 LDW_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDW_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 BSW_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 BSW_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BSW_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 BEEP_TYPE "-"; +BA_ "Neutral Value" SG_ 3221225472 BEEP_TYPE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BEEP_TYPE "0b"; +BA_ "Invalid Value" SG_ 3221225472 BEEP_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 BEEP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BEEP_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 VIEW_CH_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 VIEW_CH_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VIEW_CH_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 AOD_BEEP2_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 AOD_BEEP2_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AOD_BEEP2_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 AOD_BEEP1_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 AOD_BEEP1_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AOD_BEEP1_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SYSTEM_BUZZER "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SYSTEM_BUZZER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SYSTEM_BUZZER "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_LMP "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_LMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_LMP "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_FAIL_BUZZER "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_FAIL_BUZZER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_FAIL_BUZZER "0b"; +BA_ "Invalid Value" SG_ 3221225472 CTA_DIST_BEAM6_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_DIST_BEAM6_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_DIST_BEAM6_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_DIST_BEAM5_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_DIST_BEAM5_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_DIST_BEAM5_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_DIST_BEAM4_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_DIST_BEAM4_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_DIST_BEAM4_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_DIST_BEAM3_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_DIST_BEAM3_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_DIST_BEAM3_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FE "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FE "0b"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TRACK_ID_TR3_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TRACK_ID_TR3_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TRACK_ID_TR3_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_BEAM_ID_TR3_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_BEAM_ID_TR3_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_BEAM_ID_TR3_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_TR3_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_TR3_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_TR3_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_TR3_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_TR3_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_TR3_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TRACK_ID_TR2_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TRACK_ID_TR2_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TRACK_ID_TR2_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_BEAM_ID_TR2_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_BEAM_ID_TR2_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_BEAM_ID_TR2_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_TR2_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_TR2_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_TR2_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FD "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FD "0b"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_TR2_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_TR2_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_TR2_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TRACK_ID_TR1_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TRACK_ID_TR1_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TRACK_ID_TR1_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_BEAM_ID_TR1_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_BEAM_ID_TR1_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_BEAM_ID_TR1_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_TR1_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_TR1_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_TR1_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_TR1_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_TR1_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_TR1_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TRACK_ID_TRTTC_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TRACK_ID_TRTTC_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TRACK_ID_TRTTC_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_BEAM_ID_TRTTC_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_BEAM_ID_TRTTC_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_BEAM_ID_TRTTC_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_TRTTC_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_TRTTC_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_TRTTC_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_TRTTC_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_TRTTC_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_TRTTC_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TRACK_ID_AL1_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TRACK_ID_AL1_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TRACK_ID_AL1_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_AL1_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_AL1_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_AL1_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_AL1_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_AL1_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_AL1_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_ALTTC_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_ALTTC_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_ALTTC_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_DIST_BEAM6_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_DIST_BEAM6_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_DIST_BEAM6_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_DIST_BEAM5_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_DIST_BEAM5_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_DIST_BEAM5_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_DIST_BEAM4_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_DIST_BEAM4_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_DIST_BEAM4_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_DIST_BEAM3_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_DIST_BEAM3_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_DIST_BEAM3_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FC "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FC "0b"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TRACK_ID_TR3_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TRACK_ID_TR3_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TRACK_ID_TR3_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_BEAM_ID_TR3_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_BEAM_ID_TR3_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_BEAM_ID_TR3_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_TR3_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_TR3_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_TR3_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_TR3_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_TR3_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_TR3_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TRACK_ID_TR2_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TRACK_ID_TR2_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TRACK_ID_TR2_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_BEAM_ID_TR2_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_BEAM_ID_TR2_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_BEAM_ID_TR2_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_TR2_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_TR2_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_TR2_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FB "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FUNC_STAT_3FB "0b"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_TR2_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_TR2_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_TR2_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TRACK_ID_TR1_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TRACK_ID_TR1_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TRACK_ID_TR1_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_BEAM_ID_TR1_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_BEAM_ID_TR1_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_BEAM_ID_TR1_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_TR1_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_TR1_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_TR1_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_TR1_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_TR1_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_TR1_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TRACK_ID_TRTTC_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TRACK_ID_TRTTC_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TRACK_ID_TRTTC_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_BEAM_ID_TRTTC_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_BEAM_ID_TRTTC_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_BEAM_ID_TRTTC_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_TRTTC_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_TRTTC_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_TRTTC_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_TRTTC_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_TRTTC_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_TRTTC_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TRACK_ID_AL1_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TRACK_ID_AL1_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TRACK_ID_AL1_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_AL1_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_AL1_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_AL1_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_AL1_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_AL1_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_AL1_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TSP_ALTTC_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TSP_ALTTC_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TSP_ALTTC_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 CLROP "-"; +BA_ "Neutral Value" SG_ 3221225472 CLROP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CLROP "0b"; +BA_ "Invalid Value" SG_ 3221225472 TTOP "-"; +BA_ "Neutral Value" SG_ 3221225472 TTOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TTOP "00h"; +BA_ "Invalid Value" SG_ 3221225472 TEST_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 TEST_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEST_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 MUX_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 MUX_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MUX_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 PRSOP "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSOP "000h"; +BA_ "Invalid Value" SG_ 3221225472 INT_EL_ANO_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 INT_EL_ANO_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INT_EL_ANO_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 BUSSOFF_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 BUSSOFF_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BUSSOFF_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 MUTE_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 MUTE_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MUTE_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 ABSENT_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 ABSENT_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABSENT_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 SYS_FAIL_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 SYS_FAIL_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SYS_FAIL_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASENSOR_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 ASENSOR_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASENSOR_FAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 RLY_OFF_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 RLY_OFF_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RLY_OFF_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 RLY_ON_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 RLY_ON_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RLY_ON_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 MOT_LO_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 MOT_LO_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOT_LO_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 MOT_HI_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 MOT_HI_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOT_HI_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 TEMPSEN_LO_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 TEMPSEN_LO_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMPSEN_LO_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 TEMPSEN_HI_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 TEMPSEN_HI_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMPSEN_HI_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 TEMP_FAIL_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 TEMP_FAIL_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMP_FAIL_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 STOP "-"; +BA_ "Neutral Value" SG_ 3221225472 STOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STOP "00h"; +BA_ "Invalid Value" SG_ 3221225472 INVREADY "-"; +BA_ "Neutral Value" SG_ 3221225472 INVREADY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INVREADY "0b"; +BA_ "Invalid Value" SG_ 3221225472 STEP_OUT_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 STEP_OUT_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STEP_OUT_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 POW_SAVE_OP "-"; +BA_ "Neutral Value" SG_ 3221225472 POW_SAVE_OP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 POW_SAVE_OP "0b"; +BA_ "Invalid Value" SG_ 3221225472 RNOP "-"; +BA_ "Neutral Value" SG_ 3221225472 RNOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RNOP "000h"; +BA_ "FirstFrameValue" SG_ 3221225472 T_PWR "000h"; +BA_ "Neutral Value" SG_ 3221225472 T_PWR "190h"; +BA_ "Invalid Value" SG_ 3221225472 T_PWR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CRC "-"; +BA_ "Neutral Value" SG_ 3221225472 CRC "-"; +BA_ "Invalid Value" SG_ 3221225472 CRC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRUN "0h"; +BA_ "Neutral Value" SG_ 3221225472 PRUN "-"; +BA_ "Invalid Value" SG_ 3221225472 PRUN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALU_Q_LBC "B2h"; +BA_ "Neutral Value" SG_ 3221225472 ALU_Q_LBC "-"; +BA_ "Invalid Value" SG_ 3221225472 ALU_Q_LBC "-"; +BA_ "Invalid Value" SG_ 3221225472 C_Down "-"; +BA_ "Neutral Value" SG_ 3221225472 C_Down "-"; +BA_ "FirstFrameValue" SG_ 3221225472 C_Down "-"; +BA_ "Invalid Value" SG_ 3221225472 INTAKE "-"; +BA_ "Neutral Value" SG_ 3221225472 INTAKE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INTAKE "-"; +BA_ "Invalid Value" SG_ 3221225472 BLW_SPD "-"; +BA_ "Neutral Value" SG_ 3221225472 BLW_SPD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BLW_SPD "-"; +BA_ "Invalid Value" SG_ 3221225472 INC_TEMP "FFh"; +BA_ "Neutral Value" SG_ 3221225472 INC_TEMP "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 INC_TEMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_WED_IT_M "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_WED_IT_M "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_WED_IT_M "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_TUE_IT_M "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_TUE_IT_M "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_TUE_IT_M "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_THU_IT_M "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_THU_IT_M "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_THU_IT_M "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_SUN_IT_M "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_SUN_IT_M "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_SUN_IT_M "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_SAT_IT_M "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_SAT_IT_M "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_SAT_IT_M "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_MON_IT_M "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_MON_IT_M "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_MON_IT_M "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_FRI_IT_M "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_FRI_IT_M "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_FRI_IT_M "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TSOC_ITM "-"; +BA_ "Neutral Value" SG_ 3221225472 TSOC_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 TSOC_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_WED_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_WED_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_WED_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_TUE_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_TUE_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_TUE_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_THU_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_THU_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_THU_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_SUN_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_SUN_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_SUN_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_SAT_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_SAT_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_SAT_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_MON_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_MON_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_MON_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_SELCT_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_SELCT_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_SELCT_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NEXT_CHG_DAY_ITM "000b"; +BA_ "Neutral Value" SG_ 3221225472 NEXT_CHG_DAY_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 NEXT_CHG_DAY_ITM "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 STP_CAPAACITY_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 STP_CAPAACITY_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 STP_CAPAACITY_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_SW_SELECTER_ITM "000b"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_SW_SELECTER_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_SW_SELECTER_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_STATUS_ITM "000b"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_STATUS_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_STATUS_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Timer_Setting_2_MIN_ITM "7h"; +BA_ "Neutral Value" SG_ 3221225472 Timer_Setting_2_MIN_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 Timer_Setting_2_MIN_ITM "7h"; +BA_ "FirstFrameValue" SG_ 3221225472 Timer_Setting_2_H_ITM "1FH"; +BA_ "Neutral Value" SG_ 3221225472 Timer_Setting_2_H_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 Timer_Setting_2_H_ITM "1FH"; +BA_ "FirstFrameValue" SG_ 3221225472 Timer_Setting_1_MIN_ITM "7h"; +BA_ "Neutral Value" SG_ 3221225472 Timer_Setting_1_MIN_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 Timer_Setting_1_MIN_ITM "7h"; +BA_ "FirstFrameValue" SG_ 3221225472 Timer_Setting_1_H_ITM "1FH"; +BA_ "Neutral Value" SG_ 3221225472 Timer_Setting_1_H_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 Timer_Setting_1_H_ITM "1FH"; +BA_ "FirstFrameValue" SG_ 3221225472 Timer_No_ITM "101b"; +BA_ "Neutral Value" SG_ 3221225472 Timer_No_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 Timer_No_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_CHG_SW_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_CHG_SW_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_CHG_SW_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_CHG_SELECT2_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_CHG_SELECT2_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_CHG_SELECT2_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_CHG_SELECT1_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_CHG_SELECT1_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_CHG_SELECT1_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NEXT_PRI_AC_DAY_ITM "000b"; +BA_ "Neutral Value" SG_ 3221225472 NEXT_PRI_AC_DAY_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 NEXT_PRI_AC_DAY_ITM "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 PRI_AC_SET2_IND_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 PRI_AC_SET2_IND_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 PRI_AC_SET2_IND_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRI_AC_SET1_IND_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 PRI_AC_SET1_IND_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 PRI_AC_SET1_IND_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRI_AC_PRIORITY_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 PRI_AC_PRIORITY_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 PRI_AC_PRIORITY_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRI_AC_INFO_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 PRI_AC_INFO_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 PRI_AC_INFO_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUR_MIN_ITM "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 CUR_MIN_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 CUR_MIN_ITM "3Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 CUR_H_ITM "1FH"; +BA_ "Neutral Value" SG_ 3221225472 CUR_H_ITM "1FH"; +BA_ "Invalid Value" SG_ 3221225472 CUR_H_ITM "1FH"; +BA_ "FirstFrameValue" SG_ 3221225472 CUR_DAY_ITM "000b"; +BA_ "Neutral Value" SG_ 3221225472 CUR_DAY_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 CUR_DAY_ITM "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 REC_FLAG "0b"; +BA_ "Neutral Value" SG_ 3221225472 REC_FLAG "-"; +BA_ "Invalid Value" SG_ 3221225472 REC_FLAG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GPS_CUR_YEAR "00h"; +BA_ "Neutral Value" SG_ 3221225472 GPS_CUR_YEAR "-"; +BA_ "Invalid Value" SG_ 3221225472 GPS_CUR_YEAR "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 GPS_CUR_MONTH "0h"; +BA_ "Neutral Value" SG_ 3221225472 GPS_CUR_MONTH "-"; +BA_ "Invalid Value" SG_ 3221225472 GPS_CUR_MONTH "0h"; +BA_ "FirstFrameValue" SG_ 3221225472 GPS_CUR_DAY "000b"; +BA_ "Neutral Value" SG_ 3221225472 GPS_CUR_DAY "-"; +BA_ "Invalid Value" SG_ 3221225472 GPS_CUR_DAY "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 TONO_BOARD_MSG "11b"; +BA_ "Neutral Value" SG_ 3221225472 TONO_BOARD_MSG "-"; +BA_ "Invalid Value" SG_ 3221225472 TONO_BOARD_MSG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ROOF_OPE_BUZ "00b"; +BA_ "Neutral Value" SG_ 3221225472 ROOF_OPE_BUZ "-"; +BA_ "Invalid Value" SG_ 3221225472 ROOF_OPE_BUZ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RHT_Status_MSG "11b"; +BA_ "Neutral Value" SG_ 3221225472 RHT_Status_MSG "-"; +BA_ "Invalid Value" SG_ 3221225472 RHT_Status_MSG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RHT_MOV_MSG "0b"; +BA_ "Neutral Value" SG_ 3221225472 RHT_MOV_MSG "-"; +BA_ "Invalid Value" SG_ 3221225472 RHT_MOV_MSG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RHT_METER_SIG "0b"; +BA_ "Neutral Value" SG_ 3221225472 RHT_METER_SIG "-"; +BA_ "Invalid Value" SG_ 3221225472 RHT_METER_SIG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVE_ELECMP_ACON_V "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 AVE_ELECMP_ACON_V "-"; +BA_ "Invalid Value" SG_ 3221225472 AVE_ELECMP_ACON_V "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 AVE_ELECMP_ACOFF_V "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 AVE_ELECMP_ACOFF_V "-"; +BA_ "Invalid Value" SG_ 3221225472 AVE_ELECMP_ACOFF_V "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 DTE_DEF_VCM "FFh"; +BA_ "Neutral Value" SG_ 3221225472 DTE_DEF_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 DTE_DEF_VCM "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 EMPTY_RQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 EMPTY_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 EMPTY_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTE_VCM "1FFFh"; +BA_ "Neutral Value" SG_ 3221225472 DTE_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 DTE_VCM "1FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 DTE_RQ "00b"; +BA_ "Neutral Value" SG_ 3221225472 DTE_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 DTE_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTE_FLASH "0b"; +BA_ "Neutral Value" SG_ 3221225472 DTE_FLASH "-"; +BA_ "Invalid Value" SG_ 3221225472 DTE_FLASH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BMCEXE "n.a HCM(DZ):0b"; +BA_ "Neutral Value" SG_ 3221225472 BMCEXE "-"; +BA_ "Invalid Value" SG_ 3221225472 BMCEXE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BMCACK "n.a HCM(DZ):0b"; +BA_ "Neutral Value" SG_ 3221225472 BMCACK "-"; +BA_ "Invalid Value" SG_ 3221225472 BMCACK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RQTRQASA "-"; +BA_ "Neutral Value" SG_ 3221225472 RQTRQASA "-"; +BA_ "Invalid Value" SG_ 3221225472 RQTRQASA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RQASA "-"; +BA_ "Neutral Value" SG_ 3221225472 RQASA "-"; +BA_ "Invalid Value" SG_ 3221225472 RQASA "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CDMODERQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CDMODERQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CDMODERQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRKCOMSTAT "-"; +BA_ "Neutral Value" SG_ 3221225472 BRKCOMSTAT "-"; +BA_ "Invalid Value" SG_ 3221225472 BRKCOMSTAT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OB_Width "00h"; +BA_ "Neutral Value" SG_ 3221225472 OB_Width "00h"; +BA_ "Invalid Value" SG_ 3221225472 OB_Width "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Lateral_Position "0000h"; +BA_ "Neutral Value" SG_ 3221225472 Lateral_Position "0000h"; +BA_ "Invalid Value" SG_ 3221225472 Lateral_Position "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBJ_GRP "0b"; +BA_ "Neutral Value" SG_ 3221225472 OBJ_GRP "0b"; +BA_ "Invalid Value" SG_ 3221225472 OBJ_GRP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HI_BEAM_DET "0b"; +BA_ "Neutral Value" SG_ 3221225472 HI_BEAM_DET "0b"; +BA_ "Invalid Value" SG_ 3221225472 HI_BEAM_DET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ST_RELE "0b"; +BA_ "Neutral Value" SG_ 3221225472 ST_RELE "0b"; +BA_ "Invalid Value" SG_ 3221225472 ST_RELE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ST_OTYP "0b"; +BA_ "Neutral Value" SG_ 3221225472 ST_OTYP "0b"; +BA_ "Invalid Value" SG_ 3221225472 ST_OTYP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ST_ODV "0b"; +BA_ "Neutral Value" SG_ 3221225472 ST_ODV "0b"; +BA_ "Invalid Value" SG_ 3221225472 ST_ODV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ST_OBJ "0b"; +BA_ "Neutral Value" SG_ 3221225472 ST_OBJ "0b"; +BA_ "Invalid Value" SG_ 3221225472 ST_OBJ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ST_CHG "0b"; +BA_ "Neutral Value" SG_ 3221225472 ST_CHG "0b"; +BA_ "Invalid Value" SG_ 3221225472 ST_CHG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PEAK_DET "0b"; +BA_ "Neutral Value" SG_ 3221225472 PEAK_DET "0b"; +BA_ "Invalid Value" SG_ 3221225472 PEAK_DET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VRES "0000h"; +BA_ "Neutral Value" SG_ 3221225472 VRES "0000h"; +BA_ "Invalid Value" SG_ 3221225472 VRES "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HL_LOW_SCAN "0b"; +BA_ "Neutral Value" SG_ 3221225472 HL_LOW_SCAN "0b"; +BA_ "Invalid Value" SG_ 3221225472 HL_LOW_SCAN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WIDTH_UNFIT "0b"; +BA_ "Neutral Value" SG_ 3221225472 WIDTH_UNFIT "0b"; +BA_ "Invalid Value" SG_ 3221225472 WIDTH_UNFIT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AMP_WHOL "0b"; +BA_ "Neutral Value" SG_ 3221225472 AMP_WHOL "0b"; +BA_ "Invalid Value" SG_ 3221225472 AMP_WHOL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AMP_HOL "0b"; +BA_ "Neutral Value" SG_ 3221225472 AMP_HOL "0b"; +BA_ "Invalid Value" SG_ 3221225472 AMP_HOL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PEAK_WIDTH_UNFIT "0b"; +BA_ "Neutral Value" SG_ 3221225472 PEAK_WIDTH_UNFIT "0b"; +BA_ "Invalid Value" SG_ 3221225472 PEAK_WIDTH_UNFIT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABST "0000h"; +BA_ "Neutral Value" SG_ 3221225472 ABST "0000h"; +BA_ "Invalid Value" SG_ 3221225472 ABST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATM_PRES "3F5h"; +BA_ "Neutral Value" SG_ 3221225472 ATM_PRES "-"; +BA_ "Invalid Value" SG_ 3221225472 ATM_PRES "000h"; +BA_ "FirstFrameValue" SG_ 3221225472 IS_REQ_ACM "0b"; +BA_ "Neutral Value" SG_ 3221225472 IS_REQ_ACM "-"; +BA_ "Invalid Value" SG_ 3221225472 IS_REQ_ACM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REV_UP_REQ_HIGH_OIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 REV_UP_REQ_HIGH_OIL "-"; +BA_ "Invalid Value" SG_ 3221225472 REV_UP_REQ_HIGH_OIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FS_LMT_ENG_REV "00b"; +BA_ "Neutral Value" SG_ 3221225472 FS_LMT_ENG_REV "-"; +BA_ "Invalid Value" SG_ 3221225472 FS_LMT_ENG_REV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VTCNOACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 VTCNOACT "-"; +BA_ "Invalid Value" SG_ 3221225472 VTCNOACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HIGH_ENGOIL_TMP "0b"; +BA_ "Neutral Value" SG_ 3221225472 HIGH_ENGOIL_TMP "-"; +BA_ "Invalid Value" SG_ 3221225472 HIGH_ENGOIL_TMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REGGAS "0b"; +BA_ "Neutral Value" SG_ 3221225472 REGGAS "-"; +BA_ "Invalid Value" SG_ 3221225472 REGGAS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBD_WUC "0b"; +BA_ "Neutral Value" SG_ 3221225472 OBD_WUC "-"; +BA_ "Invalid Value" SG_ 3221225472 OBD_WUC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBD_VALUE "0000h"; +BA_ "Neutral Value" SG_ 3221225472 OBD_VALUE "-"; +BA_ "Invalid Value" SG_ 3221225472 OBD_VALUE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBD_RDY_ON "0b"; +BA_ "Neutral Value" SG_ 3221225472 OBD_RDY_ON "-"; +BA_ "Invalid Value" SG_ 3221225472 OBD_RDY_ON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBD_MARKER "0h"; +BA_ "Neutral Value" SG_ 3221225472 OBD_MARKER "-"; +BA_ "Invalid Value" SG_ 3221225472 OBD_MARKER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBD_GENERAL_TRIP "0b"; +BA_ "Neutral Value" SG_ 3221225472 OBD_GENERAL_TRIP "-"; +BA_ "Invalid Value" SG_ 3221225472 OBD_GENERAL_TRIP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBD_MILREQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 OBD_MILREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 OBD_MILREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 VB "-"; +BA_ "Neutral Value" SG_ 3221225472 VB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VB "0h"; +BA_ "Invalid Value" SG_ 3221225472 RFCNTMG "-"; +BA_ "Neutral Value" SG_ 3221225472 RFCNTMG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RFCNTMG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MC_Slave_RefuseToSleep "-"; +BA_ "Neutral Value" SG_ 3221225472 MC_Slave_RefuseToSleep "-"; +BA_ "Invalid Value" SG_ 3221225472 MC_Slave_RefuseToSleep "-"; +BA_ "Invalid Value" SG_ 3221225472 LCNT "-"; +BA_ "Neutral Value" SG_ 3221225472 LCNT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LCNT "-"; +BA_ "Invalid Value" SG_ 3221225472 MONI_T_WATER "-"; +BA_ "Neutral Value" SG_ 3221225472 MONI_T_WATER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MONI_T_WATER "-"; +BA_ "Invalid Value" SG_ 3221225472 MONI_T_MG "-"; +BA_ "Neutral Value" SG_ 3221225472 MONI_T_MG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MONI_T_MG "-"; +BA_ "Invalid Value" SG_ 3221225472 MONI_T_INV "-"; +BA_ "Neutral Value" SG_ 3221225472 MONI_T_INV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MONI_T_INV "-"; +BA_ "Invalid Value" SG_ 3221225472 MONI_T_CALINV "-"; +BA_ "Neutral Value" SG_ 3221225472 MONI_T_CALINV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MONI_T_CALINV "-"; +BA_ "Invalid Value" SG_ 3221225472 MONI_T_C "-"; +BA_ "Neutral Value" SG_ 3221225472 MONI_T_C "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MONI_T_C "-"; +BA_ "Invalid Value" SG_ 3221225472 MONI_SEQMD "-"; +BA_ "Neutral Value" SG_ 3221225472 MONI_SEQMD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MONI_SEQMD "-"; +BA_ "Invalid Value" SG_ 3221225472 DGCDMG "-"; +BA_ "Neutral Value" SG_ 3221225472 DGCDMG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DGCDMG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MG_MIL "-"; +BA_ "Neutral Value" SG_ 3221225472 MG_MIL "-"; +BA_ "Invalid Value" SG_ 3221225472 MG_MIL "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_EGVR_STOP_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_EGVR_STOP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_EGVR_STOP_REQ "IM: - +DZ: 1b"; +BA_ "Invalid Value" SG_ 3221225472 LB_EGVR_MNTR_STOP_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_EGVR_MNTR_STOP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_EGVR_MNTR_STOP_REQ "IM: - +DZ: 1b +"; +BA_ "Invalid Value" SG_ 3221225472 LB_TBMIN "FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_TBMIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_TBMIN "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_DCDC "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_DCDC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_DCDC "0b"; +BA_ "Invalid Value" SG_ 3221225472 LB_REFUSE "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_REFUSE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_REFUSE "-"; +BA_ "Invalid Value" SG_ 3221225472 MPR55B "-"; +BA_ "Neutral Value" SG_ 3221225472 MPR55B "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MPR55B "0h"; +BA_ "Invalid Value" SG_ 3221225472 LB_EMPTY "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_EMPTY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_EMPTY "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_SOC "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_SOC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_SOC "3FFh"; +BA_ "Invalid Value" SG_ 3221225472 LB_IRSEN_VOL "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_IRSEN_VOL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_IRSEN_VOL "3FFh"; +BA_ "Invalid Value" SG_ 3221225472 LB_IRSEN "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_IRSEN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_IRSEN "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_ALU_ANSWER "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_ALU_ANSWER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_ALU_ANSWER "AAh"; +BA_ "Invalid Value" SG_ 3221225472 BTCDOWN "-"; +BA_ "Neutral Value" SG_ 3221225472 BTCDOWN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BTCDOWN "-"; +BA_ "Invalid Value" SG_ 3221225472 DCDC_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 DCDC_STATUS "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 DCDC_STATUS "00b"; +BA_ "Invalid Value" SG_ 3221225472 LB_MIL "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_MIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_MIL "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 CYCLE_CNT "0h"; +BA_ "Neutral Value" SG_ 3221225472 CYCLE_CNT "-"; +BA_ "Invalid Value" SG_ 3221225472 CYCLE_CNT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_HTY_D8 "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 CHG_HTY_D8 "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_HTY_D8 "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_HTY_D7 "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 CHG_HTY_D7 "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_HTY_D7 "3Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_HTY_D6 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 CHG_HTY_D6 "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_HTY_D6 "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_HTY_D5 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 CHG_HTY_D5 "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_HTY_D5 "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_HTY_D4 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 CHG_HTY_D4 "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_HTY_D4 "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_HTY_D3 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 CHG_HTY_D3 "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_HTY_D3 "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_HTY_D2 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 CHG_HTY_D2 "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_HTY_D2 "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_HTY_D1 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 CHG_HTY_D1 "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_HTY_D1 "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_EX_CNT "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 CHG_EX_CNT "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_EX_CNT "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_DAT_NO "-"; +BA_ "Neutral Value" SG_ 3221225472 CHG_DAT_NO "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_DAT_NO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_TYP_INFO "00b"; +BA_ "Neutral Value" SG_ 3221225472 CHG_TYP_INFO "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_TYP_INFO "-"; +BA_ "Invalid Value" SG_ 3221225472 VCM_SPEC_NO "-"; +BA_ "Neutral Value" SG_ 3221225472 VCM_SPEC_NO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VCM_SPEC_NO "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_TYP_INFO2 "-"; +BA_ "Neutral Value" SG_ 3221225472 CHG_TYP_INFO2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_TYP_INFO2 "0b"; +BA_ "Invalid Value" SG_ 3221225472 NEW_VCM_SPEC_NO "-"; +BA_ "Neutral Value" SG_ 3221225472 NEW_VCM_SPEC_NO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NEW_VCM_SPEC_NO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_SAT_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_SAT_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_SAT_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_WED_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_WED_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_WED_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_THU_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_THU_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_THU_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_FRI_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_FRI_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_FRI_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_TUE_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_TUE_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_TUE_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_MON_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_MON_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_MON_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_SUN_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 OFF_SUN_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 OFF_SUN_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_TUE_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_TUE_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_TUE_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RE_WATCH_ADJ_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 RE_WATCH_ADJ_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 RE_WATCH_ADJ_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_THU_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_THU_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_THU_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_SAT_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_SAT_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_SAT_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_FRI_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_FRI_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_FRI_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUR_DAY_VCM "000b"; +BA_ "Neutral Value" SG_ 3221225472 CUR_DAY_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 CUR_DAY_VCM "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 CUR_MIN_VCM "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 CUR_MIN_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 CUR_MIN_VCM "3Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 CUR_H_VCM "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 CUR_H_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 CUR_H_VCM "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_WED_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_WED_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_WED_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_SUN_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_SUN_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_SUN_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SELCT_MON_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 SELCT_MON_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 SELCT_MON_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BOOKDIPLAY_STATUS "000b"; +BA_ "Neutral Value" SG_ 3221225472 BOOKDIPLAY_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 BOOKDIPLAY_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NEXT_CHG_DAY_VCM "000b"; +BA_ "Neutral Value" SG_ 3221225472 NEXT_CHG_DAY_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 NEXT_CHG_DAY_VCM "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 STP_CAPACITY_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 STP_CAPACITY_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 STP_CAPACITY_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_CHG_SELCT2_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_CHG_SELCT2_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_CHG_SELCT2_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_CHG_SELCT1_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_CHG_SELCT1_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_CHG_SELCT1_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMER_STATUS_VCM "000b"; +BA_ "Neutral Value" SG_ 3221225472 TIMER_STATUS_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 TIMER_STATUS_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Timer_Setting_2_MIN_VCM "7h"; +BA_ "Neutral Value" SG_ 3221225472 Timer_Setting_2_MIN_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 Timer_Setting_2_MIN_VCM "7h"; +BA_ "FirstFrameValue" SG_ 3221225472 Timer_Setting_2_H_VCM "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 Timer_Setting_2_H_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 Timer_Setting_2_H_VCM "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 Timer_Setting_1_MIN_VCM "7h"; +BA_ "Neutral Value" SG_ 3221225472 Timer_Setting_1_MIN_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 Timer_Setting_1_MIN_VCM "7h"; +BA_ "FirstFrameValue" SG_ 3221225472 Timer_Setting_1_H_VCM "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 Timer_Setting_1_H_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 Timer_Setting_1_H_VCM "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 Timer_No_VCM "101b"; +BA_ "Neutral Value" SG_ 3221225472 Timer_No_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 Timer_No_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 Trip_auto_reset "-"; +BA_ "Neutral Value" SG_ 3221225472 Trip_auto_reset "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Trip_auto_reset "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISCHG_LOW_LIMIT_SOC "-"; +BA_ "Neutral Value" SG_ 3221225472 DISCHG_LOW_LIMIT_SOC "-"; +BA_ "Invalid Value" SG_ 3221225472 DISCHG_LOW_LIMIT_SOC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_FN_DAY "000b"; +BA_ "Neutral Value" SG_ 3221225472 CHG_FN_DAY "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_FN_DAY "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 NEXT_CHG_STOP_H_VCM "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 NEXT_CHG_STOP_H_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 NEXT_CHG_STOP_H_VCM "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 NEXT_CHG_START_H_VCM "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 NEXT_CHG_START_H_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 NEXT_CHG_START_H_VCM "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 NEXT_CHG_STOP_MIN_VCM "7h"; +BA_ "Neutral Value" SG_ 3221225472 NEXT_CHG_STOP_MIN_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 NEXT_CHG_STOP_MIN_VCM "7h"; +BA_ "FirstFrameValue" SG_ 3221225472 NEXT_CHG_START_MIN_VCM "7h"; +BA_ "Neutral Value" SG_ 3221225472 NEXT_CHG_START_MIN_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 NEXT_CHG_START_MIN_VCM "7h"; +BA_ "FirstFrameValue" SG_ 3221225472 DEPARTU_H1_VCM "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 DEPARTU_H1_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 DEPARTU_H1_VCM "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 NEXT_PRI_AC_DAY_VCM "000b"; +BA_ "Neutral Value" SG_ 3221225472 NEXT_PRI_AC_DAY_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 NEXT_PRI_AC_DAY_VCM "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 PRI_AC_PRIORITY_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 PRI_AC_PRIORITY_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 PRI_AC_PRIORITY_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRI_AC_SET2_IND_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 PRI_AC_SET2_IND_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 PRI_AC_SET2_IND_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRI_AC_SET1_IND_VCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 PRI_AC_SET1_IND_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 PRI_AC_SET1_IND_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BOOST_PRESSURE "00h"; +BA_ "Neutral Value" SG_ 3221225472 BOOST_PRESSURE "-"; +BA_ "Invalid Value" SG_ 3221225472 BOOST_PRESSURE "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_FS "000b"; +BA_ "Neutral Value" SG_ 3221225472 AC_FS "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_FS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_FDT "0000b"; +BA_ "Neutral Value" SG_ 3221225472 AC_FDT "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_FDT "-"; +BA_ "Invalid Value" SG_ 3221225472 HVAC_WAKEUP_SIGNAL "-"; +BA_ "Neutral Value" SG_ 3221225472 HVAC_WAKEUP_SIGNAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HVAC_WAKEUP_SIGNAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ChargeTime200V_6kW_D "-"; +BA_ "Neutral Value" SG_ 3221225472 ChargeTime200V_6kW_D "-"; +BA_ "Invalid Value" SG_ 3221225472 ChargeTime200V_6kW_D "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_OPTION_6KW "-"; +BA_ "Neutral Value" SG_ 3221225472 CHG_OPTION_6KW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_OPTION_6KW "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_EXPECT_SUM "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 AC_EXPECT_SUM "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_EXPECT_SUM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FULL_CAP_SEG "00h"; +BA_ "Neutral Value" SG_ 3221225472 FULL_CAP_SEG "00h"; +BA_ "Invalid Value" SG_ 3221225472 FULL_CAP_SEG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REAL_CAP_SEG "00h"; +BA_ "Neutral Value" SG_ 3221225472 REAL_CAP_SEG "00h"; +BA_ "Invalid Value" SG_ 3221225472 REAL_CAP_SEG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ChargeTime200V_D "-"; +BA_ "Neutral Value" SG_ 3221225472 ChargeTime200V_D "-"; +BA_ "Invalid Value" SG_ 3221225472 ChargeTime200V_D "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ChargeTime100V_D "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 ChargeTime100V_D "-"; +BA_ "Invalid Value" SG_ 3221225472 ChargeTime100V_D "7FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 STMG "-"; +BA_ "Neutral Value" SG_ 3221225472 STMG "-"; +BA_ "Invalid Value" SG_ 3221225472 STMG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MGPWRBST "-"; +BA_ "Neutral Value" SG_ 3221225472 MGPWRBST "-"; +BA_ "Invalid Value" SG_ 3221225472 MGPWRBST "-"; +BA_ "Invalid Value" SG_ 3221225472 MGMODE "-"; +BA_ "Neutral Value" SG_ 3221225472 MGMODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MGMODE "-"; +BA_ "Invalid Value" SG_ 3221225472 MEGVRSTOP "-"; +BA_ "Neutral Value" SG_ 3221225472 MEGVRSTOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MEGVRSTOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UPMGTRQ_VAL "00h"; +BA_ "Neutral Value" SG_ 3221225472 UPMGTRQ_VAL "-"; +BA_ "Invalid Value" SG_ 3221225472 UPMGTRQ_VAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UPMGTRQ_DIS "0b"; +BA_ "Neutral Value" SG_ 3221225472 UPMGTRQ_DIS "-"; +BA_ "Invalid Value" SG_ 3221225472 UPMGTRQ_DIS "-"; +BA_ "Invalid Value" SG_ 3221225472 MGDPA "-"; +BA_ "Neutral Value" SG_ 3221225472 MGDPA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MGDPA "00b"; +BA_ "Invalid Value" SG_ 3221225472 MGSTATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 MGSTATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MGSTATUS "HEV:- EV:00b"; +BA_ "Invalid Value" SG_ 3221225472 MPRUN "-"; +BA_ "Neutral Value" SG_ 3221225472 MPRUN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MPRUN "0h"; +BA_ "Invalid Value" SG_ 3221225472 MCRESTATST "-"; +BA_ "Neutral Value" SG_ 3221225472 MCRESTATST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MCRESTATST "0b"; +BA_ "Invalid Value" SG_ 3221225472 RNMG "3FFFh"; +BA_ "Neutral Value" SG_ 3221225472 RNMG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RNMG "others: 3FFFh +HEV_DZ: -"; +BA_ "Invalid Value" SG_ 3221225472 UPMGTRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 UPMGTRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UPMGTRQ "00h"; +BA_ "Invalid Value" SG_ 3221225472 MPRSTATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 MPRSTATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MPRSTATUS "HEV : -..."; +BA_ "Invalid Value" SG_ 3221225472 MCPFN "-"; +BA_ "Neutral Value" SG_ 3221225472 MCPFN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MCPFN "HEV : -..."; +BA_ "Invalid Value" SG_ 3221225472 MSTFN "-"; +BA_ "Neutral Value" SG_ 3221225472 MSTFN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSTFN "HEV : -..."; +BA_ "Invalid Value" SG_ 3221225472 MDISCSTATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 MDISCSTATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MDISCSTATUS "HEV : -..."; +BA_ "Invalid Value" SG_ 3221225472 VHMG "FFh"; +BA_ "Neutral Value" SG_ 3221225472 VHMG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VHMG "others: FFh +HEV_DZ: -"; +BA_ "Invalid Value" SG_ 3221225472 LB_ND4INTTRG "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_ND4INTTRG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_ND4INTTRG "0b"; +BA_ "Invalid Value" SG_ 3221225472 LB_POUT "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_POUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_POUT "3FFh"; +BA_ "Invalid Value" SG_ 3221225472 LB_PIN "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_PIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_PIN "3FFh"; +BA_ "Invalid Value" SG_ 3221225472 LB_MINVOL "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_MINVOL "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_MINVOL "00h"; +BA_ "Invalid Value" SG_ 3221225472 LB_MAXVOL "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_MAXVOL "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_MAXVOL "00h"; +BA_ "Invalid Value" SG_ 3221225472 LB_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_STATUS "00b"; +BA_ "Invalid Value" SG_ 3221225472 LB_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_FAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 LB_FRLYON "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_FRLYON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_FRLYON "0b"; +BA_ "Invalid Value" SG_ 3221225472 LB_CURRENT "1FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_CURRENT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_CURRENT "1Ffh"; +BA_ "Invalid Value" SG_ 3221225472 MPR1DB "-"; +BA_ "Neutral Value" SG_ 3221225472 MPR1DB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MPR1DB "0h"; +BA_ "Invalid Value" SG_ 3221225472 LB_VOLTAGE "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_VOLTAGE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_VOLTAGE "3FFh"; +BA_ "Invalid Value" SG_ 3221225472 STCL1 "-"; +BA_ "Neutral Value" SG_ 3221225472 STCL1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STCL1 "-"; +BA_ "Invalid Value" SG_ 3221225472 fCOAST "-"; +BA_ "Neutral Value" SG_ 3221225472 fCOAST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fCOAST "-"; +BA_ "Invalid Value" SG_ 3221225472 TTMG1 "-"; +BA_ "Neutral Value" SG_ 3221225472 TTMG1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TTMG1 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DLIMMG1 "-"; +BA_ "Neutral Value" SG_ 3221225472 DLIMMG1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DLIMMG1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TTMG "-"; +BA_ "Neutral Value" SG_ 3221225472 TTMG "-"; +BA_ "Invalid Value" SG_ 3221225472 TTMG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RLIMMG1 "-"; +BA_ "Neutral Value" SG_ 3221225472 RLIMMG1 "-"; +BA_ "Invalid Value" SG_ 3221225472 RLIMMG1 "-"; +BA_ "Invalid Value" SG_ 3221225472 EGVR_OPERATION "-"; +BA_ "Neutral Value" SG_ 3221225472 EGVR_OPERATION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EGVR_OPERATION "IM:-"; +BA_ "FirstFrameValue" SG_ 3221225472 STOP_PKB_ST "0b"; +BA_ "Neutral Value" SG_ 3221225472 STOP_PKB_ST "-"; +BA_ "Invalid Value" SG_ 3221225472 STOP_PKB_ST "-"; +BA_ "Invalid Value" SG_ 3221225472 ASCDBRESW "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDBRESW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDBRESW "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 VCMCANFAULT "0b"; +BA_ "Neutral Value" SG_ 3221225472 VCMCANFAULT "-"; +BA_ "Invalid Value" SG_ 3221225472 VCMCANFAULT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 P_LOCK_KEY "0b"; +BA_ "Neutral Value" SG_ 3221225472 P_LOCK_KEY "-"; +BA_ "Invalid Value" SG_ 3221225472 P_LOCK_KEY "-"; +BA_ "Invalid Value" SG_ 3221225472 VCMINHIBIT "-"; +BA_ "Neutral Value" SG_ 3221225472 VCMINHIBIT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VCMINHIBIT "11b"; +BA_ "Invalid Value" SG_ 3221225472 MGCTLMD "-"; +BA_ "Neutral Value" SG_ 3221225472 MGCTLMD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MGCTLMD "-"; +BA_ "Invalid Value" SG_ 3221225472 fEGST_COLD "-"; +BA_ "Neutral Value" SG_ 3221225472 fEGST_COLD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fEGST_COLD "-"; +BA_ "Invalid Value" SG_ 3221225472 SDSW "-"; +BA_ "Neutral Value" SG_ 3221225472 SDSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SDSW "-"; +BA_ "Invalid Value" SG_ 3221225472 POUT_UP_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 POUT_UP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 POUT_UP_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TNMG "-"; +BA_ "Neutral Value" SG_ 3221225472 TNMG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TNMG "-"; +BA_ "Invalid Value" SG_ 3221225472 VCM_SIFT "-"; +BA_ "Neutral Value" SG_ 3221225472 VCM_SIFT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VCM_SIFT "00b"; +BA_ "Invalid Value" SG_ 3221225472 VIBCONTRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 VIBCONTRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VIBCONTRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PWMOFFRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 PWMOFFRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PWMOFFRQ "HEV:- EV:0b"; +BA_ "FirstFrameValue" SG_ 3221225472 BTONFN "0b"; +BA_ "Neutral Value" SG_ 3221225472 BTONFN "-"; +BA_ "Invalid Value" SG_ 3221225472 BTONFN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BONPRRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 BONPRRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 BONPRRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BTSTRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 BTSTRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 BTSTRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGCOUNT_52D "0h"; +BA_ "Neutral Value" SG_ 3221225472 MSGCOUNT_52D "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGCOUNT_52D "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OB_ST_OTYP "-"; +BA_ "Neutral Value" SG_ 3221225472 OB_ST_OTYP "-"; +BA_ "Invalid Value" SG_ 3221225472 OB_ST_OTYP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OB_ST_ODV "-"; +BA_ "Neutral Value" SG_ 3221225472 OB_ST_ODV "-"; +BA_ "Invalid Value" SG_ 3221225472 OB_ST_ODV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OB_ST_CC "-"; +BA_ "Neutral Value" SG_ 3221225472 OB_ST_CC "-"; +BA_ "Invalid Value" SG_ 3221225472 OB_ST_CC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMP_INFO "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 TEMP_INFO "-"; +BA_ "Invalid Value" SG_ 3221225472 TEMP_INFO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fNIT_CAN_LR "-"; +BA_ "Neutral Value" SG_ 3221225472 fNIT_CAN_LR "-"; +BA_ "Invalid Value" SG_ 3221225472 fNIT_CAN_LR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fCAN_LR_NG "-"; +BA_ "Neutral Value" SG_ 3221225472 fCAN_LR_NG "-"; +BA_ "Invalid Value" SG_ 3221225472 fCAN_LR_NG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fLS_LOOK_UP "-"; +BA_ "Neutral Value" SG_ 3221225472 fLS_LOOK_UP "-"; +BA_ "Invalid Value" SG_ 3221225472 fLS_LOOK_UP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fLS_LOOK_RIGHT "-"; +BA_ "Neutral Value" SG_ 3221225472 fLS_LOOK_RIGHT "-"; +BA_ "Invalid Value" SG_ 3221225472 fLS_LOOK_RIGHT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fLS_LOOK_LEFT "-"; +BA_ "Neutral Value" SG_ 3221225472 fLS_LOOK_LEFT "-"; +BA_ "Invalid Value" SG_ 3221225472 fLS_LOOK_LEFT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fLS_LOOK_DOWN "-"; +BA_ "Neutral Value" SG_ 3221225472 fLS_LOOK_DOWN "-"; +BA_ "Invalid Value" SG_ 3221225472 fLS_LOOK_DOWN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fls_CAN_FAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 fls_CAN_FAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 fls_CAN_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fls_ACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 fls_ACT "0b"; +BA_ "Invalid Value" SG_ 3221225472 fls_ACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fLS_GYRO_OFFSET "-"; +BA_ "Neutral Value" SG_ 3221225472 fLS_GYRO_OFFSET "-"; +BA_ "Invalid Value" SG_ 3221225472 fLS_GYRO_OFFSET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fLS_FAIL_EXAM "-"; +BA_ "Neutral Value" SG_ 3221225472 fLS_FAIL_EXAM "-"; +BA_ "Invalid Value" SG_ 3221225472 fLS_FAIL_EXAM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fLS_AXIS_ALIGN "-"; +BA_ "Neutral Value" SG_ 3221225472 fLS_AXIS_ALIGN "-"; +BA_ "Invalid Value" SG_ 3221225472 fLS_AXIS_ALIGN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LAS_DGN1_7 "0b"; +BA_ "Neutral Value" SG_ 3221225472 LAS_DGN1_7 "-"; +BA_ "Invalid Value" SG_ 3221225472 LAS_DGN1_7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LAS_DGN1_6 "-"; +BA_ "Neutral Value" SG_ 3221225472 LAS_DGN1_6 "-"; +BA_ "Invalid Value" SG_ 3221225472 LAS_DGN1_6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LAS_DGN1_5 "-"; +BA_ "Neutral Value" SG_ 3221225472 LAS_DGN1_5 "-"; +BA_ "Invalid Value" SG_ 3221225472 LAS_DGN1_5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LAS_DGN1_4 "-"; +BA_ "Neutral Value" SG_ 3221225472 LAS_DGN1_4 "-"; +BA_ "Invalid Value" SG_ 3221225472 LAS_DGN1_4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LAS_DGN1_3 "-"; +BA_ "Neutral Value" SG_ 3221225472 LAS_DGN1_3 "-"; +BA_ "Invalid Value" SG_ 3221225472 LAS_DGN1_3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LAS_DGN1_2 "-"; +BA_ "Neutral Value" SG_ 3221225472 LAS_DGN1_2 "-"; +BA_ "Invalid Value" SG_ 3221225472 LAS_DGN1_2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ND4RCDRQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 ND4RCDRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ND4RCDRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CDMOODEACK "-"; +BA_ "Neutral Value" SG_ 3221225472 CDMOODEACK "-"; +BA_ "Invalid Value" SG_ 3221225472 CDMOODEACK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CDMODESTAT "-"; +BA_ "Neutral Value" SG_ 3221225472 CDMODESTAT "-"; +BA_ "Invalid Value" SG_ 3221225472 CDMODESTAT "-"; +BA_ "Invalid Value" SG_ 3221225472 ASAINH "-"; +BA_ "Neutral Value" SG_ 3221225472 ASAINH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASAINH "1b"; +BA_ "FirstFrameValue" SG_ 3221225472 ASAACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 ASAACT "-"; +BA_ "Invalid Value" SG_ 3221225472 ASAACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DBRKOVRD "-"; +BA_ "Neutral Value" SG_ 3221225472 DBRKOVRD "11b"; +BA_ "Invalid Value" SG_ 3221225472 DBRKOVRD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TGBKForce "-"; +BA_ "Neutral Value" SG_ 3221225472 TGBKForce "-"; +BA_ "Invalid Value" SG_ 3221225472 TGBKForce "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 DCDCVRQ "00b"; +BA_ "Neutral Value" SG_ 3221225472 DCDCVRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 DCDCVRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BBWFAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 BBWFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 BBWFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VCMCOMSTAT "0b"; +BA_ "Neutral Value" SG_ 3221225472 VCMCOMSTAT "-"; +BA_ "Invalid Value" SG_ 3221225472 VCMCOMSTAT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRKRBFAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 BRKRBFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 BRKRBFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RBEXE "0b"; +BA_ "Neutral Value" SG_ 3221225472 RBEXE "-"; +BA_ "Invalid Value" SG_ 3221225472 RBEXE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RBCOM "-"; +BA_ "Neutral Value" SG_ 3221225472 RBCOM "-"; +BA_ "Invalid Value" SG_ 3221225472 RBCOM "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGCOUNT_52E "0h"; +BA_ "Neutral Value" SG_ 3221225472 MSGCOUNT_52E "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGCOUNT_52E "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STR_ANGLE_OFFSET "00h"; +BA_ "Neutral Value" SG_ 3221225472 STR_ANGLE_OFFSET "00h"; +BA_ "Invalid Value" SG_ 3221225472 STR_ANGLE_OFFSET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AMP_RIGHT "0000h"; +BA_ "Neutral Value" SG_ 3221225472 AMP_RIGHT "0000h"; +BA_ "Invalid Value" SG_ 3221225472 AMP_RIGHT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AMP_LEFT "0000h"; +BA_ "Neutral Value" SG_ 3221225472 AMP_LEFT "0000h"; +BA_ "Invalid Value" SG_ 3221225472 AMP_LEFT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AMP_CENTER "0000h"; +BA_ "Neutral Value" SG_ 3221225472 AMP_CENTER "0000h"; +BA_ "Invalid Value" SG_ 3221225472 AMP_CENTER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRIAC_TEMP_ITM_degF "FFh"; +BA_ "Neutral Value" SG_ 3221225472 PRIAC_TEMP_ITM_degF "-"; +BA_ "Invalid Value" SG_ 3221225472 PRIAC_TEMP_ITM_degF "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 PRIAC_TEMP_ITM_degC "FFh"; +BA_ "Neutral Value" SG_ 3221225472 PRIAC_TEMP_ITM_degC "-"; +BA_ "Invalid Value" SG_ 3221225472 PRIAC_TEMP_ITM_degC "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 PORT_LOCK_ITMSW "00b"; +BA_ "Neutral Value" SG_ 3221225472 PORT_LOCK_ITMSW "-"; +BA_ "Invalid Value" SG_ 3221225472 PORT_LOCK_ITMSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_TYP_INFO_CLR "-"; +BA_ "Neutral Value" SG_ 3221225472 CHG_TYP_INFO_CLR "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_TYP_INFO_CLR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMP_UNIT_SET_QUk "0b"; +BA_ "Neutral Value" SG_ 3221225472 TEMP_UNIT_SET_QUk "-"; +BA_ "Invalid Value" SG_ 3221225472 TEMP_UNIT_SET_QUk "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ChargeTime200V_ITM "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 ChargeTime200V_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 ChargeTime200V_ITM "7FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 ChargeTime100V_ITM "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 ChargeTime100V_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 ChargeTime100V_ITM "7FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 C_TIME_UPDATE_ITM "0b"; +BA_ "Neutral Value" SG_ 3221225472 C_TIME_UPDATE_ITM "-"; +BA_ "Invalid Value" SG_ 3221225472 C_TIME_UPDATE_ITM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GPS_CUR_SEC "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 GPS_CUR_SEC "-"; +BA_ "Invalid Value" SG_ 3221225472 GPS_CUR_SEC "3Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 GPS_CUR_MIN "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 GPS_CUR_MIN "-"; +BA_ "Invalid Value" SG_ 3221225472 GPS_CUR_MIN "3Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 GPS_CUR_H "1FH"; +BA_ "Neutral Value" SG_ 3221225472 GPS_CUR_H "-"; +BA_ "Invalid Value" SG_ 3221225472 GPS_CUR_H "1FH"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMP_UNIT_SET "0b"; +BA_ "Neutral Value" SG_ 3221225472 TEMP_UNIT_SET "-"; +BA_ "Invalid Value" SG_ 3221225472 TEMP_UNIT_SET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PTC_AIR_TEMP "-"; +BA_ "Neutral Value" SG_ 3221225472 PTC_AIR_TEMP "-"; +BA_ "Invalid Value" SG_ 3221225472 PTC_AIR_TEMP "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 HVAC_CODE_HV2 "-"; +BA_ "Neutral Value" SG_ 3221225472 HVAC_CODE_HV2 "-"; +BA_ "Invalid Value" SG_ 3221225472 HVAC_CODE_HV2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HVAC_CODE_HV1 "-"; +BA_ "Neutral Value" SG_ 3221225472 HVAC_CODE_HV1 "-"; +BA_ "Invalid Value" SG_ 3221225472 HVAC_CODE_HV1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HVAC_OP_MODE "-"; +BA_ "Neutral Value" SG_ 3221225472 HVAC_OP_MODE "-"; +BA_ "Invalid Value" SG_ 3221225472 HVAC_OP_MODE "-"; +BA_ "Invalid Value" SG_ 3221225472 DEICE_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 DEICE_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DEICE_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 HVAC_MF_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 HVAC_MF_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HVAC_MF_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PTC_WATER_TEMP "-"; +BA_ "Neutral Value" SG_ 3221225472 PTC_WATER_TEMP "65h"; +BA_ "FirstFrameValue" SG_ 3221225472 PTC_WATER_TEMP "0h"; +BA_ "Invalid Value" SG_ 3221225472 STEER_RLY_ST "-"; +BA_ "Neutral Value" SG_ 3221225472 STEER_RLY_ST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STEER_RLY_ST "0b"; +BA_ "Invalid Value" SG_ 3221225472 SEAT_RLY_ST "-"; +BA_ "Neutral Value" SG_ 3221225472 SEAT_RLY_ST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SEAT_RLY_ST "0b"; +BA_ "Invalid Value" SG_ 3221225472 HVAC_CODE "-"; +BA_ "Neutral Value" SG_ 3221225472 HVAC_CODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HVAC_CODE "0b"; +BA_ "Invalid Value" SG_ 3221225472 IDLUP_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 IDLUP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDLUP_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 COMP_ON_FLG "-"; +BA_ "Neutral Value" SG_ 3221225472 COMP_ON_FLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMP_ON_FLG "0b"; +BA_ "Invalid Value" SG_ 3221225472 EngON_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 EngON_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EngON_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 AW_INV "I = FFh L53E HEV?? : -"; +BA_ "Neutral Value" SG_ 3221225472 AW_INV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AW_INV "00h"; +BA_ "Invalid Value" SG_ 3221225472 PRI_AC_TIME "-"; +BA_ "Neutral Value" SG_ 3221225472 PRI_AC_TIME "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRI_AC_TIME "1Fh"; +BA_ "Invalid Value" SG_ 3221225472 EVCOMFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 EVCOMFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EVCOMFAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 HVAC_RefuseToSleep "-"; +BA_ "Neutral Value" SG_ 3221225472 HVAC_RefuseToSleep "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HVAC_RefuseToSleep "10b"; +BA_ "Invalid Value" SG_ 3221225472 HiVoLT_PTC_consumption "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 HiVoLT_PTC_consumption "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HiVoLT_PTC_consumption "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 REMAIN_DIST_OIL "3FFFh"; +BA_ "Neutral Value" SG_ 3221225472 REMAIN_DIST_OIL "3FFFh"; +BA_ "Invalid Value" SG_ 3221225472 REMAIN_DIST_OIL "3FFFh"; +BA_ "Invalid Value" SG_ 3221225472 CAP_IND_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CAP_IND_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAP_IND_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBD_M_TEMP_SOAK_COMPLETED "-"; +BA_ "Neutral Value" SG_ 3221225472 OBD_M_TEMP_SOAK_COMPLETED "-"; +BA_ "Invalid Value" SG_ 3221225472 OBD_M_TEMP_SOAK_COMPLETED "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TWN "0Ah"; +BA_ "Neutral Value" SG_ 3221225472 TWN "-"; +BA_ "Invalid Value" SG_ 3221225472 TWN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MFDTYENG_7bit "0h"; +BA_ "Neutral Value" SG_ 3221225472 MFDTYENG_7bit "7fh"; +BA_ "Invalid Value" SG_ 3221225472 MFDTYENG_7bit "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MFDTYENG_8bit "0h"; +BA_ "Neutral Value" SG_ 3221225472 MFDTYENG_8bit "FFh"; +BA_ "Invalid Value" SG_ 3221225472 MFDTYENG_8bit "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIM_FINE "0000h"; +BA_ "Neutral Value" SG_ 3221225472 TIM_FINE "-"; +BA_ "Invalid Value" SG_ 3221225472 TIM_FINE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PDCUTREQ "1b"; +BA_ "Neutral Value" SG_ 3221225472 PDCUTREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PDCUTREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENG_OIL_WARNING_LAMP "0b"; +BA_ "Neutral Value" SG_ 3221225472 ENG_OIL_WARNING_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 ENG_OIL_WARNING_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENG_TYPE "-"; +BA_ "Neutral Value" SG_ 3221225472 ENG_TYPE "-"; +BA_ "Invalid Value" SG_ 3221225472 ENG_TYPE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENG_STA "00b"; +BA_ "Neutral Value" SG_ 3221225472 ENG_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 ENG_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EBD_LAMP_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 EBD_LAMP_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 EBD_LAMP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EBS_LAMP_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 EBS_LAMP_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 EBS_LAMP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PFAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 PFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 PFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRBABS "00h"; +BA_ "Neutral Value" SG_ 3221225472 STRBABS "-"; +BA_ "Invalid Value" SG_ 3221225472 STRBABS "3Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 BAS_RQ "0000b"; +BA_ "Neutral Value" SG_ 3221225472 BAS_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 BAS_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WHCTRLD "0000b"; +BA_ "Neutral Value" SG_ 3221225472 WHCTRLD "-"; +BA_ "Invalid Value" SG_ 3221225472 WHCTRLD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RQPRR "00h"; +BA_ "Neutral Value" SG_ 3221225472 RQPRR "255"; +BA_ "Invalid Value" SG_ 3221225472 RQPRR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RQPRL "00h"; +BA_ "Neutral Value" SG_ 3221225472 RQPRL "255"; +BA_ "Invalid Value" SG_ 3221225472 RQPRL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RQPFR "00h"; +BA_ "Neutral Value" SG_ 3221225472 RQPFR "255"; +BA_ "Invalid Value" SG_ 3221225472 RQPFR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RQPFL "00h"; +BA_ "Neutral Value" SG_ 3221225472 RQPFL "255"; +BA_ "Invalid Value" SG_ 3221225472 RQPFL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BNO "-"; +BA_ "Neutral Value" SG_ 3221225472 BNO "-"; +BA_ "Invalid Value" SG_ 3221225472 BNO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BLOFFRLYDIAG "0b"; +BA_ "Neutral Value" SG_ 3221225472 BLOFFRLYDIAG "-"; +BA_ "Invalid Value" SG_ 3221225472 BLOFFRLYDIAG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRDSTENBL "0b"; +BA_ "Neutral Value" SG_ 3221225472 PRDSTENBL "-"; +BA_ "Invalid Value" SG_ 3221225472 PRDSTENBL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VDCPUSTS "00b"; +BA_ "Neutral Value" SG_ 3221225472 VDCPUSTS "-"; +BA_ "Invalid Value" SG_ 3221225472 VDCPUSTS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PUFAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 PUFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 PUFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BASINH "0b"; +BA_ "Neutral Value" SG_ 3221225472 BASINH "-"; +BA_ "Invalid Value" SG_ 3221225472 BASINH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BASACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 BASACT "-"; +BA_ "Invalid Value" SG_ 3221225472 BASACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TCSACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 TCSACT "-"; +BA_ "Invalid Value" SG_ 3221225472 TCSACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABSFAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 ABSFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 ABSFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EBDFAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 EBDFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 EBDFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EBDACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 EBDACT "-"; +BA_ "Invalid Value" SG_ 3221225472 EBDACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFST_YAW_RATE "0000h"; +BA_ "Neutral Value" SG_ 3221225472 OFST_YAW_RATE "-"; +BA_ "Invalid Value" SG_ 3221225472 OFST_YAW_RATE "0FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 OFST_LAT_ACCL "000h"; +BA_ "Neutral Value" SG_ 3221225472 OFST_LAT_ACCL "-"; +BA_ "Invalid Value" SG_ 3221225472 OFST_LAT_ACCL "0FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 STR_ANGL_VDC "0000h"; +BA_ "Neutral Value" SG_ 3221225472 STR_ANGL_VDC "-"; +BA_ "Invalid Value" SG_ 3221225472 STR_ANGL_VDC "0FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 GRAD_YAW "000h"; +BA_ "Neutral Value" SG_ 3221225472 GRAD_YAW "-"; +BA_ "Invalid Value" SG_ 3221225472 GRAD_YAW "7FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 DROVER_TGT_YAWRATE "0000h"; +BA_ "Neutral Value" SG_ 3221225472 DROVER_TGT_YAWRATE "-"; +BA_ "Invalid Value" SG_ 3221225472 DROVER_TGT_YAWRATE "0FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 PRSSR_SENSR_VAL "-"; +BA_ "Neutral Value" SG_ 3221225472 PRSSR_SENSR_VAL "-"; +BA_ "Invalid Value" SG_ 3221225472 PRSSR_SENSR_VAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBA_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 PBA_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 PBA_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDP_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 LDP_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 LDP_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDP_ENBL "-"; +BA_ "Neutral Value" SG_ 3221225472 LDP_ENBL "-"; +BA_ "Invalid Value" SG_ 3221225472 LDP_ENBL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDP_ALIVE "-"; +BA_ "Neutral Value" SG_ 3221225472 LDP_ALIVE "-"; +BA_ "Invalid Value" SG_ 3221225472 LDP_ALIVE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FCAAS_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 FCAAS_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 FCAAS_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FCAAS_ENBL "-"; +BA_ "Neutral Value" SG_ 3221225472 FCAAS_ENBL "-"; +BA_ "Invalid Value" SG_ 3221225472 FCAAS_ENBL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FCAAS_ALIVE "-"; +BA_ "Neutral Value" SG_ 3221225472 FCAAS_ALIVE "-"; +BA_ "Invalid Value" SG_ 3221225472 FCAAS_ALIVE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBA_ENBL "-"; +BA_ "Neutral Value" SG_ 3221225472 PBA_ENBL "-"; +BA_ "Invalid Value" SG_ 3221225472 PBA_ENBL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBA_ALIVE "-"; +BA_ "Neutral Value" SG_ 3221225472 PBA_ALIVE "-"; +BA_ "Invalid Value" SG_ 3221225472 PBA_ALIVE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_ALIVE "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_ALIVE "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_ALIVE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_ENBL "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_ENBL "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_ENBL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBFS_NO "0b (No Driver Brake)"; +BA_ "Neutral Value" SG_ 3221225472 PBFS_NO "-"; +BA_ "Invalid Value" SG_ 3221225472 PBFS_NO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBFS_NC "1b(No driver brake)"; +BA_ "Neutral Value" SG_ 3221225472 PBFS_NC "-"; +BA_ "Invalid Value" SG_ 3221225472 PBFS_NC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RELEASE_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 RELEASE_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 RELEASE_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ITS_TRGT_YAW_CLKB "-"; +BA_ "Neutral Value" SG_ 3221225472 ITS_TRGT_YAW_CLKB "-"; +BA_ "Invalid Value" SG_ 3221225472 ITS_TRGT_YAW_CLKB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ITS_TRGT_PRSSR_CLKB "-"; +BA_ "Neutral Value" SG_ 3221225472 ITS_TRGT_PRSSR_CLKB "-"; +BA_ "Invalid Value" SG_ 3221225472 ITS_TRGT_PRSSR_CLKB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DCM_WAKEUP "-"; +BA_ "Neutral Value" SG_ 3221225472 DCM_WAKEUP "-"; +BA_ "Invalid Value" SG_ 3221225472 DCM_WAKEUP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 D_REGEMAX_7 "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 D_REGEMAX_7 "-"; +BA_ "Invalid Value" SG_ 3221225472 D_REGEMAX_7 "7Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 D_MGMAX_7 "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 D_MGMAX_7 "-"; +BA_ "Invalid Value" SG_ 3221225472 D_MGMAX_7 "7Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 D_MTRPOWER_QUk "000h"; +BA_ "Neutral Value" SG_ 3221225472 D_MTRPOWER_QUk "-"; +BA_ "Invalid Value" SG_ 3221225472 D_MTRPOWER_QUk "FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 D_REGEMAX "FFh"; +BA_ "Neutral Value" SG_ 3221225472 D_REGEMAX "-"; +BA_ "Invalid Value" SG_ 3221225472 D_REGEMAX "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 D_MTRPOWER "FFFh"; +BA_ "Invalid Value" SG_ 3221225472 D_MTRPOWER "FFFh"; +BA_ "Neutral Value" SG_ 3221225472 D_MTRPOWER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 D_MGMAX "FFh"; +BA_ "Neutral Value" SG_ 3221225472 D_MGMAX "-"; +BA_ "Invalid Value" SG_ 3221225472 D_MGMAX "FFh"; +BA_ "Invalid Value" SG_ 3221225472 TCSOC_DISP "-"; +BA_ "Neutral Value" SG_ 3221225472 TCSOC_DISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TCSOC_DISP "0b"; +BA_ "Invalid Value" SG_ 3221225472 CHG_TIME_PERMISSION "-"; +BA_ "Neutral Value" SG_ 3221225472 CHG_TIME_PERMISSION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_TIME_PERMISSION "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOH_DISP "FFh"; +BA_ "Neutral Value" SG_ 3221225472 SOH_DISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOH_DISP "FFh"; +BA_ "Invalid Value" SG_ 3221225472 SOC_DISP "-"; +BA_ "Neutral Value" SG_ 3221225472 SOC_DISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOC_DISP "00h"; +BA_ "Invalid Value" SG_ 3221225472 CHG_TIME_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 CHG_TIME_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_TIME_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 CHARGE_TIME "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 CHARGE_TIME "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHARGE_TIME "7FFh"; +BA_ "Invalid Value" SG_ 3221225472 VOLT_INFO_GOM "-"; +BA_ "Neutral Value" SG_ 3221225472 VOLT_INFO_GOM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VOLT_INFO_GOM "-"; +BA_ "Invalid Value" SG_ 3221225472 BAT_DETERIORATE "-"; +BA_ "Neutral Value" SG_ 3221225472 BAT_DETERIORATE "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 BAT_DETERIORATE "00h"; +BA_ "Invalid Value" SG_ 3221225472 TEMP_HIVOLTBATT_DISP "FFh"; +BA_ "Neutral Value" SG_ 3221225472 TEMP_HIVOLTBATT_DISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMP_HIVOLTBATT_DISP "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 TCSOC "0b"; +BA_ "Neutral Value" SG_ 3221225472 TCSOC "-"; +BA_ "Invalid Value" SG_ 3221225472 TCSOC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMP_HIVOLBATT "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 TEMP_HIVOLBATT "-"; +BA_ "Invalid Value" SG_ 3221225472 TEMP_HIVOLBATT "7Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 D_REALCAPA "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 D_REALCAPA "-"; +BA_ "Invalid Value" SG_ 3221225472 D_REALCAPA "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 ChargeTime200V "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 ChargeTime200V "-"; +BA_ "Invalid Value" SG_ 3221225472 ChargeTime200V "7FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 ChargeTime100V "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 ChargeTime100V "-"; +BA_ "Invalid Value" SG_ 3221225472 ChargeTime100V "7FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CHECKSUM5BF "-"; +BA_ "Neutral Value" SG_ 3221225472 CHECKSUM5BF "-"; +BA_ "Invalid Value" SG_ 3221225472 CHECKSUM5BF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHGCUR "-"; +BA_ "Neutral Value" SG_ 3221225472 CHGCUR "-"; +BA_ "Invalid Value" SG_ 3221225472 CHGCUR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHGSNO "-"; +BA_ "Neutral Value" SG_ 3221225472 CHGSNO "-"; +BA_ "Invalid Value" SG_ 3221225472 CHGSNO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHGVOL "-"; +BA_ "Neutral Value" SG_ 3221225472 CHGVOL "-"; +BA_ "Invalid Value" SG_ 3221225472 CHGVOL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACFREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ACFREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ACFREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHGCODE "-"; +BA_ "Neutral Value" SG_ 3221225472 CHGCODE "-"; +BA_ "Invalid Value" SG_ 3221225472 CHGCODE "-"; +BA_ "Invalid Value" SG_ 3221225472 FPCSCONDET "-"; +BA_ "Neutral Value" SG_ 3221225472 FPCSCONDET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FPCSCONDET "-"; +BA_ "Invalid Value" SG_ 3221225472 FQCRELAYSTATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 FQCRELAYSTATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FQCRELAYSTATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 FNCRELAYSTATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 FNCRELAYSTATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FNCRELAYSTATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 FQCHGIRSENS "-"; +BA_ "Neutral Value" SG_ 3221225472 FQCHGIRSENS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FQCHGIRSENS "1b"; +BA_ "Invalid Value" SG_ 3221225472 ACVOL "1FFh"; +BA_ "Neutral Value" SG_ 3221225472 ACVOL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACVOL "-"; +BA_ "Invalid Value" SG_ 3221225472 FQRLYCHKFIN "-"; +BA_ "Neutral Value" SG_ 3221225472 FQRLYCHKFIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FQRLYCHKFIN "0b"; +BA_ "Invalid Value" SG_ 3221225472 FNRLYCHKFIN "-"; +BA_ "Neutral Value" SG_ 3221225472 FNRLYCHKFIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FNRLYCHKFIN "0b"; +BA_ "Invalid Value" SG_ 3221225472 FNCHGOK "-"; +BA_ "Neutral Value" SG_ 3221225472 FNCHGOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FNCHGOK "0b"; +BA_ "Invalid Value" SG_ 3221225472 READYTOSLP "-"; +BA_ "Neutral Value" SG_ 3221225472 READYTOSLP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 READYTOSLP "-"; +BA_ "Invalid Value" SG_ 3221225472 QRLYCHKEND "-"; +BA_ "Neutral Value" SG_ 3221225472 QRLYCHKEND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 QRLYCHKEND "00b"; +BA_ "Invalid Value" SG_ 3221225472 NRLYCHKEND "-"; +BA_ "Neutral Value" SG_ 3221225472 NRLYCHKEND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NRLYCHKEND "00b"; +BA_ "Invalid Value" SG_ 3221225472 FQGFCEND "-"; +BA_ "Neutral Value" SG_ 3221225472 FQGFCEND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FQGFCEND "0b"; +BA_ "Invalid Value" SG_ 3221225472 FRESTARTOK "-"; +BA_ "Neutral Value" SG_ 3221225472 FRESTARTOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FRESTARTOK "0b"; +BA_ "Invalid Value" SG_ 3221225472 FHCCONDET "-"; +BA_ "Neutral Value" SG_ 3221225472 FHCCONDET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FHCCONDET "0b"; +BA_ "Invalid Value" SG_ 3221225472 ACVOLJUDG "11b"; +BA_ "Neutral Value" SG_ 3221225472 ACVOLJUDG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACVOLJUDG "-"; +BA_ "Invalid Value" SG_ 3221225472 CHECKSUM380 "-"; +BA_ "Neutral Value" SG_ 3221225472 CHECKSUM380 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHECKSUM380 "-"; +BA_ "Invalid Value" SG_ 3221225472 MPRUN380 "-"; +BA_ "Neutral Value" SG_ 3221225472 MPRUN380 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MPRUN380 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_STA_FOR_MET "000b"; +BA_ "Neutral Value" SG_ 3221225472 CHG_STA_FOR_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_STA_FOR_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PORT_LOCK_SW "00b"; +BA_ "Neutral Value" SG_ 3221225472 PORT_LOCK_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 PORT_LOCK_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OPMIS_INCHG "0b"; +BA_ "Neutral Value" SG_ 3221225472 OPMIS_INCHG "-"; +BA_ "Invalid Value" SG_ 3221225472 OPMIS_INCHG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REFUSE_BUZZER "0b"; +BA_ "Neutral Value" SG_ 3221225472 REFUSE_BUZZER "-"; +BA_ "Invalid Value" SG_ 3221225472 REFUSE_BUZZER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SBW_WARNINGLAMP "0b"; +BA_ "Neutral Value" SG_ 3221225472 SBW_WARNINGLAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 SBW_WARNINGLAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SBW_WARNING_MSG "000b"; +BA_ "Neutral Value" SG_ 3221225472 SBW_WARNING_MSG "-"; +BA_ "Invalid Value" SG_ 3221225472 SBW_WARNING_MSG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OutsideTemp_AD "FFh"; +BA_ "Neutral Value" SG_ 3221225472 OutsideTemp_AD "-"; +BA_ "Invalid Value" SG_ 3221225472 OutsideTemp_AD "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 D_OTH_POWER "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 D_OTH_POWER "-"; +BA_ "Invalid Value" SG_ 3221225472 D_OTH_POWER "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 D_AC_POWER "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 D_AC_POWER "-"; +BA_ "Invalid Value" SG_ 3221225472 D_AC_POWER "3Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 TIM_MTR "FFh"; +BA_ "Neutral Value" SG_ 3221225472 TIM_MTR "-"; +BA_ "Invalid Value" SG_ 3221225472 TIM_MTR "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 VCM_BLBCHK "0b"; +BA_ "Neutral Value" SG_ 3221225472 VCM_BLBCHK "-"; +BA_ "Invalid Value" SG_ 3221225472 VCM_BLBCHK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIM_OTHER "Fh"; +BA_ "Neutral Value" SG_ 3221225472 TIM_OTHER "-"; +BA_ "Invalid Value" SG_ 3221225472 TIM_OTHER "Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 TIM_AC "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 TIM_AC "-"; +BA_ "Invalid Value" SG_ 3221225472 TIM_AC "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 SOONCHGSW_RQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 SOONCHGSW_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SOONCHGSW_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_Meter2 "00000b"; +BA_ "Neutral Value" SG_ 3221225472 ECO_Meter2 "00000b"; +BA_ "Invalid Value" SG_ 3221225472 ECO_Meter2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_Meter1 "0000b"; +BA_ "Neutral Value" SG_ 3221225472 ECO_Meter1 "0000b"; +BA_ "Invalid Value" SG_ 3221225472 ECO_Meter1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 ACSW "-"; +BA_ "Invalid Value" SG_ 3221225472 ACSW "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_CAPSEG "Fh"; +BA_ "Neutral Value" SG_ 3221225472 LB_CAPSEG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_CAPSEG "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_SOH "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_SOH "64h"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_SOH "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_FULLCAP "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_FULLCAP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_FULLCAP "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_CAPR "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_CAPR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_CAPR "3FFh"; +BA_ "Invalid Value" SG_ 3221225472 LB_RLIMT "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_RLIMT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_RLIMT "000b"; +BA_ "Invalid Value" SG_ 3221225472 LB_RCHGTIM "1FFFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_RCHGTIM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_RCHGTIM "1FFFh"; +BA_ "Invalid Value" SG_ 3221225472 LB_RCHGTCON "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_RCHGTCON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_RCHGTCON "11111b"; +BA_ "Invalid Value" SG_ 3221225472 LB_CAPSW "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_CAPSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_CAPSW "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_AVET "FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_AVET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_AVET "FFh"; +BA_ "Invalid Value" SG_ 3221225472 LB_BPCUPRATE "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_BPCUPRATE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_BPCUPRATE "000b"; +BA_ "Invalid Value" SG_ 3221225472 LB_BPCMAX "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 LB_BPCMAX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_BPCMAX "3FFh"; +BA_ "Invalid Value" SG_ 3221225472 LB_PIN_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_PIN_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_PIN_STATUS "01b"; +BA_ "Invalid Value" SG_ 3221225472 LB_CODECON "111b"; +BA_ "Neutral Value" SG_ 3221225472 LB_CODECON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_CODECON "111b"; +BA_ "Invalid Value" SG_ 3221225472 LB_CODE2 "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_CODE2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_CODE2 "-"; +BA_ "Invalid Value" SG_ 3221225472 LB_CODE1 "-"; +BA_ "Neutral Value" SG_ 3221225472 LB_CODE1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LB_CODE1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FVHMGVOL "-"; +BA_ "Neutral Value" SG_ 3221225472 FVHMGVOL "-"; +BA_ "Invalid Value" SG_ 3221225472 FVHMGVOL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATABYTE1_SEQCT "-"; +BA_ "Neutral Value" SG_ 3221225472 DATABYTE1_SEQCT "-"; +BA_ "Invalid Value" SG_ 3221225472 DATABYTE1_SEQCT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATABYTE0_HTYVCM "-"; +BA_ "Neutral Value" SG_ 3221225472 DATABYTE0_HTYVCM "-"; +BA_ "Invalid Value" SG_ 3221225472 DATABYTE0_HTYVCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DDC_VCNTRL "-"; +BA_ "Neutral Value" SG_ 3221225472 DDC_VCNTRL "-"; +BA_ "Invalid Value" SG_ 3221225472 DDC_VCNTRL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FDDC_INHREQ "1b"; +BA_ "Neutral Value" SG_ 3221225472 FDDC_INHREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 FDDC_INHREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHKQCRLY "00b"; +BA_ "Neutral Value" SG_ 3221225472 CHKQCRLY "-"; +BA_ "Invalid Value" SG_ 3221225472 CHKQCRLY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FCHKRLYEN "0b"; +BA_ "Neutral Value" SG_ 3221225472 FCHKRLYEN "-"; +BA_ "Invalid Value" SG_ 3221225472 FCHKRLYEN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 KEEP_SOC_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 KEEP_SOC_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 KEEP_SOC_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BPCMAX_VCM "000h"; +BA_ "Neutral Value" SG_ 3221225472 BPCMAX_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 BPCMAX_VCM "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 NRLYCHK_REFUSE_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 NRLYCHK_REFUSE_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 NRLYCHK_REFUSE_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FVERRDISP "0b"; +BA_ "Neutral Value" SG_ 3221225472 FVERRDISP "-"; +BA_ "Invalid Value" SG_ 3221225472 FVERRDISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_STA_RQ "00b"; +BA_ "Neutral Value" SG_ 3221225472 CHG_STA_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_STA_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FSCHGRLY_ST "0b"; +BA_ "Neutral Value" SG_ 3221225472 FSCHGRLY_ST "-"; +BA_ "Invalid Value" SG_ 3221225472 FSCHGRLY_ST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HIVOLT_ST "0b"; +BA_ "Neutral Value" SG_ 3221225472 HIVOLT_ST "-"; +BA_ "Invalid Value" SG_ 3221225472 HIVOLT_ST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HIVOLT_DISC_FN "0b"; +BA_ "Neutral Value" SG_ 3221225472 HIVOLT_DISC_FN "-"; +BA_ "Invalid Value" SG_ 3221225472 HIVOLT_DISC_FN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_STA "00b"; +BA_ "Neutral Value" SG_ 3221225472 CHG_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DCM_DOOR_UNLOCK "0b"; +BA_ "Neutral Value" SG_ 3221225472 DCM_DOOR_UNLOCK "-"; +BA_ "Invalid Value" SG_ 3221225472 DCM_DOOR_UNLOCK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DCM_DOOR_LOCK "0b"; +BA_ "Neutral Value" SG_ 3221225472 DCM_DOOR_LOCK "-"; +BA_ "Invalid Value" SG_ 3221225472 DCM_DOOR_LOCK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DCM_WS_REQ "11b"; +BA_ "Neutral Value" SG_ 3221225472 DCM_WS_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 DCM_WS_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DCM_REFUSE "10b"; +BA_ "Neutral Value" SG_ 3221225472 DCM_REFUSE "-"; +BA_ "Invalid Value" SG_ 3221225472 DCM_REFUSE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DCM_PRI_ACON "00b"; +BA_ "Neutral Value" SG_ 3221225472 DCM_PRI_ACON "-"; +BA_ "Invalid Value" SG_ 3221225472 DCM_PRI_ACON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DCM_CHG_RQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 DCM_CHG_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 DCM_CHG_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 EstimateGrade "-"; +BA_ "Neutral Value" SG_ 3221225472 EstimateGrade "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 EstimateGrade "-"; +BA_ "Invalid Value" SG_ 3221225472 AT_354_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_354_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_354_FAIL "HCM_DZ : 0b +others : -"; +BA_ "Invalid Value" SG_ 3221225472 AT_245_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_245_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_245_FAIL "HCM_DZ : 0b +others : -"; +BA_ "Invalid Value" SG_ 3221225472 OFF_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 OFF_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFF_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 EGVRHCFL "-"; +BA_ "Neutral Value" SG_ 3221225472 EGVRHCFL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EGVRHCFL "-"; +BA_ "Invalid Value" SG_ 3221225472 EGVRBTOK "-"; +BA_ "Neutral Value" SG_ 3221225472 EGVRBTOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EGVRBTOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAP_IND_RST_STA "0b"; +BA_ "Neutral Value" SG_ 3221225472 CAP_IND_RST_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 CAP_IND_RST_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 BTA_MAIL_SEND_OK "-"; +BA_ "Neutral Value" SG_ 3221225472 BTA_MAIL_SEND_OK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BTA_MAIL_SEND_OK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VCM_WakeUpSleepCmd_For_ShBW "11b"; +BA_ "Neutral Value" SG_ 3221225472 VCM_WakeUpSleepCmd_For_ShBW "-"; +BA_ "Invalid Value" SG_ 3221225472 VCM_WakeUpSleepCmd_For_ShBW "-"; +BA_ "Invalid Value" SG_ 3221225472 VCMMIL "-"; +BA_ "Neutral Value" SG_ 3221225472 VCMMIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VCMMIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VCM_WakeUpSleepCmd "EV : 11b +HEV : -"; +BA_ "Neutral Value" SG_ 3221225472 VCM_WakeUpSleepCmd "-"; +BA_ "Invalid Value" SG_ 3221225472 VCM_WakeUpSleepCmd "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VCM_STATUS "EV: 00b..."; +BA_ "Neutral Value" SG_ 3221225472 VCM_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 VCM_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CANMASK "0b"; +BA_ "Neutral Value" SG_ 3221225472 CANMASK "-"; +BA_ "Invalid Value" SG_ 3221225472 CANMASK "-"; +BA_ "Invalid Value" SG_ 3221225472 STRKSFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 STRKSFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRKSFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRKSAVV "FFh"; +BA_ "Neutral Value" SG_ 3221225472 STRKSAVV "-"; +BA_ "Invalid Value" SG_ 3221225472 STRKSAVV "FFh"; +BA_ "Invalid Value" SG_ 3221225472 CHG_SOUND_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CHG_SOUND_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_SOUND_REQ "00b"; +BA_ "Invalid Value" SG_ 3221225472 ENGSHTDWN_DISP "-"; +BA_ "Neutral Value" SG_ 3221225472 ENGSHTDWN_DISP "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 ENGSHTDWN_DISP "00b"; +BA_ "Invalid Value" SG_ 3221225472 NOTENGST_WARN "-"; +BA_ "Neutral Value" SG_ 3221225472 NOTENGST_WARN "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 NOTENGST_WARN "00b"; +BA_ "Invalid Value" SG_ 3221225472 SHIFT_CAUTION "-"; +BA_ "Neutral Value" SG_ 3221225472 SHIFT_CAUTION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SHIFT_CAUTION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STOP_PKB_RQ "00b"; +BA_ "Neutral Value" SG_ 3221225472 STOP_PKB_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 STOP_PKB_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SLOW_CAUSE "000b"; +BA_ "Neutral Value" SG_ 3221225472 SLOW_CAUSE "-"; +BA_ "Invalid Value" SG_ 3221225472 SLOW_CAUSE "-"; +BA_ "Invalid Value" SG_ 3221225472 ASSIST_CHARGE "-"; +BA_ "Neutral Value" SG_ 3221225472 ASSIST_CHARGE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASSIST_CHARGE "00h"; +BA_ "Invalid Value" SG_ 3221225472 ECO_APO "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_APO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_APO "00h"; +BA_ "Invalid Value" SG_ 3221225472 APO_DISP "-"; +BA_ "Neutral Value" SG_ 3221225472 APO_DISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 APO_DISP "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 SLOW_RQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 SLOW_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SLOW_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RQ_SHIFTP "0b"; +BA_ "Neutral Value" SG_ 3221225472 RQ_SHIFTP "-"; +BA_ "Invalid Value" SG_ 3221225472 RQ_SHIFTP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 READY_RQ "HEV: - EV: 00b"; +BA_ "Neutral Value" SG_ 3221225472 READY_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 READY_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 HILLHOLD_RQ "-"; +BA_ "Neutral Value" SG_ 3221225472 HILLHOLD_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HILLHOLD_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 EV_RQ "-"; +BA_ "Neutral Value" SG_ 3221225472 EV_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EV_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BAT_RQ "HEV: -..."; +BA_ "Neutral Value" SG_ 3221225472 BAT_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 BAT_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAUTION_RQ "HEV: -..."; +BA_ "Neutral Value" SG_ 3221225472 CAUTION_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CAUTION_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 LBCDATA "-"; +BA_ "Neutral Value" SG_ 3221225472 LBCDATA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LBCDATA "-"; +BA_ "Invalid Value" SG_ 3221225472 RrACsetting_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 RrACsetting_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrACsetting_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 ChangeStatus_54E "-"; +BA_ "Neutral Value" SG_ 3221225472 ChangeStatus_54E "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ChangeStatus_54E "-"; +BA_ "Invalid Value" SG_ 3221225472 Aroma_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 Aroma_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Aroma_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 AirQualitySensorSensitivity_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 AirQualitySensorSensitivity_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirQualitySensorSensitivity_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 VariableAirFlowCycle_PASS_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 VariableAirFlowCycle_PASS_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VariableAirFlowCycle_PASS_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 VariableAirFlowCycle_DR_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 VariableAirFlowCycle_DR_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VariableAirFlowCycle_DR_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 VariableAirFlow_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 VariableAirFlow_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VariableAirFlow_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 Uppervent_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 Uppervent_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Uppervent_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 ForestSetting_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 ForestSetting_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ForestSetting_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 ForestDisplaySeting_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 ForestDisplaySeting_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ForestDisplaySeting_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 DUAL_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 DUAL_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DUAL_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 AirFlowBalance_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 AirFlowBalance_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirFlowBalance_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 CabinAirPolutionLevel "-"; +BA_ "Neutral Value" SG_ 3221225472 CabinAirPolutionLevel "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CabinAirPolutionLevel "-"; +BA_ "Invalid Value" SG_ 3221225472 AirPurifier_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 AirPurifier_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirPurifier_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 AC_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 _4zone_SOD "-"; +BA_ "Neutral Value" SG_ 3221225472 _4zone_SOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 _4zone_SOD "-"; +BA_ "Invalid Value" SG_ 3221225472 AirFlowBalanceLevel_DR "-"; +BA_ "Neutral Value" SG_ 3221225472 AirFlowBalanceLevel_DR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirFlowBalanceLevel_DR "-"; +BA_ "Invalid Value" SG_ 3221225472 AirFlowBalanceLevel "-"; +BA_ "Neutral Value" SG_ 3221225472 AirFlowBalanceLevel "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirFlowBalanceLevel "-"; +BA_ "Invalid Value" SG_ 3221225472 VariableAirFlowSW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 VariableAirFlowSW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VariableAirFlowSW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 VariableAirFlowStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 VariableAirFlowStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VariableAirFlowStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 VariableAirFlowLevel_DR "-"; +BA_ "Neutral Value" SG_ 3221225472 VariableAirFlowLevel_DR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VariableAirFlowLevel_DR "-"; +BA_ "Invalid Value" SG_ 3221225472 HumidtySensorSensitivity "-"; +BA_ "Neutral Value" SG_ 3221225472 HumidtySensorSensitivity "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HumidtySensorSensitivity "-"; +BA_ "Invalid Value" SG_ 3221225472 FogStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 FogStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FogStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 AutoDefrosterStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 AutoDefrosterStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AutoDefrosterStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 VariableAirFlowExistence "-"; +BA_ "Neutral Value" SG_ 3221225472 VariableAirFlowExistence "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VariableAirFlowExistence "-"; +BA_ "Invalid Value" SG_ 3221225472 HumidtySensorExistence "-"; +BA_ "Neutral Value" SG_ 3221225472 HumidtySensorExistence "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HumidtySensorExistence "-"; +BA_ "Invalid Value" SG_ 3221225472 ForestSW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 ForestSW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ForestSW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 ForestAC_Existence "-"; +BA_ "Neutral Value" SG_ 3221225472 ForestAC_Existence "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ForestAC_Existence "-"; +BA_ "Invalid Value" SG_ 3221225472 ClimateSwitchExistence "-"; +BA_ "Neutral Value" SG_ 3221225472 ClimateSwitchExistence "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ClimateSwitchExistence "-"; +BA_ "Invalid Value" SG_ 3221225472 _4zoneSW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 _4zoneSW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 _4zoneSW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 AromaSW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 AromaSW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AromaSW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 AromaStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 AromaStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AromaStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 AromaExistence "-"; +BA_ "Neutral Value" SG_ 3221225472 AromaExistence "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AromaExistence "-"; +BA_ "Invalid Value" SG_ 3221225472 AirFlowBalanceExistence "-"; +BA_ "Neutral Value" SG_ 3221225472 AirFlowBalanceExistence "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirFlowBalanceExistence "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_ONDISP "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_ONDISP "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_ONDISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_ONDISP "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_ONDISP "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_ONDISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_AUTSET "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_AUTSET "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_AUTSET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_OFF_ASIND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_OFF_ASIND "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_OFF_ASIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_MID_ASIND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_MID_ASIND "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_MID_ASIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_LO_ASIND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_LO_ASIND "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_LO_ASIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_HI_ASIND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_HI_ASIND "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_HI_ASIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_AUTSET "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_AUTSET "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_AUTSET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_OFF_DRIND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_OFF_DRIND "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_OFF_DRIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_MID_DRIND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_MID_DRIND "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_MID_DRIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_LO_DRIND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_LO_DRIND "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_LO_DRIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_HI_DRIND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_HI_DRIND "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_HI_DRIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AUTO_DRIND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AUTO_DRIND "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AUTO_DRIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AUTO_ASIND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AUTO_ASIND "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AUTO_ASIND "-"; +BA_ "Invalid Value" SG_ 3221225472 CAV_CONT_EXISTANCE "-"; +BA_ "Neutral Value" SG_ 3221225472 CAV_CONT_EXISTANCE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAV_CONT_EXISTANCE "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_SW_FB "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_SW_FB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_SW_FB "-"; +BA_ "Invalid Value" SG_ 3221225472 STATUS_CAV_SW_DISP "-"; +BA_ "Neutral Value" SG_ 3221225472 STATUS_CAV_SW_DISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STATUS_CAV_SW_DISP "-"; +BA_ "Invalid Value" SG_ 3221225472 ChangeStatus_54D "-"; +BA_ "Neutral Value" SG_ 3221225472 ChangeStatus_54D "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ChangeStatus_54D "-"; +BA_ "Invalid Value" SG_ 3221225472 _3rdVentSW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 _3rdVentSW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 _3rdVentSW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 _3rdVentStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 _3rdVentStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 _3rdVentStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 UpperVentSW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 UpperVentSW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UpperVentSW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 UpperVentStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 UpperVentStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UpperVentStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 UpperVentAutoSW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 UpperVentAutoSW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UpperVentAutoSW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 UpperVentAutoStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 UpperVentAutoStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UpperVentAutoStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 B_PLR_VentSW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 B_PLR_VentSW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 B_PLR_VentSW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 B_PLR_VentStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 B_PLR_VentStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 B_PLR_VentStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAC_SelfDiagnosing "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAC_SelfDiagnosing "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAC_SelfDiagnosing "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAC_FanSpeedStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAC_FanSpeedStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAC_FanSpeedStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAC_AutoSW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAC_AutoSW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAC_AutoSW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAC_AutoStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAC_AutoStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAC_AutoStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAC_AirVentStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAC_AirVentStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAC_AirVentStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAC_SystemStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAC_SystemStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAC_SystemStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 Rear_on_display_status "-"; +BA_ "Neutral Value" SG_ 3221225472 Rear_on_display_status "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Rear_on_display_status "0b"; +BA_ "Invalid Value" SG_ 3221225472 Rear_off_Status "-"; +BA_ "Neutral Value" SG_ 3221225472 Rear_off_Status "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Rear_off_Status "-"; +BA_ "Invalid Value" SG_ 3221225472 Rear_AC_system_indicator "-"; +BA_ "Neutral Value" SG_ 3221225472 Rear_AC_system_indicator "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Rear_AC_system_indicator "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_TempUpSW_RrPass "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_TempUpSW_RrPass "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_TempUpSW_RrPass "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_TempDownSW_RrPass "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_TempDownSW_RrPass "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_TempDownSW_RrPass "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_AirVentSW_RrPass "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_AirVentSW_RrPass "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_AirVentSW_RrPass "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HumidtySensorSensitivityDownSW "-"; +BA_ "Neutral Value" SG_ 3221225472 HumidtySensorSensitivityDownSW "-"; +BA_ "Invalid Value" SG_ 3221225472 HumidtySensorSensitivityDownSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HumidtySensorSensitivityUpSW "-"; +BA_ "Neutral Value" SG_ 3221225472 HumidtySensorSensitivityUpSW "-"; +BA_ "Invalid Value" SG_ 3221225472 HumidtySensorSensitivityUpSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirFlowBalancePASSp_AdjustSW "-"; +BA_ "Neutral Value" SG_ 3221225472 AirFlowBalancePASSp_AdjustSW "-"; +BA_ "Invalid Value" SG_ 3221225472 AirFlowBalancePASSp_AdjustSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirFlowBalanceDRp_AdjustSW "-"; +BA_ "Neutral Value" SG_ 3221225472 AirFlowBalanceDRp_AdjustSW "-"; +BA_ "Invalid Value" SG_ 3221225472 AirFlowBalanceDRp_AdjustSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VariableAirFlowSW "-"; +BA_ "Neutral Value" SG_ 3221225472 VariableAirFlowSW "-"; +BA_ "Invalid Value" SG_ 3221225472 VariableAirFlowSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VariableAirFlowCycleSlowSW_DR "-"; +BA_ "Neutral Value" SG_ 3221225472 VariableAirFlowCycleSlowSW_DR "-"; +BA_ "Invalid Value" SG_ 3221225472 VariableAirFlowCycleSlowSW_DR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VariableAirFlowCycleQuickSW_DR "-"; +BA_ "Neutral Value" SG_ 3221225472 VariableAirFlowCycleQuickSW_DR "-"; +BA_ "Invalid Value" SG_ 3221225472 VariableAirFlowCycleQuickSW_DR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ForestSW "-"; +BA_ "Neutral Value" SG_ 3221225472 ForestSW "-"; +BA_ "Invalid Value" SG_ 3221225472 ForestSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AromaSW "-"; +BA_ "Neutral Value" SG_ 3221225472 AromaSW "-"; +BA_ "Invalid Value" SG_ 3221225472 AromaSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 _4zoneSW "-"; +BA_ "Neutral Value" SG_ 3221225472 _4zoneSW "-"; +BA_ "Invalid Value" SG_ 3221225472 _4zoneSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STATUS_OF_PERIOD "-"; +BA_ "Neutral Value" SG_ 3221225472 STATUS_OF_PERIOD "-"; +BA_ "Invalid Value" SG_ 3221225472 STATUS_OF_PERIOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INITIALIZING_BIT "1b"; +BA_ "Neutral Value" SG_ 3221225472 INITIALIZING_BIT "-"; +BA_ "Invalid Value" SG_ 3221225472 INITIALIZING_BIT "-"; +BA_ "Invalid Value" SG_ 3221225472 NAVI_DISP_SPEED_LIMIT "-"; +BA_ "Neutral Value" SG_ 3221225472 NAVI_DISP_SPEED_LIMIT "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 NAVI_DISP_SPEED_LIMIT "00h"; +BA_ "Invalid Value" SG_ 3221225472 Unit_SpeedLimt_Navi "-"; +BA_ "Neutral Value" SG_ 3221225472 Unit_SpeedLimt_Navi "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Unit_SpeedLimt_Navi "0b"; +BA_ "Invalid Value" SG_ 3221225472 BLINK_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 BLINK_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BLINK_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 fSPEED_LIMIT_CHANGE "-"; +BA_ "Neutral Value" SG_ 3221225472 fSPEED_LIMIT_CHANGE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fSPEED_LIMIT_CHANGE "0b"; +BA_ "Invalid Value" SG_ 3221225472 fSPEED_LIMIT_DISP "-"; +BA_ "Neutral Value" SG_ 3221225472 fSPEED_LIMIT_DISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fSPEED_LIMIT_DISP "0b"; +BA_ "Invalid Value" SG_ 3221225472 Voice_talk_flag "-"; +BA_ "Neutral Value" SG_ 3221225472 Voice_talk_flag "00000000b"; +BA_ "FirstFrameValue" SG_ 3221225472 Voice_talk_flag "00000000b"; +BA_ "Invalid Value" SG_ 3221225472 LINKF_REQ_FLG "-"; +BA_ "Neutral Value" SG_ 3221225472 LINKF_REQ_FLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LINKF_REQ_FLG "0b"; +BA_ "Invalid Value" SG_ 3221225472 Link_Fail_point "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 Link_Fail_point "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Link_Fail_point "1Fh"; +BA_ "Invalid Value" SG_ 3221225472 Link_Fail_count "-"; +BA_ "Neutral Value" SG_ 3221225472 Link_Fail_count "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Link_Fail_count "0h"; +BA_ "Invalid Value" SG_ 3221225472 CheckSum_5EA "-"; +BA_ "Neutral Value" SG_ 3221225472 CheckSum_5EA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CheckSum_5EA "-"; +BA_ "Invalid Value" SG_ 3221225472 branch_flag "-"; +BA_ "Neutral Value" SG_ 3221225472 branch_flag "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 branch_flag "00b"; +BA_ "Invalid Value" SG_ 3221225472 STRG_MODE "1111b"; +BA_ "Neutral Value" SG_ 3221225472 STRG_MODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRG_MODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPORT_MODE_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 SPORT_MODE_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 SPORT_MODE_SW "10b,11b"; +BA_ "Invalid Value" SG_ 3221225472 STANDARD_MODE_SW "10b,11b"; +BA_ "Neutral Value" SG_ 3221225472 STANDARD_MODE_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STANDARD_MODE_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_MODE_SW "10b,11b"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_MODE_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_MODE_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_MODE_SW "10b,11b"; +BA_ "Neutral Value" SG_ 3221225472 ECO_MODE_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_MODE_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 CUR_STATE_R_8 "-"; +BA_ "Neutral Value" SG_ 3221225472 CUR_STATE_R_8 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUR_STATE_R_8 "00h"; +BA_ "Invalid Value" SG_ 3221225472 CUR_STATE_R_5 "-"; +BA_ "Neutral Value" SG_ 3221225472 CUR_STATE_R_5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUR_STATE_R_5 "00h"; +BA_ "Invalid Value" SG_ 3221225472 SUM3F5 "-"; +BA_ "Neutral Value" SG_ 3221225472 SUM3F5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUM3F5 "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGC3F5 "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGC3F5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGC3F5 "-"; +BA_ "Invalid Value" SG_ 3221225472 ACQUIRED_R "-"; +BA_ "Neutral Value" SG_ 3221225472 ACQUIRED_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACQUIRED_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 WARN_R "-"; +BA_ "Neutral Value" SG_ 3221225472 WARN_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARN_R "00b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_DISABLE_R "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_DISABLE_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_DISABLE_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_CONFIDENCE_R "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_CONFIDENCE_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_CONFIDENCE_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_COND_R "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_COND_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_COND_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 ALERT_IND_PAT_R "-"; +BA_ "Neutral Value" SG_ 3221225472 ALERT_IND_PAT_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALERT_IND_PAT_R "00b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_MODE_R "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_MODE_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_MODE_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_IRRAD_R "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_IRRAD_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_IRRAD_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FAIL_R "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FAIL_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FAIL_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_INIT_R "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_INIT_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_INIT_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_BLOCK_R "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_BLOCK_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_BLOCK_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 ALERT_IND_DRIVE_R "-"; +BA_ "Neutral Value" SG_ 3221225472 ALERT_IND_DRIVE_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALERT_IND_DRIVE_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 ALERT_COND_R "-"; +BA_ "Neutral Value" SG_ 3221225472 ALERT_COND_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALERT_COND_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 BEAM_FOV_MODE_R "-"; +BA_ "Neutral Value" SG_ 3221225472 BEAM_FOV_MODE_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BEAM_FOV_MODE_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 BEAM_FOV_MEAN_R "-"; +BA_ "Neutral Value" SG_ 3221225472 BEAM_FOV_MEAN_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BEAM_FOV_MEAN_R "0h"; +BA_ "Invalid Value" SG_ 3221225472 VEL_FOV_R "-"; +BA_ "Neutral Value" SG_ 3221225472 VEL_FOV_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VEL_FOV_R "000h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_ALTTC_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_ALTTC_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_ALTTC_R "00h"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F5 "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F5 "0b"; +BA_ "Invalid Value" SG_ 3221225472 SUM3F4 "-"; +BA_ "Neutral Value" SG_ 3221225472 SUM3F4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUM3F4 "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGC3F4 "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGC3F4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGC3F4 "-"; +BA_ "Invalid Value" SG_ 3221225472 DIST_R7 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_R7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_R7 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_R6 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_R6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_R6 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_R5 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_R5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_R5 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_FOV_R "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_FOV_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_FOV_R "000h"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F4 "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F4 "0b"; +BA_ "Invalid Value" SG_ 3221225472 CTA_FUNC_ACT_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_FUNC_ACT_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_FUNC_ACT_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 SUM3F3 "-"; +BA_ "Neutral Value" SG_ 3221225472 SUM3F3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUM3F3 "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGC3F3 "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGC3F3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGC3F3 "-"; +BA_ "Invalid Value" SG_ 3221225472 DIST_R4 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_R4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_R4 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_R3 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_R3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_R3 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_R2 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_R2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_R2 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_R1 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_R1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_R1 "000h"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F3 "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F3 "0b"; +BA_ "Invalid Value" SG_ 3221225472 CUR_STATE_L_8 "-"; +BA_ "Neutral Value" SG_ 3221225472 CUR_STATE_L_8 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUR_STATE_L_8 "00h"; +BA_ "Invalid Value" SG_ 3221225472 CUR_STATE_L_5 "-"; +BA_ "Neutral Value" SG_ 3221225472 CUR_STATE_L_5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUR_STATE_L_5 "00h"; +BA_ "Invalid Value" SG_ 3221225472 SUM3F2 "-"; +BA_ "Neutral Value" SG_ 3221225472 SUM3F2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUM3F2 "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGC3F2 "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGC3F2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGC3F2 "-"; +BA_ "Invalid Value" SG_ 3221225472 ACQUIRED_L "-"; +BA_ "Neutral Value" SG_ 3221225472 ACQUIRED_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACQUIRED_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 WARN_L "-"; +BA_ "Neutral Value" SG_ 3221225472 WARN_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARN_L "00b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_MODE_L "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_MODE_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_MODE_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_IRRAD_L "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_IRRAD_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_IRRAD_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_INIT_L "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_INIT_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_INIT_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FAIL_L "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FAIL_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FAIL_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_DISABLE_L "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_DISABLE_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_DISABLE_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_CONFIDENCE_L "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_CONFIDENCE_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_CONFIDENCE_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_COND_L "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_COND_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_COND_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_BLOCK_L "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_BLOCK_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_BLOCK_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 ALERT_IND_PAT_L "-"; +BA_ "Neutral Value" SG_ 3221225472 ALERT_IND_PAT_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALERT_IND_PAT_L "00b"; +BA_ "Invalid Value" SG_ 3221225472 ALERT_IND_DRIVE_L "-"; +BA_ "Neutral Value" SG_ 3221225472 ALERT_IND_DRIVE_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALERT_IND_DRIVE_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 ALERT_COND_L "-"; +BA_ "Neutral Value" SG_ 3221225472 ALERT_COND_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALERT_COND_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 BEAM_FOV_MODE_L "-"; +BA_ "Neutral Value" SG_ 3221225472 BEAM_FOV_MODE_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BEAM_FOV_MODE_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 BEAM_FOV_MEAN_L "-"; +BA_ "Neutral Value" SG_ 3221225472 BEAM_FOV_MEAN_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BEAM_FOV_MEAN_L "0h"; +BA_ "Invalid Value" SG_ 3221225472 VEL_FOV_L "-"; +BA_ "Neutral Value" SG_ 3221225472 VEL_FOV_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VEL_FOV_L "000h"; +BA_ "Invalid Value" SG_ 3221225472 CTA_TTC_ALTTC_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_TTC_ALTTC_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_TTC_ALTTC_L "00h"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F2 "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F2 "0b"; +BA_ "Invalid Value" SG_ 3221225472 SUM3F1 "-"; +BA_ "Neutral Value" SG_ 3221225472 SUM3F1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUM3F1 "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGC3F1 "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGC3F1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGC3F1 "-"; +BA_ "Invalid Value" SG_ 3221225472 DIST_L7 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_L7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_L7 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_L6 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_L6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_L6 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_L5 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_L5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_L5 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_FOV_L "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_FOV_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_FOV_L "000h"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F1 "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F1 "0b"; +BA_ "Invalid Value" SG_ 3221225472 CTA_FUNC_ACT_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CTA_FUNC_ACT_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTA_FUNC_ACT_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 SUM3F0 "-"; +BA_ "Neutral Value" SG_ 3221225472 SUM3F0 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUM3F0 "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGC3F0 "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGC3F0 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGC3F0 "-"; +BA_ "Invalid Value" SG_ 3221225472 DIST_L4 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_L4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_L4 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_L3 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_L3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_L3 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_L2 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_L2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_L2 "000h"; +BA_ "Invalid Value" SG_ 3221225472 DIST_L1 "-"; +BA_ "Neutral Value" SG_ 3221225472 DIST_L1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIST_L1 "000h"; +BA_ "Invalid Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F0 "-"; +BA_ "Neutral Value" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F0 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOW_SEN_FUNC_STAT_3F0 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ShBW_ENCODERST "-"; +BA_ "Neutral Value" SG_ 3221225472 ShBW_ENCODERST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ShBW_ENCODERST "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 SBW_CANFALSTAT "0b"; +BA_ "Neutral Value" SG_ 3221225472 SBW_CANFALSTAT "-"; +BA_ "Invalid Value" SG_ 3221225472 SBW_CANFALSTAT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ShBW_SHIFTLOCK "0b"; +BA_ "Neutral Value" SG_ 3221225472 ShBW_SHIFTLOCK "-"; +BA_ "Invalid Value" SG_ 3221225472 ShBW_SHIFTLOCK "-"; +BA_ "Invalid Value" SG_ 3221225472 AutoP_C "-"; +BA_ "Neutral Value" SG_ 3221225472 AutoP_C "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AutoP_C "0b"; +BA_ "Invalid Value" SG_ 3221225472 REFUSE_SLEEP "-"; +BA_ "Neutral Value" SG_ 3221225472 REFUSE_SLEEP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REFUSE_SLEEP "10b"; +BA_ "Invalid Value" SG_ 3221225472 WATCH_NO "-"; +BA_ "Neutral Value" SG_ 3221225472 WATCH_NO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WATCH_NO "-"; +BA_ "Invalid Value" SG_ 3221225472 ShBW_WATCH4 "-"; +BA_ "Neutral Value" SG_ 3221225472 ShBW_WATCH4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ShBW_WATCH4 "00b"; +BA_ "Invalid Value" SG_ 3221225472 ShBW_WATCH3 "-"; +BA_ "Neutral Value" SG_ 3221225472 ShBW_WATCH3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ShBW_WATCH3 "00b"; +BA_ "Invalid Value" SG_ 3221225472 ShBW_WATCH2 "-"; +BA_ "Neutral Value" SG_ 3221225472 ShBW_WATCH2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ShBW_WATCH2 "00b"; +BA_ "Invalid Value" SG_ 3221225472 ShBW_WATCH1 "-"; +BA_ "Neutral Value" SG_ 3221225472 ShBW_WATCH1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ShBW_WATCH1 "00b"; +BA_ "Invalid Value" SG_ 3221225472 DsREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 DsREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DsREQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 CUR_RNG "1111b"; +BA_ "Neutral Value" SG_ 3221225472 CUR_RNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUR_RNG "0000b"; +BA_ "Invalid Value" SG_ 3221225472 SBW_FALSTATT "-"; +BA_ "Neutral Value" SG_ 3221225472 SBW_FALSTATT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SBW_FALSTATT "00b"; +BA_ "Invalid Value" SG_ 3221225472 CRC_CODE "-"; +BA_ "Neutral Value" SG_ 3221225472 CRC_CODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CRC_CODE "-"; +BA_ "Invalid Value" SG_ 3221225472 TGT_RNG "1111b"; +BA_ "Neutral Value" SG_ 3221225472 TGT_RNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TGT_RNG "0000b"; +BA_ "FirstFrameValue" SG_ 3221225472 TENG2 "000h"; +BA_ "Neutral Value" SG_ 3221225472 TENG2 "-"; +BA_ "Invalid Value" SG_ 3221225472 TENG2 "FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 MIN_TORQUE "FFh"; +BA_ "Neutral Value" SG_ 3221225472 MIN_TORQUE "-"; +BA_ "Invalid Value" SG_ 3221225472 MIN_TORQUE "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 KDACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 KDACT "-"; +BA_ "Invalid Value" SG_ 3221225472 KDACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ErgonomicPedal_ATAPOST "000h"; +BA_ "Neutral Value" SG_ 3221225472 ErgonomicPedal_ATAPOST "-"; +BA_ "Invalid Value" SG_ 3221225472 ErgonomicPedal_ATAPOST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDON "00b"; +BA_ "Neutral Value" SG_ 3221225472 ASCDON "-"; +BA_ "Invalid Value" SG_ 3221225472 ASCDON "-"; +BA_ "Invalid Value" SG_ 3221225472 WSPFR "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 WSPFR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WSPFR "00h"; +BA_ "Invalid Value" SG_ 3221225472 WSPRR "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 WSPRR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WSPRR "00h"; +BA_ "Invalid Value" SG_ 3221225472 WSPRL "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 WSPRL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WSPRL "00h"; +BA_ "Invalid Value" SG_ 3221225472 WSPFL "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 WSPFL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WSPFL "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 POSITION_LIGHT "-"; +BA_ "Neutral Value" SG_ 3221225472 POSITION_LIGHT "-"; +BA_ "Invalid Value" SG_ 3221225472 POSITION_LIGHT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NIGHT_LIGHT_MAX "-"; +BA_ "Neutral Value" SG_ 3221225472 NIGHT_LIGHT_MAX "-"; +BA_ "Invalid Value" SG_ 3221225472 NIGHT_LIGHT_MAX "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 DIS_SPEED "FFFFH"; +BA_ "Neutral Value" SG_ 3221225472 DIS_SPEED "-"; +BA_ "Invalid Value" SG_ 3221225472 DIS_SPEED "FFFFH"; +BA_ "FirstFrameValue" SG_ 3221225472 DAY_LIGHT_MAX "-"; +BA_ "Neutral Value" SG_ 3221225472 DAY_LIGHT_MAX "-"; +BA_ "Invalid Value" SG_ 3221225472 DAY_LIGHT_MAX "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 BELT_LAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 BELT_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 BELT_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECOPDLSW "-"; +BA_ "Neutral Value" SG_ 3221225472 ECOPDLSW "-"; +BA_ "Invalid Value" SG_ 3221225472 ECOPDLSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DAS_SW "000b"; +BA_ "Neutral Value" SG_ 3221225472 DAS_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 DAS_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PT_ERR_flg "-"; +BA_ "Neutral Value" SG_ 3221225472 PT_ERR_flg "1b"; +BA_ "Invalid Value" SG_ 3221225472 PT_ERR_flg "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COP2_SW_FLG "-"; +BA_ "Neutral Value" SG_ 3221225472 COP2_SW_FLG "-"; +BA_ "Invalid Value" SG_ 3221225472 COP2_SW_FLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COP2_ERROR_FLG "0b"; +BA_ "Neutral Value" SG_ 3221225472 COP2_ERROR_FLG "-"; +BA_ "Invalid Value" SG_ 3221225472 COP2_ERROR_FLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BOOT_FLG "1b"; +BA_ "Neutral Value" SG_ 3221225472 BOOT_FLG "-"; +BA_ "Invalid Value" SG_ 3221225472 BOOT_FLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VSP_NAVI "FFh"; +BA_ "Neutral Value" SG_ 3221225472 VSP_NAVI "-"; +BA_ "Invalid Value" SG_ 3221225472 VSP_NAVI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 vUpdate_Counter "0h"; +BA_ "Neutral Value" SG_ 3221225472 vUpdate_Counter "-"; +BA_ "Invalid Value" SG_ 3221225472 vUpdate_Counter "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_20 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_20 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_20 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_19 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_19 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_19 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_18 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_18 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_18 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_17 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_17 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_17 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_16 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_16 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_16 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_15 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_15 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_15 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_14 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_14 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_14 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_9 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_9 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_9 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_8 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_8 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_8 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_7 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_7 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_13 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_13 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_13 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_12 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_12 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_12 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_11 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_11 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_11 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_10 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_10 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_10 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_6 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_6 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_5 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_5 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_4 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_4 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_3 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_3 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_2 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_2 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_1 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_1 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Curve_0 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Curve_0 "-"; +BA_ "Invalid Value" SG_ 3221225472 Curve_0 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AreaCode "11b"; +BA_ "Neutral Value" SG_ 3221225472 AreaCode "-"; +BA_ "Invalid Value" SG_ 3221225472 AreaCode "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CURVATURE_DIRECTION "1FH"; +BA_ "Neutral Value" SG_ 3221225472 CURVATURE_DIRECTION "-"; +BA_ "Invalid Value" SG_ 3221225472 CURVATURE_DIRECTION "1FH"; +BA_ "FirstFrameValue" SG_ 3221225472 OWN_LOCATION "1FH"; +BA_ "Neutral Value" SG_ 3221225472 OWN_LOCATION "-"; +BA_ "Invalid Value" SG_ 3221225472 OWN_LOCATION "1FH"; +BA_ "FirstFrameValue" SG_ 3221225472 D_BRANCH_FLG "0b"; +BA_ "Neutral Value" SG_ 3221225472 D_BRANCH_FLG "0b"; +BA_ "Invalid Value" SG_ 3221225472 D_BRANCH_FLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LINKF_FLG "0b"; +BA_ "Neutral Value" SG_ 3221225472 LINKF_FLG "-"; +BA_ "Invalid Value" SG_ 3221225472 LINKF_FLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LINKF_DIST "1FH"; +BA_ "Neutral Value" SG_ 3221225472 LINKF_DIST "-"; +BA_ "Invalid Value" SG_ 3221225472 LINKF_DIST "1FH"; +BA_ "FirstFrameValue" SG_ 3221225472 OUTREADY "-"; +BA_ "Neutral Value" SG_ 3221225472 OUTREADY "-"; +BA_ "Invalid Value" SG_ 3221225472 OUTREADY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OUT_DIST "FFh"; +BA_ "Neutral Value" SG_ 3221225472 OUT_DIST "-"; +BA_ "Invalid Value" SG_ 3221225472 OUT_DIST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GPSPositionSta "1b"; +BA_ "Neutral Value" SG_ 3221225472 GPSPositionSta "-"; +BA_ "Invalid Value" SG_ 3221225472 GPSPositionSta "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TurningFlag "0b"; +BA_ "Neutral Value" SG_ 3221225472 TurningFlag "-"; +BA_ "Invalid Value" SG_ 3221225472 TurningFlag "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MatchingSta "0b"; +BA_ "Neutral Value" SG_ 3221225472 MatchingSta "-"; +BA_ "Invalid Value" SG_ 3221225472 MatchingSta "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MatchingResetFlag "0b"; +BA_ "Neutral Value" SG_ 3221225472 MatchingResetFlag "-"; +BA_ "Invalid Value" SG_ 3221225472 MatchingResetFlag "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DistTollgate "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 DistTollgate "-"; +BA_ "Invalid Value" SG_ 3221225472 DistTollgate "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DistDivergence "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 DistDivergence "-"; +BA_ "Invalid Value" SG_ 3221225472 DistDivergence "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CurvatureErrorFlag "0b"; +BA_ "Neutral Value" SG_ 3221225472 CurvatureErrorFlag "-"; +BA_ "Invalid Value" SG_ 3221225472 CurvatureErrorFlag "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RootGuidingFlag "0b"; +BA_ "Neutral Value" SG_ 3221225472 RootGuidingFlag "-"; +BA_ "Invalid Value" SG_ 3221225472 RootGuidingFlag "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RootGuideSta "11b"; +BA_ "Neutral Value" SG_ 3221225472 RootGuideSta "-"; +BA_ "Invalid Value" SG_ 3221225472 RootGuideSta "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RoadType "111b"; +BA_ "Neutral Value" SG_ 3221225472 RoadType "-"; +BA_ "Invalid Value" SG_ 3221225472 RoadType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LinkType "111b"; +BA_ "Neutral Value" SG_ 3221225472 LinkType "-"; +BA_ "Invalid Value" SG_ 3221225472 LinkType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 InGuidingRoot "0b"; +BA_ "Neutral Value" SG_ 3221225472 InGuidingRoot "-"; +BA_ "Invalid Value" SG_ 3221225472 InGuidingRoot "-"; +BA_ "Invalid Value" SG_ 3221225472 PSS_02 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 PSS_02 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSS_02 "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 MVP_NG "-"; +BA_ "Neutral Value" SG_ 3221225472 MVP_NG "-"; +BA_ "Invalid Value" SG_ 3221225472 MVP_NG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MVP_COUNT "0h"; +BA_ "Neutral Value" SG_ 3221225472 MVP_COUNT "-"; +BA_ "Invalid Value" SG_ 3221225472 MVP_COUNT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MVP "0h"; +BA_ "Neutral Value" SG_ 3221225472 MVP "-"; +BA_ "Invalid Value" SG_ 3221225472 MVP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RQTRQ_02 "FFEh"; +BA_ "Neutral Value" SG_ 3221225472 RQTRQ_02 "-"; +BA_ "Invalid Value" SG_ 3221225472 RQTRQ_02 "FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_EXT_BEEP "0b"; +BA_ "Neutral Value" SG_ 3221225472 STS_EXT_BEEP "-"; +BA_ "Invalid Value" SG_ 3221225472 STS_EXT_BEEP "-"; +BA_ "Invalid Value" SG_ 3221225472 SOUND_ZONE "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND_ZONE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND_ZONE "000b"; +BA_ "Invalid Value" SG_ 3221225472 SOUND_DISCON "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND_DISCON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND_DISCON "00h"; +BA_ "Invalid Value" SG_ 3221225472 SOUND_CONT "-"; +BA_ "Neutral Value" SG_ 3221225472 SOUND_CONT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOUND_CONT "0b"; +BA_ "Invalid Value" SG_ 3221225472 STS_VOLUME "-"; +BA_ "Neutral Value" SG_ 3221225472 STS_VOLUME "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_VOLUME "10b"; +BA_ "Invalid Value" SG_ 3221225472 STS_SYS_MODE "-"; +BA_ "Neutral Value" SG_ 3221225472 STS_SYS_MODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_SYS_MODE "000b"; +BA_ "Invalid Value" SG_ 3221225472 STS_DISTANCE "-"; +BA_ "Neutral Value" SG_ 3221225472 STS_DISTANCE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_DISTANCE "0000b"; +BA_ "Invalid Value" SG_ 3221225472 STS_DETEC_LV "-"; +BA_ "Neutral Value" SG_ 3221225472 STS_DETEC_LV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_DETEC_LV "10b"; +BA_ "Invalid Value" SG_ 3221225472 STS_AUTO_DISP "-"; +BA_ "Neutral Value" SG_ 3221225472 STS_AUTO_DISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_AUTO_DISP "0b"; +BA_ "Invalid Value" SG_ 3221225472 A_FR_R "-"; +BA_ "Neutral Value" SG_ 3221225472 A_FR_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 A_FR_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 A_FR_L "-"; +BA_ "Neutral Value" SG_ 3221225472 A_FR_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 A_FR_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 A_RR_R "-"; +BA_ "Neutral Value" SG_ 3221225472 A_RR_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 A_RR_R "0b"; +BA_ "Invalid Value" SG_ 3221225472 A_RR_L "-"; +BA_ "Neutral Value" SG_ 3221225472 A_RR_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 A_RR_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 A_FR_CEN "-"; +BA_ "Neutral Value" SG_ 3221225472 A_FR_CEN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 A_FR_CEN "0b"; +BA_ "Invalid Value" SG_ 3221225472 A_RR_CEN "-"; +BA_ "Neutral Value" SG_ 3221225472 A_RR_CEN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 A_RR_CEN "0b"; +BA_ "Invalid Value" SG_ 3221225472 RR_R "001b, 101b, 110b, 111b"; +BA_ "Neutral Value" SG_ 3221225472 RR_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_R "000b"; +BA_ "Invalid Value" SG_ 3221225472 RR_L "001b, 101b, 110b, 111b"; +BA_ "Neutral Value" SG_ 3221225472 RR_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_L "000b"; +BA_ "Invalid Value" SG_ 3221225472 RR_CEN "101b, 110b, 111b"; +BA_ "Neutral Value" SG_ 3221225472 RR_CEN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_CEN "000b"; +BA_ "Invalid Value" SG_ 3221225472 FR_R "001b, 101b, 110b, 111b"; +BA_ "Neutral Value" SG_ 3221225472 FR_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_R "000b"; +BA_ "Invalid Value" SG_ 3221225472 FR_L "001b, 101b, 110b, 111b"; +BA_ "Neutral Value" SG_ 3221225472 FR_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_L "000b"; +BA_ "Invalid Value" SG_ 3221225472 FR_CEN "101b, 110b, 111b"; +BA_ "Neutral Value" SG_ 3221225472 FR_CEN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_CEN "000b"; +BA_ "Invalid Value" SG_ 3221225472 SONAR_S_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SONAR_S_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SONAR_S_REQ "00b"; +BA_ "Invalid Value" SG_ 3221225472 STS_SETTING "-"; +BA_ "Neutral Value" SG_ 3221225472 STS_SETTING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_SETTING "0b"; +BA_ "Invalid Value" SG_ 3221225472 REQ_DISP_CEN "-"; +BA_ "Neutral Value" SG_ 3221225472 REQ_DISP_CEN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REQ_DISP_CEN "0b"; +BA_ "Invalid Value" SG_ 3221225472 SONAR_D_DISP_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SONAR_D_DISP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SONAR_D_DISP_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 LAMP_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 LAMP_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LAMP_STA "1b"; +BA_ "Invalid Value" SG_ 3221225472 FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 REAR_STEER "7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 REAR_STEER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REAR_STEER "-"; +BA_ "Invalid Value" SG_ 3221225472 FRONT_STEER "7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 FRONT_STEER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FRONT_STEER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISCHG_ALARM_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 DISCHG_ALARM_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 DISCHG_ALARM_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 REMOTE_AC_ANS_BK "-"; +BA_ "Neutral Value" SG_ 3221225472 REMOTE_AC_ANS_BK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REMOTE_AC_ANS_BK "00b"; +BA_ "Invalid Value" SG_ 3221225472 PROHIBIT_DE_ICE "-"; +BA_ "Neutral Value" SG_ 3221225472 PROHIBIT_DE_ICE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PROHIBIT_DE_ICE "1b"; +BA_ "FirstFrameValue" SG_ 3221225472 VCM_REFUSE "10b"; +BA_ "Neutral Value" SG_ 3221225472 VCM_REFUSE "-"; +BA_ "Invalid Value" SG_ 3221225472 VCM_REFUSE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_RLY_ST "0b"; +BA_ "Neutral Value" SG_ 3221225472 AC_RLY_ST "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_RLY_ST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_ECO_MODE_RQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 AC_ECO_MODE_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_ECO_MODE_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PW_INV "00h"; +BA_ "Neutral Value" SG_ 3221225472 PW_INV "-"; +BA_ "Invalid Value" SG_ 3221225472 PW_INV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMP_ON_permission "0b"; +BA_ "Neutral Value" SG_ 3221225472 COMP_ON_permission "-"; +BA_ "Invalid Value" SG_ 3221225472 COMP_ON_permission "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRIAC_HVAC "0b"; +BA_ "Neutral Value" SG_ 3221225472 PRIAC_HVAC "-"; +BA_ "Invalid Value" SG_ 3221225472 PRIAC_HVAC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BOOK_PRI_AC "0b"; +BA_ "Neutral Value" SG_ 3221225472 BOOK_PRI_AC "-"; +BA_ "Invalid Value" SG_ 3221225472 BOOK_PRI_AC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRIAC_OFF_TIME "00h"; +BA_ "Neutral Value" SG_ 3221225472 PRIAC_OFF_TIME "-"; +BA_ "Invalid Value" SG_ 3221225472 PRIAC_OFF_TIME "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_DEF "-"; +BA_ "Neutral Value" SG_ 3221225472 RR_DEF "-"; +BA_ "Invalid Value" SG_ 3221225472 RR_DEF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PDPRS "00h"; +BA_ "Neutral Value" SG_ 3221225472 PDPRS "FFh"; +BA_ "Invalid Value" SG_ 3221225472 PDPRS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMPEARTUREUNITSETTING "0b"; +BA_ "Neutral Value" SG_ 3221225472 TEMPEARTUREUNITSETTING "-"; +BA_ "Invalid Value" SG_ 3221225472 TEMPEARTUREUNITSETTING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRI_AC_DCM "0b"; +BA_ "Neutral Value" SG_ 3221225472 PRI_AC_DCM "-"; +BA_ "Invalid Value" SG_ 3221225472 PRI_AC_DCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 F_INDOORAIR "0b"; +BA_ "Neutral Value" SG_ 3221225472 F_INDOORAIR "-"; +BA_ "Invalid Value" SG_ 3221225472 F_INDOORAIR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Prohibit_Cranking_HEV "EV: 00b..."; +BA_ "Neutral Value" SG_ 3221225472 Prohibit_Cranking_HEV "-"; +BA_ "Invalid Value" SG_ 3221225472 Prohibit_Cranking_HEV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IGN_OFF_PERMISSION "0b"; +BA_ "Neutral Value" SG_ 3221225472 IGN_OFF_PERMISSION "-"; +BA_ "Invalid Value" SG_ 3221225472 IGN_OFF_PERMISSION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EPSSTRQ "00b"; +BA_ "Invalid Value" SG_ 3221225472 EPSSTRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 MOTOR_CURRENT "-"; +BA_ "Neutral Value" SG_ 3221225472 MOTOR_CURRENT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOTOR_CURRENT "-"; +BA_ "Invalid Value" SG_ 3221225472 POWER_SUPPLY "-"; +BA_ "Neutral Value" SG_ 3221225472 POWER_SUPPLY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 POWER_SUPPLY "-"; +BA_ "Invalid Value" SG_ 3221225472 STATUS_FFP "-"; +BA_ "Neutral Value" SG_ 3221225472 STATUS_FFP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STATUS_FFP "-"; +BA_ "Invalid Value" SG_ 3221225472 ANG_AVL_FFP "-"; +BA_ "Neutral Value" SG_ 3221225472 ANG_AVL_FFP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ANG_AVL_FFP "-"; +BA_ "Invalid Value" SG_ 3221225472 FORCE_FFP_CB "-"; +BA_ "Neutral Value" SG_ 3221225472 FORCE_FFP_CB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FORCE_FFP_CB "-"; +BA_ "Invalid Value" SG_ 3221225472 FTRG_ACC "-"; +BA_ "Neutral Value" SG_ 3221225472 FTRG_ACC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FTRG_ACC "-"; +BA_ "Invalid Value" SG_ 3221225472 ACCFAIL1 "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCFAIL1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCFAIL1 "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_FAIL2 "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_FAIL2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_FAIL2 "-"; +BA_ "Invalid Value" SG_ 3221225472 INCHING_CONTROL "-"; +BA_ "Neutral Value" SG_ 3221225472 INCHING_CONTROL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INCHING_CONTROL "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_AND_INCHING_RANGE "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_AND_INCHING_RANGE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_AND_INCHING_RANGE "0b"; +BA_ "Invalid Value" SG_ 3221225472 DIRTY_LASER_JPN "-"; +BA_ "Neutral Value" SG_ 3221225472 DIRTY_LASER_JPN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIRTY_LASER_JPN "-"; +BA_ "Invalid Value" SG_ 3221225472 DIRTY_LASER_USA "-"; +BA_ "Neutral Value" SG_ 3221225472 DIRTY_LASER_USA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIRTY_LASER_USA "-"; +BA_ "Invalid Value" SG_ 3221225472 TARGET_CHANGING_BUZZER "-"; +BA_ "Neutral Value" SG_ 3221225472 TARGET_CHANGING_BUZZER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TARGET_CHANGING_BUZZER "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_Buzzer_3rd "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_Buzzer_3rd "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_Buzzer_3rd "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_Buzzer_2nd "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_Buzzer_2nd "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_Buzzer_2nd "-"; +BA_ "Invalid Value" SG_ 3221225472 BST_ACTV_RB "-"; +BA_ "Neutral Value" SG_ 3221225472 BST_ACTV_RB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BST_ACTV_RB "-"; +BA_ "Invalid Value" SG_ 3221225472 BST_ACTV "-"; +BA_ "Neutral Value" SG_ 3221225472 BST_ACTV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BST_ACTV "-"; +BA_ "Invalid Value" SG_ 3221225472 PBS2_OFF "-"; +BA_ "Neutral Value" SG_ 3221225472 PBS2_OFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS2_OFF "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_VAVLE "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_VAVLE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_VAVLE "-"; +BA_ "Invalid Value" SG_ 3221225472 SET_VSP "-"; +BA_ "Neutral Value" SG_ 3221225472 SET_VSP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SET_VSP "-"; +BA_ "Invalid Value" SG_ 3221225472 CAR_M "-"; +BA_ "Neutral Value" SG_ 3221225472 CAR_M "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAR_M "-"; +BA_ "Invalid Value" SG_ 3221225472 AUTO_BARK "-"; +BA_ "Neutral Value" SG_ 3221225472 AUTO_BARK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AUTO_BARK "-"; +BA_ "Invalid Value" SG_ 3221225472 IND_BAR "-"; +BA_ "Neutral Value" SG_ 3221225472 IND_BAR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IND_BAR "-"; +BA_ "Invalid Value" SG_ 3221225472 IND_KMH "-"; +BA_ "Neutral Value" SG_ 3221225472 IND_KMH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IND_KMH "-"; +BA_ "Invalid Value" SG_ 3221225472 ASCD_SET "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCD_SET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCD_SET "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_Buzzer "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_Buzzer "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_Buzzer "-"; +BA_ "Invalid Value" SG_ 3221225472 PBS2_WARNING "-"; +BA_ "Neutral Value" SG_ 3221225472 PBS2_WARNING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS2_WARNING "-"; +BA_ "Invalid Value" SG_ 3221225472 MAIN "-"; +BA_ "Neutral Value" SG_ 3221225472 MAIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MAIN "-"; +BA_ "Invalid Value" SG_ 3221225472 LOCK "-"; +BA_ "Neutral Value" SG_ 3221225472 LOCK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LOCK "-"; +BA_ "Invalid Value" SG_ 3221225472 DISTWARN "-"; +BA_ "Neutral Value" SG_ 3221225472 DISTWARN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DISTWARN "-"; +BA_ "Invalid Value" SG_ 3221225472 FLS_TRGT "-"; +BA_ "Neutral Value" SG_ 3221225472 FLS_TRGT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLS_TRGT "-"; +BA_ "Invalid Value" SG_ 3221225472 SET_DIST "-"; +BA_ "Neutral Value" SG_ 3221225472 SET_DIST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SET_DIST "-"; +BA_ "Invalid Value" SG_ 3221225472 ANGLE_FFP "-"; +BA_ "Neutral Value" SG_ 3221225472 ANGLE_FFP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ANGLE_FFP "-"; +BA_ "Invalid Value" SG_ 3221225472 ACCEL_POS "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCEL_POS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCEL_POS "-"; +BA_ "Invalid Value" SG_ 3221225472 FUNC_FFP "-"; +BA_ "Neutral Value" SG_ 3221225472 FUNC_FFP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FUNC_FFP "-"; +BA_ "Invalid Value" SG_ 3221225472 MONT_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 MONT_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MONT_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 FORCE_FFP "-"; +BA_ "Neutral Value" SG_ 3221225472 FORCE_FFP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FORCE_FFP "-"; +BA_ "Invalid Value" SG_ 3221225472 OP_BYTE6 "-"; +BA_ "Neutral Value" SG_ 3221225472 OP_BYTE6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OP_BYTE6 "-"; +BA_ "Invalid Value" SG_ 3221225472 OP_BYTE5 "-"; +BA_ "Neutral Value" SG_ 3221225472 OP_BYTE5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OP_BYTE5 "-"; +BA_ "Invalid Value" SG_ 3221225472 OP_BYTE4 "-"; +BA_ "Neutral Value" SG_ 3221225472 OP_BYTE4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OP_BYTE4 "-"; +BA_ "Invalid Value" SG_ 3221225472 OP_BYTE3 "-"; +BA_ "Neutral Value" SG_ 3221225472 OP_BYTE3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OP_BYTE3 "-"; +BA_ "Invalid Value" SG_ 3221225472 OP_BYTE2 "-"; +BA_ "Neutral Value" SG_ 3221225472 OP_BYTE2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OP_BYTE2 "-"; +BA_ "Invalid Value" SG_ 3221225472 MOD_BYTE "-"; +BA_ "Neutral Value" SG_ 3221225472 MOD_BYTE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MOD_BYTE "-"; +BA_ "Invalid Value" SG_ 3221225472 NUM_VLDT "-"; +BA_ "Neutral Value" SG_ 3221225472 NUM_VLDT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NUM_VLDT "-"; +BA_ "Invalid Value" SG_ 3221225472 PO_BYTE1 "-"; +BA_ "Neutral Value" SG_ 3221225472 PO_BYTE1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PO_BYTE1 "-"; +BA_ "Invalid Value" SG_ 3221225472 STRCALIB "-"; +BA_ "Neutral Value" SG_ 3221225472 STRCALIB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRCALIB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CANNG "-"; +BA_ "Neutral Value" SG_ 3221225472 CANNG "-"; +BA_ "Invalid Value" SG_ 3221225472 CANNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECCSMSG8C "-"; +BA_ "Neutral Value" SG_ 3221225472 ECCSMSG8C "-"; +BA_ "Invalid Value" SG_ 3221225472 ECCSMSG8C "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTCCODE "0000h"; +BA_ "Neutral Value" SG_ 3221225472 DTCCODE "-"; +BA_ "Invalid Value" SG_ 3221225472 DTCCODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 C_CODE "-"; +BA_ "Neutral Value" SG_ 3221225472 C_CODE "-"; +BA_ "Invalid Value" SG_ 3221225472 C_CODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VIGN "-"; +BA_ "Neutral Value" SG_ 3221225472 VIGN "-"; +BA_ "Invalid Value" SG_ 3221225472 VIGN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABSWL "0b"; +BA_ "Neutral Value" SG_ 3221225472 ABSWL "-"; +BA_ "Invalid Value" SG_ 3221225472 ABSWL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MR "0b"; +BA_ "Neutral Value" SG_ 3221225472 MR "-"; +BA_ "Invalid Value" SG_ 3221225472 MR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MTRMON "0b"; +BA_ "Neutral Value" SG_ 3221225472 MTRMON "-"; +BA_ "Invalid Value" SG_ 3221225472 MTRMON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AR "0b"; +BA_ "Neutral Value" SG_ 3221225472 AR "-"; +BA_ "Invalid Value" SG_ 3221225472 AR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ARMON "0b"; +BA_ "Neutral Value" SG_ 3221225472 ARMON "-"; +BA_ "Invalid Value" SG_ 3221225472 ARMON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RLOSOLM "0b"; +BA_ "Neutral Value" SG_ 3221225472 RLOSOLM "-"; +BA_ "Invalid Value" SG_ 3221225472 RLOSOLM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RLISOLM "0b"; +BA_ "Neutral Value" SG_ 3221225472 RLISOLM "-"; +BA_ "Invalid Value" SG_ 3221225472 RLISOLM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RROSOLM "0b"; +BA_ "Neutral Value" SG_ 3221225472 RROSOLM "-"; +BA_ "Invalid Value" SG_ 3221225472 RROSOLM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RRISOLM "0b"; +BA_ "Neutral Value" SG_ 3221225472 RRISOLM "-"; +BA_ "Invalid Value" SG_ 3221225472 RRISOLM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLOSOLM "0b"; +BA_ "Neutral Value" SG_ 3221225472 FLOSOLM "-"; +BA_ "Invalid Value" SG_ 3221225472 FLOSOLM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLISOLM "0b"; +BA_ "Neutral Value" SG_ 3221225472 FLISOLM "-"; +BA_ "Invalid Value" SG_ 3221225472 FLISOLM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FROSOLM "0b"; +BA_ "Neutral Value" SG_ 3221225472 FROSOLM "-"; +BA_ "Invalid Value" SG_ 3221225472 FROSOLM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FRISOLM "0b"; +BA_ "Neutral Value" SG_ 3221225472 FRISOLM "-"; +BA_ "Invalid Value" SG_ 3221225472 FRISOLM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RLAV "0b"; +BA_ "Neutral Value" SG_ 3221225472 RLAV "-"; +BA_ "Invalid Value" SG_ 3221225472 RLAV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RLEV "0b"; +BA_ "Neutral Value" SG_ 3221225472 RLEV "-"; +BA_ "Invalid Value" SG_ 3221225472 RLEV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RRAV "0b"; +BA_ "Neutral Value" SG_ 3221225472 RRAV "-"; +BA_ "Invalid Value" SG_ 3221225472 RRAV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RREV "0b"; +BA_ "Neutral Value" SG_ 3221225472 RREV "-"; +BA_ "Invalid Value" SG_ 3221225472 RREV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLAV "0b"; +BA_ "Neutral Value" SG_ 3221225472 FLAV "-"; +BA_ "Invalid Value" SG_ 3221225472 FLAV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLEV "0b"; +BA_ "Neutral Value" SG_ 3221225472 FLEV "-"; +BA_ "Invalid Value" SG_ 3221225472 FLEV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FRAV "0b"; +BA_ "Neutral Value" SG_ 3221225472 FRAV "-"; +BA_ "Invalid Value" SG_ 3221225472 FRAV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FREV "0b"; +BA_ "Neutral Value" SG_ 3221225472 FREV "-"; +BA_ "Invalid Value" SG_ 3221225472 FREV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VECU "-"; +BA_ "Neutral Value" SG_ 3221225472 VECU "-"; +BA_ "Invalid Value" SG_ 3221225472 VECU "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSS "-"; +BA_ "Neutral Value" SG_ 3221225472 PSS "-"; +BA_ "Invalid Value" SG_ 3221225472 PSS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LGSS "-"; +BA_ "Neutral Value" SG_ 3221225472 LGSS "-"; +BA_ "Invalid Value" SG_ 3221225472 LGSS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 YRSS "-"; +BA_ "Neutral Value" SG_ 3221225472 YRSS "-"; +BA_ "Invalid Value" SG_ 3221225472 YRSS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MRACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 MRACT "-"; +BA_ "Invalid Value" SG_ 3221225472 MRACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VRACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 VRACT "-"; +BA_ "Invalid Value" SG_ 3221225472 VRACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUSVACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 SUSVACT "-"; +BA_ "Invalid Value" SG_ 3221225472 SUSVACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PUSVACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 PUSVACT "-"; +BA_ "Invalid Value" SG_ 3221225472 PUSVACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RL_AV "0b"; +BA_ "Neutral Value" SG_ 3221225472 RL_AV "-"; +BA_ "Invalid Value" SG_ 3221225472 RL_AV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RL_EV "0b"; +BA_ "Neutral Value" SG_ 3221225472 RL_EV "-"; +BA_ "Invalid Value" SG_ 3221225472 RL_EV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_AV "0b"; +BA_ "Neutral Value" SG_ 3221225472 FR_AV "-"; +BA_ "Invalid Value" SG_ 3221225472 FR_AV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_EV "0b"; +BA_ "Neutral Value" SG_ 3221225472 FR_EV "-"; +BA_ "Invalid Value" SG_ 3221225472 FR_EV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_AV "0b"; +BA_ "Neutral Value" SG_ 3221225472 RR_AV "-"; +BA_ "Invalid Value" SG_ 3221225472 RR_AV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_EV "0b"; +BA_ "Neutral Value" SG_ 3221225472 RR_EV "-"; +BA_ "Invalid Value" SG_ 3221225472 RR_EV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FL_AV "0b"; +BA_ "Neutral Value" SG_ 3221225472 FL_AV "-"; +BA_ "Invalid Value" SG_ 3221225472 FL_AV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FL_EV "0b"; +BA_ "Neutral Value" SG_ 3221225472 FL_EV "-"; +BA_ "Invalid Value" SG_ 3221225472 FL_EV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLAG_CAN "1b"; +BA_ "Neutral Value" SG_ 3221225472 FLAG_CAN "-"; +BA_ "Invalid Value" SG_ 3221225472 FLAG_CAN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRLMP_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 STRLMP_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 STRLMP_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LIS "-"; +BA_ "Neutral Value" SG_ 3221225472 LIS "-"; +BA_ "Invalid Value" SG_ 3221225472 LIS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PKB_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 PKB_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 PKB_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VWRL "-"; +BA_ "Neutral Value" SG_ 3221225472 VWRL "-"; +BA_ "Invalid Value" SG_ 3221225472 VWRL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VWRR "-"; +BA_ "Neutral Value" SG_ 3221225472 VWRR "-"; +BA_ "Invalid Value" SG_ 3221225472 VWRR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VWFL "-"; +BA_ "Neutral Value" SG_ 3221225472 VWFL "-"; +BA_ "Invalid Value" SG_ 3221225472 VWFL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VWFR "-"; +BA_ "Neutral Value" SG_ 3221225472 VWFR "-"; +BA_ "Invalid Value" SG_ 3221225472 VWFR "-"; +BA_ "Invalid Value" SG_ 3221225472 SPARE_WHEEL_PRESSURE "FFh"; +BA_ "Neutral Value" SG_ 3221225472 SPARE_WHEEL_PRESSURE "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 SPARE_WHEEL_PRESSURE "-"; +BA_ "Invalid Value" SG_ 3221225472 RL_WHEEL_PRESSURE "FFh"; +BA_ "Neutral Value" SG_ 3221225472 RL_WHEEL_PRESSURE "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 RL_WHEEL_PRESSURE "-"; +BA_ "Invalid Value" SG_ 3221225472 RR_WHEEL_PRESSURE "FFh"; +BA_ "Neutral Value" SG_ 3221225472 RR_WHEEL_PRESSURE "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_WHEEL_PRESSURE "-"; +BA_ "Invalid Value" SG_ 3221225472 FR_WHEEL_PRESSURE "FFh"; +BA_ "Neutral Value" SG_ 3221225472 FR_WHEEL_PRESSURE "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_WHEEL_PRESSURE "-"; +BA_ "Invalid Value" SG_ 3221225472 FL_WHEEL_PRESSURE "FFh"; +BA_ "Neutral Value" SG_ 3221225472 FL_WHEEL_PRESSURE "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 FL_WHEEL_PRESSURE "-"; +BA_ "Invalid Value" SG_ 3221225472 RR_WHEEL_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 RR_WHEEL_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_WHEEL_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 RL_WHEEL_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 RL_WHEEL_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RL_WHEEL_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 LEFT_RIGHT_WHEEL_IMBALANCE "-"; +BA_ "Neutral Value" SG_ 3221225472 LEFT_RIGHT_WHEEL_IMBALANCE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LEFT_RIGHT_WHEEL_IMBALANCE "-"; +BA_ "Invalid Value" SG_ 3221225472 SSPP_LEAKAGE_LAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 SSPP_LEAKAGE_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SSPP_LEAKAGE_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 FL_WHEEL_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 FL_WHEEL_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FL_WHEEL_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 FR_WHEEL_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 FR_WHEEL_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_WHEEL_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 SSPP_STOP_LAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 SSPP_STOP_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SSPP_STOP_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 SSPP_SERVICE_LAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 SSPP_SERVICE_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SSPP_SERVICE_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 SPEED_PRESSURE_MILSANDPLATION "-"; +BA_ "Neutral Value" SG_ 3221225472 SPEED_PRESSURE_MILSANDPLATION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPEED_PRESSURE_MILSANDPLATION "-"; +BA_ "Invalid Value" SG_ 3221225472 SSPP_LAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 SSPP_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SSPP_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 LOAD_PRESSUR_MLSADAPLATION "-"; +BA_ "Neutral Value" SG_ 3221225472 LOAD_PRESSUR_MLSADAPLATION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LOAD_PRESSUR_MLSADAPLATION "-"; +BA_ "Invalid Value" SG_ 3221225472 VEHIVLE_PRESSURE_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 VEHIVLE_PRESSURE_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VEHIVLE_PRESSURE_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 D_VSPA "-"; +BA_ "Neutral Value" SG_ 3221225472 D_VSPA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 D_VSPA "-"; +BA_ "Invalid Value" SG_ 3221225472 VSPCOM_A "-"; +BA_ "Neutral Value" SG_ 3221225472 VSPCOM_A "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VSPCOM_A "-"; +BA_ "Invalid Value" SG_ 3221225472 VSP_A "-"; +BA_ "Neutral Value" SG_ 3221225472 VSP_A "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VSP_A "-"; +BA_ "Invalid Value" SG_ 3221225472 FTRG_ACC3 "-"; +BA_ "Neutral Value" SG_ 3221225472 FTRG_ACC3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FTRG_ACC3 "-"; +BA_ "Invalid Value" SG_ 3221225472 FTRG_ACC2 "-"; +BA_ "Neutral Value" SG_ 3221225472 FTRG_ACC2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FTRG_ACC2 "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 DIAG_CODE "-"; +BA_ "Neutral Value" SG_ 3221225472 DIAG_CODE "-"; +BA_ "Invalid Value" SG_ 3221225472 DIAG_CODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ESP_VOLT "00h"; +BA_ "Neutral Value" SG_ 3221225472 ESP_VOLT "-"; +BA_ "Invalid Value" SG_ 3221225472 ESP_VOLT "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 LOSS "-"; +BA_ "Neutral Value" SG_ 3221225472 LOSS "-"; +BA_ "Invalid Value" SG_ 3221225472 LOSS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 E_VLP_ACT_MINUS "0b"; +BA_ "Neutral Value" SG_ 3221225472 E_VLP_ACT_MINUS "-"; +BA_ "Invalid Value" SG_ 3221225472 E_VLP_ACT_MINUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 E_VLP_ACT_PLUS "0b"; +BA_ "Neutral Value" SG_ 3221225472 E_VLP_ACT_PLUS "-"; +BA_ "Invalid Value" SG_ 3221225472 E_VLP_ACT_PLUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SHSVACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 SHSVACT "-"; +BA_ "Invalid Value" SG_ 3221225472 SHSVACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PHSVACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 PHSVACT "-"; +BA_ "Invalid Value" SG_ 3221225472 PHSVACT "-"; +BA_ "Invalid Value" SG_ 3221225472 TAACTorTAOK "-"; +BA_ "Neutral Value" SG_ 3221225472 TAACTorTAOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TAACTorTAOK "0b"; +BA_ "Invalid Value" SG_ 3221225472 SHINDREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SHINDREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SHINDREQ "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 ISBRKREQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 ISBRKREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ISBRKREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACSTRK "0b"; +BA_ "Neutral Value" SG_ 3221225472 ACSTRK "-"; +BA_ "Invalid Value" SG_ 3221225472 ACSTRK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_DISP_RQ "00000b"; +BA_ "Neutral Value" SG_ 3221225472 ECO_DISP_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ECO_DISP_RQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDSTREQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 IDSTREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 IDSTREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ISACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 ISACT "-"; +BA_ "Invalid Value" SG_ 3221225472 ISACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ISMSKSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 ISMSKSW "-"; +BA_ "Invalid Value" SG_ 3221225472 ISMSKSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ISINDMD "00b"; +BA_ "Neutral Value" SG_ 3221225472 ISINDMD "-"; +BA_ "Invalid Value" SG_ 3221225472 ISINDMD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDSTSTS "0b"; +BA_ "Neutral Value" SG_ 3221225472 IDSTSTS "-"; +BA_ "Invalid Value" SG_ 3221225472 IDSTSTS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHRGLREQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 CHRGLREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CHRGLREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBD_ENG_ON "0b"; +BA_ "Neutral Value" SG_ 3221225472 OBD_ENG_ON "-"; +BA_ "Invalid Value" SG_ 3221225472 OBD_ENG_ON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMRES "-"; +BA_ "Neutral Value" SG_ 3221225472 COMRES "-"; +BA_ "Invalid Value" SG_ 3221225472 COMRES "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABS_STATE "-"; +BA_ "Neutral Value" SG_ 3221225472 ABS_STATE "-"; +BA_ "Invalid Value" SG_ 3221225472 ABS_STATE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLGST "0b"; +BA_ "Neutral Value" SG_ 3221225472 FLGST "-"; +BA_ "Invalid Value" SG_ 3221225472 FLGST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLGST_WARN "-"; +BA_ "Neutral Value" SG_ 3221225472 FLGST_WARN "-"; +BA_ "Invalid Value" SG_ 3221225472 FLGST_WARN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RPOS "0b"; +BA_ "Neutral Value" SG_ 3221225472 RPOS "-"; +BA_ "Invalid Value" SG_ 3221225472 RPOS "-"; +BA_ "Invalid Value" SG_ 3221225472 BPSR "-"; +BA_ "Neutral Value" SG_ 3221225472 BPSR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BPSR "-"; +BA_ "Invalid Value" SG_ 3221225472 LHRTR "-"; +BA_ "Neutral Value" SG_ 3221225472 LHRTR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LHRTR "-"; +BA_ "Invalid Value" SG_ 3221225472 RHMTR "-"; +BA_ "Neutral Value" SG_ 3221225472 RHMTR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RHMTR "-"; +BA_ "Invalid Value" SG_ 3221225472 OUT2 "-"; +BA_ "Neutral Value" SG_ 3221225472 OUT2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OUT2 "-"; +BA_ "Invalid Value" SG_ 3221225472 OUT1 "-"; +BA_ "Neutral Value" SG_ 3221225472 OUT1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OUT1 "-"; +BA_ "Invalid Value" SG_ 3221225472 VSP_PSB_1st "-"; +BA_ "Neutral Value" SG_ 3221225472 VSP_PSB_1st "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VSP_PSB_1st "0000h"; +BA_ "Invalid Value" SG_ 3221225472 BCLSWRH "-"; +BA_ "Neutral Value" SG_ 3221225472 BCLSWRH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BCLSWRH "0b"; +BA_ "Invalid Value" SG_ 3221225472 BCLSWLH "-"; +BA_ "Neutral Value" SG_ 3221225472 BCLSWLH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BCLSWLH "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 IGN_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 IGN_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 IGN_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DOOR_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 DOOR_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 DOOR_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RN_third "-"; +BA_ "Neutral Value" SG_ 3221225472 RN_third "-"; +BA_ "Invalid Value" SG_ 3221225472 RN_third "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RN_second "-"; +BA_ "Neutral Value" SG_ 3221225472 RN_second "-"; +BA_ "Invalid Value" SG_ 3221225472 RN_second "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RN_first "-"; +BA_ "Neutral Value" SG_ 3221225472 RN_first "-"; +BA_ "Invalid Value" SG_ 3221225472 RN_first "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PN_fifth "-"; +BA_ "Neutral Value" SG_ 3221225472 PN_fifth "-"; +BA_ "Invalid Value" SG_ 3221225472 PN_fifth "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PN_fouth "-"; +BA_ "Neutral Value" SG_ 3221225472 PN_fouth "-"; +BA_ "Invalid Value" SG_ 3221225472 PN_fouth "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PN_third "-"; +BA_ "Neutral Value" SG_ 3221225472 PN_third "-"; +BA_ "Invalid Value" SG_ 3221225472 PN_third "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PN_sencond "-"; +BA_ "Neutral Value" SG_ 3221225472 PN_sencond "-"; +BA_ "Invalid Value" SG_ 3221225472 PN_sencond "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PN_first "-"; +BA_ "Neutral Value" SG_ 3221225472 PN_first "-"; +BA_ "Invalid Value" SG_ 3221225472 PN_first "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Checksum "-"; +BA_ "Neutral Value" SG_ 3221225472 Checksum "-"; +BA_ "Invalid Value" SG_ 3221225472 Checksum "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Message_Counter "0h,HCM(IM):-"; +BA_ "Neutral Value" SG_ 3221225472 Message_Counter "-"; +BA_ "Invalid Value" SG_ 3221225472 Message_Counter "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_R_WAKEUP_SIGNAL "00h"; +BA_ "Neutral Value" SG_ 3221225472 PSD_R_WAKEUP_SIGNAL "-"; +BA_ "Invalid Value" SG_ 3221225472 PSD_R_WAKEUP_SIGNAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_L_WAKEUP_SIGNAL "00h"; +BA_ "Neutral Value" SG_ 3221225472 PSD_L_WAKEUP_SIGNAL "-"; +BA_ "Invalid Value" SG_ 3221225472 PSD_L_WAKEUP_SIGNAL "-"; +BA_ "Invalid Value" SG_ 3221225472 EST_WAKEUP_SIGNAL "-"; +BA_ "Neutral Value" SG_ 3221225472 EST_WAKEUP_SIGNAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EST_WAKEUP_SIGNAL "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 BCM_WAKEUP_SIGNAL "00h"; +BA_ "Neutral Value" SG_ 3221225472 BCM_WAKEUP_SIGNAL "-"; +BA_ "Invalid Value" SG_ 3221225472 BCM_WAKEUP_SIGNAL "-"; +BA_ "Invalid Value" SG_ 3221225472 I_KEY_WAKEUP_SIGNAL "-"; +BA_ "Neutral Value" SG_ 3221225472 I_KEY_WAKEUP_SIGNAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 I_KEY_WAKEUP_SIGNAL "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 STSYS_TYPE "-"; +BA_ "Neutral Value" SG_ 3221225472 STSYS_TYPE "-"; +BA_ "Invalid Value" SG_ 3221225472 STSYS_TYPE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ESCL_STATUS "0b"; +BA_ "Neutral Value" SG_ 3221225472 ESCL_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 ESCL_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OK_COMMUTE "00b"; +BA_ "Neutral Value" SG_ 3221225472 OK_COMMUTE "-"; +BA_ "Invalid Value" SG_ 3221225472 OK_COMMUTE "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 USM_DONGEL_COM "00b"; +BA_ "Neutral Value" SG_ 3221225472 USM_DONGEL_COM "00b"; +BA_ "Invalid Value" SG_ 3221225472 USM_DONGEL_COM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USM_DONGEL_ID "000h"; +BA_ "Neutral Value" SG_ 3221225472 USM_DONGEL_ID "-"; +BA_ "Invalid Value" SG_ 3221225472 USM_DONGEL_ID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OIL_P_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 OIL_P_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 OIL_P_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HL_WASH "0b"; +BA_ "Neutral Value" SG_ 3221225472 HL_WASH "-"; +BA_ "Invalid Value" SG_ 3221225472 HL_WASH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BAT_L "0b"; +BA_ "Neutral Value" SG_ 3221225472 BAT_L "-"; +BA_ "Invalid Value" SG_ 3221225472 BAT_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IGN_CONF "0b"; +BA_ "Neutral Value" SG_ 3221225472 IGN_CONF "-"; +BA_ "Invalid Value" SG_ 3221225472 IGN_CONF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USM_WAKE_SLEEP_REQ "00b(Only for L5_1st) +11b(Except for L5_1st)"; +BA_ "Neutral Value" SG_ 3221225472 USM_WAKE_SLEEP_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 USM_WAKE_SLEEP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USM_REFUSE "00b(Only for L5_1st,3rd) +01b"; +BA_ "Neutral Value" SG_ 3221225472 USM_REFUSE "-"; +BA_ "Invalid Value" SG_ 3221225472 USM_REFUSE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_COMP "0b"; +BA_ "Neutral Value" SG_ 3221225472 AC_COMP "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_COMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TAIL_L "-"; +BA_ "Neutral Value" SG_ 3221225472 TAIL_L "-"; +BA_ "Invalid Value" SG_ 3221225472 TAIL_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HL_LOW "0b"; +BA_ "Neutral Value" SG_ 3221225472 HL_LOW "-"; +BA_ "Invalid Value" SG_ 3221225472 HL_LOW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HL_HIGH "0b"; +BA_ "Neutral Value" SG_ 3221225472 HL_HIGH "-"; +BA_ "Invalid Value" SG_ 3221225472 HL_HIGH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_FOG "0b"; +BA_ "Neutral Value" SG_ 3221225472 FR_FOG "-"; +BA_ "Invalid Value" SG_ 3221225472 FR_FOG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RES_USM "0b(Only for L5_1st) +1b"; +BA_ "Neutral Value" SG_ 3221225472 RES_USM "-"; +BA_ "Invalid Value" SG_ 3221225472 RES_USM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_WIP_PROT "00b"; +BA_ "Neutral Value" SG_ 3221225472 FR_WIP_PROT "-"; +BA_ "Invalid Value" SG_ 3221225472 FR_WIP_PROT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IGN_RLY "0b"; +BA_ "Neutral Value" SG_ 3221225472 IGN_RLY "-"; +BA_ "Invalid Value" SG_ 3221225472 IGN_RLY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STA_RLY "11b"; +BA_ "Neutral Value" SG_ 3221225472 STA_RLY "-"; +BA_ "Invalid Value" SG_ 3221225472 STA_RLY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_WIP "00b"; +BA_ "Neutral Value" SG_ 3221225472 FR_WIP "-"; +BA_ "Invalid Value" SG_ 3221225472 FR_WIP "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 AUTO_S_SW "1b"; +BA_ "Neutral Value" SG_ 3221225472 AUTO_S_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 AUTO_S_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 LR_Y "-"; +BA_ "Neutral Value" SG_ 3221225472 LR_Y "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LR_Y "-"; +BA_ "Invalid Value" SG_ 3221225472 LR_X "-"; +BA_ "Neutral Value" SG_ 3221225472 LR_X "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LR_X "-"; +BA_ "Invalid Value" SG_ 3221225472 WIPERIMP "-"; +BA_ "Neutral Value" SG_ 3221225472 WIPERIMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WIPERIMP "0b"; +BA_ "Invalid Value" SG_ 3221225472 HVIMP "-"; +BA_ "Neutral Value" SG_ 3221225472 HVIMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HVIMP "0b"; +BA_ "Invalid Value" SG_ 3221225472 BRKIMP "-"; +BA_ "Neutral Value" SG_ 3221225472 BRKIMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRKIMP "0b"; +BA_ "Invalid Value" SG_ 3221225472 RNGIMP "-"; +BA_ "Neutral Value" SG_ 3221225472 RNGIMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RNGIMP "0b"; +BA_ "Invalid Value" SG_ 3221225472 MSG_COUNT "-"; +BA_ "Neutral Value" SG_ 3221225472 MSG_COUNT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSG_COUNT "-"; +BA_ "Invalid Value" SG_ 3221225472 ACCFAIL2 "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCFAIL2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCFAIL2 "-"; +BA_ "Invalid Value" SG_ 3221225472 PBS2_ACTI_MAINBRK "-"; +BA_ "Neutral Value" SG_ 3221225472 PBS2_ACTI_MAINBRK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS2_ACTI_MAINBRK "-"; +BA_ "Invalid Value" SG_ 3221225472 ERR_ST1 "-"; +BA_ "Neutral Value" SG_ 3221225472 ERR_ST1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ERR_ST1 "0b"; +BA_ "Invalid Value" SG_ 3221225472 BST_ACTV2 "-"; +BA_ "Neutral Value" SG_ 3221225472 BST_ACTV2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BST_ACTV2 "-"; +BA_ "Invalid Value" SG_ 3221225472 BST_ACTV1 "-"; +BA_ "Neutral Value" SG_ 3221225472 BST_ACTV1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BST_ACTV1 "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_VALVE "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_VALVE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_VALVE "-"; +BA_ "Invalid Value" SG_ 3221225472 AUTO_BRK "-"; +BA_ "Neutral Value" SG_ 3221225472 AUTO_BRK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AUTO_BRK "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_FAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 SETDIST "-"; +BA_ "Neutral Value" SG_ 3221225472 SETDIST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SETDIST "-"; +BA_ "Invalid Value" SG_ 3221225472 TCSHANGE "-"; +BA_ "Neutral Value" SG_ 3221225472 TCSHANGE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TCSHANGE "0b"; +BA_ "Invalid Value" SG_ 3221225472 LPUPSIG "-"; +BA_ "Neutral Value" SG_ 3221225472 LPUPSIG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LPUPSIG "0b"; +BA_ "Invalid Value" SG_ 3221225472 DECON "-"; +BA_ "Neutral Value" SG_ 3221225472 DECON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DECON "0b"; +BA_ "Invalid Value" SG_ 3221225472 TGCHANGE "-"; +BA_ "Neutral Value" SG_ 3221225472 TGCHANGE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TGCHANGE "0b"; +BA_ "Invalid Value" SG_ 3221225472 MAGCTACC "-"; +BA_ "Neutral Value" SG_ 3221225472 MAGCTACC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MAGCTACC "0h"; +BA_ "Invalid Value" SG_ 3221225472 V_APS_F "-"; +BA_ "Neutral Value" SG_ 3221225472 V_APS_F "-"; +BA_ "FirstFrameValue" SG_ 3221225472 V_APS_F "00h"; +BA_ "Invalid Value" SG_ 3221225472 TURN_IND "111b"; +BA_ "Neutral Value" SG_ 3221225472 TURN_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TURN_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSWA1 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSWA1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSWA1 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSWA2 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSWA2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSWA2 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSWA3 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSWA3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSWA3 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSWA4 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSWA4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSWA4 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSWA5 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSWA5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSWA5 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSWA6 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSWA6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSWA6 "0b"; +BA_ "Invalid Value" SG_ 3221225472 TECMD_S_upper "-"; +BA_ "Neutral Value" SG_ 3221225472 TECMD_S_upper "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TECMD_S_upper "-"; +BA_ "Invalid Value" SG_ 3221225472 TECMD_M_upper "-"; +BA_ "Neutral Value" SG_ 3221225472 TECMD_M_upper "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TECMD_M_upper "-"; +BA_ "Invalid Value" SG_ 3221225472 TECMD_S_lower "-"; +BA_ "Neutral Value" SG_ 3221225472 TECMD_S_lower "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TECMD_S_lower "-"; +BA_ "Invalid Value" SG_ 3221225472 TECMD_M_lower "-"; +BA_ "Neutral Value" SG_ 3221225472 TECMD_M_lower "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TECMD_M_lower "-"; +BA_ "Invalid Value" SG_ 3221225472 BPFS_NC "-"; +BA_ "Neutral Value" SG_ 3221225472 BPFS_NC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BPFS_NC "0b"; +BA_ "Invalid Value" SG_ 3221225472 BPFS_NO "-"; +BA_ "Neutral Value" SG_ 3221225472 BPFS_NO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BPFS_NO "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDCRU "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDCRU "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDCRU "0b"; +BA_ "Invalid Value" SG_ 3221225472 ODCANACC "-"; +BA_ "Neutral Value" SG_ 3221225472 ODCANACC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ODCANACC "0b"; +BA_ "Invalid Value" SG_ 3221225472 AUTOSTOP "-"; +BA_ "Neutral Value" SG_ 3221225472 AUTOSTOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AUTOSTOP "0b"; +BA_ "Invalid Value" SG_ 3221225472 ACCACT "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCACT "0b"; +BA_ "Invalid Value" SG_ 3221225472 MAIN_SWA "-"; +BA_ "Neutral Value" SG_ 3221225472 MAIN_SWA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MAIN_SWA "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 CLUSTER_DISP "-"; +BA_ "Neutral Value" SG_ 3221225472 CLUSTER_DISP "-"; +BA_ "Invalid Value" SG_ 3221225472 CLUSTER_DISP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BATTERY_LOW "-"; +BA_ "Neutral Value" SG_ 3221225472 BATTERY_LOW "-"; +BA_ "Invalid Value" SG_ 3221225472 BATTERY_LOW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRIP_SCROLLING_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TRIP_SCROLLING_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TRIP_SCROLLING_REQ "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 HEATER_F "-"; +BA_ "Neutral Value" SG_ 3221225472 HEATER_F "-"; +BA_ "Invalid Value" SG_ 3221225472 HEATER_F "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTRL_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 DTRL_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 DTRL_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 REV_SW "11b"; +BA_ "Neutral Value" SG_ 3221225472 REV_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REV_SW "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 CARD_KEY_NUM "-"; +BA_ "Neutral Value" SG_ 3221225472 CARD_KEY_NUM "-"; +BA_ "Invalid Value" SG_ 3221225472 CARD_KEY_NUM "1111b"; +BA_ "FirstFrameValue" SG_ 3221225472 ENG_TEMP "FFh"; +BA_ "Neutral Value" SG_ 3221225472 ENG_TEMP "-"; +BA_ "Invalid Value" SG_ 3221225472 ENG_TEMP "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 EX_TEMP "FFh"; +BA_ "Neutral Value" SG_ 3221225472 EX_TEMP "-"; +BA_ "Invalid Value" SG_ 3221225472 EX_TEMP "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 AUTOMATIC_WIPING_MAL "-"; +BA_ "Neutral Value" SG_ 3221225472 AUTOMATIC_WIPING_MAL "-"; +BA_ "Invalid Value" SG_ 3221225472 AUTOMATIC_WIPING_MAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_DEF_REQ "00b"; +BA_ "Neutral Value" SG_ 3221225472 RR_DEF_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 RR_DEF_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRAILER "0b"; +BA_ "Neutral Value" SG_ 3221225472 TRAILER "-"; +BA_ "Invalid Value" SG_ 3221225472 TRAILER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STEERING_LOCK "-"; +BA_ "Neutral Value" SG_ 3221225472 STEERING_LOCK "-"; +BA_ "Invalid Value" SG_ 3221225472 STEERING_LOCK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DOOR_LOOK "00b"; +BA_ "Neutral Value" SG_ 3221225472 DOOR_LOOK "-"; +BA_ "Invalid Value" SG_ 3221225472 DOOR_LOOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RR_FOG_L "0b"; +BA_ "Neutral Value" SG_ 3221225472 RR_FOG_L "-"; +BA_ "Invalid Value" SG_ 3221225472 RR_FOG_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WIP_MAL "-"; +BA_ "Neutral Value" SG_ 3221225472 WIP_MAL "-"; +BA_ "Invalid Value" SG_ 3221225472 WIP_MAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TYRE_PRE "-"; +BA_ "Neutral Value" SG_ 3221225472 TYRE_PRE "-"; +BA_ "Invalid Value" SG_ 3221225472 TYRE_PRE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 ACC_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FR_FOG_L_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 FR_FOG_L_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 FR_FOG_L_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RES_BCM "-"; +BA_ "Neutral Value" SG_ 3221225472 RES_BCM "-"; +BA_ "Invalid Value" SG_ 3221225472 RES_BCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AFSIND "-"; +BA_ "Neutral Value" SG_ 3221225472 AFSIND "-"; +BA_ "Invalid Value" SG_ 3221225472 AFSIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHG_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 CHG_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 CHG_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Buckle_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 Buckle_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 Buckle_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CLUSTER_WAKEUP_SIGNAL "-"; +BA_ "Neutral Value" SG_ 3221225472 CLUSTER_WAKEUP_SIGNAL "-"; +BA_ "Invalid Value" SG_ 3221225472 CLUSTER_WAKEUP_SIGNAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CGW_WAKEUP_SIGNAL "-"; +BA_ "Neutral Value" SG_ 3221225472 CGW_WAKEUP_SIGNAL "-"; +BA_ "Invalid Value" SG_ 3221225472 CGW_WAKEUP_SIGNAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 USM_WAKEUP_SIGNAL "00h"; +BA_ "Neutral Value" SG_ 3221225472 USM_WAKEUP_SIGNAL "-"; +BA_ "Invalid Value" SG_ 3221225472 USM_WAKEUP_SIGNAL "-"; +BA_ "Invalid Value" SG_ 3221225472 G_CS "-"; +BA_ "Neutral Value" SG_ 3221225472 G_CS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_CS "-"; +BA_ "Invalid Value" SG_ 3221225472 G_IV "-"; +BA_ "Neutral Value" SG_ 3221225472 G_IV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_IV "00h"; +BA_ "Invalid Value" SG_ 3221225472 N_HEATER "-"; +BA_ "Neutral Value" SG_ 3221225472 N_HEATER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 N_HEATER "00h"; +BA_ "Invalid Value" SG_ 3221225472 G_EON1 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_EON1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_EON1 "0b"; +BA_ "Invalid Value" SG_ 3221225472 NUP_flag "-"; +BA_ "Neutral Value" SG_ 3221225472 NUP_flag "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NUP_flag "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_CPON "-"; +BA_ "Neutral Value" SG_ 3221225472 G_CPON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_CPON "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_AC "-"; +BA_ "Neutral Value" SG_ 3221225472 G_AC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_AC "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_STBR "-"; +BA_ "Neutral Value" SG_ 3221225472 G_STBR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_STBR "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_WPR "-"; +BA_ "Neutral Value" SG_ 3221225472 G_WPR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_WPR "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_AIV "-"; +BA_ "Neutral Value" SG_ 3221225472 G_AIV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_AIV "00h"; +BA_ "Invalid Value" SG_ 3221225472 G_AI "-"; +BA_ "Neutral Value" SG_ 3221225472 G_AI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_AI "00h"; +BA_ "Invalid Value" SG_ 3221225472 G_MI "-"; +BA_ "Neutral Value" SG_ 3221225472 G_MI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_MI "00h"; +BA_ "Invalid Value" SG_ 3221225472 G_AW "-"; +BA_ "Neutral Value" SG_ 3221225472 G_AW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_AW "00h"; +BA_ "Invalid Value" SG_ 3221225472 G_AM "-"; +BA_ "Neutral Value" SG_ 3221225472 G_AM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_AM "0000h"; +BA_ "Invalid Value" SG_ 3221225472 EPS_DONGLE_ID "-"; +BA_ "Neutral Value" SG_ 3221225472 EPS_DONGLE_ID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EPS_DONGLE_ID "000h"; +BA_ "Invalid Value" SG_ 3221225472 EPSFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 EPSFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EPSFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 RESETEPS "-"; +BA_ "Neutral Value" SG_ 3221225472 RESETEPS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RESETEPS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SLIP_INFO_RR "0b"; +BA_ "Neutral Value" SG_ 3221225472 SLIP_INFO_RR "-"; +BA_ "Invalid Value" SG_ 3221225472 SLIP_INFO_RR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SLIP_INFO_RL "0b"; +BA_ "Neutral Value" SG_ 3221225472 SLIP_INFO_RL "-"; +BA_ "Invalid Value" SG_ 3221225472 SLIP_INFO_RL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SLIP_INFO_FR "0b"; +BA_ "Neutral Value" SG_ 3221225472 SLIP_INFO_FR "-"; +BA_ "Invalid Value" SG_ 3221225472 SLIP_INFO_FR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SLIP_INFO_FL "0b"; +BA_ "Neutral Value" SG_ 3221225472 SLIP_INFO_FL "-"; +BA_ "Invalid Value" SG_ 3221225472 SLIP_INFO_FL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABS_DONGLE_COM "00b"; +BA_ "Neutral Value" SG_ 3221225472 ABS_DONGLE_COM "00b"; +BA_ "Invalid Value" SG_ 3221225472 ABS_DONGLE_COM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABS_DONGLE_ID "000h"; +BA_ "Neutral Value" SG_ 3221225472 ABS_DONGLE_ID "-"; +BA_ "Invalid Value" SG_ 3221225472 ABS_DONGLE_ID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HSA_STATUS "0b"; +BA_ "Neutral Value" SG_ 3221225472 HSA_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 HSA_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 B_TM "-"; +BA_ "Neutral Value" SG_ 3221225472 B_TM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 B_TM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIR_2 "-"; +BA_ "Neutral Value" SG_ 3221225472 AIR_2 "-"; +BA_ "Invalid Value" SG_ 3221225472 AIR_2 "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 AIR_1 "-"; +BA_ "Neutral Value" SG_ 3221225472 AIR_1 "-"; +BA_ "Invalid Value" SG_ 3221225472 AIR_1 "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 OUTSIDE_TEMP "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 OUTSIDE_TEMP "-"; +BA_ "Invalid Value" SG_ 3221225472 OUTSIDE_TEMP "7Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 ILL_PWN "-"; +BA_ "Neutral Value" SG_ 3221225472 ILL_PWN "-"; +BA_ "Invalid Value" SG_ 3221225472 ILL_PWN "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 SLOPE_RL "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 SLOPE_RL "-"; +BA_ "Invalid Value" SG_ 3221225472 SLOPE_RL "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 SLOPE_FR "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 SLOPE_FR "-"; +BA_ "Invalid Value" SG_ 3221225472 SLOPE_FR "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 CORRECT_DEV "0000b"; +BA_ "Neutral Value" SG_ 3221225472 CORRECT_DEV "-"; +BA_ "Invalid Value" SG_ 3221225472 CORRECT_DEV "0000b"; +BA_ "FirstFrameValue" SG_ 3221225472 COMP_CAL_STA "11b"; +BA_ "Neutral Value" SG_ 3221225472 COMP_CAL_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 COMP_CAL_STA "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 BAROMETER "1FFh"; +BA_ "Neutral Value" SG_ 3221225472 BAROMETER "-"; +BA_ "Invalid Value" SG_ 3221225472 BAROMETER "1FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 ALTIMETER "1FFh"; +BA_ "Neutral Value" SG_ 3221225472 ALTIMETER "-"; +BA_ "Invalid Value" SG_ 3221225472 ALTIMETER "1FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 COMPASS "00000b"; +BA_ "Neutral Value" SG_ 3221225472 COMPASS "-"; +BA_ "Invalid Value" SG_ 3221225472 COMPASS "00000b"; +BA_ "FirstFrameValue" SG_ 3221225472 _4WD_Existence "0b"; +BA_ "Neutral Value" SG_ 3221225472 _4WD_Existence "-"; +BA_ "Invalid Value" SG_ 3221225472 _4WD_Existence "-"; +BA_ "Invalid Value" SG_ 3221225472 vUpdate_Counter6 "-"; +BA_ "Neutral Value" SG_ 3221225472 vUpdate_Counter6 "0h"; +BA_ "FirstFrameValue" SG_ 3221225472 vUpdate_Counter6 "0h"; +BA_ "Invalid Value" SG_ 3221225472 Curv_9_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_9_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_9_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_8_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_8_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_8_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_7_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_7_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_7_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_6_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_6_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_6_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_5_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_5_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_5_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_4_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_4_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_4_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_3_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_3_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_3_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_2_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_2_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_2_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_20_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_20_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_20_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_1_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_1_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_1_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_19_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_19_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_19_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_18_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_18_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_18_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_17_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_17_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_17_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_16_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_16_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_16_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_15_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_15_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_15_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_14_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_14_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_14_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_13_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_13_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_13_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_12_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_12_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_12_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_11_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_11_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_11_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_10_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_10_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_10_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Curv_0_Direction "-"; +BA_ "Neutral Value" SG_ 3221225472 Curv_0_Direction "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Curv_0_Direction "0b"; +BA_ "Invalid Value" SG_ 3221225472 Unit_SpeedLimt_Next "-"; +BA_ "Neutral Value" SG_ 3221225472 Unit_SpeedLimt_Next "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Unit_SpeedLimt_Next "0b"; +BA_ "Invalid Value" SG_ 3221225472 Next_RoadType "-"; +BA_ "Neutral Value" SG_ 3221225472 Next_RoadType "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 Next_RoadType "00b"; +BA_ "Invalid Value" SG_ 3221225472 AnotherRoad_Matching "-"; +BA_ "Neutral Value" SG_ 3221225472 AnotherRoad_Matching "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 AnotherRoad_Matching "0b"; +BA_ "Invalid Value" SG_ 3221225472 GPS_ERR "-"; +BA_ "Neutral Value" SG_ 3221225472 GPS_ERR "1b"; +BA_ "FirstFrameValue" SG_ 3221225472 GPS_ERR "1b"; +BA_ "Invalid Value" SG_ 3221225472 Unit_SpeedLimt "-"; +BA_ "Neutral Value" SG_ 3221225472 Unit_SpeedLimt "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Unit_SpeedLimt "0b"; +BA_ "Invalid Value" SG_ 3221225472 Dist_SpeedLimit_Sign "3Fh"; +BA_ "Neutral Value" SG_ 3221225472 Dist_SpeedLimit_Sign "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Dist_SpeedLimit_Sign "3Fh"; +BA_ "Invalid Value" SG_ 3221225472 SpeedLimit_Sign_Sts "-"; +BA_ "Neutral Value" SG_ 3221225472 SpeedLimit_Sign_Sts "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 SpeedLimit_Sign_Sts "00b"; +BA_ "Invalid Value" SG_ 3221225472 Next_SpeedLimit "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Next_SpeedLimit "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Next_SpeedLimit "FFh"; +BA_ "Invalid Value" SG_ 3221225472 Current_SpeedLimit "FFh"; +BA_ "Neutral Value" SG_ 3221225472 Current_SpeedLimit "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Current_SpeedLimit "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 MUTE_RADIO_ORDER "-"; +BA_ "Neutral Value" SG_ 3221225472 MUTE_RADIO_ORDER "-"; +BA_ "Invalid Value" SG_ 3221225472 MUTE_RADIO_ORDER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FULE_LEVEL "-"; +BA_ "Neutral Value" SG_ 3221225472 FULE_LEVEL "-"; +BA_ "Invalid Value" SG_ 3221225472 FULE_LEVEL "'- (NTC) +I = FFh(NTCE)"; +BA_ "FirstFrameValue" SG_ 3221225472 LAMP_AUTOCHECK "-"; +BA_ "Neutral Value" SG_ 3221225472 LAMP_AUTOCHECK "-"; +BA_ "Invalid Value" SG_ 3221225472 LAMP_AUTOCHECK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VEHICLE_TYPE "-"; +BA_ "Neutral Value" SG_ 3221225472 VEHICLE_TYPE "-"; +BA_ "Invalid Value" SG_ 3221225472 VEHICLE_TYPE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CLUSTER_WAKE_SLEEP_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CLUSTER_WAKE_SLEEP_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CLUSTER_WAKE_SLEEP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LPG_LOW "-"; +BA_ "Neutral Value" SG_ 3221225472 LPG_LOW "-"; +BA_ "Invalid Value" SG_ 3221225472 LPG_LOW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRBG_LAMP_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 AIRBG_LAMP_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRBG_LAMP_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRBAG_LAMPOFF_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 AIRBAG_LAMPOFF_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRBAG_LAMPOFF_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRBAG_LAMP_OPE "-"; +BA_ "Neutral Value" SG_ 3221225472 AIRBAG_LAMP_OPE "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRBAG_LAMP_OPE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRBAG_LAMPOFF_OPE "1b"; +BA_ "Neutral Value" SG_ 3221225472 AIRBAG_LAMPOFF_OPE "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRBAG_LAMPOFF_OPE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BAC_SW_or_MTSR_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 BAC_SW_or_MTSR_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 BAC_SW_or_MTSR_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DIS_TOTAL "-"; +BA_ "Neutral Value" SG_ 3221225472 DIS_TOTAL "-"; +BA_ "Invalid Value" SG_ 3221225472 DIS_TOTAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CLUSTER_REFUSE "-"; +BA_ "Neutral Value" SG_ 3221225472 CLUSTER_REFUSE "-"; +BA_ "Invalid Value" SG_ 3221225472 CLUSTER_REFUSE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FULE_LOW "0b"; +BA_ "Neutral Value" SG_ 3221225472 FULE_LOW "-"; +BA_ "Invalid Value" SG_ 3221225472 FULE_LOW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RES_METER "1b"; +BA_ "Neutral Value" SG_ 3221225472 RES_METER "-"; +BA_ "Invalid Value" SG_ 3221225472 RES_METER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRAKE_SYSTEM "0b"; +BA_ "Neutral Value" SG_ 3221225472 BRAKE_SYSTEM "-"; +BA_ "Invalid Value" SG_ 3221225472 BRAKE_SYSTEM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HAND_BRAKE "0b"; +BA_ "Neutral Value" SG_ 3221225472 HAND_BRAKE "-"; +BA_ "Invalid Value" SG_ 3221225472 HAND_BRAKE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FGUAG_DIAG "-"; +BA_ "Neutral Value" SG_ 3221225472 FGUAG_DIAG "-"; +BA_ "Invalid Value" SG_ 3221225472 FGUAG_DIAG "-"; +BA_ "Invalid Value" SG_ 3221225472 G_DG37 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_DG37 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_DG37 "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_DG36 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_DG36 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_DG36 "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_DG26 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_DG26 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_DG26 "00b"; +BA_ "Invalid Value" SG_ 3221225472 G_DG24 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_DG24 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_DG24 "00b"; +BA_ "Invalid Value" SG_ 3221225472 G_DG23 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_DG23 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_DG23 "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_DG22 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_DG22 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_DG22 "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_DG20 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_DG20 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_DG20 "00b"; +BA_ "Invalid Value" SG_ 3221225472 G_DG16 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_DG16 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_DG16 "00b"; +BA_ "Invalid Value" SG_ 3221225472 G_DG14 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_DG14 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_DG14 "00b"; +BA_ "Invalid Value" SG_ 3221225472 G_DG11 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_DG11 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_DG11 "000b"; +BA_ "Invalid Value" SG_ 3221225472 G_DG10 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_DG10 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_DG10 "0b"; +BA_ "Invalid Value" SG_ 3221225472 E_SUS_MODE "-"; +BA_ "Neutral Value" SG_ 3221225472 E_SUS_MODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 E_SUS_MODE "-"; +BA_ "Invalid Value" SG_ 3221225472 E_SUS_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 E_SUS_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 E_SUS_FAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 DL_BUZ_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 DL_BUZ_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DL_BUZ_STA "0b"; +BA_ "Invalid Value" SG_ 3221225472 SOL_MNTR "-"; +BA_ "Neutral Value" SG_ 3221225472 SOL_MNTR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SOL_MNTR "-"; +BA_ "Invalid Value" SG_ 3221225472 DL_APPROVAL "-"; +BA_ "Neutral Value" SG_ 3221225472 DL_APPROVAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DL_APPROVAL "-"; +BA_ "Invalid Value" SG_ 3221225472 DL_P_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 DL_P_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DL_P_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 DL_RELAY "-"; +BA_ "Neutral Value" SG_ 3221225472 DL_RELAY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DL_RELAY "-"; +BA_ "Invalid Value" SG_ 3221225472 WRR "FFFFh"; +BA_ "Neutral Value" SG_ 3221225472 WRR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WRR "-"; +BA_ "Invalid Value" SG_ 3221225472 DL_OPERATING "-"; +BA_ "Neutral Value" SG_ 3221225472 DL_OPERATING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DL_OPERATING "0b"; +BA_ "Invalid Value" SG_ 3221225472 DL_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 DL_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DL_SW "0b"; +BA_ "Invalid Value" SG_ 3221225472 DL_INDICATOR "-"; +BA_ "Neutral Value" SG_ 3221225472 DL_INDICATOR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DL_INDICATOR "00b"; +BA_ "Invalid Value" SG_ 3221225472 DL_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 DL_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DL_FAIL "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 METER_P_FAULT "-"; +BA_ "Neutral Value" SG_ 3221225472 METER_P_FAULT "-"; +BA_ "Invalid Value" SG_ 3221225472 METER_P_FAULT "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 INHIBITION_WARNING "-"; +BA_ "Neutral Value" SG_ 3221225472 INHIBITION_WARNING "-"; +BA_ "Invalid Value" SG_ 3221225472 INHIBITION_WARNING "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 IMMOBI_WARNING "-"; +BA_ "Neutral Value" SG_ 3221225472 IMMOBI_WARNING "-"; +BA_ "Invalid Value" SG_ 3221225472 IMMOBI_WARNING "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 BRAKE_PEDAL_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 BRAKE_PEDAL_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 BRAKE_PEDAL_REQ "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 PKB_FAIL_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 PKB_FAIL_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 PKB_FAIL_IND "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 EPKB_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 EPKB_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 EPKB_STATUS "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 EPKB_REFUSE "-"; +BA_ "Neutral Value" SG_ 3221225472 EPKB_REFUSE "-"; +BA_ "Invalid Value" SG_ 3221225472 EPKB_REFUSE "1b"; +BA_ "FirstFrameValue" SG_ 3221225472 BRAKING_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 BRAKING_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 BRAKING_IND "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 APB_WARNING "-"; +BA_ "Neutral Value" SG_ 3221225472 APB_WARNING "-"; +BA_ "Invalid Value" SG_ 3221225472 APB_WARNING "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 APB_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 APB_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 APB_REQ "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 IG_OFF_DELAY_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 IG_OFF_DELAY_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 IG_OFF_DELAY_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GSINXTGP "000b"; +BA_ "Neutral Value" SG_ 3221225472 GSINXTGP "-"; +BA_ "Invalid Value" SG_ 3221225472 GSINXTGP "-"; +BA_ "Invalid Value" SG_ 3221225472 ECOPSTCB "-"; +BA_ "Neutral Value" SG_ 3221225472 ECOPSTCB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECOPSTCB "-"; +BA_ "Invalid Value" SG_ 3221225472 ECOPMENU "-"; +BA_ "Neutral Value" SG_ 3221225472 ECOPMENU "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECOPMENU "-"; +BA_ "Invalid Value" SG_ 3221225472 ECOPADF "-"; +BA_ "Neutral Value" SG_ 3221225472 ECOPADF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECOPADF "-"; +BA_ "Invalid Value" SG_ 3221225472 ECOMENU "-"; +BA_ "Neutral Value" SG_ 3221225472 ECOMENU "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECOMENU "-"; +BA_ "Invalid Value" SG_ 3221225472 ECOIND "-"; +BA_ "Neutral Value" SG_ 3221225472 ECOIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECOIND "-"; +BA_ "Invalid Value" SG_ 3221225472 ENG_OIL_TEMP "-"; +BA_ "Neutral Value" SG_ 3221225472 ENG_OIL_TEMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENG_OIL_TEMP "-"; +BA_ "Invalid Value" SG_ 3221225472 MessageCounterMV "-"; +BA_ "Neutral Value" SG_ 3221225472 MessageCounterMV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MessageCounterMV "-"; +BA_ "Invalid Value" SG_ 3221225472 MastervacPre "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 MastervacPre "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MastervacPre "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 ENG_OIL_PRESSURE "FFh"; +BA_ "Neutral Value" SG_ 3221225472 ENG_OIL_PRESSURE "-"; +BA_ "Invalid Value" SG_ 3221225472 ENG_OIL_PRESSURE "FFh"; +BA_ "Invalid Value" SG_ 3221225472 SMAPREQ_hea "-"; +BA_ "Neutral Value" SG_ 3221225472 SMAPREQ_hea "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SMAPREQ_hea "-"; +BA_ "Invalid Value" SG_ 3221225472 SMAPREQ_emi "-"; +BA_ "Neutral Value" SG_ 3221225472 SMAPREQ_emi "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SMAPREQ_emi "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBD_WAKE_SLEEP_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 PBD_WAKE_SLEEP_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PBD_WAKE_SLEEP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBD_REFUSE "-"; +BA_ "Neutral Value" SG_ 3221225472 PBD_REFUSE "-"; +BA_ "Invalid Value" SG_ 3221225472 PBD_REFUSE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBD_HAZ_REQ "00b"; +BA_ "Neutral Value" SG_ 3221225472 PBD_HAZ_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PBD_HAZ_REQ "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_R_WUS_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 PSD_R_WUS_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PSD_R_WUS_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_R_UL_FOBSW "-"; +BA_ "Neutral Value" SG_ 3221225472 PSD_R_UL_FOBSW "0b"; +BA_ "Invalid Value" SG_ 3221225472 PSD_R_UL_FOBSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_R_UL_DRSW "-"; +BA_ "Neutral Value" SG_ 3221225472 PSD_R_UL_DRSW "0b"; +BA_ "Invalid Value" SG_ 3221225472 PSD_R_UL_DRSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_R_REF_SLP "10b"; +BA_ "Neutral Value" SG_ 3221225472 PSD_R_REF_SLP "-"; +BA_ "Invalid Value" SG_ 3221225472 PSD_R_REF_SLP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_R_ONE_UL_TSW "-"; +BA_ "Neutral Value" SG_ 3221225472 PSD_R_ONE_UL_TSW "0b"; +BA_ "Invalid Value" SG_ 3221225472 PSD_R_ONE_UL_TSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_R_CDL_REQ "00b"; +BA_ "Neutral Value" SG_ 3221225472 PSD_R_CDL_REQ "00b"; +BA_ "Invalid Value" SG_ 3221225472 PSD_R_CDL_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_R_ALL_UL_TSW "-"; +BA_ "Neutral Value" SG_ 3221225472 PSD_R_ALL_UL_TSW "0b"; +BA_ "Invalid Value" SG_ 3221225472 PSD_R_ALL_UL_TSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_L_WUS_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 PSD_L_WUS_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PSD_L_WUS_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_L_UL_FOBSW "-"; +BA_ "Neutral Value" SG_ 3221225472 PSD_L_UL_FOBSW "0b"; +BA_ "Invalid Value" SG_ 3221225472 PSD_L_UL_FOBSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_L_UL_DRSW "-"; +BA_ "Neutral Value" SG_ 3221225472 PSD_L_UL_DRSW "0b"; +BA_ "Invalid Value" SG_ 3221225472 PSD_L_UL_DRSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_L_REF_SLP "10b"; +BA_ "Neutral Value" SG_ 3221225472 PSD_L_REF_SLP "-"; +BA_ "Invalid Value" SG_ 3221225472 PSD_L_REF_SLP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_L_ONE_UL_TSW "-"; +BA_ "Neutral Value" SG_ 3221225472 PSD_L_ONE_UL_TSW "0b"; +BA_ "Invalid Value" SG_ 3221225472 PSD_L_ONE_UL_TSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_L_CDL_REQ "00b"; +BA_ "Neutral Value" SG_ 3221225472 PSD_L_CDL_REQ "00b"; +BA_ "Invalid Value" SG_ 3221225472 PSD_L_CDL_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSD_L_ALL_UL_TSW "-"; +BA_ "Neutral Value" SG_ 3221225472 PSD_L_ALL_UL_TSW "0b"; +BA_ "Invalid Value" SG_ 3221225472 PSD_L_ALL_UL_TSW "-"; +BA_ "Invalid Value" SG_ 3221225472 G_TRB "-"; +BA_ "Neutral Value" SG_ 3221225472 G_TRB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_TRB "0h"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_Minimum_IdleSpeedRequest "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_Minimum_IdleSpeedRequest "-"; +BA_ "Invalid Value" SG_ 3221225472 AT_Minimum_IdleSpeedRequest "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_Eco_Selected_Mode "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_Eco_Selected_Mode "-"; +BA_ "Invalid Value" SG_ 3221225472 AT_Eco_Selected_Mode "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_Snow_Selected_mode "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_Snow_Selected_mode "-"; +BA_ "Invalid Value" SG_ 3221225472 AT_Snow_Selected_mode "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_Impulsive_Selected_Mode "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_Impulsive_Selected_Mode "-"; +BA_ "Invalid Value" SG_ 3221225472 AT_Impulsive_Selected_Mode "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BrakePedalRequest "-"; +BA_ "Neutral Value" SG_ 3221225472 BrakePedalRequest "-"; +BA_ "Invalid Value" SG_ 3221225472 BrakePedalRequest "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_Warning "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_Warning "-"; +BA_ "Invalid Value" SG_ 3221225472 AT_Warning "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_PositionDisplay "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_PositionDisplay "-"; +BA_ "Invalid Value" SG_ 3221225472 AT_PositionDisplay "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_ProgSelect "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_ProgSelect "-"; +BA_ "Invalid Value" SG_ 3221225472 AT_ProgSelect "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_Faults_States "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_Faults_States "-"; +BA_ "Invalid Value" SG_ 3221225472 AT_Faults_States "-"; +BA_ "Invalid Value" SG_ 3221225472 TEMPSEN "-"; +BA_ "Neutral Value" SG_ 3221225472 TEMPSEN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMPSEN "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 OBD_AT_TEMP_DIAG_COMPLETED "-"; +BA_ "Neutral Value" SG_ 3221225472 OBD_AT_TEMP_DIAG_COMPLETED "-"; +BA_ "Invalid Value" SG_ 3221225472 OBD_AT_TEMP_DIAG_COMPLETED "-"; +BA_ "Invalid Value" SG_ 3221225472 IDLEUPRQBYHT "-"; +BA_ "Neutral Value" SG_ 3221225472 IDLEUPRQBYHT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDLEUPRQBYHT "0b"; +BA_ "Invalid Value" SG_ 3221225472 ISHRDREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ISHRDREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ISHRDREQ "1b"; +BA_ "Invalid Value" SG_ 3221225472 GSENVAL "-"; +BA_ "Neutral Value" SG_ 3221225472 GSENVAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GSENVAL "000h"; +BA_ "Invalid Value" SG_ 3221225472 INDPRNG "-"; +BA_ "Neutral Value" SG_ 3221225472 INDPRNG "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 INDPRNG "0b"; +BA_ "Invalid Value" SG_ 3221225472 TMISFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 TMISFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TMISFAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 ISRESTD "-"; +BA_ "Neutral Value" SG_ 3221225472 ISRESTD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ISRESTD "1b"; +BA_ "Invalid Value" SG_ 3221225472 IDSTSTBYI "-"; +BA_ "Neutral Value" SG_ 3221225472 IDSTSTBYI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDSTSTBYI "0b"; +BA_ "Invalid Value" SG_ 3221225472 IDSTSTBY "-"; +BA_ "Neutral Value" SG_ 3221225472 IDSTSTBY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDSTSTBY "0b"; +BA_ "Invalid Value" SG_ 3221225472 OBDDATA "-"; +BA_ "Neutral Value" SG_ 3221225472 OBDDATA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBDDATA "00h"; +BA_ "Invalid Value" SG_ 3221225472 OBDMARK "-"; +BA_ "Neutral Value" SG_ 3221225472 OBDMARK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBDMARK "00h"; +BA_ "Invalid Value" SG_ 3221225472 NTIM "FFh"; +BA_ "Neutral Value" SG_ 3221225472 NTIM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NTIM "-"; +BA_ "Invalid Value" SG_ 3221225472 ELAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 ELAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ELAMP "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 PFILTER_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 PFILTER_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 PFILTER_STA "Nis- Ren-0b"; +BA_ "Invalid Value" SG_ 3221225472 ENG_OSCO "-"; +BA_ "Neutral Value" SG_ 3221225472 ENG_OSCO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENG_OSCO "0b"; +BA_ "Invalid Value" SG_ 3221225472 TIMTYPE "-"; +BA_ "Neutral Value" SG_ 3221225472 TIMTYPE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIMTYPE "0b"; +BA_ "Invalid Value" SG_ 3221225472 LED "-"; +BA_ "Neutral Value" SG_ 3221225472 LED "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LED "0b"; +BA_ "Invalid Value" SG_ 3221225472 WTENP "-"; +BA_ "Neutral Value" SG_ 3221225472 WTENP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WTENP "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 G_LAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 G_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 G_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 ECFL1 "-"; +BA_ "Neutral Value" SG_ 3221225472 ECFL1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECFL1 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ECFL2 "-"; +BA_ "Neutral Value" SG_ 3221225472 ECFL2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECFL2 "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 RINF "algorithmready"; +BA_ "Neutral Value" SG_ 3221225472 RINF "-"; +BA_ "Invalid Value" SG_ 3221225472 RINF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ISCREQ "FFh"; +BA_ "Neutral Value" SG_ 3221225472 ISCREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ISCREQ "FFh"; +BA_ "Invalid Value" SG_ 3221225472 TIM "-"; +BA_ "Neutral Value" SG_ 3221225472 TIM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIM "0000h"; +BA_ "Invalid Value" SG_ 3221225472 ART_KONF "-"; +BA_ "Neutral Value" SG_ 3221225472 ART_KONF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ART_KONF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECV_duty "7Fh"; +BA_ "Neutral Value" SG_ 3221225472 ECV_duty "-"; +BA_ "Invalid Value" SG_ 3221225472 ECV_duty "-"; +BA_ "Invalid Value" SG_ 3221225472 ISOKAC "-"; +BA_ "Neutral Value" SG_ 3221225472 ISOKAC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ISOKAC "0b"; +BA_ "Invalid Value" SG_ 3221225472 COMPSTR "-"; +BA_ "Neutral Value" SG_ 3221225472 COMPSTR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMPSTR "0b"; +BA_ "Invalid Value" SG_ 3221225472 COMPDST "-"; +BA_ "Neutral Value" SG_ 3221225472 COMPDST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMPDST "0b"; +BA_ "Invalid Value" SG_ 3221225472 ACSTRKRE "-"; +BA_ "Neutral Value" SG_ 3221225472 ACSTRKRE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACSTRKRE "0b"; +BA_ "Invalid Value" SG_ 3221225472 IdleUpRequest "-"; +BA_ "Neutral Value" SG_ 3221225472 IdleUpRequest "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IdleUpRequest "000b"; +BA_ "Invalid Value" SG_ 3221225472 BFNVLT "-"; +BA_ "Neutral Value" SG_ 3221225472 BFNVLT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BFNVLT "-"; +BA_ "Invalid Value" SG_ 3221225472 ChangeStatus_54C "-"; +BA_ "Neutral Value" SG_ 3221225472 ChangeStatus_54C "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ChangeStatus_54C "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_request "-"; +BA_ "Neutral Value" SG_ 3221225472 AC_request "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_request "-"; +BA_ "Invalid Value" SG_ 3221225472 FanOn_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 FanOn_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FanOn_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 RearDef_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 RearDef_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearDef_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TargetEvaTemp "FFh"; +BA_ "Neutral Value" SG_ 3221225472 TargetEvaTemp "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 TargetEvaTemp "-"; +BA_ "Invalid Value" SG_ 3221225472 EvaTemp "FFh"; +BA_ "Neutral Value" SG_ 3221225472 EvaTemp "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 EvaTemp "-"; +BA_ "Invalid Value" SG_ 3221225472 STA_ST_HEAT_AUTO "-"; +BA_ "Neutral Value" SG_ 3221225472 STA_ST_HEAT_AUTO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STA_ST_HEAT_AUTO "-"; +BA_ "Invalid Value" SG_ 3221225472 ST_HEAT_AUTO_EXT "-"; +BA_ "Neutral Value" SG_ 3221225472 ST_HEAT_AUTO_EXT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ST_HEAT_AUTO_EXT "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_EXIST "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_EXIST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_EXIST "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_EXIST "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_EXIST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_EXIST "-"; +BA_ "Invalid Value" SG_ 3221225472 ST_HEAT_SWIND "-"; +BA_ "Neutral Value" SG_ 3221225472 ST_HEAT_SWIND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ST_HEAT_SWIND "-"; +BA_ "Invalid Value" SG_ 3221225472 ST_HEAT_EXIST "-"; +BA_ "Neutral Value" SG_ 3221225472 ST_HEAT_EXIST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ST_HEAT_EXIST "-"; +BA_ "Invalid Value" SG_ 3221225472 STA_IDLSTP_HVAC "-"; +BA_ "Neutral Value" SG_ 3221225472 STA_IDLSTP_HVAC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STA_IDLSTP_HVAC "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 IDLSTP_HVAC_EXST "-"; +BA_ "Neutral Value" SG_ 3221225472 IDLSTP_HVAC_EXST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDLSTP_HVAC_EXST "-"; +BA_ "Invalid Value" SG_ 3221225472 ECON_Status "-"; +BA_ "Neutral Value" SG_ 3221225472 ECON_Status "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECON_Status "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAirVentStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAirVentStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAirVentStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAirVent_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAirVent_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAirVent_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 Minus_sign_outside_temp "-"; +BA_ "Neutral Value" SG_ 3221225472 Minus_sign_outside_temp "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Minus_sign_outside_temp "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_SelfDiagnosing "-"; +BA_ "Neutral Value" SG_ 3221225472 AC_SelfDiagnosing "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_SelfDiagnosing "-"; +BA_ "Invalid Value" SG_ 3221225472 ChangeStatus_54B "-"; +BA_ "Neutral Value" SG_ 3221225472 ChangeStatus_54B "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ChangeStatus_54B "-"; +BA_ "Invalid Value" SG_ 3221225472 AirQualitySensorSensitivityStatu "-"; +BA_ "Neutral Value" SG_ 3221225472 AirQualitySensorSensitivityStatu "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirQualitySensorSensitivityStatu "-"; +BA_ "Invalid Value" SG_ 3221225472 PollutionLevel "-"; +BA_ "Neutral Value" SG_ 3221225472 PollutionLevel "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PollutionLevel "-"; +BA_ "Invalid Value" SG_ 3221225472 ECON_SW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 ECON_SW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECON_SW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAirPurifierStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAirPurifierStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAirPurifierStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAirPurifier_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAirPurifier_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAirPurifier_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 Status_of_plasma_cluster "-"; +BA_ "Neutral Value" SG_ 3221225472 Status_of_plasma_cluster "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Status_of_plasma_cluster "-"; +BA_ "Invalid Value" SG_ 3221225472 PlasmaCluster_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 PlasmaCluster_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PlasmaCluster_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 IntakeAutoSW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 IntakeAutoSW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IntakeAutoSW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 FanSpeedStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 FanSpeedStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FanSpeedStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 FanAutoStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 FanAutoStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FanAutoStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 FrontAirPurifierStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 FrontAirPurifierStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FrontAirPurifierStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 Def_SW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 Def_SW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Def_SW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 DualStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 DualStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DualStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 Dual_SW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 Dual_SW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Dual_SW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 FRE_Status "-"; +BA_ "Neutral Value" SG_ 3221225472 FRE_Status "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FRE_Status "-"; +BA_ "Invalid Value" SG_ 3221225472 REC_Status "-"; +BA_ "Neutral Value" SG_ 3221225472 REC_Status "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REC_Status "-"; +BA_ "Invalid Value" SG_ 3221225472 REC_SW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 REC_SW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REC_SW_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AutoStatus_Pass "-"; +BA_ "Neutral Value" SG_ 3221225472 AutoStatus_Pass "-"; +BA_ "Invalid Value" SG_ 3221225472 AutoStatus_Pass "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirVentStatus_Dr "-"; +BA_ "Neutral Value" SG_ 3221225472 AirVentStatus_Dr "-"; +BA_ "Invalid Value" SG_ 3221225472 AirVentStatus_Dr "-"; +BA_ "Invalid Value" SG_ 3221225472 AirVentStatus_Pass "-"; +BA_ "Neutral Value" SG_ 3221225472 AirVentStatus_Pass "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirVentStatus_Pass "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_SystemStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 AC_SystemStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_SystemStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_SW_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 AC_SW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_SW_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 Status_of_AC "-"; +BA_ "Neutral Value" SG_ 3221225472 Status_of_AC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Status_of_AC "-"; +BA_ "Invalid Value" SG_ 3221225472 AutoStatus_Dr "-"; +BA_ "Neutral Value" SG_ 3221225472 AutoStatus_Dr "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AutoStatus_Dr "-"; +BA_ "Invalid Value" SG_ 3221225472 AutoSW_IND_Dr "-"; +BA_ "Neutral Value" SG_ 3221225472 AutoSW_IND_Dr "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AutoSW_IND_Dr "-"; +BA_ "Invalid Value" SG_ 3221225472 AutoSW_IND_Pass "-"; +BA_ "Neutral Value" SG_ 3221225472 AutoSW_IND_Pass "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AutoSW_IND_Pass "-"; +BA_ "Invalid Value" SG_ 3221225472 UpperVentExist "-"; +BA_ "Neutral Value" SG_ 3221225472 UpperVentExist "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UpperVentExist "-"; +BA_ "Invalid Value" SG_ 3221225472 B_PLR_vent_exist "-"; +BA_ "Neutral Value" SG_ 3221225472 B_PLR_vent_exist "-"; +BA_ "FirstFrameValue" SG_ 3221225472 B_PLR_vent_exist "-"; +BA_ "Invalid Value" SG_ 3221225472 _3rd_vent_exist "-"; +BA_ "Neutral Value" SG_ 3221225472 _3rd_vent_exist "-"; +BA_ "FirstFrameValue" SG_ 3221225472 _3rd_vent_exist "-"; +BA_ "Invalid Value" SG_ 3221225472 FrontAirPurifierExist "-"; +BA_ "Neutral Value" SG_ 3221225472 FrontAirPurifierExist "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FrontAirPurifierExist "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAirPurifierExist "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAirPurifierExist "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAirPurifierExist "-"; +BA_ "Invalid Value" SG_ 3221225472 TempSW_LongPushOperation "-"; +BA_ "Neutral Value" SG_ 3221225472 TempSW_LongPushOperation "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TempSW_LongPushOperation "-"; +BA_ "Invalid Value" SG_ 3221225472 FanSW_LongPushOperation "-"; +BA_ "Neutral Value" SG_ 3221225472 FanSW_LongPushOperation "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FanSW_LongPushOperation "-"; +BA_ "Invalid Value" SG_ 3221225472 Plasuma_gene "-"; +BA_ "Neutral Value" SG_ 3221225472 Plasuma_gene "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Plasuma_gene "-"; +BA_ "Invalid Value" SG_ 3221225472 OutsideTemp "FFh"; +BA_ "Neutral Value" SG_ 3221225472 OutsideTemp "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OutsideTemp "FFh"; +BA_ "Invalid Value" SG_ 3221225472 Rear_PTC "-"; +BA_ "Neutral Value" SG_ 3221225472 Rear_PTC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Rear_PTC "-"; +BA_ "Invalid Value" SG_ 3221225472 Passenger_PTC "-"; +BA_ "Neutral Value" SG_ 3221225472 Passenger_PTC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Passenger_PTC "-"; +BA_ "Invalid Value" SG_ 3221225472 Dr_PTC "-"; +BA_ "Neutral Value" SG_ 3221225472 Dr_PTC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Dr_PTC "-"; +BA_ "Invalid Value" SG_ 3221225472 Air_quality_sensor_exist "-"; +BA_ "Neutral Value" SG_ 3221225472 Air_quality_sensor_exist "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Air_quality_sensor_exist "-"; +BA_ "Invalid Value" SG_ 3221225472 Max_level_of_air_quality_sensor "-"; +BA_ "Neutral Value" SG_ 3221225472 Max_level_of_air_quality_sensor "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Max_level_of_air_quality_sensor "-"; +BA_ "Invalid Value" SG_ 3221225472 TempUnit "-"; +BA_ "Neutral Value" SG_ 3221225472 TempUnit "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TempUnit "-"; +BA_ "Invalid Value" SG_ 3221225472 OldAndNewMessage "-"; +BA_ "Neutral Value" SG_ 3221225472 OldAndNewMessage "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OldAndNewMessage "-"; +BA_ "Invalid Value" SG_ 3221225472 ChangeStatus_54A "-"; +BA_ "Neutral Value" SG_ 3221225472 ChangeStatus_54A "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ChangeStatus_54A "-"; +BA_ "Invalid Value" SG_ 3221225472 Max_level_of_fan_speed "-"; +BA_ "Neutral Value" SG_ 3221225472 Max_level_of_fan_speed "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Max_level_of_fan_speed "-"; +BA_ "Invalid Value" SG_ 3221225472 Max_level_of_rear_ac_fan_Speed "-"; +BA_ "Neutral Value" SG_ 3221225472 Max_level_of_rear_ac_fan_Speed "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Max_level_of_rear_ac_fan_Speed "-"; +BA_ "Invalid Value" SG_ 3221225472 Econ_exist "-"; +BA_ "Neutral Value" SG_ 3221225472 Econ_exist "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Econ_exist "-"; +BA_ "Invalid Value" SG_ 3221225472 Dual_exist "-"; +BA_ "Neutral Value" SG_ 3221225472 Dual_exist "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Dual_exist "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAirVent_ExistAndType "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAirVent_ExistAndType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAirVent_ExistAndType "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAC_ExistAndType "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAC_ExistAndType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAC_ExistAndType "-"; +BA_ "Invalid Value" SG_ 3221225472 Plasma_cluster_exist "-"; +BA_ "Neutral Value" SG_ 3221225472 Plasma_cluster_exist "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Plasma_cluster_exist "-"; +BA_ "Invalid Value" SG_ 3221225472 Max_min_PTC_range "-"; +BA_ "Neutral Value" SG_ 3221225472 Max_min_PTC_range "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Max_min_PTC_range "-"; +BA_ "Invalid Value" SG_ 3221225472 PTC_range "-"; +BA_ "Neutral Value" SG_ 3221225472 PTC_range "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PTC_range "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CORRECT_DEV_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 CORRECT_DEV_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 CORRECT_DEV_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMP_CAL "-"; +BA_ "Neutral Value" SG_ 3221225472 COMP_CAL "-"; +BA_ "Invalid Value" SG_ 3221225472 COMP_CAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_VentDirectSetting "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_VentDirectSetting "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_VentDirectSetting "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrVentDirectSetting "-"; +BA_ "Neutral Value" SG_ 3221225472 RrVentDirectSetting "-"; +BA_ "Invalid Value" SG_ 3221225472 RrVentDirectSetting "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_TempDirectSetting "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_TempDirectSetting "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_TempDirectSetting "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RearAcFanSpeedDirectSetting "-"; +BA_ "Neutral Value" SG_ 3221225472 RearAcFanSpeedDirectSetting "-"; +BA_ "Invalid Value" SG_ 3221225472 RearAcFanSpeedDirectSetting "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_FanSpeedDirectSetting "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_FanSpeedDirectSetting "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_FanSpeedDirectSetting "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirQualitySensDirectSetting "-"; +BA_ "Neutral Value" SG_ 3221225472 AirQualitySensDirectSetting "-"; +BA_ "Invalid Value" SG_ 3221225472 AirQualitySensDirectSetting "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRVENTDIRECTSETTING_DR "-"; +BA_ "Neutral Value" SG_ 3221225472 AIRVENTDIRECTSETTING_DR "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRVENTDIRECTSETTING_DR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRVENTDIRECTSETTING_PASS "-"; +BA_ "Neutral Value" SG_ 3221225472 AIRVENTDIRECTSETTING_PASS "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRVENTDIRECTSETTING_PASS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CompressorDirectSetting "-"; +BA_ "Neutral Value" SG_ 3221225472 CompressorDirectSetting "-"; +BA_ "Invalid Value" SG_ 3221225472 CompressorDirectSetting "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TempDirectSetting_Pass "-"; +BA_ "Neutral Value" SG_ 3221225472 TempDirectSetting_Pass "-"; +BA_ "Invalid Value" SG_ 3221225472 TempDirectSetting_Pass "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TempDirectSetting_Dr "-"; +BA_ "Neutral Value" SG_ 3221225472 TempDirectSetting_Dr "-"; +BA_ "Invalid Value" SG_ 3221225472 TempDirectSetting_Dr "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FanSpeedDirectSetting "-"; +BA_ "Neutral Value" SG_ 3221225472 FanSpeedDirectSetting "-"; +BA_ "Invalid Value" SG_ 3221225472 FanSpeedDirectSetting "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IntakeDirectSetting "-"; +BA_ "Neutral Value" SG_ 3221225472 IntakeDirectSetting "-"; +BA_ "Invalid Value" SG_ 3221225472 IntakeDirectSetting "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TemperatureUnitSetting "-"; +BA_ "Neutral Value" SG_ 3221225472 TemperatureUnitSetting "-"; +BA_ "Invalid Value" SG_ 3221225472 TemperatureUnitSetting "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirQualitySensUpSW_SWfre "-"; +BA_ "Neutral Value" SG_ 3221225472 AirQualitySensUpSW_SWfre "-"; +BA_ "Invalid Value" SG_ 3221225472 AirQualitySensUpSW_SWfre "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirQualitySensDownSW_SWrec "-"; +BA_ "Neutral Value" SG_ 3221225472 AirQualitySensDownSW_SWrec "-"; +BA_ "Invalid Value" SG_ 3221225472 AirQualitySensDownSW_SWrec "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_SelfDiagStartSW "-"; +BA_ "Neutral Value" SG_ 3221225472 AC_SelfDiagStartSW "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_SelfDiagStartSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_SelfDiagStartSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_SelfDiagStartSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_SelfDiagStartSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FailSafeStartSW "-"; +BA_ "Neutral Value" SG_ 3221225472 FailSafeStartSW "-"; +BA_ "Invalid Value" SG_ 3221225472 FailSafeStartSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STATUS_OF_PREIOD "-"; +BA_ "Neutral Value" SG_ 3221225472 STATUS_OF_PREIOD "-"; +BA_ "Invalid Value" SG_ 3221225472 STATUS_OF_PREIOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 B_PLR_VentOnOffSW "-"; +BA_ "Neutral Value" SG_ 3221225472 B_PLR_VentOnOffSW "-"; +BA_ "Invalid Value" SG_ 3221225472 B_PLR_VentOnOffSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 B_PLRand3rdVentSameOnOffSW "-"; +BA_ "Neutral Value" SG_ 3221225472 B_PLRand3rdVentSameOnOffSW "-"; +BA_ "Invalid Value" SG_ 3221225472 B_PLRand3rdVentSameOnOffSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 B_PLRand3rdVentOffSW "-"; +BA_ "Neutral Value" SG_ 3221225472 B_PLRand3rdVentOffSW "-"; +BA_ "Invalid Value" SG_ 3221225472 B_PLRand3rdVentOffSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 B_PLRand3rdVentOnOffSW "-"; +BA_ "Neutral Value" SG_ 3221225472 B_PLRand3rdVentOnOffSW "-"; +BA_ "Invalid Value" SG_ 3221225472 B_PLRand3rdVentOnOffSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VentOnOffSW_3rd "-"; +BA_ "Neutral Value" SG_ 3221225472 VentOnOffSW_3rd "-"; +BA_ "Invalid Value" SG_ 3221225472 VentOnOffSW_3rd "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PlasmaClusterModeSW "-"; +BA_ "Neutral Value" SG_ 3221225472 PlasmaClusterModeSW "-"; +BA_ "Invalid Value" SG_ 3221225472 PlasmaClusterModeSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAirPurifierUpSW_or_FRSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAirPurifierUpSW_or_FRSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAirPurifierUpSW_or_FRSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAirPurifierDownSW_or_RearSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAirPurifierDownSW_or_RearSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAirPurifierDownSW_or_RearSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_FanSpeedSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_FanSpeedSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_FanSpeedSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_FanSpeedUpSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_FanSpeedUpSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_FanSpeedUpSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_FanSpeedDownSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_FanSpeedDownSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_FanSpeedDownSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAirVentSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAirVentSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAirVentSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_VentSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_VentSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_VentSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_VentDownSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_VentDownSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_VentDownSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_OffSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_OffSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_OffSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_TempUpSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_TempUpSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_TempUpSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_TempDownSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_TempDownSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_TempDownSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RcAC_AutoSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RcAC_AutoSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RcAC_AutoSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AUTOSWITCH_DR "-"; +BA_ "Neutral Value" SG_ 3221225472 AUTOSWITCH_DR "-"; +BA_ "Invalid Value" SG_ 3221225472 AUTOSWITCH_DR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AUTOSWITCH_PASS "-"; +BA_ "Neutral Value" SG_ 3221225472 AUTOSWITCH_PASS "-"; +BA_ "Invalid Value" SG_ 3221225472 AUTOSWITCH_PASS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FanSpeedSW "-"; +BA_ "Neutral Value" SG_ 3221225472 FanSpeedSW "-"; +BA_ "Invalid Value" SG_ 3221225472 FanSpeedSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FanSpeedUpSW "-"; +BA_ "Neutral Value" SG_ 3221225472 FanSpeedUpSW "-"; +BA_ "Invalid Value" SG_ 3221225472 FanSpeedUpSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FanSpeedDownSW "-"; +BA_ "Neutral Value" SG_ 3221225472 FanSpeedDownSW "-"; +BA_ "Invalid Value" SG_ 3221225472 FanSpeedDownSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FanSpeedDownSW_LongPush "-"; +BA_ "Neutral Value" SG_ 3221225472 FanSpeedDownSW_LongPush "-"; +BA_ "Invalid Value" SG_ 3221225472 FanSpeedDownSW_LongPush "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMPUPSWITCH_DR "-"; +BA_ "Neutral Value" SG_ 3221225472 TEMPUPSWITCH_DR "-"; +BA_ "Invalid Value" SG_ 3221225472 TEMPUPSWITCH_DR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TempDownSW_Dr "-"; +BA_ "Neutral Value" SG_ 3221225472 TempDownSW_Dr "-"; +BA_ "Invalid Value" SG_ 3221225472 TempDownSW_Dr "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TempUpSW_PASS "-"; +BA_ "Neutral Value" SG_ 3221225472 TempUpSW_PASS "-"; +BA_ "Invalid Value" SG_ 3221225472 TempUpSW_PASS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEMPDOWNSWITCH_PASS "-"; +BA_ "Neutral Value" SG_ 3221225472 TEMPDOWNSWITCH_PASS "-"; +BA_ "Invalid Value" SG_ 3221225472 TEMPDOWNSWITCH_PASS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DUALSWITCH "-"; +BA_ "Neutral Value" SG_ 3221225472 DUALSWITCH "-"; +BA_ "Invalid Value" SG_ 3221225472 DUALSWITCH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMPRESSORSWITCH "-"; +BA_ "Neutral Value" SG_ 3221225472 COMPRESSORSWITCH "-"; +BA_ "Invalid Value" SG_ 3221225472 COMPRESSORSWITCH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECONOMYSWITCH "-"; +BA_ "Neutral Value" SG_ 3221225472 ECONOMYSWITCH "-"; +BA_ "Invalid Value" SG_ 3221225472 ECONOMYSWITCH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_OffSW "-"; +BA_ "Neutral Value" SG_ 3221225472 AC_OffSW "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_OffSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrDefSW "-"; +BA_ "Neutral Value" SG_ 3221225472 RrDefSW "-"; +BA_ "Invalid Value" SG_ 3221225472 RrDefSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VoiceRecognitionExeuting "-"; +BA_ "Neutral Value" SG_ 3221225472 VoiceRecognitionExeuting "-"; +BA_ "Invalid Value" SG_ 3221225472 VoiceRecognitionExeuting "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IntakeSwitch "-"; +BA_ "Neutral Value" SG_ 3221225472 IntakeSwitch "-"; +BA_ "Invalid Value" SG_ 3221225472 IntakeSwitch "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IntakeSW_LongPush "-"; +BA_ "Neutral Value" SG_ 3221225472 IntakeSW_LongPush "-"; +BA_ "Invalid Value" SG_ 3221225472 IntakeSW_LongPush "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FRE_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 FRE_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 FRE_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FRE_SW_LongPush "-"; +BA_ "Neutral Value" SG_ 3221225472 FRE_SW_LongPush "-"; +BA_ "Invalid Value" SG_ 3221225472 FRE_SW_LongPush "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REC_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 REC_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 REC_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REC_SW_LongPush "-"; +BA_ "Neutral Value" SG_ 3221225472 REC_SW_LongPush "-"; +BA_ "Invalid Value" SG_ 3221225472 REC_SW_LongPush "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UpperVentAutoSW "-"; +BA_ "Neutral Value" SG_ 3221225472 UpperVentAutoSW "-"; +BA_ "Invalid Value" SG_ 3221225472 UpperVentAutoSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UpperVentOpenCloseSW "-"; +BA_ "Neutral Value" SG_ 3221225472 UpperVentOpenCloseSW "-"; +BA_ "Invalid Value" SG_ 3221225472 UpperVentOpenCloseSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRVENTSWITCH_DR "-"; +BA_ "Neutral Value" SG_ 3221225472 AIRVENTSWITCH_DR "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRVENTSWITCH_DR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRVENTSWITCH_PASS "-"; +BA_ "Neutral Value" SG_ 3221225472 AIRVENTSWITCH_PASS "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRVENTSWITCH_PASS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRVENTDOWNSWITCH_DR "-"; +BA_ "Neutral Value" SG_ 3221225472 AIRVENTDOWNSWITCH_DR "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRVENTDOWNSWITCH_DR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRVENTDOWNSWITCH_PASS "-"; +BA_ "Neutral Value" SG_ 3221225472 AIRVENTDOWNSWITCH_PASS "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRVENTDOWNSWITCH_PASS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DEFROSTERSWITCH "-"; +BA_ "Neutral Value" SG_ 3221225472 DEFROSTERSWITCH "-"; +BA_ "Invalid Value" SG_ 3221225472 DEFROSTERSWITCH "-"; +BA_ "Invalid Value" SG_ 3221225472 ST_HEAT_AUTO_SET "-"; +BA_ "Neutral Value" SG_ 3221225472 ST_HEAT_AUTO_SET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ST_HEAT_AUTO_SET "-"; +BA_ "Invalid Value" SG_ 3221225472 IDLSTP_HVAC_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 IDLSTP_HVAC_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDLSTP_HVAC_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_SWLONG "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_SWLONG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_SWLONG "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_OFFSW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_OFFSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_OFFSW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_MIDSW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_MIDSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_MIDSW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_LOSW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_LOSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_LOSW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_HISW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_HISW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_HISW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_AUTUP "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_AUTUP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_AUTUP "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_AUTOSW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_AUTOSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_AUTOSW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_DR_AUTDN "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_DR_AUTDN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_DR_AUTDN "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_SWLONG "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_SWLONG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_SWLONG "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_OFFSW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_OFFSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_OFFSW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_MIDSW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_MIDSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_MIDSW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_LOSW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_LOSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_LOSW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_HISW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_HISW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_HISW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_AUTUP "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_AUTUP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_AUTUP "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_AUTOSW "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_AUTOSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_AUTOSW "-"; +BA_ "Invalid Value" SG_ 3221225472 S_HEAT_AS_AUTDN "-"; +BA_ "Neutral Value" SG_ 3221225472 S_HEAT_AS_AUTDN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_HEAT_AS_AUTDN "-"; +BA_ "Invalid Value" SG_ 3221225472 ST_HEATER_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 ST_HEATER_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ST_HEATER_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EV_HEATER_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 EV_HEATER_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 EV_HEATER_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_OperationType "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_OperationType "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_OperationType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_TempOpeTyp "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_TempOpeTyp "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_TempOpeTyp "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_VentOperationType "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_VentOperationType "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_VentOperationType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrVentOperationType "-"; +BA_ "Neutral Value" SG_ 3221225472 RrVentOperationType "-"; +BA_ "Invalid Value" SG_ 3221225472 RrVentOperationType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAC_FanSpeedOperationType "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAC_FanSpeedOperationType "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAC_FanSpeedOperationType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RrAirPurifierOperationType "-"; +BA_ "Neutral Value" SG_ 3221225472 RrAirPurifierOperationType "-"; +BA_ "Invalid Value" SG_ 3221225472 RrAirPurifierOperationType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OffSwType "-"; +BA_ "Neutral Value" SG_ 3221225472 OffSwType "-"; +BA_ "Invalid Value" SG_ 3221225472 OffSwType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FanSpeedOperationType "-"; +BA_ "Neutral Value" SG_ 3221225472 FanSpeedOperationType "-"; +BA_ "Invalid Value" SG_ 3221225472 FanSpeedOperationType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CompressorOperationType "-"; +BA_ "Neutral Value" SG_ 3221225472 CompressorOperationType "-"; +BA_ "Invalid Value" SG_ 3221225472 CompressorOperationType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IntakeOperationType "-"; +BA_ "Neutral Value" SG_ 3221225472 IntakeOperationType "-"; +BA_ "Invalid Value" SG_ 3221225472 IntakeOperationType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AirQualitySensOperationType "-"; +BA_ "Neutral Value" SG_ 3221225472 AirQualitySensOperationType "-"; +BA_ "Invalid Value" SG_ 3221225472 AirQualitySensOperationType "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INITIALISING_BIT "1b"; +BA_ "Neutral Value" SG_ 3221225472 INITIALISING_BIT "-"; +BA_ "Invalid Value" SG_ 3221225472 INITIALISING_BIT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TempOperationType_Dr "-"; +BA_ "Neutral Value" SG_ 3221225472 TempOperationType_Dr "-"; +BA_ "Invalid Value" SG_ 3221225472 TempOperationType_Dr "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TempOperationType_Pass "-"; +BA_ "Neutral Value" SG_ 3221225472 TempOperationType_Pass "-"; +BA_ "Invalid Value" SG_ 3221225472 TempOperationType_Pass "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VentOperationType_Dr "-"; +BA_ "Neutral Value" SG_ 3221225472 VentOperationType_Dr "-"; +BA_ "Invalid Value" SG_ 3221225472 VentOperationType_Dr "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VentOperationType_Pass "-"; +BA_ "Neutral Value" SG_ 3221225472 VentOperationType_Pass "-"; +BA_ "Invalid Value" SG_ 3221225472 VentOperationType_Pass "-"; +BA_ "Invalid Value" SG_ 3221225472 REG_PWR "-"; +BA_ "Neutral Value" SG_ 3221225472 REG_PWR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REG_PWR "00h"; +BA_ "Invalid Value" SG_ 3221225472 E_FLOW5 "-"; +BA_ "Neutral Value" SG_ 3221225472 E_FLOW5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 E_FLOW5 "010b"; +BA_ "Invalid Value" SG_ 3221225472 E_FLOW6 "-"; +BA_ "Neutral Value" SG_ 3221225472 E_FLOW6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 E_FLOW6 "10b"; +BA_ "Invalid Value" SG_ 3221225472 AWD_FLAG "-"; +BA_ "Neutral Value" SG_ 3221225472 AWD_FLAG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AWD_FLAG "0b"; +BA_ "Invalid Value" SG_ 3221225472 E_FLOW3 "-"; +BA_ "Neutral Value" SG_ 3221225472 E_FLOW3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 E_FLOW3 "010b"; +BA_ "Invalid Value" SG_ 3221225472 E_FLOW4 "-"; +BA_ "Neutral Value" SG_ 3221225472 E_FLOW4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 E_FLOW4 "010b"; +BA_ "Invalid Value" SG_ 3221225472 TIRE_ROT "-"; +BA_ "Neutral Value" SG_ 3221225472 TIRE_ROT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIRE_ROT "00b"; +BA_ "Invalid Value" SG_ 3221225472 E_FLOW1 "-"; +BA_ "Neutral Value" SG_ 3221225472 E_FLOW1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 E_FLOW1 "010b"; +BA_ "Invalid Value" SG_ 3221225472 E_FLOW2 "-"; +BA_ "Neutral Value" SG_ 3221225472 E_FLOW2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 E_FLOW2 "010b"; +BA_ "Invalid Value" SG_ 3221225472 G_SPRS "-"; +BA_ "Neutral Value" SG_ 3221225472 G_SPRS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_SPRS "0000h"; +BA_ "Invalid Value" SG_ 3221225472 G_INL "-"; +BA_ "Neutral Value" SG_ 3221225472 G_INL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_INL "00h"; +BA_ "Invalid Value" SG_ 3221225472 G_AWP "-"; +BA_ "Neutral Value" SG_ 3221225472 G_AWP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_AWP "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_AINV "-"; +BA_ "Neutral Value" SG_ 3221225472 G_AINV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_AINV "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_STBO "-"; +BA_ "Neutral Value" SG_ 3221225472 G_STBO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_STBO "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_STBS "-"; +BA_ "Neutral Value" SG_ 3221225472 G_STBS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_STBS "0b"; +BA_ "Invalid Value" SG_ 3221225472 AFSACT "-"; +BA_ "Neutral Value" SG_ 3221225472 AFSACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AFSACT "0b"; +BA_ "Invalid Value" SG_ 3221225472 AFSFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 AFSFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AFSFAIL "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 OB_VREL "-"; +BA_ "Neutral Value" SG_ 3221225472 OB_VREL "-"; +BA_ "Invalid Value" SG_ 3221225472 OB_VREL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OB_ABST_U "-"; +BA_ "Neutral Value" SG_ 3221225472 OB_ABST_U "-"; +BA_ "Invalid Value" SG_ 3221225472 OB_ABST_U "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OB_ABST_L "-"; +BA_ "Neutral Value" SG_ 3221225472 OB_ABST_L "-"; +BA_ "Invalid Value" SG_ 3221225472 OB_ABST_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fLA_ACT "-"; +BA_ "Neutral Value" SG_ 3221225472 fLA_ACT "-"; +BA_ "Invalid Value" SG_ 3221225472 fLA_ACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS2_flag_truuble "0b"; +BA_ "Neutral Value" SG_ 3221225472 PBS2_flag_truuble "-"; +BA_ "Invalid Value" SG_ 3221225472 PBS2_flag_truuble "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Pressure_trouble "0b"; +BA_ "Neutral Value" SG_ 3221225472 Pressure_trouble "-"; +BA_ "Invalid Value" SG_ 3221225472 Pressure_trouble "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Power_supply2 "0b"; +BA_ "Neutral Value" SG_ 3221225472 Power_supply2 "-"; +BA_ "Invalid Value" SG_ 3221225472 Power_supply2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Power_supply1 "0b"; +BA_ "Neutral Value" SG_ 3221225472 Power_supply1 "-"; +BA_ "Invalid Value" SG_ 3221225472 Power_supply1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAN_trouble "0b"; +BA_ "Neutral Value" SG_ 3221225472 CAN_trouble "-"; +BA_ "Invalid Value" SG_ 3221225472 CAN_trouble "-"; +BA_ "FirstFrameValue" SG_ 3221225472 booster_truoble "0b"; +BA_ "Neutral Value" SG_ 3221225472 booster_truoble "-"; +BA_ "Invalid Value" SG_ 3221225472 booster_truoble "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Release_sw_trouble "0b"; +BA_ "Neutral Value" SG_ 3221225472 Release_sw_trouble "-"; +BA_ "Invalid Value" SG_ 3221225472 Release_sw_trouble "-"; +BA_ "FirstFrameValue" SG_ 3221225472 pressure_sen_trouble "0b"; +BA_ "Neutral Value" SG_ 3221225472 pressure_sen_trouble "-"; +BA_ "Invalid Value" SG_ 3221225472 pressure_sen_trouble "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BCU_trouble "0b"; +BA_ "Neutral Value" SG_ 3221225472 BCU_trouble "-"; +BA_ "Invalid Value" SG_ 3221225472 BCU_trouble "-"; +BA_ "FirstFrameValue" SG_ 3221225472 solenoid_voltage "00h"; +BA_ "Neutral Value" SG_ 3221225472 solenoid_voltage "00h"; +BA_ "Invalid Value" SG_ 3221225472 solenoid_voltage "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PWN_ratio "00h"; +BA_ "Neutral Value" SG_ 3221225472 PWN_ratio "00h"; +BA_ "Invalid Value" SG_ 3221225472 PWN_ratio "-"; +BA_ "FirstFrameValue" SG_ 3221225472 solenoid_current "00h"; +BA_ "Neutral Value" SG_ 3221225472 solenoid_current "00h"; +BA_ "Invalid Value" SG_ 3221225472 solenoid_current "-"; +BA_ "FirstFrameValue" SG_ 3221225472 third_ND2 "00h"; +BA_ "Neutral Value" SG_ 3221225472 third_ND2 "-"; +BA_ "Invalid Value" SG_ 3221225472 third_ND2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 second_ND2 "00h"; +BA_ "Neutral Value" SG_ 3221225472 second_ND2 "-"; +BA_ "Invalid Value" SG_ 3221225472 second_ND2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 first_ND2 "00h"; +BA_ "Neutral Value" SG_ 3221225472 first_ND2 "-"; +BA_ "Invalid Value" SG_ 3221225472 first_ND2 "-"; +BA_ "Invalid Value" SG_ 3221225472 TAIL_L_REQ_DOP "-"; +BA_ "Neutral Value" SG_ 3221225472 TAIL_L_REQ_DOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TAIL_L_REQ_DOP "0b"; +BA_ "Invalid Value" SG_ 3221225472 HL_LOW_REQ_DOP "-"; +BA_ "Neutral Value" SG_ 3221225472 HL_LOW_REQ_DOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HL_LOW_REQ_DOP "0b"; +BA_ "Invalid Value" SG_ 3221225472 HAZARD_REQ_DOP "-"; +BA_ "Neutral Value" SG_ 3221225472 HAZARD_REQ_DOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HAZARD_REQ_DOP "0b"; +BA_ "Invalid Value" SG_ 3221225472 EST_RR_DEF_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 EST_RR_DEF_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EST_RR_DEF_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 DATA1_EST "-"; +BA_ "Neutral Value" SG_ 3221225472 DATA1_EST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATA1_EST "Confidential"; +BA_ "Invalid Value" SG_ 3221225472 DATA0_EST "-"; +BA_ "Neutral Value" SG_ 3221225472 DATA0_EST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATA0_EST "Confidential"; +BA_ "Invalid Value" SG_ 3221225472 COMM2_EST "-"; +BA_ "Neutral Value" SG_ 3221225472 COMM2_EST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMM2_EST "Confidential"; +BA_ "Invalid Value" SG_ 3221225472 COMM1_EST "-"; +BA_ "Neutral Value" SG_ 3221225472 COMM1_EST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMM1_EST "Confidential"; +BA_ "Invalid Value" SG_ 3221225472 LOCK_UNLOK_REQ_DOP "-"; +BA_ "Neutral Value" SG_ 3221225472 LOCK_UNLOK_REQ_DOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LOCK_UNLOK_REQ_DOP "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 DATA1_BCM "confidential"; +BA_ "Neutral Value" SG_ 3221225472 DATA1_BCM "-"; +BA_ "Invalid Value" SG_ 3221225472 DATA1_BCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATA0_BCM "confidential"; +BA_ "Neutral Value" SG_ 3221225472 DATA0_BCM "-"; +BA_ "Invalid Value" SG_ 3221225472 DATA0_BCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMM2_BCM "confidential"; +BA_ "Neutral Value" SG_ 3221225472 COMM2_BCM "-"; +BA_ "Invalid Value" SG_ 3221225472 COMM2_BCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMM1_BCM "confidential"; +BA_ "Neutral Value" SG_ 3221225472 COMM1_BCM "-"; +BA_ "Invalid Value" SG_ 3221225472 COMM1_BCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATA1_ECM "-"; +BA_ "Neutral Value" SG_ 3221225472 DATA1_ECM "-"; +BA_ "Invalid Value" SG_ 3221225472 DATA1_ECM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATA0_ECM "-"; +BA_ "Neutral Value" SG_ 3221225472 DATA0_ECM "-"; +BA_ "Invalid Value" SG_ 3221225472 DATA0_ECM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SID_ECM "20h"; +BA_ "Neutral Value" SG_ 3221225472 SID_ECM "-"; +BA_ "Invalid Value" SG_ 3221225472 SID_ECM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FMT_ECM "03h"; +BA_ "Neutral Value" SG_ 3221225472 FMT_ECM "-"; +BA_ "Invalid Value" SG_ 3221225472 FMT_ECM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LOCK_REQ "confidential"; +BA_ "Neutral Value" SG_ 3221225472 LOCK_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 LOCK_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SL_REQ "confidential"; +BA_ "Neutral Value" SG_ 3221225472 SL_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SL_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CENTER "-"; +BA_ "Neutral Value" SG_ 3221225472 CENTER "-"; +BA_ "Invalid Value" SG_ 3221225472 CENTER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUTIN_L "-"; +BA_ "Neutral Value" SG_ 3221225472 CUTIN_L "-"; +BA_ "Invalid Value" SG_ 3221225472 CUTIN_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUTIN_R "-"; +BA_ "Neutral Value" SG_ 3221225472 CUTIN_R "-"; +BA_ "Invalid Value" SG_ 3221225472 CUTIN_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUPPORT_L "-"; +BA_ "Neutral Value" SG_ 3221225472 SUPPORT_L "-"; +BA_ "Invalid Value" SG_ 3221225472 SUPPORT_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SUPPORT_R "-"; +BA_ "Neutral Value" SG_ 3221225472 SUPPORT_R "-"; +BA_ "Invalid Value" SG_ 3221225472 SUPPORT_R "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CURV "-"; +BA_ "Neutral Value" SG_ 3221225472 CURV "-"; +BA_ "Invalid Value" SG_ 3221225472 CURV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RAD_ST2 "-"; +BA_ "Neutral Value" SG_ 3221225472 RAD_ST2 "-"; +BA_ "Invalid Value" SG_ 3221225472 RAD_ST2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RAD_ST3 "-"; +BA_ "Neutral Value" SG_ 3221225472 RAD_ST3 "-"; +BA_ "Invalid Value" SG_ 3221225472 RAD_ST3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RAD_ST4 "-"; +BA_ "Neutral Value" SG_ 3221225472 RAD_ST4 "-"; +BA_ "Invalid Value" SG_ 3221225472 RAD_ST4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Z_VRES "-"; +BA_ "Neutral Value" SG_ 3221225472 Z_VRES "-"; +BA_ "Invalid Value" SG_ 3221225472 Z_VRES "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Z_ABST "-"; +BA_ "Neutral Value" SG_ 3221225472 Z_ABST "-"; +BA_ "Invalid Value" SG_ 3221225472 Z_ABST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFBD_DT7 "-"; +BA_ "Neutral Value" SG_ 3221225472 OFBD_DT7 "-"; +BA_ "Invalid Value" SG_ 3221225472 OFBD_DT7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFBD_DT6 "-"; +BA_ "Neutral Value" SG_ 3221225472 OFBD_DT6 "-"; +BA_ "Invalid Value" SG_ 3221225472 OFBD_DT6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFBD_DT5 "-"; +BA_ "Neutral Value" SG_ 3221225472 OFBD_DT5 "-"; +BA_ "Invalid Value" SG_ 3221225472 OFBD_DT5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFBD_DT4 "-"; +BA_ "Neutral Value" SG_ 3221225472 OFBD_DT4 "-"; +BA_ "Invalid Value" SG_ 3221225472 OFBD_DT4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFBD_DT3 "-"; +BA_ "Neutral Value" SG_ 3221225472 OFBD_DT3 "-"; +BA_ "Invalid Value" SG_ 3221225472 OFBD_DT3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFBD_DT2 "-"; +BA_ "Neutral Value" SG_ 3221225472 OFBD_DT2 "-"; +BA_ "Invalid Value" SG_ 3221225472 OFBD_DT2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFBD_DT1 "-"; +BA_ "Neutral Value" SG_ 3221225472 OFBD_DT1 "-"; +BA_ "Invalid Value" SG_ 3221225472 OFBD_DT1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECM_NUM "-"; +BA_ "Neutral Value" SG_ 3221225472 ECM_NUM "-"; +BA_ "Invalid Value" SG_ 3221225472 ECM_NUM "-"; +BA_ "Invalid Value" SG_ 3221225472 OFBD_DG2 "-"; +BA_ "Neutral Value" SG_ 3221225472 OFBD_DG2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFBD_DG2 "-"; +BA_ "Invalid Value" SG_ 3221225472 OFBD_DG1 "-"; +BA_ "Neutral Value" SG_ 3221225472 OFBD_DG1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFBD_DG1 "-"; +BA_ "Invalid Value" SG_ 3221225472 ECU_NUM "-"; +BA_ "Neutral Value" SG_ 3221225472 ECU_NUM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECU_NUM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PN_second "-"; +BA_ "Neutral Value" SG_ 3221225472 PN_second "-"; +BA_ "Invalid Value" SG_ 3221225472 PN_second "-"; +BA_ "Invalid Value" SG_ 3221225472 IDLE_UP_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 IDLE_UP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDLE_UP_REQ "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 NAVISHIFTINDREQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 NAVISHIFTINDREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 NAVISHIFTINDREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TOWMODEREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TOWMODEREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TOWMODEREQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 Eco_Navi_Status "-"; +BA_ "Neutral Value" SG_ 3221225472 Eco_Navi_Status "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Eco_Navi_Status "0b"; +BA_ "Invalid Value" SG_ 3221225472 Eco_mode_Status "-"; +BA_ "Neutral Value" SG_ 3221225472 Eco_mode_Status "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 Eco_mode_Status "0b"; +BA_ "Invalid Value" SG_ 3221225472 GS_REFUSE_BZ "-"; +BA_ "Neutral Value" SG_ 3221225472 GS_REFUSE_BZ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GS_REFUSE_BZ "0h"; +BA_ "Invalid Value" SG_ 3221225472 ENGINE_START_INHIBIT "-"; +BA_ "Neutral Value" SG_ 3221225472 ENGINE_START_INHIBIT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENGINE_START_INHIBIT "0h"; +BA_ "Invalid Value" SG_ 3221225472 ECO_MODE_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_MODE_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_MODE_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 SNOW_MODE_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SNOW_MODE_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOW_MODE_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 OPEN_DOOR "-"; +BA_ "Neutral Value" SG_ 3221225472 OPEN_DOOR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OPEN_DOOR "0b"; +BA_ "Invalid Value" SG_ 3221225472 ROBOTIZED_GTP "-"; +BA_ "Neutral Value" SG_ 3221225472 ROBOTIZED_GTP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ROBOTIZED_GTP "0b"; +BA_ "Invalid Value" SG_ 3221225472 RGB_PBP_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 RGB_PBP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RGB_PBP_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 RGB_GP_REFUSE "-"; +BA_ "Neutral Value" SG_ 3221225472 RGB_GP_REFUSE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RGB_GP_REFUSE "0b"; +BA_ "Invalid Value" SG_ 3221225472 RESET_INF "-"; +BA_ "Neutral Value" SG_ 3221225472 RESET_INF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RESET_INF "algorithm +ready"; +BA_ "Invalid Value" SG_ 3221225472 TM_TYPE "-"; +BA_ "Neutral Value" SG_ 3221225472 TM_TYPE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TM_TYPE "-"; +BA_ "Invalid Value" SG_ 3221225472 ATLAMP_INDSSIG_CVTLAMPSIG "- +IK : 0b "; +BA_ "Neutral Value" SG_ 3221225472 ATLAMP_INDSSIG_CVTLAMPSIG "- +IK : 0b "; +BA_ "FirstFrameValue" SG_ 3221225472 ATLAMP_INDSSIG_CVTLAMPSIG "AT: 1h +CVT: 0h"; +BA_ "Invalid Value" SG_ 3221225472 ATHITEMP "-"; +BA_ "Neutral Value" SG_ 3221225472 ATHITEMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATHITEMP "0b"; +BA_ "Invalid Value" SG_ 3221225472 ODCLAMP_INDSSIG "- +IK : 0b "; +BA_ "Neutral Value" SG_ 3221225472 ODCLAMP_INDSSIG "- +IK : 0b "; +BA_ "FirstFrameValue" SG_ 3221225472 ODCLAMP_INDSSIG "DX: 1b +other: 0b"; +BA_ "Invalid Value" SG_ 3221225472 REG_STATUS "-"; +BA_ "Neutral Value" SG_ 3221225472 REG_STATUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REG_STATUS "-"; +BA_ "Invalid Value" SG_ 3221225472 TPMS_HORN_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TPMS_HORN_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TPMS_HORN_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TPMS_HAZARD_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TPMS_HAZARD_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TPMS_HAZARD_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TPMS_BZ_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TPMS_BZ_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TPMS_BZ_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SYSTEM_FAIL_TPMS "-"; +BA_ "Neutral Value" SG_ 3221225472 SYSTEM_FAIL_TPMS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SYSTEM_FAIL_TPMS "-"; +BA_ "Invalid Value" SG_ 3221225472 HAZARD_REQ_TPMS "-"; +BA_ "Neutral Value" SG_ 3221225472 HAZARD_REQ_TPMS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HAZARD_REQ_TPMS "-"; +BA_ "Invalid Value" SG_ 3221225472 TS_FR "-"; +BA_ "Neutral Value" SG_ 3221225472 TS_FR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TS_FR "-"; +BA_ "Invalid Value" SG_ 3221225472 TS_FL "-"; +BA_ "Neutral Value" SG_ 3221225472 TS_FL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TS_FL "-"; +BA_ "Invalid Value" SG_ 3221225472 TS_RR "-"; +BA_ "Neutral Value" SG_ 3221225472 TS_RR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TS_RR "-"; +BA_ "Invalid Value" SG_ 3221225472 TS_RL "-"; +BA_ "Neutral Value" SG_ 3221225472 TS_RL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TS_RL "-"; +BA_ "Invalid Value" SG_ 3221225472 TPD_RL "-"; +BA_ "Neutral Value" SG_ 3221225472 TPD_RL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TPD_RL "-"; +BA_ "Invalid Value" SG_ 3221225472 TPD_RR "-"; +BA_ "Neutral Value" SG_ 3221225472 TPD_RR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TPD_RR "-"; +BA_ "Invalid Value" SG_ 3221225472 TPD_FL "-"; +BA_ "Neutral Value" SG_ 3221225472 TPD_FL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TPD_FL "-"; +BA_ "Invalid Value" SG_ 3221225472 TPD_FR "-"; +BA_ "Neutral Value" SG_ 3221225472 TPD_FR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TPD_FR "-"; +BA_ "Invalid Value" SG_ 3221225472 FT_FR "-"; +BA_ "Neutral Value" SG_ 3221225472 FT_FR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FT_FR "-"; +BA_ "Invalid Value" SG_ 3221225472 FT_FL "-"; +BA_ "Neutral Value" SG_ 3221225472 FT_FL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FT_FL "-"; +BA_ "Invalid Value" SG_ 3221225472 FT_RR "-"; +BA_ "Neutral Value" SG_ 3221225472 FT_RR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FT_RR "-"; +BA_ "Invalid Value" SG_ 3221225472 FT_RL "-"; +BA_ "Neutral Value" SG_ 3221225472 FT_RL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FT_RL "-"; +BA_ "Invalid Value" SG_ 3221225472 LTP_FR "-"; +BA_ "Neutral Value" SG_ 3221225472 LTP_FR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LTP_FR "-"; +BA_ "Invalid Value" SG_ 3221225472 LTP_FL "-"; +BA_ "Neutral Value" SG_ 3221225472 LTP_FL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LTP_FL "-"; +BA_ "Invalid Value" SG_ 3221225472 LTP_RR "-"; +BA_ "Neutral Value" SG_ 3221225472 LTP_RR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LTP_RR "-"; +BA_ "Invalid Value" SG_ 3221225472 LTP_RL "-"; +BA_ "Neutral Value" SG_ 3221225472 LTP_RL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LTP_RL "-"; +BA_ "Invalid Value" SG_ 3221225472 TIRE_FAIL_or_W_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TIRE_FAIL_or_W_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIRE_FAIL_or_W_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 D_STYLE "-"; +BA_ "Neutral Value" SG_ 3221225472 D_STYLE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 D_STYLE "-"; +BA_ "Invalid Value" SG_ 3221225472 ENGINE_STOP "-"; +BA_ "Neutral Value" SG_ 3221225472 ENGINE_STOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENGINE_STOP "01010101b"; +BA_ "FirstFrameValue" SG_ 3221225472 REMOTE_AC_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 REMOTE_AC_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 REMOTE_AC_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PORT_OPEN_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 PORT_OPEN_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 PORT_OPEN_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CUTOFF_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 CUTOFF_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUTOFF_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IMMOBILIZER_FAILURE "-"; +BA_ "Neutral Value" SG_ 3221225472 IMMOBILIZER_FAILURE "-"; +BA_ "Invalid Value" SG_ 3221225472 IMMOBILIZER_FAILURE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CRANKING_AUTHORIZATION "0b"; +BA_ "Neutral Value" SG_ 3221225472 CRANKING_AUTHORIZATION "-"; +BA_ "Invalid Value" SG_ 3221225472 CRANKING_AUTHORIZATION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CLIMATE_COOLING "-"; +BA_ "Neutral Value" SG_ 3221225472 CLIMATE_COOLING "-"; +BA_ "Invalid Value" SG_ 3221225472 CLIMATE_COOLING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HARD_TOP_POSITION "-"; +BA_ "Neutral Value" SG_ 3221225472 HARD_TOP_POSITION "-"; +BA_ "Invalid Value" SG_ 3221225472 HARD_TOP_POSITION " 11b"; +BA_ "FirstFrameValue" SG_ 3221225472 KEYLESS_PUSH "0b"; +BA_ "Neutral Value" SG_ 3221225472 KEYLESS_PUSH "-"; +BA_ "Invalid Value" SG_ 3221225472 KEYLESS_PUSH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 KEY_KEYLESS "-"; +BA_ "Neutral Value" SG_ 3221225472 KEY_KEYLESS "-"; +BA_ "Invalid Value" SG_ 3221225472 KEY_KEYLESS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRAKE_PAD "-"; +BA_ "Neutral Value" SG_ 3221225472 BRAKE_PAD "-"; +BA_ "Invalid Value" SG_ 3221225472 BRAKE_PAD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUSTOMER_IDDLE_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CUSTOMER_IDDLE_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CUSTOMER_IDDLE_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHILDPROOF_LOCK "-"; +BA_ "Neutral Value" SG_ 3221225472 CHILDPROOF_LOCK "-"; +BA_ "Invalid Value" SG_ 3221225472 CHILDPROOF_LOCK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DAY_NIGHT_INF "-"; +BA_ "Neutral Value" SG_ 3221225472 DAY_NIGHT_INF "-"; +BA_ "Invalid Value" SG_ 3221225472 DAY_NIGHT_INF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_POW "0h"; +BA_ "Neutral Value" SG_ 3221225472 AT_POW "-"; +BA_ "Invalid Value" SG_ 3221225472 AT_POW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VHICLE_RUNNING "0h"; +BA_ "Neutral Value" SG_ 3221225472 VHICLE_RUNNING "-"; +BA_ "Invalid Value" SG_ 3221225472 VHICLE_RUNNING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CLUTCH_SW_MAX_TRAVEL "-"; +BA_ "Neutral Value" SG_ 3221225472 CLUTCH_SW_MAX_TRAVEL "-"; +BA_ "Invalid Value" SG_ 3221225472 CLUTCH_SW_MAX_TRAVEL " 11b"; +BA_ "FirstFrameValue" SG_ 3221225472 DELIVERY_INF "-"; +BA_ "Neutral Value" SG_ 3221225472 DELIVERY_INF "-"; +BA_ "Invalid Value" SG_ 3221225472 DELIVERY_INF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BLOWER "-"; +BA_ "Neutral Value" SG_ 3221225472 BLOWER "-"; +BA_ "Invalid Value" SG_ 3221225472 BLOWER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HL_WASH_SELECTION "0h"; +BA_ "Neutral Value" SG_ 3221225472 HL_WASH_SELECTION "-"; +BA_ "Invalid Value" SG_ 3221225472 HL_WASH_SELECTION "-"; +BA_ "Invalid Value" SG_ 3221225472 BCM_DONGLE_COM "-"; +BA_ "Neutral Value" SG_ 3221225472 BCM_DONGLE_COM "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 BCM_DONGLE_COM "00b"; +BA_ "Invalid Value" SG_ 3221225472 EL_POW_DRI "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 EL_POW_DRI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EL_POW_DRI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BCM_DONGLE_ID2 "0h"; +BA_ "Neutral Value" SG_ 3221225472 BCM_DONGLE_ID2 "-"; +BA_ "Invalid Value" SG_ 3221225472 BCM_DONGLE_ID2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HL_WASH_REQ "0h"; +BA_ "Neutral Value" SG_ 3221225472 HL_WASH_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 HL_WASH_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 BCM_DONGLE_ID1 "-"; +BA_ "Neutral Value" SG_ 3221225472 BCM_DONGLE_ID1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BCM_DONGLE_ID1 "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 BCM_WAKE_SLEEP_COM "11b"; +BA_ "Neutral Value" SG_ 3221225472 BCM_WAKE_SLEEP_COM "-"; +BA_ "Invalid Value" SG_ 3221225472 BCM_WAKE_SLEEP_COM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IGN_STATER "00b"; +BA_ "Neutral Value" SG_ 3221225472 IGN_STATER "-"; +BA_ "Invalid Value" SG_ 3221225472 IGN_STATER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALS_ACT "-"; +BA_ "Neutral Value" SG_ 3221225472 ALS_ACT "-"; +BA_ "Invalid Value" SG_ 3221225472 ALS_ACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALS_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 ALS_FAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 ALS_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_COMP_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 AC_COMP_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_COMP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RISE_UP_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 RISE_UP_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 RISE_UP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TURN_SW "00b"; +BA_ "Neutral Value" SG_ 3221225472 TURN_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 TURN_SW "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 H_POSITION "-"; +BA_ "Neutral Value" SG_ 3221225472 H_POSITION "-"; +BA_ "Invalid Value" SG_ 3221225472 H_POSITION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INHI_N_SW "NISSAN = 00b +RENAULT = 11b"; +BA_ "Neutral Value" SG_ 3221225472 INHI_N_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 INHI_N_SW " 11b"; +BA_ "FirstFrameValue" SG_ 3221225472 BCM_SMT_ID_INF "confidential"; +BA_ "Neutral Value" SG_ 3221225472 BCM_SMT_ID_INF "-"; +BA_ "Invalid Value" SG_ 3221225472 BCM_SMT_ID_INF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_SECODE_CLEAR "0b"; +BA_ "Neutral Value" SG_ 3221225472 S_SECODE_CLEAR "-"; +BA_ "Invalid Value" SG_ 3221225472 S_SECODE_CLEAR "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 SMART_SEC_OK "0b"; +BA_ "Neutral Value" SG_ 3221225472 SMART_SEC_OK "-"; +BA_ "Invalid Value" SG_ 3221225472 SMART_SEC_OK "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 CHALENGE_STAND "0b"; +BA_ "Neutral Value" SG_ 3221225472 CHALENGE_STAND "-"; +BA_ "Invalid Value" SG_ 3221225472 CHALENGE_STAND "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 RESPONSE_SMART "0b"; +BA_ "Neutral Value" SG_ 3221225472 RESPONSE_SMART "-"; +BA_ "Invalid Value" SG_ 3221225472 RESPONSE_SMART "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 CAL_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 CAL_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CAL_REQ "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 REG_INF "0b"; +BA_ "Neutral Value" SG_ 3221225472 REG_INF "-"; +BA_ "Invalid Value" SG_ 3221225472 REG_INF "0b"; +BA_ "Invalid Value" SG_ 3221225472 DR_AND_OTHER_DOORLOCK_INF "-"; +BA_ "Neutral Value" SG_ 3221225472 DR_AND_OTHER_DOORLOCK_INF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DR_AND_OTHER_DOORLOCK_INF "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 TPMS_W_L_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 TPMS_W_L_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TPMS_W_L_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RIGHT_PSD_MOVE_REVERSE "00b"; +BA_ "Neutral Value" SG_ 3221225472 RIGHT_PSD_MOVE_REVERSE "-"; +BA_ "Invalid Value" SG_ 3221225472 RIGHT_PSD_MOVE_REVERSE "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 LEFT_PSD_MOVE_REVERSE "00b"; +BA_ "Neutral Value" SG_ 3221225472 LEFT_PSD_MOVE_REVERSE "-"; +BA_ "Invalid Value" SG_ 3221225472 LEFT_PSD_MOVE_REVERSE "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 ALARM "0b"; +BA_ "Neutral Value" SG_ 3221225472 ALARM "-"; +BA_ "Invalid Value" SG_ 3221225472 ALARM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RAP "0b"; +BA_ "Neutral Value" SG_ 3221225472 RAP "-"; +BA_ "Invalid Value" SG_ 3221225472 RAP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ANTI_HIJACK "0b"; +BA_ "Neutral Value" SG_ 3221225472 ANTI_HIJACK "-"; +BA_ "Invalid Value" SG_ 3221225472 ANTI_HIJACK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 KEYLESS_DR_DOOR_UNLOCK "0b"; +BA_ "Neutral Value" SG_ 3221225472 KEYLESS_DR_DOOR_UNLOCK "-"; +BA_ "Invalid Value" SG_ 3221225472 KEYLESS_DR_DOOR_UNLOCK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GLASS_HATCH "0b"; +BA_ "Neutral Value" SG_ 3221225472 GLASS_HATCH "-"; +BA_ "Invalid Value" SG_ 3221225472 GLASS_HATCH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DR_DOOR_ACTR_INF "00b"; +BA_ "Neutral Value" SG_ 3221225472 DR_DOOR_ACTR_INF "-"; +BA_ "Invalid Value" SG_ 3221225472 DR_DOOR_ACTR_INF "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 OTHER_DOOR_ACTR_INF "00b"; +BA_ "Neutral Value" SG_ 3221225472 OTHER_DOOR_ACTR_INF "-"; +BA_ "Invalid Value" SG_ 3221225472 OTHER_DOOR_ACTR_INF "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 OPERATION_ACTR "0b"; +BA_ "Neutral Value" SG_ 3221225472 OPERATION_ACTR "-"; +BA_ "Invalid Value" SG_ 3221225472 OPERATION_ACTR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_TYPE "0b"; +BA_ "Neutral Value" SG_ 3221225472 AC_TYPE "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_TYPE "-"; +BA_ "Invalid Value" SG_ 3221225472 PTC_RLY "-"; +BA_ "Neutral Value" SG_ 3221225472 PTC_RLY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PTC_RLY "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 TRUNK_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 TRUNK_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 TRUNK_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CLUSTER_ILL_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 CLUSTER_ILL_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CLUSTER_ILL_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ABD_MOVE_REVERSE "-"; +BA_ "Neutral Value" SG_ 3221225472 ABD_MOVE_REVERSE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABD_MOVE_REVERSE "-"; +BA_ "Invalid Value" SG_ 3221225472 BACK_DOOR_LOCK_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 BACK_DOOR_LOCK_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BACK_DOOR_LOCK_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 TPMS_RFWL_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 TPMS_RFWL_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TPMS_RFWL_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ANTI_HORN_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 ANTI_HORN_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ANTI_HORN_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HORN_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 HORN_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 HORN_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CORN_L_REQ "11b"; +BA_ "Neutral Value" SG_ 3221225472 CORN_L_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CORN_L_REQ "00b"; +BA_ "Invalid Value" SG_ 3221225472 KEY_NO "110b,111b or -"; +BA_ "Neutral Value" SG_ 3221225472 KEY_NO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 KEY_NO "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 KeyinSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 KeyinSW "-"; +BA_ "Invalid Value" SG_ 3221225472 KeyinSW "-"; +BA_ "Invalid Value" SG_ 3221225472 VSP_REV_BUZZER "-"; +BA_ "Neutral Value" SG_ 3221225472 VSP_REV_BUZZER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VSP_REV_BUZZER "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 TSOC_MET "-"; +BA_ "Neutral Value" SG_ 3221225472 TSOC_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 TSOC_MET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OIL_CHANGE_RESET "-"; +BA_ "Neutral Value" SG_ 3221225472 OIL_CHANGE_RESET "-"; +BA_ "Invalid Value" SG_ 3221225472 OIL_CHANGE_RESET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VS_DISP "0000h"; +BA_ "Neutral Value" SG_ 3221225472 VS_DISP "-"; +BA_ "Invalid Value" SG_ 3221225472 VS_DISP "0000h"; +BA_ "FirstFrameValue" SG_ 3221225472 VSPID "-"; +BA_ "Neutral Value" SG_ 3221225472 VSPID "-"; +BA_ "Invalid Value" SG_ 3221225472 VSPID "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Disp_Unit "-"; +BA_ "Neutral Value" SG_ 3221225472 Disp_Unit "-"; +BA_ "Invalid Value" SG_ 3221225472 Disp_Unit "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ZKON1 "0b"; +BA_ "Neutral Value" SG_ 3221225472 ZKON1 "-"; +BA_ "Invalid Value" SG_ 3221225472 ZKON1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ZOKU1 "000b"; +BA_ "Neutral Value" SG_ 3221225472 ZOKU1 "-"; +BA_ "Invalid Value" SG_ 3221225472 ZOKU1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VSP40_MET "0000h"; +BA_ "Neutral Value" SG_ 3221225472 VSP40_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 VSP40_MET "0000h"; +BA_ "FirstFrameValue" SG_ 3221225472 ISBRK_STB "1b"; +BA_ "Neutral Value" SG_ 3221225472 ISBRK_STB "-"; +BA_ "Invalid Value" SG_ 3221225472 ISBRK_STB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WLOCK_STA "0b"; +BA_ "Neutral Value" SG_ 3221225472 WLOCK_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 WLOCK_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HDC_LAMP "10b"; +BA_ "Neutral Value" SG_ 3221225472 HDC_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 HDC_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EBS_LAMP "11b"; +BA_ "Neutral Value" SG_ 3221225472 EBS_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 EBS_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AUTO_CHECK_LMP "-"; +BA_ "Neutral Value" SG_ 3221225472 AUTO_CHECK_LMP "-"; +BA_ "Invalid Value" SG_ 3221225472 AUTO_CHECK_LMP "-"; +BA_ "Invalid Value" SG_ 3221225472 VSU_PRESENCE "-"; +BA_ "Neutral Value" SG_ 3221225472 VSU_PRESENCE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VSU_PRESENCE "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 STPLMSW "-"; +BA_ "Neutral Value" SG_ 3221225472 STPLMSW "-"; +BA_ "Invalid Value" SG_ 3221225472 STPLMSW "-"; +BA_ "Invalid Value" SG_ 3221225472 WARNING_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 WARNING_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARNING_REQ "01b"; +BA_ "Invalid Value" SG_ 3221225472 FILL_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 FILL_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FILL_STA "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 VSU_LAMP "00b"; +BA_ "Neutral Value" SG_ 3221225472 VSU_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 VSU_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGCNTRR "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGCNTRR "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGCNTRR "-"; +BA_ "Invalid Value" SG_ 3221225472 VDC_LAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 VDC_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VDC_LAMP "001b"; +BA_ "FirstFrameValue" SG_ 3221225472 ABS_LAMP "01b"; +BA_ "Neutral Value" SG_ 3221225472 ABS_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 ABS_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EBD_LAMP "01b"; +BA_ "Neutral Value" SG_ 3221225472 EBD_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 EBD_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RESETABS "0b"; +BA_ "Neutral Value" SG_ 3221225472 RESETABS "-"; +BA_ "Invalid Value" SG_ 3221225472 RESETABS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VSO "others: - +HITACHI: 0000h"; +BA_ "Neutral Value" SG_ 3221225472 VSO "-"; +BA_ "Invalid Value" SG_ 3221225472 VSO "FFFFh"; +BA_ "Invalid Value" SG_ 3221225472 KEY_WARNING_BUZZER "-"; +BA_ "Neutral Value" SG_ 3221225472 KEY_WARNING_BUZZER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 KEY_WARNING_BUZZER "-"; +BA_ "Invalid Value" SG_ 3221225472 WARNING_REQ_PIC "-"; +BA_ "Neutral Value" SG_ 3221225472 WARNING_REQ_PIC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARNING_REQ_PIC "-"; +BA_ "Invalid Value" SG_ 3221225472 RING_ILLUMI_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 RING_ILLUMI_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RING_ILLUMI_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PUSH_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 PUSH_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 PUSH_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AHL_HL_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 AHL_HL_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 AHL_HL_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 No_INFOR "000b,110b,111b or -"; +BA_ "Neutral Value" SG_ 3221225472 No_INFOR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 No_INFOR "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 IGNON_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 IGNON_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 IGNON_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STARTER_CONT_STA "0b"; +BA_ "Neutral Value" SG_ 3221225472 STARTER_CONT_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 STARTER_CONT_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INTERLOCK_NPSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 INTERLOCK_NPSW "-"; +BA_ "Invalid Value" SG_ 3221225472 INTERLOCK_NPSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INHIBIT_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 INHIBIT_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 INHIBIT_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ESCL_RELAY_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 ESCL_RELAY_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ESCL_RELAY_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IMMOBI_OK_FLAG_or_ESCL_STAUS "0b"; +BA_ "Neutral Value" SG_ 3221225472 IMMOBI_OK_FLAG_or_ESCL_STAUS "-"; +BA_ "Invalid Value" SG_ 3221225472 IMMOBI_OK_FLAG_or_ESCL_STAUS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IGNOFF_NOTIFICATION "0b"; +BA_ "Neutral Value" SG_ 3221225472 IGNOFF_NOTIFICATION "-"; +BA_ "Invalid Value" SG_ 3221225472 IGNOFF_NOTIFICATION "-"; +BA_ "Invalid Value" SG_ 3221225472 Auto_Door_Lock "-"; +BA_ "Neutral Value" SG_ 3221225472 Auto_Door_Lock "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Auto_Door_Lock "-"; +BA_ "Invalid Value" SG_ 3221225472 STOP_Indicator "-"; +BA_ "Neutral Value" SG_ 3221225472 STOP_Indicator "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STOP_Indicator "-"; +BA_ "Invalid Value" SG_ 3221225472 SERVICE_Indicator "-"; +BA_ "Neutral Value" SG_ 3221225472 SERVICE_Indicator "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SERVICE_Indicator "-"; +BA_ "Invalid Value" SG_ 3221225472 BRAKE_picture "-"; +BA_ "Neutral Value" SG_ 3221225472 BRAKE_picture "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRAKE_picture "-"; +BA_ "Invalid Value" SG_ 3221225472 WARNING_REQ_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 WARNING_REQ_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARNING_REQ_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 WARNING_REQ_BUZZER2 "-"; +BA_ "Neutral Value" SG_ 3221225472 WARNING_REQ_BUZZER2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARNING_REQ_BUZZER2 "-"; +BA_ "Invalid Value" SG_ 3221225472 WARNING_REQ_BUZZER1 "-"; +BA_ "Neutral Value" SG_ 3221225472 WARNING_REQ_BUZZER1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WARNING_REQ_BUZZER1 "-"; +BA_ "Invalid Value" SG_ 3221225472 LOCK_UNLOK_REQ "00b"; +BA_ "Neutral Value" SG_ 3221225472 LOCK_UNLOK_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LOCK_UNLOK_REQ "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 DATA1_SBCM "confidential"; +BA_ "Neutral Value" SG_ 3221225472 DATA1_SBCM "-"; +BA_ "Invalid Value" SG_ 3221225472 DATA1_SBCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DATA0_SBCM "confidential"; +BA_ "Neutral Value" SG_ 3221225472 DATA0_SBCM "-"; +BA_ "Invalid Value" SG_ 3221225472 DATA0_SBCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SID_SBCM "confidential"; +BA_ "Neutral Value" SG_ 3221225472 SID_SBCM "-"; +BA_ "Invalid Value" SG_ 3221225472 SID_SBCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FMT_SBCM "confidential"; +BA_ "Neutral Value" SG_ 3221225472 FMT_SBCM "-"; +BA_ "Invalid Value" SG_ 3221225472 FMT_SBCM "-"; +BA_ "Invalid Value" SG_ 3221225472 WAKEUP_REQ "10b,11b"; +BA_ "Neutral Value" SG_ 3221225472 WAKEUP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WAKEUP_REQ "00b"; +BA_ "Invalid Value" SG_ 3221225472 S_SLEEP_REQ "10b,11b"; +BA_ "Neutral Value" SG_ 3221225472 S_SLEEP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_SLEEP_REQ "00b"; +BA_ "Invalid Value" SG_ 3221225472 KEYFOB_BATT "-"; +BA_ "Neutral Value" SG_ 3221225472 KEYFOB_BATT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 KEYFOB_BATT "-"; +BA_ "Invalid Value" SG_ 3221225472 CHILD_LOCK "-"; +BA_ "Neutral Value" SG_ 3221225472 CHILD_LOCK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHILD_LOCK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS2_flag_truoble "0b"; +BA_ "Neutral Value" SG_ 3221225472 PBS2_flag_truoble "-"; +BA_ "Invalid Value" SG_ 3221225472 PBS2_flag_truoble "-"; +BA_ "FirstFrameValue" SG_ 3221225472 booster_yrouble "0b"; +BA_ "Neutral Value" SG_ 3221225472 booster_yrouble "-"; +BA_ "Invalid Value" SG_ 3221225472 booster_yrouble "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Release_sen_trouble "0b"; +BA_ "Neutral Value" SG_ 3221225472 Release_sen_trouble "-"; +BA_ "Invalid Value" SG_ 3221225472 Release_sen_trouble "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PWM_ratio "00h"; +BA_ "Neutral Value" SG_ 3221225472 PWM_ratio "00h"; +BA_ "Invalid Value" SG_ 3221225472 PWM_ratio "-"; +BA_ "Invalid Value" SG_ 3221225472 EPSTQONT "-"; +BA_ "Neutral Value" SG_ 3221225472 EPSTQONT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EPSTQONT "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 ISS_INHIBIT_EPS "0b"; +BA_ "Neutral Value" SG_ 3221225472 ISS_INHIBIT_EPS "-"; +BA_ "Invalid Value" SG_ 3221225472 ISS_INHIBIT_EPS "-"; +BA_ "Invalid Value" SG_ 3221225472 EPSTQON "-"; +BA_ "Neutral Value" SG_ 3221225472 EPSTQON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EPSTQON "0b"; +BA_ "Invalid Value" SG_ 3221225472 BATTERY_CURRENT "- , SBW: I = FFh"; +BA_ "Neutral Value" SG_ 3221225472 BATTERY_CURRENT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BATTERY_CURRENT "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 B_Circuit_ST "-"; +BA_ "Neutral Value" SG_ 3221225472 B_Circuit_ST "-"; +BA_ "Invalid Value" SG_ 3221225472 B_Circuit_ST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SportMode_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 SportMode_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 SportMode_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRANS_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 TRANS_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 TRANS_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Eco_mode_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 Eco_mode_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 Eco_mode_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DTE "-"; +BA_ "Neutral Value" SG_ 3221225472 DTE "-"; +BA_ "Invalid Value" SG_ 3221225472 DTE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVE_ECO "-"; +BA_ "Neutral Value" SG_ 3221225472 AVE_ECO "-"; +BA_ "Invalid Value" SG_ 3221225472 AVE_ECO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EconomyOffset "'- (NTC) +20h (NTCE)"; +BA_ "Neutral Value" SG_ 3221225472 EconomyOffset "-"; +BA_ "Invalid Value" SG_ 3221225472 EconomyOffset "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SYNCMODE "0b"; +BA_ "Neutral Value" SG_ 3221225472 SYNCMODE "-"; +BA_ "Invalid Value" SG_ 3221225472 SYNCMODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RNGSW1 "0b"; +BA_ "Neutral Value" SG_ 3221225472 RNGSW1 "-"; +BA_ "Invalid Value" SG_ 3221225472 RNGSW1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ODOFFSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 ODOFFSW "-"; +BA_ "Invalid Value" SG_ 3221225472 ODOFFSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRAKESW "0b"; +BA_ "Neutral Value" SG_ 3221225472 BRAKESW "-"; +BA_ "Invalid Value" SG_ 3221225472 BRAKESW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 POWSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 POWSW "-"; +BA_ "Invalid Value" SG_ 3221225472 POWSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCD4SW "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCD4SW "-"; +BA_ "Invalid Value" SG_ 3221225472 ASCD4SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDCSW "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDCSW "-"; +BA_ "Invalid Value" SG_ 3221225472 ASCDCSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RENSWN "0b"; +BA_ "Neutral Value" SG_ 3221225472 RENSWN "-"; +BA_ "Invalid Value" SG_ 3221225472 RENSWN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RENSWP "0b"; +BA_ "Neutral Value" SG_ 3221225472 RENSWP "-"; +BA_ "Invalid Value" SG_ 3221225472 RENSWP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRDWNSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 STRDWNSW "-"; +BA_ "Invalid Value" SG_ 3221225472 STRDWNSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRUPSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 STRUPSW "-"; +BA_ "Invalid Value" SG_ 3221225472 STRUPSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DOWNSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 DOWNSW "-"; +BA_ "Invalid Value" SG_ 3221225472 DOWNSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UPSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 UPSW "-"; +BA_ "Invalid Value" SG_ 3221225472 UPSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NOTMRNG "0b"; +BA_ "Neutral Value" SG_ 3221225472 NOTMRNG "-"; +BA_ "Invalid Value" SG_ 3221225472 NOTMRNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MRNG "0b"; +BA_ "Neutral Value" SG_ 3221225472 MRNG "-"; +BA_ "Invalid Value" SG_ 3221225472 MRNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABSVDC_ABSENT "-"; +BA_ "Neutral Value" SG_ 3221225472 ABSVDC_ABSENT "-"; +BA_ "Invalid Value" SG_ 3221225472 ABSVDC_ABSENT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AVE_FL "-"; +BA_ "Neutral Value" SG_ 3221225472 AVE_FL "-"; +BA_ "Invalid Value" SG_ 3221225472 AVE_FL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NAVING "0h"; +BA_ "Neutral Value" SG_ 3221225472 NAVING "-"; +BA_ "Invalid Value" SG_ 3221225472 NAVING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ZKREQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 ZKREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ZKREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RD_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 RD_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 RD_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RD_Detect_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 RD_Detect_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 RD_Detect_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FGAUGE "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 FGAUGE "-"; +BA_ "Invalid Value" SG_ 3221225472 FGAUGE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 L_4WD_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 L_4WD_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 L_4WD_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 S_REMINDER "0b"; +BA_ "Neutral Value" SG_ 3221225472 S_REMINDER "-"; +BA_ "Invalid Value" SG_ 3221225472 S_REMINDER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 H_LAMP_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 H_LAMP_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 H_LAMP_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MIL_CHECK "0b"; +BA_ "Neutral Value" SG_ 3221225472 MIL_CHECK "-"; +BA_ "Invalid Value" SG_ 3221225472 MIL_CHECK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 R_DEF_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 R_DEF_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 R_DEF_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 H_FAN_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 H_FAN_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 H_FAN_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TLED_STA "0b"; +BA_ "Neutral Value" SG_ 3221225472 TLED_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 TLED_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HTA_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 HTA_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 HTA_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 BATT_SOC "-"; +BA_ "Neutral Value" SG_ 3221225472 BATT_SOC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BATT_SOC "00h"; +BA_ "Invalid Value" SG_ 3221225472 G_RDY "-"; +BA_ "Neutral Value" SG_ 3221225472 G_RDY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_RDY "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 G_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_STA "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_CMH2 "-"; +BA_ "Neutral Value" SG_ 3221225472 G_CMH2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_CMH2 "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_CHAW "-"; +BA_ "Neutral Value" SG_ 3221225472 G_CHAW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_CHAW "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_CAU "-"; +BA_ "Neutral Value" SG_ 3221225472 G_CAU "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_CAU "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_CHMH "-"; +BA_ "Neutral Value" SG_ 3221225472 G_CHMH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_CHMH "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_MBLO "-"; +BA_ "Neutral Value" SG_ 3221225472 G_MBLO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_MBLO "0b"; +BA_ "Invalid Value" SG_ 3221225472 G_NDBW "-"; +BA_ "Neutral Value" SG_ 3221225472 G_NDBW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 G_NDBW "0b"; +BA_ "Invalid Value" SG_ 3221225472 CCSD "-"; +BA_ "Neutral Value" SG_ 3221225472 CCSD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CCSD "000b"; +BA_ "Invalid Value" SG_ 3221225472 EOFF_LAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 EOFF_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EOFF_LAMP "0b"; +BA_ "Invalid Value" SG_ 3221225472 HICAS_CHECK_SUM "-"; +BA_ "Neutral Value" SG_ 3221225472 HICAS_CHECK_SUM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HICAS_CHECK_SUM "-"; +BA_ "Invalid Value" SG_ 3221225472 HICASFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 HICASFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HICASFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 HICASMSG_PRUN "-"; +BA_ "Neutral Value" SG_ 3221225472 HICASMSG_PRUN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HICASMSG_PRUN "-"; +BA_ "Invalid Value" SG_ 3221225472 HICAS_RAS "-"; +BA_ "Neutral Value" SG_ 3221225472 HICAS_RAS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HICAS_RAS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHK_SUM "-"; +BA_ "Neutral Value" SG_ 3221225472 CHK_SUM "-"; +BA_ "Invalid Value" SG_ 3221225472 CHK_SUM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 release_sw "1b"; +BA_ "Neutral Value" SG_ 3221225472 release_sw "-"; +BA_ "Invalid Value" SG_ 3221225472 release_sw "-"; +BA_ "FirstFrameValue" SG_ 3221225472 flag_pressure_flag "0b"; +BA_ "Neutral Value" SG_ 3221225472 flag_pressure_flag "-"; +BA_ "Invalid Value" SG_ 3221225472 flag_pressure_flag "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECU_initialize "1b"; +BA_ "Neutral Value" SG_ 3221225472 ECU_initialize "-"; +BA_ "Invalid Value" SG_ 3221225472 ECU_initialize "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Brake_demande_prichibition "1b"; +BA_ "Neutral Value" SG_ 3221225472 Brake_demande_prichibition "-"; +BA_ "Invalid Value" SG_ 3221225472 Brake_demande_prichibition "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Booster_error "0b"; +BA_ "Neutral Value" SG_ 3221225472 Booster_error "-"; +BA_ "Invalid Value" SG_ 3221225472 Booster_error "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Pressure_order_callback "00h"; +BA_ "Neutral Value" SG_ 3221225472 Pressure_order_callback "00h"; +BA_ "Invalid Value" SG_ 3221225472 Pressure_order_callback "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Pressure "0000h"; +BA_ "Neutral Value" SG_ 3221225472 Pressure "-"; +BA_ "Invalid Value" SG_ 3221225472 Pressure "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACC_AND_INCHIG_RANGE "-"; +BA_ "Neutral Value" SG_ 3221225472 ACC_AND_INCHIG_RANGE "-"; +BA_ "Invalid Value" SG_ 3221225472 ACC_AND_INCHIG_RANGE "-"; +BA_ "Invalid Value" SG_ 3221225472 COP2_SET_FLG "-"; +BA_ "Neutral Value" SG_ 3221225472 COP2_SET_FLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COP2_SET_FLG "-"; +BA_ "Invalid Value" SG_ 3221225472 COP2_ADD_FLG "-"; +BA_ "Neutral Value" SG_ 3221225472 COP2_ADD_FLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COP2_ADD_FLG "-"; +BA_ "Invalid Value" SG_ 3221225472 NICC_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 NICC_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NICC_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 NICC_SET "-"; +BA_ "Neutral Value" SG_ 3221225472 NICC_SET "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NICC_SET "-"; +BA_ "Invalid Value" SG_ 3221225472 MB_TGT_FLS "-"; +BA_ "Neutral Value" SG_ 3221225472 MB_TGT_FLS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MB_TGT_FLS "-"; +BA_ "Invalid Value" SG_ 3221225472 MB_FLS "-"; +BA_ "Neutral Value" SG_ 3221225472 MB_FLS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MB_FLS "-"; +BA_ "Invalid Value" SG_ 3221225472 MB_TGT "-"; +BA_ "Neutral Value" SG_ 3221225472 MB_TGT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MB_TGT "-"; +BA_ "Invalid Value" SG_ 3221225472 MB_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 MB_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MB_IND "-"; +BA_ "Invalid Value" SG_ 3221225472 LOW_CUT "-"; +BA_ "Neutral Value" SG_ 3221225472 LOW_CUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LOW_CUT "-"; +BA_ "Invalid Value" SG_ 3221225472 SPEED_VALUE "-"; +BA_ "Neutral Value" SG_ 3221225472 SPEED_VALUE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SPEED_VALUE "-"; +BA_ "Invalid Value" SG_ 3221225472 ECD_FUNCTION "-"; +BA_ "Neutral Value" SG_ 3221225472 ECD_FUNCTION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECD_FUNCTION "0b"; +BA_ "Invalid Value" SG_ 3221225472 PBS_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 PBS_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 CONTROL_BYTE "-"; +BA_ "Neutral Value" SG_ 3221225472 CONTROL_BYTE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CONTROL_BYTE "-"; +BA_ "Invalid Value" SG_ 3221225472 GrMax_Rq_SBC "-"; +BA_ "Neutral Value" SG_ 3221225472 GrMax_Rq_SBC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GrMax_Rq_SBC "000b"; +BA_ "Invalid Value" SG_ 3221225472 GrMin_Rq_SBC "-"; +BA_ "Neutral Value" SG_ 3221225472 GrMin_Rq_SBC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GrMin_Rq_SBC "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 PFCW_ACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 PFCW_ACT "-"; +BA_ "Invalid Value" SG_ 3221225472 PFCW_ACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 THCMD_S "000h"; +BA_ "Neutral Value" SG_ 3221225472 THCMD_S "-"; +BA_ "Invalid Value" SG_ 3221225472 THCMD_S "-"; +BA_ "FirstFrameValue" SG_ 3221225472 THCMD_M "000h"; +BA_ "Neutral Value" SG_ 3221225472 THCMD_M "-"; +BA_ "Invalid Value" SG_ 3221225472 THCMD_M "-"; +BA_ "Invalid Value" SG_ 3221225472 INHECOPF "-"; +BA_ "Neutral Value" SG_ 3221225472 INHECOPF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INHECOPF "-"; +BA_ "Invalid Value" SG_ 3221225472 HI_GEAR_INH_ADAS "-"; +BA_ "Neutral Value" SG_ 3221225472 HI_GEAR_INH_ADAS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HI_GEAR_INH_ADAS "-"; +BA_ "Invalid Value" SG_ 3221225472 THCMD_S_upper "-"; +BA_ "Neutral Value" SG_ 3221225472 THCMD_S_upper "-"; +BA_ "FirstFrameValue" SG_ 3221225472 THCMD_S_upper "000h"; +BA_ "Invalid Value" SG_ 3221225472 THCMD_S_lower "-"; +BA_ "Neutral Value" SG_ 3221225472 THCMD_S_lower "-"; +BA_ "FirstFrameValue" SG_ 3221225472 THCMD_S_lower "000h"; +BA_ "Invalid Value" SG_ 3221225472 THCMD_M_upper "-"; +BA_ "Neutral Value" SG_ 3221225472 THCMD_M_upper "-"; +BA_ "FirstFrameValue" SG_ 3221225472 THCMD_M_upper "000h"; +BA_ "Invalid Value" SG_ 3221225472 THCMD_M_lower "-"; +BA_ "Neutral Value" SG_ 3221225472 THCMD_M_lower "-"; +BA_ "FirstFrameValue" SG_ 3221225472 THCMD_M_lower "000h"; +BA_ "Invalid Value" SG_ 3221225472 APOCMD4 "-"; +BA_ "Neutral Value" SG_ 3221225472 APOCMD4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 APOCMD4 "-"; +BA_ "Invalid Value" SG_ 3221225472 APOCMD3 "-"; +BA_ "Neutral Value" SG_ 3221225472 APOCMD3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 APOCMD3 "-"; +BA_ "Invalid Value" SG_ 3221225472 APOCMD2 "-"; +BA_ "Neutral Value" SG_ 3221225472 APOCMD2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 APOCMD2 "-"; +BA_ "Invalid Value" SG_ 3221225472 REQ_APO_MB "-"; +BA_ "Neutral Value" SG_ 3221225472 REQ_APO_MB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 REQ_APO_MB "-"; +BA_ "Invalid Value" SG_ 3221225472 APOCMD1 "-"; +BA_ "Neutral Value" SG_ 3221225472 APOCMD1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 APOCMD1 "-"; +BA_ "Invalid Value" SG_ 3221225472 MAIN_MB "-"; +BA_ "Neutral Value" SG_ 3221225472 MAIN_MB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MAIN_MB "-"; +BA_ "Invalid Value" SG_ 3221225472 TSCHABGE "-"; +BA_ "Neutral Value" SG_ 3221225472 TSCHABGE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TSCHABGE "0b"; +BA_ "Invalid Value" SG_ 3221225472 PBS2_ACT_MAINBRK "-"; +BA_ "Neutral Value" SG_ 3221225472 PBS2_ACT_MAINBRK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS2_ACT_MAINBRK "0b"; +BA_ "Invalid Value" SG_ 3221225472 ETQDNR_ETS "-"; +BA_ "Neutral Value" SG_ 3221225472 ETQDNR_ETS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETQDNR_ETS "-"; +BA_ "Invalid Value" SG_ 3221225472 GPHOJI_ETS "-"; +BA_ "Neutral Value" SG_ 3221225472 GPHOJI_ETS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GPHOJI_ETS "-"; +BA_ "Invalid Value" SG_ 3221225472 FTCSON_ETS "-"; +BA_ "Neutral Value" SG_ 3221225472 FTCSON_ETS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FTCSON_ETS "-"; +BA_ "Invalid Value" SG_ 3221225472 DETRG_ETS "-"; +BA_ "Neutral Value" SG_ 3221225472 DETRG_ETS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DETRG_ETS "-"; +BA_ "Invalid Value" SG_ 3221225472 ETQETS "FFFh"; +BA_ "Neutral Value" SG_ 3221225472 ETQETS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETQETS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4VDCCHK "0b"; +BA_ "Neutral Value" SG_ 3221225472 M4VDCCHK "-"; +BA_ "Invalid Value" SG_ 3221225472 M4VDCCHK "-"; +BA_ "Invalid Value" SG_ 3221225472 M4CHKSUM "-"; +BA_ "Neutral Value" SG_ 3221225472 M4CHKSUM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4CHKSUM "00h"; +BA_ "Invalid Value" SG_ 3221225472 M4PRUN "-"; +BA_ "Neutral Value" SG_ 3221225472 M4PRUN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4PRUN "0h"; +BA_ "Invalid Value" SG_ 3221225472 M4STATE1 "-"; +BA_ "Neutral Value" SG_ 3221225472 M4STATE1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4STATE1 "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4STATE2 "-"; +BA_ "Neutral Value" SG_ 3221225472 M4STATE2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4STATE2 "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4TRQG "-"; +BA_ "Neutral Value" SG_ 3221225472 M4TRQG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4TRQG "00h"; +BA_ "Invalid Value" SG_ 3221225472 M4RECVF "-"; +BA_ "Neutral Value" SG_ 3221225472 M4RECVF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4RECVF "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4TRANS "-"; +BA_ "Neutral Value" SG_ 3221225472 M4TRANS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4TRANS "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4LMPRQX "-"; +BA_ "Neutral Value" SG_ 3221225472 M4LMPRQX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4LMPRQX "1b"; +BA_ "Invalid Value" SG_ 3221225472 M4LMPRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 M4LMPRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4LMPRQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4TCSACT "-"; +BA_ "Neutral Value" SG_ 3221225472 M4TCSACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4TCSACT "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4NELIMTX "-"; +BA_ "Neutral Value" SG_ 3221225472 M4NELIMTX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4NELIMTX "1b"; +BA_ "Invalid Value" SG_ 3221225472 M4NELIMT "-"; +BA_ "Neutral Value" SG_ 3221225472 M4NELIMT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4NELIMT "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4SUBSTOP "-"; +BA_ "Neutral Value" SG_ 3221225472 M4SUBSTOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4SUBSTOP "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4TCSFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 M4TCSFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4TCSFAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4WARN "-"; +BA_ "Neutral Value" SG_ 3221225472 M4WARN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4WARN "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4ETQDNR "-"; +BA_ "Neutral Value" SG_ 3221225472 M4ETQDNR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4ETQDNR "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4TCSOFF "-"; +BA_ "Neutral Value" SG_ 3221225472 M4TCSOFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4TCSOFF "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4GPHOJI "-"; +BA_ "Neutral Value" SG_ 3221225472 M4GPHOJI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4GPHOJI "0b"; +BA_ "Invalid Value" SG_ 3221225472 M4FTCSONX "-"; +BA_ "Neutral Value" SG_ 3221225472 M4FTCSONX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4FTCSONX "00b"; +BA_ "Invalid Value" SG_ 3221225472 M4DETRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 M4DETRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4DETRQ "00h"; +BA_ "Invalid Value" SG_ 3221225472 M4ETQTCS "-"; +BA_ "Neutral Value" SG_ 3221225472 M4ETQTCS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4ETQTCS "7Fh"; +BA_ "Invalid Value" SG_ 3221225472 OBD2 "-"; +BA_ "Neutral Value" SG_ 3221225472 OBD2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OBD2 "-"; +BA_ "Invalid Value" SG_ 3221225472 TORQRATE "-"; +BA_ "Neutral Value" SG_ 3221225472 TORQRATE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TORQRATE "-"; +BA_ "Invalid Value" SG_ 3221225472 TETS "-"; +BA_ "Neutral Value" SG_ 3221225472 TETS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TETS "-"; +BA_ "Invalid Value" SG_ 3221225472 TRQD "-"; +BA_ "Neutral Value" SG_ 3221225472 TRQD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRQD "-"; +BA_ "Invalid Value" SG_ 3221225472 ETSWL "-"; +BA_ "Neutral Value" SG_ 3221225472 ETSWL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETSWL "-"; +BA_ "Invalid Value" SG_ 3221225472 SLIPLAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 SLIPLAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SLIPLAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 ETS_MODE "-"; +BA_ "Neutral Value" SG_ 3221225472 ETS_MODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETS_MODE "-"; +BA_ "Invalid Value" SG_ 3221225472 ETS_MODE_LAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 ETS_MODE_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETS_MODE_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 TRQMTR "-"; +BA_ "Neutral Value" SG_ 3221225472 TRQMTR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRQMTR "-"; +BA_ "Invalid Value" SG_ 3221225472 ABSFAILR "-"; +BA_ "Neutral Value" SG_ 3221225472 ABSFAILR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABSFAILR "-"; +BA_ "Invalid Value" SG_ 3221225472 ETSFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 ETSFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETSFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 ETSLOCK "-"; +BA_ "Neutral Value" SG_ 3221225472 ETSLOCK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETSLOCK "-"; +BA_ "Invalid Value" SG_ 3221225472 ABSFJDG "-"; +BA_ "Neutral Value" SG_ 3221225472 ABSFJDG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABSFJDG "-"; +BA_ "Invalid Value" SG_ 3221225472 VDCFJDG "-"; +BA_ "Neutral Value" SG_ 3221225472 VDCFJDG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VDCFJDG "-"; +BA_ "Invalid Value" SG_ 3221225472 TCSFJDG "-"; +BA_ "Neutral Value" SG_ 3221225472 TCSFJDG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TCSFJDG "-"; +BA_ "Invalid Value" SG_ 3221225472 YGIN "-"; +BA_ "Neutral Value" SG_ 3221225472 YGIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 YGIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHKSUMRR "-"; +BA_ "Neutral Value" SG_ 3221225472 CHKSUMRR "-"; +BA_ "Invalid Value" SG_ 3221225472 CHKSUMRR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RQTRQ "00h"; +BA_ "Neutral Value" SG_ 3221225472 RQTRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 RQTRQ "FFh"; +BA_ "Neutral Value" SG_ 3221225472 YawRate "-"; +BA_ "Invalid Value" SG_ 3221225472 YawRate "FFFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 YawRate "IGN-ON just behind 7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 TRANS_ACC "-"; +BA_ "Invalid Value" SG_ 3221225472 TRANS_ACC "FFFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 TRANS_ACC "IGN-ON just behind 7FFFh"; +BA_ "Neutral Value" SG_ 3221225472 LONG_ACC "-"; +BA_ "Invalid Value" SG_ 3221225472 LONG_ACC "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 LONG_ACC "IGN-ON just behind C8 +1.6 fr 0.8sec FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 STCENTER "0b"; +BA_ "Neutral Value" SG_ 3221225472 STCENTER "-"; +BA_ "Invalid Value" SG_ 3221225472 STCENTER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LONGSS "00h"; +BA_ "Neutral Value" SG_ 3221225472 LONGSS "-"; +BA_ "Invalid Value" SG_ 3221225472 LONGSS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VCVT "-"; +BA_ "Neutral Value" SG_ 3221225472 VCVT "-"; +BA_ "Invalid Value" SG_ 3221225472 VCVT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RECVF "0b"; +BA_ "Neutral Value" SG_ 3221225472 RECVF "-"; +BA_ "Invalid Value" SG_ 3221225472 RECVF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TCSFAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 TCSFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 TCSFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETQUPR "0b"; +BA_ "Neutral Value" SG_ 3221225472 ETQUPR "-"; +BA_ "Invalid Value" SG_ 3221225472 ETQUPR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETQDNR "0b"; +BA_ "Neutral Value" SG_ 3221225472 ETQDNR "-"; +BA_ "Invalid Value" SG_ 3221225472 ETQDNR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FTCSON "00b"; +BA_ "Neutral Value" SG_ 3221225472 FTCSON "-"; +BA_ "Invalid Value" SG_ 3221225472 FTCSON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DETRQ "00h"; +BA_ "Neutral Value" SG_ 3221225472 DETRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 DETRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETQTCS "-"; +BA_ "Neutral Value" SG_ 3221225472 ETQTCS "-"; +BA_ "Invalid Value" SG_ 3221225472 ETQTCS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS_ENABLE "0b"; +BA_ "Neutral Value" SG_ 3221225472 PBS_ENABLE "-"; +BA_ "Invalid Value" SG_ 3221225472 PBS_ENABLE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS_ACTIVE "0b"; +BA_ "Neutral Value" SG_ 3221225472 PBS_ACTIVE "-"; +BA_ "Invalid Value" SG_ 3221225472 PBS_ACTIVE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MessageCounter "0h"; +BA_ "Neutral Value" SG_ 3221225472 MessageCounter "-"; +BA_ "Invalid Value" SG_ 3221225472 MessageCounter "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SlowdownMonitorLow "0000h"; +BA_ "Neutral Value" SG_ 3221225472 SlowdownMonitorLow "-"; +BA_ "Invalid Value" SG_ 3221225472 SlowdownMonitorLow "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SlowdownOrderCallbackLow "0000h"; +BA_ "Neutral Value" SG_ 3221225472 SlowdownOrderCallbackLow "-"; +BA_ "Invalid Value" SG_ 3221225472 SlowdownOrderCallbackLow "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PresureFlag "0b"; +BA_ "Neutral Value" SG_ 3221225472 PresureFlag "-"; +BA_ "Invalid Value" SG_ 3221225472 PresureFlag "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BrakesLamp "0b"; +BA_ "Neutral Value" SG_ 3221225472 BrakesLamp "-"; +BA_ "Invalid Value" SG_ 3221225472 BrakesLamp "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DriverBrake "0b"; +BA_ "Neutral Value" SG_ 3221225472 DriverBrake "-"; +BA_ "Invalid Value" SG_ 3221225472 DriverBrake "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ABS_Operation "0b"; +BA_ "Neutral Value" SG_ 3221225472 ABS_Operation "-"; +BA_ "Invalid Value" SG_ 3221225472 ABS_Operation "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CAN_TIME_OUT "0b"; +BA_ "Neutral Value" SG_ 3221225472 CAN_TIME_OUT "-"; +BA_ "Invalid Value" SG_ 3221225472 CAN_TIME_OUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FunctionEnable "0b"; +BA_ "Neutral Value" SG_ 3221225472 FunctionEnable "-"; +BA_ "Invalid Value" SG_ 3221225472 FunctionEnable "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FunctionStatus "0b"; +BA_ "Neutral Value" SG_ 3221225472 FunctionStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 FunctionStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FunctionAlive "0b"; +BA_ "Neutral Value" SG_ 3221225472 FunctionAlive "-"; +BA_ "Invalid Value" SG_ 3221225472 FunctionAlive "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ControlByte "00h"; +BA_ "Neutral Value" SG_ 3221225472 ControlByte "-"; +BA_ "Invalid Value" SG_ 3221225472 ControlByte "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VMETER "-"; +BA_ "Neutral Value" SG_ 3221225472 VMETER "-"; +BA_ "Invalid Value" SG_ 3221225472 VMETER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WRRL "-"; +BA_ "Neutral Value" SG_ 3221225472 WRRL "-"; +BA_ "Invalid Value" SG_ 3221225472 WRRL "FFFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 WRRR "-"; +BA_ "Neutral Value" SG_ 3221225472 WRRR "-"; +BA_ "Invalid Value" SG_ 3221225472 WRRR "FFFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CHKSUMFR "-"; +BA_ "Neutral Value" SG_ 3221225472 CHKSUMFR "-"; +BA_ "Invalid Value" SG_ 3221225472 CHKSUMFR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 WRFL "-"; +BA_ "Neutral Value" SG_ 3221225472 WRFL "-"; +BA_ "Invalid Value" SG_ 3221225472 WRFL "FFFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 WRFR "-"; +BA_ "Neutral Value" SG_ 3221225472 WRFR "-"; +BA_ "Invalid Value" SG_ 3221225472 WRFR "FFFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 ETSFAILR "0b"; +BA_ "Neutral Value" SG_ 3221225472 ETSFAILR "-"; +BA_ "Invalid Value" SG_ 3221225472 ETSFAILR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLG_AMR "0b"; +BA_ "Neutral Value" SG_ 3221225472 FLG_AMR "-"; +BA_ "Invalid Value" SG_ 3221225472 FLG_AMR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLG_BMR "0b"; +BA_ "Neutral Value" SG_ 3221225472 FLG_BMR "-"; +BA_ "Invalid Value" SG_ 3221225472 FLG_BMR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RQ_TRQ "00h"; +BA_ "Neutral Value" SG_ 3221225472 RQ_TRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 RQ_TRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 VehicleSpeed_TCU "FFFFh"; +BA_ "Neutral Value" SG_ 3221225472 VehicleSpeed_TCU "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VehicleSpeed_TCU "0000h"; +BA_ "FirstFrameValue" SG_ 3221225472 PBW_WARNING "0b"; +BA_ "Neutral Value" SG_ 3221225472 PBW_WARNING "-"; +BA_ "Invalid Value" SG_ 3221225472 PBW_WARNING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACFRDEFSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 ACFRDEFSW "-"; +BA_ "Invalid Value" SG_ 3221225472 ACFRDEFSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FUEL_WARNING "0b"; +BA_ "Neutral Value" SG_ 3221225472 FUEL_WARNING "-"; +BA_ "Invalid Value" SG_ 3221225472 FUEL_WARNING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ENG_COOLANT_WARNING "00b"; +BA_ "Neutral Value" SG_ 3221225472 ENG_COOLANT_WARNING "-"; +BA_ "Invalid Value" SG_ 3221225472 ENG_COOLANT_WARNING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHARGE_WARNING "0b"; +BA_ "Neutral Value" SG_ 3221225472 CHARGE_WARNING "-"; +BA_ "Invalid Value" SG_ 3221225472 CHARGE_WARNING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRBAG_WARNING "0b"; +BA_ "Neutral Value" SG_ 3221225472 AIRBAG_WARNING "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRBAG_WARNING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FMad_upper "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 FMad_upper "-"; +BA_ "Invalid Value" SG_ 3221225472 FMad_upper "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRAKE_FLUID_WARNING "0b"; +BA_ "Neutral Value" SG_ 3221225472 BRAKE_FLUID_WARNING "-"; +BA_ "Invalid Value" SG_ 3221225472 BRAKE_FLUID_WARNING "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FMad_lower "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 FMad_lower "-"; +BA_ "Invalid Value" SG_ 3221225472 FMad_lower "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VSP20_MET "0000h"; +BA_ "Neutral Value" SG_ 3221225472 VSP20_MET "-"; +BA_ "Invalid Value" SG_ 3221225472 VSP20_MET "0000h"; +BA_ "FirstFrameValue" SG_ 3221225472 DONGLE_COM "00b"; +BA_ "Neutral Value" SG_ 3221225472 DONGLE_COM "00b"; +BA_ "Invalid Value" SG_ 3221225472 DONGLE_COM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FGAUGE_upper "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 FGAUGE_upper "-"; +BA_ "Invalid Value" SG_ 3221225472 FGAUGE_upper "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 FGAUGE_lower "3FFh"; +BA_ "Neutral Value" SG_ 3221225472 FGAUGE_lower "-"; +BA_ "Invalid Value" SG_ 3221225472 FGAUGE_lower "3FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 DOOR_SW_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 DOOR_SW_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 DOOR_SW_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BAC_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 BAC_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 BAC_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DC_EXISTANCE "-"; +BA_ "Neutral Value" SG_ 3221225472 DC_EXISTANCE "-"; +BA_ "Invalid Value" SG_ 3221225472 DC_EXISTANCE "-"; +BA_ "Invalid Value" SG_ 3221225472 PTNHI "FFh"; +BA_ "Neutral Value" SG_ 3221225472 PTNHI "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PTNHI "00h"; +BA_ "Invalid Value" SG_ 3221225472 NOTMRANG "-"; +BA_ "Neutral Value" SG_ 3221225472 NOTMRANG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NOTMRANG "-"; +BA_ "Invalid Value" SG_ 3221225472 CVTFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 CVTFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CVTFAIL "FK,JK : - +AY: 0b"; +BA_ "Invalid Value" SG_ 3221225472 ACCDIS "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCDIS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCDIS "-"; +BA_ "Invalid Value" SG_ 3221225472 ACCFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCFAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 INDDSRNG "-"; +BA_ "Neutral Value" SG_ 3221225472 INDDSRNG "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 INDDSRNG "-"; +BA_ "Invalid Value" SG_ 3221225472 INDDRNG "-"; +BA_ "Neutral Value" SG_ 3221225472 INDDRNG "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 INDDRNG "-"; +BA_ "Invalid Value" SG_ 3221225472 INDNRNG "-"; +BA_ "Neutral Value" SG_ 3221225472 INDNRNG "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 INDNRNG "0b"; +BA_ "Invalid Value" SG_ 3221225472 INDRRNG "-"; +BA_ "Neutral Value" SG_ 3221225472 INDRRNG "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 INDRRNG "0b"; +BA_ "Invalid Value" SG_ 3221225472 TEINER "-"; +BA_ "Neutral Value" SG_ 3221225472 TEINER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEINER "-"; +BA_ "Invalid Value" SG_ 3221225472 KTFTMP "-"; +BA_ "Neutral Value" SG_ 3221225472 KTFTMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 KTFTMP "-"; +BA_ "Invalid Value" SG_ 3221225472 TSENFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 TSENFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TSENFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BTQCUT "-"; +BA_ "Neutral Value" SG_ 3221225472 BTQCUT "-"; +BA_ "Invalid Value" SG_ 3221225472 BTQCUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATQCUT "-"; +BA_ "Neutral Value" SG_ 3221225472 ATQCUT "-"; +BA_ "Invalid Value" SG_ 3221225472 ATQCUT "-"; +BA_ "Invalid Value" SG_ 3221225472 CVTLOAD "-"; +BA_ "Neutral Value" SG_ 3221225472 CVTLOAD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CVTLOAD "FK,JK : -"; +BA_ "Invalid Value" SG_ 3221225472 ATCLD "-"; +BA_ "Neutral Value" SG_ 3221225472 ATCLD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATCLD "-"; +BA_ "Invalid Value" SG_ 3221225472 ATFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 ATFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 IDLEUP "-"; +BA_ "Neutral Value" SG_ 3221225472 IDLEUP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IDLEUP "0b"; +BA_ "Invalid Value" SG_ 3221225472 PTDOFF "IK,DX,HG : I = 1b +other: -"; +BA_ "Neutral Value" SG_ 3221225472 PTDOFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PTDOFF "0b"; +BA_ "Invalid Value" SG_ 3221225472 OILPHG "-"; +BA_ "Neutral Value" SG_ 3221225472 OILPHG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OILPHG "-"; +BA_ "Invalid Value" SG_ 3221225472 ONLUFLG "-"; +BA_ "Neutral Value" SG_ 3221225472 ONLUFLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ONLUFLG "0b"; +BA_ "Invalid Value" SG_ 3221225472 DOWNVSP "IK : I = 1b"; +BA_ "Neutral Value" SG_ 3221225472 DOWNVSP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DOWNVSP "IK, AY : 0b"; +BA_ "Invalid Value" SG_ 3221225472 CVTLMPSIG "-"; +BA_ "Neutral Value" SG_ 3221225472 CVTLMPSIG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CVTLMPSIG "-"; +BA_ "Invalid Value" SG_ 3221225472 RNGSIG "-"; +BA_ "Neutral Value" SG_ 3221225472 RNGSIG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RNGSIG "-"; +BA_ "Invalid Value" SG_ 3221225472 SMODESIG "-"; +BA_ "Neutral Value" SG_ 3221225472 SMODESIG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SMODESIG "-"; +BA_ "Invalid Value" SG_ 3221225472 MMODESIG "-"; +BA_ "Neutral Value" SG_ 3221225472 MMODESIG "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 MMODESIG "-"; +BA_ "Invalid Value" SG_ 3221225472 MMODEGP "-"; +BA_ "Neutral Value" SG_ 3221225472 MMODEGP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MMODEGP "-"; +BA_ "Invalid Value" SG_ 3221225472 AGBCLOCK "-"; +BA_ "Neutral Value" SG_ 3221225472 AGBCLOCK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AGBCLOCK "-"; +BA_ "Invalid Value" SG_ 3221225472 INDSSIG "-"; +BA_ "Neutral Value" SG_ 3221225472 INDSSIG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INDSSIG "-"; +BA_ "Invalid Value" SG_ 3221225472 INDMGP "-"; +BA_ "Neutral Value" SG_ 3221225472 INDMGP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INDMGP "-"; +BA_ "Invalid Value" SG_ 3221225472 CVTIUPRQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CVTIUPRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CVTIUPRQ "0h"; +BA_ "Invalid Value" SG_ 3221225472 ACCLIML "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCLIML "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCLIML "-"; +BA_ "Invalid Value" SG_ 3221225472 ACCLIMH "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCLIMH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCLIMH "-"; +BA_ "Invalid Value" SG_ 3221225472 CVTFAILVDC "-"; +BA_ "Neutral Value" SG_ 3221225472 CVTFAILVDC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CVTFAILVDC "-"; +BA_ "Invalid Value" SG_ 3221225472 NIDLESTB "-"; +BA_ "Neutral Value" SG_ 3221225472 NIDLESTB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NIDLESTB "0b"; +BA_ "Invalid Value" SG_ 3221225472 PLMINTLM_or_NIDLELRN "-"; +BA_ "Neutral Value" SG_ 3221225472 PLMINTLM_or_NIDLELRN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PLMINTLM_or_NIDLELRN "-"; +BA_ "Invalid Value" SG_ 3221225472 ATCOLD "-"; +BA_ "Neutral Value" SG_ 3221225472 ATCOLD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATCOLD "0b"; +BA_ "Invalid Value" SG_ 3221225472 OILPNG "0b"; +BA_ "Neutral Value" SG_ 3221225472 OILPNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OILPNG "FK,JK : - +IK,AY : 0b"; +BA_ "Invalid Value" SG_ 3221225472 MUPSFTTD "-"; +BA_ "Neutral Value" SG_ 3221225472 MUPSFTTD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MUPSFTTD "-"; +BA_ "Invalid Value" SG_ 3221225472 OUTREV "-"; +BA_ "Neutral Value" SG_ 3221225472 OUTREV "CVT:N = FFFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 OUTREV "CVT:0000h"; +BA_ "Invalid Value" SG_ 3221225472 INPREV "CVT:I = FFFFh"; +BA_ "Neutral Value" SG_ 3221225472 INPREV "IK,HG,IM:N = 0000h +JG,AYK3:N = 258h +AY:-"; +BA_ "FirstFrameValue" SG_ 3221225472 INPREV "CVT:0000h"; +BA_ "Invalid Value" SG_ 3221225472 RATIO0 "-"; +BA_ "Neutral Value" SG_ 3221225472 RATIO0 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RATIO0 "FK : EAE6h"; +BA_ "Invalid Value" SG_ 3221225472 TBNREV "-"; +BA_ "Neutral Value" SG_ 3221225472 TBNREV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TBNREV "0000h"; +BA_ "Invalid Value" SG_ 3221225472 TDRTARG "-"; +BA_ "Neutral Value" SG_ 3221225472 TDRTARG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TDRTARG "000h"; +BA_ "Invalid Value" SG_ 3221225472 ATOILPOMP "-"; +BA_ "Neutral Value" SG_ 3221225472 ATOILPOMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATOILPOMP "-"; +BA_ "Invalid Value" SG_ 3221225472 CURGPV "IK : I = 000b"; +BA_ "Neutral Value" SG_ 3221225472 CURGPV "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CURGPV "IK,AY : 000b"; +BA_ "Invalid Value" SG_ 3221225472 FSCKATIH "-"; +BA_ "Neutral Value" SG_ 3221225472 FSCKATIH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FSCKATIH "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 D4MODE "FK,JK : -..."; +BA_ "Neutral Value" SG_ 3221225472 D4MODE "-"; +BA_ "Invalid Value" SG_ 3221225472 D4MODE "IK : I = 0b"; +BA_ "Invalid Value" SG_ 3221225472 SFTVCTR "-"; +BA_ "Neutral Value" SG_ 3221225472 SFTVCTR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SFTVCTR "0000b"; +BA_ "Invalid Value" SG_ 3221225472 SMLUFLG "-"; +BA_ "Neutral Value" SG_ 3221225472 SMLUFLG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SMLUFLG "0b"; +BA_ "Invalid Value" SG_ 3221225472 DWNSFTTD "IK : I = 0b"; +BA_ "Neutral Value" SG_ 3221225472 DWNSFTTD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DWNSFTTD "IK ,AY: 0b"; +BA_ "Invalid Value" SG_ 3221225472 PRIRTD "IK : I = 0b"; +BA_ "Neutral Value" SG_ 3221225472 PRIRTD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRIRTD "IK,AY : 0b"; +BA_ "Invalid Value" SG_ 3221225472 UPSFTTDL "-"; +BA_ "Neutral Value" SG_ 3221225472 UPSFTTDL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UPSFTTDL "0b"; +BA_ "Invalid Value" SG_ 3221225472 UPSFTTDS "IK : I = 0b"; +BA_ "Neutral Value" SG_ 3221225472 UPSFTTDS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 UPSFTTDS "IK,AY : 0b"; +BA_ "Invalid Value" SG_ 3221225472 IND1RNG "-"; +BA_ "Neutral Value" SG_ 3221225472 IND1RNG "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 IND1RNG "0b"; +BA_ "Invalid Value" SG_ 3221225472 IND2RNG "-"; +BA_ "Neutral Value" SG_ 3221225472 IND2RNG "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 IND2RNG "0b"; +BA_ "Invalid Value" SG_ 3221225472 IND3RNG "-"; +BA_ "Neutral Value" SG_ 3221225472 IND3RNG "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 IND3RNG "0b"; +BA_ "Invalid Value" SG_ 3221225472 IND4RNG "-"; +BA_ "Neutral Value" SG_ 3221225472 IND4RNG "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 IND4RNG "0b"; +BA_ "Invalid Value" SG_ 3221225472 ATLAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 ATLAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATLAMP "0b"; +BA_ "Invalid Value" SG_ 3221225472 POWLAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 POWLAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 POWLAMP "0b"; +BA_ "Invalid Value" SG_ 3221225472 INDGP "-"; +BA_ "Neutral Value" SG_ 3221225472 INDGP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INDGP "000b"; +BA_ "Invalid Value" SG_ 3221225472 INDMRNG "-"; +BA_ "Neutral Value" SG_ 3221225472 INDMRNG "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 INDMRNG "0b"; +BA_ "Invalid Value" SG_ 3221225472 ODCLAMP "-"; +BA_ "Neutral Value" SG_ 3221225472 ODCLAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ODCLAMP "0b"; +BA_ "Invalid Value" SG_ 3221225472 GRRTOHLD "-"; +BA_ "Neutral Value" SG_ 3221225472 GRRTOHLD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GRRTOHLD "0b"; +BA_ "Invalid Value" SG_ 3221225472 RNG_NG "-"; +BA_ "Neutral Value" SG_ 3221225472 RNG_NG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RNG_NG "0b"; +BA_ "Invalid Value" SG_ 3221225472 AT_TYPEorMINH "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_TYPEorMINH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_TYPEorMINH "0b"; +BA_ "Invalid Value" SG_ 3221225472 MMODE "-"; +BA_ "Neutral Value" SG_ 3221225472 MMODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MMODE "FK,JK : -, IK : 0b"; +BA_ "Invalid Value" SG_ 3221225472 DRIVETD "IK : I =0001b"; +BA_ "Neutral Value" SG_ 3221225472 DRIVETD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DRIVETD "IK,AY : 0000b"; +BA_ "Invalid Value" SG_ 3221225472 ONSHIFT "-"; +BA_ "Neutral Value" SG_ 3221225472 ONSHIFT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ONSHIFT "0b"; +BA_ "Invalid Value" SG_ 3221225472 CURGP "-"; +BA_ "Neutral Value" SG_ 3221225472 CURGP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CURGP "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 MSR_DISABLED "1b"; +BA_ "Neutral Value" SG_ 3221225472 MSR_DISABLED "-"; +BA_ "Invalid Value" SG_ 3221225472 MSR_DISABLED "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TCSBRACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 TCSBRACT "-"; +BA_ "Invalid Value" SG_ 3221225472 TCSBRACT "-"; +BA_ "Invalid Value" SG_ 3221225472 ASRDTQRQ_VCM "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 ASRDTQRQ_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASRDTQRQ_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 MSRTQRQ_VCM "-"; +BA_ "Neutral Value" SG_ 3221225472 MSRTQRQ_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSRTQRQ_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 ASRSTQRQ_VCM "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 ASRSTQRQ_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASRSTQRQ_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FCW_SYSTEM_ON "0b"; +BA_ "Neutral Value" SG_ 3221225472 FCW_SYSTEM_ON "-"; +BA_ "Invalid Value" SG_ 3221225472 FCW_SYSTEM_ON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSRACT "0b"; +BA_ "Neutral Value" SG_ 3221225472 MSRACT "-"; +BA_ "Invalid Value" SG_ 3221225472 MSRACT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EARLY_GSUP "0b"; +BA_ "Neutral Value" SG_ 3221225472 EARLY_GSUP "-"; +BA_ "Invalid Value" SG_ 3221225472 EARLY_GSUP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSGCNTRR1 "-"; +BA_ "Neutral Value" SG_ 3221225472 MSGCNTRR1 "-"; +BA_ "Invalid Value" SG_ 3221225472 MSGCNTRR1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASRDTQRQ "FEh"; +BA_ "Neutral Value" SG_ 3221225472 ASRDTQRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ASRDTQRQ "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 COPinREG "-"; +BA_ "Neutral Value" SG_ 3221225472 COPinREG "-"; +BA_ "Invalid Value" SG_ 3221225472 COPinREG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRQ_CONT_TYPE "000b"; +BA_ "Neutral Value" SG_ 3221225472 TRQ_CONT_TYPE "-"; +BA_ "Invalid Value" SG_ 3221225472 TRQ_CONT_TYPE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSRTQRQ "00h"; +BA_ "Neutral Value" SG_ 3221225472 MSRTQRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 MSRTQRQ "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 ASRSTQRQ "FEh"; +BA_ "Neutral Value" SG_ 3221225472 ASRSTQRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ASRSTQRQ "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 TXNELIM "00h"; +BA_ "Neutral Value" SG_ 3221225472 TXNELIM "-"; +BA_ "Invalid Value" SG_ 3221225472 TXNELIM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4TQLIM "00h"; +BA_ "Neutral Value" SG_ 3221225472 M4TQLIM "-"; +BA_ "Invalid Value" SG_ 3221225472 M4TQLIM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PTDON "0b"; +BA_ "Neutral Value" SG_ 3221225472 PTDON "-"; +BA_ "Invalid Value" SG_ 3221225472 PTDON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATAPOST "00h"; +BA_ "Neutral Value" SG_ 3221225472 ATAPOST "-"; +BA_ "Invalid Value" SG_ 3221225472 ATAPOST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PAMBAT "FFh"; +BA_ "Neutral Value" SG_ 3221225472 PAMBAT "-"; +BA_ "Invalid Value" SG_ 3221225472 PAMBAT "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 ATAPOST2 "000h"; +BA_ "Neutral Value" SG_ 3221225472 ATAPOST2 "-"; +BA_ "Invalid Value" SG_ 3221225472 ATAPOST2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ADVDC5orSPDCTINH "0b"; +BA_ "Neutral Value" SG_ 3221225472 ADVDC5orSPDCTINH "-"; +BA_ "Invalid Value" SG_ 3221225472 ADVDC5orSPDCTINH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATAPOSELorATTRQAC "0b"; +BA_ "Neutral Value" SG_ 3221225472 ATAPOSELorATTRQAC "-"; +BA_ "Invalid Value" SG_ 3221225472 ATAPOSELorATTRQAC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FDTFCSEL "0b"; +BA_ "Neutral Value" SG_ 3221225472 FDTFCSEL "-"; +BA_ "Invalid Value" SG_ 3221225472 FDTFCSEL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATTRQNG2 "0b"; +BA_ "Neutral Value" SG_ 3221225472 ATTRQNG2 "-"; +BA_ "Invalid Value" SG_ 3221225472 ATTRQNG2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDODOFF "0b"; +BA_ "Neutral Value" SG_ 3221225472 ASCDODOFF "-"; +BA_ "Invalid Value" SG_ 3221225472 ASCDODOFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIDLE_SW2 "0b"; +BA_ "Neutral Value" SG_ 3221225472 TIDLE_SW2 "-"; +BA_ "Invalid Value" SG_ 3221225472 TIDLE_SW2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATAPSNG "0b"; +BA_ "Neutral Value" SG_ 3221225472 ATAPSNG "-"; +BA_ "Invalid Value" SG_ 3221225472 ATAPSNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATFULLSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 ATFULLSW "-"; +BA_ "Invalid Value" SG_ 3221225472 ATFULLSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DADV_RS "0b"; +BA_ "Neutral Value" SG_ 3221225472 DADV_RS "-"; +BA_ "Invalid Value" SG_ 3221225472 DADV_RS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLNST "0b"; +BA_ "Neutral Value" SG_ 3221225472 FLNST "-"; +BA_ "Invalid Value" SG_ 3221225472 FLNST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLEAN "0b"; +BA_ "Neutral Value" SG_ 3221225472 FLEAN "-"; +BA_ "Invalid Value" SG_ 3221225472 FLEAN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FD3LU "0b"; +BA_ "Neutral Value" SG_ 3221225472 FD3LU "-"; +BA_ "Invalid Value" SG_ 3221225472 FD3LU "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FODINH "00b"; +BA_ "Neutral Value" SG_ 3221225472 FODINH "-"; +BA_ "Invalid Value" SG_ 3221225472 FODINH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FDTLIN "0b"; +BA_ "Neutral Value" SG_ 3221225472 FDTLIN "-"; +BA_ "Invalid Value" SG_ 3221225472 FDTLIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FDTTD "0b"; +BA_ "Neutral Value" SG_ 3221225472 FDTTD "-"; +BA_ "Invalid Value" SG_ 3221225472 FDTTD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TENG "000h"; +BA_ "Neutral Value" SG_ 3221225472 TENG "-"; +BA_ "Invalid Value" SG_ 3221225472 TENG "FFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 TACHO "0000h"; +BA_ "Neutral Value" SG_ 3221225472 TACHO "-"; +BA_ "Invalid Value" SG_ 3221225472 TACHO "FFFFh"; +BA_ "FirstFrameValue" SG_ 3221225472 APO_FSP "00h"; +BA_ "Neutral Value" SG_ 3221225472 APO_FSP "-"; +BA_ "Invalid Value" SG_ 3221225472 APO_FSP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETCFAIL "000b"; +BA_ "Neutral Value" SG_ 3221225472 ETCFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 ETCFAIL "011b"; +BA_ "FirstFrameValue" SG_ 3221225472 ECCSMSG0C "-"; +BA_ "Neutral Value" SG_ 3221225472 ECCSMSG0C "-"; +BA_ "Invalid Value" SG_ 3221225472 ECCSMSG0C "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLAG_FC "0b"; +BA_ "Neutral Value" SG_ 3221225472 FLAG_FC "-"; +BA_ "Invalid Value" SG_ 3221225472 FLAG_FC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TIDLE_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 TIDLE_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 TIDLE_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIDLE_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 AIDLE_SW "0b"; +BA_ "Invalid Value" SG_ 3221225472 AIDLE_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 MBAPLLMT "-"; +BA_ "Neutral Value" SG_ 3221225472 MBAPLLMT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MBAPLLMT "000h"; +BA_ "Invalid Value" SG_ 3221225472 TE_LM_ON "-"; +BA_ "Neutral Value" SG_ 3221225472 TE_LM_ON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TE_LM_ON "0b"; +BA_ "Invalid Value" SG_ 3221225472 ECMMB_ACTIVATE "-"; +BA_ "Neutral Value" SG_ 3221225472 ECMMB_ACTIVATE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECMMB_ACTIVATE "0b"; +BA_ "Invalid Value" SG_ 3221225472 APS2_MB "-"; +BA_ "Neutral Value" SG_ 3221225472 APS2_MB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 APS2_MB "000h"; +BA_ "Invalid Value" SG_ 3221225472 APS1_MB "-"; +BA_ "Neutral Value" SG_ 3221225472 APS1_MB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 APS1_MB "000h,HCM(IM):-"; +BA_ "Invalid Value" SG_ 3221225472 LDP_ON_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 LDP_ON_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LDP_ON_SW "0b"; +BA_ "Invalid Value" SG_ 3221225472 NEUT_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 NEUT_SW "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 NEUT_SW "0b"; +BA_ "Invalid Value" SG_ 3221225472 BNOSW "-"; +BA_ "Neutral Value" SG_ 3221225472 BNOSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BNOSW "0b"; +BA_ "Invalid Value" SG_ 3221225472 BNCSW "-"; +BA_ "Neutral Value" SG_ 3221225472 BNCSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BNCSW "1b"; +BA_ "Invalid Value" SG_ 3221225472 ACCCANFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCCANFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCCANFAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSW8 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSW8 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSW8 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSW7 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSW7 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSW7 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSW6 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSW6 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSW6 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSW5 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSW5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSW5 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSW4 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSW4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSW4 "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSW3 "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSW3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSW3 "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSW2 "0b"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSW2 "-"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSW2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDSW1 "0b"; +BA_ "Neutral Value" SG_ 3221225472 ASCDSW1 "-"; +BA_ "Invalid Value" SG_ 3221225472 ASCDSW1 "-"; +BA_ "Invalid Value" SG_ 3221225472 MAIN_SWE "-"; +BA_ "Neutral Value" SG_ 3221225472 MAIN_SWE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MAIN_SWE "0b"; +BA_ "Invalid Value" SG_ 3221225472 ONEACC "-"; +BA_ "Neutral Value" SG_ 3221225472 ONEACC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ONEACC "0b"; +BA_ "Invalid Value" SG_ 3221225472 ECMACCON "-"; +BA_ "Neutral Value" SG_ 3221225472 ECMACCON "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECMACCON "0b"; +BA_ "Invalid Value" SG_ 3221225472 ASCDFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 ASCDFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ASCDFAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 APS2_A "FFh"; +BA_ "Neutral Value" SG_ 3221225472 APS2_A "-"; +BA_ "FirstFrameValue" SG_ 3221225472 APS2_A "FFh"; +BA_ "Invalid Value" SG_ 3221225472 APS1_A "-"; +BA_ "Neutral Value" SG_ 3221225472 APS1_A "-"; +BA_ "FirstFrameValue" SG_ 3221225472 APS1_A "00h"; +BA_ "Invalid Value" SG_ 3221225472 ACCMDFAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCMDFAIL "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCMDFAIL "0b"; +BA_ "Invalid Value" SG_ 3221225472 ACCINH_S "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCINH_S "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCINH_S "0b"; +BA_ "Invalid Value" SG_ 3221225472 ACCINH "-"; +BA_ "Neutral Value" SG_ 3221225472 ACCINH "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCINH "1b"; +BA_ "FirstFrameValue" SG_ 3221225472 MODELMT "0b"; +BA_ "Neutral Value" SG_ 3221225472 MODELMT "-"; +BA_ "Invalid Value" SG_ 3221225472 MODELMT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRKSWTM "0b"; +BA_ "Neutral Value" SG_ 3221225472 BRKSWTM "-"; +BA_ "Invalid Value" SG_ 3221225472 BRKSWTM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TCOLD "00h"; +BA_ "Neutral Value" SG_ 3221225472 TCOLD "-"; +BA_ "Invalid Value" SG_ 3221225472 TCOLD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TTEPTD "00h"; +BA_ "Neutral Value" SG_ 3221225472 TTEPTD "-"; +BA_ "Invalid Value" SG_ 3221225472 TTEPTD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCVDEC_or_NIDLE_INSTRUCTION "0b"; +BA_ "Neutral Value" SG_ 3221225472 ACCVDEC_or_NIDLE_INSTRUCTION "-"; +BA_ "Invalid Value" SG_ 3221225472 ACCVDEC_or_NIDLE_INSTRUCTION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCTGSEL "0b"; +BA_ "Neutral Value" SG_ 3221225472 ACCTGSEL "-"; +BA_ "Invalid Value" SG_ 3221225472 ACCTGSEL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECCSMSG7C "-"; +BA_ "Neutral Value" SG_ 3221225472 ECCSMSG7C "-"; +BA_ "Invalid Value" SG_ 3221225472 ECCSMSG7C "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCTGRTO "0000h"; +BA_ "Neutral Value" SG_ 3221225472 ACCTGRTO "-"; +BA_ "Invalid Value" SG_ 3221225472 ACCTGRTO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LU_REQ "00b"; +BA_ "Neutral Value" SG_ 3221225472 LU_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 LU_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SMAPREQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 SMAPREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SMAPREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RTOHOLD "0b"; +BA_ "Neutral Value" SG_ 3221225472 RTOHOLD "-"; +BA_ "Invalid Value" SG_ 3221225472 RTOHOLD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATIDLSW2 "0b"; +BA_ "Neutral Value" SG_ 3221225472 ATIDLSW2 "-"; +BA_ "Invalid Value" SG_ 3221225472 ATIDLSW2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MANUAUP "0b"; +BA_ "Neutral Value" SG_ 3221225472 MANUAUP "-"; +BA_ "Invalid Value" SG_ 3221225472 MANUAUP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MANUPOS "0b"; +BA_ "Neutral Value" SG_ 3221225472 MANUPOS "-"; +BA_ "Invalid Value" SG_ 3221225472 MANUPOS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MANUMOD "0b"; +BA_ "Neutral Value" SG_ 3221225472 MANUMOD "-"; +BA_ "Invalid Value" SG_ 3221225472 MANUMOD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PTDAPO2 "FFh"; +BA_ "Neutral Value" SG_ 3221225472 PTDAPO2 "-"; +BA_ "Invalid Value" SG_ 3221225472 PTDAPO2 "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 CANNG2 "-"; +BA_ "Neutral Value" SG_ 3221225472 CANNG2 "-"; +BA_ "Invalid Value" SG_ 3221225472 CANNG2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECCSMSG4C "0h"; +BA_ "Neutral Value" SG_ 3221225472 ECCSMSG4C "-"; +BA_ "Invalid Value" SG_ 3221225472 ECCSMSG4C "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TFD_ECM "0000h"; +BA_ "Neutral Value" SG_ 3221225472 TFD_ECM "-"; +BA_ "Invalid Value" SG_ 3221225472 TFD_ECM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 V_APS "00h"; +BA_ "Neutral Value" SG_ 3221225472 V_APS "-"; +BA_ "Invalid Value" SG_ 3221225472 V_APS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ACCMDFAL "0b"; +BA_ "Neutral Value" SG_ 3221225472 ACCMDFAL "-"; +BA_ "Invalid Value" SG_ 3221225472 ACCMDFAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TACHO_upper "0000h"; +BA_ "Neutral Value" SG_ 3221225472 TACHO_upper "-"; +BA_ "Invalid Value" SG_ 3221225472 TACHO_upper "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TACHO_lower "0000h"; +BA_ "Neutral Value" SG_ 3221225472 TACHO_lower "-"; +BA_ "Invalid Value" SG_ 3221225472 TACHO_lower "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LED2 "-"; +BA_ "Neutral Value" SG_ 3221225472 LED2 "-"; +BA_ "Invalid Value" SG_ 3221225472 LED2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_PDCUT "0b"; +BA_ "Neutral Value" SG_ 3221225472 AC_PDCUT "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_PDCUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CRU_LAMP "0b"; +BA_ "Neutral Value" SG_ 3221225472 CRU_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 CRU_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SET_LAMP "0b"; +BA_ "Neutral Value" SG_ 3221225472 SET_LAMP "-"; +BA_ "Invalid Value" SG_ 3221225472 SET_LAMP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ITO "FFh"; +BA_ "Neutral Value" SG_ 3221225472 ITO "-"; +BA_ "Invalid Value" SG_ 3221225472 ITO "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 PTDAPO "00h"; +BA_ "Neutral Value" SG_ 3221225472 PTDAPO "-"; +BA_ "Invalid Value" SG_ 3221225472 PTDAPO "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FHLCVT "0b"; +BA_ "Neutral Value" SG_ 3221225472 FHLCVT "-"; +BA_ "Invalid Value" SG_ 3221225472 FHLCVT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FPTTFS "0b"; +BA_ "Neutral Value" SG_ 3221225472 FPTTFS "-"; +BA_ "Invalid Value" SG_ 3221225472 FPTTFS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATTRQNG "0b"; +BA_ "Neutral Value" SG_ 3221225472 ATTRQNG "-"; +BA_ "Invalid Value" SG_ 3221225472 ATTRQNG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PTDFAIL "0b"; +BA_ "Neutral Value" SG_ 3221225472 PTDFAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 PTDFAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RQ_ENBR "0b"; +BA_ "Neutral Value" SG_ 3221225472 RQ_ENBR "-"; +BA_ "Invalid Value" SG_ 3221225472 RQ_ENBR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 K_ENBR "00h"; +BA_ "Neutral Value" SG_ 3221225472 K_ENBR "-"; +BA_ "Invalid Value" SG_ 3221225472 K_ENBR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TTEP "00h"; +BA_ "Neutral Value" SG_ 3221225472 TTEP "-"; +BA_ "Invalid Value" SG_ 3221225472 TTEP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATIDLESW "1b"; +BA_ "Neutral Value" SG_ 3221225472 ATIDLESW "-"; +BA_ "Invalid Value" SG_ 3221225472 ATIDLESW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FLOESTJ "0b"; +BA_ "Neutral Value" SG_ 3221225472 FLOESTJ "-"; +BA_ "Invalid Value" SG_ 3221225472 FLOESTJ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOWSW "0b"; +BA_ "Neutral Value" SG_ 3221225472 SNOWSW "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOWSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SNOWMODE "0b"; +BA_ "Neutral Value" SG_ 3221225472 SNOWMODE "-"; +BA_ "Invalid Value" SG_ 3221225472 SNOWMODE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TCSOPX "1b"; +BA_ "Neutral Value" SG_ 3221225472 TCSOPX "-"; +BA_ "Invalid Value" SG_ 3221225472 TCSOPX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TCSOP "0b"; +BA_ "Neutral Value" SG_ 3221225472 TCSOP "-"; +BA_ "Invalid Value" SG_ 3221225472 TCSOP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CNTLMT "-"; +BA_ "Neutral Value" SG_ 3221225472 CNTLMT "-"; +BA_ "Invalid Value" SG_ 3221225472 CNTLMT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECMOK "1b"; +BA_ "Neutral Value" SG_ 3221225472 ECMOK "-"; +BA_ "Invalid Value" SG_ 3221225472 ECMOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETCOK "1b"; +BA_ "Neutral Value" SG_ 3221225472 ETCOK "-"; +BA_ "Invalid Value" SG_ 3221225472 ETCOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FCOK "1b"; +BA_ "Neutral Value" SG_ 3221225472 FCOK "-"; +BA_ "Invalid Value" SG_ 3221225472 FCOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CANOK "1b"; +BA_ "Neutral Value" SG_ 3221225472 CANOK "-"; +BA_ "Invalid Value" SG_ 3221225472 CANOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETRQBK "00h"; +BA_ "Neutral Value" SG_ 3221225472 ETRQBK "-"; +BA_ "Invalid Value" SG_ 3221225472 ETRQBK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETRQ "00h"; +BA_ "Neutral Value" SG_ 3221225472 ETRQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ETRQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETRQDR "00h"; +BA_ "Neutral Value" SG_ 3221225472 ETRQDR "-"; +BA_ "Invalid Value" SG_ 3221225472 ETRQDR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 APOFSP "00h"; +BA_ "Neutral Value" SG_ 3221225472 APOFSP "-"; +BA_ "Invalid Value" SG_ 3221225472 APOFSP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETSCANOK "1b"; +BA_ "Neutral Value" SG_ 3221225472 ETSCANOK "-"; +BA_ "Invalid Value" SG_ 3221225472 ETSCANOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TRQDNINH "0b"; +BA_ "Neutral Value" SG_ 3221225472 TRQDNINH "-"; +BA_ "Invalid Value" SG_ 3221225472 TRQDNINH "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 ECCSMSG1C "-"; +BA_ "Neutral Value" SG_ 3221225472 ECCSMSG1C "-"; +BA_ "Invalid Value" SG_ 3221225472 ECCSMSG1C "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FCTCS "0h"; +BA_ "Neutral Value" SG_ 3221225472 FCTCS "-"; +BA_ "Invalid Value" SG_ 3221225472 FCTCS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TTEPTCS "00h"; +BA_ "Neutral Value" SG_ 3221225472 TTEPTCS "-"; +BA_ "Invalid Value" SG_ 3221225472 TTEPTCS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 check_sum "-"; +BA_ "Neutral Value" SG_ 3221225472 check_sum "-"; +BA_ "Invalid Value" SG_ 3221225472 check_sum "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BCU_message_counter "-"; +BA_ "Neutral Value" SG_ 3221225472 BCU_message_counter "-"; +BA_ "Invalid Value" SG_ 3221225472 BCU_message_counter "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Pressure_hi "15DFh"; +BA_ "Neutral Value" SG_ 3221225472 Pressure_hi " 0000h"; +BA_ "Invalid Value" SG_ 3221225472 Pressure_hi "-"; +BA_ "FirstFrameValue" SG_ 3221225472 HOOD_SW2 "0b"; +BA_ "Neutral Value" SG_ 3221225472 HOOD_SW2 "-"; +BA_ "Invalid Value" SG_ 3221225472 HOOD_SW2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FUEL_FILTER "0b"; +BA_ "Neutral Value" SG_ 3221225472 FUEL_FILTER "-"; +BA_ "Invalid Value" SG_ 3221225472 FUEL_FILTER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BRK_OIL_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 BRK_OIL_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 BRK_OIL_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ESCL_RERAY "0b"; +BA_ "Neutral Value" SG_ 3221225472 ESCL_RERAY "-"; +BA_ "Invalid Value" SG_ 3221225472 ESCL_RERAY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COLUMU_LOCK_STA "00b"; +BA_ "Neutral Value" SG_ 3221225472 COLUMU_LOCK_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 COLUMU_LOCK_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 DETENT_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 DETENT_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 DETENT_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STARTER_INHIBIT_RELAY "10b"; +BA_ "Neutral Value" SG_ 3221225472 STARTER_INHIBIT_RELAY "-"; +BA_ "Invalid Value" SG_ 3221225472 STARTER_INHIBIT_RELAY "10b"; +BA_ "FirstFrameValue" SG_ 3221225472 WAKEUP "01b"; +BA_ "Neutral Value" SG_ 3221225472 WAKEUP "-"; +BA_ "Invalid Value" SG_ 3221225472 WAKEUP "10b,11b"; +BA_ "FirstFrameValue" SG_ 3221225472 HOOD_SW "0b"; +BA_ "Neutral Value" SG_ 3221225472 HOOD_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 HOOD_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CORN_L "00b"; +BA_ "Neutral Value" SG_ 3221225472 CORN_L "-"; +BA_ "Invalid Value" SG_ 3221225472 CORN_L "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 ANTI_T_HORN "0b"; +BA_ "Neutral Value" SG_ 3221225472 ANTI_T_HORN "-"; +BA_ "Invalid Value" SG_ 3221225472 ANTI_T_HORN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 IGN_CONT_STA "0b"; +BA_ "Neutral Value" SG_ 3221225472 IGN_CONT_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 IGN_CONT_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ST_position "0b"; +BA_ "Neutral Value" SG_ 3221225472 ST_position "-"; +BA_ "Invalid Value" SG_ 3221225472 ST_position "-"; +BA_ "FirstFrameValue" SG_ 3221225472 StarterInhibitorCutStatus "-"; +BA_ "Neutral Value" SG_ 3221225472 StarterInhibitorCutStatus "-"; +BA_ "Invalid Value" SG_ 3221225472 StarterInhibitorCutStatus "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PREDICTED_M_POWER "FFh"; +BA_ "Neutral Value" SG_ 3221225472 PREDICTED_M_POWER "-"; +BA_ "Invalid Value" SG_ 3221225472 PREDICTED_M_POWER "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 INSTANT_M_POWER "FFh"; +BA_ "Neutral Value" SG_ 3221225472 INSTANT_M_POWER "-"; +BA_ "Invalid Value" SG_ 3221225472 INSTANT_M_POWER "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 ALT_NO "0000b"; +BA_ "Invalid Value" SG_ 3221225472 ALT_NO "0000b"; +BA_ "FirstFrameValue" SG_ 3221225472 ROTOR_C "FFh"; +BA_ "Neutral Value" SG_ 3221225472 ROTOR_C "-"; +BA_ "Invalid Value" SG_ 3221225472 ROTOR_C "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 MOTOR_FAN "00b"; +BA_ "Neutral Value" SG_ 3221225472 MOTOR_FAN "-"; +BA_ "Invalid Value" SG_ 3221225472 MOTOR_FAN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STARTER "00b +11b(Only for BL1_2nd)"; +BA_ "Neutral Value" SG_ 3221225472 STARTER "-"; +BA_ "Invalid Value" SG_ 3221225472 STARTER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALT_DF "FFh"; +BA_ "Neutral Value" SG_ 3221225472 ALT_DF "-"; +BA_ "Invalid Value" SG_ 3221225472 ALT_DF "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 AC_FD_TYPE "0b"; +BA_ "Neutral Value" SG_ 3221225472 AC_FD_TYPE "-"; +BA_ "Invalid Value" SG_ 3221225472 AC_FD_TYPE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PWM_MFAN "-"; +BA_ "Neutral Value" SG_ 3221225472 PWM_MFAN "-"; +BA_ "Invalid Value" SG_ 3221225472 PWM_MFAN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MFDTY "00h"; +BA_ "Neutral Value" SG_ 3221225472 MFDTY "-"; +BA_ "Invalid Value" SG_ 3221225472 MFDTY "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GENEV_REQ "00h"; +BA_ "Neutral Value" SG_ 3221225472 GENEV_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 GENEV_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ALT_MAX "-"; +BA_ "Neutral Value" SG_ 3221225472 ALT_MAX "-"; +BA_ "Invalid Value" SG_ 3221225472 ALT_MAX "-"; +BA_ "FirstFrameValue" SG_ 3221225472 POW_ALL "0h"; +BA_ "Invalid Value" SG_ 3221225472 POW_ALL "*"; +BA_ "FirstFrameValue" SG_ 3221225472 CRNOKAT "00b"; +BA_ "Neutral Value" SG_ 3221225472 CRNOKAT "-"; +BA_ "Invalid Value" SG_ 3221225472 CRNOKAT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CRANOKECM "00b"; +BA_ "Neutral Value" SG_ 3221225472 CRANOKECM "-"; +BA_ "Invalid Value" SG_ 3221225472 CRANOKECM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 COMPDEST_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 COMPDEST_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 COMPDEST_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 INHI_CUTOFF "-"; +BA_ "Neutral Value" SG_ 3221225472 INHI_CUTOFF "-"; +BA_ "Invalid Value" SG_ 3221225472 INHI_CUTOFF "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MAX_POW_ALL "1Fh"; +BA_ "Neutral Value" SG_ 3221225472 MAX_POW_ALL "-"; +BA_ "Invalid Value" SG_ 3221225472 MAX_POW_ALL "1Fh"; +BA_ "FirstFrameValue" SG_ 3221225472 MOTOR_FAN_REQ "00b"; +BA_ "Neutral Value" SG_ 3221225472 MOTOR_FAN_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 MOTOR_FAN_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CANMASKorR_DEF_REQ "1b"; +BA_ "Neutral Value" SG_ 3221225472 CANMASKorR_DEF_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CANMASKorR_DEF_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 POW_CUT "-"; +BA_ "Neutral Value" SG_ 3221225472 POW_CUT "-"; +BA_ "Invalid Value" SG_ 3221225472 POW_CUT "11b"; +BA_ "FirstFrameValue" SG_ 3221225472 BUZZ_REQ_6MTA "-"; +BA_ "Neutral Value" SG_ 3221225472 BUZZ_REQ_6MTA "-"; +BA_ "Invalid Value" SG_ 3221225472 BUZZ_REQ_6MTA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 C_TORQUE "-"; +BA_ "Neutral Value" SG_ 3221225472 C_TORQUE "-"; +BA_ "Invalid Value" SG_ 3221225472 C_TORQUE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 C_STROKE "-"; +BA_ "Neutral Value" SG_ 3221225472 C_STROKE "-"; +BA_ "Invalid Value" SG_ 3221225472 C_STROKE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fFCW_SW_MAIN "-"; +BA_ "Neutral Value" SG_ 3221225472 fFCW_SW_MAIN "-"; +BA_ "Invalid Value" SG_ 3221225472 fFCW_SW_MAIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fLDW_SW_MAIN "-"; +BA_ "Neutral Value" SG_ 3221225472 fLDW_SW_MAIN "-"; +BA_ "Invalid Value" SG_ 3221225472 fLDW_SW_MAIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fLDP_SW_MAIN "-"; +BA_ "Neutral Value" SG_ 3221225472 fLDP_SW_MAIN "-"; +BA_ "Invalid Value" SG_ 3221225472 fLDP_SW_MAIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fCONTROL_LAMP_BLINK "-"; +BA_ "Neutral Value" SG_ 3221225472 fCONTROL_LAMP_BLINK "-"; +BA_ "Invalid Value" SG_ 3221225472 fCONTROL_LAMP_BLINK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 fINITIAL_STATE_CHANGE "-"; +BA_ "Neutral Value" SG_ 3221225472 fINITIAL_STATE_CHANGE "-"; +BA_ "Invalid Value" SG_ 3221225472 fINITIAL_STATE_CHANGE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS_REQUEST "-"; +BA_ "Neutral Value" SG_ 3221225472 PBS_REQUEST "-"; +BA_ "Invalid Value" SG_ 3221225472 PBS_REQUEST "-"; +BA_ "FirstFrameValue" SG_ 3221225472 R_ECD_FUNCTION "-"; +BA_ "Neutral Value" SG_ 3221225472 R_ECD_FUNCTION "-"; +BA_ "Invalid Value" SG_ 3221225472 R_ECD_FUNCTION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS2_PRESS_O_F "-"; +BA_ "Neutral Value" SG_ 3221225472 PBS2_PRESS_O_F "-"; +BA_ "Invalid Value" SG_ 3221225472 PBS2_PRESS_O_F "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PBS2_PRESS_G_F "-"; +BA_ "Neutral Value" SG_ 3221225472 PBS2_PRESS_G_F "-"; +BA_ "Invalid Value" SG_ 3221225472 PBS2_PRESS_G_F "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CONTROU_BYTE "-"; +BA_ "Neutral Value" SG_ 3221225472 CONTROU_BYTE "-"; +BA_ "Invalid Value" SG_ 3221225472 CONTROU_BYTE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STARTING_LOW_CUT "-"; +BA_ "Neutral Value" SG_ 3221225472 STARTING_LOW_CUT "-"; +BA_ "Invalid Value" SG_ 3221225472 STARTING_LOW_CUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 O_REDUCE_S_VALUE "-"; +BA_ "Neutral Value" SG_ 3221225472 O_REDUCE_S_VALUE "-"; +BA_ "Invalid Value" SG_ 3221225472 O_REDUCE_S_VALUE "-"; +BA_ "Invalid Value" SG_ 3221225472 P_DMND "-"; +BA_ "Neutral Value" SG_ 3221225472 P_DMND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 P_DMND "-"; +BA_ "Invalid Value" SG_ 3221225472 ETSWRN2 "-"; +BA_ "Neutral Value" SG_ 3221225472 ETSWRN2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETSWRN2 "-"; +BA_ "Invalid Value" SG_ 3221225472 ETSWRN1 "-"; +BA_ "Neutral Value" SG_ 3221225472 ETSWRN1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETSWRN1 "-"; +BA_ "Invalid Value" SG_ 3221225472 ATPWL "-"; +BA_ "Neutral Value" SG_ 3221225472 ATPWL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATPWL "-"; +BA_ "Invalid Value" SG_ 3221225472 OFFROAD_SW "-"; +BA_ "Neutral Value" SG_ 3221225472 OFFROAD_SW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 OFFROAD_SW "-"; +BA_ "Invalid Value" SG_ 3221225472 TVIR_RR "-"; +BA_ "Neutral Value" SG_ 3221225472 TVIR_RR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TVIR_RR "000b"; +BA_ "Invalid Value" SG_ 3221225472 TVIR_RL "-"; +BA_ "Neutral Value" SG_ 3221225472 TVIR_RL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TVIR_RL "000b"; +BA_ "Invalid Value" SG_ 3221225472 TDR_FR "-"; +BA_ "Neutral Value" SG_ 3221225472 TDR_FR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TDR_FR "00h"; +BA_ "Invalid Value" SG_ 3221225472 CLOCK "-"; +BA_ "Neutral Value" SG_ 3221225472 CLOCK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CLOCK "-"; +BA_ "Invalid Value" SG_ 3221225472 CNIDLE "-"; +BA_ "Neutral Value" SG_ 3221225472 CNIDLE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CNIDLE "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 SGSLLURQ "-"; +BA_ "Neutral Value" SG_ 3221225472 SGSLLURQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SGSLLURQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NIDLEOK "0b"; +BA_ "Neutral Value" SG_ 3221225472 NIDLEOK "-"; +BA_ "Invalid Value" SG_ 3221225472 NIDLEOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GSENSOR "000h"; +BA_ "Neutral Value" SG_ 3221225472 GSENSOR "-"; +BA_ "Invalid Value" SG_ 3221225472 GSENSOR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RSTREQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 RSTREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 RSTREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 VELHGTNE "000b"; +BA_ "Neutral Value" SG_ 3221225472 VELHGTNE "-"; +BA_ "Invalid Value" SG_ 3221225472 VELHGTNE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TTER "000h"; +BA_ "Neutral Value" SG_ 3221225472 TTER "-"; +BA_ "Invalid Value" SG_ 3221225472 TTER "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ADVCD5 "0b"; +BA_ "Neutral Value" SG_ 3221225472 ADVCD5 "-"; +BA_ "Invalid Value" SG_ 3221225472 ADVCD5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CRANKING_PERMISSION "1b"; +BA_ "Neutral Value" SG_ 3221225472 CRANKING_PERMISSION "-"; +BA_ "Invalid Value" SG_ 3221225472 CRANKING_PERMISSION "0b"; +BA_ "FirstFrameValue" SG_ 3221225472 SPDCTINH "1b"; +BA_ "Neutral Value" SG_ 3221225472 SPDCTINH "-"; +BA_ "Invalid Value" SG_ 3221225472 SPDCTINH "-"; +BA_ "Invalid Value" SG_ 3221225472 CLUTCHSW "11b"; +BA_ "Neutral Value" SG_ 3221225472 CLUTCHSW "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CLUTCHSW "00b"; +BA_ "Invalid Value" SG_ 3221225472 ETSTRQAC "-"; +BA_ "Neutral Value" SG_ 3221225472 ETSTRQAC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ETSTRQAC "1b"; +BA_ "FirstFrameValue" SG_ 3221225472 OIL_DRAIN_ALERT "00b"; +BA_ "Neutral Value" SG_ 3221225472 OIL_DRAIN_ALERT "-"; +BA_ "Invalid Value" SG_ 3221225472 OIL_DRAIN_ALERT "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 FREE_SHIFT "00b"; +BA_ "Neutral Value" SG_ 3221225472 FREE_SHIFT "-"; +BA_ "Invalid Value" SG_ 3221225472 FREE_SHIFT "00b"; +BA_ "FirstFrameValue" SG_ 3221225472 PFILTER_FAILDIS "-"; +BA_ "Neutral Value" SG_ 3221225472 PFILTER_FAILDIS "-"; +BA_ "Invalid Value" SG_ 3221225472 PFILTER_FAILDIS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TAPREQ "FFh"; +BA_ "Neutral Value" SG_ 3221225472 TAPREQ "-"; +BA_ "Invalid Value" SG_ 3221225472 TAPREQ "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 RAWP "FFh"; +BA_ "Neutral Value" SG_ 3221225472 RAWP "-"; +BA_ "Invalid Value" SG_ 3221225472 RAWP "FFh"; +BA_ "FirstFrameValue" SG_ 3221225472 TTEPTD_ETRQDR_VCM "-"; +BA_ "Neutral Value" SG_ 3221225472 TTEPTD_ETRQDR_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 TTEPTD_ETRQDR_VCM "7FFh"; +BA_ "Invalid Value" SG_ 3221225472 TENG_VCM "7FFh"; +BA_ "Neutral Value" SG_ 3221225472 TENG_VCM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TENG_VCM "-"; +BA_ "Invalid Value" SG_ 3221225472 SHIFT_IND "-"; +BA_ "Neutral Value" SG_ 3221225472 SHIFT_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SHIFT_IND "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MSR_S_I "0b"; +BA_ "Neutral Value" SG_ 3221225472 MSR_S_I "-"; +BA_ "Invalid Value" SG_ 3221225472 MSR_S_I "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RawPedal_APOFS "000h,HCM(IM)=-"; +BA_ "Neutral Value" SG_ 3221225472 RawPedal_APOFS "-"; +BA_ "Invalid Value" SG_ 3221225472 RawPedal_APOFS "-"; +BA_ "Invalid Value" SG_ 3221225472 TTEPTD_ETRQDR "-"; +BA_ "Neutral Value" SG_ 3221225472 TTEPTD_ETRQDR "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TTEPTD_ETRQDR "-"; +BA_ "Invalid Value" SG_ 3221225472 TACVTOK "-"; +BA_ "Neutral Value" SG_ 3221225472 TACVTOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TACVTOK "0b"; +BA_ "Invalid Value" SG_ 3221225472 AT_drag_torque "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_drag_torque "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_drag_torque "00h"; +BA_ "Invalid Value" SG_ 3221225472 Shiftting_pattern_signal "-"; +BA_ "Neutral Value" SG_ 3221225472 Shiftting_pattern_signal "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Shiftting_pattern_signal "11111b"; +BA_ "Invalid Value" SG_ 3221225472 Torque_down_rate_signal "-"; +BA_ "Neutral Value" SG_ 3221225472 Torque_down_rate_signal "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Torque_down_rate_signal "00h"; +BA_ "Invalid Value" SG_ 3221225472 CNISCREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 CNISCREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CNISCREQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 CNIDLSTB "-"; +BA_ "Neutral Value" SG_ 3221225472 CNIDLSTB "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CNIDLSTB "0b"; +BA_ "Invalid Value" SG_ 3221225472 ECO_TH_GAIN "-"; +BA_ "Neutral Value" SG_ 3221225472 ECO_TH_GAIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ECO_TH_GAIN "000h"; +BA_ "Invalid Value" SG_ 3221225472 M4WDINSIG "-"; +BA_ "Neutral Value" SG_ 3221225472 M4WDINSIG "-"; +BA_ "FirstFrameValue" SG_ 3221225472 M4WDINSIG "0b"; +BA_ "Invalid Value" SG_ 3221225472 ADFCRREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ADFCRREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ADFCRREQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 NIDLELRN "-"; +BA_ "Neutral Value" SG_ 3221225472 NIDLELRN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 NIDLELRN "0b"; +BA_ "Invalid Value" SG_ 3221225472 ATSLREQ "-"; +BA_ "Neutral Value" SG_ 3221225472 ATSLREQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATSLREQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 PRIRTD_L "-"; +BA_ "Neutral Value" SG_ 3221225472 PRIRTD_L "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRIRTD_L "0b"; +BA_ "Invalid Value" SG_ 3221225472 CVTFALVDC "-"; +BA_ "Neutral Value" SG_ 3221225472 CVTFALVDC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CVTFALVDC "0h"; +BA_ "Invalid Value" SG_ 3221225472 TORQUE_CONTROL_PROHIBIT "-"; +BA_ "Neutral Value" SG_ 3221225472 TORQUE_CONTROL_PROHIBIT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TORQUE_CONTROL_PROHIBIT "1b"; +BA_ "Invalid Value" SG_ 3221225472 RATIO02 "-"; +BA_ "Neutral Value" SG_ 3221225472 RATIO02 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RATIO02 "DX : 183B2h,FK-K2:0F14Ch,FK*K2:10719h"; +BA_ "Invalid Value" SG_ 3221225472 AscMode_Status "-"; +BA_ "Neutral Value" SG_ 3221225472 AscMode_Status "000b"; +BA_ "FirstFrameValue" SG_ 3221225472 AscMode_Status "000b"; +BA_ "Invalid Value" SG_ 3221225472 AT_TorquRequestProgress "-"; +BA_ "Neutral Value" SG_ 3221225472 AT_TorquRequestProgress "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AT_TorquRequestProgress "-"; +BA_ "Invalid Value" SG_ 3221225472 Anti_RGB_PUMP_STA "-"; +BA_ "Neutral Value" SG_ 3221225472 Anti_RGB_PUMP_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 Anti_RGB_PUMP_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 CRANKING_AUTHORISATION "-"; +BA_ "Neutral Value" SG_ 3221225472 CRANKING_AUTHORISATION "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CRANKING_AUTHORISATION "11b"; +BA_ "Invalid Value" SG_ 3221225472 GP "1111b"; +BA_ "Neutral Value" SG_ 3221225472 GP "-"; +BA_ "FirstFrameValue" SG_ 3221225472 GP "-"; +BA_ "Invalid Value" SG_ 3221225472 TORQUE_REQ_PROGRESS "-"; +BA_ "Neutral Value" SG_ 3221225472 TORQUE_REQ_PROGRESS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TORQUE_REQ_PROGRESS "0b"; +BA_ "Invalid Value" SG_ 3221225472 FAN_REQ "-"; +BA_ "Neutral Value" SG_ 3221225472 FAN_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FAN_REQ "0b"; +BA_ "Invalid Value" SG_ 3221225472 MAJOR_FAIL "-"; +BA_ "Neutral Value" SG_ 3221225472 MAJOR_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 MAJOR_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 E_NIDLE_RQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 E_NIDLE_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 E_NIDLE_RQ "-"; +BA_ "Invalid Value" SG_ 3221225472 ATTRQAC "-"; +BA_ "Neutral Value" SG_ 3221225472 ATTRQAC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ATTRQAC "1b"; +BA_ "Invalid Value" SG_ 3221225472 FD3LU_FDTLIN_FDTLIN2 "-"; +BA_ "Neutral Value" SG_ 3221225472 FD3LU_FDTLIN_FDTLIN2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FD3LU_FDTLIN_FDTLIN2 "00b"; +BA_ "Invalid Value" SG_ 3221225472 EngineTorque_WithoutGBReq "-"; +BA_ "Neutral Value" SG_ 3221225472 EngineTorque_WithoutGBReq "-"; +BA_ "FirstFrameValue" SG_ 3221225472 EngineTorque_WithoutGBReq "000h"; +BA_ "Invalid Value" SG_ 3221225472 BLS "-"; +BA_ "Neutral Value" SG_ 3221225472 BLS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BLS "-"; +BA_ "Invalid Value" SG_ 3221225472 PRC_FUNC "-"; +BA_ "Neutral Value" SG_ 3221225472 PRC_FUNC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRC_FUNC "-"; +BA_ "Invalid Value" SG_ 3221225472 BA_FUNC "-"; +BA_ "Neutral Value" SG_ 3221225472 BA_FUNC "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BA_FUNC "-"; +BA_ "Invalid Value" SG_ 3221225472 CTRLBYTE "-"; +BA_ "Neutral Value" SG_ 3221225472 CTRLBYTE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CTRLBYTE "-"; +BA_ "Invalid Value" SG_ 3221225472 RESETSWA "-"; +BA_ "Neutral Value" SG_ 3221225472 RESETSWA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 RESETSWA "1b"; +BA_ "Invalid Value" SG_ 3221225472 SWA_STA "010b"; +BA_ "Neutral Value" SG_ 3221225472 SWA_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SWA_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 STRSPEED "FFFFh"; +BA_ "Neutral Value" SG_ 3221225472 STRSPEED "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRSPEED "-"; +BA_ "Invalid Value" SG_ 3221225472 STRANGLE "FFFFh"; +BA_ "Neutral Value" SG_ 3221225472 STRANGLE "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STRANGLE "-"; +BA_ "Invalid Value" SG_ 3221225472 FILL2 "Except for 00h, 2Ah"; +BA_ "Neutral Value" SG_ 3221225472 FILL2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FILL2 "00h"; +BA_ "Invalid Value" SG_ 3221225472 FILL1 "Except for 00h, D5h"; +BA_ "Neutral Value" SG_ 3221225472 FILL1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 FILL1 "00h"; +BA_ "FirstFrameValue" SG_ 3221225472 _2ND_ROW_R_BELT_STA "11b"; +BA_ "Neutral Value" SG_ 3221225472 _2ND_ROW_R_BELT_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 _2ND_ROW_R_BELT_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 _2ND_ROW_L_BELT_STA "11b"; +BA_ "Neutral Value" SG_ 3221225472 _2ND_ROW_L_BELT_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 _2ND_ROW_L_BELT_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 _2ND_ROW_C_BELT_STA "11b"; +BA_ "Neutral Value" SG_ 3221225472 _2ND_ROW_C_BELT_STA "-"; +BA_ "Invalid Value" SG_ 3221225472 _2ND_ROW_C_BELT_STA "-"; +BA_ "FirstFrameValue" SG_ 3221225472 BELT_BUCK_STA_PASS "11b"; +BA_ "Neutral Value" SG_ 3221225472 BELT_BUCK_STA_PASS "-"; +BA_ "Invalid Value" SG_ 3221225472 BELT_BUCK_STA_PASS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 AIRBAG_FAIL "1b"; +BA_ "Neutral Value" SG_ 3221225472 AIRBAG_FAIL "-"; +BA_ "Invalid Value" SG_ 3221225472 AIRBAG_FAIL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 A_B_LIGHT_CRSH_ORD "-"; +BA_ "Neutral Value" SG_ 3221225472 A_B_LIGHT_CRSH_ORD "-"; +BA_ "Invalid Value" SG_ 3221225472 A_B_LIGHT_CRSH_ORD "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PRE_ROLL_OUT "0b"; +BA_ "Neutral Value" SG_ 3221225472 PRE_ROLL_OUT "-"; +BA_ "Invalid Value" SG_ 3221225472 PRE_ROLL_OUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ROLLOVER_OUT "0b"; +BA_ "Neutral Value" SG_ 3221225472 ROLLOVER_OUT "-"; +BA_ "Invalid Value" SG_ 3221225472 ROLLOVER_OUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ROLL_MALFUNC_OUT "0b"; +BA_ "Neutral Value" SG_ 3221225472 ROLL_MALFUNC_OUT "-"; +BA_ "Invalid Value" SG_ 3221225472 ROLL_MALFUNC_OUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ROLL_BAR_OUT "0b"; +BA_ "Neutral Value" SG_ 3221225472 ROLL_BAR_OUT "-"; +BA_ "Invalid Value" SG_ 3221225472 ROLL_BAR_OUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 ROLL_BAR_MALFUNC_OUT "0b"; +BA_ "Neutral Value" SG_ 3221225472 ROLL_BAR_MALFUNC_OUT "-"; +BA_ "Invalid Value" SG_ 3221225472 ROLL_BAR_MALFUNC_OUT "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CUT_OFF_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 CUT_OFF_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 CUT_OFF_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 SERV_LMP_REQ "0b"; +BA_ "Neutral Value" SG_ 3221225472 SERV_LMP_REQ "-"; +BA_ "Invalid Value" SG_ 3221225472 SERV_LMP_REQ "-"; +BA_ "FirstFrameValue" SG_ 3221225472 A_B_CRSH_ORD "0000h"; +BA_ "Neutral Value" SG_ 3221225472 A_B_CRSH_ORD "-"; +BA_ "Invalid Value" SG_ 3221225472 A_B_CRSH_ORD "-"; +BA_ "Invalid Value" SG_ 3221225472 CHECKSUM2 "-"; +BA_ "Neutral Value" SG_ 3221225472 CHECKSUM2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 CHECKSUM2 "-"; +BA_ "Invalid Value" SG_ 3221225472 PSICOS "FFh"; +BA_ "Neutral Value" SG_ 3221225472 PSICOS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSICOS "-"; +BA_ "Invalid Value" SG_ 3221225472 PSISIN "FFh"; +BA_ "Neutral Value" SG_ 3221225472 PSISIN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 PSISIN "-"; +BA_ "Invalid Value" SG_ 3221225472 TEST5 "-"; +BA_ "Neutral Value" SG_ 3221225472 TEST5 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEST5 "-"; +BA_ "Invalid Value" SG_ 3221225472 TEST4 "-"; +BA_ "Neutral Value" SG_ 3221225472 TEST4 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEST4 "-"; +BA_ "Invalid Value" SG_ 3221225472 TEST3 "-"; +BA_ "Neutral Value" SG_ 3221225472 TEST3 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEST3 "-"; +BA_ "Invalid Value" SG_ 3221225472 TEST2 "-"; +BA_ "Neutral Value" SG_ 3221225472 TEST2 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEST2 "-"; +BA_ "Invalid Value" SG_ 3221225472 TEST1 "-"; +BA_ "Neutral Value" SG_ 3221225472 TEST1 "-"; +BA_ "FirstFrameValue" SG_ 3221225472 TEST1 "-"; +BA_ "Invalid Value" SG_ 3221225472 LWSTRIM "-"; +BA_ "Neutral Value" SG_ 3221225472 LWSTRIM "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LWSTRIM "-"; +BA_ "Invalid Value" SG_ 3221225472 LWSCAL "-"; +BA_ "Neutral Value" SG_ 3221225472 LWSCAL "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LWSCAL "-"; +BA_ "Invalid Value" SG_ 3221225472 LWSOK "-"; +BA_ "Neutral Value" SG_ 3221225472 LWSOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 LWSOK "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_D_BS "-"; +BA_ "Neutral Value" SG_ 3221225472 STS_D_BS "-"; +BA_ "Invalid Value" SG_ 3221225472 STS_D_BS "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_D_LN "-"; +BA_ "Neutral Value" SG_ 3221225472 STS_D_LN "-"; +BA_ "Invalid Value" SG_ 3221225472 STS_D_LN "-"; +BA_ "FirstFrameValue" SG_ 3221225472 STS_W_LN "-"; +BA_ "Neutral Value" SG_ 3221225472 STS_W_LN "-"; +BA_ "Invalid Value" SG_ 3221225472 STS_W_LN "-"; +BA_ "Invalid Value" SG_ 452 CHKSUM "-"; +BA_ "Neutral Value" SG_ 452 CHKSUM "-"; +BA_ "FirstFrameValue" SG_ 452 CHKSUM "0h"; +BA_ "Invalid Value" SG_ 452 TRGT_YAW_INV "-"; +BA_ "Neutral Value" SG_ 452 TRGT_YAW_INV "-"; +BA_ "FirstFrameValue" SG_ 452 TRGT_YAW_INV "0000h"; +BA_ "Invalid Value" SG_ 452 MSG_CNT "-"; +BA_ "Neutral Value" SG_ 452 MSG_CNT "-"; +BA_ "FirstFrameValue" SG_ 452 MSG_CNT "-"; +BA_ "Invalid Value" SG_ 452 BLS_ON_flag "-"; +BA_ "Neutral Value" SG_ 452 BLS_ON_flag "-"; +BA_ "FirstFrameValue" SG_ 452 BLS_ON_flag "0b"; +BA_ "Invalid Value" SG_ 452 SHIFT_STOP_REQ_VDC "-"; +BA_ "Neutral Value" SG_ 452 SHIFT_STOP_REQ_VDC "-"; +BA_ "FirstFrameValue" SG_ 452 SHIFT_STOP_REQ_VDC "0b"; +BA_ "Invalid Value" SG_ 452 CBA_REQ "-"; +BA_ "Neutral Value" SG_ 452 CBA_REQ "-"; +BA_ "FirstFrameValue" SG_ 452 CBA_REQ "0b"; +BA_ "Invalid Value" SG_ 452 FCAAS_REQUEST "-"; +BA_ "Neutral Value" SG_ 452 FCAAS_REQUEST "-"; +BA_ "FirstFrameValue" SG_ 452 FCAAS_REQUEST "0b"; +BA_ "Invalid Value" SG_ 452 PBA_REQUEST "-"; +BA_ "Neutral Value" SG_ 452 PBA_REQUEST "-"; +BA_ "FirstFrameValue" SG_ 452 PBA_REQUEST "0b"; +BA_ "Invalid Value" SG_ 452 ACC_REQUEST "-"; +BA_ "Neutral Value" SG_ 452 ACC_REQUEST "-"; +BA_ "FirstFrameValue" SG_ 452 ACC_REQUEST "0b"; +BA_ "Invalid Value" SG_ 452 YMC_REQ "-"; +BA_ "Neutral Value" SG_ 452 YMC_REQ "-"; +BA_ "FirstFrameValue" SG_ 452 YMC_REQ "0b"; +BA_ "Invalid Value" SG_ 452 PRSSR_DISTRBT "-"; +BA_ "Neutral Value" SG_ 452 PRSSR_DISTRBT "-"; +BA_ "FirstFrameValue" SG_ 452 PRSSR_DISTRBT "00h"; +BA_ "Invalid Value" SG_ 452 PUMP_STOP_REQ "-"; +BA_ "Neutral Value" SG_ 452 PUMP_STOP_REQ "-"; +BA_ "FirstFrameValue" SG_ 452 PUMP_STOP_REQ "0b"; +BA_ "Invalid Value" SG_ 452 PUMP_MAP_TYPE "-"; +BA_ "Neutral Value" SG_ 452 PUMP_MAP_TYPE "-"; +BA_ "FirstFrameValue" SG_ 452 PUMP_MAP_TYPE "00b"; +BA_ "Invalid Value" SG_ 452 BRK_PRSSR_DIST_REQ "-"; +BA_ "Neutral Value" SG_ 452 BRK_PRSSR_DIST_REQ "-"; +BA_ "FirstFrameValue" SG_ 452 BRK_PRSSR_DIST_REQ "0b"; +BA_ "Invalid Value" SG_ 452 LDP_SHIFTMP_CHR_REQ_VDC "-"; +BA_ "Neutral Value" SG_ 452 LDP_SHIFTMP_CHR_REQ_VDC "-"; +BA_ "FirstFrameValue" SG_ 452 LDP_SHIFTMP_CHR_REQ_VDC "00b"; +BA_ "Invalid Value" SG_ 452 AUTOSTOP "-"; +BA_ "Neutral Value" SG_ 452 AUTOSTOP "-"; +BA_ "FirstFrameValue" SG_ 452 AUTOSTOP "0b"; +BA_ "Invalid Value" SG_ 452 ITS_TRGT_YAW "-"; +BA_ "Neutral Value" SG_ 452 ITS_TRGT_YAW "-"; +BA_ "FirstFrameValue" SG_ 452 ITS_TRGT_YAW "0000h"; +BA_ "Invalid Value" SG_ 452 ITS_TRGT_PRSSR "-"; +BA_ "Neutral Value" SG_ 452 ITS_TRGT_PRSSR "-"; +BA_ "FirstFrameValue" SG_ 452 ITS_TRGT_PRSSR "-"; +BA_ "Invalid Value" SG_ 372 CURGP "-"; +BA_ "Neutral Value" SG_ 372 CURGP "CVT FK1st:N = 1111b..."; +BA_ "FirstFrameValue" SG_ 372 CURGP "CVT FK1st:0001b..."; +BA_ "Invalid Value" SG_ 451 CHKSUM "-"; +BA_ "Neutral Value" SG_ 451 CHKSUM "-"; +BA_ "FirstFrameValue" SG_ 451 CHKSUM "0h"; +BA_ "Invalid Value" SG_ 451 TRGT_YAW_INV "-"; +BA_ "Neutral Value" SG_ 451 TRGT_YAW_INV "-"; +BA_ "FirstFrameValue" SG_ 451 TRGT_YAW_INV "0000h"; +BA_ "Invalid Value" SG_ 451 MSG_CNT "-"; +BA_ "Neutral Value" SG_ 451 MSG_CNT "-"; +BA_ "FirstFrameValue" SG_ 451 MSG_CNT "-"; +BA_ "Invalid Value" SG_ 451 BLS_ON_flag "-"; +BA_ "Neutral Value" SG_ 451 BLS_ON_flag "-"; +BA_ "FirstFrameValue" SG_ 451 BLS_ON_flag "0b"; +BA_ "Invalid Value" SG_ 451 SHIFT_STOP_REQ_VDC "-"; +BA_ "Neutral Value" SG_ 451 SHIFT_STOP_REQ_VDC "-"; +BA_ "FirstFrameValue" SG_ 451 SHIFT_STOP_REQ_VDC "0b"; +BA_ "Invalid Value" SG_ 451 CBA_REQ "-"; +BA_ "Neutral Value" SG_ 451 CBA_REQ "-"; +BA_ "FirstFrameValue" SG_ 451 CBA_REQ "0b"; +BA_ "Invalid Value" SG_ 451 FCAAS_REQUEST "-"; +BA_ "Neutral Value" SG_ 451 FCAAS_REQUEST "-"; +BA_ "FirstFrameValue" SG_ 451 FCAAS_REQUEST "0b"; +BA_ "Invalid Value" SG_ 451 PBA_REQUEST "-"; +BA_ "Neutral Value" SG_ 451 PBA_REQUEST "-"; +BA_ "FirstFrameValue" SG_ 451 PBA_REQUEST "0b"; +BA_ "Invalid Value" SG_ 451 ACC_REQUEST "-"; +BA_ "Neutral Value" SG_ 451 ACC_REQUEST "-"; +BA_ "FirstFrameValue" SG_ 451 ACC_REQUEST "0b"; +BA_ "Invalid Value" SG_ 451 YMC_REQ "-"; +BA_ "Neutral Value" SG_ 451 YMC_REQ "-"; +BA_ "FirstFrameValue" SG_ 451 YMC_REQ "0b"; +BA_ "Invalid Value" SG_ 451 PRSSR_DISTRBT "-"; +BA_ "Neutral Value" SG_ 451 PRSSR_DISTRBT "-"; +BA_ "FirstFrameValue" SG_ 451 PRSSR_DISTRBT "00h"; +BA_ "Invalid Value" SG_ 451 PUMP_STOP_REQ "-"; +BA_ "Neutral Value" SG_ 451 PUMP_STOP_REQ "-"; +BA_ "FirstFrameValue" SG_ 451 PUMP_STOP_REQ "0b"; +BA_ "Invalid Value" SG_ 451 PUMP_MAP_TYPE "-"; +BA_ "Neutral Value" SG_ 451 PUMP_MAP_TYPE "-"; +BA_ "FirstFrameValue" SG_ 451 PUMP_MAP_TYPE "00b"; +BA_ "Invalid Value" SG_ 451 BRK_PRSSR_DIST_REQ "-"; +BA_ "Neutral Value" SG_ 451 BRK_PRSSR_DIST_REQ "-"; +BA_ "FirstFrameValue" SG_ 451 BRK_PRSSR_DIST_REQ "0b"; +BA_ "Invalid Value" SG_ 451 LDP_SHIFTMP_CHR_REQ_VDC "-"; +BA_ "Neutral Value" SG_ 451 LDP_SHIFTMP_CHR_REQ_VDC "-"; +BA_ "FirstFrameValue" SG_ 451 LDP_SHIFTMP_CHR_REQ_VDC "00b"; +BA_ "Invalid Value" SG_ 451 AUTOSTOP "-"; +BA_ "Neutral Value" SG_ 451 AUTOSTOP "-"; +BA_ "FirstFrameValue" SG_ 451 AUTOSTOP "0b"; +BA_ "Invalid Value" SG_ 451 ITS_TRGT_YAW "-"; +BA_ "Neutral Value" SG_ 451 ITS_TRGT_YAW "-"; +BA_ "FirstFrameValue" SG_ 451 ITS_TRGT_YAW "0000h"; +BA_ "Invalid Value" SG_ 451 ITS_TRGT_PRSSR "-"; +BA_ "Neutral Value" SG_ 451 ITS_TRGT_PRSSR "-"; +BA_ "FirstFrameValue" SG_ 451 ITS_TRGT_PRSSR "-"; +BA_ "Invalid Value" SG_ 658 YAW_RATE_02 "FFFh"; +BA_ "Neutral Value" SG_ 658 YAW_RATE_02 "-"; +BA_ "FirstFrameValue" SG_ 658 YAW_RATE_02 "FFFh"; +BA_ "Invalid Value" SG_ 658 TRANS_ACC_02 "FFFh"; +BA_ "Neutral Value" SG_ 658 TRANS_ACC_02 "-"; +BA_ "FirstFrameValue" SG_ 658 TRANS_ACC_02 "FFFh"; +BA_ "FirstFrameValue" SG_ 658 LONG_ACC_02 "FFFh"; +BA_ "Neutral Value" SG_ 658 LONG_ACC_02 "-"; +BA_ "Invalid Value" SG_ 658 LONG_ACC_02 "FFFh"; +BA_ "FirstFrameValue" SG_ 1549 TURN_IND "000b"; +BA_ "Neutral Value" SG_ 1549 TURN_IND "-"; +BA_ "Invalid Value" SG_ 1549 TURN_IND "100b,101b,110b,111b"; +BA_ "FirstFrameValue" SG_ 1549 HL_HIGH_REQ "0b"; +BA_ "Neutral Value" SG_ 1549 HL_HIGH_REQ "-"; +BA_ "Invalid Value" SG_ 1549 HL_HIGH_REQ "-"; +BA_ "FirstFrameValue" SG_ 1549 TAIL_L_REQ "0b"; +BA_ "Neutral Value" SG_ 1549 TAIL_L_REQ "-"; +BA_ "Invalid Value" SG_ 1549 TAIL_L_REQ "-"; +BA_ "FirstFrameValue" SG_ 1549 HL_LOW_REQ "0b"; +BA_ "Neutral Value" SG_ 1549 HL_LOW_REQ "-"; +BA_ "Invalid Value" SG_ 1549 HL_LOW_REQ "-"; +BA_ "FirstFrameValue" SG_ 861 CABRESW "00b"; +BA_ "Neutral Value" SG_ 861 CABRESW "-"; +BA_ "Invalid Value" SG_ 861 CABRESW "11b"; +BA_ "FirstFrameValue" SG_ 861 FR_WIP_REQ "000b"; +BA_ "Neutral Value" SG_ 861 FR_WIP_REQ "-"; +BA_ "Invalid Value" SG_ 861 FR_WIP_REQ "100b,101b"; +BA_ "Invalid Value" SG_ 852 ABSACT "-"; +BA_ "Neutral Value" SG_ 852 ABSACT "-"; +BA_ "FirstFrameValue" SG_ 852 ABSACT "0b"; +BA_ "FirstFrameValue" SG_ 852 ODOMETER "0000h"; +BA_ "Neutral Value" SG_ 852 ODOMETER "-"; +BA_ "Invalid Value" SG_ 852 ODOMETER "-"; +BA_ "FirstFrameValue" SG_ 644 VSO "others: - +HITACHI: 0000h"; +BA_ "Neutral Value" SG_ 644 VSO "-"; +BA_ "Invalid Value" SG_ 644 VSO "FFFFh"; +BA_ "FirstFrameValue" SG_ 581 TCSACT "0b"; +BA_ "Neutral Value" SG_ 581 TCSACT "-"; +BA_ "Invalid Value" SG_ 581 TCSACT "-"; +BA_ "FirstFrameValue" SG_ 581 VDCACT "0b"; +BA_ "Neutral Value" SG_ 581 VDCACT "-"; +BA_ "Invalid Value" SG_ 581 VDCACT "-"; +BA_ "FirstFrameValue" SG_ 581 OFF_SW "-"; +BA_ "Neutral Value" SG_ 581 OFF_SW "-"; +BA_ "Invalid Value" SG_ 581 OFF_SW "-"; +BA_ "FirstFrameValue" SG_ 386 V_APO "00h"; +BA_ "Neutral Value" SG_ 386 V_APO "-"; +BA_ "Invalid Value" SG_ 386 V_APO "-"; +BA_ "Invalid Value" SG_ 2 STRSPEED "FFh"; +BA_ "Neutral Value" SG_ 2 STRSPEED "-"; +BA_ "FirstFrameValue" SG_ 2 STRSPEED "-"; +BA_ "Invalid Value" SG_ 2 STRANGLE "7FFFh"; +BA_ "Neutral Value" SG_ 2 STRANGLE "-"; +BA_ "FirstFrameValue" SG_ 2 STRANGLE "-"; +VAL_ 3221225472 DAS_Warn 1 "warning" 0 "No warning" ; +VAL_ 3221225472 DAS_Attention_Level 15 "System Malfunction" 14 "System Stand by" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Level 8" 8 "Level 7" 7 "Level 6" 6 "Level 5" 5 "Level 4" 4 "Level 3" 3 "Level 2" 2 "Level 1" 1 "System OFF" 0 "No display" ; +VAL_ 3221225472 MSS_OFF_A_BW 1 "Disp 'BCI OFF' " 0 "No message" ; +VAL_ 3221225472 MSS_MAL_A_BW 1 "Disp 'BCI malfunction' " 0 "No message" ; +VAL_ 3221225472 MSS_MAL_A_FW 1 "Disp 'FCA malfunction' " 0 "No message" ; +VAL_ 3221225472 MSS_MAL_D_BS 1 "Disp 'BSI malfunction' " 0 "No message" ; +VAL_ 3221225472 MSS_MAL_D_LN 1 "Disp 'LDP malfunction' " 0 "No message" ; +VAL_ 3221225472 MSS_MAL_D_FW 1 "Disp 'DCA malfunction' " 0 "No message" ; +VAL_ 3221225472 MSS_SB_A_BW 1 "Disp 'BCI Side radar blocked'" 0 "No message" ; +VAL_ 3221225472 MSS_SB_D_BS 1 "Disp 'BSI Side radar blocked'" 0 "No message" ; +VAL_ 3221225472 MSS_SB_W_BS 1 "Disp 'BSW Side radar blocked'" 0 "No message" ; +VAL_ 3221225472 MSS_C_D_BS 1 "BSI cancel" 0 "No display" ; +VAL_ 3221225472 MSS_C_D_LN 1 "LDP cancel" 0 "No display" ; +VAL_ 3221225472 MSS_C_D_FW 1 "DCA cancel" 0 "No display" ; +VAL_ 3221225472 MSS_C_CC 1 "Cruise system cancel" 0 "No display" ; +VAL_ 3221225472 MSS_CNCL_C 3 "Disp VDC OFF cancel MSG" 2 "Disp Snow mode active cancel MSG" 1 "Disp Slippery load cancel MSG" 0 "No display" ; +VAL_ 3221225472 MSS_NO_W 1 "Disp NoSelectDrivingAids(WRN)MSG" 0 "No message" ; +VAL_ 3221225472 MSS_NO_D 1 "Disp NoSelectDrivingAids(DYN)MSG" 0 "No message" ; +VAL_ 3221225472 MSS_FB_A_FW 1 "Disp 'FCA Fr. radar blocked'" 0 "No message" ; +VAL_ 3221225472 MSS_FB_D_FW 1 "Disp 'DCA Fr. radar blocked'" 0 "No message" ; +VAL_ 3221225472 MSS_FB_W_FW 1 "Disp 'FCW Fr. radar blocked'" 0 "No message" ; +VAL_ 3221225472 MSS_FB_CC 1 "Disp 'CRUISE Fr. radar blocked'" 0 "No message" ; +VAL_ 3221225472 MSS_CH_D_BS 1 "Disp 'BSI Camera high temp.'" 0 "No message" ; +VAL_ 3221225472 MSS_CH_D_LN 1 "Disp 'LDP Camera high temp.'" 0 "No message" ; +VAL_ 3221225472 MSS_CH_W_LN 1 "Disp 'LDW Camera high temp.'" 0 "No message" ; +VAL_ 3221225472 MSS_MAL_W_BS 1 "Disp 'BSW malfunction'" 0 "No message" ; +VAL_ 3221225472 MSS_MAL_W_LN 1 "Disp 'LDW malfunction'" 0 "No message" ; +VAL_ 3221225472 MSS_MAL_W_FW 1 "Disp 'FCW malfunction'" 0 "No message" ; +VAL_ 3221225472 MSS_PH_A_FW 1 "Disp 'FCA Pedal High temp.'" 0 "No message" ; +VAL_ 3221225472 MSS_PH_A_BW 1 "Disp 'BCI Pedal High temp.'" 0 "No message" ; +VAL_ 3221225472 MSS_PH_D_FW 1 "Disp 'DCA Pedal High temp.'" 0 "No message" ; +VAL_ 3221225472 SET_DR_AT 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_D_RR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_DCA_CUR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 STS_RR 7 "not used" 6 "not used" 5 "Display System Fail" 4 "Display Status Temporary Failure" 3 "Display Status Temporary OFF" 2 "Display Status ON" 1 "Display Status OFF" 0 "No setting" ; +VAL_ 3221225472 SET_FR_SNS 3 "Display setting LATE" 2 "Display setting STANDARD" 1 "Display setting EARLY" 0 "No setting" ; +VAL_ 3221225472 SET_FR_DST 3 "Display setting SHORT" 2 "Display setting MIDDLE" 1 "Display setting LONG" 0 "No setting" ; +VAL_ 3221225472 SET_BS_BRT 3 "Display setting DARK" 2 "Display setting NORMAL" 1 "Display setting BRIGHT" 0 "No setting" ; +VAL_ 3221225472 SET_LN_T 3 "Display setting LATE" 2 "Display setting STANDARD" 1 "Display setting EARLY" 0 "No setting" ; +VAL_ 3221225472 SET_WARN_VOL 3 "Display setting High" 2 "Display setting Middle" 1 "Display setting Low" 0 "No setting" ; +VAL_ 3221225472 SET_D_BS 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_D_LN 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_D_FR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_ICC_CUR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_ASL_SPD 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_ICC_SPD 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_W_TS 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_ACCEL_CNT 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_A_BR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_BA 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_W_BS 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_W_LN 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_W_FR 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 MSS_SR_B 7 "Disp BSI & BSW & BCI cancel MSG" 6 "Disp BSI & BSW cancel MSG" 5 "Disp BSI & BCI cancel MSG" 4 "Disp BSI cancel MSG" 3 "Disp BSW & BCI cancel MSG" 2 "Disp BSW cancel MSG" 1 "Disp BCI cancel MSG" 0 "No Display" ; +VAL_ 3221225472 MSS_LC_H 7 "Disp LDP & LDW & BSI cancel MSG" 6 "Disp LDP & LDW cancel MSG" 5 "Disp LDP & BSI cancel MSG" 4 "Disp LDP cancel MSG" 3 "Disp LDW & BSI cancel MSG" 2 "Disp LDW cancel MSG" 1 "Disp BSI cancel MSG" 0 "No message" ; +VAL_ 3221225472 MSS_B_R 3 "Disp VDC OFF cancel MSG" 2 "Disp Snow mode active cancel MSG" 1 "Disp Slippery load cancel MSG" 0 "No display" ; +VAL_ 3221225472 MSS_B_C 3 "Disp ICC&DynDrvAssist cancel MSG" 2 "Disp ICC cancel MSG" 1 "Disp DynDrvAssist cancel MSG" 0 "No display " ; +VAL_ 3221225472 MSS_FR_R 3 "Disp Weather condition MSG" 2 "Disp ElectromagnetInterfer MSG" 1 "Disp FrontRadar blocked MSG" 0 "No display " ; +VAL_ 3221225472 MSS_FR_C 15 "Disp ICC&DCA&FCW&IBA cancel MSG" 14 "Disp ICC&DCA&FCW cancel MSG" 13 "Disp ICC&DCA&IBA cancel MSG" 12 "Disp ICC&DCA cancel MSG" 11 "Disp ICC&FCW&IBA cancel MSG" 10 "Disp ICC&FCW cancel MSG" 9 "Disp ICC&IBA cancel MSG" 8 "Disp ICC cancel MSG" 7 "Disp DCA&FCW&IBA cancel MSG" 6 "Disp DCA&FCW cancel MSG" 5 "Disp DCA&IBA cancel MSG" 4 "Disp DCA cancel MSG" 3 "Disp FCW&IBA cancel MSG" 2 "Disp FCW cancel MSG" 1 "Disp IBA cancel MSG" 0 "No display" ; +VAL_ 3221225472 MSS_SR_D 1 "Display SideRadar deactivate MSG" 0 "No message" ; +VAL_ 3221225472 MSS_FP_H 3 "Display BCI & DCA cancel message" 2 "Display DCA cancel message" 1 "Display BCI cancel message" 0 "No message" ; +VAL_ 3221225472 SET_D_RR_I 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_MOD 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_D_FR_D 3 "Display setting SHORT" 2 "Not used" 1 "Display setting LONG" 0 "No setting" ; +VAL_ 3221225472 SET_D_RR_A 3 "Not Used" 2 "Display setting ON" 1 "Display setting OFF" 0 "No setting" ; +VAL_ 3221225472 SET_W_BS_B 3 "Display setting DARK" 2 "Display setting NORMAL" 1 "Display setting BRIGHT" 0 "Nothing" ; +VAL_ 3221225472 SET_W_LN_T 3 "Display setting LATE" 2 "Not used" 1 "Display setting EARLY" 0 "Nothing" ; +VAL_ 3221225472 BUZZ_REQ 31 "Not used" 30 "Not used" 29 "Not used" 28 "Not used" 27 "retractable hard top fault warn" 26 "retractable hard top move comp" 25 "TPMS ID registration warning" 24 "flat tire warning buzzer is ON" 23 "day time run right deactivated" 22 "day time run right activated" 21 "seat belt warning" 20 "reverse warning" 19 "key reminder warning" 18 "mode switch on" 17 "back door open warning" 16 "anti-key lock in warning" 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "automatic lighting deactivated" 6 "automatic lighting activated" 5 "steering wheel movement required" 4 "childproof lock malfunction" 3 "automatic lock up deactivated" 2 "automatic lock up activated" 1 "position lights omission" 0 "no buzzer request" ; +VAL_ 3221225472 AC_IND 1 "Aircon IND ON Request" 0 "Aircon IND OFF Request" ; +VAL_ 3221225472 Rear_WIP_REQ 3 "Not used" 2 "RearWiper ON Request" 1 "RearWiper forced stop" 0 "Rear Wiper stop position" ; +VAL_ 3221225472 EXBK_STATUS 3 "Exh brake Requested and active" 2 "Exh brake Req but not active" 1 "Exh Brake Error" 0 "Exh Brake not requested" ; +VAL_ 3221225472 RBSNC 1 "Brake Pedal Depressed" 0 "Brake Pedal released" ; +VAL_ 3221225472 MBSNO 1 "Brake Pedal Depressed" 0 "Brake Pedal released" ; +VAL_ 3221225472 CC_SL_STATUS 3 "SL active" 2 "CC active" 1 "Not used" 0 "CC & SL not active" ; +VAL_ 3221225472 NEXTGP 3 "4th" 2 "3rd" 1 "2nd" 0 "1st" ; +VAL_ 3221225472 AT_TorqueRequestInProgress 7 "full torque control (switch)" 6 "torque increase (MAX)" 5 "torque reduction (MIN)" 4 "Not used" 3 "Not used" 2 "Not used" 1 "Not used" 0 "torque limit w/o AT shift change" ; +VAL_ 3221225472 ONLUFLG_SMLUFLG 3 "Not used" 2 "locked up converter" 1 "sliding converter" 0 "unlocked converter" ; +VAL_ 3221225472 EX_BK_INH_REQ 1 "Exhaust Brake Inhibit Request" 0 "No Request" ; +VAL_ 3221225472 AT_Req_ECO_mode_menu 1 "ECO mode menu on" 0 "ECO mode menu off" ; +VAL_ 3221225472 AT_Req_NAVI_SHIFT_menu 1 " ECO NAVI menu on" 0 " ECO NAVI menu off" ; +VAL_ 3221225472 DriveMode_Status 1 "ECO_mode" 0 "Except ECO_mode" ; +VAL_ 3221225472 LNTIR 1 "request" 0 "no request" ; +VAL_ 3221225472 LIMIT_VOL_CTRL 1 "control" 0 "not control" ; +VAL_ 3221225472 CPY_DEST_ACS_4 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_DEST_ACS_3 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_DEST_ACS_2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_DEST_ACS_1 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_DEST_SET_8 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_DEST_SET_7 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_DEST_SET_6 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_DEST_SET_5 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_DEST_SET_4 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_DEST_SET_3 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_DEST_SET_2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_DEST_SET_1 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_ACS_4 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_ACS_3 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_ACS_2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_ACS_1 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_SET_8 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_SET_7 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_SET_6 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_SET_5 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_SET_4 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_SET_3 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_SET_2 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 CPY_SOUR_SET_1 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 DEL_ACS_OPERATE 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 DEL_SET_OPERATE 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 ACS_NUM_SELECT 3 "Select sound No 4" 2 "Select sound No 3" 1 "Select sound No 2" 0 "Select sound No 1" ; +VAL_ 3221225472 SDS_NUM_SELECT 7 "Select sound No 8" 6 "Select sound No 7" 5 "Select sound No 6" 4 "Select sound No 5" 3 "Select sound No 4" 2 "Select sound No 3" 1 "Select sound No 2" 0 "Select sound No 1" ; +VAL_ 3221225472 SUS_NUM_SELECT 7 "Select sound No 8" 6 "Select sound No 7" 5 "Select sound No 6" 4 "Select sound No 5" 3 "Select sound No 4" 2 "Select sound No 3" 1 "Select sound No 2" 0 "Select sound No 1" ; +VAL_ 3221225472 RES_NUM_SELECT 7 "Select sound No 8" 6 "Select sound No 7" 5 "Select sound No 6" 4 "Select sound No 5" 3 "Select sound No 4" 2 "Select sound No 3" 1 "Select sound No 2" 0 "Select sound No 1" ; +VAL_ 3221225472 SET_NUM_SELECT 7 "Select sound No 8" 6 "Select sound No 7" 5 "Select sound No 6" 4 "Select sound No 5" 3 "Select sound No 4" 2 "Select sound No 3" 1 "Select sound No 2" 0 "Select sound No 1" ; +VAL_ 3221225472 ACS_VOL_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 ACS_VOL_UD 1 "Up operation" 0 "Down operation" ; +VAL_ 3221225472 STRT_SHUT_VOL_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 STRT_SHUT_VOL_UD 1 "Up operation" 0 "Down operation" ; +VAL_ 3221225472 ACS_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 STRT_SHUT_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 SOUND_SETTING_SELECT 3 "User_Preset" 2 "Preset3" 1 "Preset2" 0 "Preset1" ; +VAL_ 3221225472 INITIAL 1 "Initializing" 0 "Not initializing" ; +VAL_ 3221225472 AVAIL_EXT_SET_LIST_3 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_EXT_SET_LIST_1 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 WARN_STATUS_CPY_DEL 7 "Not used" 6 "Not used" 5 "Not used" 4 "Delete finished" 3 "Under delete" 2 "Copy finished" 1 "Under copy" 0 "Initial value" ; +VAL_ 3221225472 WARN_STATUS_CPY_DEL_CHANGE 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 WARN_STATUS_SD 7 "Not used" 6 "Not used" 5 "SDcard read finished" 4 "SDcard reading" 3 "SDcard data Error" 2 "SDcard read Error" 1 "SDcard not exist" 0 "Initial value" ; +VAL_ 3221225472 WARN_STATUS_SD_CHANGE 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AVAIL_EXT_ACS_LIST_4 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_EXT_ACS_LIST_3 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_EXT_ACS_LIST_2 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_EXT_ACS_LIST_1 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_EXT_SET_LIST_8 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_EXT_SET_LIST_7 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_EXT_SET_LIST_6 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_EXT_SET_LIST_5 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_EXT_SET_LIST_4 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_EXT_SET_LIST_2 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 ACS_IND_STATUS 7 "Not used" 6 "Not used" 5 "Not used" 4 "Select sound No 4" 3 "Select sound No 3" 2 "Select sound No 2" 1 "Select sound No 1" 0 "Not selected" ; +VAL_ 3221225472 SDS_IND_STATUS 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Select sound No 8" 7 "Select sound No 7" 6 "Select sound No 6" 5 "Select sound No 5" 4 "Select sound No 4" 3 "Select sound No 3" 2 "Select sound No 2" 1 "Select sound No 1" 0 "Not selected" ; +VAL_ 3221225472 SUS_IND_STATUS 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Select sound No 8" 7 "Select sound No 7" 6 "Select sound No 6" 5 "Select sound No 5" 4 "Select sound No 4" 3 "Select sound No 3" 2 "Select sound No 2" 1 "Select sound No 1" 0 "Not selected" ; +VAL_ 3221225472 RES_IND_STATUS 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Select sound No 8" 7 "Select sound No 7" 6 "Select sound No 6" 5 "Select sound No 5" 4 "Select sound No 4" 3 "Select sound No 3" 2 "Select sound No 2" 1 "Select sound No 1" 0 "Not selected" ; +VAL_ 3221225472 SET_IND_STATUS 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Select sound No 8" 7 "Select sound No 7" 6 "Select sound No 6" 5 "Select sound No 5" 4 "Select sound No 4" 3 "Select sound No 3" 2 "Select sound No 2" 1 "Select sound No 1" 0 "Not selected" ; +VAL_ 3221225472 AVAIL_ACS_LIST_4 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_ACS_LIST_3 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_ACS_LIST_2 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_ACS_LIST_1 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_SET_LIST_8 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_SET_LIST_7 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_SET_LIST_6 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_SET_LIST_5 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_SET_LIST_4 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_SET_LIST_3 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_SET_LIST_1 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 AVAIL_SET_LIST_2 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 ACS_VOL_STATUS 7 "Volume level +3" 6 "Volume level +2" 5 "Volume level +1" 4 "Volume level 0" 3 "Volume level -1" 2 "Volume level -2" 1 "Volume level -3" 0 "Not used" ; +VAL_ 3221225472 STRT_SHUT_VOL_STATUS 7 "Volume level +3" 6 "Volume level +2" 5 "Volume level +1" 4 "Volume level 0" 3 "Volume level -1" 2 "Volume level -2" 1 "Volume level -3" 0 "Not used" ; +VAL_ 3221225472 ACS_STATUS 1 "On" 0 "Off" ; +VAL_ 3221225472 STRT_SHUT_STATUS 1 "On" 0 "Off" ; +VAL_ 3221225472 USR_CST_AVAIL 1 "Enable" 0 "Disable" ; +VAL_ 3221225472 SOUND_SETTING_STATUS 3 "User_Preset" 2 "Preset3" 1 "Preset2" 0 "Preset1" ; +VAL_ 3221225472 KGF_MES_REQ 1 "message on" 0 "message off" ; +VAL_ 3221225472 KPA_MES_REQ 1 "message on" 0 "message off" ; +VAL_ 3221225472 PSI_MES_REQ 1 "message on" 0 "message off" ; +VAL_ 3221225472 RE_SET_TPMS 3 "no definition" 2 "support and reset" 1 "support" 0 "not support this function" ; +VAL_ 3221225472 SELECT_PRESS_SUPPORT 1 "support" 0 "not support" ; +VAL_ 3221225472 ASCDON_DISP 7 "not equipped with CC and SL" 6 "CC requested and in failure" 5 "CC ON and inactive) or suspended" 4 "CC active" 3 "SL requested and in failure" 2 "SL on and inactive) or suspended" 1 "SL active" 0 "Cruise Control,Speed Limit OFF" ; +VAL_ 3221225472 SPDBLREQ 1 "flashing display" 0 "fix display" ; +VAL_ 3221225472 SPDREQ 255 "unavble (RV/LV fail or not pres)" 254 "RV/LV OFF or LV OFF" ; +VAL_ 3221225472 BRKLMPOFFRLY_FAIL 1 "Abnormal" 0 "Normal" ; +VAL_ 3221225472 STAT_CHG_REQ_TPMS 31 "340kpa for rear" 30 "330kpa for rear" 29 "320kpa for rear" 28 "310kpa for rear" 27 "300kpa for rear" 26 "290kpa for rear" 25 "280kpa for rear" 24 "270kpa for rear" 23 "260kpa for rear" 22 "250kpa for rear" 21 "240kpa for rear" 20 "230kpa for rear" 19 "220kpa for rear" 18 "210kpa for rear" 17 "200kpa for rear" 16 "TPMS Reset request" 15 "340kpa for front" 14 "330kpa for front" 13 " 320kpa for front" 12 "310kpa for front" 11 "300kpa for front" 10 "290kpa for front" 9 "280kpa for front" 8 "270kpa for front" 7 "260kpa for front" 6 "250kpa for front" 5 "240kpa for front" 4 "230kpa for front" 3 "220kpa for front" 2 "210kpa for front" 1 "200kpa for front" 0 "No request" ; +VAL_ 3221225472 TPMS_RST 1 "Re-learn requested" 0 "Re-learn not requested" ; +VAL_ 3221225472 STAT_CHG_REQ_IDM 6 "SSA Setting: ALL" 5 "SSA Setting: UPHILL" 4 "ASA Setting: ON" 3 "ASA Setting: OFF" 2 "ADA1 Setting: ON" 1 "ADA1 Setting: OFF" 0 "No request" ; +VAL_ 3221225472 ICCExistance 1 "Exsist" 0 "not Exist" ; +VAL_ 3221225472 STAT_CHG_REQ 63 "not used" 62 "not used" 61 "not used" 60 "not used" 59 "DAS on" 58 "DAS off" 57 "not used" 56 "not used" 55 "SONAR_DETECTION_RANGE_NEAR" 54 "SONAR_DETECTION_RANGE_MIDDLE" 53 "SONAR_DETECTION_RANGE_FAR" 52 "not used" 51 "SONAR_BUZZER_VOLUME_LOW" 50 "SONAR_BUZZER_VOLUME_MIDDLE" 49 "SONAR_BUZZER_VOLUME_HIGH" 48 "not used" 47 "SONAR_SYSTEM_PAUSE_ON" 46 "SONAR_SYSTEM_ON(FR only)" 45 "SONAR_SYSTEM_ON(FR&RR)" 44 "SONAR_SYSTEM_OFF" 43 "not used" 42 "not used" 41 "SONAR_AUTO_DISPLAY_ON" 40 "SONAR_AUTO_DISPLAY_OFF" 39 "not used" 38 "not used" 37 "not used" 36 "not used" 35 "not used" 34 "Factory setting reset signal" 33 "not used" 32 "not used" 31 "not used" 30 "not used" 29 "not used" 28 "not used" 27 "MOD ON" 26 "MOD OFF" 25 "not used" 24 "not used" 23 "not used" 22 "Dark(BSW Brightness)" 21 "Standard(BSW Brightness)" 20 "Bright(BSW Brightness)" 19 "Late(LDW Timing)" 18 "Middle(LDW Timing)" 17 "Early(LDW Timing)" 16 "not used" 15 "not used" 14 "not used" 13 "not used" 12 "not used" 11 "not used" 10 "not used" 9 "not used" 8 "not used" 7 "not used" 6 "BSW ON" 5 "BSW OFF" 4 "LDW ON" 3 "LDW OFF" 2 "not used" 1 "not used" 0 "NO_REQUEST" ; +VAL_ 3221225472 BRKLMPOFFRLYD 3 "Not Used" 2 "BNO Abnormal" 1 "BNC Abnormal" 0 "Normal" ; +VAL_ 3221225472 BMCREQ 1 "Body Motion Control exe request" 0 "Body Motion Control stop request" ; +VAL_ 3221225472 STS_D_BS_ADAS 3 "BSI Malfunction" 2 "BSI ON(Flashing)" 1 "BSI ON" 0 "OFF" ; +VAL_ 3221225472 STS_D_LN_ADAS 3 "LDP Malfunction" 2 "LDP ON(Flashing)" 1 "LDP ON" 0 "OFF" ; +VAL_ 3221225472 STS_W_LN_ADAS 3 "LDW Malfunction" 2 "LDW ON(Flashing)" 1 "LDW ON" 0 "OFF" ; +VAL_ 3221225472 ACC_ACT 1 " ON" 0 " OFF" ; +VAL_ 3221225472 IDM_LDP_BSI_ACT 1 "LDP/BSI active" 0 "LDP/BSI not active" ; +VAL_ 3221225472 BSI_F_OFF 1 "Forcibly stop" 0 "Normal" ; +VAL_ 3221225472 LDP_F_OFF 1 "Forcibly stop" 0 "Normal" ; +VAL_ 3221225472 WRN_LN_R 1 "Warning right lane" 0 "No Display" ; +VAL_ 3221225472 WRN_LN_L 1 "Warning left lane" 0 "No Display" ; +VAL_ 3221225472 STS_D_BS_IDM 3 "BSI Malfunction" 2 "BSI ON(Flashing)" 1 "BSI ON" 0 "OFF" ; +VAL_ 3221225472 STS_D_LN_IDM 3 "LDP Malfunction" 2 "LDP ON(Flashing)" 1 "LDP ON" 0 "OFF" ; +VAL_ 3221225472 STS_W_LN_IDM 3 "LDW Malfunction" 2 "LDW ON(Flashing)" 1 "LDW ON" 0 "OFF" ; +VAL_ 3221225472 BSI_HMI_ORDER_R 1 "BSW LED(R) request" 0 "BSW LED(R) not request" ; +VAL_ 3221225472 BSI_HMI_ORDER_L 1 "BSW LED(L) request" 0 "BSW LED(L) not request" ; +VAL_ 3221225472 SI_RDR_BL 1 "Radar blockage cancel" 0 "Normal" ; +VAL_ 3221225472 BSI_LC_HT 1 "BSI camera high temp abnormal" 0 "Normal" ; +VAL_ 3221225472 LDP_LC_HT 1 "LDP camera high temp abnormal" 0 "Normal" ; +VAL_ 3221225472 LDW_LC_HT 1 "LDW camera high temp abnormal" 0 "Normal" ; +VAL_ 3221225472 BSI_BR_C_RSN 3 "VDC OFF" 2 "Snow mode ON" 1 "Slipperly road" 0 "No request" ; +VAL_ 3221225472 LDP_BR_C_RSN 3 "VDC OFF" 2 "Snow mode ON" 1 "Slipperly road" 0 "No request" ; +VAL_ 3221225472 GIVEIMG 1 "CAMERA giveup" 0 "CAMERA not giveup" ; +VAL_ 3221225472 MARK_TYPE_R 7 "Not used" 6 "Bold dash" 5 "Tar strips" 4 "Triple dash" 3 "Solid line" 2 "Dash line" 1 "Bott's dots" 0 "None" ; +VAL_ 3221225472 MARK_TYPE_L 7 "Not used" 6 "Bold dash" 5 "Tar strips" 4 "Triple dash" 3 "Solid line" 2 "Dash line" 1 "Bott's dots" 0 "None" ; +VAL_ 3221225472 OFFSET_R_VALID 1 "Right offset measure is valid" 0 "Right offset measure is invalid" ; +VAL_ 3221225472 OFFSET_L_VALID 1 "Left offset measure is valid" 0 "Left offset measure is invalid" ; +VAL_ 3221225472 COMP_ACT 1 "compressor activ req" 0 "no compressor activ req" ; +VAL_ 3221225472 VDCFAIL 1 "VDC(ESP) malfunction" 0 "no VDC(ESP) malfunction" ; +VAL_ 3221225472 VDCACT 1 "VDC(AYC) regulation" 0 "no VDC(AYC) regulation" ; +VAL_ 3221225472 ABSACT 1 "ABS in regulation" 0 "ABS not in regulation" ; +VAL_ 3221225472 CABRBSW_HCM 1 "SW ON" 0 "SW OFF" ; +VAL_ 3221225472 SOUND4_STOP 1 "Immediate switch" 0 "Periodic switch" ; +VAL_ 3221225472 SOUND4_REQ 7 "Sound the File7 spec" 6 "Sound the File6 spec" 5 "Sound the File5 spec" 4 "Sound the File4 spec" 3 "Sound the File3 spec" 2 "Sound the File2 spec" 1 "Sound the File1 spec" 0 "No sound" ; +VAL_ 3221225472 SOUND3_STOP 1 "Immediate switch" 0 "Periodic switch" ; +VAL_ 3221225472 SOUND3_REQ 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Not used" 2 "Not used" 1 "Sound the FCA warning" 0 "No Sound" ; +VAL_ 3221225472 SOUND2_STOP 1 "Immediate switch" 0 "Periodic switch" ; +VAL_ 3221225472 SOUND2_REQ 7 "Sound the cancel sound" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Sound the DCA warning" 2 "Sound the FCW" 1 "Sound the Distance warning" 0 "No sound" ; +VAL_ 3221225472 SOUND1_STOP 1 "Immediate switch" 0 "Periodic switch" ; +VAL_ 3221225472 SOUND1_REQ 7 "Sound the cancel sound" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Sound the BSI warning" 2 "Sound the BSW" 1 "Sound the LDW" 0 "No sound" ; +VAL_ 3221225472 IDM_STATUS 1 "Abnormal" 0 "Normal" ; +VAL_ 3221225472 ActiveGoodCheck 1 "During ActiveGoodCheck" 0 "Not in ActiveGoodCheck" ; +VAL_ 3221225472 IRTACT 1 "IRT in regulation" 0 "IRT not in regulation" ; +VAL_ 3221225472 REGENTGTQU 3 "Not used" 2 "Invalid" 1 "Normal" 0 "Not Initialized " ; +VAL_ 3221225472 BLSPTSQU 3 "Faulty" 2 "Normal" 1 "Reduced Monitored " 0 "Not Initialized " ; +VAL_ 3221225472 BLSPTS 1 "Brake pedal is pressed" 0 "Brake pedal is not pressed" ; +VAL_ 3221225472 P_BuQU 3 "Not used" 2 "Invalid" 1 "Normal" 0 "Not Initialized " ; +VAL_ 3221225472 P_Bu 1 "Pressure ON" 0 "Pressure OFF" ; +VAL_ 3221225472 BSVFAIL 1 "Fail" 0 "Normal" ; +VAL_ 3221225472 FXTGTDRVQU 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Invalid" 2 "Back up" 1 "Normal" 0 "Not Initialized " ; +VAL_ 3221225472 Acmh_state 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "Active" 6 "ActiveWoBackup" 5 "ActiveWoRegen" 4 "ActiveWoRegenWoExternal" 3 "Reduced" 2 "PreRun" 1 "Diag" 0 "Off" ; +VAL_ 3221225472 DLCFAIL 1 "Fail" 0 "Normal" ; +VAL_ 3221225472 RollerBench_Type 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Not used" 2 "FrontAxle" 1 "Not used" 0 "Passive" ; +VAL_ 3221225472 RollerBench_NotAllowed 1 "RollerBench mode is not allowed" 0 "RollerBench mode is allowed" ; +VAL_ 3221225472 VEHHEVQU 7 "Not used" 6 "Invalid Under Voltage" 5 "Not Calculated" 4 "Reduced Monitored" 3 "Different Calculated" 2 "Faulty" 1 "Normal" 0 "Not Initialized " ; +VAL_ 3221225472 FXTGTEXQU 3 "Not used" 2 "Invalid" 1 "Normal" 0 "Not Initialized " ; +VAL_ 3221225472 FXTGTEXAc 1 "Active" 0 "Normal " ; +VAL_ 3221225472 ABSAVAI 1 "Available" 0 "Not available" ; +VAL_ 3221225472 STNDSTILLSTS 1 "Faulty" 0 "Normal" ; +VAL_ 3221225472 STNDSTILL 1 "Standstill" 0 "Not defineable" ; +VAL_ 3221225472 STABMRGN_Quali 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Not used" 2 "Faulty" 1 "Normal" 0 "Not Initialized" ; +VAL_ 3221225472 RUN_AIM_WORK 1 "Working" 0 "Not work of Runtime-Aiming-Func" ; +VAL_ 3221225472 DTCT_DISCONTI_3_R 1 "discont detection in wide" 0 "Normal" ; +VAL_ 3221225472 DTCT_DISCONTI_3_L 1 "discont detection in wide" 0 "Normal" ; +VAL_ 3221225472 DTCT_DISCONTI_2_R 1 "discont detection in narrow" 0 "Normal" ; +VAL_ 3221225472 DTCT_DISCONTI_2_L 1 "discont detection in narrow" 0 "Normal" ; +VAL_ 3221225472 LDW_STATUS_R 1 "from lane to right side lane" 0 "not from lane to right side lane" ; +VAL_ 3221225472 LDW_STATUS_L 1 "from lane to left side lane" 0 "not from lane to left side lane" ; +VAL_ 3221225472 MARKER_TYPE_R 7 "difficult to irregularity road" 6 "Tar strips" 5 "slow down area" 4 "fork road (bifurcation)" 3 "Bott's Dots" 2 "Dashed line" 1 "Solid line" 0 "None" ; +VAL_ 3221225472 MARKER_TYPE_L 7 "difficult to irregularity road " 6 "Tar strips" 5 "slow down area" 4 "fork road (bifurcation)" 3 "Bott's Dots" 2 "Dashed line" 1 "Solid line" 0 "None" ; +VAL_ 3221225472 DIAG_STATUS 7 "CUF or Not ICA + CCAD or UVR+ATD" 6 "CUF or Not ICA + CCAD or UVR" 5 "CUF or Not ICA + ATD" 4 "CUF or Not ICA" 3 "ATD + CCAD or UVR" 2 "CCAD or UVR" 1 "Abnorma Temperature Detection" 0 "Nothing abnormal detected" ; +VAL_ 3221225472 MARKER_VALID_R 1 "right hand lane marker is valid" 0 "right hand lane mark isn't valid" ; +VAL_ 3221225472 MARKER_VALID_L 1 "left hand lane marker is valid" 0 "left hand lane mark is not valid" ; +VAL_ 3221225472 VentirationStatus_Fr 1 "Fan mark ON" 0 "Fan mark OFF" ; +VAL_ 3221225472 INTERRUPT_DISP 7 "not used" 6 "not used" 5 "not used" 4 "not used" 3 "HDC activated" 2 "HSA/SSAactivate(assiststartveh)" 1 "HSA / SSA activated" 0 "No interrupt request" ; +VAL_ 3221225472 TURN_EFFECT 3 "not used" 2 "Right turn effect" 1 "Left turn effect" 0 "Default display" ; +VAL_ 3221225472 CAR_EFFECT 3 "Effect 3" 2 "Effect 2" 1 "Effect 1" 0 "Default display" ; +VAL_ 3221225472 ASA_SETTINGS 3 "not used" 2 "ON" 1 "OFF" 0 "No Customization Available" ; +VAL_ 3221225472 ADA1_SETTINGS 3 "not used" 2 "ON" 1 "OFF" 0 "No Customization Available" ; +VAL_ 3221225472 RR_TIRE_EFFECT 3 "Effect 3" 2 "Effect 2" 1 "Effect 1" 0 "Default display" ; +VAL_ 3221225472 RL_TIRE_EFFECT 3 "Effect 3" 2 "Effect 2" 1 "Effect 1" 0 "Default display" ; +VAL_ 3221225472 FR_TIRE_EFFECT 3 "Effect 3" 2 "Effect 2" 1 "Effect 1" 0 "Default display" ; +VAL_ 3221225472 FL_TIRE_EFFECT 3 "Effect 3" 2 "Effect 2" 1 "Effect 1" 0 "Default display" ; +VAL_ 3221225472 IDM_BUZZER 3 "Not Used" 2 "SMB Function Limit Buzzer" 1 "SMB Cancel Buzzer" 0 "No Request" ; +VAL_ 3221225472 MODE_SELECT 7 "Not Used" 6 "Not Used" 5 "Not Used" 4 "CUSTOMIZE" 3 "SNOW" 2 "ECO" 1 "SPORT" 0 "STANDARD" ; +VAL_ 3221225472 SMB_STA 3 "SMB Malfunction" 2 "SMB ON(Flashing)" 1 "SMB ON" 0 "SMB OFF" ; +VAL_ 3221225472 IDM_LAMP 1 " IDM StateLamp ON" 0 " IDM StateLamp OFF" ; +VAL_ 3221225472 SSA_STA 3 "not used" 2 "Release" 1 "Activated" 0 "No Activation" ; +VAL_ 3221225472 SSA_SETTINGS 3 "Not Used" 2 "ALL" 1 "UPHILL" 0 "No Customization Available" ; +VAL_ 3221225472 SMB_CTRL_LEVEL 15 "not used" 14 "not used" 13 "not used" 12 "not used" 11 "not used" 10 "not used" 9 "not used" 8 "not used" 7 "not used" 6 "not used" 5 "not used" 4 "Control level 4" 3 "Control level 3" 2 "Control level 2" 1 "Control level 1" 0 "Control level 0" ; +VAL_ 3221225472 F_REQ_SMB 1 "Request" 0 "Not request" ; +VAL_ 3221225472 F_REQ_LDP 1 "Request" 0 "Not request" ; +VAL_ 3221225472 F_REQ_BSI 1 "Request" 0 "Not request" ; +VAL_ 3221225472 SYS_STATUS 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "BSI + LDP + SMB ON" 6 "BSI + LDP ON" 5 "BSI + SMB ON" 4 "BSI ON" 3 "SMB + LDP ON" 2 "LDP ON" 1 "SMB ON" 0 "All OFF" ; +VAL_ 3221225472 MODE_STATUS 3 "Not used" 2 "Mode C" 1 "Mode B" 0 "Mode A " ; +VAL_ 3221225472 MODE_TRANSITION 1 "Transition" 0 "Not Transition" ; +VAL_ 3221225472 CMDFAIL_SMB 1 "Abnormal" 0 "Normal" ; +VAL_ 3221225472 INH_SMB 1 "Inhibit" 0 "Not inhibit" ; +VAL_ 3221225472 SBWFAIL 1 "Abnormal" 0 "Normal" ; +VAL_ 3221225472 VEHI_TYPE 15 "type11(TBD)" 14 "type10(TBD)" 13 " +type9(TBD)" 12 "type8(TBD)" 11 "type7(TBD)" 10 "type6(TBD)" 9 "type5(TBD)" 8 "type4(TBD)" 7 "type3(TBD)" 6 "type2(TBD)" 5 "type1(TBD)" 4 "L53H-Euro" 3 "L53H-SportsUpper" 2 "L53H-FZ3(Mid)" 1 "L53H-FZ1h(Hevy)" 0 "None" ; +VAL_ 3221225472 MARKET_INFO 255 "others" 56 "JPN" 49 "USA" 42 "CAN" 35 "EUR-R" 28 "EUR-L" 21 "AUS" 14 "GOM" 7 "THI" 6 "MEX" 5 "RUS" 4 "GCC" 3 "KOR" 2 "TWN" 1 "CHI" 0 "None" ; +VAL_ 3221225472 TURN_SIG 3 "Turning both on" 2 "Turning Right side lamp on" 1 "Turning left side lamp on" 0 "Not work or Turn sig unit fail" ; +VAL_ 3221225472 WIPER 3 "Wiper unit failure" 2 "High" 1 "Low" 0 "Not working" ; +VAL_ 3221225472 CSTR_ASA 3 "Not Used" 2 "Not Used" 1 "OFF" 0 "ON" ; +VAL_ 3221225472 LOGIN_PERM_FLAG 1 "User Change Permit" 0 "User Change Not Permit" ; +VAL_ 3221225472 LOGIN_KEYLMK_STAT 1 "LogIn ON" 0 "LogIn OFF" ; +VAL_ 3221225472 CSTR_STG_RES 3 "Not Used" 2 "Slow" 1 "Middle" 0 "Quick" ; +VAL_ 3221225472 CSTR_STG_EFO 3 "Not Used" 2 "Light" 1 "Middle" 0 "Heavy" ; +VAL_ 3221225472 CSTR_SMB 3 "Not Used" 2 "Middle" 1 "Light" 0 "Off" ; +VAL_ 3221225472 CSTR_PT 3 "SNOW" 2 "ECO" 1 "SPORT" 0 "STANDARD" ; +VAL_ 3221225472 TOUR_STG_RES 3 "Not Used" 2 "Slow" 1 "Middle" 0 "Quick" ; +VAL_ 3221225472 TOUR_STG_EFO 3 "Not Used" 2 "Light" 1 "Middle" 0 "Heavy" ; +VAL_ 3221225472 TOUR_SMB 3 "Not Used" 2 "Middle" 1 "Light" 0 "Off" ; +VAL_ 3221225472 TOUR_PT 3 "SNOW" 2 "ECO" 1 "SPORT" 0 "STANDARD" ; +VAL_ 3221225472 TOUR_ASA 3 "Not Used" 2 "Not Used" 1 "OFF" 0 "ON" ; +VAL_ 3221225472 ECO_STG_RES 3 "Not Used" 2 "Slow" 1 "Middle" 0 "Quick" ; +VAL_ 3221225472 ECO_STG_EFO 3 "Not Used" 2 "Light" 1 "Middle" 0 "Heavy" ; +VAL_ 3221225472 ECO_SMB 3 "Not Used" 2 "Middle" 1 "Light" 0 "Off" ; +VAL_ 3221225472 ECO_PT 3 "SNOW" 2 "ECO" 1 "SPORT" 0 "STANDARD" ; +VAL_ 3221225472 ECO_ASA 3 "Not Used" 2 "Not Used" 1 "OFF" 0 "ON" ; +VAL_ 3221225472 SNOW_STG_RES 3 "Not Used" 2 "Slow" 1 "Middle" 0 "Quick" ; +VAL_ 3221225472 SNOW_STG_EFO 3 "Not Used" 2 "Light" 1 "Middle" 0 "Heavy" ; +VAL_ 3221225472 SNOW_SMB 3 "Not Used" 2 "Middle" 1 "Light" 0 "Off" ; +VAL_ 3221225472 SNOW_PT 3 "SNOW" 2 "ECO" 1 "SPORT" 0 "STANDARD" ; +VAL_ 3221225472 SNOW_ASA 3 "Not Used" 2 "Not Used" 1 "OFF" 0 "ON" ; +VAL_ 3221225472 SPO_STG_RES 3 "Not Used" 2 "Slow" 1 "Middle" 0 "Quick" ; +VAL_ 3221225472 SPO_STG_EFO 3 "Not Used" 2 "Light" 1 "Middle" 0 "Heavy" ; +VAL_ 3221225472 SPO_SMB 3 "Not Used" 2 "Middle" 1 "Light" 0 "Off" ; +VAL_ 3221225472 SPO_PT 3 "SNOW" 2 "ECO" 1 "SPORT" 0 "STANDARD" ; +VAL_ 3221225472 SPO_ASA 3 "Not Used" 2 "Not Used" 1 "OFF" 0 "ON" ; +VAL_ 3221225472 STD_STG_RES 3 "Not Used" 2 "Slow" 1 "Middle" 0 "Quick" ; +VAL_ 3221225472 STD_STG_EFO 3 "Not Used" 2 "Light" 1 "Middle" 0 "Heavy" ; +VAL_ 3221225472 STD_SMB 3 "Not Used" 2 "Middle" 1 "Light" 0 "OFF" ; +VAL_ 3221225472 STD_PT 3 "SNOW" 2 "ECO" 1 "SPORT" 0 "STANDARD" ; +VAL_ 3221225472 STD_ASA 3 "Not Used" 2 "Not Used" 1 "OFF" 0 "ON" ; +VAL_ 3221225472 AHL_REQ 3 "Unavailable" 2 "High Beam Requested" 1 "Low Beam Requested" 0 "No beam Requested" ; +VAL_ 3221225472 AHL_FAIL 3 "Unavailable" 2 "AHL NO Failure" 1 "AHL Failure" 0 "Not used" ; +VAL_ 3221225472 LB_FAN_CON 3 "FAN Hi" 2 "FAN Mid" 1 "FAN Lo" 0 "FAN OFF" ; +VAL_ 3221225472 LB_COOL_REQ 3 "High Battery Cooling Request" 2 "Middle Battery Cooling Request" 1 "Low Battery Cooling Request" 0 "Battery Cooling Not Request" ; +VAL_ 3221225472 PDMCODE 0 "No fail" ; +VAL_ 3221225472 FQCPUSHSTPMON 1 "Ctrl State on Stop/State of Stop" 0 "Operation track state of output" ; +VAL_ 3221225472 QCSQNO2MON 3 "after CHAdeMO ver. 1.0" 2 "CHAdeMO ver. 1.0" 1 "CHAdeMO ver. 0.9" 0 "CHAdeMO ver. R4 or before " ; +VAL_ 3221225472 DDC_MON 3 "Component Fail" 2 "Output limitation" 1 "Active" 0 "Stop (Inactive)" ; +VAL_ 3221225472 FQCRELAYST 1 "Close" 0 "Open" ; +VAL_ 3221225472 FQCFAIL 1 "Req to stop normal chg & shutdwn" 0 "No request" ; +VAL_ 3221225472 FNCFAIL 1 "Req to stop normal chg & shutdwn" 0 "No request" ; +VAL_ 3221225472 FCAUTION 1 "Request" 0 "No request" ; +VAL_ 3221225472 QCHGVOLSENSINF 3 "Not used" 2 "Voltage sensor operating normall" 1 "Voltage sensor operating abnorma" 0 "Voltage sensor operating normall" ; +VAL_ 3221225472 FNCCONFSRLYINF1 1 "Request to limit vehicle power" 0 "No request" ; +VAL_ 3221225472 FNCCONFSRLYINF2 1 "Request to prohibit vehicle runn" 0 "No request" ; +VAL_ 3221225472 FACTIVTRACK 1 "Request" 0 "No Request" ; +VAL_ 3221225472 PCFST 1 "ON" 0 "OFF" ; +VAL_ 3221225472 ACVOLST 3 "Unable to judge" 2 "200V-class" 1 "100V-class" 0 "No input" ; +VAL_ 3221225472 FFSCRLYONNG 1 "Failure" 0 "No failure" ; +VAL_ 3221225472 FQCIRSENS 1 "Exist" 0 "Absent" ; +VAL_ 3221225472 FQCCONDET 1 "Connected" 0 "Charge coupler not connected" ; +VAL_ 3221225472 NCCONDET 3 "Failure" 2 "Fully connected" 1 "Partially connected" 0 "Normal-charge gun not connected" ; +VAL_ 3221225472 FRESTOK 1 "Ready" 0 "Not ready" ; +VAL_ 3221225472 FQCGFCKEND 1 "Completed" 0 "Not completed" ; +VAL_ 3221225472 FQCRELAYON 1 "either of the relays are closed" 0 "Both +ve and -ve relays are open" ; +VAL_ 3221225472 EVSEST2 1 "Valid PWM input" 0 "No PWM input (EVSE_Wait)" ; +VAL_ 3221225472 CANWAKEPDM 1 "Request" 0 "No request" ; +VAL_ 3221225472 REFUSETOSLEEP 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 FCHGSTPREQ 1 "Request" 0 "No Request" ; +VAL_ 3221225472 QCRLYCKST 3 "Both relays are NG" 2 "Positive relay is NG" 1 "Negative relay is NG" 0 "p & n relays OK or diag not comp" ; +VAL_ 3221225472 FQCRLYCHKFIN 1 "Completed" 0 "Not completed" ; +VAL_ 3221225472 CURVE_IN_ACTIVE 1 "curve cutting applied" 0 "no curve cutting applied" ; +VAL_ 3221225472 LDP_FAIL 1 "LDP fail" 0 "LDP not fail" ; +VAL_ 3221225472 MARKET 3 "MPH / SC (EUR-R)" 2 "km/h / SB (EUR-L)" 1 "km/h / SD (AUS)" 0 "km/h / SB (MEST)" ; +VAL_ 3221225472 TOTAL_SMB_ONOFF 1 "SW is Pushed by 0b" 0 "SW is Pushed by 1b" ; +VAL_ 3221225472 SNOW_SMBSW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 SPORT_SMBSW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 SPORT_SMBSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 SPORT_SMBSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 STD_SMBSW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 STD_SMBSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 STD_SMBSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 PRSNL_CSTM_SMBSW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 PRSNL_CSTM_SMBSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 PRSNL_CSTM_SMBSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 PRSNL_ASASW_ON 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 PRSNL_ASASW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 SNOW_SMBSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 SNOW_SMBSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 ECO_SMBSW_OFF 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 ECO_SMBSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 ECO_SMBSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 STRRESPSW_SLOW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 STRRESPSW_QUICK 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 STRRESPSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 STREFFRTSW_MID 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 STREFFRTSW_LIGHT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 STREFFRTSW_HEAVY 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 TRQRESPSW_STD 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 TRQRESPSW_SPORT 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 TRQRESPSW_SNOW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 TRQRESPSW_ECO 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 DRVMODE_SCREEN 7 "not setting screen" 6 "Not Used" 5 "CUSTOMIZE" 4 "Not Used" 3 "ECO" 2 "SNOW" 1 "SPORT" 0 "STANDARD" ; +VAL_ 3221225472 COPYNO_TO_USER 7 "Not used" 6 "Not used" 5 "Not used" 4 "User4" 3 "User3" 2 "User2" 1 "User1" 0 "Not Copy" ; +VAL_ 3221225472 COPYNO_FR_USER 7 "Not used" 6 "Not used" 5 "Not used" 4 "User4" 3 "User3" 2 "User2" 1 "User1" 0 "Not Copy" ; +VAL_ 3221225472 COPYITSSET 1 "Copy" 0 "Not copy" ; +VAL_ 3221225472 COPYDRVSET 1 "Copy" 0 "Not copy" ; +VAL_ 3221225472 USER4CHGSW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 USER3CHGSW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 USER2CHGSW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 USER1CHGSW 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 CURLOGIN_USERINFO 3 "User4" 2 "User3" 1 "User2" 0 "User1" ; +VAL_ 3221225472 DRVMODE_RESETRQ 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 LOGINKEYLINKSET 1 "Sw is pushed by 0b" 0 "Sw is pushed by 1b" ; +VAL_ 3221225472 USER4_REGINFO 1 "Registration" 0 "Non-Registration" ; +VAL_ 3221225472 USER3_REGINFO 1 "Registration" 0 "Non-Registration" ; +VAL_ 3221225472 USER2_REGINFO 1 "Registration" 0 "Non-Registration" ; +VAL_ 3221225472 USER1_REGINFO 1 "Registration" 0 "Non-Registration" ; +VAL_ 3221225472 INIT_FLAG 1 "Initializing" 0 "Intialized" ; +VAL_ 3221225472 DISP_MODE_REQ_TOUR 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_MODE_REQ_STD 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_MODE_REQ_SPO 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_MODE_REQ_SNOW 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_MODE_REQ_ECO 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_MODE_REQ_CSTM 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 CSTM_STGRES_QIK_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 CSTM_STGRES_MID_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 CSTM_STGEFO_SLW_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 CSTM_STGEFO_MID_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 CSTM_STGEFO_LGT_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 CSTM_STGEFO_HVY_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 TOUR_STGRES_QIK_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 TOUR_STGRES_MID_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 TOUR_STGEFO_SLW_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 TOUR_STGEFO_MID_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 TOUR_STGEFO_LGT_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 TOUR_STGEFO_HVY_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 TOUR_SMB_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 TOUR_PT_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 TOUR_ASA_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 ECO_STGRES_QIK_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 ECO_STGRES_MID_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 ECO_STGEFO_SLW_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 ECO_STGEFO_MID_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 ECO_STGEFO_LGT_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 ECO_STGEFO_HVY_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 ECO_SMB_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 ECO_PT_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 ECO_ASA_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 SNOW_SMB_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 SNOW_ASA_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 SNOW_STGRES_QIK_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 SNOW_STGRES_MID_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 SNOW_STGEFO_SLW_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 SNOW_STGEFO_MID_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 SNOW_STGEFO_LGT_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 SNOW_STGEFO_HVY_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 SNOW_PT_HATIREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_SMB_REQ_OFF_STD 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_SMB_REQ_OFF_SPO 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_SMB_REQ_OFF_PER 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_SMB_REQ_MID_STD 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_SMB_REQ_MID_SPO 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_SMB_REQ_MID_PER 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_SMB_REQ_LGT_STD 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_SMB_REQ_LGT_SPO 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_SMB_REQ_LGT_PER 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_STG_REQ_RES 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_STG_REQ_EFO 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_SMB_REQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_ASA_REQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_PT_REQ_STD 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_PT_REQ_SPO 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_PT_REQ_SNOW 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DISP_PT_REQ_ECO 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 SMB_POPREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 DRIVE_MODE_POPREQ 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 VEHICLE_DRIVE_MODE 7 "Not used" 6 "Not used" 5 "Customize" 4 "Not Used" 3 "ECO" 2 "SNOW" 1 "Sport" 0 "Standard" ; +VAL_ 3221225472 CURLOGIN_USERNUM_IDM 3 "User4" 2 "User3" 1 "User2" 0 "User1" ; +VAL_ 3221225472 DGI_FAIL_FLAG 1 "DiGiAssi fail" 0 "DiGiAssi not fail" ; +VAL_ 3221225472 SW_ST_MET 1 "Meter display Switch ON" 0 "Meter display Switch OFF" ; +VAL_ 3221225472 TIMER_STATUS_MET 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Change Content Request" 2 "VCM Change Content Display" 1 "Change Content Pre-Request" 0 "Current" ; +VAL_ 3221225472 SELCT_THU_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_ 3221225472 TIMER_SELCT_MET 1 "Timer charge ON / Pri A/C ON" 0 "Timer charge OFF / Pri A/C OFF" ; +VAL_ 3221225472 C_TIME_UPDATE_MET 1 "Request" 0 "No Request" ; +VAL_ 3221225472 SELCT_WED_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_ 3221225472 SELCT_TUE_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_ 3221225472 SELCT_SUN_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_ 3221225472 SELCT_SAT_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_ 3221225472 SELCT_MON_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_ 3221225472 SELCT_FRI_MET 3 "Not used" 2 "timer No2" 1 "timer No1" 0 "OFF" ; +VAL_ 3221225472 TIMER_SW_SELECTER_MET 7 "Not used" 6 "next Pri A/C" 5 "next Timer charge" 4 "Pri A/C Timer No,2" 3 "Pri A/C Timer No,1" 2 "Timer charge No,2" 1 "Timer charge No,1" 0 "default " ; +VAL_ 3221225472 MET_CUR_DAY_W 7 "Saturday" 6 "Friday" 5 "Thursday" 4 "Wednesday" 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Not used" ; +VAL_ 3221225472 VDCPURQC 15 "not used" 14 "not used" 13 "not used" 12 "not used" 11 "not used" 10 "backup brake request" 9 "not used" 8 "not used" 7 "not used" 6 "not used" 5 "no backup brake request" 4 "not used" 3 "not used" 2 "not used" 1 "not used" 0 "not used" ; +VAL_ 3221225472 RDY 1 "ready" 0 "not ready" ; +VAL_ 3221225472 EGST 1 "ENGINE Starting Requested" 0 "ENGINE Starting Not Requested" ; +VAL_ 3221225472 EGSTTYP 7 "not used" 6 "not used" 5 "not used" 4 "not used" 3 "not used" 2 "Egn sta to sta performance" 1 "Egn sta of giving priority" 0 "Normal engine start" ; +VAL_ 3221225472 TGETFON 1 "Request the retard" 0 "No Request" ; +VAL_ 3221225472 PRESTP 1 "notification of engine stop" 0 "no notification" ; +VAL_ 3221225472 PREIGOFF 1 "Eng stop del req at Ign OFF" 0 "Non Eng stop del req at Ign OFF" ; +VAL_ 3221225472 VSP_IND_STA 1 "IND ON" 0 "IND OFF" ; +VAL_ 3221225472 DSC_REFUSE 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 SUS_SET_STA 15 "Not Used" 14 "Not Used" 13 "Not Used" 12 "Not Used" 11 "Not Used" 10 "Not Used" 9 "Not Used" 8 "Not Used" 7 "Not Used" 6 "Not Used" 5 "Not Used" 4 "Not Used" 3 "SOUND3" 2 "SOUND2" 1 "SOUND1" 0 "OFF" ; +VAL_ 3221225472 SET_LAN_REQ 31 "Not used" 30 "Not used" 29 "Blank" 28 "Thai" 27 "Norwegian" 26 "Finnish" 25 "Swedish" 24 "Danish" 23 "Hungarian" 22 "Slovak" 21 "Czech" 20 "Poland" 19 "Greek (Greek Alphabet)" 18 "Greek (Latin)" 17 "Trukish" 16 "Portuguese (For Brazil)" 15 " French (For Canada)" 14 "Spanish (For Mexico)" 13 "English (For U.K.)" 12 "Arabic" 11 "Korean" 10 "Chinese(Kantai)" 9 "Chinese(Hantai)" 8 "Japanese" 7 "Russian" 6 " Portuguese (For Portogal)" 5 "Italian" 4 "German" 3 "Dutch" 2 "French (For other than Canada)" 1 " Spanish (For other than Mexico)" 0 "English (For U.S.)" ; +VAL_ 3221225472 CAM_SW_PR 1 "Camera switch is pressed by 0b" 0 "Camera switch is pressed by 1b" ; +VAL_ 3221225472 CAM_SW_KEEP 1 "Camera switch is pressed by 0b" 0 "Camera switch is pressed by 1b" ; +VAL_ 3221225472 CAM_OFF_REQ 1 "Camera switch is pressed by 0b" 0 "Camera switch is pressed by 1b" ; +VAL_ 3221225472 INTIAL 1 "Initialize" 0 "Not initialize" ; +VAL_ 3221225472 VSP_SOUND_CHG_REQ 1 "Request" 0 "No Request" ; +VAL_ 3221225472 SUS_SOUND 15 "Not Used" 14 "Not Used" 13 "Not Used" 12 "Not Used" 11 "Not Used" 10 "Not Used" 9 "Not Used" 8 "Not Used" 7 "Not Used" 6 "Not Used" 5 "Not Used" 4 "Not Used" 3 "SOUND3" 2 "SOUND2" 1 "SOUND1" 0 "OFF" ; +VAL_ 3221225472 BAT_LOW 1 "batt volt low (disp msg on clu)" 0 "batt volt overthres(no display)" ; +VAL_ 3221225472 PKB_IND 3 "Prk brake tight re-emission req" 2 "Unknown state" 1 "parking brake tightened" 0 "parking brake released" ; +VAL_ 3221225472 RR_DEF_SW 1 "RearDefoggerSwitch ON" 0 "RearDefoggerSwitch OFF" ; +VAL_ 3221225472 Themo_SW 1 "Thermo AMP ON" 0 "Thermo AMP OFF" ; +VAL_ 3221225472 AC_SW 1 "A/C SW ON(Low)" 0 "A/C SW OFF(High)" ; +VAL_ 3221225472 BLOWER_FAN 1 " blower fan motor on" 0 " blower fan motor off" ; +VAL_ 3221225472 HL_WASH_SW 1 "HeadLampWasherSwitch ON" 0 "HeadLampWasherSwitch OFF" ; +VAL_ 3221225472 RR_WIP 1 "Rear Wiper ON" 0 "Rear Wiper OFF" ; +VAL_ 3221225472 RR_AS_SW 1 "Rear Wiper moving" 0 "Rear Wiper stop position" ; +VAL_ 3221225472 CURGPDX 1 "Sub trans current gear pos 2nd " 0 "Sub trans current gear pos 1st " ; +VAL_ 3221225472 NEXTGPDX 1 "Sub trans target gear pos 2nd" 0 "Sub trans target gear pos 1st " ; +VAL_ 3221225472 _1stREGEN_OK 1 "Request" 0 "Not request" ; +VAL_ 3221225472 fTTCL2ln 1 "Permit" 0 "Not permit" ; +VAL_ 3221225472 ATMAP_CNG 15 "Not Used" 14 "Not Used" 13 "Not Used" 12 "Not Used" 11 "Not Used" 10 "Not Used" 9 "Not Used" 8 "INV PROTECTION" 7 "FS2" 6 "FS1" 5 "SOC" 4 "OPT2" 3 "OPT1" 2 "FAIL" 1 "POW" 0 "Not Request" ; +VAL_ 3221225472 ASC_STOP_MODE 3 "Not Permit" 2 "LIMIT2" 1 "LIMIT1" 0 "Permit" ; +VAL_ 3221225472 CL2TMODE 6 "Not Used" 5 "Not Used" 4 "Not Used" 1 "Not Used" 7 "No Request" 3 "Smooth L/U ON" 2 "Follow To TTCL2" 0 "OPEN CL2 Request" ; +VAL_ 3221225472 CL1_Standby 1 "OPEN" 0 "Not OPEN" ; +VAL_ 3221225472 ALU_Q 170 "ALU Type A" 85 "ALU Type B" ; +VAL_ 3221225472 SHIFTREVREQ 7 "4000rpm" 6 "No Limit" 5 "No Limit" 4 "No Limit" 3 "No Limit" 2 "No Limit" 1 "No Limit" 0 "No Limit" ; +VAL_ 3221225472 BDY_STYL 3 "Style3" 2 "Style2" 1 "Style1" 0 "Style0" ; +VAL_ 3221225472 WIPER_ON 1 " Wiper state ON" 0 " Wiper state OFF" ; +VAL_ 3221225472 BCI_STATUS_MOD 1 "active" 0 "Inactive" ; +VAL_ 3221225472 BCI_BUZ_DMD_MOD 1 "Buzzer demand ON" 0 "Buzzer demand OFF" ; +VAL_ 3221225472 BCI_BUZ2_SNR 1 " buzzer2 demand ON" 0 "buzzer2 demand OFF" ; +VAL_ 3221225472 BCI_BUZ1_SNR 1 "buzzer1 demand ON" 0 "buzzer1 demand OFF" ; +VAL_ 3221225472 IDLRQ 1 "Engine ISC request" 0 "Not request" ; +VAL_ 3221225472 GPHOJI 3 "shift up or down authorized" 2 "shift up authorized" 1 "shift down authorized" 0 "gear shift forbidden" ; +VAL_ 3221225472 fCL2SLPTAG 1 "EV@micro SLIP" 0 "Except EV@micro SLIP" ; +VAL_ 3221225472 CHGPNG 1 "Shift Forbid" 0 "Shift Permit" ; +VAL_ 3221225472 ENGCNKOK 1 "Running" 0 "Not Running" ; +VAL_ 3221225472 ENGSTART 1 "Engine Start" 0 "Not Engine Start" ; +VAL_ 3221225472 OPSTART 1 "Request" 0 "No Request" ; +VAL_ 3221225472 MGCHGPNG 1 "MG Shift Forbid" 0 "MG Shift Permit" ; +VAL_ 3221225472 OPDRIVE 1 "O/P DRIVE PERMIT" 0 "O/P DRIVE NOT PERMIT" ; +VAL_ 3221225472 MDWNSTA 1 "Manual down shift status" 0 "Not manual down shift status" ; +VAL_ 3221225472 EngStartNgJudgeAtcu 1 "Prohibit" 0 "Permit" ; +VAL_ 3221225472 Engagement_Control_State 3 "Engage status" 2 "Shift phase" 1 "KickCharge, Precharge, HOLD sts" 0 "Not engage status " ; +VAL_ 3221225472 ASC_MODE 15 "Not used" 14 "Not used" 13 "Not used" 12 "P33" 11 "ECO and Deceleration Increase" 10 "P32" 9 "P22" 8 "Normal and Deceleration Increase" 7 "P31" 6 "P21" 5 "P11" 4 "ECO" 3 "P30" 2 "P20" 1 "P10" 0 "Normal" ; +VAL_ 3221225472 NextGP_MAP 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "neutral or parking" 9 "Reverse" 8 "8th gear(HCM Not used)" 7 "7th gear" 6 "6th gear" 5 "5th gear" 4 "4th gear" 3 "3rd gear" 2 "2nd gear" 1 "1st gear" 0 "declutched at rest" ; +VAL_ 3221225472 fNoOpnPrs1 1 "release plessure min" 0 "release plessure not min" ; +VAL_ 3221225472 CL2TMP_D_or_P_Flag 1 "Estimated temp on RevB( R )" 0 "Estimated temp on LowB( D )" ; +VAL_ 3221225472 AT_TorqueControlType 15 "NotUsed" 14 "NotUsed" 13 "NotUsed" 12 "NotUsed" 11 "NotUsed" 10 "NotUsed" 9 "NotUsed" 8 "NotUsed" 7 "Rev ctrl chg req at DriveDown" 6 "Rev ctrl chg req at Eng start" 5 "HG Duette Control" 4 "Rev ctrl chg req at CoastDown" 3 "Rev ctrl chg req at kicDown" 2 "Rev ctrl chg req at CoastUp" 1 "Rev ctrl chg req at DriveUp" 0 "Trq limit w/o AT shift change " ; +VAL_ 3221225472 AT_FAIL_STATUS 3 "Under FAIL or tmp limp home mode" 2 "or diagnosis of failure parts" 1 "Restr of shftchg&1st rear take" 0 "No restriction" ; +VAL_ 3221225472 ALU_ANSWER 170 "Answer1" 85 "Answer2" ; +VAL_ 3221225472 Sub_OP_StopRequest 1 "request" 0 "no request" ; +VAL_ 3221225472 ASC_INH_ITS2 1 "inhibit" 0 "permit" ; +VAL_ 3221225472 ASC_INH_ITS3 1 "inhibit" 0 "permit" ; +VAL_ 3221225472 ASC_INH_ITS1 1 "inhibit" 0 "permit" ; +VAL_ 3221225472 ASC_INH_ALL 1 "inhibit" 0 "permit" ; +VAL_ 3221225472 RAD_ST4_toAT 1 "Object Data Vallid" 0 "Not object" ; +VAL_ 3221225472 RAD_ST3_toAT 1 "Object Type Stationary" 0 "Not object/Object Type Mnt" ; +VAL_ 3221225472 CAMERA_FAILtoAT 1 "fail" 0 "Not fail" ; +VAL_ 3221225472 LASER_FAILtoAT 1 "fail" 0 "Not fail" ; +VAL_ 3221225472 ISFBDRQ 1 "Idle stop prohibit request" 0 "Idle stop prohibit not request" ; +VAL_ 3221225472 SBKEXP 1 "First ignition finished" 0 "First ignition not finished" ; +VAL_ 3221225472 FCUTNUM 15 "not used" 14 "not used" 13 "not used" 12 "not used" 11 "not used" 10 "not used" 9 "not used" 8 "not used" 7 "not used" 6 "6 cylinder Fuel-cut" 5 "5 cylinder Fuel-cut" 4 "4 cylinder Fuel-cut" 3 "3 cylinder Fuel-cut" 2 "2 cylinder Fuel-cut" 1 "1 cylinder Fuel-cut" 0 "Fuel-cut is not executing" ; +VAL_ 3221225472 CLENGENA 1 "engage enable " 0 "engage disable" ; +VAL_ 3221225472 FS_SFCUTM_RQ 1 "Safety fuel cut mode request" 0 "Non-Safety fuel cut mode request" ; +VAL_ 3221225472 FS_LMT_ENG_PWR 1 "engine power limit request" 0 "Non-engine power limit request" ; +VAL_ 3221225472 FS_LMT_APO 1 "delta APO limit reqest " 0 "Non-delta APO limit reqest " ; +VAL_ 3221225472 INTER_LOCK_OK 1 "Intermediate-lock status" 0 "Not intermediate-lock status" ; +VAL_ 3221225472 EGVRRQ 1 "EGVR is required" 0 "EGVR is not required" ; +VAL_ 3221225472 STPENA 1 "ENG Stop Permit" 0 "ENG Stop Prohibit" ; +VAL_ 3221225472 FSMPWRLRQ 1 "Fail SafeMotorPowLimit Req" 0 "NonFail SafeMotorPowLimit Req" ; +VAL_ 3221225472 FSEVRQ 1 "Fail Safe EV Request" 0 "Non Fail Safe EV Request" ; +VAL_ 3221225472 ETCDEF 1 "ETC Default Fail Safe Req" 0 "Non ETC Default Fail Safe Req" ; +VAL_ 3221225472 FCFBDRQ 1 "Fuel cut prohibit request" 0 "Fuel cut prohibit not request" ; +VAL_ 3221225472 ACCUT_ENG 1 "ENG AC CUT Request" 0 "ENG AC CUT NOT Request " ; +VAL_ 3221225472 EGVRMTNG 1 "confirmed NG" 0 "not confirmed NG" ; +VAL_ 3221225472 EGVRRQMD 3 "not used" 2 "EGVR req normal temp mode" 1 "EGVR req low temp mode" 0 "EGVR req extremely low temp mode" ; +VAL_ 3221225472 POSDTNG 1 "POS Sesnor Diagnosis NG" 0 "POS Sesnor Diagnosis OK" ; +VAL_ 3221225472 TWDTNG 1 "Enginecoolant temp.ses diag NG" 0 "Enginecoolant temp.ses diag OK" ; +VAL_ 3221225472 FCSTP 1 "Reqest Fuel Cut" 0 "Not Reqest Fuel Cut" ; +VAL_ 3221225472 EGVRJGAR 1 "within the area OK/NG judged" 0 "outside of the area OK/NG judged" ; +VAL_ 3221225472 EGVRAVJG 1 "EGVR monitor available" 0 "EGVR monitor not available" ; +VAL_ 3221225472 NERV 1 "Engine running" 0 "Non Engine running" ; +VAL_ 3221225472 ETCDEFRQ 1 "ETC Default Request" 0 "Non ETC Default Request" ; +VAL_ 3221225472 ENG_ON 1 "Engine ON" 0 "Engine OFF" ; +VAL_ 3221225472 IND_RNG 31 "Not used" 30 "Not used" 29 "Auto 6th" 28 "Auto 5th" 27 "Auto 4th" 26 "Auto 3rd" 25 "Auto 2nd" 24 "Auto 1st" 23 "Manual 8th" 22 "Manual 7th" 21 "Manual 6th" 20 "Manual 5th" 19 "Manual 4th" 18 "Manual 3rd" 17 "Manual 2nd" 16 "Manual 1st" 15 "Not used" 14 "Not used" 13 "6 range" 12 "5 range" 11 "4 range" 10 "3 range" 9 "2 range" 8 "1 range" 7 "B range" 6 "L range" 5 "S range" 4 "D range (A range)" 3 "N range" 2 "R range" 1 "P range" 0 "OFF" ; +VAL_ 3221225472 FR_WIP_REQ 3 "one high speed wiping requested" 2 "one low speed wiping requested" 1 " front wiper forced to stop" 0 " front wiper in stop position" ; +VAL_ 3221225472 FUNC_ALIVE 1 "normal" 0 "Abnormal (Standstill)" ; +VAL_ 3221225472 CRUSTER_ILL_REQ 1 " cluster illumination req" 0 " cluster illumination not req" ; +VAL_ 3221225472 SOW_ACT 1 " ON" 0 " OFF" ; +VAL_ 3221225472 HMISTATE_R 3 "Continuous at HMIORDER_R" 2 "High Frequency" 1 "Low Frequency" 0 "OFF" ; +VAL_ 3221225472 HMISTATE_L 3 "Continuous at HMIORDER_L" 2 "High Frequency" 1 "Low Frequency" 0 "OFF" ; +VAL_ 3221225472 HMIORDER_R 1 " ON" 0 " OFF" ; +VAL_ 3221225472 HMIORDER_L 1 " ON" 0 " OFF" ; +VAL_ 3221225472 HMIIMMDIATE_R 1 " ON" 0 " OFF" ; +VAL_ 3221225472 HMIIMMDIATE_L 1 " ON" 0 " OFF" ; +VAL_ 3221225472 HMI_ACT 1 " ON" 0 " OFF" ; +VAL_ 3221225472 CTA_CHANGE_REQ 1 "CTA recognition mode" 0 "BSD recognition mode" ; +VAL_ 3221225472 PEDALERR 1 "APS's fail is detected." 0 "APS's fail is not detected." ; +VAL_ 3221225472 HCMFAIL 1 "fail" 0 "not fail" ; +VAL_ 3221225472 HCMASCD_ACTIVATE 1 "ASCD activating" 0 "ASCD not activating" ; +VAL_ 3221225472 HCM_WSC 1 "WSC is active" 0 "WSC is not active" ; +VAL_ 3221225472 HCM_EGSTT 1 "crunking" 0 "not crunking" ; +VAL_ 3221225472 HCM_EGSTP 1 "operating to stop the Engine" 0 "not operating" ; +VAL_ 3221225472 BTA_MAIL_SEND_RQ 1 "Mail send request" 0 "no request" ; +VAL_ 3221225472 LB_HEATEXIST 1 "With Battery heating" 0 "Without Battery heating" ; +VAL_ 3221225472 LB_HEATSTOPMAIL_REQ 1 "Heat Stop Mail send request" 0 "no request" ; +VAL_ 3221225472 LB_HEATSTARTMAIL_REQ 1 "Heat Start Mail send request" 0 "no request" ; +VAL_ 3221225472 LB_HIS_DATA_SW 3 "Minimum data" 2 "Average data" 1 "Maximum data" 0 "Not calculated" ; +VAL_ 3221225472 NEAR_OBJ_FLAG_RR 1 "detection object is near" 0 "detection object is not near" ; +VAL_ 3221225472 NEAR_OBJ_FLAG_FR 1 "detection object is near" 0 "detection object is not near" ; +VAL_ 3221225472 PARK_GUIDE_STATUS 3 " reservation" 2 " reservation" 1 " Among parking guides" 0 "Besides a parking guide" ; +VAL_ 3221225472 MOD_SYS_STATUS_TOP 3 "Temporary OFF" 2 "Inactive" 1 "Active" 0 "Permanent OFF" ; +VAL_ 3221225472 MOD_SYS_STATUS_RR 3 "Temporary OFF" 2 "Inactive" 1 "Active" 0 "Permanent OFF" ; +VAL_ 3221225472 MOD_SYS_STATUS_FR 3 "Temporary OFF" 2 "Inactive" 1 "Active" 0 "Permanent OFF" ; +VAL_ 3221225472 MOD_FAIL_FLAG 1 "fail" 0 "not fail" ; +VAL_ 3221225472 MOD_DETECT_AREA_TOP 4 "detect it in the rear" 3 "detect it in the left" 2 "detect it in the right" 1 "detect it in the front" 0 "no detection" ; +VAL_ 3221225472 MOD_DETECT_DETECTION_RR 4 "detect it in the rear" 3 "detect it in the left" 2 "detect it in the right" 1 "detect it in the front" 0 "no detection" ; +VAL_ 3221225472 MOD_DETECT_DETECTION_FR 4 "detect it in the rear" 3 "detect it in the left" 2 "detect it in the right" 1 "detect it in the front" 0 "no detection" ; +VAL_ 3221225472 MOD_BUZ2_REQ 1 "demand" 0 " no demand" ; +VAL_ 3221225472 MOD_BUZ1_REQ 1 "demand" 0 " no demand" ; +VAL_ 3221225472 SET_ITS 1 "Req Disp ITS setting view" 0 "Req Disp no ITS setting view" ; +VAL_ 3221225472 MOD_STATUS 1 "Request to disp set ON of MOD" 0 "Request to disp set OFF of MOD" ; +VAL_ 3221225472 LDW_STATUS 1 "Request to disp set ON of LDW" 0 "Request to disp set OFF of LDW" ; +VAL_ 3221225472 BSW_STATUS 1 "Request to disp set ON of BSW" 0 "Request to disp sett OFF of BSW" ; +VAL_ 3221225472 BEEP_TYPE 1 "Sound Error BEEP" 0 "Sound Normal BEEP" ; +VAL_ 3221225472 BEEP_REQ 1 "Request message is sent by 0b" 0 "Request message is sent by 1b" ; +VAL_ 3221225472 VIEW_CH_REQ 1 "Req disp view of cam" 0 "Req disp othr thn view of cam" ; +VAL_ 3221225472 AOD_BEEP2_REQ 1 "AOD Beep B" 0 " No request" ; +VAL_ 3221225472 AOD_BEEP1_REQ 1 "AOD Beep A" 0 " No request" ; +VAL_ 3221225472 SOW_SYSTEM_BUZZER 1 "Buzzer Request" 0 "No Buzzer Request" ; +VAL_ 3221225472 SOW_LMP 1 "Request" 0 "No Request" ; +VAL_ 3221225472 SOW_FAIL_BUZZER 1 "Buzzer Request" 0 "No Buzzer Request" ; +VAL_ 3221225472 SOW_SEN_FUNC_STAT_3FE 1 "CTA recognition mode" 0 " BSD recognition mode" ; +VAL_ 3221225472 SOW_SEN_FUNC_STAT_3FD 1 "CTA recognition mode" 0 " BSD recognition mode" ; +VAL_ 3221225472 SOW_SEN_FUNC_STAT_3FC 1 "CTA recognition mode" 0 " BSD recognition mode" ; +VAL_ 3221225472 SOW_SEN_FUNC_STAT_3FB 1 "CTA recognition mode" 0 " BSD recognition mode" ; +VAL_ 3221225472 CLROP 1 "clear" 0 "not clear" ; +VAL_ 3221225472 TEST_OP 1 "TRQ request" 0 "OilPressure request" ; +VAL_ 3221225472 MUX_OP 1 "stro ofCANmute/absfail auth" 0 "stro ofCANmute/absfailnotauth" ; +VAL_ 3221225472 INT_EL_ANO_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 BUSSOFF_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 MUTE_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 ABSENT_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 SYS_FAIL_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 ASENSOR_FAIL 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 RLY_OFF_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 RLY_ON_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 MOT_LO_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 MOT_HI_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 TEMPSEN_LO_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 TEMPSEN_HI_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 TEMP_FAIL_OP 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 INVREADY 1 "INVReady" 0 "INVnoReady" ; +VAL_ 3221225472 STEP_OUT_OP 1 "OP_step_out" 0 "normal" ; +VAL_ 3221225472 POW_SAVE_OP 1 "Sub_OP_STOPrequest" 0 "normal" ; +VAL_ 3221225472 ALU_Q_LBC 2 "Not used" 1 "second question" 0 "first question" ; +VAL_ 3221225472 C_Down 1 "cool down status" 0 "not cool down status" ; +VAL_ 3221225472 INTAKE 1 "Except for REC" 0 "REC" ; +VAL_ 3221225472 BLW_SPD 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "FAN + Level7" 6 "FAN + Level6" 5 "FAN + Level5" 4 "FAN + Level4" 3 "FAN + Level3" 2 "FAN + Level2" 1 "FAN + Level1" 0 "OFF" ; +VAL_ 3221225472 OFF_WED_IT_M 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_TUE_IT_M 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_THU_IT_M 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_SUN_IT_M 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_SAT_IT_M 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_MON_IT_M 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_FRI_IT_M 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 TSOC_ITM 1 "Deterioration restraint" 0 "100%" ; +VAL_ 3221225472 SELCT_WED_ITM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 SELCT_TUE_ITM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 SELCT_THU_ITM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 SELCT_SUN_ITM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 SELCT_SAT_ITM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 SELCT_MON_ITM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 SELCT_FRI_ITM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 MODE_SELCT_SW_ITM 1 "80% chg or priority to Pri A/C" 0 "100% chg or priority to chg" ; +VAL_ 3221225472 NEXT_CHG_DAY_ITM 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_ 3221225472 STP_CAPAACITY_ITM 1 " ON" 0 " OFF" ; +VAL_ 3221225472 TIMER_SW_SELECTER_ITM 3 "Pri A/C Timer No,1" 2 "Timer charge No,2" 1 "Timer charge No,1" 0 "No Setting" ; +VAL_ 3221225472 TIMER_STATUS_ITM 3 "Change Content Request" 2 "VCM Change Content Display" 1 "Change Content Pre-Request" 0 " Current" ; +VAL_ 3221225472 Timer_No_ITM 3 "Pri A/C Timer No,1" 2 "Timer charge No,2" 1 "Timer charge No,1" 0 "No Setting" ; +VAL_ 3221225472 TIMER_CHG_SW_ITM 1 "Request" 0 "No Request" ; +VAL_ 3221225472 TIMER_CHG_SELECT2_ITM 1 " ON" 0 " OFF" ; +VAL_ 3221225472 TIMER_CHG_SELECT1_ITM 1 " ON" 0 " OFF" ; +VAL_ 3221225472 NEXT_PRI_AC_DAY_ITM 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_ 3221225472 PRI_AC_SET2_IND_ITM 1 " ON" 0 " OFF" ; +VAL_ 3221225472 PRI_AC_SET1_IND_ITM 1 " ON" 0 " OFF" ; +VAL_ 3221225472 PRI_AC_PRIORITY_ITM 1 "priority to Pri A/C" 0 "priority to charge" ; +VAL_ 3221225472 PRI_AC_INFO_ITM 1 "Request" 0 "No Request" ; +VAL_ 3221225472 CUR_DAY_ITM 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_ 3221225472 REC_FLAG 1 "Reception completion" 0 "Reception non-completion" ; +VAL_ 3221225472 GPS_CUR_DAY 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_ 3221225472 TONO_BOARD_MSG 3 "Ton Board s/w error" 2 "Ton Board ~sets in luggage room" 1 "Ton Board sets in luggage room" 0 "Reserved" ; +VAL_ 3221225472 ROOF_OPE_BUZ 3 "Buzzer req3" 2 "Buzzer req2" 1 "Buzzer req1" 0 "No request" ; +VAL_ 3221225472 RHT_Status_MSG 3 "Roof error" 2 "Roof is Open" 1 "Roof is intermidiate position" 0 "Roof is Closed" ; +VAL_ 3221225472 RHT_MOV_MSG 1 "Roof isn't movable" 0 "Roof is movable" ; +VAL_ 3221225472 RHT_METER_SIG 1 "Meter display is enable" 0 "Meter display is disable" ; +VAL_ 3221225472 EMPTY_RQ 1 "turn on" 0 "turn off" ; +VAL_ 3221225472 DTE_RQ 3 "Not used" 2 "bar is displayed" 1 "bar is flashed" 0 "DTE value is displayed" ; +VAL_ 3221225472 DTE_FLASH 1 "flashing" 0 "not flashing" ; +VAL_ 3221225472 MVP_HCM_STAT 3 "Not use" 2 "HCM error" 1 "Sensor error" 0 "Normal" ; +VAL_ 3221225472 BMCEXE 1 "BMC active" 0 "BMC not active" ; +VAL_ 3221225472 BMCACK 1 "BMC Acknowledgement" 0 "BMC not Acknowledgement" ; +VAL_ 3221225472 RQASA 1 "require" 0 "not require" ; +VAL_ 3221225472 CDMODERQ 7 "Not used" 6 "Not used +" 5 "Not used" 4 "Not used" 3 "Not used" 2 "Not used" 1 "request" 0 "no request" ; +VAL_ 3221225472 BRKCOMSTAT 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 VCMRBFAIL 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 OBJ_GRP 1 " ON" 0 " OFF" ; +VAL_ 3221225472 HI_BEAM_DET 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ST_RELE 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ST_OTYP 1 "Object Type Stationary" 0 "Not object" ; +VAL_ 3221225472 ST_ODV 1 " Object Data Valid" 0 "Not object" ; +VAL_ 3221225472 ST_OBJ 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ST_CHG 1 "Object exist" 0 "Object changed" ; +VAL_ 3221225472 PEAK_DET 1 " ON" 0 " OFF" ; +VAL_ 3221225472 HL_LOW_SCAN 1 " ON" 0 " OFF" ; +VAL_ 3221225472 WIDTH_UNFIT 1 " ON" 0 " OFF" ; +VAL_ 3221225472 AMP_WHOL 1 " ON" 0 " OFF" ; +VAL_ 3221225472 AMP_HOL 1 " ON" 0 " OFF" ; +VAL_ 3221225472 PEAK_WIDTH_UNFIT 1 " ON" 0 " OFF" ; +VAL_ 3221225472 IS_REQ_ACM 1 "Request" 0 "Not request" ; +VAL_ 3221225472 REV_UP_REQ_HIGH_OIL 1 "Rev up request" 0 "Non-Rev up request" ; +VAL_ 3221225472 FS_LMT_ENG_REV 3 "engine revolution limit level 3" 2 "engine revolution limit level 2" 1 "engine revolution limit level 1" 0 "Non limit request" ; +VAL_ 3221225472 VTCNOACT 1 "Judge to VTC OFF" 0 "Judge to not VTC OFF" ; +VAL_ 3221225472 HIGH_ENGOIL_TMP 1 "high engine oil temp" 0 "not high engine oil temp" ; +VAL_ 3221225472 REGGAS 1 "Judge to regular octance gas" 0 "Judge to high octane gas" ; +VAL_ 3221225472 OBD_WUC 1 "Warm Up Cycle is completed" 0 "Warm Up Cycle is not completed" ; +VAL_ 3221225472 OBD_RDY_ON 1 "HEV sys Ready" 0 "HEV sys Not-Ready" ; +VAL_ 3221225472 OBD_GENERAL_TRIP 1 "GenTrip for PDTC clear comp" 0 "GenTrip for PDTC clear not comp" ; +VAL_ 3221225472 OBD_MILREQ 1 "MIL ON" 0 "MIL OFF" ; +VAL_ 3221225472 RFCNTMG 3 "Not used" 2 "Hi" 1 "mid" 0 "OFF" ; +VAL_ 3221225472 MC_Slave_RefuseToSleep 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 LCNT 3 "counter value" 2 "MIN value" 1 "MAX value" 0 "realtime value" ; +VAL_ 3221225472 MG_MIL 1 "MIL ON is required" 0 "MIL ON is not required" ; +VAL_ 3221225472 LB_FANREQ 7 "level7 rotation" 6 "level6 rotation" 5 "level5 rotation" 4 "level4 rotation" 3 "level3 rotation" 2 "level2 rotation" 1 "level1 rotation" 0 "Stop" ; +VAL_ 3221225472 LB_EGVR_STOP_REQ 1 "EGVR Stop Request" 0 "EGVR Not Stop Request" ; +VAL_ 3221225472 LB_EGVR_MNTR_STOP_REQ 1 "EGVR Monitor Stop Request" 0 "EGVR Monitor Not Stop Request" ; +VAL_ 3221225472 LB_DCDC 1 "Malfunction" 0 "Normal" ; +VAL_ 3221225472 LB_REFUSE 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 LB_EMPTY 1 "Batt Empty" 0 "Not Batt Empty" ; +VAL_ 3221225472 LB_IRSEN 1 "Malfunction" 0 "Normal" ; +VAL_ 3221225472 BTCDOWN 1 "request" 0 "not request" ; +VAL_ 3221225472 DCDC_STATUS 3 "DC/DC FAN sutatus H + OC" 2 "DC/DC FAN sutatus H" 1 "DC/DC FAN sutatus M" 0 "DC/DC FAN sutatus L" ; +VAL_ 3221225472 LB_MIL 1 "MIL Lamp On Request" 0 "No-Request" ; +VAL_ 3221225472 CHG_HTY_D2 15 "Invalid value" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Not used" 2 "Quick charge" 1 "200V" 0 " 100V" ; +VAL_ 3221225472 CHG_TYP_INFO 3 "100V normal charge enforcement" 2 "200V normal charge PCS enforce" 1 "quick charge enforcement" 0 "Non enforcement (invalid)" ; +VAL_ 3221225472 VCM_SPEC_NO 3 "Not used" 2 "Not used" 1 "timer 3type" 0 "timer 2type" ; +VAL_ 3221225472 CHG_TYP_INFO2 1 "100V charge enforcement" 0 "200V charge enforcement" ; +VAL_ 3221225472 NEW_VCM_SPEC_NO 3 "timer 3type + POI" 2 "timer 3type + POI" 1 "timer 3type + POI" 0 "default" ; +VAL_ 3221225472 OFF_SAT_VCM 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_WED_VCM 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_THU_VCM 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_FRI_VCM 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_TUE_VCM 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_MON_VCM 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 OFF_SUN_VCM 1 "OFF Setting" 0 "ON Setting" ; +VAL_ 3221225472 SELCT_TUE_VCM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 RE_WATCH_ADJ_VCM 1 "VCM clock may be wrong" 0 "VCM clock may not be wrong" ; +VAL_ 3221225472 TIMER_SELCT_VCM 1 "Pri A/C ON or Timer Charge ON" 0 "Pri A/C OFF or Timer Charge OFF" ; +VAL_ 3221225472 SELCT_THU_VCM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 SELCT_SAT_VCM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 SELCT_FRI_VCM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 TIMER_START_DAY_VCM 7 "Saturday" 6 "Friday" 5 "Thursday" 4 "Wednesday" 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_ 3221225472 CUR_DAY_VCM 7 "Saturday" 6 "Friday" 5 "Thursday" 4 "Wednesday" 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_ 3221225472 SELCT_WED_VCM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 MODE_SELCT_SW_VCM 1 "priority to Pri A/C or 80%Charge" 0 "priority to charge or 100%Charge" ; +VAL_ 3221225472 SELCT_SUN_VCM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 SELCT_MON_VCM 1 "timer No,2" 0 "timer No,1" ; +VAL_ 3221225472 BOOKDIPLAY_STATUS 7 "not used" 6 "not used" 5 "not used" 4 "not used" 3 "False set of Book information " 2 "False set of Pri A/C information" 1 "False set of Timer Chg info" 0 "OK" ; +VAL_ 3221225472 NEXT_CHG_DAY_VCM 7 "Saturday" 6 "Friday" 5 "Thursday" 4 "Wednesday" 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_ 3221225472 STP_CAPACITY_VCM 1 " ON" 0 " OFF" ; +VAL_ 3221225472 TIMER_CHG_SELCT2_VCM 1 " ON" 0 " OFF" ; +VAL_ 3221225472 TIMER_CHG_SELCT1_VCM 1 " ON" 0 " OFF" ; +VAL_ 3221225472 TIMER_STATUS_VCM 7 "not used" 6 "not used" 5 "not used" 4 "Completion" 3 "not used" 2 "During" 1 "not used" 0 "Current" ; +VAL_ 3221225472 Timer_No_VCM 7 "No setting" 6 "Not used" 5 "Not used " 4 "Pri A/C Timer No.2" 3 "Pri A/C Timer No.1" 2 "Timer charge No.2" 1 "Timer charge No.1" 0 "default" ; +VAL_ 3221225472 RESET_TRIP_METER 1 "reset request" 0 "not request" ; +VAL_ 3221225472 Dischg_Stop_AlmSet 1 "enable" 0 "disenable" ; +VAL_ 3221225472 CHG_FN_DAY 7 "Satday" 6 "Friday" 5 "Thursday" 4 "Wednesday" 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_ 3221225472 NEXT_PRI_AC_DAY_VCM 7 "Saturday" 6 "Friday" 5 "Thursday" 4 "Wednesday" 3 "Tuesday" 2 "Monday" 1 "Sunday" 0 "Invalid value" ; +VAL_ 3221225472 PRI_AC_PRIORITY_VCM 1 "priority to Pri A/C" 0 "priority to charge" ; +VAL_ 3221225472 PRI_AC_SET2_IND_VCM 1 "ON" 0 "OFF" ; +VAL_ 3221225472 PRI_AC_SET1_IND_VCM 1 "ON" 0 "OFF" ; +VAL_ 3221225472 AC_FS 7 "100%(Hi)" 6 "85%(Mid)" 5 "78%" 4 "70%(Lo)" 3 "55%" 2 "40%" 1 "25%" 0 "0%" ; +VAL_ 3221225472 AC_FDT 15 "16min" 14 "14min" 13 "12min" 12 "10min" 11 "8min" 10 "6min" 9 "5min" 8 "4min" 7 "3.5min" 6 "3min" 5 "2.5min" 4 "2min" 3 "1.5min" 2 "1min" 1 "0.5min" 0 "No Request" ; +VAL_ 3221225472 CHG_OPTION_6KW 1 "option(6KW Charger)" 0 "none" ; +VAL_ 3221225472 MGPWRBST 1 "MG POWER BOOST IS READY" 0 "MG POWER BOOST IS NOT READY" ; +VAL_ 3221225472 MGMODE 1 "Revolution Control Mode" 0 "Torque Control Mode" ; +VAL_ 3221225472 MEGVRSTOP 1 "MG EGVR STOP" 0 "MG EGVR NOT STOP" ; +VAL_ 3221225472 UPMGTRQ_DIS 1 "For Negative Torque" 0 "For Positive Toruque" ; +VAL_ 3221225472 MGDPA 3 "MG cannot Recover" 2 "Low Voltage" 1 "MG High Temperature" 0 "MG DPA No Request" ; +VAL_ 3221225472 MGSTATUS 3 "RLY OFF Request" 2 "Stop PWM" 1 "Lamp Request" 0 "No Request" ; +VAL_ 3221225472 MCRESTATST 1 "MG ReStart OK" 0 "MG ReStart NG" ; +VAL_ 3221225472 MPRSTATUS 1 "MG PreCharge OK" 0 "MG PreCharge NG" ; +VAL_ 3221225472 MCPFN 1 "MG Condenser Charge Complete" 0 "MG Condenser Charge not Complete" ; +VAL_ 3221225472 MSTFN 1 "MG control OK" 0 "MG control NG" ; +VAL_ 3221225472 MDISCSTATUS 1 "Discharge Status" 0 "Not Discharge Status" ; +VAL_ 3221225472 LB_VOL_LATCH 1 "ON" 0 "OFF" ; +VAL_ 3221225472 LB_ND4INTTRG 1 "DATA store Request" 0 "No-Request" ; +VAL_ 3221225472 LB_STATUS 7 "CLR & Main Relay OFF Request" 6 "CLR & Charging Mode Stop Request" 5 "CLR & Main Relay OFF Request" 4 "Caution Lamp Request" 3 "Main Relay OFF Request" 2 "Charging Mode Stop Request" 1 "Main Relay OFF Request" 0 "normal start Request" ; +VAL_ 3221225472 LB_FAIL 3 "Main Relay OFF Request" 2 "Main Relay OFF Request" 1 "Main Relay OFF Request" 0 "No-Request" ; +VAL_ 3221225472 LB_POUT_STATUS 3 "Immediate limit POUT" 2 "High rate limit POUT" 1 "Normal limit POUT" 0 "Not used" ; +VAL_ 3221225472 LB_FRLYON 1 "Main Relay On Permission" 0 "No Permission" ; +VAL_ 3221225472 LB_INTERLOCK 1 "Inter Lock connected" 0 "Not Inter Lock connected" ; +VAL_ 3221225472 LB_FCHGEND 1 "Full charge completed" 0 "Not completed" ; +VAL_ 3221225472 STCL1 1 "Clutch1 : connect" 0 "Clutch1 : open" ; +VAL_ 3221225472 fCOAST 1 "COAST" 0 "Not COAST" ; +VAL_ 3221225472 EGVR_OPERATION 1 "Request" 0 "No Request" ; +VAL_ 3221225472 STOP_PKB_ST 1 "request status" 0 "not request status" ; +VAL_ 3221225472 ASCDBRESW 1 "brake activated" 0 "brake not activated" ; +VAL_ 3221225472 VCMCANFAULT 1 "fail with CRC,PRUN from 11A" 0 "not fail" ; +VAL_ 3221225472 P_LOCK_KEY 1 "unlock" 0 "lock" ; +VAL_ 3221225472 VCMINHIBIT 3 "P to other" 2 "D to R, or R to D " 1 "P to not N or N to not P" 0 "no Inhibit" ; +VAL_ 3221225472 MGCTLMD 1 "Revolution Control" 0 "Torque Control" ; +VAL_ 3221225472 fEGST_COLD 1 "Low Temp Engine Start Request" 0 "No Requset" ; +VAL_ 3221225472 SDSW 1 "SDSW Connect" 0 "Not SDSW Connect" ; +VAL_ 3221225472 POUT_UP_REQ 1 "Request" 0 "No Request" ; +VAL_ 3221225472 RLYP 1 "MainRelayPlus Output" 0 "MainRelayPlus Not Output" ; +VAL_ 3221225472 VCM_SIFT 3 "P range" 2 "D range or B range" 1 "R range" 0 "N range" ; +VAL_ 3221225472 VIBCONTRQ 3 "FF & FB stop" 2 "Not used" 1 "FB stop" 0 "Not stop" ; +VAL_ 3221225472 PWMOFFRQ 1 "PWM Stop" 0 "Normal" ; +VAL_ 3221225472 BTONFN 1 "High Voltage supply" 0 "High Voltage not supply" ; +VAL_ 3221225472 BONPRRQ 1 "Request For Preparing HVPS" 0 "Not Request For Preparing HVPS" ; +VAL_ 3221225472 BTSTRQ 1 "HEV System Start" 0 "HEV System Stop" ; +VAL_ 3221225472 DISCHARGERQ 1 "Discharge Request" 0 "Not Discharge Request" ; +VAL_ 3221225472 SYSTEMCOMP 1 "System Down Complete " 0 "System Down Not Complete " ; +VAL_ 3221225472 OB_ST_OTYP 1 "object-type stationary" 0 " object-type dynamical" ; +VAL_ 3221225472 OB_ST_ODV 1 "object-data valid" 0 "object-data invalid" ; +VAL_ 3221225472 fCAN_LR_NG 1 "Laser Fail" 0 "Normal" ; +VAL_ 3221225472 fLS_LOOK_UP 1 "Axis fail" 0 "OK" ; +VAL_ 3221225472 fLS_LOOK_RIGHT 1 "Axis fail" 0 "OK" ; +VAL_ 3221225472 fLS_LOOK_LEFT 1 "Axis fail" 0 "OK" ; +VAL_ 3221225472 fLS_LOOK_DOWN 1 "Axis fail" 0 "OK" ; +VAL_ 3221225472 fls_CAN_FAIL 1 "Laser CAN Fail" 0 "OK" ; +VAL_ 3221225472 fls_ACT 1 "orerating" 0 "not operating" ; +VAL_ 3221225472 fLS_GYRO_OFFSET 1 "Not permission to use" 0 "permission to use" ; +VAL_ 3221225472 fLS_FAIL_EXAM 1 "Investigation of LASER fail" 0 "OK" ; +VAL_ 3221225472 fLS_AXIS_ALIGN 1 "Not Adjustment" 0 "End of Adjustment" ; +VAL_ 3221225472 LAS_DGN1_7 1 "Invalid Operation" 0 "Nomal Operation" ; +VAL_ 3221225472 LAS_DGN1_6 1 "NG" 0 "OK" ; +VAL_ 3221225472 LAS_DGN1_5 1 "NG" 0 "OK" ; +VAL_ 3221225472 LAS_DGN1_4 1 "NG" 0 "OK" ; +VAL_ 3221225472 LAS_DGN1_3 1 "High Temperature" 0 "Normal" ; +VAL_ 3221225472 LAS_DGN1_2 1 "High Temperature" 0 "Normal" ; +VAL_ 3221225472 ND4RCDRQ 1 "Request" 0 "No Request" ; +VAL_ 3221225472 CDMOODEACK 1 "normal" 0 "abnormal" ; +VAL_ 3221225472 CDMODESTAT 3 "CDMode prohibited" 2 "Not used" 1 "CDMode in regulation" 0 "no CDMode regulation(default)" ; +VAL_ 3221225472 ASAINH 1 "inhibit" 0 "not inhibit" ; +VAL_ 3221225472 ASAACT 1 "in regulation" 0 "no regulation" ; +VAL_ 3221225472 DBRKOVRD 3 "Neutral value" 2 "Not Used" 1 "OverRide" 0 "No OverRide" ; +VAL_ 3221225472 DCDCVRQ 3 "14.2" 2 "13.7" 1 "13.5" 0 "13.0" ; +VAL_ 3221225472 BBWFAIL 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 VCMCOMSTAT 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 BRKRBFAIL 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 RBEXE 1 "Regen brake control in reg" 0 "Regen brake control not in reg" ; +VAL_ 3221225472 PORT_LOCK_ITMSW 3 "unlock" 2 "lock" 1 "Auto lock" 0 "OFF" ; +VAL_ 3221225472 CHG_TYP_INFO_CLR 1 "Request" 0 "No Request" ; +VAL_ 3221225472 C_TIME_UPDATE_ITM 1 "Request" 0 "No Request" ; +VAL_ 3221225472 TEMP_UNIT_SET 1 "degF" 0 "degC" ; +VAL_ 3221225472 HVAC_CODE_HV2 3 "DTC of PTC heater (Communication" 2 "DTC of PTC heater (Automatic res" 1 "DTC of PTC heater (Automatic res" 0 "No DTC of electrical compressor " ; +VAL_ 3221225472 HVAC_CODE_HV1 1 "DTC of electrical compressor ON" 0 "No DTC of electrical compressor" ; +VAL_ 3221225472 HVAC_OP_MODE 7 "Not_used" 6 "Not_used" 5 "Not_used" 4 "De_ice" 3 "Dehumidification_heating" 2 "Heating" 1 "Air_conditioning(Cooling)" 0 "OFF" ; +VAL_ 3221225472 DEICE_REQ 3 "Not used" 2 "Request HI" 1 "Request LO" 0 "No request" ; +VAL_ 3221225472 HVAC_MF_REQ 7 "Not used" 6 "100%" 5 "90%" 4 "80%" 3 "65%" 2 "40%" 1 "20%" 0 "0%" ; +VAL_ 3221225472 STEER_RLY_ST 1 "Command of relay is ON" 0 "Command of relay is OFF" ; +VAL_ 3221225472 SEAT_RLY_ST 1 "Command of relay is ON" 0 "Command of relay is OFF" ; +VAL_ 3221225472 HVAC_CODE 40 "Communication failure W/P->HVAC" 39 "pump Fault" 38 "Pump V_BAT under & over-voltage" 37 "Pump warning" 36 "Communication failure HVAC->PUMP" 35 "Water temp sensor short error" 34 "Water temp sensor open error" 33 "HVAC LIN communication failure" 32 "PTC_InterLock" 31 "PTC_Response_Error" 30 "PTC LIN communication failure" 29 "PTC_Status_Heater_cric_4_off" 28 "PTC_Status_Heater_cric_3_off" 27 "PTC_Status_Heater_cric_2_off" 26 "PTC_Status_Heater_circ_1_off" 25 "PTC_Status_Over_Under_voltage" 24 "PTC_Status_Over_Temperature" 23 "PTC_Status_Electronic_Defect" 22 "Communication failure COMP->HVAC" 21 "Compressor low speed over load" 20 "Compressor IPM temperature limit" 19 "Comp discharge temperature limit" 18 "Compressor ROM,RAM,AD failure" 17 "Comp shunt signal offset fail" 16 "Comp IPM temperature sensor fail" 15 "Communication failure HVAC->COMP" 14 "Compressor high voltage failure" 13 "Compressor low voltage failure" 12 "Compressor Overload" 11 "Compressor Over current" 10 "Compressor Voltage Saturation" 9 "Compressor IPM Overheat" 8 "Comp discharge temp overheat" 7 "INTAKE Sensor open circuit fail" 6 "INTAKE Sensor short circuit fail" 5 "INCAR Sensor open circuit fail" 4 "INCAR Sensor short circuit fail" 3 "AMB Sensor open circuit failure " 2 "AMB Sensor short circuit failure" 1 "CAN COMMUNICATION" 0 "NO DTC" ; +VAL_ 3221225472 IDLUP_REQ 3 "IdleUpState3" 2 "IdleUpState2" 1 "IdleUpState1" 0 "No Request" ; +VAL_ 3221225472 COMP_ON_FLG 1 "Compressor ON" 0 "Compressor OFF" ; +VAL_ 3221225472 EngON_REQ 1 "EngineON request" 0 "No EngineON request" ; +VAL_ 3221225472 EVCOMFAIL 1 "abnormal" 0 "normal" ; +VAL_ 3221225472 HVAC_RefuseToSleep 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 CAP_IND_REQ 1 "Fuel fill cap indicator turn on" 0 "Fuel fill cap indicator turn off" ; +VAL_ 3221225472 OBD_M_TEMP_SOAK_COMPLETED 1 "Complete" 0 "Not complete" ; +VAL_ 3221225472 PDCUTREQ 1 "No cut requested" 0 "cut requested" ; +VAL_ 3221225472 ENG_OIL_WARNING_LAMP 1 "WARNING_LAMP_ON" 0 "WARNING_LAMP_OFF" ; +VAL_ 3221225472 ENG_TYPE 3 "TypeC" 2 "TypeB" 1 "TypeA" 0 "Unknown" ; +VAL_ 3221225472 ENG_STA 3 "engine cranking" 2 "engine running" 1 "engine stalled" 0 "engine stopped" ; +VAL_ 3221225472 EBD_LAMP_REQ 1 "request" 0 "no request" ; +VAL_ 3221225472 EBS_LAMP_REQ 1 "request" 0 "no request" ; +VAL_ 3221225472 PFAIL 1 "fail" 0 "not fail" ; +VAL_ 3221225472 BAS_RQ 15 "not used" 14 "not used" 13 "not used" 12 "not used" 11 "not used" 10 "BAS request" 9 "not used" 8 "not used" 7 "not used" 6 "not used" 5 "no BAS request" 4 "not used" 3 "not used" 2 "not used" 1 "not used" 0 "not used" ; +VAL_ 3221225472 WHCTRLD 15 "not used" 14 "not used" 13 "not used" 12 "not used" 11 "not used" 10 "FRRR Request" 9 "not used" 8 "RR Request" 7 "not used" 6 "not used" 5 "FLRL Request" 4 "RL Request" 3 "not used" 2 "not used" 1 "not used" 0 "not used" ; +VAL_ 3221225472 BNO 1 "Brake ON" 0 "Brake OFF" ; +VAL_ 3221225472 BLOFFRLYDIAG 1 "abnormal" 0 "Normal" ; +VAL_ 3221225472 PRDSTENBL 1 "Enable" 0 "not Enable" ; +VAL_ 3221225472 VDCPUSTS 3 "not used" 2 "PumpUp Activate" 1 "PumpUp mode(Not activate)" 0 "Not PumpUp mode" ; +VAL_ 3221225472 PUFAIL 1 "BackUpBrake NG" 0 "BackUpBrake OK" ; +VAL_ 3221225472 BASINH 1 "BAS Inhibit" 0 "not BAS Inhibit" ; +VAL_ 3221225472 BASACT 1 "BAS regulation" 0 "no BAS regulation" ; +VAL_ 3221225472 TCSACT 1 "ASR regulation" 0 "no ASR regulation" ; +VAL_ 3221225472 ABSFAIL 1 "ABS malfunction" 0 "ABS OK" ; +VAL_ 3221225472 EBDFAIL 1 "EBD mulfunction" 0 " no EBD mulfunction" ; +VAL_ 3221225472 EBDACT 1 "EBV regulating" 0 "EBV not regulating" ; +VAL_ 3221225472 PBA_STATUS 1 "PBA operation (pressure ON)" 0 "PBA not operation" ; +VAL_ 3221225472 ACC_STATUS 1 " ACC operation (pressure ON)" 0 " ACC not operation" ; +VAL_ 3221225472 LDP_STATUS 1 "LDP operation (pressure ON)" 0 "LDP not operation" ; +VAL_ 3221225472 LDP_ENBL 1 "LDP Enable" 0 "LDP not Enable" ; +VAL_ 3221225472 LDP_ALIVE 1 "normal" 0 "Abnormal" ; +VAL_ 3221225472 FCAAS_STATUS 1 "FCAAS operation (pressure ON)" 0 "FCAAS not operation" ; +VAL_ 3221225472 FCAAS_ENBL 1 "FCAAS Enable" 0 "FCAAS not Enable" ; +VAL_ 3221225472 FCAAS_ALIVE 1 "normal" 0 "Abnormal" ; +VAL_ 3221225472 PBA_ENBL 1 "PBA Enable" 0 "PBA not Enable" ; +VAL_ 3221225472 PBA_ALIVE 1 "normal" 0 "Abnormal" ; +VAL_ 3221225472 ACC_ALIVE 1 "Alive" 0 "Not Alive" ; +VAL_ 3221225472 ACC_ENBL 1 "ACC Enable" 0 "ACC not Enable" ; +VAL_ 3221225472 PBFS_NO 1 "step on brake" 0 "Release brake" ; +VAL_ 3221225472 PBFS_NC 1 "No Braking" 0 "Braking" ; +VAL_ 3221225472 RELEASE_SW 1 "Braking" 0 "No Braking" ; +VAL_ 3221225472 TCSOC_DISP 1 "80% display" 0 "100% display" ; +VAL_ 3221225472 CHG_TIME_PERMISSION 1 "Display ON" 0 "Display OFF" ; +VAL_ 3221225472 SOC_DISP 255 "no display (blank)" 254 "display as ---" ; +VAL_ 3221225472 CHG_TIME_SW 3 "100V Charge" 2 "200V Charge" 1 "200V Charge (6kW)" 0 "Quick Charge" ; +VAL_ 3221225472 VOLT_INFO_GOM 1 "100V series display is requested" 0 "100V series display is not reque" ; +VAL_ 3221225472 TCSOC 1 " Deterioration restraint" 0 " 100%" ; +VAL_ 3221225472 FCHSSI2 1 "ON" 0 "OFF " ; +VAL_ 3221225472 FCHSSI1 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FQRLYCHKFIN2 1 "Completed" 0 "Not completed" ; +VAL_ 3221225472 QRLYCHKEND2 3 "Both relays are NG" 2 "Positive relay is NG" 1 "Negative relay is NG" 0 "p & n relays OK or diag not comp" ; +VAL_ 3221225472 FPCSCONDET 1 "connected" 0 "PCS not connected" ; +VAL_ 3221225472 FQCRELAYSTATUS 1 "Closed" 0 "Open" ; +VAL_ 3221225472 FNCRELAYSTATUS 1 "Closed" 0 "Open" ; +VAL_ 3221225472 FQCHGIRSENS 1 "Present" 0 "Not present" ; +VAL_ 3221225472 FQRLYCHKFIN 1 "Completed" 0 "Not completed" ; +VAL_ 3221225472 FNRLYCHKFIN 1 "Completed" 0 "Not completed" ; +VAL_ 3221225472 FNCHGOK 1 "Available" 0 "AC i/p PWMsig frmEVSE not av" ; +VAL_ 3221225472 READYTOSLP 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 QRLYCHKEND 3 "Both relays are NG" 2 "Positive relay is NG" 1 "Negative relay is NG" 0 "p & n relays OK or diag not comp" ; +VAL_ 3221225472 NRLYCHKEND 3 "Both relays are NG" 2 "Positive relay is NG" 1 "Negative relay is NG" 0 "p & n relays OK or diag not proc" ; +VAL_ 3221225472 FQGFCEND 1 "Completed" 0 "Not completed" ; +VAL_ 3221225472 FRESTARTOK 1 "ready" 0 "Not ready" ; +VAL_ 3221225472 FHCCONDET 1 "Connected" 0 "Disconnected/input circuit fail" ; +VAL_ 3221225472 ACVOLJUDG 3 "Invalid" 2 "200V (>=145V)" 1 "100V (60~145V)" 0 "No input (<60V)" ; +VAL_ 3221225472 LB_HEATSTOPMAIL_REQ_TCU 1 "Heat Stop Mail send request" 0 "No request" ; +VAL_ 3221225472 LB_HEATSTARTMAIL_REQ_TCU 1 "Heat Start Mail send request" 0 "No request" ; +VAL_ 3221225472 CHG_STA_TCU 3 "stop request" 2 "quick charge" 1 "normal charge" 0 "other" ; +VAL_ 3221225472 MFAN_MAINTE_ALERT 1 "Alert display request" 0 "No request" ; +VAL_ 3221225472 CHG_STA_FOR_MET 7 "Not used" 6 "Not used" 5 "fail" 4 "Not used" 3 "quick charge" 2 "normal charge 200V Series" 1 "normal charge 100V Series" 0 "OFF" ; +VAL_ 3221225472 PORT_LOCK_SW 3 "unlock" 2 "lock" 1 "AUTO_lock" 0 "OFF" ; +VAL_ 3221225472 OPMIS_INCHG 1 "Turn ON" 0 "Turn OFF" ; +VAL_ 3221225472 REFUSE_BUZZER 1 "Request" 0 "No Request" ; +VAL_ 3221225472 SBW_WARNINGLAMP 1 "ShBW default warning lamp" 0 "No ShBW default warning lamp" ; +VAL_ 3221225472 SBW_WARNING_MSG 7 "not used" 6 "not used" 5 "not used" 4 "not used" 3 "Confirm lever position" 2 "Shift System Error" 1 "Parking Brake" 0 "No Request" ; +VAL_ 3221225472 VCM_BLBCHK 1 "bulb check on" 0 "bulb check off" ; +VAL_ 3221225472 SOONCHGSW_RQ 1 "turn on" 0 "turn off" ; +VAL_ 3221225472 ECO_Meter2 31 "not used" 30 "not used" 29 "seg2-1~2-4,seg1-1~1-5 ON" 28 "seg2-1~2-4,seg1-1~1-4 ON" 27 "seg2-1~2-4,seg1-1~1-3 ON" 26 "seg2-1~2-4,seg1-1~1-2 ON" 25 "seg2-1~2-4,seg1-1 ON" 24 "seg2-1~2-4 ON" 23 "seg2-1~2-3, seg1-1~1-5 ON" 22 "seg2-1~2-3, seg1-1~1-4 ON" 21 "seg2-1~2-3, seg1-1~1-3 ON" 20 "seg2-1~2-3, seg1-1~1-2 ON" 19 "seg2-1~2-3, seg1-1 ON" 18 "seg2-1~2-3 ON" 17 "seg2-1~2-2, ,seg1-1~1-5 ON" 16 "seg2-1~2-2, ,seg1-1~1-4 ON" 15 "seg2-1~2-2, seg1-1~1-3 ON" 14 "seg2-1~2-2, seg1-1~1-2 ON" 13 "seg2-1~2-2, seg1-1 ON" 12 "seg2-1~2-2 ON" 11 "seg2-1, seg1-1~1-5 ON" 10 "seg2-1, seg1-1~1-4 ON" 9 "seg2-1, seg1-1~1-3 ON" 8 "seg2-1, seg1-1~1-2 ON" 7 "seg2-1, seg1-1 ON" 6 "seg2-1 ON" 5 "seg1-1~1-5 ON" 4 "seg1-1~1-4 ON" 3 "seg1-1~1-3 ON" 2 "seg1-1~1-2 ON" 1 "seg1-1 ON" 0 "OFF" ; +VAL_ 3221225472 ECO_Meter1 15 "seg1~15 ON" 14 "seg1~14 ON" 13 "seg1~13 ON" 12 "seg1~12 ON" 11 "seg1~11 ON" 10 "seg1~10 ON" 9 "seg1~9 ON" 8 "seg1~8 ON" 7 "seg1~7 ON" 6 "seg1~6 ON" 5 "seg1~5 ON" 4 "seg1~4 ON" 3 "seg1~3 ON" 2 "seg1~2 ON" 1 "seg1 ON" 0 "OFF" ; +VAL_ 3221225472 ACSW 1 "A/C SW ON" 0 "A/C SW OFF" ; +VAL_ 3221225472 LB_RLIMT 7 "Not Used" 6 "Not Used" 5 "Not Used" 4 "Low Temperature" 3 "High Temperature" 2 "LBC Malfunction" 1 "Capacity Drop" 0 "Normal" ; +VAL_ 3221225472 LB_RCHGTCON 31 "Invalid value" 18 "Normal Charge 100V lng life chg" 17 "Normal Charge 100V Full charge" 10 "Normal Charge 200V lng life chg" 9 "Normal Charge 200V Full charge" 0 "Quick charge" ; +VAL_ 3221225472 LB_CAPSW 1 "Full capacity " 0 "Remainig capacity" ; +VAL_ 3221225472 LB_BPCUPRATE 7 "BPC MAX Uprate Level 8(8kW/s)" 6 "BPC MAX Uprate Level 7(6kW/s)" 5 "BPC MAX Uprate Level 6(4.5kW/s)" 4 "BPC MAX Uprate Level 5(3.5kW/s)" 3 "BPC MAX Uprate Level 4(2.5kW/s)" 2 "BPC MAX Uprate Level 3(1.5kW/s)" 1 "BPC MAX Uprate Level 2(0.8kW/s)" 0 "BPC MAX Uprate Level 1(0.1kW/s)" ; +VAL_ 3221225472 LB_PIN_STATUS 3 "Immediate limit PIN" 2 "High rate limit PIN" 1 "Normal limit PIN" 0 "Not used" ; +VAL_ 3221225472 LB_CODECON 7 "Invalid" 6 "reserved" 5 "reserved" 4 "reserved" 3 "No.7,8" 2 "No.5,6" 1 "No.3,4" 0 "No.1,2" ; +VAL_ 3221225472 CHGTYPE 3 "Charge and A/C request exist" 2 "Timer/remote A/C request exists" 1 "Charge request exists" 0 "No request" ; +VAL_ 3221225472 FVHMGVOL 1 "The voltage of inverter > = 60V" 0 "The voltage of inverter < 60V" ; +VAL_ 3221225472 FDDC_INHREQ 1 "Prohibition of 12V DCDCoperation" 0 "Permission of 12V DCDC operation" ; +VAL_ 3221225472 CHKQCRLY 3 "N relay ON and P relay ON" 2 "N relay OFF and P relay ON" 1 "N relay ON and P relay OFF" 0 "all OFF" ; +VAL_ 3221225472 FCHKRLYEN 1 "Enable" 0 "not Enable" ; +VAL_ 3221225472 KEEP_SOC_REQ 1 "keep SOC charge mode " 0 "normal charge mode" ; +VAL_ 3221225472 NRLYCHK_REFUSE_REQ 1 "Refuse" 0 "not Refuse" ; +VAL_ 3221225472 FVERRDISP 1 "fail" 0 "not fail" ; +VAL_ 3221225472 CHG_STA_RQ 3 "stop request" 2 "quick charge" 1 "normal charge" 0 "other" ; +VAL_ 3221225472 FSCHGRLY_ST 1 "relay ON" 0 "relay OFF" ; +VAL_ 3221225472 HIVOLT_ST 1 " Hi voltage relay ON" 0 " Hi voltage relay OFF" ; +VAL_ 3221225472 HIVOLT_DISC_FN 1 "finish " 0 "not finish " ; +VAL_ 3221225472 CHG_STA 3 "stop request" 2 "quick charge" 1 "normal charge" 0 "other" ; +VAL_ 3221225472 DCM_PRI_ACON_Unit 1 "degF" 0 "degC" ; +VAL_ 3221225472 DCM_DOOR_UNLOCK 1 "Request" 0 "No Request" ; +VAL_ 3221225472 DCM_DOOR_LOCK 1 "Request" 0 "No Request" ; +VAL_ 3221225472 DCM_WS_REQ 3 "Wakeup" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_ 3221225472 DCM_REFUSE 3 "reserved" 2 "Ready To Sleep" 1 "Refuse To Sleep" 0 "reserved" ; +VAL_ 3221225472 DCM_PRI_ACON 3 "Not Used" 2 "Stop" 1 "request" 0 "no request" ; +VAL_ 3221225472 DCM_CHG_RQ 1 "Request" 0 "No Request" ; +VAL_ 3221225472 AT_354_FAIL 1 "failure" 0 "normal" ; +VAL_ 3221225472 AT_245_FAIL 1 "failure" 0 "normal" ; +VAL_ 3221225472 OFF_SW 1 "VDC(ESP) disabled by the driver" 0 "VDC(ESP) available" ; +VAL_ 3221225472 EGVRHCFL 1 "HEV components have failure" 0 "HEV components have not failure" ; +VAL_ 3221225472 EGVRBTOK 1 "Battery temp is over 10 degC" 0 "Battery temp is below 10 degC" ; +VAL_ 3221225472 CAP_IND_RST_STA 1 "Reset" 0 "No reset" ; +VAL_ 3221225472 BTA_MAIL_SEND_OK 1 "OK" 0 "NG" ; +VAL_ 3221225472 VCM_WakeUpSleepCmd_For_ShBW 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "GoToSleep" ; +VAL_ 3221225472 VCMMIL 1 "MIL ON is required" 0 "MIL ON is not required" ; +VAL_ 3221225472 VCM_WakeUpSleepCmd 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "GoToSleep" ; +VAL_ 3221225472 VCM_STATUS 3 "Not Used" 2 "VCM SYSTEM RUNNING" 1 "Not Used" 0 "VCM SYSTEM STOP" ; +VAL_ 3221225472 CANMASK 1 "count store of CAN mute/abs" 0 "no count store of CAN mute/abs" ; +VAL_ 3221225472 STRKSFAIL 1 "Normal" 0 "Abnormal" ; +VAL_ 3221225472 TEMP_HIVOLTBATT_LAMP 3 "Not used" 2 "Turn on a low temp indicator" 1 "Turn on a high temp indicator" 0 "Lights out" ; +VAL_ 3221225472 Dischg_Stop_Warning 1 "request" 0 "not request" ; +VAL_ 3221225472 CHG_SOUND_REQ 3 "Unlock Charging-Plug SOUND ON" 2 "Admit to charge Battery SOUND ON" 1 "Charge-Plug SOUND ON" 0 "OFF" ; +VAL_ 3221225472 ENGSHTDWN_DISP 3 "Not used" 2 "Shutting Down ON" 1 "ENGINE Reseting ON" 0 "Turn OFF" ; +VAL_ 3221225472 NOTENGST_WARN 3 "Not used" 2 "Warning2 ON " 1 "Warning1 ON" 0 "Turn OFF" ; +VAL_ 3221225472 SHIFT_CAUTION 1 "Request" 0 "No Request" ; +VAL_ 3221225472 STOP_PKB_RQ 3 "not used" 2 "DC/DC fault with VSP" 1 "DC/DC fault" 0 " OFF" ; +VAL_ 3221225472 SLOW_CAUSE 7 "Not used" 6 "Not used" 5 "Not used" 4 "other" 3 "low SOC" 2 "Battety cold" 1 "overheat" 0 "power limit nothing" ; +VAL_ 3221225472 SLOW_RQ 1 "Turn ON" 0 "Turn OFF" ; +VAL_ 3221225472 RQ_SHIFTP 1 "Turn ON" 0 "Turn OFF" ; +VAL_ 3221225472 READY_RQ 3 "Not used" 2 "Turn ON" 1 "Blinking" 0 " Turn OFF" ; +VAL_ 3221225472 HILLHOLD_RQ 1 "TURN ON" 0 "TURN OFF" ; +VAL_ 3221225472 EV_RQ 1 "TURN ON" 0 "TURN OFF" ; +VAL_ 3221225472 BAT_RQ 3 "Not used" 2 "Turn ON" 1 "Blinking" 0 " Turn OFF" ; +VAL_ 3221225472 CAUTION_RQ 3 "Not used" 2 "Turn ON" 1 "Blinking" 0 " Turn OFF" ; +VAL_ 3221225472 RrACsetting_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 ChangeStatus_54E 1 " Sw is pushed by 0b" 0 " Sw is pushed by 1b" ; +VAL_ 3221225472 Aroma_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 HumidtySensorSensitivity_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 AirQualitySensorSensitivity_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 VariableAirFlowCycle_PASS_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 VariableAirFlowCycle_DR_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 VariableAirFlow_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 Uppervent_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 ForestSetting_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 ForestDisplaySeting_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 DUAL_SOD 1 "Display" 0 "gray" ; +VAL_ 3221225472 AirFlowBalance_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 CabinAirPolutionLevel 3 "LEVEL3" 2 "LEVEL2" 1 "LEVEL1" 0 "not display" ; +VAL_ 3221225472 AirPurifier_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 AC_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 _4zone_SOD 1 "display" 0 "gray" ; +VAL_ 3221225472 AirFlowBalanceLevel_DR 7 "+3" 6 "+2" 5 "+1" 4 "0" 3 "-1" 2 "-2" 1 "-3" 0 "BLANK(no display)" ; +VAL_ 3221225472 AirFlowBalanceLevel 7 "not use" 6 "not use" 5 "5" 4 "4" 3 "3" 2 "2" 1 "1" 0 "BLANK(no display)" ; +VAL_ 3221225472 VariableAirFlowSW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 VariableAirFlowStatus 3 "not use" 2 "variable air flow OFF" 1 "variable air flow ON" 0 "BLANK(no display)" ; +VAL_ 3221225472 VariableAirFlowLevel_DR 3 "not use" 2 "hi" 1 "Lo" 0 "BLANK(no display)" ; +VAL_ 3221225472 HumidtySensorSensitivity 15 "OFF" 14 "not use" 13 "not use" 12 "not use" 11 "not use" 10 "not use" 9 "not use" 8 "not use" 7 "7" 6 "6" 5 "5" 4 "4" 3 "3" 2 "2" 1 "1" 0 "BLANK(no display)" ; +VAL_ 3221225472 FogStatus 1 "fog" 0 "not fog" ; +VAL_ 3221225472 AutoDefrosterStatus 1 "indicate " 0 "do not indicate " ; +VAL_ 3221225472 VariableAirFlowExistence 1 "exist" 0 "not exist" ; +VAL_ 3221225472 HumidtySensorExistence 1 "exist" 0 "not exist" ; +VAL_ 3221225472 ForestSW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ForestAC_Existence 1 "forest" 0 "not forest" ; +VAL_ 3221225472 ClimateSwitchExistence 1 "exist" 0 "not exist" ; +VAL_ 3221225472 _4zoneSW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 AromaSW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 AromaStatus 3 "no effect" 2 "relax" 1 "awakening" 0 "OFF" ; +VAL_ 3221225472 AromaExistence 1 "exist" 0 "not exist" ; +VAL_ 3221225472 AirFlowBalanceExistence 1 "exist" 0 "not exist" ; +VAL_ 3221225472 S_HEAT_AS_ONDISP 1 "display" 0 "gray" ; +VAL_ 3221225472 S_HEAT_DR_ONDISP 1 "display" 0 "gray" ; +VAL_ 3221225472 S_HEAT_AS_AUTSET 3 "Hi" 2 "Mid" 1 "Lo" 0 "Not Used" ; +VAL_ 3221225472 S_HEAT_OFF_ASIND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 S_HEAT_MID_ASIND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 S_HEAT_LO_ASIND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 S_HEAT_HI_ASIND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 S_HEAT_DR_AUTSET 3 "Hi" 2 "Mid" 1 "Lo" 0 "Not Used" ; +VAL_ 3221225472 S_HEAT_OFF_DRIND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 S_HEAT_MID_DRIND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 S_HEAT_LO_DRIND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 S_HEAT_HI_DRIND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 S_HEAT_AUTO_DRIND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 S_HEAT_AUTO_ASIND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 CAV_CONT_EXISTANCE 7 "Without CAV" 6 "Without CAV" 5 "Without CAV" 4 "CLEAN(Hardware SW)" 3 "Auto recirc(Hardware SW)" 2 "CLEAN(Software SW)" 1 "Auto recirc(Software SW)" 0 "Without CAV" ; +VAL_ 3221225472 RrAC_SW_FB 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 STATUS_CAV_SW_DISP 1 "display" 0 "gray" ; +VAL_ 3221225472 RR_CoolerFAN_existence 1 "exisits" 0 "not exist" ; +VAL_ 3221225472 ChangeStatus_54D 1 " Sw is pushed by 0b" 0 " Sw is pushed by 1b" ; +VAL_ 3221225472 _3rdVentSW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 _3rdVentStatus 3 "Not used" 2 "BLANK(Non display)" 1 "open" 0 "shut" ; +VAL_ 3221225472 UpperVentSW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 UpperVentStatus 1 "open" 0 "shut" ; +VAL_ 3221225472 UpperVentAutoSW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 UpperVentAutoStatus 1 "AUTO" 0 "BLANK(Non display)" ; +VAL_ 3221225472 B_PLR_VentSW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 B_PLR_VentStatus 3 "Not used" 2 "BLANK(Non display)" 1 "open" 0 "shut" ; +VAL_ 3221225472 RearAC_SelfDiagnosing 1 " ON" 0 " OFF" ; +VAL_ 3221225472 RearAC_FanSpeedStatus 15 "INDICATE FAN FLAME " 14 "14speed" 13 "13speed " 12 "12speed" 11 "11speed" 10 "10speed" 9 "9speed" 8 "8speed" 7 "7speed" 6 "6speed" 5 "5speed" 4 "4speed" 3 "3speed" 2 "2speed" 1 "1speed" 0 "ALL OFF" ; +VAL_ 3221225472 RearAC_AutoSW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 RearAC_AutoStatus 3 "Not used" 2 "BLANK(Non display)" 1 "AUTO" 0 "MANUAL" ; +VAL_ 3221225472 RearAC_AirVentStatus 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "FOOT" 2 "B/L" 1 "VENT" 0 "ALL OFF" ; +VAL_ 3221225472 RearAC_SystemStatus 7 "Not used" 6 "Not used" 5 "Not used" 4 "Heater & Cooler" 3 "AUTO" 2 "Cooler" 1 "Heater" 0 "OFF" ; +VAL_ 3221225472 Rear_on_display_status 1 "indicate" 0 "BLANK(Non display)" ; +VAL_ 3221225472 Rear_off_Status 1 " ON" 0 " OFF" ; +VAL_ 3221225472 Rear_AC_system_indicator 7 "Not used" 6 "Not used" 5 "Not used" 4 "Heater & Cooler" 3 "AUTO" 2 "Cooler" 1 "Heater" 0 "ALL OFF" ; +VAL_ 3221225472 RrAC_TempUpSW_RrPass 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_TempDownSW_RrPass 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_AirVentSW_RrPass 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 HumidtySensorSensitivityDownSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 HumidtySensorSensitivityUpSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AirFlowBalancePASSp_AdjustSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AirFlowBalanceDRp_AdjustSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 VariableAirFlowSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 VariableAirFlowCycleSlowSW_DR 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 VariableAirFlowCycleQuickSW_DR 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 ForestSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AromaSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 _4zoneSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 INITIALIZING_BIT 1 "Initializing (>3 tmsafterreboot)" 0 "Not initializing" ; +VAL_ 3221225472 BLINK_REQ 1 "Request for blinking speed limit" 0 "No req for blinking speed limit" ; +VAL_ 3221225472 fSPEED_LIMIT_CHANGE 1 "Require the speed limit indi" 0 "Require normal speed limit indi" ; +VAL_ 3221225472 fSPEED_LIMIT_DISP 1 "based on ADAS indication" 0 "based on origin navigation func" ; +VAL_ 3221225472 Voice_talk_flag 3 "Right curve soon" 2 "Left curve soon" 1 "Curve soon" 0 "no request" ; +VAL_ 3221225472 LINKF_REQ_FLG 1 "Link missmatch flag record req" 0 "no request" ; +VAL_ 3221225472 branch_flag 3 "Not Used" 2 "right branch" 1 "left branch" 0 " no branch" ; +VAL_ 3221225472 STRG_MODE 15 "UNKNOWN" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "STRG_MODE_PatternI" 7 "STRG_MODE_PatternH" 6 "STRG_MODE_PatternG" 5 "STRG_MODE_PatternF" 4 "STRG_MODE_PatternE" 3 "STRG_MODE_PatternD" 2 "STRG_MODE_PatternC" 1 "STRG_MODE_PatternB" 0 "STRG_MODE_PatternA" ; +VAL_ 3221225472 SPORT_MODE_SW 3 "NOT USE" 2 "UNKNOWN" 1 "ON" 0 "OFF" ; +VAL_ 3221225472 STANDARD_MODE_SW 3 "NOT USE" 2 "UNKNOWN" 1 "ON" 0 "OFF" ; +VAL_ 3221225472 SNOW_MODE_SW 3 "NOT USE" 2 "UNKNOWN" 1 "ON" 0 "OFF" ; +VAL_ 3221225472 ECO_MODE_SW 3 "NOT USE" 2 "UNKNOWN" 1 "ON" 0 "OFF" ; +VAL_ 3221225472 ACQUIRED_R 1 " ON" 0 " OFF" ; +VAL_ 3221225472 WARN_R 3 " Not used" 2 " Not used" 1 "ON (for SOW function)" 0 "OFF" ; +VAL_ 3221225472 SOW_SEN_DISABLE_R 1 "invalid" 0 "valid" ; +VAL_ 3221225472 SOW_SEN_CONFIDENCE_R 1 "Active mode" 0 "default mode" ; +VAL_ 3221225472 SOW_SEN_COND_R 1 "Report" 0 " Not report" ; +VAL_ 3221225472 ALERT_IND_PAT_R 3 "pattern4" 2 "pattern3" 1 "pattern2" 0 "pattern1" ; +VAL_ 3221225472 SOW_SEN_MODE_R 1 "Active" 0 "Static" ; +VAL_ 3221225472 SOW_SEN_IRRAD_R 1 " ON" 0 " OFF" ; +VAL_ 3221225472 SOW_SEN_FAIL_R 1 "Fail" 0 "not Fail" ; +VAL_ 3221225472 SOW_SEN_INIT_R 1 "Initialization" 0 "Not initialization" ; +VAL_ 3221225472 SOW_SEN_BLOCK_R 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ALERT_IND_DRIVE_R 1 "method2" 0 "method1" ; +VAL_ 3221225472 SOW_SEN_FUNC_STAT_3F5 1 "CTA recognition mode" 0 " BSD recognition mode" ; +VAL_ 3221225472 SOW_SEN_FUNC_STAT_3F4 1 "CTA recognition mode" 0 " BSD recognition mode" ; +VAL_ 3221225472 CTA_FUNC_ACT_R 1 "CTA function activation" 0 "CTA function deactivation" ; +VAL_ 3221225472 SOW_SEN_FUNC_STAT_3F3 1 "CTA recognition mode" 0 " BSD recognition mode" ; +VAL_ 3221225472 ACQUIRED_L 1 " ON" 0 " OFF" ; +VAL_ 3221225472 WARN_L 3 " Not used" 2 " Not used" 1 "ON (for SOW function)" 0 "OFF" ; +VAL_ 3221225472 SOW_SEN_MODE_L 1 "Active" 0 "Static" ; +VAL_ 3221225472 SOW_SEN_IRRAD_L 1 " ON" 0 " OFF" ; +VAL_ 3221225472 SOW_SEN_INIT_L 1 "Initialization" 0 "Not initialization" ; +VAL_ 3221225472 SOW_SEN_FAIL_L 1 "Fail" 0 "not Fail" ; +VAL_ 3221225472 SOW_SEN_DISABLE_L 1 "invalid" 0 "valid" ; +VAL_ 3221225472 SOW_SEN_CONFIDENCE_L 1 "Active mode" 0 "default mode" ; +VAL_ 3221225472 SOW_SEN_COND_L 1 "Report" 0 " Not report" ; +VAL_ 3221225472 SOW_SEN_BLOCK_L 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ALERT_IND_PAT_L 3 "pattern4" 2 "pattern3" 1 "pattern2" 0 "pattern1" ; +VAL_ 3221225472 ALERT_IND_DRIVE_L 1 "method2" 0 "method1" ; +VAL_ 3221225472 SOW_SEN_FUNC_STAT_3F2 1 "CTA recognition mode" 0 " BSD recognition mode" ; +VAL_ 3221225472 SOW_SEN_FUNC_STAT_3F1 1 "CTA recognition mode" 0 " BSD recognition mode" ; +VAL_ 3221225472 CTA_FUNC_ACT_L 1 "CTA function activation" 0 "CTA function deactivation" ; +VAL_ 3221225472 SOW_SEN_FUNC_STAT_3F0 1 "CTA recognition mode" 0 " BSD recognition mode" ; +VAL_ 3221225472 ShBW_ENCODERST 1 "encoder failure occured" 0 "encoder failure not occured" ; +VAL_ 3221225472 SBW_CANFALSTAT 1 "fail_with_RX,CRC,PRUN,_of_1D4" 0 "not_fail" ; +VAL_ 3221225472 ShBW_SHIFTLOCK 1 "unlock state" 0 "lock state" ; +VAL_ 3221225472 AutoP_C 1 "Auto P control cancelled" 0 "normal" ; +VAL_ 3221225472 REFUSE_SLEEP 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 ShBW_WATCH4 3 "Not Use" 2 "False" 1 "True" 0 "Not Started" ; +VAL_ 3221225472 ShBW_WATCH3 3 "Not Use" 2 "False" 1 "True" 0 "Not Started" ; +VAL_ 3221225472 ShBW_WATCH2 3 "Not Use" 2 "False" 1 "True" 0 "Not Started" ; +VAL_ 3221225472 ShBW_WATCH1 3 "Not Use" 2 "False" 1 "True" 0 "Not Started" ; +VAL_ 3221225472 DsREQ 1 "Ds mode" 0 "not Ds mode" ; +VAL_ 3221225472 CUR_RNG 15 "Invalid" 14 "Not P" 13 "Out of Range of notP and P" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Not used" 2 "Not used" 1 "P" 0 "Not Calibrated(bef calibration)" ; +VAL_ 3221225472 SBW_FALSTATT 3 "fail with torque cut" 2 "fail without torque down" 1 "fail with torque down" 0 "not fail" ; +VAL_ 3221225472 TGT_RNG 15 "Invalid" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "Not used" 6 "Not used" 5 "Not used" 4 "D" 3 "N" 2 "R" 1 "P" 0 "Hold(default)(once after IGN-ON)" ; +VAL_ 3221225472 KDACT 1 "Kick down activated" 0 "Kick down OFF" ; +VAL_ 3221225472 ASCDON 3 "Not used" 2 "CC or SL active" 1 "pedal recovery" 0 "CC and SL inactive" ; +VAL_ 3221225472 POSITION_LIGHT 1 "position lights on" 0 "position lights off" ; +VAL_ 3221225472 BELT_LAMP 3 "Description for the value '0x3'" 2 "Safety belt not fast&speed>thres" 1 "Safety Belt not fast(Lamp on)" 0 " Safety Belt fastened (Lamp off)" ; +VAL_ 3221225472 ASSIST_SW 31 "Not Used" 30 "Not Used" 29 "Not Used" 28 "Navi_Coop ICC SW SW is pushed" 27 "BCITemp SW Back SW is pushed" 26 "BCI SW Back SW is pushed" 25 "BRKSensitivity Back SW is pushed" 24 "BRKSensitivity Next SW is pushed" 23 "Distance Back SW is pushed" 22 "Distance Next SW is pushed" 21 "SideIndBright Back SW is pushed" 20 "SideIndBright Next SW is pushed" 19 "Lane timing Back SW is pushed" 18 "Lane timing Next SW is pushed" 17 "Warning Volume Back SW is pushed" 16 "Warning Volume Next SW is pushed" 15 "BSI Switch is pushed" 14 "LDP Switch is pushed" 13 "DCA Switch is pushed" 12 "NaviCoopICC SW is pushed" 11 "SPDSetAssistASL SW is pushed" 10 "SPDSetAssistICC SW is pushed" 9 "TSR Switch is pushed" 8 "ACA Switch is pushed" 7 "DAS Switch is pushed" 6 "CAB Switch is pushed" 5 "IBA Switch is pushed" 4 "Not used" 3 "BSW Switch is pushed" 2 "LDW Switch is pushed" 1 "FCW Switch is pushed" 0 "No operation" ; +VAL_ 3221225472 ECOPDLSW 3 " ECO PedalForceSet STD SW ON" 2 " ECO PedalForceSet softSW ON" 1 " ECO PedalForceSet OFFSW ON" 0 " ECO PedalForceSet SW NotUse " ; +VAL_ 3221225472 NAVI_SW_ERR 1 "error" 0 "not error" ; +VAL_ 3221225472 DAS_SW 7 "Reset SW operation" 6 "SOW SW operation" 5 "LDW SW operation" 4 "FCW SW operation" 3 "SCP SW operation" 2 "LDP SW operation" 1 "DCA SW operation" 0 "not operation" ; +VAL_ 3221225472 PT_ERR_flg 1 " ON" 0 " OFF" ; +VAL_ 3221225472 EcoNavi_SW 1 " Eco-Navi_SW is pushed" 0 " Eco-Navi_SW is not pushed" ; +VAL_ 3221225472 EcoMode_SW 1 "ECO mode SW is pushed." 0 "ECO mode SW is not pushed" ; +VAL_ 3221225472 COP2_SW_FLG 1 " ON" 0 " OFF" ; +VAL_ 3221225472 COP2_ERROR_FLG 1 "ERROR" 0 "NO ERROR" ; +VAL_ 3221225472 NICC_SW 1 "operation" 0 "not operation" ; +VAL_ 3221225472 BOOT_FLG 1 "boot" 0 "not boot" ; +VAL_ 3221225472 NAVI_ERR 1 "error" 0 "not error" ; +VAL_ 3221225472 AreaCode 3 "other" 2 "USA(Alaska)" 1 "CANADA" 0 "JAPAN/USA(except ALASKA)/Hawaii" ; +VAL_ 3221225472 D_BRANCH_FLG 1 "multiple branch" 0 "no branch or single branch" ; +VAL_ 3221225472 LINKF_FLG 1 "Link missmatch exist" 0 "Link missmatch no exist" ; +VAL_ 3221225472 OUTREADY 3 "Not used" 2 "right branch" 1 "left branch" 0 "no branch " ; +VAL_ 3221225472 GPSPositionSta 1 "not normal" 0 "normal" ; +VAL_ 3221225472 TurningFlag 1 "turn" 0 "not turn" ; +VAL_ 3221225472 MatchingSta 1 "matching" 0 "not matching" ; +VAL_ 3221225472 MatchingResetFlag 1 "reset" 0 "not reset" ; +VAL_ 3221225472 CurvatureErrorFlag 1 "error" 0 "not error" ; +VAL_ 3221225472 RootGuidingFlag 1 " ON" 0 " OFF" ; +VAL_ 3221225472 RootGuideSta 3 "other" 2 "except toll road" 1 "distance" 0 "toll road" ; +VAL_ 3221225472 RoadType 7 "other" 6 "general road" 5 "principal prefectural road" 4 "prefectural road" 3 "national road" 2 "toll road" 1 "urban expressway" 0 "intercity expressway" ; +VAL_ 3221225472 LinkType 7 "other" 6 "Rotary (Roundabout) link " 5 "Lateral line for SA etc." 4 "Side road same line as mainroad" 3 "Junction link 2" 2 "Junction link 1" 1 "Up-down separable link" 0 "Up-down inseparable link" ; +VAL_ 3221225472 InGuidingRoot 1 "in the guiding root" 0 "not in the guiding root" ; +VAL_ 3221225472 MVP_NG 3 "Mstrvc-Plauschk diag/PSvolt diag" 2 "Mstrvc shrt to Supply NG" 1 "Mstrvc ockt/shrt to gnd NG" 0 "Mastervac Pressur Sensor is OK" ; +VAL_ 3221225472 REQ_DISP_MET 1 "Sonar detection display request" 0 "No sonar detection display req" ; +VAL_ 3221225472 STS_EXT_BEEP 1 "Beeped" 0 "No beep" ; +VAL_ 3221225472 SOUND_CONT 1 "Continuous" 0 "Discontinuous" ; +VAL_ 3221225472 STS_VOLUME 3 "Max detection range Near (- 10%)" 2 "Max detection level Middle" 1 "Max detection level Far (+ 10%)" 0 "RESERVE" ; +VAL_ 3221225472 STS_DISTANCE 3 "40cm / 16in" 2 "30cm / 12in" 1 "STOP (continuous tone)" 0 "No detection" ; +VAL_ 3221225472 STS_DETEC_LV 3 "Max detection range Near (- 10%)" 2 "Max detection level Middle" 1 "Max detection level Far (+ 10%)" 0 "RESERVE" ; +VAL_ 3221225472 STS_AUTO_DISP 1 "DISPLAY OFF" 0 "DISPLAY ON" ; +VAL_ 3221225472 A_FR_R 1 "sensor" 0 "No sensor" ; +VAL_ 3221225472 A_FR_L 1 "sensor" 0 "No sensor" ; +VAL_ 3221225472 A_RR_R 1 "sensor" 0 "No sensor" ; +VAL_ 3221225472 A_RR_L 1 "sensor" 0 "No sensor" ; +VAL_ 3221225472 A_FR_CEN 1 "sensor" 0 "No sensor" ; +VAL_ 3221225472 A_RR_CEN 1 "sensor" 0 "No sensor" ; +VAL_ 3221225472 RR_R 3 "Detect level 3 (50~30cm)" 2 "Detect level 2 (60~50cm)" 1 "Reserve" 0 "No detection" ; +VAL_ 3221225472 RR_L 3 "Detect level 3 (50~30cm)" 2 "Detect level 2 (60~50cm)" 1 "Reserve" 0 "No detection" ; +VAL_ 3221225472 RR_CEN 7 "Reserve" 6 "Reserve" 5 "Reserve" 4 "Detect level 4 (30~cm)" 3 "Detect level 3 (50~30cm)" 2 "Detect level 2 (60~50cm)" 1 "Detect level 1 (100~60cm)" 0 "No detection" ; +VAL_ 3221225472 FR_R 3 "Detect level 3 (50~30cm)" 2 "Detect level 2 (60~50cm)" 1 "Reserve" 0 "No detection" ; +VAL_ 3221225472 FR_L 3 "Detect level 3 (50~30cm)" 2 "Detect level 2 (60~50cm)" 1 "Reserve" 0 "No detection" ; +VAL_ 3221225472 FR_CEN 1 "101b, 110b, 111b" 0 "000b" ; +VAL_ 3221225472 SONAR_S_REQ 3 "SONAR deactivated(long)" 2 "SONAR deactivated(short)" 1 "SONAR activated" 0 "no SONAR status display request" ; +VAL_ 3221225472 STS_SETTING 1 "Meter Setting avaiilable" 0 "Meter Set unav (AVM setting)" ; +VAL_ 3221225472 REQ_DISP_CEN 1 "sonar detec disp req" 0 "No sonar detec disp req" ; +VAL_ 3221225472 SONAR_D_DISP_REQ 1 "sonar detec disp req" 0 "No sonar detec disp req" ; +VAL_ 3221225472 LAMP_STA 1 "turn on the warning lamp" 0 "turn off the warning lamp" ; +VAL_ 3221225472 FAIL 1 "Failure" 0 "Normal" ; +VAL_ 3221225472 RMT_AC_HVAC 1 "Remote control A/C ON" 0 "Remote control A/C OFF" ; +VAL_ 3221225472 DISCHG_ALARM_REQ 1 "ON request" 0 "OFF request" ; +VAL_ 3221225472 REMOTE_AC_ANS_BK 3 "Remote A/C Refusal" 2 "Remote A/C Stop" 1 "Remote A/C Permission" 0 "OFF" ; +VAL_ 3221225472 PROHIBIT_DE_ICE 1 "prohibit" 0 "not prohibit" ; +VAL_ 3221225472 VCM_REFUSE 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 AC_RLY_ST 1 " ON" 0 " OFF" ; +VAL_ 3221225472 AC_ECO_MODE_RQ 1 "request" 0 "no request" ; +VAL_ 3221225472 COMP_ON_permission 1 "Compressor ON permit" 0 "Compressor ON forbiddance" ; +VAL_ 3221225472 PRIAC_HVAC 1 " Pri A/C ON" 0 " Pri A/C OFF" ; +VAL_ 3221225472 BOOK_PRI_AC 1 "reserved" 0 "not reserved" ; +VAL_ 3221225472 RR_DEF 1 "rear defrost on" 0 "rear defrost off" ; +VAL_ 3221225472 PDPRS 1 " ON" 0 " OFF" ; +VAL_ 3221225472 TEMPEARTUREUNITSETTING 1 "degF" 0 "degC" ; +VAL_ 3221225472 PRI_AC_DCM 1 " Pri A/C ON" 0 " Pri A/C OFF" ; +VAL_ 3221225472 F_INDOORAIR 1 "Request" 0 "No Request" ; +VAL_ 3221225472 Prohibit_Cranking_HEV 1 "STcont prohibition" 0 "STcont permission" ; +VAL_ 3221225472 IGN_OFF_PERMISSION 1 "PERMIT_TO_IGN_OFF" 0 "NOT_PERMIT_TO_IGN_OFF" ; +VAL_ 3221225472 EPSSTRQ 3 "Not used" 2 "Request" 1 "Not used" 0 "No Request" ; +VAL_ 3221225472 STATUS_FFP 3 "Invalid" 2 "Invalid" 1 "Ready" 0 "Init" ; +VAL_ 3221225472 FTRG_ACC 1 "ACC Trouble" 0 "OK" ; +VAL_ 3221225472 ACCFAIL1 1 "System OK" 0 "System NG" ; +VAL_ 3221225472 INCHING_CONTROL 1 "Inching control operating" 0 "Inching control not operating" ; +VAL_ 3221225472 ACC_AND_INCHING_RANGE 1 " ON" 0 " OFF" ; +VAL_ 3221225472 DIRTY_LASER_JPN 1 " ON" 0 " OFF" ; +VAL_ 3221225472 DIRTY_LASER_USA 1 " ON" 0 " OFF" ; +VAL_ 3221225472 TARGET_CHANGING_BUZZER 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ACC_Buzzer_3rd 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ACC_Buzzer_2nd 1 " ON" 0 " OFF" ; +VAL_ 3221225472 BST_ACTV_RB 1 "Pressure control not operating" 0 "Pressure control operating" ; +VAL_ 3221225472 BST_ACTV 1 "Pressure control operating" 0 "Pressure control not operating" ; +VAL_ 3221225472 PBS2_OFF 1 " ON" 0 " OFF" ; +VAL_ 3221225472 CAR_M 1 " ON" 0 " OFF" ; +VAL_ 3221225472 IND_BAR 1 " ON" 0 " OFF" ; +VAL_ 3221225472 IND_KMH 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ASCD_SET 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ACC_Buzzer 1 " ON" 0 " OFF" ; +VAL_ 3221225472 PBS2_WARNING 1 " ON" 0 " OFF" ; +VAL_ 3221225472 MAIN 1 " ON" 0 " OFF" ; +VAL_ 3221225472 LOCK 1 " ON" 0 " OFF" ; +VAL_ 3221225472 FLS_TRGT 1 "Blink" 0 "Not Blink" ; +VAL_ 3221225472 ECMNG 1 "ECM control not effective" 0 "ECM control effective" ; +VAL_ 3221225472 ETCNG 1 "ETC control not effective" 0 "ETC control effective" ; +VAL_ 3221225472 FCNG 1 " fuel cut control not effective" 0 " fuel cut control effective" ; +VAL_ 3221225472 CANNG 1 "CAN communication not eff" 0 "CAN communication eff" ; +VAL_ 3221225472 DTCCODE 0 "no failure" ; +VAL_ 3221225472 ABSWL 1 "ON(put the light out)" 0 "ON(SW on a light)" ; +VAL_ 3221225472 MR 1 "ON" 0 "OFF" ; +VAL_ 3221225472 MTRMON 1 "ON" 0 "OFF" ; +VAL_ 3221225472 AR 1 "ON" 0 "OFF" ; +VAL_ 3221225472 ARMON 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RLOSOLM 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RLISOLM 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RROSOLM 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RRISOLM 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FLOSOLM 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FLISOLM 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FROSOLM 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FRISOLM 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RLAV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RLEV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RRAV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RREV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FLAV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FLEV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FRAV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FREV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 MRACT 1 "ON" 0 "OFF" ; +VAL_ 3221225472 VRACT 1 "ON" 0 "OFF" ; +VAL_ 3221225472 SUSVACT 1 "ON" 0 "OFF" ; +VAL_ 3221225472 PUSVACT 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RL_AV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RL_EV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FR_AV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FR_EV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RR_AV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RR_EV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FL_AV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FL_EV 1 "ON" 0 "OFF" ; +VAL_ 3221225472 FLAG_CAN 1 "Under Communication" 0 " Not Communication" ; +VAL_ 3221225472 STRLMP_SW 1 "ON" 0 "OFF" ; +VAL_ 3221225472 LIS 1 "ON" 0 "OFF" ; +VAL_ 3221225472 PKB_SW 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RR_WHEEL_STA 3 "Tyre Over-inflated" 2 "Tyre Too Much Over-inflated" 1 " Missing Sensor" 0 "Pressure OK" ; +VAL_ 3221225472 RL_WHEEL_STA 3 "Tyre Over-inflated" 2 "Tyre Too Much Over-inflated" 1 " Missing Sensor" 0 "Pressure OK" ; +VAL_ 3221225472 LEFT_RIGHT_WHEEL_IMBALANCE 3 "imbal Left/Right FR &Rear Axle" 2 "imbal Left/Right Rear Axle" 1 "Imbal Left/Right Front Axle" 0 " Everything normal" ; +VAL_ 3221225472 SSPP_LEAKAGE_LAMP 3 " Not used" 2 "Slow leak (Flashing)" 1 "= Puncture (Lamp ON constant)" 0 " No Leak" ; +VAL_ 3221225472 FL_WHEEL_STA 3 "Tyre Over-inflated" 2 "Tyre Too Much Over-inflated" 1 " Missing Sensor" 0 "Pressure OK" ; +VAL_ 3221225472 FR_WHEEL_STA 3 "Tyre Over-inflated" 2 "Tyre Too Much Over-inflated" 1 " Missing Sensor" 0 "Pressure OK" ; +VAL_ 3221225472 SSPP_STOP_LAMP 1 "ON" 0 "OFF" ; +VAL_ 3221225472 SSPP_SERVICE_LAMP 1 "ON" 0 "OFF" ; +VAL_ 3221225472 SPEED_PRESSURE_MILSANDPLATION 1 "Vehicle speed NOT adapt pressure" 0 " Vehicle speed adapted pressure" ; +VAL_ 3221225472 SSPP_LAMP 3 "Not used" 2 "Flashing" 1 "ON" 0 "OFF" ; +VAL_ 3221225472 LOAD_PRESSUR_MLSADAPLATION 1 "Load NOT adapted pressure" 0 "Load adapted pressure" ; +VAL_ 3221225472 VEHIVLE_PRESSURE_STA 3 "Not used" 2 "Vehicle under-pressure" 1 "Vehicle over-pressure" 0 "OK" ; +VAL_ 3221225472 LINK 228 "5th Key inserted" 220 "4th Key inserted" 212 "3rd Key inserted" 164 "Some key inserted" 28 "2nd Key inserted" 20 "1st Key inserted" ; +VAL_ 3221225472 FTRG_ACC3 1 "ACC Trouble" 0 "OK" ; +VAL_ 3221225472 FTRG_ACC2 1 "ACC Trouble" 0 "OK" ; +VAL_ 3221225472 E_VLP_ACT_MINUS 1 "ON" 0 "OFF" ; +VAL_ 3221225472 E_VLP_ACT_PLUS 1 "ON" 0 "OFF" ; +VAL_ 3221225472 SHSVACT 1 "ON" 0 "OFF" ; +VAL_ 3221225472 PHSVACT 1 "ON" 0 "OFF" ; +VAL_ 3221225472 TAACTorTAOK 1 "in operation" 0 "Not in operation" ; +VAL_ 3221225472 SHINDREQ 1 "ON" 0 "OFF" ; +VAL_ 3221225472 SportModeLamp 1 "Sport mode lamp ON" 0 "Sport mode lamp OFF" ; +VAL_ 3221225472 ISBRKREQ 1 "Brake Hold request by IS" 0 "No request" ; +VAL_ 3221225472 ACSTRK 3 "full destroke" 2 "by HVAC and lowered to 3degC" 1 "full stroke and lowered to 3degC" 0 "by HVAC" ; +VAL_ 3221225472 ECO_DISP_RQ 31 "Turn Off Indicator" 30 "30" 29 "29" 28 "28" 27 "27" 26 "26" 25 "25" 24 "24" 23 "23" 22 "22" 21 "21" 20 "20" 19 "19" 18 "18" 17 "17" 16 "16" 15 "15" 14 "14" 13 "13" 12 "12" 11 "11" 10 "10" 9 "9" 8 "8" 7 "7" 6 "6" 5 "5" 4 "4" 3 "3" 2 "2" 1 "1" 0 "Turn OFF Indicator" ; +VAL_ 3221225472 IDSTREQ 1 "ECM is idle stop standby OK" 0 "ECM is idle stop standby NG" ; +VAL_ 3221225472 ISACT 1 "idle stop control is active" 0 "idle stop control is not active" ; +VAL_ 3221225472 ISSAP 1 "Vehicle equip with I/S sys" 0 "Vehicle equip without I/S sys" ; +VAL_ 3221225472 ISMSKSW 1 "idle stop prohibition" 0 "idle stop permission" ; +VAL_ 3221225472 ISINDMD 3 "Blink(high cycle:2Hz)&buzz(2Hz)" 2 "Blinking(low cycle:1Hz)" 1 "Turn ON" 0 "Turn OFF" ; +VAL_ 3221225472 IDSTSTS 1 " IS is permitted" 0 " IS is not permitted" ; +VAL_ 3221225472 CHRGLREQ 1 "turning on" 0 "turning off" ; +VAL_ 3221225472 OBD_ENG_ON 1 "Engine have started" 0 "Engine have not started" ; +VAL_ 3221225472 IBA_FLG 1 "IBA flag status is ON" 0 "IBA flag status is OFF" ; +VAL_ 3221225472 ABS_STATE 1 "ABS Operation status is ON" 0 "ABS Operation status is OFF" ; +VAL_ 3221225472 RH_STATE 15 "invalid" 14 "invalid" 13 "invalid" 12 "invalid" 11 "Mode Release output to RH Motor" 10 "Mode WL output to RH Motor" 9 "Mode ELB output to RH Motor" 8 "Mode ER output to RH Motor" 7 "Mode EH output to RH Motor" 6 "Mode EC output to RH Motor" 5 "Mode EAB output to RH Motor" 4 "Mode EFB output to RH Motor" 3 "Mode CDR output to RH Motor" 2 "Mode CBR output to RH Motor" 1 "Mode CS output to RH Motor" 0 "No output to RH Motor" ; +VAL_ 3221225472 LH_STATE 15 "invalid" 14 "invalid" 13 "invalid" 12 "invalid" 11 "Mode Release output to LH Motor" 10 "Mode WL output to LH Motor" 9 "Mode ELB output to LH Motor" 8 "Mode ER output to LH Motor" 7 "Mode EH output to LH Motor" 6 "Mode EC output to LH Motor" 5 "Mode EAB output to LH Motor" 4 "Mode EFB output to LH Motor" 3 "Mode CDR output to LH Motor" 2 "Mode CBR output to LH Motor" 1 "Mode CS output to LH Motor" 0 "No output to LH Motor" ; +VAL_ 3221225472 FLGST 1 "Operating Mode 2" 0 "Not operating Mode 2" ; +VAL_ 3221225472 FLGST_WARN 1 "Operating Mode 1" 0 "Not operating Mode 1" ; +VAL_ 3221225472 RPOS 1 "Shift pos is in Reverse Position" 0 "Shift pos is except for Rev Pos" ; +VAL_ 3221225472 BCLSWRH 1 "Switch state is ON" 0 "Switch state is OFF" ; +VAL_ 3221225472 BCLSWLH 1 "Switch state is ON" 0 "Switch state is OFF" ; +VAL_ 3221225472 IGN_SW 1 "Ignition supply ON" 0 "Ignition supply OFF" ; +VAL_ 3221225472 DOOR_SW 9 " boot (back door) open" 8 "boot (back door) closed" 7 " rear right door open" 6 " rear right door closed" 5 " rear left door open" 4 "rear left door closed" 3 "front right door open" 2 "front right door closed" 1 "front left door open" 0 " front left door closed" ; +VAL_ 3221225472 STSYS_TYPE 1 "Key Engine Start System" 0 "Push Engine Start System" ; +VAL_ 3221225472 ESCL_STATUS 1 "LOCK" 0 "UNLOCK" ; +VAL_ 3221225472 OK_COMMUTE 3 "invalid(commutation allowed)" 2 "commutation allowed" 1 "network in preparation" 0 "commutation not allowed" ; +VAL_ 3221225472 USM_DONGEL_COM 3 "Blank" 2 "Not used" 1 "ID tansmit" 0 "normal" ; +VAL_ 3221225472 OIL_P_SW 1 " ON" 0 " OFF" ; +VAL_ 3221225472 HL_WASH 1 "headlamp washer on" 0 "headlamp washer off" ; +VAL_ 3221225472 BAT_L 1 "battery lamp on" 0 "battery lamp off" ; +VAL_ 3221225472 IGN_CONF 1 "primary ignition supply confirm" 0 "no primary ignition supply" ; +VAL_ 3221225472 USM_WAKE_SLEEP_REQ 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_ 3221225472 USM_REFUSE 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 AC_COMP 1 "Climate cooling compressor on" 0 "Climate cooling compressor off" ; +VAL_ 3221225472 TAIL_L 1 "position lights off" 0 "position lights on" ; +VAL_ 3221225472 HL_LOW 1 " low beam on" 0 " low beam off" ; +VAL_ 3221225472 HL_HIGH 1 " high beam on" 0 " high beam off" ; +VAL_ 3221225472 FR_FOG 1 " front fog lights on" 0 " front fog lights off" ; +VAL_ 3221225472 RES_USM 1 "exit from reset" 0 "no reset" ; +VAL_ 3221225472 FR_WIP_PROT 3 "front wiper blocked" 2 "front wiper protected in HS" 1 "front wiper protected in LS" 0 "no protection" ; +VAL_ 3221225472 IGN_RLY 1 "IGN relay on" 0 "IGN relay off" ; +VAL_ 3221225472 STA_RLY 3 "cranking relay switched on" 2 "long relaxation active" 1 "short relaxation active" 0 "cranking relay switched off" ; +VAL_ 3221225472 FR_WIP 3 "invalid" 2 "high speed active" 1 "low speed active" 0 "front wiper stopped" ; +VAL_ 3221225472 AUTO_S_SW 1 "stop position reached" 0 "stop position not reached" ; +VAL_ 3221225472 WIPERIMP 1 "Wiper opn+SET Opn" 0 "Except for Wiper opn+SET Opn" ; +VAL_ 3221225472 HVIMP 1 "High Speed+SET Operation" 0 "Except for High Speed+SETOpn" ; +VAL_ 3221225472 BRKIMP 1 "Brake+SET Operation" 0 "Except for Brake+SET Operation" ; +VAL_ 3221225472 RNGIMP 1 "Not D range+SET Operation" 0 "Except for Not D range+SET Opn" ; +VAL_ 3221225472 ACCFAIL2 1 "System NG" 0 "System OK" ; +VAL_ 3221225472 ERR_ST1 1 "Laser Dirty Fail" 0 "Normal" ; +VAL_ 3221225472 BST_ACTV2 1 "Pressure control not operating" 0 "Pressure control operating" ; +VAL_ 3221225472 BST_ACTV1 1 "Pressure control operating" 0 "Pressure control not operating" ; +VAL_ 3221225472 ACC_VALVE 1 " Bulb Check Mode" 0 "Normal Mode" ; +VAL_ 3221225472 AUTO_BRK 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ACC_FAIL 1 "System NG" 0 "System OK" ; +VAL_ 3221225472 TCSHANGE 1 "Request" 0 "No Request" ; +VAL_ 3221225472 LPUPSIG 1 "Request" 0 "No Request" ; +VAL_ 3221225472 DECON 1 "Reduce the Speed" 0 "Not Reduce the Speed" ; +VAL_ 3221225472 TGCHANGE 1 "Request" 0 "No Request" ; +VAL_ 3221225472 TURN_IND 1 " left ON,right trailer warn OFF" 0 " left,right trailer warning OFF" ; +VAL_ 3221225472 ASCDSWA1 1 "switch input value is abnormal" 0 "switch input value is normal" ; +VAL_ 3221225472 ASCDSWA2 1 "terminal for switch is open" 0 " terminal is normal" ; +VAL_ 3221225472 ASCDSWA4 1 " RES switch is on" 0 " RES switch is off" ; +VAL_ 3221225472 ASCDSWA5 1 "SET switch is on" 0 "SET switch is off" ; +VAL_ 3221225472 ASCDSWA6 1 "CAN switch is on" 0 "CAN switch is off" ; +VAL_ 3221225472 BPFS_NC 1 " Brake Pedal OFF" 0 " Brake Pedal ON" ; +VAL_ 3221225472 BPFS_NO 1 "Brake Pedal ON" 0 "Brake Pedal OFF" ; +VAL_ 3221225472 ASCDCRU 1 "ACC Cruise Flag ON" 0 "ACC Cruise Flag OFF" ; +VAL_ 3221225472 ODCANACC 1 "Request" 0 "Not Request" ; +VAL_ 3221225472 AUTOSTOP 1 "Stop control operation" 0 "Stop control not operation" ; +VAL_ 3221225472 ACCACT 1 "EngineTorque Request" 0 " EngineTorque Not Request" ; +VAL_ 3221225472 MAIN_SWA 1 " Main SW ON" 0 " Main SW OFF" ; +VAL_ 3221225472 CLUSTER_DISP 28 "Reserved - used only for 84" 22 "card reader failure" 21 "pedal not kept" 20 "cranking in progress" 19 "confirm engine stop" 18 "boot open cranking->insert card" 17 "remove card" 16 "neutral or unclutch" 15 "gear on P or N" 14 "prs brk pdl + start or unclutch" 13 "reserved" 12 "reserved" 11 "Restricted card mode" 10 "Remove Key card + buzzer" 9 "press start + brake pedal" 8 "CR stand fail-consult instruct" 7 "push twice stop" 6 "card not detected + buzzer" 5 "scen2-malfunc-consult instruct" 4 "scen2-malfunc" 3 "card not detected" 2 "insert card" 1 "welcome" 0 "nothing to display" ; +VAL_ 3221225472 BATTERY_LOW 1 "battery low" 0 "battery OK" ; +VAL_ 3221225472 TRIP_SCROLLING_REQ 3 "invalid" 2 "downward scrolling request" 1 "upward scrolling request" 0 "no request" ; +VAL_ 3221225472 HEATER_F 1 "heater unit set point frozen" 0 "heater unit set point not frozen" ; +VAL_ 3221225472 DTRL_REQ 1 "day time run light requested" 0 "day time run light not requested" ; +VAL_ 3221225472 REV_SW 3 "invalid" 2 "Not used" 1 "rear gear engaged" 0 "rear gear not engaged" ; +VAL_ 3221225472 CARD_KEY_NUM 15 "invalid" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "card/key no.4 identified by BCM" 7 "Not used" 6 "Not used" 5 "Not used" 4 "card/key no.3 identified by BCM" 3 "Not used" 2 "card/key no.2 identified by BCM" 1 "card/key no.1 identified by BCM" 0 "Not used" ; +VAL_ 3221225472 AUTOMATIC_WIPING_MAL 1 "automatic wiping failure" 0 "automatic wiping OK" ; +VAL_ 3221225472 RR_DEF_REQ 3 "rear defrost req and engaged" 2 "rear defrost not req and engaged" 1 "rear defrost req and not engaged" 0 "rear defrost not req" ; +VAL_ 3221225472 TRAILER 1 "trailer detected" 0 "no trailer detected" ; +VAL_ 3221225472 STEERING_LOCK 7 "reserved" 6 "electronical failure BCM /SERV" 5 "reserved" 4 "steering column unlock failure" 3 "reserved" 2 "steering column locking failure" 1 "electronical failure BCM/STOP" 0 "no steering lock failure" ; +VAL_ 3221225472 RR_FOG_L 1 "rear fog light on" 0 "rear fog light off" ; +VAL_ 3221225472 WIP_MAL 1 "wiping malfunction" 0 "no wiping malfunction" ; +VAL_ 3221225472 TYRE_PRE 1 " veh without TPMS" 0 " veh with TPMS" ; +VAL_ 3221225472 ACC_SW 1 "accessory supply on" 0 "accessory supply off" ; +VAL_ 3221225472 FR_FOG_L_REQ 1 "front fog lights requested" 0 "front fog lights not requested" ; +VAL_ 3221225472 RES_BCM 1 "exit from reset" 0 "no exit from reset" ; +VAL_ 3221225472 SNOW_SW 1 " ON" 0 " OFF" ; +VAL_ 3221225472 G_EON1 1 "EngineON request" 0 "No EngineON request" ; +VAL_ 3221225472 NUP_flag 1 " NUP ON" 0 " NUP OFF" ; +VAL_ 3221225472 G_CPON 1 "Compressor ON" 0 "Compressor OFF" ; +VAL_ 3221225472 G_AC 1 "AC_SW ON" 0 "AC_SW OFF" ; +VAL_ 3221225472 G_STBR 1 "STB ON" 0 "STB OFF " ; +VAL_ 3221225472 G_WPR 1 "ON request" 0 "OFF request" ; +VAL_ 3221225472 EPS_DONGLE_COM 3 "Blank" 2 "Not used" 1 "ID transmit" 0 "normal case" ; +VAL_ 3221225472 INDEXEPS 1 "notcalib,notindex(8Hz flash, HP" 0 "not calibrated,indexed/calib" ; +VAL_ 3221225472 EPSFAIL 3 "diag mode (2Hz flashservice)" 2 "serious failure -> STOP" 1 "small failure ->SERVICE" 0 "normal" ; +VAL_ 3221225472 RESETEPS 1 "exit from reset" 0 "no reset" ; +VAL_ 3221225472 SLIP_INFO_RR 1 "Slip" 0 "Not Slip" ; +VAL_ 3221225472 SLIP_INFO_RL 1 "Slip" 0 "Not Slip" ; +VAL_ 3221225472 SLIP_INFO_FR 1 "Slip" 0 "Not Slip" ; +VAL_ 3221225472 SLIP_INFO_FL 1 "Slip" 0 "Not Slip" ; +VAL_ 3221225472 ABS_DONGLE_COM 3 "Blank" 2 "Not used" 1 "ID transmit" 0 "normal case" ; +VAL_ 3221225472 HSA_STATUS 1 "HSA active" 0 "HSA inactive" ; +VAL_ 3221225472 EHS_STA 3 "Invalid" 2 "Not used" 1 "EHS_valve_active" 0 "EHS_valve_passive" ; +VAL_ 3221225472 I_BLW_F 15 "not used" 14 "not used" 13 "not used" 12 "not used" 11 "not used" 10 "not used" 9 "not used" 8 "not used" 7 "Blower FAN Mode 7" 6 "Blower FAN Mode 6" 5 "Blower FAN Mode 5" 4 "Blower FAN Mode 4" 3 "Blower FAN Mode 3" 2 "Blower FAN Mode 2" 1 "Blower FAN Mode 1" 0 "Blower FAN OFF" ; +VAL_ 3221225472 CORRECT_DEV 15 "area code 15" 14 "area code 14" 13 "area code 13" 12 "area code 12" 11 "area code 11" 10 "area code 10" 9 "area code 9" 8 "area code 8" 7 "area code 7" 6 "area code 6" 5 "area code 5" 4 "area code 4" 3 "area code 3" 2 "area code 2" 1 "area code 1" 0 "invalid" ; +VAL_ 3221225472 COMP_CAL_STA 3 "Invalid" 2 "calibration end" 1 "calibration cancel" 0 "calibration mode" ; +VAL_ 3221225472 COMPASS 31 "unused value" 30 "unused value" 29 "unused value" 28 "unused value" 27 "unused value" 26 "unused value" 25 "unused value" 24 "unused value" 23 "unused value" 22 "unused value" 21 "unused value" 20 "unused value" 19 "unused value" 18 "unused value" 17 "unused value" 16 "north north-west" 15 "north-west" 14 "west north-west" 13 "west" 12 "west south-west" 11 "south-west" 10 "south south-west" 9 "south" 8 "south south-east" 7 "south-east" 6 "east south-east" 5 "east" 4 "east north-east" 3 "north east" 2 "north north-east" 1 "north" 0 "invalid" ; +VAL_ 3221225472 _4WD_Existence 1 "4WD sensor exist" 0 "4WD sensor not exist" ; +VAL_ 3221225472 Curv_9_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_8_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_7_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_6_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_5_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_4_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_3_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_2_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_20_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_1_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_19_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_18_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_17_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_16_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_15_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_14_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_13_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_12_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_11_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_10_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Curv_0_Direction 1 "Left-hand curve" 0 "Right-hand curve" ; +VAL_ 3221225472 Unit_SpeedLimt_Next 1 "km/h" 0 "Mile/h" ; +VAL_ 3221225472 Next_RoadType 3 "local road" 2 "national road" 1 "Highway" 0 "No data" ; +VAL_ 3221225472 AnotherRoad_Matching 1 "matching with different route" 0 "match with prev estimated route" ; +VAL_ 3221225472 GPS_ERR 1 "error" 0 "not error" ; +VAL_ 3221225472 Unit_SpeedLimt 1 "km/h" 0 "Mile/h" ; +VAL_ 3221225472 SpeedLimit_Sign_Sts 3 "While others display" 2 "Blinks and displays speed limits" 1 "Lights and displays speed limits" 0 "No display" ; +VAL_ 3221225472 MTSRC_SW 1 "MT SyncRev Ctrl main sw active" 0 "MT SyncRev Ctrl main sw not act" ; +VAL_ 3221225472 DriverDoor 1 "Driver Door Opened" 0 "Driver Door Closed" ; +VAL_ 3221225472 MUTE_RADIO_ORDER 1 "Mute radio order" 0 "No mute radio order" ; +VAL_ 3221225472 FULE_LEVEL 0 "petrol tank reserve" ; +VAL_ 3221225472 LAMP_AUTOCHECK 1 "autotest in progress" 0 "no autotest in progress" ; +VAL_ 3221225472 VEHICLE_TYPE 15 "no definition" 14 "J84" 13 "B84" 12 "J77" 11 "X85" 10 "X61" 9 "X74 ph2" 8 "F200" 7 "X70" 6 "X83" 5 "X76" 4 "D66" 3 "X65 ph2" 2 "X81" 1 "X73" 0 "X74" ; +VAL_ 3221225472 CLUSTER_WAKE_SLEEP_REQ 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_ 3221225472 LPG_LOW 1 "LPG level low" 0 "LPG level OK" ; +VAL_ 3221225472 AIRBG_LAMP_STA 1 "lamp ON(AIRBAG system malfunc)" 0 "lamp OFF(AIRBAG system OK)" ; +VAL_ 3221225472 AIRBAG_LAMPOFF_STA 1 " PassengerAIRBAG_OFF lamp ON" 0 " PassengerAIRBAG_OFF lamp OFF" ; +VAL_ 3221225472 AIRBAG_LAMP_OPE 1 "lamp OK" 0 "lamp malfunction" ; +VAL_ 3221225472 AIRBAG_LAMPOFF_OPE 1 "PassengerAIRBAG_OFF lamp OK" 0 "PassengerAIRBAG_OFF lamp malfunc" ; +VAL_ 3221225472 BAC_SW_or_MTSR_SW 1 "buckleSW OFF(lamp ON)" 0 " buckleSW ON" ; +VAL_ 3221225472 CLUSTER_REFUSE 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 FULE_LOW 1 "fuel level low" 0 "fuel level OK" ; +VAL_ 3221225472 RES_METER 1 "exit from reset" 0 "no reset" ; +VAL_ 3221225472 BRAKE_SYSTEM 1 "brake system malfunction" 0 "no brake system malfunction" ; +VAL_ 3221225472 HAND_BRAKE 1 " parking brake applied" 0 " parking brake not applied" ; +VAL_ 3221225472 FGUAG_DIAG 3 "reserved" 2 "short circuit" 1 "open circuit" 0 "fuel gauge link OK" ; +VAL_ 3221225472 G_DG37 1 "Self check error" 0 " Normal" ; +VAL_ 3221225472 G_DG36 1 "LowTemperature" 0 "Normal" ; +VAL_ 3221225472 G_DG26 3 "System stopped abnormally " 2 "not used" 1 "Start failure" 0 "normal" ; +VAL_ 3221225472 G_DG24 3 " not used" 2 "Control power supply is abnormal" 1 "not used" 0 "normal" ; +VAL_ 3221225472 G_DG23 1 "STB short" 0 "normal" ; +VAL_ 3221225472 G_DG22 1 "STB signal is ON" 0 "STB signal is OFF" ; +VAL_ 3221225472 G_DG20 3 "The thermistor is abnormal" 2 "Overheating S" 1 "Overheating L" 0 "normal" ; +VAL_ 3221225472 G_DG16 3 "HB voltage abnormal" 2 "HB voltage too high" 1 "HB voltage too low" 0 "HB voltage normal" ; +VAL_ 3221225472 G_DG14 3 "Abnormal current detected" 2 "Output line open" 1 "Output line short" 0 "normal" ; +VAL_ 3221225472 G_DG11 7 "not used" 6 "Input over current" 5 "Current exceeds critical value" 4 "Overload" 3 "Software over current" 2 "Motor current restriction" 1 "Voltage restriction" 0 "normal" ; +VAL_ 3221225472 G_DG10 1 "Abnormal communication " 0 "normal" ; +VAL_ 3221225472 E_SUS_MODE 3 "Driving Mode AUTO" 2 "Driving Mode COMF" 1 "Driving Mode SPORTS" 0 "Driving Mode R" ; +VAL_ 3221225472 E_SUS_FAIL 1 "Fail Mode" 0 "Normal" ; +VAL_ 3221225472 DL_BUZ_STA 1 "DIFF LOCK BUZZER ON" 0 "DIFF LOCK BUZZER OFF" ; +VAL_ 3221225472 DL_APPROVAL 1 "Diff lock approval flag ON" 0 "Diff lock approval flag OFF" ; +VAL_ 3221225472 DL_P_SW 1 "Diff lock position switching ON" 0 "Diff lock position switching OFF" ; +VAL_ 3221225472 DL_RELAY 1 "Diff lock relay ON" 0 "Diff lock relay OFF" ; +VAL_ 3221225472 DL_OPERATING 1 "Diff lock operating" 0 "Diff lock not operating" ; +VAL_ 3221225472 DL_SW 1 "Diff lock switching ON" 0 "Diff lock switching OFF" ; +VAL_ 3221225472 DL_INDICATOR 3 "Not used" 2 "Diff lock indicator Flash" 1 "Diff lock indicator ON" 0 "Diff lock indicator OFF" ; +VAL_ 3221225472 DL_FAIL 3 "Not used" 2 "Not used" 1 "Diff lock controller failure" 0 "Diff lock controller operational" ; +VAL_ 3221225472 METER_P_FAULT 1 "Fault" 0 "Normal" ; +VAL_ 3221225472 INHIBITION_WARNING 3 "Take off inhib wrng reemis req" 2 "Not Used" 1 "No take off inhib warning req" 0 "No take off inhib warning req" ; +VAL_ 3221225472 IMMOBI_WARNING 1 "warn stop vehcl immed disp req" 0 "No warn vehcl notimmobi disp req" ; +VAL_ 3221225472 BRAKE_PEDAL_REQ 3 "Brk pedal req msg re-emiss req" 2 "Not used" 1 "brake pedal req msg display" 0 "No brake pedal req msg display" ; +VAL_ 3221225472 PKB_FAIL_IND 3 "Not Used" 2 "Major FPA default" 1 "Minor FPA default " 0 "No FPA default" ; +VAL_ 3221225472 EPKB_STATUS 1 "parking braking is braking" 0 "parking braking is no braking" ; +VAL_ 3221225472 EPKB_REFUSE 1 "APB ready to sleep" 0 "APB refuse to sleep" ; +VAL_ 3221225472 BRAKING_IND 1 "dynamic brk display Req" 0 "No dynamic brk display Req" ; +VAL_ 3221225472 APB_WARNING 1 "PB not tight warn disp req" 0 "No APB not tight warn disp req" ; +VAL_ 3221225472 APB_REQ 3 "APB tightreq unavwarnre-emi req" 2 "Not used" 1 "tightreq unav warn req" 0 "No APB tightreq unav warn req" ; +VAL_ 3221225472 IG_OFF_DELAY_REQ 1 "IGN_OFF_DELAY_REQUESTED" 0 "READY_TO_INITIATE_IGNOFF_SEQ" ; +VAL_ 3221225472 GSINXTGP 7 "OFF" 6 "6th" 5 "5th" 4 "4th" 3 "3rd" 2 "2nd" 1 "1st" 0 "OFF" ; +VAL_ 3221225472 NVSFTMEN 1 " Display NAVI_SHIFT_menu ON" 0 " Display NAVI_SHIFT_menu OFF" ; +VAL_ 3221225472 ECOPSTCB 3 "ECO Pdl Force setng status Std" 2 "ECO Pdl Force setng status soft" 1 "ECO Pdl Force setng status OFF" 0 "Not Used" ; +VAL_ 3221225472 ECOPMENU 1 "ECO Pedal Force setting Menu ON" 0 "ECO Pedal Force setting Menu OFF" ; +VAL_ 3221225472 ECOMENU 1 "Display ECO_mode_menu ON" 0 "Display ECO_mode_menu OFF" ; +VAL_ 3221225472 ECOIND 3 "Green Turn ON &Amber Turn ON" 2 "Green Turn OFF &Amber Turn ON" 1 "Green Turn ON &Amber Turn OFF" 0 "Green&Amber Turn OFF" ; +VAL_ 3221225472 SMAPREQ_hea 3 "Request3" 2 "Request2" 1 "Request1" 0 " No request" ; +VAL_ 3221225472 SMAPREQ_emi 1 "Request" 0 "No Request" ; +VAL_ 3221225472 PBD_WAKE_SLEEP_REQ 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_ 3221225472 PBD_REFUSE 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 PBD_HAZ_REQ 3 "not used" 2 "ON" 1 "OFF" 0 "IDLE" ; +VAL_ 3221225472 PSD_R_WUS_REQ 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_ 3221225472 PSD_R_UL_FOBSW 1 "R_FOB-SW Request" 0 "No_request" ; +VAL_ 3221225472 PSD_R_UL_DRSW 1 "R_DR-SW Request" 0 "No_request" ; +VAL_ 3221225472 PSD_R_REF_SLP 3 "reserved" 2 "Ready ToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 PSD_R_ONE_UL_TSW 1 "SW-Request_R" 0 "No_request" ; +VAL_ 3221225472 PSD_R_CDL_REQ 3 "not used" 2 "All doors Unlock_R" 1 "All doors Lock_R" 0 "No request_R" ; +VAL_ 3221225472 PSD_R_ALL_UL_TSW 1 "SW-Request_R" 0 "No_request" ; +VAL_ 3221225472 PSD_L_WUS_REQ 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_ 3221225472 PSD_L_UL_FOBSW 1 "L_FOB-SW Request" 0 "No_request" ; +VAL_ 3221225472 PSD_L_UL_DRSW 1 "L_DR-SW Request" 0 "No_request" ; +VAL_ 3221225472 PSD_L_REF_SLP 3 " reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 PSD_L_ONE_UL_TSW 1 "SW-Request_L" 0 "No_request" ; +VAL_ 3221225472 PSD_L_CDL_REQ 3 "not used" 2 "All doors Unlock_L" 1 "All doors Lock_L" 0 "No request_L" ; +VAL_ 3221225472 PSD_L_ALL_UL_TSW 1 "SW-Request_L" 0 "No_request" ; +VAL_ 3221225472 G_FRRE 1 "Except for REC" 0 "REC" ; +VAL_ 3221225472 G_SBLW 1 "cool down status" 0 "not cool down status" ; +VAL_ 3221225472 G_BLON 1 "Blower Fan ON" 0 "Blower Fan OFF" ; +VAL_ 3221225472 ADA1_PERMIT 1 "ADA1 possible" 0 "ADA1 impossible" ; +VAL_ 3221225472 OBD_AT_TEMP_DIAG_COMPLETED 1 "Complete" 0 "Not complete" ; +VAL_ 3221225472 IDLEUPRQBYHT 1 " idle up request" 0 " idle up not request" ; +VAL_ 3221225472 ISHRDREQ 1 "CVT req HSA release delay" 0 "CVT don't req HSA release delay" ; +VAL_ 3221225472 INDPRNG 1 "P range" 0 "Except for P range" ; +VAL_ 3221225472 TMISFAIL 1 "CVT is fail" 0 "CVT is not fail" ; +VAL_ 3221225472 ISRESTD 1 "CVT req torque-down" 0 "CVT don't req torque-down" ; +VAL_ 3221225472 IDSTSTBYI 1 "CVT idlestop stndby indicator OK" 0 "CVT idlestop stndby indicator NG" ; +VAL_ 3221225472 IDSTSTBY 1 "CVT is idle stop standby OK" 0 "CVT is idle stop standby NG" ; +VAL_ 3221225472 ELAMP 1 " ON" 0 " OFF" ; +VAL_ 3221225472 DIWA_FILTER 1 "water detected in diesel" 0 "no water detected in diesel" ; +VAL_ 3221225472 PFILTER_STA 1 "Warning clog up filter" 0 "No warning message" ; +VAL_ 3221225472 TWN_REG 7 "unavailable" 6 "85 degC" 5 "80 degC" 4 "110 degC" 3 "105 degC" 2 "100 degC" 1 "95 degC" 0 "90 degC" ; +VAL_ 3221225472 DT_TWN 1 "down transition in progress" 0 "no down transition in progress" ; +VAL_ 3221225472 ENG_OSCO 1 "high threshold" 0 "low threshold" ; +VAL_ 3221225472 TIMTYPE 1 "LPG or GNV consumption" 0 "petrol consumption" ; +VAL_ 3221225472 LED 1 " ON" 0 " OFF" ; +VAL_ 3221225472 WTENP 1 "water temperature warning" 0 "no water temperature warning" ; +VAL_ 3221225472 G_LAMP 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ECFL1 1 "engine level 1b failure" 0 "no engine level 1b failure" ; +VAL_ 3221225472 ECFL2 1 "engine level 2 failure" 0 "no engine level 2 failure" ; +VAL_ 3221225472 RINF 1 "exit from reset" 0 "no exit from reset" ; +VAL_ 3221225472 HVAC_SMAPREQ_hea 7 "Request7" 6 "Request6" 5 "Request5" 4 "Request4" 3 "Request3" 2 "Request2" 1 "Request1" 0 "No Request" ; +VAL_ 3221225472 ISOKAC 1 " Idle stop is permitted." 0 " Idle stop is not permitted." ; +VAL_ 3221225472 COMPSTR 1 "The comp stroke is permitted" 0 "The comp stroke is not permitted" ; +VAL_ 3221225472 COMPDST 1 "The comp destroke is perm " 0 "The comp destroke is not perm " ; +VAL_ 3221225472 ACSTRKRE 3 "Comp is ctrl to full destroke" 2 "Comp is ctrl by HVAC, low 3degC" 1 "Comp is ctrl to FS, low 3degC" 0 "Comp is ctrl by HVAC" ; +VAL_ 3221225472 IdleUpRequest 7 "not used" 6 "not used" 5 "not used" 4 "up request 4" 3 "up request 3" 2 "up request 2 " 1 "up request 1 " 0 "not request " ; +VAL_ 3221225472 ChangeStatus_54C 1 " Sw is pushed by 0b" 0 " Sw is pushed by 1b" ; +VAL_ 3221225472 PTC_IdleUpRequest 1 "idle up request" 0 "no idle up request" ; +VAL_ 3221225472 AC_request 1 "Air Conditioning Requested" 0 "No Air Conditioning Requested" ; +VAL_ 3221225472 FanOn_REQ 1 "blower fan motor on" 0 "blower fan motor off" ; +VAL_ 3221225472 RearDef_REQ 1 "rear defrost requested" 0 "rear defrost not requested" ; +VAL_ 3221225472 STA_ST_HEAT_AUTO 1 "ON" 0 "OFF" ; +VAL_ 3221225472 ST_HEAT_AUTO_EXT 1 "exist" 0 "not exist" ; +VAL_ 3221225472 S_HEAT_AS_IND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 S_HEAT_AS_EXIST 1 "exist" 0 "not exist" ; +VAL_ 3221225472 S_HEAT_DR_EXIST 1 "exist" 0 "not exist" ; +VAL_ 3221225472 ST_HEAT_SWIND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 ST_HEAT_EXIST 1 "exist" 0 "not exist" ; +VAL_ 3221225472 STA_IDLSTP_HVAC 1 "ON" 0 "OFF" ; +VAL_ 3221225472 S_HEAT_DR_IND 1 "ON" 0 "OFF" ; +VAL_ 3221225472 IDLSTP_HVAC_EXST 1 "exist" 0 "not exist" ; +VAL_ 3221225472 STATUS_OF_EV_HEATER 1 "ON" 0 "OFF" ; +VAL_ 3221225472 EV_HEATER_EXIST 1 "exist" 0 "not exist" ; +VAL_ 3221225472 ECON_Status 1 " ON" 0 " OFF" ; +VAL_ 3221225472 RearAirVentStatus 7 "Not used" 6 "Not used" 5 "Not used" 4 "BLANK(Non display)" 3 "FOOT " 2 "B/L" 1 "VENT or ON" 0 "CLOSE" ; +VAL_ 3221225472 RearAirVent_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 Minus_sign_outside_temp 1 " ON" 0 " OFF" ; +VAL_ 3221225472 AC_SelfDiagnosing 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ChangeStatus_54B 1 " Sw is pushed by 0b" 0 " Sw is pushed by 1b" ; +VAL_ 3221225472 AirQualitySensorSensitivityStatu 7 "7" 6 "6" 5 "5" 4 "4" 3 "3" 2 "2" 1 "1" 0 "BLANK(Non display)" ; +VAL_ 3221225472 PollutionLevel 7 "not display" 6 "6" 5 "5" 4 "4" 3 "3" 2 "2" 1 "1" 0 "0" ; +VAL_ 3221225472 ECON_SW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 RearAirPurifierStatus 3 "auto" 2 "high" 1 "low" 0 "off" ; +VAL_ 3221225472 RearAirPurifier_IND 3 "auto" 2 "high" 1 "low" 0 "off" ; +VAL_ 3221225472 Status_of_plasma_cluster 3 "clean&refresh" 2 "refresh " 1 "clean" 0 "off" ; +VAL_ 3221225472 PlasmaCluster_IND 3 "clean&refresh on" 2 "refresh on" 1 "clean on" 0 "off" ; +VAL_ 3221225472 IntakeAutoSW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 FanSpeedStatus 15 "INDICATE FAN FLAME " 14 "14speed" 13 "13speed " 12 "12speed" 11 "11speed" 10 "10speed" 9 "9speed" 8 "8speed" 7 "7speed" 6 "6speed" 5 "5speed" 4 "4speed" 3 "3speed" 2 "2speed" 1 "1speed" 0 "ALL OFF" ; +VAL_ 3221225472 FanAutoStatus 3 "Not used" 2 "BLANK(Non display)" 1 "AUTO" 0 "MANUAL" ; +VAL_ 3221225472 FrontAirPurifierStatus 1 "ON" 0 "OFF" ; +VAL_ 3221225472 Def_SW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 DualStatus 1 " ON" 0 " OFF" ; +VAL_ 3221225472 Dual_SW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 FRE_Status 1 "Fresh" 0 "Not fresh" ; +VAL_ 3221225472 REC_Status 1 "Re-circulation" 0 "Not re-circulation" ; +VAL_ 3221225472 IntakeAutoStatus 1 "Auto" 0 "Not auto" ; +VAL_ 3221225472 FRE_SW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 REC_SW_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 AutoStatus_Pass 3 "Not used" 2 "BLANK(Non display)" 1 "AUTO" 0 "MANUAL" ; +VAL_ 3221225472 AirVentStatus_Dr 7 "Not used" 6 "Not used" 5 "DEF" 4 "D/F" 3 "FOOT " 2 "B/L" 1 "VENT" 0 "ALL OFF" ; +VAL_ 3221225472 AirVentStatus_Pass 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "FOOT" 2 "B/L" 1 "VENT" 0 "ALL OFF" ; +VAL_ 3221225472 AC_SystemStatus 3 "Not used" 2 "ram air blow" 1 "on" 0 "off" ; +VAL_ 3221225472 AC_SW_IND 1 "on" 0 "off" ; +VAL_ 3221225472 Status_of_AC 1 "on" 0 "off" ; +VAL_ 3221225472 AutoStatus_Dr 3 "Not used" 2 "BLANK(Non display)" 1 "AUTO" 0 "MANUAL" ; +VAL_ 3221225472 AutoSW_IND_Dr 1 " ON" 0 " OFF" ; +VAL_ 3221225472 AutoSW_IND_Pass 1 " ON" 0 " OFF" ; +VAL_ 3221225472 UpperVentExist 1 "exists" 0 "not exist" ; +VAL_ 3221225472 B_PLR_vent_exist 1 "exists" 0 "not exist" ; +VAL_ 3221225472 _3rd_vent_exist 1 "exists" 0 "not exist" ; +VAL_ 3221225472 FrontAirPurifierExist 1 "exists" 0 "not exist" ; +VAL_ 3221225472 RearAirPurifierExist 1 "exists" 0 "not exist" ; +VAL_ 3221225472 TempSW_LongPushOperation 1 "on" 0 "off" ; +VAL_ 3221225472 FanSW_LongPushOperation 1 "on" 0 "off" ; +VAL_ 3221225472 Status_of_off 1 "on" 0 "off" ; +VAL_ 3221225472 Plasuma_gene 1 "Quick&Clean" 0 "Clean&Ion" ; +VAL_ 3221225472 Air_quality_sensor_exist 1 "exists" 0 "not exist" ; +VAL_ 3221225472 Max_level_of_air_quality_sensor 7 "level7" 6 "level6" 5 "level5" 4 "level4" 3 "level3" 2 "level2" 1 "level1" 0 "No function" ; +VAL_ 3221225472 TempUnit 3 "Fahrenheit off" 2 "Fahrenheit on" 1 "Centigrade on" 0 "Centigrade off" ; +VAL_ 3221225472 OldAndNewMessage 1 "new" 0 "old" ; +VAL_ 3221225472 ChangeStatus_54A 1 " Sw is pushed by 0b" 0 " Sw is pushed by 1b" ; +VAL_ 3221225472 Econ_exist 1 "exist" 0 "not exist" ; +VAL_ 3221225472 Dual_exist 3 "Not used" 2 "temperature & air vents dual" 1 "temperature dual" 0 "single" ; +VAL_ 3221225472 RearAirVent_ExistAndType 3 "vent & foot & B/L" 2 "vent & foot" 1 "vent only" 0 "not exist" ; +VAL_ 3221225472 RearAC_ExistAndType 3 "heater&cooler" 2 "cooler only" 1 "heater only" 0 "not exist" ; +VAL_ 3221225472 Plasma_cluster_exist 1 "exists" 0 "not exist" ; +VAL_ 3221225472 Max_min_PTC_range 1 "MAX" 0 "MIN" ; +VAL_ 3221225472 CORRECT_DEV_STA 15 "area code 15" 14 "area code 14" 13 "area code 13" 12 "area code 12" 11 "area code 11" 10 "area code 10" 9 "area code 9" 8 "area code 8" 7 "area code 7" 6 "area code 6" 5 "area code 5" 4 "area code 4" 3 "area code 3" 2 "area code 2" 1 "area code 1" 0 "invalid" ; +VAL_ 3221225472 COMP_CAL 3 "Invalid" 2 "calibration normal" 1 "calibration cancel" 0 "calibration start" ; +VAL_ 3221225472 EcoAC_SW 1 "WITH" 0 "WITHOUT" ; +VAL_ 3221225472 RrAC_DirectSetting 7 "Not used" 6 "Not used" 5 "Not used" 4 "Heater & Cooler" 3 "AUTO" 2 "Cooler" 1 "Heater " 0 "OFF" ; +VAL_ 3221225472 RrAC_VentDirectSetting 3 "Not used" 2 "FOOT" 1 "B/L" 0 "VENT" ; +VAL_ 3221225472 RrVentDirectSetting 3 "FOOT" 2 "B/L" 1 "VENT" 0 "OFF" ; +VAL_ 3221225472 AirQualitySensDirectSetting 15 "Not used" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "7" 6 "6" 5 "5" 3 "3" 2 "2" 1 "1" 0 "Not used" ; +VAL_ 3221225472 AIRVENTDIRECTSETTING_DR 3 "D/F" 2 "FOOT" 1 "B/L" 0 "VENT" ; +VAL_ 3221225472 AIRVENTDIRECTSETTING_PASS 3 "D/F" 2 "FOOT" 1 "B/L" 0 "VENT" ; +VAL_ 3221225472 CompressorDirectSetting 3 "Not used" 2 "economy" 1 "compressor on" 0 "compressor off" ; +VAL_ 3221225472 IntakeDirectSetting 7 "Not used" 6 "Not used" 5 "Not used" 4 "AUTO REC" 3 "AUTO FRE" 2 "REC" 1 "AUTO" 0 "FRE" ; +VAL_ 3221225472 TemperatureUnitSetting 1 "degF" 0 "degC" ; +VAL_ 3221225472 AirQualitySensUpSW_SWfre 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AirQualitySensDownSW_SWrec 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AC_SelfDiagStartSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_SelfDiagStartSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 FailSafeStartSW 1 " ON" 0 " OFF" ; +VAL_ 3221225472 B_PLR_VentOnOffSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 B_PLRand3rdVentSameOnOffSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 B_PLRand3rdVentOffSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 B_PLRand3rdVentOnOffSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 VentOnOffSW_3rd 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 PlasmaClusterModeSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAirPurifierUpSW_or_FRSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAirPurifierDownSW_or_RearSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_FanSpeedSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_FanSpeedUpSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_FanSpeedDownSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAirVentSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_VentSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_VentDownSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_OffSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_TempUpSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_TempDownSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RcAC_AutoSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AUTOSWITCH_DR 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AUTOSWITCH_PASS 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 FanSpeedSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 FanSpeedUpSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 FanSpeedDownSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 FanSpeedDownSW_LongPush 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 TEMPUPSWITCH_DR 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 TempDownSW_Dr 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 TempUpSW_PASS 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 TEMPDOWNSWITCH_PASS 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 DUALSWITCH 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 COMPRESSORSWITCH 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 ECONOMYSWITCH 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AC_OffSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrDefSW 1 "Switch push" 0 "Switch not push" ; +VAL_ 3221225472 VoiceRecognitionExeuting 1 " ON" 0 " OFF" ; +VAL_ 3221225472 IntakeSwitch 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 IntakeSW_LongPush 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 FRE_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 FRE_SW_LongPush 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 REC_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 REC_SW_LongPush 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 UpperVentAutoSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 UpperVentOpenCloseSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AIRVENTSWITCH_DR 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AIRVENTSWITCH_PASS 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AIRVENTDOWNSWITCH_DR 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 AIRVENTDOWNSWITCH_PASS 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 DEFROSTERSWITCH 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 ST_HEAT_AUTO_SET 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 IDLSTP_HVAC_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_DR_SWLONG 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_DR_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_DR_OFFSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_DR_MIDSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_DR_LOSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_DR_HISW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_DR_AUTUP 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_DR_AUTOSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_DR_AUTDN 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_AS_SWLONG 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_AS_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_AS_OFFSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_AS_MIDSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_AS_LOSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_AS_HISW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_AS_AUTUP 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_AS_AUTOSW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 S_HEAT_AS_AUTDN 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 ST_HEATER_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 EV_HEATER_SW 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 TemperatureSwLongPush 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 FanSpeedSwLongPush 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RearAC_TempSwLongPush 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RearAC_FanSpeedSwLongPush 1 "SW is pushed by 0b" 0 "SW is pushed by 1b" ; +VAL_ 3221225472 RrAC_OperationType 1 "Direct setting" 0 "Push by push" ; +VAL_ 3221225472 RrAC_TempOpeTyp 3 "Not used" 2 "Dial" 1 "Direct setting" 0 "UP & DOWN" ; +VAL_ 3221225472 RrAC_VentOperationType 1 "Direct setting" 0 "Push by push" ; +VAL_ 3221225472 RrVentOperationType 1 "Direct setting" 0 "Push by push" ; +VAL_ 3221225472 RrAC_FanSpeedOperationType 3 "Direct setting" 2 "Dial" 1 "UP & DOWN" 0 "Push by push " ; +VAL_ 3221225472 RrAirPurifierOperationType 1 "Direct setting" 0 "Push by push" ; +VAL_ 3221225472 OffSwType 1 "fan down & off included" 0 "off sw separated" ; +VAL_ 3221225472 FanSpeedOperationType 3 "Direct setting" 2 "Dial" 1 "UP & DOWN" 0 "Push by push " ; +VAL_ 3221225472 CompressorOperationType 1 "A/C eco integrated - direct set" 0 "A/C economy separated" ; +VAL_ 3221225472 IntakeOperationType 3 "Not used" 2 "Direct setting" 1 "FRE & REC" 0 "Push by push " ; +VAL_ 3221225472 AirQualitySensOperationType 1 "Direct setting" 0 "UP & DOWN" ; +VAL_ 3221225472 INITIALISING_BIT 1 "Initializing (>3 tmsafterreboot)" 0 "Not initializing" ; +VAL_ 3221225472 TempOperationType_Dr 3 "Not used" 2 "Differential" 1 "Direct setting" 0 "UP & DOWN" ; +VAL_ 3221225472 TempOperationType_Pass 3 "Not used" 2 "Differential" 1 "Direct setting" 0 "UP & DOWN" ; +VAL_ 3221225472 VentOperationType_Dr 1 "Direct setting" 0 "Push by push" ; +VAL_ 3221225472 VentOperationType_Pass 1 "Direct setting" 0 "Push by push" ; +VAL_ 3221225472 E_FLOW5 7 "Not used" 6 "Not used" 5 "Not used" 4 "High-Power" 3 "Low-Power" 2 "No Power" 1 "Low-Power" 0 "High-Power" ; +VAL_ 3221225472 E_FLOW6 7 "Not used" 6 "Not used" 5 "Not used" 4 "High-Power" 3 "Low-Power" 2 "No Power" 1 "Low-Power" 0 "High-Power" ; +VAL_ 3221225472 AWD_FLAG 1 "AWD" 0 "2WD" ; +VAL_ 3221225472 E_FLOW3 7 "Not used" 6 "Not used" 5 "Not used" 4 "High-Power" 3 "Low-Power" 2 "No Power" 1 "Low-Power" 0 "High-Power" ; +VAL_ 3221225472 E_FLOW4 7 "Not used" 6 "Not used" 5 "Not used" 4 "High-Power" 3 "Low-Power" 2 "No Power" 1 "Low-Power" 0 "High-Power" ; +VAL_ 3221225472 TIRE_ROT 3 "Not used" 2 "car run state (forward)" 1 "car run state (back)" 0 "car run state (stop)" ; +VAL_ 3221225472 E_FLOW1 7 "Not used" 6 "Not used" 5 "Not used" 4 "High-Power" 3 "Low-Power" 2 "No Power" 1 "Not used" 0 "Not used" ; +VAL_ 3221225472 E_FLOW2 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Low-Power" 2 "No Power" 1 "Not used" 0 "Not used" ; +VAL_ 3221225472 IDH 3 "OC limit ctrl & Pwr save 30A" 2 "Power save with 30A" 1 "Overcurrent limiting control" 0 "normal condition" ; +VAL_ 3221225472 G_AWP 1 "HeaterWaterPump is operating" 0 "HeaterWaterPump is stopped" ; +VAL_ 3221225472 G_AINV 1 "Serial correspondence error" 0 "nomal" ; +VAL_ 3221225472 G_STBO 1 "STB OPEN" 0 "nomal" ; +VAL_ 3221225472 G_STBS 1 "STB ON" 0 "STB OFF" ; +VAL_ 3221225472 AFSACT 1 "AFS_Operating" 0 "AFS_NotOperating" ; +VAL_ 3221225472 AFSFAIL 1 "AFS_Fail (StopFuction)" 0 "AFS_Normal" ; +VAL_ 3221225472 PBS2_flag_truuble 1 "Flag ON whn PBS2 brk prs ordr" 0 "Besides the below" ; +VAL_ 3221225472 Pressure_trouble 1 "Pressure control trouble" 0 "Besides the below" ; +VAL_ 3221225472 Power_supply2 1 "Power supply voltage system 2" 0 " Besides the below" ; +VAL_ 3221225472 Power_supply1 1 "Power supply voltage system 1b " 0 " Besides the below" ; +VAL_ 3221225472 CAN_trouble 1 "CAN system trouble" 0 "Besides the below" ; +VAL_ 3221225472 booster_truoble 1 "Active booster solenoid trouble" 0 "Besides the below" ; +VAL_ 3221225472 Release_sw_trouble 1 "Release switch trouble" 0 "Besides the below" ; +VAL_ 3221225472 pressure_sen_trouble 1 "Pressure Sensor trouble" 0 "Besides the below" ; +VAL_ 3221225472 BCU_trouble 1 "BCU inside trouble" 0 "Besides the below" ; +VAL_ 3221225472 TAIL_L_REQ_DOP 1 "position lights requested" 0 "position lights not requested" ; +VAL_ 3221225472 HL_LOW_REQ_DOP 1 "low beam lights requested" 0 "low beam lights not requested" ; +VAL_ 3221225472 HAZARD_REQ_DOP 1 "hazard lights requested" 0 "hazard not requested" ; +VAL_ 3221225472 EST_RR_DEF_REQ 1 " Rear def requested" 0 " Rear def not requested" ; +VAL_ 3221225472 LOCK_UNLOK_REQ_DOP 3 "Trunk open operation" 2 "UNLOCK operation" 1 "LOCK operation" 0 "no operation" ; +VAL_ 3221225472 RAD_ST3 1 "Object Type Stationary" 0 "Not object" ; +VAL_ 3221225472 RAD_ST4 1 "Object Data Vallid" 0 "Not object" ; +VAL_ 3221225472 GLW_RY_STA 1 "Glow Relay Active " 0 "Glow Relay Not Active " ; +VAL_ 3221225472 IDLE_UP_REQ 1 "idle speed increase request" 0 "no idle speed increase request" ; +VAL_ 3221225472 NAVISHIFTINDREQ 1 "Indicatior Request" 0 "No Indicatior Request" ; +VAL_ 3221225472 TOWMODEREQ 1 "TOW mode indicator request" 0 "No TOW mode indicator request" ; +VAL_ 3221225472 Eco_Navi_Status 1 " ECO_NAVI ON" 0 " ECO_NAVI OFF" ; +VAL_ 3221225472 Eco_mode_Status 1 "ECO mode" 0 "Except ECO mode" ; +VAL_ 3221225472 GS_REFUSE_BZ 1 "Request" 0 "No Request" ; +VAL_ 3221225472 ENGINE_START_INHIBIT 1 "engine start not avairable" 0 "engine start avairable" ; +VAL_ 3221225472 ECO_MODE_REQ 1 "Eco mode request" 0 "No eco mode request" ; +VAL_ 3221225472 SNOW_MODE_REQ 1 "Snow mode request" 0 "No snow mode request" ; +VAL_ 3221225472 OPEN_DOOR 1 "AT_OpenDoorWarning" 0 "No AT_OpenDoorWarning" ; +VAL_ 3221225472 ROBOTIZED_GTP 1 "to be defined" 0 "to be defined" ; +VAL_ 3221225472 RGB_PBP_REQ 1 "Push brake pedal requested" 0 "No push brake request" ; +VAL_ 3221225472 RGB_GP_REFUSE 1 "gear shift refused" 0 "gear shift accepted" ; +VAL_ 3221225472 RESET_INF 1 "exit from reset" 0 "no reset" ; +VAL_ 3221225472 TM_TYPE 1 "MT(ECM)" 0 "AT/CVT/AMT" ; +VAL_ 3221225472 ATLAMP_INDSSIG_CVTLAMPSIG 1 "AT/CVT default warning" 0 "No AT/CVT default warning" ; +VAL_ 3221225472 ATHITEMP 1 "AT/CVT high temp warning" 0 "No AT/CVT high temp warning" ; +VAL_ 3221225472 ODCLAMP_INDSSIG 1 "AT/CVT indicate request" 0 "No AT/CVT indicate request" ; +VAL_ 3221225472 RL_TGS 3 "Not used" 2 "OutFrame TurmON & InSide TurmON" 1 "Outer Frame Turm ON" 0 "No Request" ; +VAL_ 3221225472 RR_TGS 3 "Not used" 2 "OutFrame TurmON & InSide TurmON" 1 "Outer Frame Turm ON" 0 "No Request" ; +VAL_ 3221225472 FL_TGS 3 "Not used" 2 "OutFrame TurmON & InSide TurmON" 1 "Outer Frame Turm ON" 0 "No Request" ; +VAL_ 3221225472 FR_TGS 3 "Not used" 2 "OutFrame TurmON & InSide TurmON" 1 "Outer Frame Turm ON" 0 "No Request" ; +VAL_ 3221225472 QDTZ_RL 1 "Quickly deflating to zero" 0 "Normal" ; +VAL_ 3221225472 QDTZ_RR 1 "Quickly deflating to zero" 0 "Normal" ; +VAL_ 3221225472 QDTZ_FL 1 "Quickly deflating to zero" 0 "Normal" ; +VAL_ 3221225472 QDTZ_FR 1 "Quickly deflating to zero " 0 "Normal " ; +VAL_ 3221225472 TPMS_HAZARD_ON 1 "Hazard lamp ON" 0 "Hazard lamp OFF" ; +VAL_ 3221225472 PRESS_REAR 15 "340kPa 49psi 3.4bar 3.4kg/cm2" 14 "330kPa 48psi 3.3bar 3.3kg/cm2" 13 "320kPa 46psi 3.2bar 3.2kg/cm2" 12 "310kPa 45psi 3.1bar 3.1kg/cm2" 11 "300kPa 44psi 3.0bar 3.0kg/cm2" 10 "290kPa 42psi 2.9bar 2.9kg/cm2" 9 "280kPa 41psi 2.8bar 2.8kg/cm2" 8 "270kPa 39spi 2.7bar 2.7kg/cm2" 7 "260kPa 38psi 2.6bar 2.6kg/cm2" 6 "250kPa 36psi 2.5bar 2.5kg/cm2" 5 "240kPa 35psi 2.4bar 2.4kg/cm2" 4 "230kPa 33psi 2.3bar 2.3kg/cm2" 3 "220kPa 32psi 2.2bar 2.2kg/cm2" 2 "210kPa 30psi 2.1bar 2.1kg/cm2" 1 "200kPa 29psi 2.0bar 2.0kg/cm2" 0 "Not used" ; +VAL_ 3221225472 PRESS_FRONT 15 "340kPa 49psi 3.4bar 3.4kg/cm2" 14 "330kPa 48psi 3.3bar 3.3kg/cm2" 13 "320kPa 46psi 3.2bar 3.2kg/cm2" 12 "310kPa 45psi 3.1bar 3.1kg/cm2" 11 "300kPa 44psi 3.0bar 3.0kg/cm2" 10 "290kPa 42psi 2.9bar 2.9kg/cm2" 9 "280kPa 41psi 2.8bar 2.8kg/cm2" 8 "270kPa 39spi 2.7bar 2.7kg/cm2" 7 "260kPa 38psi 2.6bar 2.6kg/cm2" 6 "250kPa 36psi 2.5bar 2.5kg/cm2" 5 "240kPa 35psi 2.4bar 2.4kg/cm2" 4 "230kPa 33psi 2.3bar 2.3kg/cm2" 3 "220kPa 32psi 2.2bar 2.2kg/cm2" 2 "210kPa 30psi 2.1bar 2.1kg/cm2" 1 "200kPa 29psi 2.0bar 2.0kg/cm2" 0 "Not used" ; +VAL_ 3221225472 W_REQ 1 "TPMS warning lamp is ON" 0 "TPMS warning lamp is OFF" ; +VAL_ 3221225472 TPMS_POSI_SYNC 1 "synchronize" 0 "unsynchronize" ; +VAL_ 3221225472 REG_STATUS 3 "unsucc regiof incorrect press " 2 "unsucc reg of no trans" 1 "successful registration " 0 "normal " ; +VAL_ 3221225472 TPMS_HORN_REQ 1 "Horn Chirp ON" 0 "Horn Chirp OFF" ; +VAL_ 3221225472 TPMS_BZ_REQ 1 "TPMS buzzer is requested" 0 "no buzzer request" ; +VAL_ 3221225472 SYSTEM_FAIL_TPMS 1 "Indicate text on " 0 "Indicate text off" ; +VAL_ 3221225472 HAZARD_REQ_TPMS 1 "Hazard Request ON" 0 "Hazard Request OFF " ; +VAL_ 3221225472 TS_FR 1 "Normal" 0 "Failure or not display" ; +VAL_ 3221225472 TS_FL 1 "Normal" 0 "Failure or not display" ; +VAL_ 3221225472 TS_RR 1 "Normal" 0 "Failure or not display" ; +VAL_ 3221225472 TS_RL 1 "Normal" 0 "Failure or not display" ; +VAL_ 3221225472 FT_FR 1 "Flat Tire" 0 "Normal" ; +VAL_ 3221225472 FT_FL 1 "Flat Tire" 0 "Normal" ; +VAL_ 3221225472 FT_RR 1 "Flat Tire" 0 "Normal" ; +VAL_ 3221225472 FT_RL 1 "Flat Tire" 0 "Normal" ; +VAL_ 3221225472 LTP_FR 1 "Low tire pressure" 0 "Normal" ; +VAL_ 3221225472 LTP_FL 1 "Low tire pressure" 0 "Normal" ; +VAL_ 3221225472 LTP_RR 1 "Low tire pressure" 0 "Normal" ; +VAL_ 3221225472 LTP_RL 1 "Low tire pressure" 0 "Normal" ; +VAL_ 3221225472 TIRE_FAIL_or_W_REQ 1 "Fail" 0 "Normal" ; +VAL_ 3221225472 D_STYLE 3 "Warn with pos, without display" 2 "Press disp with position" 1 "Press disp without position" 0 "Warning Lamp only" ; +VAL_ 3221225472 ENGINE_STOP 1 "Fuel Cut Request" 0 " Remote engine run flag" ; +VAL_ 3221225472 REMOTE_AC_REQ 1 "ON Request / OFF Request" 0 "not Request" ; +VAL_ 3221225472 PORT_OPEN_REQ 1 "Open Request" 0 "not Request" ; +VAL_ 3221225472 CUTOFF_SW 1 "SW is pulled(power cut)" 0 "SW is pushed(power supply)" ; +VAL_ 3221225472 IMMOBILIZER_FAILURE 1 "immobiliser failure" 0 "immobilser OK" ; +VAL_ 3221225472 CRANKING_AUTHORIZATION 1 "cranking authorized" 0 "cranking inhibited" ; +VAL_ 3221225472 CLIMATE_COOLING 1 "climate compressor on" 0 "climate compressor off" ; +VAL_ 3221225472 HARD_TOP_POSITION 3 "invalid" 2 "not equiped" 1 "hardtop open" 0 "hardtop closed" ; +VAL_ 3221225472 KEYLESS_PUSH 1 " Keyless(IGN KNOB) push pres" 0 " Keyless(IGN KNOB) push not pres" ; +VAL_ 3221225472 KEY_KEYLESS 1 "Vehicle with Key" 0 "Keyless vehicle" ; +VAL_ 3221225472 BRAKE_PAD 3 "Not used" 2 "pad to be changed" 1 "short circuit 12 V" 0 "no fault" ; +VAL_ 3221225472 CUSTOMER_IDDLE_REQ 1 "eng idle speed req by custome" 0 "no eng idle speed req by custome" ; +VAL_ 3221225472 CHILDPROOF_LOCK 1 "childproof lock mf warn msg" 0 "No childproof lock mf warn msg" ; +VAL_ 3221225472 DAY_NIGHT_INF 1 "Night time" 0 "Day time" ; +VAL_ 3221225472 AT_POW 1 "powerlatch holding requested" 0 "powerlatch holding not requested" ; +VAL_ 3221225472 VHICLE_RUNNING 1 "vehicle running (speed > 7km/h)" 0 "vehicle stopped" ; +VAL_ 3221225472 CLUTCH_SW_MAX_TRAVEL 3 "invalid" 2 "not equipped" 1 "clutch pressed" 0 "clutch not pressed" ; +VAL_ 3221225472 DELIVERY_INF 1 "delivery mode" 0 "customer mode" ; +VAL_ 3221225472 BLOWER 1 "ON" 0 "OFF" ; +VAL_ 3221225472 HL_WASH_SELECTION 1 "right headlamp washer selected" 0 "left HL washer sel or high press" ; +VAL_ 3221225472 BCM_DONGLE_COM 3 "Not used" 2 "ID write" 1 "ID request" 0 "normal case" ; +VAL_ 3221225472 HL_WASH_REQ 1 " headlamps washer requested" 0 " headlamps washer not requested" ; +VAL_ 3221225472 BCM_WAKE_SLEEP_COM 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "GoToSleep" ; +VAL_ 3221225472 IGN_STATER 3 "ignition request and starter req" 2 "ignition request and starter off" 1 "ignition off and starter request" 0 "ignition off and starter off" ; +VAL_ 3221225472 ALS_ACT 1 " ALS activated" 0 " ALS not activated" ; +VAL_ 3221225472 ALS_FAIL 1 "ALS failure" 0 "no ALS failure" ; +VAL_ 3221225472 AC_COMP_REQ 1 "air conditioning requested" 0 "air conditioning not requested" ; +VAL_ 3221225472 RISE_UP_REQ 1 "Riseup request" 0 "Riseup not request" ; +VAL_ 3221225472 TURN_SW 3 "invalid" 2 "Turn SW Right is ON" 1 "Turn SW Left is ON" 0 "Turn SW Left Right are OFF" ; +VAL_ 3221225472 H_POSITION 1 "LHD" 0 "RHD" ; +VAL_ 3221225472 INHI_N_SW 3 "invalid" 2 "not equipped" 1 "neutral contact reached" 0 "neutral contact not reached" ; +VAL_ 3221225472 S_SECODE_CLEAR 1 "S_SMART_CLEAR" 0 " invalid" ; +VAL_ 3221225472 SMART_SEC_OK 1 "ACK" 0 "invalid" ; +VAL_ 3221225472 CHALENGE_STAND 1 "ChallengeRequest" 0 "invalid" ; +VAL_ 3221225472 RESPONSE_SMART 1 "response to Smart" 0 "invalid" ; +VAL_ 3221225472 CAL_REQ 1 "calculation request" 0 "invalid" ; +VAL_ 3221225472 REG_INF 1 "registration ID" 0 "invalid" ; +VAL_ 3221225472 TPMS_W_L_REQ 1 "TPMS warning lamp is ON" 0 "TPMS warning lamp is OFF" ; +VAL_ 3221225472 RIGHT_PSD_MOVE_REVERSE 3 "Not used" 2 "reverse on RR PSD" 1 "move on RR PSD" 0 "OFF" ; +VAL_ 3221225472 LEFT_PSD_MOVE_REVERSE 3 "Not used" 2 "reverse on RL PSD" 1 "move on RL PSD" 0 "OFF" ; +VAL_ 3221225472 ALARM 1 "alarm on" 0 "alarm off" ; +VAL_ 3221225472 RAP 1 "RAP on" 0 "RAP off" ; +VAL_ 3221225472 ANTI_HIJACK 1 "anti hijack deactivated" 0 "anti hijack activated" ; +VAL_ 3221225472 KEYLESS_DR_DOOR_UNLOCK 1 " unlock actuator drive on" 0 " unlock actuator drive off" ; +VAL_ 3221225472 GLASS_HATCH 1 "Glass Hatch open" 0 "Glass Hatch closed" ; +VAL_ 3221225472 DR_DOOR_ACTR_INF 3 "invalid" 2 "driver's door lock operate" 1 "driver's door unlock operate" 0 "driver's door no operation" ; +VAL_ 3221225472 OTHER_DOOR_ACTR_INF 3 "invalid" 2 "other doors lock operate" 1 "other doors unlock operate" 0 "other doors no operation" ; +VAL_ 3221225472 OPERATION_ACTR 1 "operated actr by SMART" 0 "not operated actr by SMART" ; +VAL_ 3221225472 AC_TYPE 1 "A/C TypeB(clim not con CAN nw)" 0 "A/C TypeA(clim con CAN nw)" ; +VAL_ 3221225472 PTC_RLY 0 "All PTC RLY OFF" ; +VAL_ 3221225472 TRUNK_SW 1 " trunk open" 0 " trunk closed" ; +VAL_ 3221225472 CLUSTER_ILL_REQ 1 "cluster illumination request" 0 "cluster illumination not request" ; +VAL_ 3221225472 ABD_MOVE_REVERSE 3 "open" 2 "reverse" 1 "move" 0 "off" ; +VAL_ 3221225472 BACK_DOOR_LOCK_STA 1 "permit" 0 "forbiddance" ; +VAL_ 3221225472 TPMS_RFWL_REQ 1 "TPMS Run Flat warn lamp is ON" 0 "TPMS Run Flat warn lamp is OFF" ; +VAL_ 3221225472 ANTI_HORN_REQ 1 "anti theft horn request" 0 "anti theft horn not request" ; +VAL_ 3221225472 HORN_REQ 1 "horn charp request" 0 "horn charp not request" ; +VAL_ 3221225472 CORN_L_REQ 3 "invalid" 2 "cornering lamp right request" 1 "cornering lamp left request" 0 "cornering lamp not request" ; +VAL_ 3221225472 KEY_NO 7 "invalid" 6 "invalid" 5 "key less 5" 4 "key less 4" 3 "key less 3" 2 "key less 2" 1 "key less 1" 0 "no key less operation" ; +VAL_ 3221225472 KeyinSW 1 "Key-In SW ON" 0 "Key-In SW OFF" ; +VAL_ 3221225472 VSP_REV_BUZZER 1 "Trigger ON" 0 "Trigger OFF" ; +VAL_ 3221225472 TSOC_MET 1 "Deterioration restraint" 0 "100%" ; +VAL_ 3221225472 OIL_CHANGE_RESET 1 "Oil change counter reset" 0 "No request " ; +VAL_ 3221225472 VSPID 3 "vehspd copy from sens(Ren2)" 2 "vehspd copy from sens(Ren1)" 1 "vehspd copy from Sens(Nissan)" 0 "vehspd copy from ABS/ESP" ; +VAL_ 3221225472 Disp_Unit 1 "MPH" 0 "km/h" ; +VAL_ 3221225472 ZKON1 1 "VDC(ESP) disabled by the driver" 0 " VDC(ESP) available" ; +VAL_ 3221225472 ZOKU1 3 " small short road" 2 "approaching road,high land" 1 "high way" 0 "no kind" ; +VAL_ 3221225472 ISBRK_STB 1 "IS brake hold not permit" 0 "IS brake hold permit" ; +VAL_ 3221225472 WLOCK_STA 1 "Wheels locking detected" 0 "Nowheels lck or ABS/ESP presence" ; +VAL_ 3221225472 HDC_LAMP 3 "not use" 2 "Lighting (Operating)" 1 "Flashing (Before operating)" 0 "Not Lighting(Fail/Notselecting)" ; +VAL_ 3221225472 EBS_LAMP 3 "ON : Brake is failed or lamp chk" 2 "Frashing(slow) : Under" 1 "Frashing(fast) : Finished" 0 "Brake is not failed" ; +VAL_ 3221225472 AUTO_CHECK_LMP 1 "auto-check in progress" 0 "no auto check in progress" ; +VAL_ 3221225472 VSU_PRESENCE 1 "VSU unit" 0 "ESP or ABS unit" ; +VAL_ 3221225472 STPLMSW 1 "STOP LAMP SW ON" 0 "STOP LAMP SW OFF" ; +VAL_ 3221225472 WARNING_REQ 3 "reserved" 2 "warning lamps on request" 1 "warning lamps off request" 0 "reserved" ; +VAL_ 3221225472 FILL_STA 3 "risk of no fill malfunction dete" 2 "complete " 1 "acknowledgement " 0 "waiting(rdy to rec USM_fill frm)" ; +VAL_ 3221225472 VSU_LAMP 3 " Not used" 2 "VSU operational but not prgrmd" 1 "VSU failure" 0 "VSU operational or not equipped" ; +VAL_ 3221225472 VDC_LAMP 7 "ESP in calibration (diag mode)" 6 " ESC operating (ESC OFF sw op)" 5 "ESC malfunction (System failure" 4 "ESC operating" 3 "ESP failure (no calibration)" 2 "ESC OFF switch operated" 1 "ESC Malfunction (ESC OFF)" 0 "ESC Active (Not operating)" ; +VAL_ 3221225472 ABS_LAMP 3 "ABS in calibration" 2 "ABS operational , not programmed" 1 "ABS failure" 0 "ABS opn/vhcl not equip(lampoff)" ; +VAL_ 3221225472 EBD_LAMP 3 "EBV in calibration" 2 "Not used" 1 "EBV failure" 0 "EBV opn/vhcl not equip(lampoff)" ; +VAL_ 3221225472 RESETABS 1 "exit from reset" 0 "no reset" ; +VAL_ 3221225472 KEY_WARNING_BUZZER 1 "KEY warning buzzer on" 0 "invalid" ; +VAL_ 3221225472 WARNING_REQ_PIC 15 "Eng start by remote eng starter" 14 "Hold the Fob to ENG START SW" 13 "Shift P posi & Fob take out warn" 12 "Clutch&PUES for MT( IGN)" 11 "Clutch&PUES for MT(not IGN)" 10 "Lock warning " 9 "3min before power will be OFF" 8 "Fob take out warning " 7 "Key battery " 6 "after IGN or Acc power OFF" 5 "Shift P position " 4 "Steering rotate A " 3 "KEY ID NG " 2 "Brake & push engine start (IGN) " 1 "Brake & push eng start (not IGN)" 0 "Not operate " ; +VAL_ 3221225472 RING_ILLUMI_REQ 1 "meter ring illumination request" 0 "invalid" ; +VAL_ 3221225472 LOCK_UNLOCK_REQ 7 "Trunk Open request" 6 "RL door Unlock request" 5 "RR door Unlock request" 4 "As door Unlock request" 3 "Dr door Unlock request" 2 "All doors Unlock request" 1 "All doors Lock request" 0 "No request" ; +VAL_ 3221225472 AHL_IND_REQ 1 "ON" 0 "OFF" ; +VAL_ 3221225472 ENG_STP_REQ 1 "Norinal eng stop req by driver" 0 "No eng stop req by driver" ; +VAL_ 3221225472 Warning_Request_picture 24 "Reserved" 23 "Reserved" 21 "WELCOME" 20 "KEY BATTERY" 19 "SELECT NEUTRAL" 18 "BRAKE & PUSH ENGINE START" 17 "SELECT PARK 1" 16 "PRESS CLUTCH + START" 15 "STRG rotate" 14 "INSERT THE KEYCARD" 13 "CHECK KEYCARD READER" 12 "Pull out the card key" 11 "ID NG" 10 "CARD NOT DETECTED" 9 "PRESS AND HOLD START2" 8 "STEERING NOT LOCKED" 7 "CHECK BRAKE LIGHTS" 6 "CHECK THE VEHICLE" 5 "CHECK ENGINE IMMOBILIZER" 3 "PRESS AND HOLD START1" 2 "RISK OF STEERING LOCKING" 1 "SELECT PARK 2" 0 "Not operate" ; +VAL_ 3221225472 REMORT_ENGST_STA 1 "IGN-ON by Remote ENG-ST" 0 "Remote ENG-ST not operation" ; +VAL_ 3221225472 REMORT_ENGST_REG 1 "Remote ENG-ST registration" 0 "Remote ENG-ST not registration" ; +VAL_ 3221225472 CLUSTER_IND_LAMP_REQ 7 "Yellow & Red indi lamo blink req" 6 "Red indicator lamp blink request" 5 "Yellow indicator lamo blink req" 4 "Reserved" 3 "Yellow & Red indi lamp on req" 2 "Red indicator lamp on request" 1 "Yellow indicator lamp on Requset" 0 "Indicator off" ; +VAL_ 3221225472 ENG_ST_SW 1 "engine start sw ON" 0 "engine start sw OFF" ; +VAL_ 3221225472 SUPER_LOCK 1 "without super lock" 0 "with super lock" ; +VAL_ 3221225472 EXTERNAL_RELAY_STATE 1 "relay open" 0 "relay close" ; +VAL_ 3221225472 ANSWER_BACK_SPEED 1 "quick blink" 0 "normal blink" ; +VAL_ 3221225472 PERMIT_CRANKING 1 "permit cranking" 0 "prohibit cranking" ; +VAL_ 3221225472 PUSH_SW 1 "push switch on" 0 "push switch off" ; +VAL_ 3221225472 HAZARD_REQ 3 "three times" 2 "twice" 1 "once" 0 "off" ; +VAL_ 3221225472 HORN_CHIRP_REQ 1 "horn chirp" 0 "off" ; +VAL_ 3221225472 ALARM_RESET 1 "alarm reset" 0 "invalid" ; +VAL_ 3221225472 BACK_DOOR_OPEN_SW 1 "accept back door open switch" 0 "ignor back door open swith" ; +VAL_ 3221225472 CHALLENGE_STANDBY 1 "challenge request" 0 "invalid" ; +VAL_ 3221225472 PBD_OPEN_CLOSE 1 "PBD SW on" 0 "invalid" ; +VAL_ 3221225472 CHANGE_ANSWER 1 "mode change request" 0 "invalid" ; +VAL_ 3221225472 PANIC_ALARM_REQ 1 "panic action" 0 "invalid" ; +VAL_ 3221225472 P_WDW_DOWN_REQ 1 "P/WDW down request" 0 "invalid" ; +VAL_ 3221225472 CHALLENGE_BCM 1 "challenge to BCM" 0 "invalid" ; +VAL_ 3221225472 ID_INFO 1 "Not registration" 0 "Registration" ; +VAL_ 3221225472 RESPONSE_TO_BCM 1 "response to BCM" 0 "invalid" ; +VAL_ 3221225472 CALLENGE_FOR_SEC_CLEAR 1 "challenge for S-SEC clear" 0 "invalid" ; +VAL_ 3221225472 SUPER_LOCK__RELEASE_REQ 1 "super lock release request" 0 "invalid" ; +VAL_ 3221225472 ALL_DOOR_UNLOCK_REQ 1 "all doors unlock requested" 0 "invalid" ; +VAL_ 3221225472 IKEY_WAKE_SLEEP_REQ 3 "WakeUp" 2 "reserved" 1 "reserved" 0 "reserved" ; +VAL_ 3221225472 IKEY_REFUSE 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 PBD_MOVE_REVERSE 3 "Not used" 2 "reverse on PBD" 1 "move on PBD" 0 "invalid" ; +VAL_ 3221225472 ST_Cutinfo 1 " Start cut" 0 " Start not cut" ; +VAL_ 3221225472 No_INFOR 7 "invalid or Not used" 6 "invalid or Not used" 5 "No.5 or Not uesd" 4 "No.4 or key less 4" 3 "No.3 or key less 3" 2 "No.2 or key less 2" 1 "No.1 or key less 1" 0 "invalid or Set Last EngOn User o" ; +VAL_ 3221225472 IGNON_REQ 1 " IGN RELAY ON REQUEST" 0 " IGN RELAY OFF REQUEST" ; +VAL_ 3221225472 STARTER_CONT_STA 1 "starter relay on" 0 "starter relay off" ; +VAL_ 3221225472 INTERLOCK_NPSW 1 " InterLock/NP switch on" 0 " InterLock/NP switch off" ; +VAL_ 3221225472 INHIBIT_REQ 1 " INHIBIT RELAY ON REQUEST" 0 " INHIBIT RELAY OFF REQUEST" ; +VAL_ 3221225472 ESCL_RELAY_REQ 1 "ESCL RELAY ON REQUEST" 0 "ESCL RELAY OFF REQUEST" ; +VAL_ 3221225472 IMMOBI_OK_FLAG_or_ESCL_STAUS 1 " immobi OK flag on" 0 " immobi OK flag off" ; +VAL_ 3221225472 IGNOFF_NOTIFICATION 1 "UNDER_IGN_OFF_OPERATION" 0 "NOT_IGN_OFF_OPERATION" ; +VAL_ 3221225472 Auto_Door_Lock 3 "Reserve" 2 "AutoDoorLocking off" 1 "AutoDoorLocking on" 0 "off" ; +VAL_ 3221225472 STOP_Indicator 1 " STOPindicator on request" 0 " STOPindicator off request" ; +VAL_ 3221225472 SERVICE_Indicator 1 "SERVICE indicator on request" 0 "SERVICE indicator off request" ; +VAL_ 3221225472 BRAKE_picture 1 "PRESS BRAKE on" 0 "PRESS BRAKE off" ; +VAL_ 3221225472 WARNING_REQ_IND 3 "KEY indicator off request" 2 "KEY indicator blink request" 1 "KEY indicator on request" 0 "KEY indicator off request" ; +VAL_ 3221225472 WARNING_REQ_BUZZER2 1 "buzzer2 on" 0 "buzzer2 off" ; +VAL_ 3221225472 WARNING_REQ_BUZZER1 1 "buzzer1 on" 0 "buzzer1 off" ; +VAL_ 3221225472 LOCK_UNLOK_REQ 3 "Trank open request" 2 "Unlock request" 1 "Lock request" 0 "No request" ; +VAL_ 3221225472 WAKEUP_REQ 3 "invalid" 2 " invalid" 1 "wake up requested" 0 "no wake up requested" ; +VAL_ 3221225472 S_SLEEP_REQ 3 "invalid" 2 "invalid" 1 "sleep mode requested" 0 "sleep mode not requested" ; +VAL_ 3221225472 KEYFOB_BATT 1 " transbatt conditn warn req" 0 " transbatt cond warn not req" ; +VAL_ 3221225472 CHILD_LOCK 1 "warning request" 0 "warning not request" ; +VAL_ 3221225472 PBS2_flag_truoble 1 "Flag ON whn PBS2 brk prs ordr" 0 "Besides the below" ; +VAL_ 3221225472 booster_yrouble 1 "Active booster solenoid trouble" 0 "Besides the below" ; +VAL_ 3221225472 Release_sen_trouble 1 "Pressure Sensor trouble" 0 "Besides the below" ; +VAL_ 3221225472 EPSTQONT 1 "below prescribed value for TA" 0 "morethanprescribedvalue for TA" ; +VAL_ 3221225472 ISS_INHIBIT_EPS 1 "ISS Inhibit" 0 "ISS Accept" ; +VAL_ 3221225472 EPSTQON 1 "Trq impr less than presc value." 0 "Trq impr more than presc value." ; +VAL_ 3221225472 TOWMODE 1 "ON" 0 "OFF" ; +VAL_ 3221225472 B_Circuit_ST 1 "Open" 0 "Close" ; +VAL_ 3221225472 SportMode_SW 1 "SPORTSW is pushed" 0 "SPORTSW is not pushed" ; +VAL_ 3221225472 TRANS_SW 1 "ON(4WD)" 0 "OFF(2WD)" ; +VAL_ 3221225472 Eco_mode_SW 1 "Eco mode SW is pushed" 0 "Eco mode SW is not pushed" ; +VAL_ 3221225472 SYNCMODE 1 "VDC(ESP) disabled by the driver" 0 " VDC(ESP) available" ; +VAL_ 3221225472 RNGSW1 1 "ON" 0 "OFF" ; +VAL_ 3221225472 ODOFFSW 1 "ON" 0 "OFF" ; +VAL_ 3221225472 BRAKESW 1 "ON" 0 "OFF" ; +VAL_ 3221225472 POWSW 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RENSWN 1 "ON" 0 "OFF" ; +VAL_ 3221225472 RENSWP 1 "ON" 0 "OFF" ; +VAL_ 3221225472 STRDWNSW 1 "ON" 0 "OFF" ; +VAL_ 3221225472 STRUPSW 1 "ON" 0 "OFF" ; +VAL_ 3221225472 DOWNSW 1 "ON" 0 "OFF" ; +VAL_ 3221225472 UPSW 1 "ON" 0 "OFF" ; +VAL_ 3221225472 NOTMRNG 1 "NOT MANUAL MODE" 0 "MANUAL MODE" ; +VAL_ 3221225472 MRNG 1 "MANUAL MODE" 0 "NOT MANUAL MODE" ; +VAL_ 3221225472 ZKREQ 1 "requested" 0 " not requested" ; +VAL_ 3221225472 RD_SW 1 "VDC(ESP) disabled by the driver" 0 " VDC(ESP) available" ; +VAL_ 3221225472 RD_Detect_SW 1 "VDC(ESP) disabled by the driver" 0 " VDC(ESP) available" ; +VAL_ 3221225472 L_4WD_SW 1 "VDC(ESP) disabled by the driver" 0 " VDC(ESP) available" ; +VAL_ 3221225472 S_REMINDER 1 "VDC(ESP) disabled by the driver" 0 " VDC(ESP) available" ; +VAL_ 3221225472 H_LAMP_SW 1 "LOAD SW ON(Low)" 0 "LOAD SW OFF(High)" ; +VAL_ 3221225472 MIL_CHECK 1 "VDC(ESP) disabled by the driver" 0 " VDC(ESP) available" ; +VAL_ 3221225472 R_DEF_SW 1 "LOAD SW ON(HIGH)" 0 "LOAD SW OFF(Low)" ; +VAL_ 3221225472 H_FAN_SW 1 "LOAD SW ON(Low)" 0 "LOAD SW OFF(High)" ; +VAL_ 3221225472 TLED_STA 1 "NG(High)" 0 " OK(Square wave)" ; +VAL_ 3221225472 HTA_SW 1 "High Temp of the open air(Low)" 0 "LowTemp of the open air(High)" ; +VAL_ 3221225472 G_RDY 3 "turn off" 2 "between ST-ON &RDY1Hz blinking" 1 "READY state, turn on" 0 "IGN-OFF or IGN-ON " ; +VAL_ 3221225472 G_STA 3 " turn off" 2 "btw ST-ON and READY,1Hz blinking" 1 "READY state, turn on" 0 "IGN-OFF/IGN-ON/ " ; +VAL_ 3221225472 G_CMH2 3 "Normal state, turn off" 2 "homologation mode , 1Hz blinking" 1 "abnomal state, turn on" 0 "Normal state, turn off" ; +VAL_ 3221225472 G_CHAW 1 "abnomal state, turn on" 0 "Normal state, turn off" ; +VAL_ 3221225472 G_CAU 3 "Normal state, turn off" 2 "abnomal state, turn on" 1 "maintenance mode, 1Hz blinking" 0 "Normal state, turn off" ; +VAL_ 3221225472 G_CHMH 3 "Normal state, turn off" 2 "maintenance mode, 1Hz blinking" 1 "gabnomal state, turn on" 0 "Normal state, turn off" ; +VAL_ 3221225472 G_MBLO 3 "Normal state, turn off" 2 "abnomal state, turn on" 1 "homologation mode, 1Hz blinking" 0 "Normal state, turn off" ; +VAL_ 3221225472 G_NDBW 1 " ON" 0 " OFF" ; +VAL_ 3221225472 CCSD 7 "not equipped with CC and SL" 6 "CC requested and in failure" 5 "CC ON and inactive) or suspended" 4 "CC active" 3 "SL requested and in failure" 2 "SL on and inactive) or suspended" 1 "SL active" 0 "Cruise Control,Speed Limit OFF" ; +VAL_ 3221225472 EOFF_LAMP 1 " ON" 0 " OFF" ; +VAL_ 3221225472 HICASFAIL 1 "abnormal" 0 "Normal" ; +VAL_ 3221225472 release_sw 1 "Driver brakes fault search" 0 "Besides the below" ; +VAL_ 3221225472 flag_pressure_flag 1 "During the Pressure control" 0 "Besides the above" ; +VAL_ 3221225472 ECU_initialize 1 "Initialization after IGNON " 0 "Besides the below" ; +VAL_ 3221225472 Brake_demande_prichibition 1 "Driver brakes fault search" 0 "Besides the below" ; +VAL_ 3221225472 Booster_error 1 "Pressure control trouble" 0 "Besides the above" ; +VAL_ 3221225472 ACC_AND_INCHIG_RANGE 1 "ACC and INCHING operating range" 0 "ACC&INCHING not operating range" ; +VAL_ 3221225472 NICC_IND 1 "Indicator Turn ON" 0 "Indicator Turn OFF" ; +VAL_ 3221225472 NICC_SET 1 "Navi-ICC ON" 0 "Navi-ICC OFF" ; +VAL_ 3221225472 MB_TGT_FLS 1 "Request" 0 "No Request" ; +VAL_ 3221225472 MB_FLS 1 "Request" 0 "No Request" ; +VAL_ 3221225472 MB_TGT 1 " ON" 0 " OFF" ; +VAL_ 3221225472 MB_IND 1 " ON" 0 " OFF" ; +VAL_ 3221225472 CONTROL_BYTE 1 "System NG" 0 "Normal" ; +VAL_ 3221225472 GrMax_Rq_SBC 7 "Requested gear, upper limit = 7" 6 "Requested gear, upper limit = 6" 5 "Requested gear, upper limit = 5" 4 "Requested gear, upper limit = 4" 3 "Requested gear, upper limit = 3" 2 "Requested gear, upper limit = 2" 1 "Requested gear, upper limit = 1" 0 "Passive value" ; +VAL_ 3221225472 GrMin_Rq_SBC 7 "Requested gear, lower limit = 7" 6 "Requested gear, lower limit = 6" 5 "Requested gear, lower limit = 5" 4 "Requested gear, lower limit = 4" 3 "Requested gear, lower limit = 3" 2 "Requested gear, lower limit = 2" 1 "Requested gear, lower limit = 1" 0 "Passive value" ; +VAL_ 3221225472 PFCW_ACT 1 "activate" 0 "not activate" ; +VAL_ 3221225472 INHECOPF 1 "ECO Pedal ACT Impossible" 0 "ECO Pedal ACT Possible" ; +VAL_ 3221225472 HI_GEAR_INH_ADAS 3 "Highest gear - 2 inhibit request" 2 "Highest gear - 1 inhibit request" 1 "Highest gear inhibit request" 0 "Not inhibit request" ; +VAL_ 3221225472 REQ_APO_MB 1 "request" 0 "no request" ; +VAL_ 3221225472 MAIN_MB 1 "MB system ON" 0 "MB system OFF" ; +VAL_ 3221225472 TSCHABGE 1 "Request" 0 "No Request" ; +VAL_ 3221225472 PBS2_ACT_MAINBRK 1 "PBS2 MAIN BRAKE ACTIVITY" 0 "PBS2 MAIN BRAKE INACTIVITY" ; +VAL_ 3221225472 ETQDNR_ETS 1 "eng trq reduction req" 0 "eng trq reduction not req" ; +VAL_ 3221225472 GPHOJI_ETS 1 "Gear pos maint demand " 0 "Gear pos maint demand anonymous" ; +VAL_ 3221225472 FTCSON_ETS 3 "Not used" 2 "Dur control (in ~warmth machine)" 1 "Dur control (in warmth machine)" 0 "During TCS fault control" ; +VAL_ 3221225472 M4VDCCHK 1 "with VDC" 0 "without VDC" ; +VAL_ 3221225472 M4STATE1 1 "4WD State1 on" 0 "4WD State1 off" ; +VAL_ 3221225472 M4STATE2 1 "4WD State2 on" 0 "4WD State2 off" ; +VAL_ 3221225472 M4RECVF 1 "recover requested" 0 "recover not requested" ; +VAL_ 3221225472 M4TRANS 1 "4WD mode is active" 0 "4WD mode is inactive" ; +VAL_ 3221225472 M4LMPRQX 1 "vehicle speed limitation not req" 0 "vehicle speed limitation req" ; +VAL_ 3221225472 M4LMPRQ 1 "vehicle speed limitation req" 0 "vehicle speed limitation not req" ; +VAL_ 3221225472 M4TCSACT 1 "TCS in regulation" 0 "no TCS in regulation" ; +VAL_ 3221225472 M4NELIMTX 1 "engine speed limit not requested" 0 "engine speed limit requested" ; +VAL_ 3221225472 M4NELIMT 1 "engine speed limit requested" 0 "engine speed limit not requested" ; +VAL_ 3221225472 M4SUBSTOP 1 "elec loadsconsumers removal req" 0 "elec loadsconsumers removal~req" ; +VAL_ 3221225472 M4TCSFAIL 1 "TCS failure" 0 "no TCS failure" ; +VAL_ 3221225472 M4WARN 1 "M4WD failure" 0 "no M4WD failure" ; +VAL_ 3221225472 M4ETQDNR 1 "engine torque down requested" 0 "engine torque down not requested" ; +VAL_ 3221225472 M4TCSOFF 1 "TCS off (disabled by the driver)" 0 "TCS on (available)" ; +VAL_ 3221225472 M4GPHOJI 1 "gear shift forbidden" 0 "gear shift authorized" ; +VAL_ 3221225472 M4FTCSONX 3 "Not Used" 2 "TCS activated (whn eng not warm)" 1 "TCS activated (whn eng warm)" 0 "TCS deactivated" ; +VAL_ 3221225472 ETSWL 1 "ETS warning lamp on" 0 "ETS warning lamp off" ; +VAL_ 3221225472 SLIPLAMP 1 "ETS warning lamp on" 0 "ETS warning lamp off" ; +VAL_ 3221225472 ETS_MODE 3 "4Lo mode(TV4WD=SNOW mode)" 2 "fixed 2WD mode" 1 "fixed 4WD mode" 0 "automatic selection mode" ; +VAL_ 3221225472 ETS_MODE_LAMP 7 "in case of error" 6 "not used" 5 "While shifting H-L 2" 4 "While shifting H-L 1" 3 "4Lo (SNOW)" 2 "2WD" 1 "LOCK" 0 "AUTO" ; +VAL_ 3221225472 ABSFAILR 1 "system cut off requestl" 0 " normal" ; +VAL_ 3221225472 ETSFAIL 1 "malfunction (ETS can not work)" 0 "no malfunction" ; +VAL_ 3221225472 ETSLOCK 1 "4WD lock fail" 0 " E-TS normal" ; +VAL_ 3221225472 ABSFJDG 1 "found ABS malfunction" 0 "not found ABS malfunction" ; +VAL_ 3221225472 VDCFJDG 1 "found ESP malfunction" 0 " not found ESP malfunction" ; +VAL_ 3221225472 TCSFJDG 1 "found TCS malfunction" 0 "not found TCS malfunction" ; +VAL_ 3221225472 STCENTER 1 " center" 0 "else" ; +VAL_ 3221225472 RECVF 1 "demand causes torque rtrn" 0 "not demand causes torque rtrn" ; +VAL_ 3221225472 TCSFAIL 1 "TCS(ASR) malfunction" 0 "no TCS(ASR) malfunction" ; +VAL_ 3221225472 ETQUPR 1 " Increase demand" 0 " Increase demand being anonymous" ; +VAL_ 3221225472 ETQDNR 1 "Decrease demand" 0 "Decrease demand being anonymous" ; +VAL_ 3221225472 FTCSON 3 "Not used" 2 "request to use TCS map in cold" 1 "request to use TCS map in warm" 0 "no request" ; +VAL_ 3221225472 PBS_ENABLE 1 "Normal" 0 "Deactivate PBS_Request" ; +VAL_ 3221225472 PBS_ACTIVE 1 "Active" 0 "NotActive" ; +VAL_ 3221225472 PresureFlag 1 "pressure control" 0 "pressure not control" ; +VAL_ 3221225472 BrakesLamp 1 "Brakes lamp lghting indi" 0 "Brakes lamp non-lght indi" ; +VAL_ 3221225472 DriverBrake 1 "recog DR brakes ECD side" 0 " dont recog DR brakes ECD side" ; +VAL_ 3221225472 ABS_Operation 1 "ABS operation" 0 "ABS not operation" ; +VAL_ 3221225472 CAN_TIME_OUT 1 "CAN message time-out" 0 "Besides CAN message time-out " ; +VAL_ 3221225472 FunctionEnable 1 "ECD Enable" 0 "ECD not Enable" ; +VAL_ 3221225472 FunctionStatus 1 "ECD operation (pressure ON)" 0 "ECD not operation" ; +VAL_ 3221225472 FunctionAlive 1 "normal" 0 "Abnormality (Fn standstill)" ; +VAL_ 3221225472 ETSFAILR 1 " system cut off requestl" 0 "Normal" ; +VAL_ 3221225472 FLG_AMR 1 "Engine control operating" 0 "Engine control not operating" ; +VAL_ 3221225472 FLG_BMR 1 " Brake control operating" 0 "Brake control not operating" ; +VAL_ 3221225472 PBW_WARNING 1 "Request(ON)" 0 "No Request(OFF)" ; +VAL_ 3221225472 ACFRDEFSW 1 "A/C FR DEF SW ON" 0 "A/C FR DEF SW OFF" ; +VAL_ 3221225472 FUEL_WARNING 1 "fuel level low" 0 "fuel level OK" ; +VAL_ 3221225472 ENG_COOLANT_WARNING 3 "Not Used" 2 "engine coolant temp High" 1 "engine coolant temp low" 0 "engine coolant temp OK" ; +VAL_ 3221225472 CHARGE_WARNING 1 "battery charge system Failure" 0 "battery charge system OK" ; +VAL_ 3221225472 AIRBAG_WARNING 1 " airbag system failure" 0 "airbag system OK" ; +VAL_ 3221225472 BRAKE_FLUID_WARNING 1 " brake fluid level low" 0 " brake fluid level OK" ; +VAL_ 3221225472 DONGLE_COM 3 "Blank" 2 "Not used" 1 "ID transmit" 0 "normal case" ; +VAL_ 3221225472 DOOR_SW_STA 1 "door SW status is valid" 0 "door SW status is invalid" ; +VAL_ 3221225472 BAC_SW 1 " sheet belt buckle switch off" 0 " sheet belt buckle switch on" ; +VAL_ 3221225472 DC_EXISTANCE 1 "Drive comp exist in cluster" 0 "Drive comp not exist in cluster" ; +VAL_ 3221225472 NOTMRANG 1 " ON" 0 " OFF" ; +VAL_ 3221225472 CVTFAIL 1 "Fail" 0 "Not fail" ; +VAL_ 3221225472 ACCDIS 1 "inhibit" 0 "not inhibit" ; +VAL_ 3221225472 ACCFAIL 1 "ACC fail" 0 "ACC not fail" ; +VAL_ 3221225472 INDDSRNG 1 "Ds range" 0 "Except for Ds range" ; +VAL_ 3221225472 INDDRNG 1 "D range" 0 "Except for D range" ; +VAL_ 3221225472 INDNRNG 1 "N range" 0 "Except for N range" ; +VAL_ 3221225472 INDRRNG 1 "R range" 0 "Except for R range" ; +VAL_ 3221225472 KTFTMP 3 " Not used" 2 " Not used" 1 "Not used" 0 "temp. low" ; +VAL_ 3221225472 TSENFAIL 1 " fail" 0 "Not fail" ; +VAL_ 3221225472 BTQCUT 1 " torque down L request" 0 "torque down L not request" ; +VAL_ 3221225472 ATQCUT 1 " torque down S request" 0 "torque down S not request" ; +VAL_ 3221225472 CVTLOAD 3 "Level 4" 2 "Level 3" 1 "Level 2" 0 "Level 1" ; +VAL_ 3221225472 ATCLD 1 "Low Temperature" 0 "Except for Low Temperature" ; +VAL_ 3221225472 ATFAIL 1 " fail" 0 "Not fail" ; +VAL_ 3221225472 IDLEUP 1 "Request" 0 "Request nothing " ; +VAL_ 3221225472 PTDOFF 1 " PTD inhibit" 0 " PTD not inhibit" ; +VAL_ 3221225472 OILPHG 1 " idle up request" 0 " idle up not request" ; +VAL_ 3221225472 ONLUFLG 1 "During Lockup " 0 " Except for Lockup " ; +VAL_ 3221225472 DOWNVSP 1 "unexpected deccelerate judgment" 0 "not unexpected deccelerate" ; +VAL_ 3221225472 CVTLMPSIG 1 "warning lamp on" 0 "warning lamp off" ; +VAL_ 3221225472 RNGSIG 3 "N range" 2 "Ds range" 1 "-" 0 "D range" ; +VAL_ 3221225472 SMODESIG 1 "in SHARP mode" 0 " not in SHARP mode" ; +VAL_ 3221225472 MMODESIG 1 "MANUAL mode" 0 "not in MANUAL mode" ; +VAL_ 3221225472 MMODEGP 1 "MANUAL mode" 0 "not in MANUAL mode" ; +VAL_ 3221225472 INDLRNG 1 "L range" 0 "Except in L range" ; +VAL_ 3221225472 INDSRNG 1 "S range" 0 " Except in S range" ; +VAL_ 3221225472 INDSSIG 1 "in SPORT mode" 0 "not in SPORT mode(" ; +VAL_ 3221225472 INDMSIG 1 "MANUAL mode" 0 "not in MANUAL mode" ; +VAL_ 3221225472 INDMGP 3 "4th" 2 "3rd" 1 "2nd" 0 "1st" ; +VAL_ 3221225472 ACCLIML 1 "During Limit" 0 "Except for Limit " ; +VAL_ 3221225472 ACCLIMH 1 "During Limit" 0 "Except for Limit " ; +VAL_ 3221225472 CVTFAILVDC 1 " fail" 0 "Not fail" ; +VAL_ 3221225472 NIDLESTB 1 "N_Idle Standby" 0 "Not N_Idle Standby" ; +VAL_ 3221225472 PLMINTLM_or_NIDLELRN 1 "N_Idle Learning" 0 "Not N_Idle Learning" ; +VAL_ 3221225472 ATCOLD 1 "ATF temperture is low" 0 "ATF temperture is not low" ; +VAL_ 3221225472 OILPNG 1 " idle up request" 0 " idle up not request" ; +VAL_ 3221225472 MUPSFTTD 1 " torque down request" 0 " torque down not request" ; +VAL_ 3221225472 CURGPV 7 "8th" 6 "7th" 5 "6th" 4 "5th" 3 "4th" 2 "3rd" 1 "2nd" 0 "1st" ; +VAL_ 3221225472 FSCKATIH 1 "Control prohibition" 0 "Control permission" ; +VAL_ 3221225472 D4MODE 1 "in D4(SPORT) mode" 0 "not in D4(SPORT) mode" ; +VAL_ 3221225472 SFTVCTR 3 "Shiftting 4-5" 2 "Shiftting 3-4" 1 "Shiftting 2-3" 0 "Shiftting 1-2" ; +VAL_ 3221225472 SMLUFLG 1 "During smooth Lockup" 0 "Except for smooth Lockup " ; +VAL_ 3221225472 DWNSFTTD 1 "Request" 0 "Request nothing " ; +VAL_ 3221225472 PRIRTD 1 "Request" 0 "Request nothing " ; +VAL_ 3221225472 UPSFTTDL 1 "Request" 0 "Request nothing " ; +VAL_ 3221225472 UPSFTTDS 1 "Request" 0 "Request nothing " ; +VAL_ 3221225472 IND1RNG 1 "1 range" 0 "Except for 1 range" ; +VAL_ 3221225472 IND2RNG 1 "2range" 0 "Except for 2range" ; +VAL_ 3221225472 IND3RNG 1 "3 range" 0 "Except for 3range" ; +VAL_ 3221225472 IND4RNG 1 "4 range" 0 "Except for 4 range" ; +VAL_ 3221225472 ATLAMP 1 "Warning lamp is ON" 0 "Warning lamp is OFF " ; +VAL_ 3221225472 POWLAMP 1 " POWER lamp is OFF" 0 " POWER lamp is OFF" ; +VAL_ 3221225472 INDGP 3 "4th" 2 "3rd" 1 "2nd" 0 "1st" ; +VAL_ 3221225472 INDMRNG 1 "Manual range mode" 0 "Except for Manual range mode " ; +VAL_ 3221225472 ODCLAMP 1 "OD cancellation lamp is ON" 0 " OD cancellation lamp is OFF " ; +VAL_ 3221225472 GRRTOHLD 1 "It is gear ratio hold " 0 "Gear ratio chg permi " ; +VAL_ 3221225472 RNG_NG 1 " Range is abnormal " 0 " Range is normal " ; +VAL_ 3221225472 MMODE 1 "MANUAL mode" 0 "not MANUAL mode" ; +VAL_ 3221225472 DRIVETD 15 "Not used" 14 "Not used" 13 "stall,Trq down req of 5 gear" 12 "stall,Trq dwn req of 4 gear" 11 "stall,Trq dwn req of 3 gear" 10 "stall,Trq dwn req of 2 gear" 9 "stall,Trq dwn req of 1 gear" 8 "Not used" 7 "Not used" 6 "static,Trq dwn req of reverse" 5 "static,Trq dwn req of 5 gear" 4 "static,Trq dwn req of 4 gear" 3 "static,Trq dwn req of 3 gear" 2 "static,Trq dwn req of 2 gear" 1 "static,Trq dwn req of 1st gear" 0 "request nothing" ; +VAL_ 3221225472 ONSHIFT 1 " during shiftting" 0 "Except for shiftting " ; +VAL_ 3221225472 CURGP 3 "4th" 2 "3rd" 1 "2nd" 0 "1st" ; +VAL_ 3221225472 MSR_DISABLED 1 "MSR disabled" 0 "MSR available" ; +VAL_ 3221225472 TCSBRACT 1 "TCS(ASR) Brake regulation" 0 "no TCS(ASR) Brake regulation" ; +VAL_ 3221225472 FCW_SYSTEM_ON 1 "Warning SW is push (FCW OFF)" 0 "Warning SW is not push (FCW OFF)" ; +VAL_ 3221225472 MSRACT 1 "MSR regulation" 0 "no MSR regulation" ; +VAL_ 3221225472 EARLY_GSUP 1 " shift up request" 0 " no shift up request" ; +VAL_ 3221225472 COPinREG 1 "COP regulation" 0 "no COP regulation" ; +VAL_ 3221225472 TRQ_CONT_TYPE 3 " Reserved" 2 " Reserved" 1 " Reserved" 0 " no torque request" ; +VAL_ 3221225472 FFDTLIN 1 "LU inhibited" 0 "LU not inhibited" ; +VAL_ 3221225472 PTDON 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ADVDC5orSPDCTINH 1 "retard control on" 0 " retard control off" ; +VAL_ 3221225472 ATAPOSELorATTRQAC 1 "SELECT" 0 "NOTSELECT" ; +VAL_ 3221225472 FDTFCSEL 1 "fuel cut" 0 "retard" ; +VAL_ 3221225472 ATTRQNG2 1 "fail" 0 "normal" ; +VAL_ 3221225472 ASCDODOFF 1 " ON" 0 " OFF" ; +VAL_ 3221225472 TIDLE_SW2 1 "IDLE SW OFF" 0 "IDLE SW ON" ; +VAL_ 3221225472 ATAPSNG 1 "fail" 0 "normal" ; +VAL_ 3221225472 ATFULLSW 1 " ON" 0 " OFF" ; +VAL_ 3221225472 DADV_RS 1 "with DADV ign tmng retard cont" 0 "w/o DADV ign tmng retard cont" ; +VAL_ 3221225472 FLNST 1 "transit" 0 "normal" ; +VAL_ 3221225472 FLEAN 1 "lean" 0 "stoiki" ; +VAL_ 3221225472 FD3LU 1 "Request" 0 "No Request" ; +VAL_ 3221225472 FODINH 3 "Highest gear - 2 inhibit request" 2 "Highest gear - 1 inhibit request" 1 "Highest gear inhibit request" 0 "Not inhibit request" ; +VAL_ 3221225472 FDTLIN 1 "LU inhibited" 0 "LU not inhibited" ; +VAL_ 3221225472 FDTTD 1 "TorqueDown not inhibited" 0 "TorqueDown inhibited" ; +VAL_ 3221225472 ETCFAIL 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "torque request can't be achieved" 2 "tra sta pre torq req realization" 1 "exact torq req can't be achieved" 0 "normal" ; +VAL_ 3221225472 FLAG_FC 1 " fuel cut go" 0 " fuel cut no go" ; +VAL_ 3221225472 TIDLE_SW 1 "Foot Up" 0 "Not Foot Up" ; +VAL_ 3221225472 AIDLE_SW 1 "IDLE SW on" 0 "IDLE SW off" ; +VAL_ 3221225472 TE_LM_ON 1 "limited" 0 "not limited" ; +VAL_ 3221225472 ECMMB_ACTIVATE 1 "MB opeartional" 0 "MB not opeartional" ; +VAL_ 3221225472 LDP_ON_SW 1 "LDP switch is on" 0 "LDP switch is off" ; +VAL_ 3221225472 NEUT_SW 1 "in Neutral position" 0 "not in Neutral position" ; +VAL_ 3221225472 BNOSW 1 "Brake ON" 0 "Brake OFF" ; +VAL_ 3221225472 BNCSW 1 "Brake OFF" 0 "Brake ON" ; +VAL_ 3221225472 ACCCANFAIL 1 "fail" 0 "not fail" ; +VAL_ 3221225472 ASCDSW8 1 "MAIN switch is oN" 0 "MAIN switch is off" ; +VAL_ 3221225472 ASCDSW7 1 "CAN switch is ON" 0 "CAN switch is OFF" ; +VAL_ 3221225472 ASCDSW6 1 "DIST switch is ON" 0 "DIST switch is OFF" ; +VAL_ 3221225472 ASCDSW5 1 "SET switch is ON" 0 "SET switch is OFF" ; +VAL_ 3221225472 ASCDSW4 1 "RES switch is ON" 0 "RES switch is OFF" ; +VAL_ 3221225472 ASCDSW3 1 "all switch are off" 0 "except" ; +VAL_ 3221225472 ASCDSW2 1 "terminal for switch is open" 0 "terminal for switch is not open" ; +VAL_ 3221225472 ASCDSW1 1 "switch input value is abnormal" 0 "switch input value is normal" ; +VAL_ 3221225472 MAIN_SWE 1 " main switch ON" 0 " main switch OFF" ; +VAL_ 3221225472 ONEACC 1 "temporary acceleration" 0 "not temporary acceleration" ; +VAL_ 3221225472 ECMACCON 1 "During the control" 0 "During not control" ; +VAL_ 3221225472 ASCDFAIL 1 "NG" 0 "OK" ; +VAL_ 3221225472 ACCMDFAIL 1 "target value NG(ACC inhibited)" 0 "target value OK" ; +VAL_ 3221225472 ACCINH_S 1 "ACC not inhibited" 0 "ACC inhibited" ; +VAL_ 3221225472 ACCINH 1 "ACC inhibited" 0 "ACC not inhibited" ; +VAL_ 3221225472 MODELMT 1 "limitation Request" 0 " Not limitation Request" ; +VAL_ 3221225472 BRKSWTM 1 "Brake SW ON" 0 "Brake SW OFF" ; +VAL_ 3221225472 ACCVDEC_or_NIDLE_INSTRUCTION 1 " ON" 0 " OFF" ; +VAL_ 3221225472 ACCTGSEL 1 " ON" 0 " OFF" ; +VAL_ 3221225472 LU_REQ 3 "open lock-up(fast)" 2 "open lock-up(slow)" 1 "close lock-up" 0 " no request" ; +VAL_ 3221225472 SMAPREQ 1 "Request" 0 "No Request" ; +VAL_ 3221225472 RTOHOLD 1 "CVTratiohodctrlofECMis work" 0 "CVTratiohodctrlofECMisnot work" ; +VAL_ 3221225472 ATIDLSW2 1 "OFF" 0 "ON" ; +VAL_ 3221225472 MANUAUP 1 "Automatic up shift ON" 0 "Automatic up shift OFF" ; +VAL_ 3221225472 MANUPOS 1 "mqanual shift =4 gear" 0 "mqanual shift =6 gear" ; +VAL_ 3221225472 MANUMOD 1 "CVT Gear Mode" 0 "AT Gear Mode" ; +VAL_ 3221225472 ACCMDFAL 1 "target value NG(ACC inhibited)" 0 "target value OK" ; +VAL_ 3221225472 LED2 1 " ON" 0 " OFF" ; +VAL_ 3221225472 OILPRE_STA 1 "OIL Pressure Warning" 0 "No Warning" ; +VAL_ 3221225472 AC_PDCUT 1 "normal" 0 " cut" ; +VAL_ 3221225472 CRU_LAMP 1 " ON" 0 " OFF" ; +VAL_ 3221225472 SET_LAMP 1 " ON" 0 " OFF" ; +VAL_ 3221225472 FHLCVT 1 " ON" 0 " OFF" ; +VAL_ 3221225472 FPTTFS 1 "fail" 0 "not fail" ; +VAL_ 3221225472 ATTRQNG 1 "fail" 0 "not fail" ; +VAL_ 3221225472 PTDFAIL 1 "PTD fail" 0 "PTD not fail" ; +VAL_ 3221225472 RQ_ENBR 1 "correct not requested" 0 "correct requested" ; +VAL_ 3221225472 ATIDLESW 1 " ON" 0 " OFF" ; +VAL_ 3221225472 FLOESTJ 1 " ON" 0 " OFF" ; +VAL_ 3221225472 SNOWSW 1 " ON" 0 " OFF" ; +VAL_ 3221225472 SNOWMODE 1 "Snow mode control" 0 "Snow mode not control" ; +VAL_ 3221225472 TCSOP 1 "select TCS request" 0 "not select TCS request" ; +VAL_ 3221225472 ECMOK 1 "ECM control effective" 0 "ECM control not effective" ; +VAL_ 3221225472 ETCOK 1 "ETC control effective" 0 "ETC control not effective" ; +VAL_ 3221225472 FCOK 1 "fuel cut control effective" 0 "fuel cut control not effective" ; +VAL_ 3221225472 CANOK 1 "CAN communication effective" 0 "CAN communication not effective" ; +VAL_ 3221225472 ETSCANOK 1 "ETS control effective" 0 "ETS control not effective" ; +VAL_ 3221225472 TRQDNINH 1 "Brake_Stab Cntr consistent" 0 "Brake_Stab Cntr not consistent" ; +VAL_ 3221225472 HOOD_SW2 1 "Hood_SW_2 ON" 0 "Hood_SW_2 OFF" ; +VAL_ 3221225472 FUEL_FILTER 1 "water detected in diesel" 0 "no water detected in diesel" ; +VAL_ 3221225472 BRK_OIL_SW 1 "Brake Oil Sw ON or Brk Lmp ON" 0 "Brake Oil Sw is OFF or No Req" ; +VAL_ 3221225472 ESCL_RERAY 1 "ESCL relay on" 0 "ESCL relay off" ; +VAL_ 3221225472 COLUMU_LOCK_STA 3 "lock status NG" 2 "ESCL unlock" 1 "ESCL lock" 0 "lock status NG" ; +VAL_ 3221225472 DETENT_SW 1 "detent sw off (P-range)" 0 "detent sw on (except P-range)" ; +VAL_ 3221225472 STARTER_INHIBIT_RELAY 3 "ST relay on " 2 "Invalid" 1 "ST relay off & INHI relay on" 0 "ST relay off & INHI relay off" ; +VAL_ 3221225472 WAKEUP 3 "invalid" 2 "invalid" 1 "USM awaked" 0 "USM ready to sleep" ; +VAL_ 3221225472 HOOD_SW 1 " hood SW on" 0 " hood SW off" ; +VAL_ 3221225472 CORN_L 3 "invalid" 2 "cornering lamp right on" 1 "cornering lamp left on" 0 "cornering lamp off" ; +VAL_ 3221225472 ANTI_T_HORN 1 "anti theft horn on" 0 "anti theft horn off" ; +VAL_ 3221225472 IGN_CONT_STA 1 " ign control on" 0 " ign control off" ; +VAL_ 3221225472 ST_position 1 "ST position" 0 "OFF / ACC / IGN position" ; +VAL_ 3221225472 StarterInhibitorCutStatus 3 "Starter & Inhibit Cut " 2 "Starter cut & Inhibit not Cut " 1 "Starter not cut & Inhibit Cut " 0 "Starter & Inhibit not Cut " ; +VAL_ 3221225472 ALT_NO 15 "special type" 5 "alternator 5" 4 "alternator 4" 3 "alternator 3" 2 "alternator 2" 1 "alternator 1" 0 "invalid" ; +VAL_ 3221225472 MOTOR_FAN 3 "high speed motor fan active" 2 "mid speed motor fan active" 1 "low speed motor fan active" 0 "motor fan stopped" ; +VAL_ 3221225472 STARTER 3 "cranking relay switched on" 2 "long relaxation active" 1 "short relaxation active" 0 "cranking relay switched off" ; +VAL_ 3221225472 R_DEF_REQ 1 "rear defrost request" 0 "no rear defrost request" ; +VAL_ 3221225472 AC_FD_TYPE 1 "Nissan" 0 "Renault" ; +VAL_ 3221225472 PWM_MFAN 1 "pwm m/fan relay requested" 0 "no pwm m/fan relay requested" ; +VAL_ 3221225472 CRNOKAT 3 "information not available" 2 "Manual gear box" 1 "cranking allowed" 0 "cranking not allowed" ; +VAL_ 3221225472 CRANOKECM 3 "cranking not allowed/ECM failure" 2 "cranking stopped required" 1 "cranking allowed" 0 "cranking not allowed" ; +VAL_ 3221225472 COMPDEST_REQ 1 "compressor destroke requested" 0 "no compressor destroke requested" ; +VAL_ 3221225472 INHI_CUTOFF 1 "cut request" 0 "no cut request(Initial Value)" ; +VAL_ 3221225472 MOTOR_FAN_REQ 3 "high speed engine fan request" 2 "mid speed engine fan request" 1 "low speed engine fan request" 0 "no engine fan requested" ; +VAL_ 3221225472 CANMASKorR_DEF_REQ 1 "rear defrost request" 0 "no rear defrost request" ; +VAL_ 3221225472 POW_CUT 3 "Invalid" 2 "elec consum inhi req" 1 "elec consum freezing req" 0 "no request" ; +VAL_ 3221225472 RELEASE 3 "invalid" 2 "Not used" 1 "EHS release" 0 "EHS hold" ; +VAL_ 3221225472 BUZZ_REQ_6MTA 3 "invaild" 2 "Door open for setting off etc." 1 "Clutch over-heat etc." 0 "no buzzer request" ; +VAL_ 3221225472 G_POSITION 254 "Error" 251 "Parking" 250 "Front" 249 "Front" 248 "Front" 247 "Front" 246 "Front" 245 "Front" 244 "Front" 243 "Front" 242 "Front" 241 "Front" 240 "Front" 239 "Front" 238 "Front" 237 "Front" 236 "Front" 235 "Front" 234 "Front" 233 "Front" 232 "Front" 231 "Front" 230 "Front" 229 "Front" 228 "Front" 227 "Front" 226 "Front" 225 "Front" 224 "Front" 223 "Front" 222 "Front" 221 "Front" 220 "Front" 219 "Front" 218 "Front" 217 "Front" 216 "Front" 215 "Front" 214 "Front" 213 "Front" 212 "Front" 211 "Front" 210 "Front" 209 "Front" 208 "Front" 207 "Front" 206 "Front" 205 "Front" 204 "Front" 203 "Front" 202 "Front" 201 "Front" 200 "Front" 199 "Front" 198 "Front" 197 "Front" 196 "Front" 195 "Front" 194 "Front" 193 "Front" 192 "Front" 191 "Front" 190 "Front" 189 "Front" 188 "Front" 187 "Front" 186 "Front" 185 "Front" 184 "Front" 183 "Front" 182 "Front" 181 "Front" 180 "Front" 179 "Front" 178 "Front" 177 "Front" 176 "Front" 175 "Front" 174 "Front" 173 "Front" 172 "Front" 171 "Front" 170 "Front" 169 "Front" 168 "Front" 167 "Front" 166 "Front" 165 "Front" 164 "Front" 163 "Front" 162 "Front" 161 "Front" 160 "Front" 159 "Front" 158 "Front" 157 "Front" 156 "Front" 155 "Front" 154 "Front" 153 "Front" 152 "Front" 151 "Front" 150 "Front" 149 "Front" 148 "Front" 147 "Front" 146 "Front" 145 "Front" 144 "Front" 143 "Front" 142 "Front" 141 "Front" 140 "Front" 139 "Front" 138 "Front" 137 "Front" 136 "Front" 135 "Front" 134 "Front" 133 "Front" 132 "Front" 131 "Front" 130 "Front" 129 "Front" 128 "Front" 127 "Front" 126 "Front" 125 "Neutral" 124 "Back" 123 "Back" 122 "Back" 121 "Back" 120 "Back" 119 "Back" 118 "Back" 117 "Back" 116 "Back" 115 "Back" 114 "Back" 113 "Back" 112 "Back" 111 "Back" 110 "Back" 109 "Back" 108 "Back" 107 "Back" 106 "Back" 105 "Back" 104 "Back" 103 "Back" 102 "Back" 101 "Back" 100 "Back" 99 "Back" 98 "Back" 97 "Back" 96 "Back" 95 "Back" 94 "Back" 93 "Back" 92 "Back" 91 "Back" 90 "Back" 89 "Back" 88 "Back" 87 "Back" 86 "Back" 85 "Back" 84 "Back" 83 "Back" 82 "Back" 81 "Back" 80 "Back" 79 "Back" 78 "Back" 77 "Back" 76 "Back" 75 "Back" 74 "Back" 73 "Back" 72 "Back" 71 "Back" 70 "Back" 69 "Back" 68 "Back" 67 "Back" 66 "Back" 65 "Back" 64 "Back" 63 "Back" 62 "Back" 61 "Back" 60 "Back" 59 "Back" 58 "Back" 57 "Back" 56 "Back" 55 "Back" 54 "Back" 53 "Back" 52 "Back" 51 "Back" 50 "Back" 49 "Back" 48 "Back" 47 "Back" 46 "Back" 45 "Back" 44 "Back" 43 "Back" 42 "Back" 41 "Back" 40 "Back" 39 "Back" 38 "Back" 37 "Back" 36 "Back" 35 "Back" 34 "Back" 33 "Back" 32 "Back" 31 "Back" 30 "Back" 29 "Back" 28 "Back" 27 "Back" 26 "Back" 25 "Back" 24 "Back" 23 "Back" 22 "Back" 21 "Back" 20 "Back" 19 "Back" 18 "Back" 17 "Back" 16 "Back" 15 "Back" 14 "Back" 13 "Back" 12 "Back" 11 "Back" 10 "Back" 9 "Back" 8 "Back" 7 "Back" 6 "Back" 5 "Back" 4 "Back" 3 "Back" 2 "Back" 1 "Back" 0 "Back" ; +VAL_ 3221225472 C_STROKE 254 "Error" ; +VAL_ 3221225472 fFCW_SW_MAIN 1 "FCW ON" 0 "FCW OFF" ; +VAL_ 3221225472 fLDW_SW_MAIN 1 "FCW ON" 0 "FCW OFF" ; +VAL_ 3221225472 fLDP_SW_MAIN 1 "LDP ON" 0 "LDP OFF" ; +VAL_ 3221225472 fCONTROL_LAMP_BLINK 1 "blink" 0 " No blink" ; +VAL_ 3221225472 fINITIAL_STATE_CHANGE 1 " blink LED_F/W lamp and buzzer" 0 "no blink LED_F/W lamp and buzz" ; +VAL_ 3221225472 PBS_REQUEST 1 "Activation" 0 " NoActivation" ; +VAL_ 3221225472 R_ECD_FUNCTION 1 " ON" 0 " OFF" ; +VAL_ 3221225472 PBS2_PRESS_O_F 1 "PBS2 pressure ordering" 0 "PBS2 pressure not ordering" ; +VAL_ 3221225472 PBS2_PRESS_G_F 1 "PBS2 pressure generating" 0 "PBS2 pressure not generating" ; +VAL_ 3221225472 CanREFUSE_SLEEPP 3 "reserved" 2 "ReadyToSleep" 1 "RefuseToSleep" 0 "reserved" ; +VAL_ 3221225472 ETSWRN2 1 "ETS meter multi disp warn2 on" 0 "ETS meter multi disp warn2 off" ; +VAL_ 3221225472 ETSWRN1 1 "ETS meter multi disp warn1 on" 0 "ETS meter multi disp warn1 off" ; +VAL_ 3221225472 ATPWL 1 "ATP warning lamp on" 0 "ATP warning lamp off" ; +VAL_ 3221225472 OFFROAD_SW 3 "Rock" 2 "Sand" 1 "Snow" 0 "On road" ; +VAL_ 3221225472 TVIR_RR 7 "not used" 6 "not used" 5 "not used" 4 "turn on No.1,2,.3 & No.4 indic" 3 "turn on No.1,No.2 & No.3 indic" 2 "turn on No.1 and No.2 indicator" 1 "turn on No.1 indicator" 0 "turn off indicator" ; +VAL_ 3221225472 TVIR_RL 7 "not used" 6 "not used" 5 "not used" 4 "turn on No.1,2,3 & No.4 indic" 3 "turn on No.1,No.2 & No.3 indic" 2 "turn on No.1 and No.2 indicator" 1 "turn on No.1 indicator" 0 "turn off indicator" ; +VAL_ 3221225472 CNIDLE 1 "Coast N-Idle is permitted" 0 "Coast N-Idle is not permitted" ; +VAL_ 3221225472 SGSLLURQ 1 "Request" 0 "No Request" ; +VAL_ 3221225472 NIDLEOK 1 "N_Idle instruction" 0 "Not N_Idle instruction" ; +VAL_ 3221225472 RSTREQ 1 "engine start request" 0 "no engine start request" ; +VAL_ 3221225472 VELHGTNE 7 "7400rpm" 6 "6900rpm" 5 "6400rpm" 4 "5900rpm" 3 "5400rpm" 2 "4900rpm" 1 "4400rpm" 0 "No request" ; +VAL_ 3221225472 ADVCD5 1 "retard control on" 0 "retard control off" ; +VAL_ 3221225472 CRANKING_PERMISSION 1 "CRANKING OK" 0 "CRANKING NG" ; +VAL_ 3221225472 SPDCTINH 1 "Torque compe is impossible" 0 "Torque compe is possible" ; +VAL_ 3221225472 CLUTCHSW 3 "invalid" 2 "Not used" 1 "pedal pressed" 0 "pedal not pressed (clutched)" ; +VAL_ 3221225472 ETSTRQAC 1 "ETS_Torque valid(normal)" 0 "ETS_Torque invalid(Abnormal)" ; +VAL_ 3221225472 OIL_DRAIN_ALERT 3 "Uot used" 2 "Oil drain requested" 1 "Oil drain to be anticipated" 0 "No alert display requested" ; +VAL_ 3221225472 FREE_SHIFT 3 "Not used" 2 "DownShift" 1 "UpShift " 0 " No Display " ; +VAL_ 3221225472 PFILTER_FAILDIS 1 "particu filter fail warn msg" 0 "No particu filter fail warn msg" ; +VAL_ 3221225472 RAWP 1 "forbidden value (transt fail)" 0 "pedal hard point override" ; +VAL_ 3221225472 SHIFT_IND 3 "both Lighting" 2 "Down shift Lighting" 1 "Up shift Lighting" 0 "both Lights out" ; +VAL_ 3221225472 MSR_S_I 1 "Inhibit" 0 "notInhibit" ; +VAL_ 3221225472 TACVTOK 1 "Torque Assist OK" 0 "Torque Assist NG" ; +VAL_ 3221225472 CNISCREQ 1 "Coast N-Idle Engine Control req" 0 "Not Coast N-Idle Eng Control req" ; +VAL_ 3221225472 CNIDLSTB 1 "Coast N-Idle standby OK" 0 "Coast N-Idle standby NG" ; +VAL_ 3221225472 M4WDINSIG 1 " Inhibition of activating e4WD" 0 "Permission of activating e4WD" ; +VAL_ 3221225472 ADFCRREQ 1 "Recover request" 0 "no Recover request" ; +VAL_ 3221225472 NIDLELRN 1 "N_Idle Learning" 0 "Not N_Idle Learning" ; +VAL_ 3221225472 ATSLREQ 1 "Limit request" 0 "no Limit request" ; +VAL_ 3221225472 PRIRTD_L 1 "Request" 0 "Request nothing " ; +VAL_ 3221225472 CVTFALVDC 1 "fail" 0 "not fail" ; +VAL_ 3221225472 TORQUE_CONTROL_PROHIBIT 1 "Torque compensation inhibot" 0 "Torque compensation permitted" ; +VAL_ 3221225472 AscMode_Status 7 "Reserve(AT only)" 6 "Drive Style Eco" 5 "Down Hill(AT only)" 4 "Up Hill(AT only)" 3 "Drive Style P3(AT only)" 2 "Drive Style P2(AT only)" 1 "Drive Style P1" 0 "Drive Style Normal" ; +VAL_ 3221225472 TA_POSITION 3 "drive" 2 "neutral " 1 "reverse" 0 " parking" ; +VAL_ 3221225472 Anti_RGB_PUMP_STA 3 "not used" 2 "RGB pump inactive" 1 "RGB pump active" 0 "Unavailable" ; +VAL_ 3221225472 CRANKING_AUTHORISATION 1 "cranking authorized" 0 "cranking inhibited" ; +VAL_ 3221225472 GP 3 "3rd range" 2 "2nd range" 1 "1st range" 0 "declutched at rest" ; +VAL_ 3221225472 TORQUE_REQ_PROGRESS 1 "shift in progress" 0 " no shift in progress" ; +VAL_ 3221225472 FAN_REQ 1 "engine fan request" 0 "no engine fan request" ; +VAL_ 3221225472 MAJOR_FAIL 1 "major failure (ECM stop request)" 0 "no major failure" ; +VAL_ 3221225472 E_NIDLE_RQ 1 "Emission-reqest" 0 "Fuel-economy-reqest" ; +VAL_ 3221225472 ATTRQAC 1 "data received is consistent" 0 "data received is not consistent" ; +VAL_ 3221225472 FD3LU_FDTLIN_FDTLIN2 3 "open lock-up(fast)" 2 "open lock-up(slow)" 1 "close lock-up" 0 "no request" ; +VAL_ 3221225472 RESETSWA 1 "exit from reset" 0 "no reset" ; +VAL_ 3221225472 SWA_STA 7 " Not used" 6 " Not used" 5 "Calibrated, initialised" 4 "Calibrated, not initialised" 3 "Not Used" 2 " fault" 1 "not calibrated, indexed" 0 "not calibrated, not indexed" ; +VAL_ 3221225472 FT_PASS_BELT_REM 3 "Not Used" 2 "Warning Level 2" 1 "Warning Level 1" 0 "No Warning" ; +VAL_ 3221225472 _2ND_ROW_R_BELT_STA 3 "unavailable" 2 "SB fastened" 1 "SB unfastened" 0 "SB not monitored" ; +VAL_ 3221225472 _2ND_ROW_L_BELT_STA 3 "unavailable" 2 "SB fastened" 1 "SB unfastened" 0 "SB not monitored" ; +VAL_ 3221225472 _2ND_ROW_C_BELT_STA 3 "unavailable" 2 "SB fastened" 1 "SB unfastened" 0 "SB not monitored" ; +VAL_ 3221225472 BELT_BUCK_STA_PASS 3 "unavailable" 2 "SB fastened" 1 "SB unfastened" 0 "SB not monitored" ; +VAL_ 3221225472 AIRBAG_FAIL 1 "AIRBAG system malfunction" 0 "no AIRBAG system malfunction" ; +VAL_ 3221225472 A_B_LIGHT_CRSH_ORD 15 "Frontal light Crash Occurrence" 14 "Not used" 13 "Not used" 12 "Not used" 11 "Not used" 10 "Not used" 9 "Not used" 8 "Not used" 7 "Not used" 6 "Not used" 5 "Not used" 4 "Not used" 3 "Not used" 2 "Not used" 1 "Not used" 0 "No Frontal light Crash Occur" ; +VAL_ 3221225472 PRE_ROLL_OUT 1 "Pre-Rollover detection" 0 "Pre-Rollover not detection" ; +VAL_ 3221225472 ROLLOVER_OUT 1 "Rollover detection" 0 "Rollover not detection" ; +VAL_ 3221225472 ROLL_MALFUNC_OUT 1 "Malfn of rollover detec fn " 0 "Normal of rollover detec fn " ; +VAL_ 3221225472 ROLL_BAR_OUT 1 " Roll-bar is deployed" 0 " Roll-bar isn't deployed" ; +VAL_ 3221225472 ROLL_BAR_MALFUNC_OUT 1 "Malfunc of Roll-bar is detected" 0 "Malfunc of Roll-bar isn't detect" ; +VAL_ 3221225472 CUT_OFF_REQ 1 "Cutoff telltale lamp on" 0 "Cutoff telltale lamp off" ; +VAL_ 3221225472 SERV_LMP_REQ 1 "Service lamp on" 0 "Service lamp off" ; +VAL_ 3221225472 A_B_CRSH_ORD 65535 "ACU judge Fuel cutoff Func unav" 65534 "ACU judge DoorUnlock Func unav" 21675 "Launch Heavy Crash Actions" 17850 "Launch Medium Crash Actions" ; +VAL_ 3221225472 LWSTRIM 1 "Finish" 0 "Unfinish" ; +VAL_ 3221225472 LWSCAL 1 "Finish" 0 "Unfinish" ; +VAL_ 3221225472 LWSOK 1 "Normal" 0 "Abnormal" ; +VAL_ 3221225472 CLL_STS 1 "ITS status display" 0 "Not request" ; +VAL_ 3221225472 FW_OBJ 1 "Curve" 0 "Forward Vehicle" ; +VAL_ 3221225472 WRN_FW 1 "Warning Forward" 0 "No Display" ; +VAL_ 3221225472 WRN_BS_R 1 "Warning right blind spot" 0 "No Display" ; +VAL_ 3221225472 WRN_BS_L 1 "Warning left blind spot" 0 "No Display" ; +VAL_ 3221225472 TGT_FW 3 "Display (Collision Warning)" 2 "Display (Approach Warning)" 1 "Display (Forward object) " 0 "No Display" ; +VAL_ 3221225472 MOED_CC 1 "Intelligent Cruise Control mode" 0 "Auto Speed Control Device mode" ; +VAL_ 3221225472 STS_CC 3 "Display (Malfunction)" 2 "Display (ASCD Mode ON)" 1 "Display (ICC Mode ON)" 0 "No Display" ; +VAL_ 3221225472 TGT_RV 3 "Display (Left radar stand by)" 2 "Display (Left vehicle warning)" 1 "Not used" 0 "No Display" ; +VAL_ 3221225472 TGT_LV 3 "Display (Left radar stand by)" 2 "Display (Left vehicle warning)" 1 "Not used" 0 "No Display" ; +VAL_ 3221225472 STS_D_Rr 7 "Malfunction" 6 "No Display" 5 "Display (Inactive)" 4 "Display (Active)" 3 "Display (Stand by)" 2 "Display (System ON)" 1 "Display (System OFF)" 0 "No Display" ; +VAL_ 3221225472 MSS_N_D 1 "Display" 0 "No Display" ; +VAL_ 3221225472 MSS_N_W 1 "Display" 0 "No Display" ; +VAL_ 3221225472 MSS_F 1 "Display" 0 "No Display" ; +VAL_ 3221225472 SIG_SPDA 1 "Blink" 0 "Not Blink" ; +VAL_ 3221225472 SIG_W_S 1 "Warning status display" 0 "Not request" ; +VAL_ 3221225472 BZR_REQ 7 "Not used" 6 "Status change Alarm" 5 "Lane Alarm" 4 "Target approach Alarm" 3 "Operation Alarm" 2 "Collision Alarm" 1 "Cancel Alarm" 0 "No Alarm" ; +VAL_ 3221225472 SIG_SPD 255 "'- -' indicator request" 254 "Set speed request" 253 "Set speed request" 252 "Set speed request" 251 "Set speed request" 250 "Set speed request" 249 "Set speed request" 248 "Set speed request" 247 "Set speed request" 246 "Set speed request" 245 "Set speed request" 244 "Set speed request" 243 "Set speed request" 242 "Set speed request" 241 "Set speed request" 240 "Set speed request" 239 "Set speed request" 238 "Set speed request" 237 "Set speed request" 236 "Set speed request" 235 "Set speed request" 234 "Set speed request" 233 "Set speed request" 232 "Set speed request" 231 "Set speed request" 230 "Set speed request" 229 "Set speed request" 228 "Set speed request" 227 "Set speed request" 226 "Set speed request" 225 "Set speed request" 224 "Set speed request" 223 "Set speed request" 222 "Set speed request" 221 "Set speed request" 220 "Set speed request" 219 "Set speed request" 218 "Set speed request" 217 "Set speed request" 216 "Set speed request" 215 "Set speed request" 214 "Set speed request" 213 "Set speed request" 212 "Set speed request" 211 "Set speed request" 210 "Set speed request" 209 "Set speed request" 208 "Set speed request" 207 "Set speed request" 206 "Set speed request" 205 "Set speed request" 204 "Set speed request" 203 "Set speed request" 202 "Set speed request" 201 "Set speed request" 200 "Set speed request" 199 "Set speed request" 198 "Set speed request" 197 "Set speed request" 196 "Set speed request" 195 "Set speed request" 194 "Set speed request" 193 "Set speed request" 192 "Set speed request" 191 "Set speed request" 190 "Set speed request" 189 "Set speed request" 188 "Set speed request" 187 "Set speed request" 186 "Set speed request" 185 "Set speed request" 184 "Set speed request" 183 "Set speed request" 182 "Set speed request" 181 "Set speed request" 180 "Set speed request" 179 "Set speed request" 178 "Set speed request" 177 "Set speed request" 176 "Set speed request" 175 "Set speed request" 174 "Set speed request" 173 "Set speed request" 172 "Set speed request" 171 "Set speed request" 170 "Set speed request" 169 "Set speed request" 168 "Set speed request" 167 "Set speed request" 166 "Set speed request" 165 "Set speed request" 164 "Set speed request" 163 "Set speed request" 162 "Set speed request" 161 "Set speed request" 160 "Set speed request" 159 "Set speed request" 158 "Set speed request" 157 "Set speed request" 156 "Set speed request" 155 "Set speed request" 154 "Set speed request" 153 "Set speed request" 152 "Set speed request" 151 "Set speed request" 150 "Set speed request" 149 "Set speed request" 148 "Set speed request" 147 "Set speed request" 146 "Set speed request" 145 "Set speed request" 144 "Set speed request" 143 "Set speed request" 142 "Set speed request" 141 "Set speed request" 140 "Set speed request" 139 "Set speed request" 138 "Set speed request" 137 "Set speed request" 136 "Set speed request" 135 "Set speed request" 134 "Set speed request" 133 "Set speed request" 132 "Set speed request" 131 "Set speed request" 130 "Set speed request" 129 "Set speed request" 128 "Set speed request" 127 "Set speed request" 126 "Set speed request" 125 "Set speed request" 124 "Set speed request" 123 "Set speed request" 122 "Set speed request" 121 "Set speed request" 120 "Set speed request" 119 "Set speed request" 118 "Set speed request" 117 "Set speed request" 116 "Set speed request" 115 "Set speed request" 114 "Set speed request" 113 "Set speed request" 112 "Set speed request" 111 "Set speed request" 110 "Set speed request" 109 "Set speed request" 108 "Set speed request" 107 "Set speed request" 106 "Set speed request" 105 "Set speed request" 104 "Set speed request" 103 "Set speed request" 102 "Set speed request" 101 "Set speed request" 100 "Set speed request" 99 "Set speed request" 98 "Set speed request" 97 "Set speed request" 96 "Set speed request" 95 "Set speed request" 94 "Set speed request" 93 "Set speed request" 92 "Set speed request" 91 "Set speed request" 90 "Set speed request" 89 "Set speed request" 88 "Set speed request" 87 "Set speed request" 86 "Set speed request" 85 "Set speed request" 84 "Set speed request" 83 "Set speed request" 82 "Set speed request" 81 "Set speed request" 80 "Set speed request" 79 "Set speed request" 78 "Set speed request" 77 "Set speed request" 76 "Set speed request" 75 "Set speed request" 74 "Set speed request" 73 "Set speed request" 72 "Set speed request" 71 "Set speed request" 70 "Set speed request" 69 "Set speed request" 68 "Set speed request" 67 "Set speed request" 66 "Set speed request" 65 "Set speed request" 64 "Set speed request" 63 "Set speed request" 62 "Set speed request" 61 "Set speed request" 60 "Set speed request" 59 "Set speed request" 58 "Set speed request" 57 "Set speed request" 56 "Set speed request" 55 "Set speed request" 54 "Set speed request" 53 "Set speed request" 52 "Set speed request" 51 "Set speed request" 50 "Set speed request" 49 "Set speed request" 48 "Set speed request" 47 "Set speed request" 46 "Set speed request" 45 "Set speed request" 44 "Set speed request" 43 "Set speed request" 42 "Set speed request" 41 "Set speed request" 40 "Set speed request" 39 "Set speed request" 38 "Set speed request" 37 "Set speed request" 36 "Set speed request" 35 "Set speed request" 34 "Set speed request" 33 "Set speed request" 32 "Set speed request" 31 "Set speed request" 30 "Set speed request" 29 "Set speed request" 28 "Set speed request" 27 "Set speed request" 26 "Set speed request" 25 "Set speed request" 24 "Set speed request" 23 "Set speed request" 22 "Set speed request" 21 "Set speed request" 20 "Set speed request" 19 "Set speed request" 18 "Set speed request" 17 "Set speed request" 16 "Set speed request" 15 "Set speed request" 14 "Set speed request" 13 "Set speed request" 12 "Set speed request" 11 "Set speed request" 10 "Set speed request" 9 "Set speed request" 8 "Set speed request" 7 "Set speed request" 6 "Set speed request" 5 "Set speed request" 4 "Set speed request" 3 "Set speed request" 2 "Set speed request" 1 "Set speed request" 0 "not request" ; +VAL_ 3221225472 STS_D_FW 3 "Display (Malfunction)" 2 "Display (Temporary OFF)" 1 "Display (System ON)" 0 "No Display" ; +VAL_ 3221225472 STS_BA 3 "Display (Malfunction)" 2 "Display (Temporary OFF)" 1 "Display (System ON)" 0 "No Display" ; +VAL_ 3221225472 STS_W_BS 3 "Display (Malfunction)" 2 "Display (Temporary OFF)" 1 "Display (System ON)" 0 "No Display" ; +VAL_ 3221225472 STS_W_FW 3 "Display (Malfunction)" 2 "Display (Temporary OFF)" 1 "Display (System ON)" 0 "No Display" ; +VAL_ 3221225472 TGT_LN 3 "Not used" 2 "Display (Lane Warning)" 1 "Display (Lane)" 0 "No Display" ; +VAL_ 3221225472 TGT_FV 3 "Display (Collision Warning)" 2 "Display (Approach Warning)" 1 "Display (Forward vehicle)" 0 "No Display" ; +VAL_ 3221225472 SIG_UNIT 1 "Unit of SPD Ind req (KMH or MPH)" 0 "not request" ; +VAL_ 3221225472 SIG_DIS 3 "Display (Long)" 2 "Display (Middle)" 1 "Display (Short)" 0 "No Display" ; +VAL_ 3221225472 SIG_RDY 1 "Display" 0 "No Display" ; +VAL_ 3221225472 SIG_SET 1 "Display" 0 "No Display" ; +VAL_ 3221225472 STS_D_BS 3 "BSI Malfunction" 2 "BSI ON(Flashing)" 1 "BSI ON" 0 "OFF" ; +VAL_ 3221225472 STS_D_LN 3 "LDP Malfunction" 2 "LDP ON(Flashing)" 1 "LDP ON" 0 "OFF" ; +VAL_ 3221225472 STS_W_LN 3 "LDW Malfunction" 2 "LDW ON(Flashing)" 1 "LDW ON" 0 "OFF" ; +VAL_ 452 BLS_ON_flag 1 "Brake Lamp Switch active" 0 "Brake Lamp Switch not active" ; +VAL_ 452 SHIFT_STOP_REQ_VDC 1 "Request" 0 "No Request" ; +VAL_ 452 CBA_REQ 1 "Request" 0 "No Request" ; +VAL_ 452 FCAAS_REQUEST 1 "Request" 0 "No Request" ; +VAL_ 452 PBA_REQUEST 1 "Request" 0 "No Request" ; +VAL_ 452 ACC_REQUEST 1 "Request" 0 "No Request" ; +VAL_ 452 YMC_REQ 1 "Request" 0 "No Request" ; +VAL_ 452 PUMP_STOP_REQ 1 "Requiring" 0 "Not Requiring" ; +VAL_ 452 PUMP_MAP_TYPE 3 "not used" 2 "Pump map type 2" 1 "Pump map type 1" 0 "Not Requiring" ; +VAL_ 452 BRK_PRSSR_DIST_REQ 1 "Request" 0 "No Request" ; +VAL_ 452 LDP_SHIFTMP_CHR_REQ_VDC 3 "not used" 2 "map2" 1 "map1" 0 "No Request" ; +VAL_ 452 AUTOSTOP 1 "Auto stop mode on" 0 "Auto stop mode off" ; +VAL_ 372 CURGP 15 "AT in limphome" 14 "Not used" 13 "Not used" 12 "Not used" 11 "CVT in continuous mode" 10 "neutral or parking" 9 "Reverse" 8 "8th gear" 7 "7th gear" 6 "6th gear" 5 "5th gear" 4 "4th gear" 3 "3rd gear" 2 "2nd gear" 1 "1st gear" 0 "idle Neutral control" ; +VAL_ 451 BLS_ON_flag 1 "Brake Lamp Switch active" 0 "Brake Lamp Switch not active" ; +VAL_ 451 SHIFT_STOP_REQ_VDC 1 "Request" 0 "No Request" ; +VAL_ 451 CBA_REQ 1 "Request" 0 "No Request" ; +VAL_ 451 FCAAS_REQUEST 1 "Request" 0 "No Request" ; +VAL_ 451 PBA_REQUEST 1 "Request" 0 "No Request" ; +VAL_ 451 ACC_REQUEST 1 "Request" 0 "No Request" ; +VAL_ 451 YMC_REQ 1 "Request" 0 "No Request" ; +VAL_ 451 PUMP_STOP_REQ 1 "Requiring" 0 "Not Requiring" ; +VAL_ 451 PUMP_MAP_TYPE 3 "not used" 2 "Pump map type 2" 1 "Pump map type 1" 0 "Not Requiring" ; +VAL_ 451 BRK_PRSSR_DIST_REQ 1 "Request" 0 "No Request" ; +VAL_ 451 LDP_SHIFTMP_CHR_REQ_VDC 3 "not used" 2 "map2" 1 "map1" 0 "No Request" ; +VAL_ 451 AUTOSTOP 1 "Auto stop mode on" 0 "Auto stop mode off" ; +VAL_ 1549 TURN_IND 7 "invalid" 6 "invalid" 5 "invalid" 4 "invalid" 3 "left ON and right flash ON" 2 "left OFF and right flash ON" 1 "left ON and right flash OFF" 0 "left and right flash OFF" ; +VAL_ 1549 HL_HIGH_REQ 1 "high beam requested" 0 "high beam not requested" ; +VAL_ 1549 TAIL_L_REQ 1 " position lights requested" 0 " position lights not requested" ; +VAL_ 1549 HL_LOW_REQ 1 "low beam requested" 0 "low beam not requested" ; +VAL_ 861 CABRESW 3 "invalid" 2 "Not used" 1 "brake activated" 0 "brake not activated" ; +VAL_ 861 FR_WIP_REQ 7 "high speed wiping requested" 6 "low speed wiping requested" 5 "invalid" 4 "invalid" 3 "one high speed wiping requested" 2 "one low speed wiping requested" 1 "front wiper forced to stop" 0 "front wiper in stop position" ; +VAL_ 852 ABSACT 1 "ABS in regulation" 0 "ABS not in regulation" ; +VAL_ 581 TCSACT 1 "TSC(ASR) in regulation" 0 "no TCS(ASR) regulation" ; +VAL_ 581 VDCACT 1 "VDC(AYC) in regulation" 0 "no VDC(AYC) regulation" ; +VAL_ 581 OFF_SW 1 "4WD(TCS) disabled by the driver" 0 "4WD(TCS) available" ; + diff --git a/daemons/cand/bsmpbeat.xml b/daemons/cand/bsmpbeat.xml new file mode 100644 index 0000000..98e0386 --- /dev/null +++ b/daemons/cand/bsmpbeat.xml @@ -0,0 +1,139 @@ + + Nissan/Infiniti Gen3 + Infiniti_M37_JX35_ADAS.dbc + + + + CABRESW +
0x35D
+
+ + TURN_IND +
0x60D
+
+ + FR_WIP_REQ +
0x35D
+
+ + HL_HIGH_REQ +
0x60D
+
+ + HL_LOW_REQ +
0x60D
+
+ + TAIL_L_REQ +
0x60D
+
+ + LONG_ACC_02 +
0x292
+
+ + TRANS_ACC_02 +
0x292
+
+ + YAW_RATE_02 +
0x292
+
+ + ABSACT +
0x354
+
+ + V_APO +
0x182
+
+ + VSO +
0x284
+
+ + STRANGLE +
0x002
+
+ + TCSACT +
0x245
+
+ + VDCACT +
0x245
+
+ + OFF_SW +
0x245
+
+ + CURGP +
0x174
+
+
+ + + + Speed + VSO*0.277777778 + + + TransmissionState + CURGP + + + LateralAcceleration + TRANS_ACC_02*9.80665 + + + LongitudinalAcceleration + LONG_ACC_02*9.80665 + + + YawRate + YAW_RATE_02*0.1 + + + BrakeAppliedStatus + CABRESW*15 + + + TractionControlStatus + OFF_SW?0:TCSACT+1 + + + AntilockBrakeStatus + ABSACT?ABSACT+1:0 + + + StabilityControlStatus + OFF_SW?0:VDCACT+1 + + + VehicleWidth + 1.85 + + + VehicleLength + 4.95 + + + SteeringWheelAngle + STRANGLE + + + AccelPedalPosition + V_APO*0.39216 + + + ExteriorLights + HL_LOW_REQ*1+HL_HIGH_REQ*2+TURN_IND*4+TAIL_L_REQ*128 + + + FrontWiperStatus + FR_WIP_REQ + + +
diff --git a/daemons/cand/cand.cpp b/daemons/cand/cand.cpp new file mode 100644 index 0000000..efd6d41 --- /dev/null +++ b/daemons/cand/cand.cpp @@ -0,0 +1,204 @@ +// +// CAN Daemon (cand.cpp) +// +// Neal Probert +// +// IPv4 for now, since clients will be localhost anyways +// IPv6 for testing +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "CanDaemon.h" + +#include "netlib.h" + +extern int optind, opterr, optopt; + +/* + * Note that we are doing a multi-client server so that it's possible to + * have several applications listening to CAN + */ + +static const char *helptext = +"cand -m map.txt [options]\n" +"\t-a Acceleration calculated from speed\n" +"\t-b uri CAN Packet broadcast\n" +"\t-c can0 CAN Interface (default)\n" +"\t-d debug (foreground with stdio)\n" +"\t-f uri forward udp port (usually to MABX2)\n" +"\t-h help\n" +"\t-l uri UDP for TX Echo Listener (WSU BSM Proxy)\n" +"\t-m file.xml CAN to DSRC mapping file\n" +"\t-t period HeartBeat period in msec (default=100)\n" +"\t-v id Set Vehicle TempID (default=random)\n" +"\t-w uri UDP for TX Generator (WSU BSM Proxy)\n" +"\t-L logfile Message log file\n" +"\t-S service TCP service (default=2949)\n"; + +int main(int argc, char **argv) +{ + char c; /* we have character */ + int n; + + /* options */ + int debug = 0; + + /* CAN */ + const char *can = NULL; // "can0" + const char *mapping = NULL; + + /* HB */ + const char *tx = "udp://192.168.1.2:2735"; // to WSU + const char *rx = "udp://0.0.0.0:2736"; // from WSU + const char *tcp = CAND_PORT; + unsigned long period = 100UL; + const char *fwd = NULL; // "udp://192.168.1.10:2736"; // mABx2 + + // if we're doing CAN, we must be doing TX as well + if ( can ) + tx = "udp://192.168.1.2:2735"; + else + tx = NULL; // if we want to use dummy TX for testing + + /* init hardware interface and daemon */ + CanDaemon Can; + + // add command line args + while ( (c = getopt( argc, argv, "ac:df:hl:m:tw:L:S:" )) > 0 ) + { + switch ( c ) + { + case 'a': + Can.Vehicle.m_accel_from_speed = false; + break; + case 'c': + can = optarg; + break; + case 'd': + debug = 1; + Can.Receiver.m_debug = Can.Vehicle.m_debug = true; + break; + case 'f': + fwd = optarg; + break; + case 'h': + puts( helptext ); + exit(0); + break; + case 'l': + rx = optarg; + break; + case 'm': + mapping = optarg; + break; + case 't': + period = strtoul( optarg, NULL, 10 ); + break; + case 'w': + if (strcmp(optarg, "-") == 0) + tx = "udp://192.168.1.2:2735"; + else + tx = optarg; + break; + case 'L': + // Open log file (must be to logd!) + if ( Can.Receiver.Logging.LogOpen(optarg, 0) ) + { + printf( "%s: Log file opened\n", optarg ); + Can.Receiver.Logging.LogPrintf( "logtime,timestamp,type,id,latitude,longitude,elevation,heading," + "speed,trans,steering,accel_long,accel_lat,accel_vert,yaw_rate," + "brakes,event,lights,throttle,wipers,pp_radius" ); + } + else + { + fprintf(stderr, "%s: log file open failed\n", optarg ); + } + break; + case 'S': + tcp = optarg; + break; + default: + fprintf( stderr, "Unknown option -%c\n", c ); + exit(1); + } + } + + // CAN Database and Parsing + if ( mapping ) + { + // Filter to reduce database + if ( (n = Can.Vehicle.CanMapping( mapping )) <= 0 ) + { + fprintf( stderr, "Unable to load CAN database and DSRC mapping!\n"); + exit(1); + } + } + else if ( can ) + { + fprintf( stderr, "CAN to DSRC Mapping file is required!\n" ); + exit(1); + } + + // CAN device, can run without CAN for testing + if ( can ) + { + if ( Can.Can.CanOpen( can ) < 0 ) + { + fprintf( stderr, "Unable to open CAN device: %s!\n", can ); + exit(1); + } + // fprintf( stderr, "CAN Max Filter = %d\n", CAN_MAX_FILTER ); + } + else + { + fprintf( stderr, "Running without CAN, setting fake values\n" ); + exit(1); + } + + // TX sending + if ( tx ) + { + // UDP + if ( Can.Generator.ConnectUri( tx ) < 0 ) + { + fprintf( stderr, "Unable to connect to WSU BSM Proxy!\n" ); + exit(1); + } + Can.Generator.SetPeriod( period ); + } + else + fprintf( stderr, "Running without TX, RX listener only (TX Echo, RX Msg, OEM Echo)\n" ); + + // UDP broadcast + if ( rx ) + Can.Receiver.ListenUri( rx ); + else + fprintf( stderr, "Running with RX, sending TX only\n" ); + + // Forwarding to MABX2 + if ( fwd ) + { + if ( Can.Receiver.Forward.CasterUri( fwd ) >= 0 ) + fprintf( stderr, "Forwarding packets to %s\n", fwd ); + else + fprintf( stderr, "Forward open failed!\n" ); + } + + /* TCP Server */ + if ( Can.StartService( CAND_NAME, NULL, tcp, debug ) >= 0 ) + return Can.RunService(); + + return 1; +} diff --git a/daemons/cand/candebug.sh b/daemons/cand/candebug.sh new file mode 100755 index 0000000..8b9fce8 --- /dev/null +++ b/daemons/cand/candebug.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +./cand -c can0 -d -m bsmpbeat.xml diff --git a/daemons/cand/debug.sh b/daemons/cand/debug.sh new file mode 100755 index 0000000..be88f2f --- /dev/null +++ b/daemons/cand/debug.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +./cand -d -f udp://192.168.1.10:2736 -m bsmpbeat.xml diff --git a/daemons/gpsd/CMakeLists.txt b/daemons/gpsd/CMakeLists.txt new file mode 100644 index 0000000..c1e3fc8 --- /dev/null +++ b/daemons/gpsd/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME gpsd) +project(Cnomicon-Daemon) +set(TARGET ${NAME}) +set(CMAKE_INSTALL_PREFIX ..) + +# includes +include_directories( + /usr/include/libxml2 + ../include/libgps++ + ../include/libnet++ + ../include) + +link_directories(../lib) + +link_libraries(gps++ net++ net emb kmlbase kmldom kmlengine xml2 pthread rt) + +# sources +set(SRCS + GpsDaemon.cpp + ) + +# executables +add_executable(${TARGET} ${TARGET}.cpp ${SRCS}) + +install(TARGETS ${TARGET} DESTINATION sbin) diff --git a/daemons/gpsd/GpsDaemon.cpp b/daemons/gpsd/GpsDaemon.cpp new file mode 100644 index 0000000..dd962bd --- /dev/null +++ b/daemons/gpsd/GpsDaemon.cpp @@ -0,0 +1,384 @@ +// +// GPS Daemon +// Neal Probert +// + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "UriParse.h" +#include "GpsDaemon.h" + +#include "NmeaParser.h" +#include "ApplanixParser.h" +#include "FastraxParser.h" +#include "GarminParser.h" +#include "SirfParser.h" +#include "UbloxParser.h" + +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +GpsDaemon::GpsDaemon() +{ + log_open( GPSD_NAME ); + + clockset = 0; + msgcount = 0; + + dgps_corr = true; + + SourceIn = CorrIn = -1; + + strcpy( Uri, "" ); + nClients = 0; + + SetClientTimeout(false); // don't reset timeout on client activity +} + +GpsDaemon::~GpsDaemon() +{ + Gps.GpsClose(); + Log.LogClose(); +} + +/* NMEA **********************************************************************/ + +void GpsDaemon::PositionListener( const GpsPoint &Pos, const ErrorInfo &Err ) +{ +} + +void GpsDaemon::TimeListener( const struct timeval &tv ) +{ + // good fix and time + if ( clockset && tv.tv_sec ) + { + if ( getuid() == 0 ) + settimeofday( &tv, NULL ); + clockset = 0; + } +} + +/* TCP ***********************************************************************/ + +int GpsDaemon::ServerTimeout(void) +{ + // timeout (a bad thing) + DgpsReconnect(); + return 0; +} + +int GpsDaemon::ServerSocket(void) +{ + char buf[2048]; + int n = 0; + + + if ( IsSet( CorrIn ) ) + { + // corrections + if ( dgps_corr ) + // from RTCM server (once a minute) + n = Dgps.DgpsRead( buf, sizeof(buf) ); + else + // from NTRIP server (once a minute) + n = Ntrip.NtripRead( (unsigned char *)buf, sizeof(buf) ); + + // xmit + if ( n > 0 ) + Gps.GpsWrite( buf, n ); + else if ( n == 0 ) + { + if ( dgps_corr ) + log_error( "Remote RTCM server closed!" ); + else + log_error( "Remote NTRIP server closed!" ); + DgpsReconnect(); + } + ResetServerTimeout(); + } + else if ( IsSet( SourceIn ) ) + { + if ( gps_source ) + // packet from GPS device + n = Gps.GpsRead( buf, sizeof(buf) ); + else + // remote gpsd/glty + n = Gpsd.Recv( buf, sizeof(buf) ); + + if ( n > 0 && Parser && Parser->GpsParse(buf, n) > 0 ) + { + msgcount++; + + // 'cast + ClientCast( buf, n ); + } + } + return n; +} + +int GpsDaemon::ClientIn( int sock, const char *buf, int n ) +{ + // allows for NMEA playback via netcat + if ( *buf == '$' ) + { + // broadcast it + Bcast.SendTo( buf, n ); + + // send to clients + TcpServer::ClientCast( buf, n ); + } + else + { + // parse for commands? + + // just log it + log_write( buf ); + } + + return n; +} + +int GpsDaemon::ClientUp( int sock ) +{ + if ( nClients++ == 0 ) + ; + return 1; +} + +void GpsDaemon::ClientDown( int sock ) +{ + // disconnect source + if ( --nClients <= 0 ) + nClients = 0; +} + +void GpsDaemon::ClientCast( const char *buf, int n ) +{ + // broadcast it + Bcast.SendTo( buf, n ); + + // send to clients + TcpServer::ClientCast( buf, n ); + + // log NMEA data with time stamp + Log.LogWrite( buf, n ); +} + +/* GPS ***********************************************************************/ + +int GpsDaemon::GpsOpen( const char *device, int baud ) +{ + UriParse parsed; + parsed.setRate( baud ); + parsed.setUri( device ); + + const char *proto = parsed.getProto(); + + SourceIn = -1; + + if ( !proto ) + proto = "nmea"; + + // connect to gpsd? + if ( strcmp( proto, "gpsd" ) == 0 ) + { + // does r mode for NMEA + SourceIn = Gpsd.GpsdConnect( parsed.getHost() ); + proto = "nmea"; + } + else if ( strcmp( proto, "glty" ) == 0 ) + { + // put in NMEA mode + SourceIn = Gpsd.GpsdConnect( parsed.getHost() ); + Gpsd.Send( "$PGLTY,NMEA\n", 12 ); + proto = "pvii"; + } + else + { + // open device + SourceIn = Gps.GpsOpen( parsed.getPath(), parsed.getRate() ); + gps_source = true; + } + + // check + if ( SourceIn < 0 ) + return SourceIn; + + bool binary = false; + + // attach parser (should probably use a table) + if ( strcasecmp( proto, "nmea") == 0 ) + { + // ascii + NmeaParser *parser = new NmeaParser(); + Parser = (GpsParser *)parser; + } + else if ( strcasecmp( proto, "applanix") == 0 ) + { + // binary + binary = true; + ApplanixParser *parser = new ApplanixParser(); + Parser = (GpsParser *)parser; + } + else if ( strcasecmp( proto, "fastrax") == 0 ) + { + // ascii + FastraxParser *parser = new FastraxParser(); + Parser = (GpsParser *)parser; + } + else if ( strcasecmp( proto, "garmin") == 0 ) + { + // ascii/binary + GarminParser *parser = new GarminParser(); + Parser = (GpsParser *)parser; + } + else if ( strcasecmp( proto, "sirf") == 0 ) + { + // binary + SirfParser *parser = new SirfParser(); + Parser = (GpsParser *)parser; + } + else if ( strcasecmp( proto, "ublox") == 0 ) + { + // ascii/binary + UbloxParser *parser = new UbloxParser(); + Parser = (GpsParser *)parser; + } + else + { + // ascii + NmeaParser *parser = new NmeaParser(); + Parser = (GpsParser *)parser; + } + + // set mode + if ( binary ) + Gps.SetCanonical( false, 0, 0 ); + + // subscribe + Parser->Subscribe( (GpsListener*)this ); + + // add listener + AddFd( SourceIn ); + + return SourceIn; +} + +int GpsDaemon::DgpsConnect( const char *uri ) +{ + if ( !uri ) + return -1; + + // already connected? + if ( CorrIn >= 0 ) + return CorrIn; + + UriParse parsed; + parsed.setService( "2101" ); + parsed.setUri( uri ); + + const char *proto = parsed.getProto(); + + if ( strcmp( proto, "dgps" ) == 0 || strcmp( proto, "dgpsip" ) == 0 + || strcmp( proto, "rtcmd" ) == 0 ) + { + // RTCM server (dgpsip) + CorrIn = Dgps.DgpsConnect( parsed.getHost(), parsed.getService() ); + dgps_corr = true; + } + else if ( strcmp( proto, "ntrip" ) == 0 ) + { + // NTRIP caster + CorrIn = Ntrip.NtripConnect( uri ); + dgps_corr = false; + } + + // add listener + if ( CorrIn >= 0 ) + { + strcpy( Uri, uri ); + AddFd( CorrIn ); + } + + return CorrIn; +} + +void GpsDaemon::DgpsDisconnect( void ) +{ + if ( CorrIn >= 0 ) + ; + else + return; + Dgps.DgpsClose(); + Ntrip.NtripClose(); + DelFd( CorrIn ); + CorrIn = -1; +} + +void GpsDaemon::DgpsReconnect( void ) +{ + if ( nClients == 0 || strlen(Uri) == 0 ) + return; + log_printf( "Remote RTCM/NTRIP timed out, reconnecting" ); + Dgps.DgpsClose(); + Ntrip.NtripClose(); + DelFd( CorrIn ); + CorrIn = -1; + + DgpsConnect( Uri ); +} + +int GpsDaemon::GpsBroadcast( const char *host ) +{ + const char *port = GPSD_SERVICE; + + int sock = Bcast.Caster( host, port ); + + return sock; +} diff --git a/daemons/gpsd/GpsDaemon.h b/daemons/gpsd/GpsDaemon.h new file mode 100644 index 0000000..e9654cb --- /dev/null +++ b/daemons/gpsd/GpsDaemon.h @@ -0,0 +1,121 @@ +// +// GPS Daemon +// Neal Probert +// + +/* prevent multiple inclusions */ +#ifndef __GpsDaemon__ +#define __GpsDaemon__ + +/* includes *****************************************************************/ + +#include "bzlib.h" + +#include "TcpDaemon.h" +#include "UdpClient.h" +#include "UdpCaster.h" + +#include "GpsDevice.h" +#include "GpsdClient.h" +#include "NmeaParser.h" +#include "SirfParser.h" +#include "ApplanixParser.h" +#include "DgpsClient.h" +#include "NtripClient.h" + +#include "Logging.h" + +/* defines ******************************************************************/ + +/* software details */ +#define GPSD_NAME "gpsd" +#define GPSD_VERSION "0.1" + +/* default service and port */ +#define GPSD_SERVICE "gpsd" +#define GPSD_PORT "2947" + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class GpsDaemon : public TcpDaemon, public GpsListener, public Logging { + // public data +public: + GpsdClient Gpsd; + GpsDevice Gps; + GpsParser *Parser; + + DgpsClient Dgps; + NtripClient Ntrip; + + // TrackClient Track; + + // for corrections reconnect + char Uri[1024]; + int nClients; + + // private data +private: + bool gps_source; // 1=gps, 0=gpsd + bool dgps_corr; // 1=dpgs, 0=ntrip + + // FDs + int SourceIn; // GpsdClient or GpsDevice + int CorrIn; // DpgsIn or NtripIn + int TrackOut; // + + // UDP broadcast (data) + UdpCaster Bcast; + + // misc + int clockset; // set to set clock from GPS + int msgcount; + + // private methods + + // static data + + // public methods +public: + // constructors + GpsDaemon(); + + // destructor + virtual ~GpsDaemon(); + + // virtual functions + int ServerTimeout(void); + int ServerSocket(void); + int ClientIn( int sock, const char *buf, int n ); + int ClientUp( int sock ); + void ClientDown( int sock ); + void ClientCast( const char *buf, int n ); + + // parser notifications + void PositionListener( const GpsPoint &Pos, const ErrorInfo &Err ); + void TimeListener( const struct timeval &Time ); + + // public methods + void SetClock( void ) {clockset=1;}; + int GpsOpen( const char *dev, int baud=38400 ); + int GpsBroadcast( const char *host = NULL ); + + // corrections + int DgpsConnect( const char *host ); + void DgpsDisconnect( void ); + void DgpsReconnect( void ); + int DgpsListen( const char *host = NULL ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/daemons/gpsd/gpsd.cpp b/daemons/gpsd/gpsd.cpp new file mode 100644 index 0000000..911ec5e --- /dev/null +++ b/daemons/gpsd/gpsd.cpp @@ -0,0 +1,226 @@ +// +// GPS Daemon +// Neal Probert +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "GpsDaemon.h" + +#include "netlib.h" + +extern int optind, opterr, optopt; + +// +// Written because gpsd (http://gpsd.berlios.de/) is too fat +// + +// +// GPS Server (port 2947 by default) +// ---------- +// + +static const char *helptext = +"This is GPSd, not the open source software gpsd:\n" +"gpsd -s /dev/ttyS0:57600 [options]\n" +"\t-d debug (foreground with stdio)\n" +"\t-h help\n" +"\t-l UDP listen for RTCM corrections\n" +"\t-m network broadcast GPS data\n" +"\t-o outfile output message log\n" +"\t-r uri dgpsip://host or ntrip://user@pw:host/ rtcm:/dev/ttyS1\n" +"\t-s port nmea:/dev/ttyS0:baud or sirf:/dev/ttyS0:baud\n" +"\t-t uri OpenGTS server\n" +"\t-w WDM DSRC listen for RTCM corrections\n" +"\t-S service TCP service (default=gpsd)\n" +"\tUse OSS gpsd, gpspipe and gpsfake to create and replay NMEA log files!\n"; + +int main(int argc, char **argv) +{ + char c; /* we have character */ + + GpsDaemon Gps; + + /* options */ + int debug = 0; // run in foreground, leaves stdio open + int dsrc_wsm = 0; + int timeout = 15; + + /* dgpsip server */ + char *host = NULL; + + /* service/port */ + char *service = (char *)"gpsd"; + + /* serial port */ + char *primary = NULL; + char *secondary = NULL; + int baud = 4800; + + /* logging */ + char *outfile = NULL; + + /* udp broadcast */ + char *mcast = NULL; + + /* udp listener */ + int listen = 0; + + /* data */ + char szBuf[1600]; + bzero( szBuf, sizeof(szBuf) ); + + // add command line args + while ( (c = getopt( argc, argv, "cdhi:jlm:o:r:s:t:S:T:v" )) > 0 ) + { + switch ( c ) + { + case 'c': // clock set + Gps.SetClock(); + break; + case 'd': + debug = 1; + break; + case 'h': + puts( helptext ); + return 0; + case 'l': // udp/wdm listen + listen = 1; + break; + case 'm': // udp broadcast + mcast = optarg; + break; + case 'o': + outfile = optarg; + break; + case 'r': // rtcm-sc104 host + host = optarg; + break; + case 's': // serial device + if ( !primary ) + primary = optarg; + else + secondary = optarg; + break; + case 'S': + service = optarg; + break; + case 'T': + timeout = atoi(optarg); + if ( timeout == 0 ) + timeout = 30; + break; + case 'w': // DSRC WSM + fprintf( stderr, "DSRC WSM support not available!\n" ); + listen = 1; + dsrc_wsm = 1; + break; + default: + fprintf( stderr, "Unknown option -%c\n", c ); + exit(1); + } + } + + // check options + if ( !primary ) + { + fprintf( stderr, "Must have a GPS device to communicate with!\n" ); + exit(1); + } + if ( mcast && listen ) + { + fprintf( stderr, "Cannot do both UDP broadcast/multicast and listening!\n" ); + exit(1); + } + + // input + if ( primary ) + { + // open GPS device on serial port + int serial = Gps.GpsOpen( primary, baud ); + + if ( serial < 0 ) + { + fprintf( stderr, "Unable to open primary serial device: %s @ %d !\n", primary, baud ); + + if ( secondary ) + { + serial = Gps.GpsOpen( secondary, baud ); // won't open till primary dies + + if ( serial < 0 ) + { + fprintf( stderr, "Unable to open secondary serial device: %s @ %d !\n", secondary, baud ); + exit(1); + } + } + } + } + else + { + fprintf( stderr, "No task specified: use -l, -i or -s !\n" ); + exit(1); + } + + // corrections + if ( host ) + { + // RTCM server + int remote = Gps.DgpsConnect( host ); + + if ( remote < 0 ) + { + fprintf( stderr, "Unable to connect to rtcm-sc104 source host: %s\n", host ); + // exit(1); + } + Gps.SetTimeout( timeout * 1000000L ); + } + else if ( listen ) + { + if ( dsrc_wsm ) + { + // listen on WSM control channel for DSRC MSG_RTCM_Corrections + } + else + { + + } + } + + // output + if ( mcast ) + { + int bcast = Gps.GpsBroadcast( mcast ); + + if ( bcast < 0 ) + { + fprintf( stderr, "Unable to create UDP broadcast!\n" ); + exit(1); + } + } + + // logging + if ( outfile ) + Gps.LogOpen( outfile ); + + // TCP listener + if ( Gps.StartService( GPSD_NAME, NULL, service, debug ) >= 0 ) + { + return Gps.RunService(); + } + + return 1; +} diff --git a/daemons/include b/daemons/include new file mode 120000 index 0000000..f5030fe --- /dev/null +++ b/daemons/include @@ -0,0 +1 @@ +../include \ No newline at end of file diff --git a/daemons/lib b/daemons/lib new file mode 120000 index 0000000..dc598c5 --- /dev/null +++ b/daemons/lib @@ -0,0 +1 @@ +../lib \ No newline at end of file diff --git a/daemons/logd/CMakeLists.txt b/daemons/logd/CMakeLists.txt new file mode 100644 index 0000000..05fcb6c --- /dev/null +++ b/daemons/logd/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME logd) +project(Cnomicon-Daemon) +set(TARGET ${NAME}) +set(CMAKE_INSTALL_PREFIX ..) + +# includes +include_directories( + /usr/include/libxml2 + ../include/libnet++ ../include) +link_directories(../lib) +link_libraries(net++ net pthread rt) + +# sources +set(SRCS + LogDaemon.cpp + ) + +# executables +add_executable(${TARGET} ${TARGET}.cpp ${SRCS}) + +install(TARGETS ${TARGET} DESTINATION sbin) diff --git a/daemons/logd/LogDaemon.cpp b/daemons/logd/LogDaemon.cpp new file mode 100644 index 0000000..d8f0b8f --- /dev/null +++ b/daemons/logd/LogDaemon.cpp @@ -0,0 +1,139 @@ +// +// Log Daemon +// Neal Probert +// + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "UriParse.h" +#include "LogDaemon.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +LogDaemon::LogDaemon() +{ + // logging + log_open( LOGD_NAME ); +} + +LogDaemon::~LogDaemon() +{ +} + +/* UDP ***********************************************************************/ + +int LogDaemon::ClientInOut( char *buf, int n, int max ) +{ + if ( n > 0 ) + { + Dprintf( "%s\n", buf ); + Log.LogWrite( buf, n ); + } + + // no response + return 0; +} + +/* log ***********************************************************************/ + +int LogDaemon::LogOpen( const char *uri ) +{ + if ( Log.LogOpen( uri ) ) + { + return 1; + } + return -1; +} + +int LogDaemon::LogPlayback( void ) +{ + timeval tv; + tv.tv_sec = 0L; + tv.tv_usec = 0L; + + // read log input + // send message + // if ( strlen( logbuf ) ) + // ClientCast( logbuf, strlen(logbuf) ); + + // read next message + if ( Log.LogRead( &tv, logbuf, sizeof(logbuf) ) > 0 ) + { + // is this first one? + if ( logcount == 0 ) + { + // fudge it so it kicks off 10 seconds later + loglast.tv_sec = tv.tv_sec - 10; + loglast.tv_usec = tv.tv_usec; + } + logcount++; + + // diff between this one and last + if ( loglast.tv_usec > tv.tv_usec ) + { + // carry + tv.tv_sec--; + tv.tv_usec += 1000000L; + } + timeval sv = tv; + + // diff is timeout period + tv.tv_sec = tv.tv_sec - loglast.tv_sec; + tv.tv_usec = tv.tv_usec - loglast.tv_usec; + + // mark last log record + loglast = sv; + } + else + return 1; + + // set next timeout + SetTimeout( tv ); + return 1; +} diff --git a/daemons/logd/LogDaemon.h b/daemons/logd/LogDaemon.h new file mode 100644 index 0000000..bb05aca --- /dev/null +++ b/daemons/logd/LogDaemon.h @@ -0,0 +1,74 @@ +// +// Log Daemon +// Neal Probert +// + +/* prevent multiple inclusions */ +#ifndef __LogDaemon__ +#define __LogDaemon__ + +/* includes *****************************************************************/ + +#include "UdpDaemon.h" +#include "LogData.h" + +/* defines ******************************************************************/ + +#define LOGD_NAME "logd" +#define LOGD_SERVICE "logd" +#ifndef LOGD_PORT +#define LOGD_PORT "2940" +#endif + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Listens to OBE HeartBeat messages +// +class LogDaemon : public UdpDaemon { + // public data +public: + + // private data +private: + // Logging output + LogData Log; + + // log playback + char logbuf[512]; + timeval loglast; + unsigned int logcount; + + // private methods + + // static data + + // public methods +public: + // constructors + LogDaemon(); + + // destructor + virtual ~LogDaemon(); + + // virtual functions + int ClientInOut( char *buf, int n, int max ); + + // public methods + int LogOpen( const char *uri ); + int LogWrite( const char *log ) { return Log.LogWrite(log,strlen(log)); }; + void SetBinary(void) { Log.SetBinary(); }; + + int LogPlayback( void ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/daemons/logd/logd.cpp b/daemons/logd/logd.cpp new file mode 100644 index 0000000..5f20d78 --- /dev/null +++ b/daemons/logd/logd.cpp @@ -0,0 +1,145 @@ +// +// Serial Daemon (similar to ser2net) +// Neal Probert +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "LogDaemon.h" + +#include "netlib.h" + +extern int optind, opterr, optopt; + +// +// any port +// + +static const char *helptext = +"logd [options]\n" +"\t-d debug (foreground with stdio)\n" +"\t-h help\n" +"\t-i infile input log format:/path/to/file.log\n" +"\t-o logfile output log format:/path/to/file.log\n" +"\t-S service UDP service\n"; + + +int main(int argc, char **argv) +{ + char c; /* we have character */ + + LogDaemon Log; + + /* options */ + int debug = 0; // run in foreground, leaves stdio open + + /* connections */ + const char *file = NULL; + const char *log = NULL; + const char *service = LOGD_PORT; + + // add command line args + while ( (c = getopt( argc, argv, "bdhi:o:S:" )) > 0 ) + { + switch ( c ) + { + case 'b': + Log.SetBinary(); + break; + case 'd': + debug = 1; + break; + case 'h': + puts( helptext ); + return 0; + case 'i': + file = optarg; + break; + case 'o': + log = optarg; + break; + case 'S': + service = optarg; + break; + default: + fprintf( stderr, "Unknown option -%c\n", c ); + exit(1); + } + } + + if ( log ) + { + if ( Log.LogOpen( log ) < 0 ) + { + fprintf( stderr, "Unable to open log file: %s!\n", log ); + exit(1); + } + } + else + { + fprintf( stderr, "Must specify a MySQL connection: mysql://user:pass@host/database/table\n" ); + exit(1); + } + + if ( file ) + { + char buf[4096]; + int n = 0; + + if ( strcmp( file, "-") == 0 ) + { + while ( fgets(buf, sizeof(buf), stdin) ) + { + Log.LogWrite( buf ); + n++; + } + } + else + { + // import + FILE *import = fopen( file, "r" ); + if ( import ) + { + // read into database + while ( fgets( buf, sizeof(buf), import ) ) + { + // check for header? + + Log.LogWrite( buf ); + n++; + } + printf( "Imported %d lines into log\n", n ); + log_printf( "Imported %d lines into log\n", n ); + } + else + { + fprintf( stderr, "Unable to import log data: %s\n", file ); + return 1; + } + } + return 0; + } + else + { + // UDP listener + if ( Log.StartService( LOGD_NAME, "0.0.0.0", service, debug ) >= 0 ) + return Log.RunService(); + + return 1; + } + return 0; +} diff --git a/daemons/rtcmd/CMakeLists.txt b/daemons/rtcmd/CMakeLists.txt new file mode 100644 index 0000000..0d27246 --- /dev/null +++ b/daemons/rtcmd/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME rtcmd) +project(Cnomicon-Daemon) +set(TARGET ${NAME}) +set(CMAKE_INSTALL_PREFIX ..) + +# includes +include_directories( + /usr/include/libxml2 + ../include/libgps++ ../include/libnet++ ../include) +link_directories(../lib) +link_libraries(gps++ net++ net emb pthread rt) + +# sources +set(SRCS + RtcmDaemon.cpp + ) + +# executables +add_executable(${TARGET} ${TARGET}.cpp ${SRCS}) + +install(TARGETS ${TARGET} DESTINATION sbin) diff --git a/daemons/rtcmd/RtcmDaemon.cpp b/daemons/rtcmd/RtcmDaemon.cpp new file mode 100644 index 0000000..957e7b2 --- /dev/null +++ b/daemons/rtcmd/RtcmDaemon.cpp @@ -0,0 +1,307 @@ +// +// RTCM Daemon +// Neal Probert +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "UriParse.h" +#include "RtcmDaemon.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +RtcmDaemon::RtcmDaemon() +{ + log_open( RTCMD_NAME ); + + strcpy( Uri, "" ); + SerialIn = DgpsIn = NtripIn = DgramIn = -1; + nClients = 0; + + SetClientTimeout(false); // don't reset timeout on client activity +} + +RtcmDaemon::~RtcmDaemon() +{ +} + +int RtcmDaemon::ServerTimeout(void) +{ + // should not timeout, try reconnecting + if ( nClients > 0 ) + RtcmReconnect(); + else + RtcmDisconnect(); + return 0; +} + +int RtcmDaemon::ServerSocket(void) +{ + char buf[2048]; + int n = 0, xmit = 0; + + if ( IsSet( DgpsIn ) ) + { + // from RTCM server + n = Dgps.DgpsRead( buf, sizeof(buf) ); + + // xmit + if ( n > 0 ) + xmit = n; + else if ( n == 0 ) + { + log_error( "Remote RTCM server closed!" ); + RtcmDisconnect(); + } + else + { + log_error( "Remote RTCM server read error!" ); + n = 0; + } + ResetServerTimeout(); + } + else if ( IsSet( NtripIn ) ) + { + // from NTRIP server + n = Ntrip.NtripRead( (unsigned char *)buf, sizeof(buf) ); + + // xmit + if ( n > 0 ) + xmit = n; + else if ( n == 0 ) + { + log_error( "Remote NTRIP server closed us!" ); + RtcmDisconnect(); + } + else + { + log_error( "Remote NTRIP server read error!" ); + n = 0; + } + ResetServerTimeout(); + } + else if ( IsSet( SerialIn ) ) + { + // from base station + n = Rtcm.RtcmRead( buf, sizeof(buf) ); + + // xmit + if ( n > 0 ) + xmit = n; + } + + // pass on RTCM data + if ( xmit > 0 ) + { + ClientCast( buf, xmit ); + } + return n; +} + +void RtcmDaemon::ClientCast( const char *buf, int n ) +{ + // broadcast it + Bcast.SendTo( buf, n ); + + // send to clients + TcpServer::ClientCast( buf, n ); +} + +int RtcmDaemon::ClientIn( int sock, const char *buf, int n ) +{ + if ( n <= 0 ) + return 0; + + // log messages from client, no responses + if ( *buf == '$' ) + { + // update to OpenGTS + + + // logging + char name[128]; + char out[1024]; + + // need to add ip address + SockName( sock, name, sizeof(name) ); + + n = snprintf( out, sizeof(out), "[%s] %s", name, buf ); + + Log.LogWrite( out, n ); + } + else if ( n > 0 ) + log_write( buf ); + + return 0; +} + +int RtcmDaemon::ClientUp( int sock ) +{ + // connect source on demand + if ( nClients++ == 0 ) + { + // re-connect + RtcmConnect( (const char *)Uri ); + } + + return 1; +} + +void RtcmDaemon::ClientDown( int sock ) +{ + // disconnect source + if ( --nClients <= 0 ) + { + RtcmDisconnect(); + nClients = 0; + } +} + +int RtcmDaemon::RtcmOpen( const char *uri ) +{ + // already connected? + if ( SerialIn >= 0 ) + Rtcm.RtcmClose(); + + UriParse parsed; + parsed.setRate( 38400 ); + parsed.setUri( uri ); + + // serial device + SerialIn = Rtcm.RtcmOpen( parsed.getPath(), parsed.getRate() ); + + // add listener + if ( SerialIn >= 0 ) + { + strcpy( Uri, uri ); + AddFd( SerialIn ); + } + return SerialIn; +} + +int RtcmDaemon::RtcmConnect( const char *uri ) +{ + // already connected? + if ( DgpsIn >= 0 ) + return DgpsIn; + else if ( NtripIn >= 0 ) + return NtripIn; + + UriParse parsed; + parsed.setService( RTCMD_PORT ); + parsed.setRate( 57600 ); + parsed.setUri( uri ); + + const char *proto = parsed.getProto(); + + if ( strcmp( proto, "dgps" ) == 0 || strcmp( proto, "dgpsip" ) == 0 ) + { + // RTCM server (dgpsip) + DgpsIn = Dgps.DgpsConnect( parsed.getHost(), parsed.getService() ); + + // add listener + if ( DgpsIn >= 0 ) + { + strcpy( Uri, uri ); + AddFd( DgpsIn ); + } + + return DgpsIn; + } + else if ( strcmp( proto, "ntrip" ) == 0 ) + { + // NTRIP caster + NtripIn = Ntrip.NtripConnect( uri ); + + // add listener + if ( NtripIn >= 0 ) + { + strcpy( Uri, uri ); + AddFd( NtripIn ); + } + + return NtripIn; + } + return -1; +} + +void RtcmDaemon::RtcmDisconnect( void ) +{ + if ( DgpsIn >= 0 || NtripIn >= 0 ) + log_printf( "Remote RTCM/NTRIP dis-connected, no clients listening" ); + else + return; + Dgps.DgpsClose(); + DelFd( DgpsIn ); + Ntrip.NtripClose(); + DelFd( NtripIn ); + DgpsIn = NtripIn = -1; +} + +void RtcmDaemon::RtcmReconnect( void ) +{ + if ( nClients == 0 ) + return; + log_printf( "Remote RTCM/NTRIP timed out, reconnecting" ); + Dgps.DgpsClose(); + DelFd( DgpsIn ); + Ntrip.NtripClose(); + DelFd( NtripIn ); + DgpsIn = NtripIn = -1; + RtcmConnect( Uri ); +} + +int RtcmDaemon::RtcmBroadcast( const char *host, const char *port ) +{ + return Bcast.Caster( host, port ); +} diff --git a/daemons/rtcmd/RtcmDaemon.h b/daemons/rtcmd/RtcmDaemon.h new file mode 100644 index 0000000..5743d08 --- /dev/null +++ b/daemons/rtcmd/RtcmDaemon.h @@ -0,0 +1,94 @@ +// +// RTCM Daemon +// Neal Probert +// + +/* prevent multiple inclusions */ +#ifndef __RtcmDaemon__ +#define __RtcmDaemon__ + +/* includes *****************************************************************/ + +#include "TcpDaemon.h" +#include "UdpClient.h" +#include "UdpCaster.h" +#include "GpsDevice.h" +#include "RtcmDevice.h" +#include "DgpsClient.h" +#include "NtripClient.h" +#include "Logging.h" + +/* defines ******************************************************************/ + +/* software details */ +#define RTCMD_NAME "rtcmd" +#define RTCMD_VERSION "0.1" + +/* default service and port */ +#define RTCMD_SERVICE "rtcm-sc104" +#define RTCMD_PORT "2101" + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class RtcmDaemon : public TcpDaemon, public Logging { + // public data +public: + DgpsClient Dgps; + NtripClient Ntrip; + RtcmDevice Rtcm; + + // private data +private: + char Uri[1024]; + + // FDs + int DgpsIn; + int SerialIn; + int DgramIn; + int NtripIn; + + // UDP broadcast + UdpCaster Bcast; + + int nClients; + + // static data + + // public methods +public: + // constructors + RtcmDaemon(); + + // destructor + virtual ~RtcmDaemon(); + + // virtual functions + int ServerTimeout(void); + int ServerSocket(void); + int ClientIn( int sock, const char *buf, int n ); + void ClientCast( const char *buf, int n ); + int ClientUp( int sock ); + void ClientDown( int sock ); + + // public methods + int RtcmOpen( const char *uri ); // serial device + + int RtcmConnect( const char *uri ); + void RtcmDisconnect( void ); + void RtcmReconnect( void ); + int RtcmBroadcast( const char *host = NULL, const char *port = RTCMD_SERVICE ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/daemons/rtcmd/rtcmd.cpp b/daemons/rtcmd/rtcmd.cpp new file mode 100644 index 0000000..f7ca050 --- /dev/null +++ b/daemons/rtcmd/rtcmd.cpp @@ -0,0 +1,145 @@ +// +// RTCM Daemon (rtcmd.cpp) +// Neal Probert +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "RtcmDaemon.h" + +#include "netlib.h" + +extern int optind, opterr, optopt; + +// +// This was written because gpsd didn't have working RTCM104_SERVICE +// or the ability to do UDP broadcasts. +// + +static const char *helptext = +"rtcm -r dgpsip://host [options]\n" +"\t-d debug (foreground with stdio)\n" +"\t-h help\n" +"\t-m network UDP broadcast RTCM data\n" +"\t-r uri dgpsip://host or ntrip://user@pass:host:port/mount\n" +"\t-t uri OpenGTS server\n" +"\t-w WDM DSRC broadcast RTCM corrections\n" +"\t-S service TCP service (default=2101)\n" +"\t-T timeout reconnect timeout in seconds (default=15)\n"; + +static RtcmDaemon Rtcm; + +int main(int argc, char **argv) +{ + char c; /* we have character */ + + /* options */ + int debug = 0; // run in foreground, leaves stdio open + int dsrc_wsm = 0; + int timeout = 15; + + /* dgpsip server */ + char *host = NULL; + + /* service/port */ + char *service = (char *)"2101"; // "rtcm-sc104" + + /* udp broadcast */ + char *mcast = NULL; + + /* log */ + char *outfile = NULL; + + // add command line args + while ( (c = getopt( argc, argv, "dhm:o:r:s:t:S:T:" )) > 0 ) + { + switch ( c ) + { + case 'd': + debug = 1; + break; + case 'h': + puts( helptext ); + return 0; + case 'm': // udp broadcast + mcast = optarg; + break; + case 'o': + break; + case 'r': // rtcm-sc104 host + host = optarg; + break; + case 't': + break; + case 'S': + service = optarg; + break; + case 'T': + timeout = atoi(optarg); + if ( timeout == 0 ) + timeout = 30; + break; + case 'w': // DSRC WSM broadcast or listen + fprintf( stderr, "DSRC WSM support not yet available!\n" ); + // dsrc_wsm = 1; + break; + default: + fprintf( stderr, "Unknown option -%c\n", c ); + exit(1); + } + } + + // input + if ( host ) + { + Rtcm.SetTimeout( timeout * 1000000L ); + + // RTCM server + int remote = Rtcm.RtcmConnect( host ); + + if ( remote < 0 ) + { + fprintf( stderr, "Unable to connect to rtcm-sc104 source host: %s\n", host ); + if ( debug ) + exit(1); + } + } + + // output + if ( mcast ) + { + int bcast = Rtcm.RtcmBroadcast( mcast ); + + if ( bcast < 0 ) + { + fprintf( stderr, "Unable to create UDP broadcast!\n" ); + exit(1); + } + } + else if ( dsrc_wsm ) + { + } + + if ( outfile ) + Rtcm.LogOpen( outfile, 0 ); + + // TCP listener + if ( Rtcm.StartService( RTCMD_NAME, NULL, service, debug ) >= 0 ) + return Rtcm.RunService(); + + return 1; +} diff --git a/daemons/rtcmd/test-mili.sh b/daemons/rtcmd/test-mili.sh new file mode 100755 index 0000000..0c27127 --- /dev/null +++ b/daemons/rtcmd/test-mili.sh @@ -0,0 +1,7 @@ +!/bin/sh + +rm /var/log/cnomicon/rtcmd.log + +../../build/daemons/rtcmd/rtcmd -d -r ntrip://nprobert:p3x-mdotcors@148.149.0.87:10002/LIVONIA_RTCM2.3GPS + +more /var/log/cnomicon/rtcmd.log diff --git a/daemons/sbin b/daemons/sbin new file mode 120000 index 0000000..d48a771 --- /dev/null +++ b/daemons/sbin @@ -0,0 +1 @@ +../sbin \ No newline at end of file diff --git a/daemons/seriald/CMakeLists.txt b/daemons/seriald/CMakeLists.txt new file mode 100644 index 0000000..94243af --- /dev/null +++ b/daemons/seriald/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME seriald) +project(Cnomicon-Daemon) +set(TARGET ${NAME}) +set(CMAKE_INSTALL_PREFIX ..) + +# includes +include_directories( + /usr/include/libxml2 + ../include/libnet++ ../include) +link_directories(../lib) +link_libraries(net++ net pthread rt) + +# sources +set(SRCS + SerialDaemon.cpp + ) + +# executables +add_executable(${TARGET} ${TARGET}.cpp ${SRCS}) + +install(TARGETS ${TARGET} DESTINATION sbin) diff --git a/daemons/seriald/SerialDaemon.cpp b/daemons/seriald/SerialDaemon.cpp new file mode 100644 index 0000000..6aab343 --- /dev/null +++ b/daemons/seriald/SerialDaemon.cpp @@ -0,0 +1,235 @@ +// +// Serial Daemon +// Neal Probert +// + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "UriParse.h" +#include "SerialDaemon.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +SerialDaemon::SerialDaemon() +{ + // logging + log_open( SERIALD_NAME ); + + m_SerialIn = m_RemoteIn = m_DgramIn = -1; + + m_framed = 0; + bzero(m_Framing,sizeof(m_Framing)); +} + +SerialDaemon::~SerialDaemon() +{ + if ( m_SerialIn >= 0 ) + close( m_SerialIn ); +} + +/* TCP ***********************************************************************/ + +int SerialDaemon::ServerSocket(void) +{ + char buf[2048]; + int n = 0; + + if ( IsSet( m_RemoteIn ) ) + { + // from server + n = Client.Recv( buf, sizeof(buf) ); + + if ( n > 0 ) + { + // send frame + if ( m_framed ) + { + m_Framing[m_framed-2] = n >> 8; + m_Framing[m_framed-1] = n; + write( m_SerialIn, m_Framing, m_framed ); + } + + // send data + write( m_SerialIn, buf, n ); + } + } + else if ( IsSet( m_SerialIn ) ) + { + // data from device + n = read( m_SerialIn, buf, sizeof(buf) ); + + // parse data + + if ( n>0 ) + ClientCast( buf, n ); + } + else if ( IsSet( m_DgramIn ) ) + { + // packet from UDP broadcast + n = Dgram.RecvFrom( buf, sizeof(buf) ); + + // send to device + if ( n > 0 ) + { + // send frame + if ( m_framed ) + { + m_Framing[m_framed-2] = n >> 8; + m_Framing[m_framed-1] = n; + write( m_SerialIn, m_Framing, m_framed ); + } + + // send data + write( m_SerialIn, buf, n ); + } + } + return n; +} + +int SerialDaemon::ClientIn( int sock, const char *buf, int n ) +{ + return write( m_SerialIn, buf, n ); +} + +void SerialDaemon::ClientCast( const char *buf, int n ) +{ + // broadcast it + Bcast.SendTo( buf, n ); + + // send to clients + TcpServer::ClientCast( buf, n ); +} + +/* GPS ***********************************************************************/ + +int SerialDaemon::SerialOpen( const char *device, int baud ) +{ + UriParse parsed; + parsed.setRate( baud ); + parsed.setUri( device ); + + int binary = 0; + + // parse type + if ( strlen( parsed.getProto() ) ) + { + if ( strcasecmp( parsed.getProto(), "binary" ) == 0 ) + binary = 1; + } + + // open device + m_SerialIn = serial_open( (char*)parsed.getPath(), parsed.getRate(), binary, binary?1:0 ); + + // check + if ( m_SerialIn < 0 ) + return m_SerialIn; + + // add listener + AddFd( m_SerialIn ); + + return m_SerialIn; +} + +int SerialDaemon::TcpConnect( const char *uri ) +{ + UriParse parsed; + parsed.setUri( uri ); + + const char *proto = parsed.getProto(); + + if ( strcasecmp( proto, "http" ) == 0 || + strcasecmp( proto, "https" ) == 0 ) + { + // web site + } + else if ( strcasecmp( proto, "telnet" ) == 0 || + strlen( proto ) == 0 ) + { + // straight TCP client + m_RemoteIn = Client.Connect( parsed.getHost(), parsed.getService() ); + } + + return m_RemoteIn; +} + +int SerialDaemon::UdpListen( const char *uri ) +{ + m_DgramIn = Dgram.ListenUri( uri ); + + if ( m_DgramIn > 0 ) + AddFd( m_DgramIn ); + + return m_DgramIn; +} + +int SerialDaemon::UdpBroadcast( const char *uri ) +{ + return Bcast.CasterUri( uri ); +} + +void SerialDaemon::SetFrame( const char *frame, int n ) +{ + if ( n ) + { + // string + strncpy( m_Framing, frame, sizeof(m_Framing)-2 ); + m_framed = strlen(m_Framing)+2; + } + else + { + // hex + unsigned long value = atol( frame ); + + m_framed = 6; + m_Framing[0] = value >> 24; + m_Framing[1] = value >> 16; + m_Framing[2] = value >> 8; + m_Framing[3] = value; + } +} diff --git a/daemons/seriald/SerialDaemon.h b/daemons/seriald/SerialDaemon.h new file mode 100644 index 0000000..d3769cd --- /dev/null +++ b/daemons/seriald/SerialDaemon.h @@ -0,0 +1,92 @@ +// +// Serial Daemon +// Neal Probert +// + +/* prevent multiple inclusions */ +#ifndef __SerialDaemon__ +#define __SerialDaemon__ + +/* includes *****************************************************************/ + +#include "bzlib.h" + +#include "TcpDaemon.h" +#include "TcpClient.h" +#include "UdpClient.h" +#include "UdpCaster.h" + +#include "LogData.h" + +/* defines ******************************************************************/ + +#define SERIALD_NAME "seriald" +#define SERIALD_SERVICE "seriald" +#define SERIALD_PORT "2942" + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class SerialDaemon : public TcpDaemon { + // public data +public: + + // private data +private: + // FDs + int m_SerialIn; + int m_RemoteIn; + int m_DgramIn; + + // TCP client + TcpClient Client; + + // UDP listen + UdpClient Dgram; + + // UDP broadcast + UdpCaster Bcast; + + // misc + int m_framed; + char m_Framing[8]; + + // private methods + + // static data + + // public methods +public: + // constructors + SerialDaemon(); + + // destructor + virtual ~SerialDaemon(); + + // virtual functions + int ServerSocket(void); + int ClientIn( int sock, const char *buf, int n ); + void ClientCast( const char *buf, int n ); + + // public methods + int SerialOpen( const char *dev, int baud ); + int TcpConnect( const char *uri ); + + int UdpBroadcast( const char *uri ); + int UdpListen( const char *uri ); + + void SetFrame( const char *frame, int n=0 ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/daemons/seriald/seriald.cpp b/daemons/seriald/seriald.cpp new file mode 100644 index 0000000..3e442fa --- /dev/null +++ b/daemons/seriald/seriald.cpp @@ -0,0 +1,175 @@ +// +// Serial Daemon (similar to ser2net) +// Neal Probert +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "SerialDaemon.h" + +#include "netlib.h" + +extern int optind, opterr, optopt; + +// +// port 2748 +// + +static const char *helptext = +"seriald -s /dev/ttyS0:57600 [options]\n" +"\t-d debug (foreground with stdio)\n" +"\t-h help\n" +"\t-l UDP listen for data\n" +"\t-m network broadcast data\n" +"\t-o outfile output message log\n" +"\t-r uri http://host.domain.com/\n" +"\t-s port /dev/ttyS0:baud\n" +"\t-S service TCP service\n"; + +int main(int argc, char **argv) +{ + char c; /* we have character */ + + SerialDaemon Ser; + + /* options */ + int debug = 0; // run in foreground, leaves stdio open + + /* dgpsip server */ + char *host = NULL; + + /* service/port */ + char *service = (char *)SERIALD_PORT; + + /* serial port */ + char *primary = NULL; + int baud = 57600; + + /* udp broadcast */ + char *mcast = NULL; + + /* udp listener */ + int listen = 0; + + // add command line args + while ( (c = getopt( argc, argv, "df:hm:lr:s:S:" )) > 0 ) + { + switch ( c ) + { + case 'd': + debug = 1; + break; + case 'f': + Ser.SetFrame( optarg ); + break; + case 'h': + puts( helptext ); + return 0; + case 'l': // udp/wdm listen + listen = 1; + break; + case 'm': // udp broadcast + mcast = optarg; + break; + case 'r': // remote host + host = optarg; + break; + case 's': // serial device + primary = optarg; + break; + case 'S': + service = optarg; + break; + default: + fprintf( stderr, "Unknown option -%c\n", c ); + exit(1); + } + } + + // check options + if ( !primary ) + { + fprintf( stderr, "Must have a serial device to communicate with!\n" ); + exit(1); + } + if ( mcast && listen ) + { + fprintf( stderr, "Cannot do both UDP broadcast/multicast and listening!\n" ); + exit(1); + } + + // input + if ( primary ) + { + // open GPS device on serial port + int serial = Ser.SerialOpen( primary, baud ); + + if ( serial < 0 ) + { + fprintf( stderr, "Unable to open primary serial device: %s @ %d !\n", primary, baud ); + exit(1); + + } + } + else + { + fprintf( stderr, "No task specified: use -l or -s !\n" ); + exit(1); + } + + // corrections + if ( host ) + { + // RTCM server + int remote = Ser.TcpConnect( host ); + + if ( remote < 0 ) + { + fprintf( stderr, "Unable to connect to remote host: %s\n", host ); + exit(1); + } + } + else if ( listen ) + { + // listen on UDP broadcasts for RTCM corrrections + int dgram = Ser.UdpListen( NULL ); + + if ( dgram < 0 ) + { + fprintf( stderr, "Unable to listen on UDP broadcast!\n" ); + exit(1); + } + } + + // output + if ( mcast ) + { + int bcast = Ser.UdpBroadcast( mcast ); + + if ( bcast < 0 ) + { + fprintf( stderr, "Unable to create UDP broadcast!\n" ); + exit(1); + } + } + + // TCP listener + if ( Ser.StartService( SERIALD_NAME, NULL, service, debug ) >= 0 ) + return Ser.RunService(); + + return 1; +} diff --git a/daemons/stdiod/CMakeLists.txt b/daemons/stdiod/CMakeLists.txt new file mode 100644 index 0000000..d0a398b --- /dev/null +++ b/daemons/stdiod/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME stdiod) +project(Cnomicon-Daemon) +set(TARGET ${NAME}) +set(CMAKE_INSTALL_PREFIX ..) + +# includes +include_directories( + /usr/include/libxml2 + ../include/libnet++ ../include) +link_directories(../lib) +link_libraries(net++ net pthread rt) + +# sources +set(SRCS + StdioDaemon.cpp + ) + +# executables +add_executable(${TARGET} ${TARGET}.cpp ${SRCS}) + +install(TARGETS ${TARGET} DESTINATION sbin) diff --git a/daemons/stdiod/StdioDaemon.cpp b/daemons/stdiod/StdioDaemon.cpp new file mode 100644 index 0000000..0f3f199 --- /dev/null +++ b/daemons/stdiod/StdioDaemon.cpp @@ -0,0 +1,162 @@ +// +// Stdio Daemon +// Neal Probert +// + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "UriParse.h" +#include "StdioDaemon.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +StdioDaemon::StdioDaemon() +{ + // logging + log_open( STDIOD_NAME ); + + m_RemoteIn = m_DgramIn = -1; + m_Stdin = 0; + AddFd( m_Stdin ); +} + +StdioDaemon::~StdioDaemon() +{ +} + +/* TCP ***********************************************************************/ + +int StdioDaemon::ServerSocket(void) +{ + char buf[2048]; + int n = 0; + + if ( IsSet( m_RemoteIn ) ) + { + // from server (tbd) + int n = Client.Recv( buf, sizeof(buf) ); + + if ( n > 0 ) + fputs( buf, stdout ); + } + else if ( IsSet( m_Stdin ) ) + { + // packet from GPS device + while ( fgets( buf, sizeof(buf), stdin ) ) + { + int n = strlen( buf ); + + if ( n>0 ) + ClientCast( buf, n ); + } + } + else if ( IsSet( m_DgramIn ) ) + { + // RTCM packet from UDP broadcast (once a minute) + int n = Dgram.RecvFrom( buf, sizeof(buf) ); + + // send to GPS device + if ( n > 0 ) + fputs( buf, stdout ); + } + return n; +} + +int StdioDaemon::ClientIn( int sock, const char *buf, int n ) +{ + return fputs( buf, stdout ); +} + +void StdioDaemon::ClientCast( const char *buf, int n ) +{ + // broadcast it + Bcast.SendTo( buf, n ); + + // send to clients + TcpServer::ClientCast( buf, n ); +} + +/* GPS ***********************************************************************/ + +int StdioDaemon::TcpConnect( const char *uri ) +{ + UriParse parsed; + parsed.setUri( uri ); + + const char *proto = parsed.getProto(); + + if ( strcasecmp( proto, "http" ) == 0 || + strcasecmp( proto, "https" ) == 0 ) + { + // web site + } + else if ( strcasecmp( proto, "telnet" ) == 0 || + strlen( proto ) == 0 ) + { + // straight TCP client + m_RemoteIn = Client.Connect( parsed.getHost(), parsed.getService() ); + } + + return m_RemoteIn; +} + +int StdioDaemon::UdpListen( const char *uri ) +{ + m_DgramIn = Dgram.ListenUri( uri ); + + if ( m_DgramIn > 0 ) + AddFd( m_DgramIn ); + + return m_DgramIn; +} + +int StdioDaemon::UdpBroadcast( const char *uri ) +{ + return Bcast.CasterUri( uri ); +} diff --git a/daemons/stdiod/StdioDaemon.h b/daemons/stdiod/StdioDaemon.h new file mode 100644 index 0000000..11f8fac --- /dev/null +++ b/daemons/stdiod/StdioDaemon.h @@ -0,0 +1,87 @@ +// +// Stdio Daemon +// Neal Probert +// + +/* prevent multiple inclusions */ +#ifndef __StdioDaemon__ +#define __StdioDaemon__ + +/* includes *****************************************************************/ + +#include "bzlib.h" + +#include "TcpDaemon.h" +#include "TcpClient.h" +#include "UdpClient.h" +#include "UdpCaster.h" + +#include "LogData.h" + +/* defines ******************************************************************/ + +#define STDIOD_NAME "stdiod" +#define STDIOD_SERVICE "stdiod" +#define STDIOD_PORT "2941" + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class StdioDaemon : public TcpDaemon { + // public data +public: + + // private data +private: + // FDs + int m_Stdin; + int m_RemoteIn; + int m_DgramIn; + + // TCP client + TcpClient Client; + + // UDP listen + UdpClient Dgram; + + // UDP broadcast + UdpCaster Bcast; + + // misc + + // private methods + + // static data + + // public methods +public: + // constructors + StdioDaemon(); + + // destructor + virtual ~StdioDaemon(); + + // virtual functions + int ServerSocket(void); + int ClientIn( int sock, const char *buf, int n ); + void ClientCast( const char *buf, int n ); + + // public methods + int TcpConnect( const char *uri ); + + int UdpBroadcast( const char *uri ); + int UdpListen( const char *uri ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/daemons/stdiod/stdiod.cpp b/daemons/stdiod/stdiod.cpp new file mode 100644 index 0000000..15417ec --- /dev/null +++ b/daemons/stdiod/stdiod.cpp @@ -0,0 +1,140 @@ +// +// Stdio Daemon +// Neal Probert +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "StdioDaemon.h" + +#include "netlib.h" + +extern int optind, opterr, optopt; + +// +// any port +// + +static const char *helptext = +"stdiod [options]\n" +"\t-d debug (foreground with stdio)\n" +"\t-h help\n" +"\t-l UDP listen for data\n" +"\t-m network broadcast data\n" +"\t-S service TCP service\n"; + +int main(int argc, char **argv) +{ + char c; /* we have character */ + + StdioDaemon Std; + + /* options */ + int debug = 0; // run in foreground, leaves stdio open + + /* dgpsip server */ + char *host = NULL; + + /* udp broadcast */ + char *mcast = NULL; + + /* udp listener */ + char *listen = NULL; + + /* server */ + char *service = (char *)STDIOD_PORT; + + // add command line args + while ( (c = getopt( argc, argv, "dhm:l:r:S:" )) > 0 ) + { + switch ( c ) + { + case 'd': + debug = 1; + break; + case 'h': + puts( helptext ); + return 0; + case 'l': // udp listen + listen = optarg; + break; + case 'm': // udp broadcast + mcast = optarg; + break; + case 'r': // remote host + host = optarg; + break; + case 'S': + service = optarg; + break; + default: + fprintf( stderr, "Unknown option -%c\n", c ); + exit(1); + } + } + + // check options + if ( mcast && listen ) + { + fprintf( stderr, "Cannot do both UDP broadcast/multicast and listening!\n" ); + exit(1); + } + + // input + + // corrections + if ( host ) + { + // RTCM server + int remote = Std.TcpConnect( host ); + + if ( remote < 0 ) + { + fprintf( stderr, "Unable to connect to remote host: %s\n", host ); + exit(1); + } + } + else if ( listen ) + { + // listen on UDP broadcasts for RTCM corrrections + int dgram = Std.UdpListen( listen ); + + if ( dgram < 0 ) + { + fprintf( stderr, "Unable to listen on UDP broadcast!\n" ); + exit(1); + } + } + + // output + if ( mcast ) + { + int bcast = Std.UdpBroadcast( mcast ); + + if ( bcast < 0 ) + { + fprintf( stderr, "Unable to create UDP broadcast!\n" ); + exit(1); + } + } + + // TCP listener + if ( Std.StartService( STDIOD_NAME, NULL, service, debug ) >= 0 ) + return Std.RunService(); + + return 1; +} diff --git a/daemons/trackd/TrackDaemon.cpp b/daemons/trackd/TrackDaemon.cpp new file mode 100644 index 0000000..997c076 --- /dev/null +++ b/daemons/trackd/TrackDaemon.cpp @@ -0,0 +1,194 @@ +// +// Track Daemon +// Neal Probert +// + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "NmeaParser.h" +#include "UriParse.h" +#include "TrackDaemon.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +TrackDaemon::TrackDaemon() +{ + log_open( TRACKD_NAME ); + + gethostname( Id, sizeof(Id) ); +} + +TrackDaemon::~TrackDaemon() +{ +} + +/* UDP ***********************************************************************/ + +void TrackDaemon::PositionListener( const PositionFix &Pos, const ErrorInfo &Err ) +{ + char buf[256]; + int n = 0; + char datetime[40]; + + // convert date & time (MySQL friendly) + struct tm *tmp = gmtime(&Pos.Time.tv_sec); + strftime( datetime, sizeof(datetime), "%Y-%m-%d,%T", tmp ); + + // convert to unicsv + n = snprintf( buf, sizeof(buf), + "%s,%s,%lf,%lf,%lf,%lf,%lf\n", + Id, // name + datetime, // time + Pos.Latitude, // lat + Pos.Longitude, // long + Pos.Altitude, // elev + Pos.Speed, // speed (m/sec -> kph) + Pos.Heading // heading + ); + + // send upstream + if ( TrackOut >= 0 ) + Track.SendTo( buf, n ); + + // log locally + Log.LogWrite( buf, n ); +} + +void TrackDaemon::TimeListener( const struct timeval &tv ) +{ +} + +int TrackDaemon::ServerSocket(void) +{ + char buf[2048]; + int n = 0; + + if ( IsSet( GpsIn ) ) + { + // Gpsd + if ( (n = Gpsd.Recv( buf, sizeof(buf) )) > 0 ) + { + // use NMEA parser (should trigger on RMC or GGA) + Gps.Nmea.NmeaParse(buf); + } + } + return n; +} + +int TrackDaemon::ClientInOut( char *buf, int n, int max ) +{ + // check + if ( n <= 0 ) + return 0; + + // parse $PVII + if ( buf[0] == '$' ) + { + // use NMEA parser (should trigger on RMC or GGA) + Gps.Nmea.NmeaParse( buf ); + } + else + { + // forward + if ( TrackOut >= 0 ) + Track.SendTo( buf, n ); + + // log + Log.LogWrite( buf , n ); + } + + // no response + return 0; +} + +/* GPS ***********************************************************************/ + +int TrackDaemon::GpsdServer( const char *uri ) +{ + UriParse parsed; + parsed.setProto( "gpsd" ); + parsed.setService( "gpsd" ); + parsed.setUri( uri ); + bGpsd = 0; + + const char *proto = parsed.getProto(); + if ( !strlen(proto) ) + proto = "gpsd"; + GpsDeviceType type = Gps.Proto2Type( proto ); + + // open device + if ( strcmp( proto, "gpsd" ) == 0 || type == GPS_TYPE_UNDEF ) + GpsIn = Gpsd.GpsdConnect( parsed.getHost() ); + else + GpsIn = Gps.GpsOpen( parsed.getPath(), parsed.getRate(), type ); + + if ( GpsIn >= 0 ) + AddFd( GpsIn ); + return GpsIn; +} + +int TrackDaemon::TrackOpen( const char *uri ) +{ + UriParse parsed; + parsed.setService( TRACKD_PORT ); + parsed.setUri( uri ); + + // connect to remote web server to upload data + return TrackOut = Track.Connect( parsed.getHost(), TRACKD_PORT ); +} + +int TrackDaemon::LogOpen( const char *uri ) +{ + if ( Log.LogOpen( uri ) ) + { + Log.LogFields( "name,date,time,lat,long,ele,speed,head" ); + return 1; + } + return -1; +} diff --git a/daemons/trackd/TrackDaemon.h b/daemons/trackd/TrackDaemon.h new file mode 100644 index 0000000..36e819d --- /dev/null +++ b/daemons/trackd/TrackDaemon.h @@ -0,0 +1,89 @@ +// +// Track Daemon +// Neal Probert +// + +/* prevent multiple inclusions */ +#ifndef __TrackDaemon__ +#define __TrackDaemon__ + +/* includes *****************************************************************/ + +#include "bzlib.h" + +#include "UdpDaemon.h" +#include "TcpClient.h" +#include "UdpClient.h" +#include "Logging.h" + +#include "GpsdClient.h" +#include "GpsDevice.h" + +/* defines ******************************************************************/ + +#define TRACKD_NAME "trackd" +#define TRACKD_SERVICE "trackd" +#define TRACKD_PORT "2948" + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Listens to OBE HeartBeat messages +// +class TrackDaemon : public UdpDaemon, public GpsListener, public Logging { + // public data +public: + + // private data +private: + // my name + char Id[32]; + + // Gpsd client + GpsdClient Gpsd; // direct from GPSd + GpsDevice Gps; // or from serial port + bool bGpsd; // true for Gpsd + int GpsIn; // Gpsd or Gps + + // upstream trackd + UdpClient Track; // listener + int TrackOut; + + // NMEA parsing + + // private methods + + // static data + + // public methods +public: + // constructors + TrackDaemon(); + + // destructor + virtual ~TrackDaemon(); + + // virtual functions + int ServerSocket(void); + int ClientInOut( char *buf, int n, int max ); + + // public methods + int GpsdServer( const char *uri ); + void PositionListener( const PositionFix &Pos, const ErrorInfo &Err ); + void TimeListener( const struct timeval &Time ); + + void SetId( const char *id ) { strncpy(Id,id,sizeof(Id)-1); }; + int TrackOpen( const char *uri ); + int LogOpen( const char *uri ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/daemons/trackd/trackd.cpp b/daemons/trackd/trackd.cpp new file mode 100644 index 0000000..fdb233b --- /dev/null +++ b/daemons/trackd/trackd.cpp @@ -0,0 +1,132 @@ +// +// Serial Daemon (similar to ser2net) +// Neal Probert +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "TrackDaemon.h" + +#include "netlib.h" + +extern int optind, opterr, optopt; + +// +// any port +// + +static const char *helptext = + "stdiod [options]\n" + "\t-d debug (foreground with stdio)\n" + "\t-g host gpsd\n" + "\t-h help\n" + "\t-i id set my id\n" + "\t-c uri host:port source data (CardiacMonitor)\n" + "\t-o logfile format:/path/to/file.log\n" + "\t-r uri remote web host for upload\n" + "\t-S service TCP service\n"; + +int main(int argc, char **argv) +{ + char c; /* we have character */ + + TrackDaemon Track; + + /* options */ + int debug = 0; // run in foreground, leaves stdio open + + /* connections */ + char *gpsd = NULL; // "localhost"; + char *host = NULL; + char *id = NULL; + char *log = NULL; + char *service = TRACKD_PORT; + + // add command line args + while ( (c = getopt( argc, argv, "dg:hi:o:r:S:" )) > 0 ) + { + switch ( c ) + { + case 'd': + debug = 1; + break; + case 'g': + gpsd = optarg; + break; + case 'h': + puts( helptext ); + return 0; + case 'i': + id = optarg; + break; + case 'o': + log = optarg; + break; + case 'r': + host = optarg; + break; + case 'S': + service = optarg; + break; + default: + fprintf( stderr, "Unknown option -%c\n", c ); + exit(1); + } + } + + // set my id (hostname by default) + if ( id ) + Track.SetId( id ); + + // monitor + if ( gpsd ) + { + // GPSd + int remote = Track.GpsdServer( gpsd ); + + if ( remote < 0 ) + { + fprintf( stderr, "Unable to connect to gpsd: %s\n", gpsd ); +// exit(1); + } + } + + // output + if ( host ) + { + if ( Track.TrackOpen( host ) < 0 ) + { + fprintf( stderr, "Unable to open vehicle location server: %s!\n", host ); +// exit(1); + } + } + + if ( log ) + { + if ( !Track.LogOpen( log ) ) + { + fprintf( stderr, "Unable to open log file: %s!\n", log ); + exit(1); + } + } + + // TCP listener + if ( Track.StartService( TRACKD_NAME, NULL, service, debug ) >= 0 ) + return Track.RunService(); + + return 1; +} diff --git a/etc/cnomicon.conf b/etc/cnomicon.conf new file mode 100644 index 0000000..e2916e4 --- /dev/null +++ b/etc/cnomicon.conf @@ -0,0 +1,2 @@ +# other libs +/usr/local/cnomicon/lib diff --git a/include/CAN_Packet.h b/include/CAN_Packet.h new file mode 100644 index 0000000..829e5b0 --- /dev/null +++ b/include/CAN_Packet.h @@ -0,0 +1,61 @@ +#ifndef __CAN_PACKET_INCLUDE__ +#define __CAN_PACKET_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#ifdef __linux__ +#include +#endif + +/****************************************************************************** + * defines + *****************************************************************************/ + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +// all data is network byte order (big endian) +typedef struct _CAN_Packet { + uint32_t dwCounter; // incrementing counter + + // J2735 Part 1 floating point + float fSpeed; // meters/sec (m/s) + float fSteering; // degrees/sec + float fAccelLongitudinal; // meters/sec^2 + float fAccelLateral; // meters/sec^2 + float fAccelVertical; // meters/sec^2 + float fYawRate; // degrees/sec + float fVehicleWidth; + float fVehicleLength; + // J2735 Part 2 floating point + float fThrottle; // % + + // J2735 Part 1/2 integer + uint16_t wBrakeSystemStatus; + uint8_t byTransmission; + uint8_t byExteriorLights; + // J2735 Part 2 integer + uint16_t wEventFlags; + uint8_t byFrontWipers; +} __attribute__((packed)) CAN_Packet; + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif + diff --git a/include/asn1common.h b/include/asn1common.h new file mode 100644 index 0000000..ac72d0d --- /dev/null +++ b/include/asn1common.h @@ -0,0 +1,77 @@ +#ifndef __ASN1COMMON_INCLUDE__ +#define __ASN1COMMON_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include +#include + +#include "embtypes.h" + +/****************************************************************************** + * defines + *****************************************************************************/ + +#define ASN1_UPER_ALIGNED 0 +#define ASN1_APER_ALIGNED 1 +#define ASN1_OER_ALIGNED 2 + +#define asn1_get_error(S) ((S)->error) + +#define asn1_get_bits_consumed(O) ((O)->consumed) +#define asn1_get_bytes_consumed(O) ((O)->consumed?(((O)->consumed-1)/8+1):0) + +#define asn1_init_extension(E) memset((E),0,sizeof(ASN1_Extension)) +#define asn1_init_bitstream(E) memset((E),0,sizeof(ASN1_BitStream)) + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +typedef struct _asn1_stream { + uint8_t *buf; // pointer to first byte + uint8_t *ptr; // pointer to current byte + uint8_t alloc; // set if alloc'd + uint8_t align; // alignment + uint8_t error; // set if error + uint16_t bit; // current bit in byte + uint16_t max; // maximum bits + uint16_t consumed;// bits consumed +} ASN1_Stream; + +typedef struct _asn1_bitstream { + uint64_t value; // value + uint16_t max; // maximum bits +} ASN1_BitStream; + +typedef struct _asn1_extension { + uint64_t value; // extension+option bits + uint8_t ellipses; // 0 or 1 + uint8_t options; // # options + uint16_t length; // length of extension +} ASN1_Extension; + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void asn1_set_debug(uint8_t flag); +extern uint8_t _asn1_debug_on_; + + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/include/asn1oer.h b/include/asn1oer.h new file mode 100644 index 0000000..78eddc6 --- /dev/null +++ b/include/asn1oer.h @@ -0,0 +1,111 @@ +#ifndef __ASN1OER_INCLUDE__ +#define __ASN1OER_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include +#include + +#include "embtypes.h" +#include "asn1common.h" + +/****************************************************************************** + * defines + *****************************************************************************/ + +#define oer_get_error(O) ((O)->error) +#define oer_get_bytes_consumed(O) asn1_get_bytes_consumed(O) + +#define oer_init_extension(E) asn1_init_extension(E) +#define oer_init_bitstream(E) asn1_init_bitstream(E) + +#define oer_get_signed_value(U,B,O) (((int64_t)uper_get_bits_stream(U,B))-O) +#define oer_get_unsigned_value(U,B) uper_get_bits_stream(U,B) + +#define oer_get_char_value(O) ((int8_t)(oer_get_value(O,1))) +#define oer_get_int8_value(O) ((int8_t)(oer_get_value(O,1))) +#define oer_get_byte_value(O) ((uint8_t)(oer_get_value(O,1))) +#define oer_get_uint8_value(O) ((uint8_t)(oer_get_value(O,1))) + +#define oer_get_short_value(O) ((int16_t)(oer_get_value(O,2))) +#define oer_get_int16_value(O) ((int16_t)(oer_get_value(O,2))) +#define oer_get_word_value(O) ((uint16_t)(oer_get_value(O,2))) +#define oer_get_uint16_value(O) ((uint16_t)(oer_get_value(O,2))) + +#define oer_get_long_value(O) ((int32_t)(oer_get_value(O,4))) +#define oer_get_int32_value(O) ((int32_t)(oer_get_value(O,4))) +#define oer_get_dword_value(O) ((uint32_t)(oer_get_value(O,4))) +#define oer_get_uint32_value(O) ((uint32_t)(oer_get_value(O,4))) + +#define oer_get_llong_value(O) ((int64_t)oer_get_value(O,8)) +#define oer_get_int64_value(O) ((int64_t)oer_get_value(O,8)) +#define oer_get_qword_value(O) ((uint64_t)oer_get_value(O,8)) +#define oer_get_uint64_value(O) ((uint64_t)oer_get_value(O,8)) + +#define oer_get_string(O,B,N,X) oer_get_octet_stream(O,B,N,X) +#define oer_put_string(O,B,L,N,X) oer_put_octet_stream(O,B,L,N,X) + +#define OER_Stream ASN1_Stream +#define OER_Extension ASN1_Extension +#define OER_BitStream ASN1_BitStream + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void oer_init_stream(OER_Stream *strm, uint8_t *ptr, uint max); +OER_Stream *uper_alloc_stream(uint8_t *ptr, uint max); +void oer_free_stream(OER_Stream *oer); + +// DECODE +uint oer_get_length(OER_Stream *oer, uint *value); +uint64_t oer_get_value(OER_Stream *oer, uint size); +uint oer_get_data(OER_Stream *oer, uint8_t *data, uint max); + +// ENCODE +uint oer_put_length(OER_Stream *oer, uint value); +void oer_put_value(OER_Stream *oer, uint64_t value, uint size); +void oer_put_data(OER_Stream *oer, uint8_t *data, uint length); + +// EXTENSIONS +uint oer_get_extension(OER_Stream *uper, OER_Extension *ext, uint nbits, uint ellipses); +uint oer_get_ext_ellipses(OER_Extension *ext); +uint oer_get_ext_optional(OER_Extension *ext, uint bit); +uint oer_get_ext_length(OER_Stream *uper, OER_Extension *ext); +uint oer_get_ext_skip(OER_Stream *uper, OER_Extension *ext); +void oer_put_extension(OER_Stream *uper, OER_Extension *ext); +void oer_set_ext_ellipses(OER_Extension *ext); +void oer_set_ext_length(OER_Extension *ext, uint len); +void oer_set_ext_optional(OER_Extension *ext, uint option, uint val, uint nbits); + +// OCTET +uint oer_get_octet_stream(OER_Stream *ptr, uint8_t *buf, uint min, uint max); +void oer_put_octet_stream(OER_Stream *ptr, uint8_t *buf, uint len, uint min, uint max); + +// BIT STREAM +uint64_t oer_get_bitstream(OER_Stream *ptr, OER_BitStream *bs, uint max); +uint64_t oer_get_bit_bitstream(OER_BitStream *bs, uint bit); +void oer_put_bitstream(OER_Stream *ptr, OER_BitStream *bs); +void oer_set_bit_bitstream(OER_BitStream *bs, uint bit, uint max); +void oer_set_bits_bitstream(OER_BitStream *bs, uint64_t value, uint max); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/include/asn1uper.h b/include/asn1uper.h new file mode 100644 index 0000000..e94f152 --- /dev/null +++ b/include/asn1uper.h @@ -0,0 +1,118 @@ +#ifndef __ASN1UPER_INCLUDE__ +#define __ASN1UPER_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include +#include + +#include "embtypes.h" +#include "asn1common.h" + +/****************************************************************************** + * defines + *****************************************************************************/ + +#define uper_get_error(S) ((S)->error) +#define uper_get_bits_consumed(U) asn1_get_bits_consumed(U) +#define uper_get_bytes_consumed(U) asn1_get_bytes_consumed(U) + +#define uper_get_bits_length(U,S) (uper_get_bits_stream(U,S)+1) +#define uper_put_bits_length(U,L,S) uper_put_bits_stream(U,(L)-1,S) + +#define uper_init_extension(E) asn1_init_extension(E) +#define uper_init_bitstream(E) asn1_init_bitstream(E) + +#define uper_get_signed_value(U,B,O) (((int64_t)uper_get_bits_stream(U,B))-O) +#define uper_get_unsigned_value(U,B) uper_get_bits_stream(U,B) + +#define uper_get_char_value(O) ((int8_t)(uper_get_value(O,1))) +#define uper_get_int8_value(O) ((int8_t)(uper_get_value(O,1))) +#define uper_get_byte_value(O) ((uint8_t)(uper_get_value(O,1))) +#define uper_get_uint8_value(O) ((uint8_t)(uper_get_value(O,1))) + +#define uper_get_short_value(O) ((int16_t)(uper_get_value(O,2))) +#define uper_get_int16_value(O) ((int16_t)(uper_get_value(O,2))) +#define uper_get_word_value(O) ((uint16_t)(uper_get_value(O,2))) +#define uper_get_uint16_value(O) ((uint16_t)(uper_get_value(O,2))) + +#define uper_get_long_value(O) ((int32_t)(uper_get_value(O,4))) +#define uper_get_int32_value(O) ((int32_t)(uper_get_value(O,4))) +#define uper_get_dword_value(O) ((uint32_t)(uper_get_value(O,4))) +#define uper_get_uint32_value(O) ((uint32_t)(uper_get_value(O,4))) + +#define uper_get_llong_value(O) ((int64_t)uper_get_value(O,8)) +#define uper_get_int64_value(O) ((int64_t)uper_get_value(O,8)) +#define uper_get_qword_value(O) ((uint64_t)uper_get_value(O,8)) +#define uper_get_uint64_value(O) ((uint64_t)uper_get_value(O,8)) + +#define uper_get_string(O,B,N,X) uper_get_octet_stream(O,B,N,X) +#define uper_put_string(O,B,L,N,X) uper_put_octet_stream(O,B,L,N,X) + +#define UPER_Stream ASN1_Stream +#define UPER_Extension ASN1_Extension +#define UPER_BitStream ASN1_BitStream + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void uper_init_stream(UPER_Stream *strm, uint8_t *ptr, uint max); +UPER_Stream *uper_alloc_stream(uint8_t *ptr, uint max); +void uper_free_stream(UPER_Stream *oer); + +// DECODE +uint uper_get_bit_direct(const uint8_t *pkt, uint bit); +uint64_t uper_get_bits_direct(const uint8_t *pkt, uint bit, uint bits); +uint64_t uper_get_bits_stream(UPER_Stream *ptr, uint bits); +uint64_t uper_get_bits_stream_reverse(UPER_Stream *ptr, uint nbits); +uint uper_get_bytes_stream(UPER_Stream *uper, uint8_t *buf, uint nbytes); + +// ENCODE +void uper_put_bit_direct(uint8_t *pkt, uint val, uint bit); +void uper_put_bits_direct(uint8_t *pkt, uint64_t value, uint bit, uint bits); +void uper_put_bits_stream(UPER_Stream *uper, uint64_t value, uint bits); +void uper_put_bytes_stream(UPER_Stream *uper, uint8_t *buf, uint nbytes); + +// EXTENSIONS +uint uper_get_extension(UPER_Stream *uper, UPER_Extension *ext, uint nbits, uint ellipses); +uint uper_get_ext_ellipses(UPER_Extension *ext); +uint uper_get_ext_optional(UPER_Extension *ext, uint bit); +uint uper_get_ext_length(UPER_Stream *uper, UPER_Extension *ext); +uint uper_get_ext_skip(UPER_Stream *uper, UPER_Extension *ext); +void uper_put_extension(UPER_Stream *uper, UPER_Extension *ext); +void uper_set_ext_ellipses(UPER_Extension *ext); +void uper_set_ext_length(UPER_Extension *ext, uint len); +void uper_set_ext_optional(UPER_Extension *ext, uint option, uint val, uint nbits); + +// OCTET +uint uper_get_octet_stream(UPER_Stream *ptr, uint8_t *buf, uint min, uint max); +void uper_put_octet_stream(UPER_Stream *uper, uint8_t *buf, uint len, uint min, uint max); + +// BIT STREAM +uint64_t uper_get_bitstream(UPER_Stream *uper, UPER_BitStream *bs, uint max); +uint64_t uper_get_bit_bitstream(UPER_BitStream *bs, uint bit); +void uper_put_bitstream(UPER_Stream *uper, UPER_BitStream *bs); +void uper_set_bit_bitstream(UPER_BitStream *bs, uint bit, uint max); +void uper_set_bits_bitstream(UPER_BitStream *bs, uint64_t value, uint max); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/include/asnlib.h b/include/asnlib.h new file mode 100644 index 0000000..173f5a6 --- /dev/null +++ b/include/asnlib.h @@ -0,0 +1,46 @@ +#ifndef __ASNLIB_INCLUDE__ +#define __ASNLIB_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include + +/****************************************************************************** + * defines + *****************************************************************************/ + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +typedef struct _bit_struct { + const uint8_t *ptr; + int bit; + int max; + int consumed; +} UPER_Stream; + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +int uper_get_bit(const uint8_t *pkt, int bit); +uint64_t uper_get_bits_direct(const uint8_t *pkt, int bit, int bits); +uint64_t uper_get_bits_stream(UPER_Stream *ptr, int bits) + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/include/bitlib.h b/include/bitlib.h new file mode 100644 index 0000000..c8f844a --- /dev/null +++ b/include/bitlib.h @@ -0,0 +1,52 @@ +#ifndef __BITLIB_INCLUDE__ +#define __BITLIB_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include +#include + +#include "embtypes.h" + +/****************************************************************************** + * defines + *****************************************************************************/ + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +typedef struct _bit_struct { + const uint8_t *ptr; + int bit; + int max; + int consumed; +} BIT_Stream; + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +BYTE reverseByteBits(BYTE b); + +void enableBitDebug(int flag); +int getBitDirect(const uint8_t *pkt, int bit); +uint64_t getBitsDirect(const uint8_t *pkt, int bit, int bits); +uint64_t getBitsStream(BIT_Stream *ptr, int bits); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/include/bytequeue.h b/include/bytequeue.h new file mode 100644 index 0000000..734ee1f --- /dev/null +++ b/include/bytequeue.h @@ -0,0 +1,112 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * BYTE Queue +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef __EMBEDDED_BYTEQUEUE__ +#define __EMBEDDED_BYTEQUEUE__ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define _QueuePut(Q,D) \ +{ \ + *((Q).pbyBuf+((Q).byFront++)) = (D); \ + (Q).byCount++; \ + if ( (Q).byFront == (Q).bySize ) \ + (Q).byFront = 0; \ +} + +#define _QueueUnput(Q) \ +{ \ + if ( (Q).byFront == 0 ) \ + (Q).byFront = (Q).bySize; \ + *((Q).pbyBuf+(--(Q).byFront)) = (0); \ + (Q).byCount--; \ +} + +#define _QueueGet(Q,D) \ +{ \ + (D) = *((Q).pbyBuf+((Q).byRear++)); \ + (Q).byCount--; \ + if ( (Q).byRear == (Q).bySize ) \ + (Q).byRear = 0; \ +} + +#define _QueueUnget(Q,D) \ +{ \ + if ( (Q).byRear == 0 ) \ + (Q).byRear = (Q).bySize; \ + *((Q).pbyBuf+(--(Q).byRear)) = (D); \ + (Q).byCount++; \ +} + +#define _QueueAlloc(Q,B,N) (Q).pbyBuf=(B);(Q).bySize=(N) +#define _QueueClear(Q) (Q).byCount=(Q).byFront=(Q).byRear=0 +#define _QueueCount(Q) (Q).byCount +#define _QueueSize(Q) (Q).bySize +#define _QueueEmpty(Q) ((Q).byCount==0) +#define _QueueFull(Q) ((Q).byCount>=(Q).bySize) + +#define QueueCount(Q) (Q)->byCount +#define QueueSize(Q) (Q)->bySize +#define QueueEmpty(Q) ((Q)->byCount==0) +#define QueueFull(Q) ((Q)->byCount>=(Q)->bySize) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +typedef struct _Queue { + BYTE byCount; + BYTE byFront; + BYTE byRear; + BYTE bySize; + BYTE *pbyBuf; +} Queue; + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void QueueAlloc( Queue *pQ, BYTE *pbyData, BYTE bySize ); +void QueueClear( Queue *pQ ); + +BYTE QueueGet( Queue *pQ, BYTE *pbyData ); +BYTE QueuePut( Queue *pQ, BYTE *pbyData ); + +BYTE QueueUnget( Queue *pQ, BYTE byData ); +BYTE QueueUnput( Queue *pQ ); + +#ifdef __cpluscplus +} +#endif + +#endif diff --git a/include/bytestack.h b/include/bytestack.h new file mode 100644 index 0000000..96d9e98 --- /dev/null +++ b/include/bytestack.h @@ -0,0 +1,81 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * BYTE Stack +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef __EMBEDDED_BYTESTACK__ +#define __EMBEDDED_BYTESTACK__ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define _StackPush(S,D) \ + if ( (S).byCount < (S).bySize ) \ + *((S).pbyBuf+((S).byCount++)) = (D); + +#define _StackPop(S) ((S).byCount ? *((S).pbyBuf+(--(S).byCount)) : 0) + +#define _StackAlloc(S,B,N) (S).pbyBuf=(B);(S).bySize=(N) +#define _StackClear(S) (S).byCount=0 +#define _StackCount(S) (S).byCount +#define _StackSize(S) (S).bySize +#define _StackEmpty(S) ((S).byCount==0) +#define _StackFull(S) ((S).byCount>=(S).bySize) + +#define StackClear(S) (S)->byCount=0 +#define StackCount(S) (S)->byCount +#define StackSize(S) (S)->bySize +#define StackEmpty(S) ((S)->byCount==0) +#define StackFull(S) ((S)->byCount>=(S)->bySize) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +typedef struct _Stack { + BYTE byCount; + BYTE bySize; + BYTE *pbyBuf; +} Stack; + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void StackAlloc( Stack *pS, BYTE *pbyBuf, BYTE bySize ); + +BYTE StackPush( Stack *pS, BYTE *pbyData ); +BYTE StackPop( Stack *pS, BYTE *pbyData ); + +#ifdef __cpluscplus +} +#endif + +#endif diff --git a/include/emblib.h b/include/emblib.h new file mode 100644 index 0000000..57fff15 --- /dev/null +++ b/include/emblib.h @@ -0,0 +1,74 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Multiplatform Embedded Data Types and Conversion + * Checksum and CRC Routines +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _EMBLIB_H_ +#define _EMBLIB_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/* useful one to have */ +#define bin2bcd(d) (((((d)/10)<<4|(d)%10))) +#define bcd2bin(b) ((((b)>>4)*10)+((b)&0xf)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +int chomp(char *s); +void base64(const unsigned char *in, char *out, int len); +int unbase64(const char *in, unsigned char *out, int max); + +extern BYTE doCheckSum( const BYTE *pbyData, BYTE nBytes ); +extern WORD doCheckSumW( const WORD *pwData, WORD nBytes ); + +extern BYTE doCRC8( BYTE byCrc, BYTE byData ); +extern BYTE strCRC8( BYTE *pbyData, WORD nBytes, BYTE byInit ); + +extern WORD doCRC16( WORD wCrc, BYTE byData ); +extern WORD strCRC16( BYTE *pbyData, WORD nBytes, WORD wInit ); + +short InterpolateShortTable( const short *psTbl, BYTE nPairs, short sData ); +long InterpolateLongTable( const long *plTbl, BYTE nPairs, long lData ); + +BYTE reverseByteBits(BYTE b); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/embstruct.h b/include/embstruct.h new file mode 100644 index 0000000..a528a25 --- /dev/null +++ b/include/embstruct.h @@ -0,0 +1,47 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Multiplatform Embedded Data Types and Conversion + * Checksum and CRC Routines +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _EMBSTRUCT_H_ +#define _EMBSTRUCT_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" + +#include "bytequeue.h" +#include "bytestack.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ + +#endif diff --git a/include/embtypes.h b/include/embtypes.h new file mode 100644 index 0000000..c6b4566 --- /dev/null +++ b/include/embtypes.h @@ -0,0 +1,291 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Multiplatform Embedded Data Types and Conversion + * Checksum and CRC Routines +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _EMBTYPES_H_ +#define _EMBTYPES_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#ifdef __linux__ +#include +#endif + +/***************************************************************************** + * defines +*****************************************************************************/ + +#ifndef NULL +#define NULL 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif +#ifndef ON +#define ON 1 +#define OFF 0 +#endif + +#ifdef __linux__ +/* take out those keywords */ +#define interrupt +#define near +#define far +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +// data types +#ifdef __linux__ +typedef unsigned char bit; +#else +typedef bit BOOL; +#endif + +// ProbeStar Standard +typedef signed char CHAR; +typedef signed short SHORT; +typedef signed int INT; +typedef signed long LONG; +typedef signed long long LLONG; +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned int UINT; +typedef unsigned long DWORD; +typedef unsigned long long QWORD; + +typedef signed char int8; +typedef signed short int16; +typedef signed long int32; +typedef signed long long int64; +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned long uint32; +typedef unsigned long long uint64; + +typedef signed char S8; +typedef signed short S16; +typedef signed long S32; +typedef signed long long S64; +typedef unsigned char U8; +typedef unsigned short U16; +typedef unsigned long U32; +typedef unsigned long long U64; + +#ifdef BIG_ENDIAN + +typedef union +{ + WORD w; + SHORT s; + struct + { + BYTE h; + BYTE l; + } + b; + BYTE c[2]; +} __attribute__((__packed__)) short_word; + +typedef union +{ + DWORD dw; + LONG l; + struct + { + WORD h; + WORD l; + } + w; + short s[2]; + struct + { + short_word h; + short_word l; + } + sw; + struct + { + BYTE hh; + BYTE hl; + BYTE lh; + BYTE ll; + } + b; + BYTE c[4]; +} __attribute__((__packed__)) long_dword; + +typedef union +{ + QWORD qw; + LLONG ll; + struct + { + DWORD h; + DWORD l; + } dw; + long l[2]; + struct + { + WORD hh; + WORD hl; + WORD lh; + WORD ll; + } + w; + short s[4]; + struct + { + short_word hh; + short_word hl; + short_word lh; + short_word ll; + } + sw; + struct + { + BYTE hhh; + BYTE hhl; + BYTE hlh; + BYTE hll; + BYTE lhh; + BYTE lhl; + BYTE llh; + BYTE lll; + } + b; + BYTE c[8]; +} __attribute__((__packed__)) llong_qword; + +#elif defined(LITTLE_ENDIAN) + +// new +typedef union +{ + WORD w; + SHORT s; + struct + { + BYTE l; + BYTE h; + } + b; + BYTE c[2]; +} __attribute__((__packed__)) short_word; + +typedef union +{ + DWORD dw; + LONG l; + struct + { + WORD l; + WORD h; + } + w; + short s[2]; + struct + { + short_word l; + short_word h; + } + sw; + struct + { + BYTE ll; + BYTE lh; + BYTE hl; + BYTE hh; + } + b; + BYTE c[4]; +} __attribute__((__packed__)) long dword; + +typedef union +{ + QWORD qw; + LLONG ll; + struct + { + DWORD l; + DWORD h; + } dw; + long l[2]; + struct + { + WORD ll; + WORD lh; + WORD hl; + WORD hh; + } + w; + short s[4]; + struct + { + short_word ll; + short_word lh; + short_word hl; + short_word hh; + } + sw; + struct + { + BYTE lll; + BYTE llh; + BYTE lhl; + BYTE lhh; + BYTE hll; + BYTE hlh; + BYTE hhl; + BYTE hhh; + } + b; + BYTE c[8]; +} __attribute__((__packed__)) llong_qword; + +#endif + +typedef union +{ + BYTE byte; + struct { + unsigned b0:1; + unsigned b1:1; + unsigned b2:1; + unsigned b3:1; + unsigned b4:1; + unsigned b5:1; + unsigned b6:1; + unsigned b7:1; + } bits; +} byte_bits; + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ + +#endif diff --git a/include/libcan++/CanDatabase.h b/include/libcan++/CanDatabase.h new file mode 100644 index 0000000..99fceec --- /dev/null +++ b/include/libcan++/CanDatabase.h @@ -0,0 +1,63 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __CanDatabase__ +#define __CanDatabase__ + +/* includes *****************************************************************/ + +#include +#include + +#include "CanSignal.h" +#include "CanSocket.h" +#include "DbcParser.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +/** + * CAN class to handle database of CAN signals from DBC (.dbc) file + */ +class CanDatabase : public DbcParser { + // public data +public: + + // private data +private: + + // 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 +private: +}; + +#endif diff --git a/include/libcan++/CanMessage.h b/include/libcan++/CanMessage.h new file mode 100644 index 0000000..7a478b9 --- /dev/null +++ b/include/libcan++/CanMessage.h @@ -0,0 +1,74 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __CanMessage__ +#define __CanMessage__ + +/* includes *****************************************************************/ + +#include +#include +#include + +#include "CanSignal.h" +#include "CanSocket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +// based on .dbc data + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class CanMessage { + // 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 +private: + + // 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 +private: +}; + +#endif diff --git a/include/libcan++/CanSignal.h b/include/libcan++/CanSignal.h new file mode 100644 index 0000000..560ed54 --- /dev/null +++ b/include/libcan++/CanSignal.h @@ -0,0 +1,116 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __CanSignal__ +#define __CanSignal__ + +/* includes *****************************************************************/ + +#include +#include +#include + +//#include "BaseSignal.h" +//#include "VoltType.h" + +#include "CanSocket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +// based on .dbc data + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +#ifdef __BaseSignal__ +class CanSignal : public BaseSignal, public VoltType { +#else +class CanSignal { +#endif + // public data +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 + u_char BigEndian; // 0 = little endian (intel), 1 = big endian (moto) + 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 + u_char HighBit; // 0..7 + 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; + u_char isValid; + int32_t rawValue; + 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: + + // static data + + // public methods +public: + // constructors + CanSignal(); + + // destructor + virtual ~CanSignal(); + + // virtual functions + + // public methods + int Init( void ); + int Convert(CanFrame *frame) {return Read(frame->data);}; + int Read(CanFrame *frame) {return Read(frame->data);}; + int Read(const u_char *pbyData, long *ldata=NULL, double *ddata=NULL); + int Write(CanFrame *frame) {return Write(frame->data);}; + int Write(u_char *pbyData); + int Write(long value, u_char *pbyData); + 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: +}; + +#endif diff --git a/include/libcan++/CanSocket.h b/include/libcan++/CanSocket.h new file mode 100644 index 0000000..d0ac06c --- /dev/null +++ b/include/libcan++/CanSocket.h @@ -0,0 +1,101 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __CanSocket__ +#define __CanSocket__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include +#include +#include + + +/* defines ******************************************************************/ + +#define CAN_MAX_FILTER 31 +#define CAN_MAX_ADDRESSES 256 + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +typedef struct can_filter CanFilter; +typedef struct can_frame CanFrame; + +typedef struct _BcmFrame { + struct bcm_msg_head head; + struct can_frame frame; +} BcmFrame; + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class CanSocket { + // public data +public: + int m_sock; + int m_proto; + + // private data +private: + // 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 ); +}; + +#endif diff --git a/include/libcan++/DbcParser.h b/include/libcan++/DbcParser.h new file mode 100644 index 0000000..fec0a17 --- /dev/null +++ b/include/libcan++/DbcParser.h @@ -0,0 +1,87 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __DbcParser__ +#define __DbcParser__ + +/* includes *****************************************************************/ + +#include +#include + +#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 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 +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 diff --git a/include/libgps++/ApplanixParser.h b/include/libgps++/ApplanixParser.h new file mode 100644 index 0000000..5654d03 --- /dev/null +++ b/include/libgps++/ApplanixParser.h @@ -0,0 +1,62 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __ApplanixParser__ +#define __ApplanixParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaParser.h" +#include "NmeaProtocol.h" +//#include "ApplanixProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +class ApplanixParser : public NmeaParser { + // public data +public: + + // protected data +protected: + + // private data +private: + // data + u_char state; // parser state + + // private methods + + // public methods +public: + // constructors + ApplanixParser(); + + // destructor + virtual ~ApplanixParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return ApplanixDecode( (const u_char *)buf, max); }; + int GpsParse( const char *buf, int max ) { return ApplanixParse( buf, max ); }; + + // public methods + int ApplanixDecode( const u_char *buf, int max ); + int ApplanixParse( const char *buf, int max ); +}; + +#endif diff --git a/include/libgps++/DgpsClient.h b/include/libgps++/DgpsClient.h new file mode 100644 index 0000000..a452655 --- /dev/null +++ b/include/libgps++/DgpsClient.h @@ -0,0 +1,56 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __DgpsClient__ +#define __DgpsClient__ + +/* includes *****************************************************************/ + +#include "TcpClient.h" +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + + +/* c class definitions ******************************************************/ + +class DgpsClient : public TcpClient { + // public data +public: + + // protected data +protected: + + // private data +private: + unsigned long count; + + // private methods + + // static data + + // public methods +public: + // constructors + DgpsClient(); + + // destructor + virtual ~DgpsClient(); + + // virtual functions + + // public methods + int DgpsConnect( const char *host, const char *service ); + void DgpsClose(void) {Close();}; + + int DgpsRead( char *buf, int max ); + int DgpsWrite( const char *buf, int max ); +}; + +#endif diff --git a/include/libgps++/FastraxParser.h b/include/libgps++/FastraxParser.h new file mode 100644 index 0000000..336b923 --- /dev/null +++ b/include/libgps++/FastraxParser.h @@ -0,0 +1,73 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __FastraxParser__ +#define __FastraxParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaParser.h" +#include "NmeaProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// Fastrax iTrax03 +class NmeaSentencePFST : public NmeaSentence { +public: + char msg[4]; + + NmeaSentencePFST(); + ~NmeaSentencePFST(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class FastraxParser : public NmeaParser { + // public data +public: + + // protected data +protected: + // Fastrax iTrax03 + NmeaSentencePFST PFST; + + // private data +private: + // data + + // private methods + + // public methods +public: + // constructors + FastraxParser(); + + // destructor + virtual ~FastraxParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return FastraxDecode( (const u_char *)buf, max); }; + int GpsParse( const char *buf, int max ) { return FastraxParse( buf, max ); }; + + // public methods + int FastraxDecode( const u_char *buf, int max ); + int FastraxParse( const char *buf, int max ); +}; + +#endif diff --git a/include/libgps++/GarminParser.h b/include/libgps++/GarminParser.h new file mode 100644 index 0000000..f7af73e --- /dev/null +++ b/include/libgps++/GarminParser.h @@ -0,0 +1,125 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GarminParser__ +#define __GarminParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaParser.h" +#include "NmeaProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + + +// Garmin +class NmeaSentencePGRME : public NmeaSentence { +public: + float horizontal; + char horizontal_unit[4]; + float vertical; + char vertical_unit[4]; + float three_dimensions; + char three_dimensions_unit[4]; + + NmeaSentencePGRME(); + ~NmeaSentencePGRME(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentencePGRMF : public NmeaSentence { +public: + int week; + int seconds; + struct timespec utctime; + int leap; + double latitude; + double longitude; + char mode; + int type; + double speed; + double course; + double position_dilution; + double time_dilution; + + NmeaSentencePGRMF(); + ~NmeaSentencePGRMF(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentencePGRMM : public NmeaSentence { +public: + char datum[256]; + + NmeaSentencePGRMM(); + ~NmeaSentencePGRMM(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentencePGRMZ : public NmeaSentence { +public: + + NmeaSentencePGRMZ(); + ~NmeaSentencePGRMZ(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +// main class +class GarminParser : public NmeaParser { + // public data +public: + + // protected data +protected: + // Garmin + NmeaSentencePGRME PGRME; + NmeaSentencePGRMF PGRMF; + NmeaSentencePGRMM PGRMM; + + // private data +private: + // data + + // private methods + + // public methods +public: + // constructors + GarminParser(); + + // destructor + virtual ~GarminParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return GarminDecode( (const u_char *)buf, max); }; + int GpsParse( const char *buf, int max ) { return GarminParse( buf, max ); }; + + // public methods + int GarminDecode( const u_char *buf, int max ); + int GarminParse( const char *buf, int max ); +}; + +#endif diff --git a/include/libgps++/GpsDevice.h b/include/libgps++/GpsDevice.h new file mode 100644 index 0000000..510092f --- /dev/null +++ b/include/libgps++/GpsDevice.h @@ -0,0 +1,52 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GpsDevice__ +#define __GpsDevice__ + +/* includes *****************************************************************/ + +#include "netlib.h" + +#include "SerialIO.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class GpsDevice : public SerialIO { + // public data +public: + // parser + + // protected data +protected: + + // private data +private: + // private methods + + // public methods +public: + // constructors + GpsDevice(); + + // destructor + virtual ~GpsDevice(); + + // virtual functions + + // public methods + int GpsOpen( const char *dev, int baud=38400 ); + int GpsRead( char *buf, int max ) {return Read(buf,max); }; + int GpsWrite( const char *buf, int max ) {return Write(buf,max); }; + void GpsClose(void) { Close(); }; +}; + +#endif diff --git a/include/libgps++/GpsListener.h b/include/libgps++/GpsListener.h new file mode 100644 index 0000000..7a15e54 --- /dev/null +++ b/include/libgps++/GpsListener.h @@ -0,0 +1,95 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GpsListener__ +#define __GpsListener__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsPoint.h" + +/* defines ******************************************************************/ + +#define NMEA_MAX_SATELLITE 32 + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +typedef struct _ErrorInfo { + // GPGSA dilution of precision (DOP) + double PositionDilution; // PDOP + double HorizontalDilution; // HDOP + double VerticalDilution; // VDOP + + // GPGST standard deviation of error + double HorizontalDeviation; // largest + double VerticalDeviation; + + // PUBX-01 + double HorizontalAccuracy; + double VerticalAccuracy; + double TimeDilution; // TDOP +} ErrorInfo; + +typedef struct _SatelliteInfo { + // GPGSV, PUBX-03 + u_int Satellites; + struct { + char Id; + char Status; + double Elevation; + double Azimuth; + double Signal2noise; + } Satellite[NMEA_MAX_SATELLITE]; +} SatelliteInfo; + +/* c class definitions ******************************************************/ + +// +class GpsListener { + // public data +public: + // Position Data + GpsPoint PosData; + + // Accuracy, Dilution, Error + ErrorInfo ErrInfo; + + // Satellite info + SatelliteInfo SatInfo; + + // protected data +protected: + + // private data +private: + + // private methods + + // static data + + // public methods +public: + // constructors + GpsListener(); + + // destructor + virtual ~GpsListener(); + + // virtual functions + virtual void PositionListener( const GpsPoint &Pos, const ErrorInfo &Err ); + virtual void TimeListener( const struct timespec &Time ); + + // public methods + int GpsTime( struct timespec *tv ) {*tv=PosData.TimeStamp;return PosData.Fix;}; + int GpsFix(void) {return PosData.Fix;}; +}; + +#endif diff --git a/include/libgps++/GpsMath.h b/include/libgps++/GpsMath.h new file mode 100644 index 0000000..0c230cb --- /dev/null +++ b/include/libgps++/GpsMath.h @@ -0,0 +1,81 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GpsMath__ +#define __GpsMath__ + +/* includes *****************************************************************/ + +#include +#include +#include "netlib.h" + +/* defines ******************************************************************/ + +// degrees <-> radians +#define DEG2RAD(X) ((X)*M_PI/180.0) +#define RAD2DEG(X) ((X)*180.0/M_PI) + +// (nautical mile to km) to meters per degree +#define MPERDEG (111.13285*1000.0) +#define EARTHRADIUS 6378100.0 // meters + +// speed conversions +#define KNOTS_KPH 1.85200 +#define KNOTS_METERSPERSEC (KNOTS_KPH*1000.0/3600.0) + +#define KPH2MSEC(X) ((X)*0.277777778) +#define MSEC2KPH(X) ((X)/0.277777778) + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// GpsLinux because it depennds on GPSd, the HAMLIB and NMEAP libraries +// +class GpsMath { + // public data +public: + + // parser + + // protected data +protected: + + // private data +private: + // static data + + // private methods + + // public methods +public: + // constructors + GpsMath(); + + // destructor + virtual ~GpsMath(); + + // virtual functions + + // public methods + + // static methods +static double Minutes2Degrees(char *value, char *side = NULL); +static void Degrees2Minutes(double deg, char *buf, int max, bool lat); +static timespec String2Time(const char *hhmmss, const char *ddmmyy); + +static double Bearing( double lat1, double lon1, double lat2, double lon2 ); +static double Distance( double lat1, double lon1, double lat2, double lon2 ); +static double DistanceX( double lat1, double lon1, double lat2, double lon2 ); +static double DistanceY( double lat1, double lon1, double lat2, double lon2 ); +static double DistanceXY(double lat1, double lon1, double lat2, double lon2, double &x, double &y ); +static double Travel( double *lat, double *lon, double *ele, double x, double y, double z); +}; + +#endif diff --git a/include/libgps++/GpsParser.h b/include/libgps++/GpsParser.h new file mode 100644 index 0000000..ed53a1c --- /dev/null +++ b/include/libgps++/GpsParser.h @@ -0,0 +1,93 @@ +// +// Linux GPS +// +// + +/* prevent multiple inclusions */ +#ifndef __GpsParser__ +#define __GpsParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "NmeaProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +class GpsParser : public NmeaProtocol { + // public data +public: + char Vendor[32]; + char Product[32]; + + // Position Data + GpsPoint PosData; + + // Accuracy, Dilution, Error + ErrorInfo ErrInfo; + + // Satellite info + SatelliteInfo SatInfo; + +protected: + // protected data + std::vector GpsListeners; + + // incoming data buffer + u_char data[2048]; + u_char lastc; + u_short numbytes; // current byte count + u_short totbytes; // expect byte count + u_short checksum; + u_long counter; // # parsed + + // private data +private: + // private methods + + // static data + + // public methods +public: + // constructors + GpsParser(); + + // destructor + virtual ~GpsParser(); + + // virtual functions + virtual void GpsInit( void ) {}; + virtual int GpsDecode( const char *buf, int max ); + virtual int GpsParse( const char *buf, int max ); + + // public methods + + // subscribe/unsubscribe + void Subscribe( GpsListener *ear ) { + GpsInit(); + if (ear) + GpsListeners.push_back(ear); + }; + + int GetNumParsed(void) {return counter;}; + + // misc + int GpsTime( struct timespec *tv ) {*tv=PosData.TimeStamp;return PosData.Fix;}; + int GpsFix(void) {return PosData.Fix;}; + int Gps2Vii( char *buf, int max ); + + // static functions +}; + +#endif diff --git a/include/libgps++/GpsPoint.h b/include/libgps++/GpsPoint.h new file mode 100644 index 0000000..90a0b16 --- /dev/null +++ b/include/libgps++/GpsPoint.h @@ -0,0 +1,123 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GpsPoint__ +#define __GpsPoint__ + +/* includes *****************************************************************/ + +#include "GpsMath.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Gps Point on the planet +// +class GpsPoint : public GpsMath { + // public data +public: + timespec TimeStamp; + double Latitude; + double Longitude; + double Altitude; + double Speed; // m/sec + double Heading; // deg + + // fix information (GpsListener) for point + int Fix; // GPGGA + int Mode; // GPGSA + int Type; // GPGSA + double Accel; // m/sec2 + double Yaw; // deg/sec (-left, +right) + + // parser + + // protected data +protected: + + // private data +private: + // static data + + // private methods + + // public methods +public: + // constructors + GpsPoint(); + GpsPoint( double lat, double lon ); + GpsPoint(const GpsPoint ©); + + // destructor + virtual ~GpsPoint(); + + // operators + GpsPoint &operator=(const GpsPoint &rhs); + + // virtual functions + + // public methods + double GetLatitude(void) {return Latitude;}; + double GetLongitude(void) {return Longitude;}; + double GetAltitude(void) {return Altitude;}; + double GetElevation(void) {return Altitude;}; + void GetPosition( double *lat, double *lon, double *elev=NULL ); + double GetSpeed(void) {return Speed;}; + double GetHeading(void) {return Heading;}; + timespec GetTimeVal(void) {return TimeStamp;}; + uint64_t GetTimeStamp(void) {return (TimeStamp.tv_sec*1000L)+(TimeStamp.tv_nsec/1000000L);}; + time_t GetTimeStampSec(void) {return TimeStamp.tv_sec;}; + + void SetLatitude(double lat) {Latitude = lat;}; + void SetLongitude(double lon) {Longitude = lon;}; + void SetAltitude(double alt) {Altitude = alt;}; + void SetElevation(double ele) {Altitude = ele;}; + void SetPosition(double lat, double lon, double ele = 0.0) + {Latitude=lat;Longitude=lon;Altitude=ele;}; + void SetSpeed(double spd) {Speed = spd;}; // kph + void SetHeading(double hdg) {Heading = hdg;}; + void SetTimeStamp(timespec &tv) {TimeStamp=tv;}; + void SetTimeStamp(time_t t) {TimeStamp.tv_sec=t;TimeStamp.tv_nsec=0;}; + void SetTimeStamp(uint64_t t); + void SetTimeStamp(double t); + void SetTimeStamp(const char *str); + + void AddMeters( double x, double y ); // add meters + void Extrapolate( double speed, double accel, double yaw, double time ); + + double Bearing( const GpsPoint &gpt ); // bearing to point + double Distance( const GpsPoint &gpt ); // distance to point + double Distance( double lat, double lon ); + double Travel( double x, double y, double z ); + + double DistanceX( const GpsPoint &gpt ) + { return GpsMath::DistanceX(Latitude, Longitude, gpt.Latitude, gpt.Longitude); }; + double DistanceY( const GpsPoint &gpt ) + { return GpsMath::DistanceY(Latitude, Longitude, gpt.Latitude, gpt.Longitude); }; + double DistanceX(double lat, double lon) + { return GpsMath::DistanceX(Latitude, Longitude, Latitude, lon); }; + double DistanceY(double lat, double lon) + { return GpsMath::DistanceY(Latitude, Longitude, lat, Longitude); }; + double DistanceX(double lon) + { return GpsMath::DistanceX(Latitude, Longitude, Latitude, lon); }; + double DistanceY(double lat) + { return GpsMath::DistanceY(Latitude, Longitude, lat, Longitude); }; + + double DistanceXY( const GpsPoint &gpt1, const GpsPoint &gpt2, double &x, double &y ); + double DistanceXY( const GpsPoint &gpt1, double lat, double lon, double &x, double &y ); + + bool Inside( const GpsPoint polygon[], int num ); + bool Traversed( GpsPoint &gpt, const GpsPoint polygon[], int num ); + + // static methods +}; + +#endif diff --git a/include/libgps++/GpsTrack.h b/include/libgps++/GpsTrack.h new file mode 100644 index 0000000..4f46e3c --- /dev/null +++ b/include/libgps++/GpsTrack.h @@ -0,0 +1,70 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GpsTrack__ +#define __GpsTrack__ + +/* includes *****************************************************************/ + +#include + +#include "GpsPoint.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +typedef std::vector GpsTrack_t; + +/* c class definitions ******************************************************/ + +// +// GpsLinux because it depennds on GPSd, the HAMLIB and NMEAP libraries +// +class GpsTrack { + // public data +public: + char Name[64]; + GpsTrack_t Points; + + // parser + + // protected data +protected: + + // private data +private: + // static data + + // private methods + + // public methods +public: + // constructors + GpsTrack(); + GpsTrack(const char *name); + GpsTrack(const GpsTrack ©); + + // destructor + virtual ~GpsTrack(); + + // operators + GpsTrack &operator=(const GpsTrack &rhs); + + // virtual functions + + // public methods + void SetName( const char *name ) { strncpy(Name,name,sizeof(Name)-1); }; + int AddPoint( const GpsPoint &Pt ); + + int GenerateKML( const char *kmlfile ); + int ParseKML( const char *kmlfile ); + + // static methods +}; + +#endif diff --git a/include/libgps++/GpsdClient.h b/include/libgps++/GpsdClient.h new file mode 100644 index 0000000..6449d6d --- /dev/null +++ b/include/libgps++/GpsdClient.h @@ -0,0 +1,70 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GpsdClient__ +#define __GpsdClient__ + +/* includes *****************************************************************/ + +#include "TcpClient.h" +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Connect to http://gpsd.berlios.de/ GPSD +// +class GpsdClient : public TcpClient { + // public data +public: + int Fix; + int Satellites; + + struct timespec Time; + double Latitude; + double Longitude; + double Elevation; + double Heading; + double Speed; + + // protected data +protected: + + // private data +private: + + // static data + + // private methods + + // public methods +public: + // constructors + GpsdClient(); + GpsdClient( const char *host ); + + // destructor + virtual ~GpsdClient(); + + // virtual functions + + // public methods + int GpsdParse( char *msg ); + int GpsdConnect( const char *host = "localhost" ); + + int GpsdRead( void ); + int GpsdWrite( const char *msg, int max ); + + int Gpsd2Vii( char *buf, int max ); +}; + +#endif + diff --git a/include/libgps++/KmlFile.h b/include/libgps++/KmlFile.h new file mode 100644 index 0000000..625a3d4 --- /dev/null +++ b/include/libgps++/KmlFile.h @@ -0,0 +1,73 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __KmlFile__ +#define __KmlFile__ + +/* includes *****************************************************************/ + +#include +#include + +#include "netlib.h" + +#include "GpsTrack.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// GpsLinux because it depennds on GPSd, the HAMLIB and NMEAP libraries +// +class KmlFile { + // public data +public: + xmlDocPtr xmlDoc; + xmlNodePtr xmlRoot; + + // folders we're interested in + xmlNodePtr xmlRoutes; + xmlNodePtr xmlTracks; + xmlNodePtr xmlWaypoints; + + // parser + + // protected data +protected: + FILE *fileKml; + + // private data +private: + // static data + + // private methods + + // public methods +public: + // constructors + KmlFile(); + + // destructor + virtual ~KmlFile(); + + // virtual functions + + // public methods + int Open( const char *file ); + void Close( void ); + int Create( const char *file ); + + GpsTrack *GetTracks(void); + + // static methods +static time_t ParseTime( const char *time ); +}; + +#endif diff --git a/include/libgps++/NmeaParser.h b/include/libgps++/NmeaParser.h new file mode 100644 index 0000000..c7ec3a6 --- /dev/null +++ b/include/libgps++/NmeaParser.h @@ -0,0 +1,86 @@ +// +// Linux GPS +// +// NMEA Parser code stolen from Pascal Martin's RoadMap +// + +/* prevent multiple inclusions */ +#ifndef __NmeaParser__ +#define __NmeaParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaProtocol.h" +#include "NmeaSentence.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +class NmeaParser : public GpsParser { + // public data +public: + +protected: + // private data + std::vector NmeaSentences; + + // Standard + NmeaSentenceGPRMC GPRMC; + NmeaSentenceGPVTG GPVTG; + NmeaSentenceGPGGA GPGGA; + NmeaSentenceGPGSA GPGSA; + NmeaSentenceGPGSV GPGSV; + NmeaSentenceGPGLL GPGLL; + NmeaSentenceGPGST GPGST; + NmeaSentenceGPZDA GPZDA; + + // private data +private: + // incoming data buffer + + // NMEA record for notification + char posfixnmea[8]; + char timefixnmea[8]; + + // private methods + + // static data + + // public methods +public: + // constructors + NmeaParser(); + + // destructor + virtual ~NmeaParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return NmeaDecode( buf, max ); }; + int GpsParse( const char *buf, int max ) { return NmeaParse( buf, max ); }; + + // public methods + int NmeaDecode( const char *msg, int max ); + int NmeaParse( const char *msg, int max ); + + // misc + void NmeaPosFix( const char *str ) + { strncpy(posfixnmea,str,sizeof(posfixnmea)-1);}; + + // static functions +static int CsvSplit( char *buf, char *field[], int max ); +}; + +#endif diff --git a/include/libgps++/NmeaProtocol.h b/include/libgps++/NmeaProtocol.h new file mode 100644 index 0000000..9a4f938 --- /dev/null +++ b/include/libgps++/NmeaProtocol.h @@ -0,0 +1,50 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __NmeaProtocol__ +#define __NmeaProtocol__ + +/* includes *****************************************************************/ + +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// GpsLinux because it depennds on GPSd, the HAMLIB and NMEAP libraries +// +class NmeaProtocol { + // public data +public: + + // protected data +protected: + + // private data +private: + + // private methods + + // public methods +public: + // constructors + NmeaProtocol(); + + // destructor + virtual ~NmeaProtocol(); + + // virtual functions + + // public methods +static int NmeaChecksum( char *msg, int len, int max = 0 ); +}; + +#endif diff --git a/include/libgps++/NmeaSentence.h b/include/libgps++/NmeaSentence.h new file mode 100644 index 0000000..e4fff63 --- /dev/null +++ b/include/libgps++/NmeaSentence.h @@ -0,0 +1,197 @@ +// +// Linux GPS +// +// NMEA Parser code stolen from Pascal Martin's RoadMap +// + +/* prevent multiple inclusions */ +#ifndef __NmeaSentence__ +#define __NmeaSentence__ + +/* includes *****************************************************************/ + +#include + +#include "GpsMath.h" +#include "GpsListener.h" + +/* defines ******************************************************************/ + +#define NMEA_MAX_SATELLITE 32 + +#define NMEA_FIX_INVALID 0 +#define NMEA_FIX_NOFIX 0 +#define NMEA_FIX_GPS 1 +#define NMEA_FIX_DGPS 2 +#define NMEA_FIX_PPS 3 +#define NMEA_FIX_RTK_FIXED 4 +#define NMEA_FIX_RTK_FLOAT 5 +#define NMEA_FIX_DEAD_RECKONING 6 +#define NMEA_FIX_MANUAL 7 +#define NMEA_FIX_SIMULATION 8 + +#define NMEA_MODE_AUTOMATIC 'A' +#define NMEA_MODE_DIFFERENTIAL 'D' +#define NMEA_MODE_ESTIMATED 'E' // dead reckoning +#define NMEA_MODE_MANUAL 'M' +#define NMEA_MODE_SIMULATED 'S' +#define NMEA_MODE_INVALID 'N' + +#define NMEA_TYPE_INVALID 0 +#define NMEA_TYPE_NOFIX 1 +#define NMEA_TYPE_2D 2 +#define NMEA_TYPE_3D 3 + +/* macros *******************************************************************/ + +#define DecodeCoordinate(A,B) GpsMath::Minutes2Degrees(A,B) +#define DecodeTime(A,B) GpsMath::String2Time(A,B) + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class NmeaSentence { +public: + char name[8]; + char argc; + char parsed; // just parsed flag + u_long counter; + timespec timestamp; + + NmeaSentence(); + virtual ~NmeaSentence(); + + virtual int Decode( int argc, char *argv[] ); + virtual void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPGGA : public NmeaSentence { +public: + timespec fixtime; + double latitude; // decimal degrees + double longitude; + int quality; + int satellites; + float horizontal_dilution; + double altitude; // meters + double geoid; + + NmeaSentenceGPGGA(); + ~NmeaSentenceGPGGA(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPGLL : public NmeaSentence { +public: + double latitude; + double longitude; + timespec utctime; + char status; + char mode; + + NmeaSentenceGPGLL(); + ~NmeaSentenceGPGLL(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPGSA : public NmeaSentence { +public: + char mode; + char type; + char satellite[NMEA_MAX_SATELLITE]; + float position_dilution; + float horizontal_dilution; + float vertical_dilution; + + NmeaSentenceGPGSA(); + ~NmeaSentenceGPGSA(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPGST : public NmeaSentence { +public: + timespec utctime; + // standard deviation of error + float rms_deviation; + float semimajor_deviation; + float semiminor_deviation; + float semimajor_orientation; + float latitude_deviation; + float longitude_deviation; + float altitude_deviation; + + NmeaSentenceGPGST(); + ~NmeaSentenceGPGST(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPGSV : public NmeaSentence { +public: + char total; + char sequence; + char satellites; + struct { + char id; + char elevation; + short azimuth; + short signal2noise; + } satellite[NMEA_MAX_SATELLITE]; + + NmeaSentenceGPGSV(); + ~NmeaSentenceGPGSV(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPRMC : public NmeaSentence { +public: + timespec utctime; + char status; + double latitude; + double longitude; + double speed; // convert knots to kph + double course; + double variation; + + NmeaSentenceGPRMC(); + ~NmeaSentenceGPRMC(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPVTG : public NmeaSentence { +public: + double course; + double speed; + char mode; + + NmeaSentenceGPVTG(); + ~NmeaSentenceGPVTG(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPZDA : public NmeaSentence { +public: + timespec utctime; + + NmeaSentenceGPZDA(); + ~NmeaSentenceGPZDA(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +#endif diff --git a/include/libgps++/NtripClient.h b/include/libgps++/NtripClient.h new file mode 100644 index 0000000..f9deb13 --- /dev/null +++ b/include/libgps++/NtripClient.h @@ -0,0 +1,65 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __NtripClient__ +#define __NtripClient__ + +/* includes *****************************************************************/ + +#include "TcpClient.h" +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + + +/* c class definitions ******************************************************/ + +// +// GpsLinux because it depennds on GPSd, the HAMLIB and NMEAP libraries +// +class NtripClient : public TcpClient { + // public data +public: + char Uri[1024]; + +protected: + unsigned long count; + + // private data +private: + + // private methods + + // static data + + // public methods +public: + // constructors + NtripClient(); + + // destructor + virtual ~NtripClient(); + + // virtual functions + + // public methods + int NtripConnect( const char *host, const char *service, + const char *user = "anonymous", const char *pass = "", + const char *path = "" ); + int NtripConnect( const char *uri ); + int NtripReconnect( void ) {return NtripConnect( Uri ); }; + void NtripClose(void) {Close();}; + + int NtripRead( unsigned char *buf, int max ); + int NtripWrite( const unsigned char *buf, int max ) + {return TcpClient::Send((const char *)buf,max);}; +}; + +#endif + diff --git a/include/libgps++/RtcmDevice.h b/include/libgps++/RtcmDevice.h new file mode 100644 index 0000000..fac80b5 --- /dev/null +++ b/include/libgps++/RtcmDevice.h @@ -0,0 +1,62 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __RtcmDevice__ +#define __RtcmDevice__ + +/* includes *****************************************************************/ + +#include "TcpClient.h" +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + + +/* c class definitions ******************************************************/ + +class RtcmDevice { + // public data +public: + + // protected data +protected: + int SerialFd; // serial port + + // private data +private: + + // private methods + int SerialOpen( const char *dev, int baud ); + int SerialRead( char *buf, int max ); + void SerialClose( void ); + + // static data + + // public methods +public: + // constructors + RtcmDevice(); + + // destructor + virtual ~RtcmDevice(); + + // virtual functions + + // public methods + int GetFd(void) {return SerialFd;}; + + int RtcmOpen( const char *dev, int baud ) {return SerialOpen(dev,baud); }; + void RtcmClose(void) {SerialClose();}; + + int RtcmRead( char *buf, int max ); + int RtcmWrite( const char *buf, int max ); +}; + +#endif + diff --git a/include/libgps++/SirfParser.h b/include/libgps++/SirfParser.h new file mode 100644 index 0000000..3643ec1 --- /dev/null +++ b/include/libgps++/SirfParser.h @@ -0,0 +1,62 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __SirfParser__ +#define __SirfParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaParser.h" +#include "NmeaProtocol.h" +#include "SirfProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +class SirfParser : public NmeaParser, public SirfProtocol { + // public data +public: + + // protected data +protected: + + // private data +private: + // data + u_char state; // parser state + + // private methods + + // public methods +public: + // constructors + SirfParser(); + + // destructor + virtual ~SirfParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return SirfDecode( (const u_char *)buf, max); }; + int GpsParse( const char *buf, int max ) { return SirfParse( buf, max ); }; + + // public methods + int SirfDecode( const u_char *buf, int max ); + int SirfParse( const char *buf, int max ); +}; + +#endif diff --git a/include/libgps++/SirfProtocol.h b/include/libgps++/SirfProtocol.h new file mode 100644 index 0000000..fa99d96 --- /dev/null +++ b/include/libgps++/SirfProtocol.h @@ -0,0 +1,53 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __SirfProtocol__ +#define __SirfProtocol__ + +/* includes *****************************************************************/ + +#include "netlib.h" + +#include "NmeaProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// GpsLinux because it depennds on GPSd, the HAMLIB and NMEAP libraries +// +class SirfProtocol { + // public data +public: + + // protected data +protected: + + // private data +private: + + // private methods + + // public methods +public: + // constructors + SirfProtocol(); + + // destructor + virtual ~SirfProtocol(); + + // virtual functions + + // public methods +static void SirfChecksum( unsigned char *buf, int len ); +static void SirfBinary2Nmea( int baud, unsigned char *buf, int max ); +}; + +#endif diff --git a/include/libgps++/UbloxParser.h b/include/libgps++/UbloxParser.h new file mode 100644 index 0000000..3df63c4 --- /dev/null +++ b/include/libgps++/UbloxParser.h @@ -0,0 +1,111 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __UbloxParser__ +#define __UbloxParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaParser.h" +#include "NmeaProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class NmeaSentencePUBX : public NmeaSentence { +public: + int id; + timespec utctime; + // 00 + double latitude; + double longitude; + double altitude_ref; + char navstat[4]; + double horizontal_accuracy; + double vertical_accuracy; + double speed; + double course; + double vvel; + double agec; + double horizontal_dilution; + double vertical_dilution; + double time_dilution; + int gps; + int glonass; + int dead_reckoning; + + // 01 + + // 03 + int satellites; + struct { + int prn; + char status; + double azimuth; + double elevation; + int signal2noise; + int locktime; + } satellite[NMEA_MAX_SATELLITE]; + + // 04 + double utc_tow; + int week; + int clk_b; + double clk_d; + int granularity; + + NmeaSentencePUBX(); + ~NmeaSentencePUBX(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class UbloxParser : public NmeaParser { + // public data +public: + + // protected data +protected: + // u-Blox + NmeaSentencePUBX PUBX; + + // private data +private: + // data + u_char state; // parser state + + // private methods + + // public methods +public: + // constructors + UbloxParser(); + + // destructor + virtual ~UbloxParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return UbloxDecode( (const u_char *)buf, max); }; + int GpsParse( const char *buf, int max ) { return UbloxParse( buf, max ); }; + + // public methods + int UbloxDecode( const u_char *buf, int max ); + int UbloxParse( const char *buf, int max ); +}; + +#endif diff --git a/include/libnet++/Client.h b/include/libnet++/Client.h new file mode 100644 index 0000000..ead125a --- /dev/null +++ b/include/libnet++/Client.h @@ -0,0 +1,63 @@ +// +// Client +// + +/* prevent multiple inclusions */ +#ifndef __Client__ +#define __Client__ + +/* includes *****************************************************************/ + +#include "Socket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Client { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + Client(); + + // destructor + virtual ~Client(); + + // public methods + int ConnectUri( const char *uri ); + int ListenUri( const char *uri ); + + // virtual functions + virtual int Connect( const char *host, const char *service=NULL ) + {return -1;}; + virtual int Listen( const char *host, const char *service=NULL ) + {return 0;}; + + // exceptions + class ClientException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/Clock.h b/include/libnet++/Clock.h new file mode 100644 index 0000000..adb62dd --- /dev/null +++ b/include/libnet++/Clock.h @@ -0,0 +1,79 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Clock__ +#define __Clock__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include + +#include +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Clock { + // public data +public: + + // protected data +protected: + struct timespec Time; + + // private data +private: + + // public methods +public: + // constructors + Clock(); + Clock( time_t tic ); + + // destructor + virtual ~Clock(); + + Clock( const Clock& ); + const Clock& operator=( const Clock& ); + + // public methods + time_t GetUtc( void ) { return Time.tv_sec; }; + struct timespec GetTimeSpec() { return Time; }; + + int Format( char *buf, int max ); + struct timespec Parse( const char *buf ); + + void SetTime( void ); + void SetTime( time_t sec, suseconds_t usec=0L ); + void SetTime( const struct timespec &tv ) { Time = tv; }; + + // microsecond time stamp + unsigned long long GetTimeStamp(); + void SetTimeStamp( unsigned long long ts ); + + // virtual functions + + // exceptions + + // static methods +static int Format( const struct timespec &tv, char **buf, int *max ); + + // private methods +private: + + // signal catchers (do not override) +}; + +#endif diff --git a/include/libnet++/ClockTimer.h b/include/libnet++/ClockTimer.h new file mode 100644 index 0000000..ec2083f --- /dev/null +++ b/include/libnet++/ClockTimer.h @@ -0,0 +1,64 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __ClockTimer__ +#define __ClockTimer__ + +/* includes *****************************************************************/ + +#include "Timer.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class ClockTimer : public Timer { + // public data +public: + + // protected data +protected: + + // private data +private: + long m_timeout; // usec + + // public methods +public: + // constructors + ClockTimer(); + ClockTimer(unsigned long usec); + + // destructor + virtual ~ClockTimer(); + + ClockTimer( const ClockTimer& ); + const ClockTimer& operator=( const ClockTimer& ); + + // public methods + int Restart(void); + int Start( unsigned long usec ); + void Stop(void); + unsigned long Remaining(void); + int Wait(void); + int Sync(void); // Wait()+Restart() + + // virtual functions + + // exceptions + + // static methods + + // private methods +private: + + // signal catchers (do not override) +}; + +#endif diff --git a/include/libnet++/Daemon.h b/include/libnet++/Daemon.h new file mode 100644 index 0000000..9c1311f --- /dev/null +++ b/include/libnet++/Daemon.h @@ -0,0 +1,89 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Daemon__ +#define __Daemon__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include + +#include "LogData.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Daemon { + // public data +public: + + // protected data +protected: + + // private data +private: + char m_name[32]; + bool m_debug; + int m_pid; + + // public methods +public: + // constructors + Daemon(); + Daemon( const char *name, int debug, int noclose ); + + // destructor + virtual ~Daemon(); + + // public methods + int Daemonize( const char *name, int debug=0, int noclose=0 ); + void Die( int code ); + + void SetDebug(bool debug) {m_debug = debug;}; + bool GetDebug(void) {return m_debug;}; + bool IsDebug(void) {return m_debug;}; + void Dprintf( const char *fmt, ... ); + + void SetName(const char *s) {strncpy(m_name,s,sizeof(m_name)-1);}; + char *GetName(void) {return m_name;}; + + int GetPid(void) {return m_pid;}; + + // virtual functions + virtual void DaemonStartup(void) {}; + virtual void DaemonShutdown(void) {}; + virtual void DaemonReload(void) {}; + + // exceptions + class DaemonException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods to override +static int SignalAlarm(void) {return 1;}; +static int SignalDeath(void) {return 1;}; +static int SignalInterrupt(void) {return 1;}; +static void SignalHup(void) {;}; + + // private methods +private: + // signal catchers (do not override) +static void signal_alarm(int signum); +static void signal_child(int signum); +static void signal_death(int signum); +static void signal_intrp(int signum); +static void signal_hup(int signum); +}; + +#endif diff --git a/include/libnet++/LogData.h b/include/libnet++/LogData.h new file mode 100644 index 0000000..f0fc4c3 --- /dev/null +++ b/include/libnet++/LogData.h @@ -0,0 +1,91 @@ +// +// GPS Daemon +// Neal Probert +// + +/* prevent multiple inclusions */ +#ifndef __LogData__ +#define __LogData__ + +/* includes *****************************************************************/ + +#include +#include + +#include "UdpClient.h" + +#ifdef MYSQL_LOGGING +#include "mysql/mysql.h" +#endif +#ifdef BZIP2_LOGGING +#include "bzlib.h" +#endif + +/* defines ******************************************************************/ + +#define LOGD_PORT "2940" + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class LogData : public UdpClient { + // public data +public: + + // private data +private: + // MySQL logging + int nfields; + char myfields[2048]; + FILE *pFile; +#ifdef MYSQL_LOGGING + MYSQL *myconn; + char mytable[256]; + MYSQL_RES *myres; +#endif + long nrecords; + + // formats + bool m_logging; + bool m_syslog; + bool m_binary; + + // static data + + // public methods +public: + // constructors + LogData(); + + // destructor + virtual ~LogData(); + + // public methods + FILE *LogOpen( const char *log = NULL, int bz2=0 ); + int LogRead( timeval *tv, char *buf, int max ); + int LogPrintf( const char *fmt, ... ); + int LogWrite( const char *buf, int max ); + void LogClose( void ); + void LogRotate( void ); + + // text only csv logging + void LogFields( const char *flds ); + int CsvSplit( char *buf, char *field[], int max ); + + // logging control + bool IsLogging(void) {return m_logging;}; + void SetBinary(void) { m_binary=true; }; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/Logging.h b/include/libnet++/Logging.h new file mode 100644 index 0000000..0d79c35 --- /dev/null +++ b/include/libnet++/Logging.h @@ -0,0 +1,59 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Logging__ +#define __Logging__ + +/* includes *****************************************************************/ + +#include "LogData.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Logging { + // public data +public: + LogData Log; + +protected: + // logfile + + // pid + + // private data +private: + + // static data + + // public methods +public: + // constructors + Logging(); + + // destructor + virtual ~Logging(); + + // public methods + FILE *LogOpen( const char *log, int bz2 ) + { return Log.LogOpen( log, bz2 ); }; + FILE *LogOpen( const char *log ) + { return Log.LogOpen( log ); }; + bool IsLogging(void) {return Log.IsLogging();}; + + // virtual functions + + // exceptions + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/Mutex.h b/include/libnet++/Mutex.h new file mode 100644 index 0000000..815b429 --- /dev/null +++ b/include/libnet++/Mutex.h @@ -0,0 +1,72 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Mutex__ +#define __Mutex__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Mutex { + // public data +public: + + // protected data +protected: + pthread_mutexattr_t m_attr; + pthread_mutex_t m_mutex; + + // private data +private: + + // public methods +public: + // constructors + Mutex(); + + // destructor + virtual ~Mutex(); + + Mutex( const Mutex& ); + const Mutex& operator=( const Mutex& ); + + // public methods + void Init( void ); + int Lock( void ); + int TryLock( void ); + int Unlock( void ); + + // virtual functions + + // exceptions + class MutexException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods to override + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/PosixTimer.h b/include/libnet++/PosixTimer.h new file mode 100644 index 0000000..b974603 --- /dev/null +++ b/include/libnet++/PosixTimer.h @@ -0,0 +1,66 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __PosixTimer__ +#define __PosixTimer__ + +/* includes *****************************************************************/ + +#include "Timer.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class PosixTimer : public Timer { + // public data +public: + + // protected data +protected: + + // private data +private: + timer_t m_timerid; + struct itimerspec m_value; + int m_signal; // signal used + bool m_running; + bool m_oneshot; + + // public methods +public: + // constructors + PosixTimer(); + PosixTimer(unsigned long usec); + + // destructor + virtual ~PosixTimer(); + + // public methods + int Restart(void); + int Start( unsigned long usec, bool one_shot=true ); + void Stop(void); + unsigned long Remaining(void); + int Wait(void); + int Sync(void); // Wait()+Restart() + + // virtual functions + + // exceptions + + // static methods + + // private methods +private: + void Init(void); + + // signal catchers (do not override) +}; + +#endif diff --git a/include/libnet++/QueryString.h b/include/libnet++/QueryString.h new file mode 100644 index 0000000..c2efa17 --- /dev/null +++ b/include/libnet++/QueryString.h @@ -0,0 +1,67 @@ +// +// URI Parser +// Neal Probert +// + +/* prevent multiple inclusions */ +#ifndef __QueryString__ +#define __QueryString__ + +/* includes *****************************************************************/ + +#include + +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Chop up the URI into it's component parts +// +class QueryString { + // public data +public: + std::string Name; + std::string Value; + + // private data +private: + + // static data + + // public methods +public: + // constructors + QueryString(); + QueryString(const QueryString ©); + + // destructor + virtual ~QueryString(); + + // operators + QueryString &operator=(const QueryString &rhs); + + // access methods + void setName( const char *s ); + void setValue( const char *s ); + void setValue( int v ); + void Set( const char *name, const char *value=NULL ); + + const char *getName(void) { return Name.c_str(); }; + int getLength(void) { return Value.length(); }; + const char *getValue(void) { return Value.c_str(); }; + const char *Get(void) { return Value.c_str(); }; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/RawSocket.h b/include/libnet++/RawSocket.h new file mode 100644 index 0000000..2c00af6 --- /dev/null +++ b/include/libnet++/RawSocket.h @@ -0,0 +1,78 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __RawSocket__ +#define __RawSocket__ + +/* includes *****************************************************************/ + +#include "Socket.h" + +#include //Provides declarations for icmp header +#include //Provides declarations for udp header +#include //Provides declarations for tcp header +#include //Provides declarations for ip header +#include +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class RawSocket : public Socket { + // public data +public: + struct sockaddr_storage sock_addr; + socklen_t sock_len; + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + RawSocket(); + + // destructor + virtual ~RawSocket(); + + // copy constructor + RawSocket( const RawSocket &src ) ; + const RawSocket& operator=( const RawSocket &src ); + + // public methods + int Socket(); + int RecvFrom( void *buf, int max ); + + // control + + // status + int GetIPHdrLen( const void *buf ); + int GetProtocol( const void *buf ); + struct iphdr *GetIPHeader( const void *buf ) {return (struct iphdr*)buf;}; + struct tcphdr *GetTcpHeader( const void *buf ); + struct udphdr *GetUdpHeader( const void *buf ); + unsigned char *GetData( const void *buf, int *length, int proto=0 ); + + // virtual functions + + // exceptions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/SerialIO.h b/include/libnet++/SerialIO.h new file mode 100644 index 0000000..a4c4f86 --- /dev/null +++ b/include/libnet++/SerialIO.h @@ -0,0 +1,94 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __SerialIO__ +#define __SerialIO__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +/** \class + * + * Serial I/O wrapper and support class, Linux only + */ + +class SerialIO { + // public data +public: + + // protected data +protected: + + // private data +private: + int m_fd; // handle + unsigned long m_sentcnt; // # bytes sent + unsigned long m_recvcnt; // # bytes recv + + // serial config + struct termios termios; + + // public methods +public: + // constructors + SerialIO(); + + // destructor + virtual ~SerialIO(); + + // public methods + + // control + int GetFd( void ) { return m_fd; }; + + void SetBaud( int baud ); + void SetCanonical( bool canonical, int bs=0, int wt=0 ); + void Canonical(void) { SetCanonical(true); }; + void NonCanonical(void) { SetCanonical(false); }; + + // i/o + int Open( const char *dev, int baud ); + int Read( void *buf, int len ); + int Write( const void *buf, int len ); + void Close( void ); + + // status + unsigned long GetBytesSent(void) {return m_sentcnt;}; + unsigned long GetBytesRecv(void) {return m_recvcnt;}; + + // virtual functions (must be overridden!) + + // exceptions + class SerialIOException + { + char *toString(void) { return strerror(errno); }; + }; + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/Server.h b/include/libnet++/Server.h new file mode 100644 index 0000000..fc5c238 --- /dev/null +++ b/include/libnet++/Server.h @@ -0,0 +1,82 @@ +// +// Server +// + +/* prevent multiple inclusions */ +#ifndef __Server__ +#define __Server__ + +/* includes *****************************************************************/ + +#include "Socket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Server { + // public data +public: + +protected: + // socket + int m_nfds; /* number of descriptors */ + fd_set m_rfds; /* set of open sockets */ + + // select + fd_set m_sfds; + struct timeval m_timeout; + struct timeval m_seltime; + + bool m_client_to; // reset timeout on client + + // private data +private: + + // static data + + // public methods +public: + // constructors + Server(); + + // destructor + virtual ~Server(); + + // public methods + // control + void SetTimeout(time_t to); + void SetTimeout(timeval &tv); + void ResetTimeout(void); + void ResetClientTimeout(void) {if(m_client_to)ResetTimeout();}; + void ResetServerTimeout(void) {ResetTimeout();}; + void SetClientTimeout(bool ct) {m_client_to=ct;}; + + // select + void AddFd(int sock) {if(sock>=0)m_nfds=fd_add(sock,&m_rfds,m_nfds);}; + void DelFd(int sock) {if(sock>=0)FD_CLR(sock,&m_rfds);}; + bool IsSet(int sock) {if(sock>=0)return FD_ISSET(sock,&m_sfds);return 0;}; + int Select( void ); + + // service + int ServiceUri( const char *uri ); + + // virtual functions + virtual int Service( const char *host, const char *service=NULL ) {return -1;}; + virtual int Listen( void ) {return 0;}; + virtual int ServerTimeout(void) {return 0;}; + virtual int ServerSocket(void) {return 0;}; // other socket + + // exceptions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/Socket.h b/include/libnet++/Socket.h new file mode 100644 index 0000000..3262dac --- /dev/null +++ b/include/libnet++/Socket.h @@ -0,0 +1,165 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __Socket__ +#define __Socket__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +#if defined(__BIG_ENDIAN) +# define ntohll(x) (x) +# define htonll(x) (x) +#elif defined(__LITTLE_ENDIAN) +# define ntohll(x) bswap_64(x) +# define htonll(x) bswap_64(x) +#endif + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Socket { + // public data +public: + + // protected data +protected: + // socket + int m_family; // AF_UNIX, AF_INET or AF_INET6 + int m_proto; // protocol + int m_sock; // socket + + void LogSocket( const char *str ); + + // private data +private: + // reference + static char g_hostname[256]; + char m_host[256]; + char m_port[32]; + + // stats + unsigned long m_sentcnt; + unsigned long m_recvcnt; + + // static data + + // public methods +public: + // constructors + Socket(); + + // destructor + virtual ~Socket(); + + // copy constructor + Socket( const Socket& ); + const Socket& operator=( const Socket& ); + + // public methods + int ClientUri( const char *uri ); + int ServerUri( const char *uri ); + + // control + void SetFamily( int family ) {m_family = family;}; + void SetProto( int proto ) {m_proto = proto;}; + void SetHost(const char *host) {if(host)strncpy(m_host,host,sizeof(m_host)-1);}; + void SetPort(const char *port) {if(port)strncpy(m_port,port,sizeof(m_port)-1);}; + void SetHostPort(const char *host, const char *port) + {SetHost(host);SetPort(port);}; + void SetSocket( int sock ) {m_sock=sock;}; + + // i/o + int Bind( const struct sockaddr_storage *sa, int len ) + {return Bind(m_sock,sa,len);}; + void Close( void ); + + int Recv( void *buf, int len ); + int Send( const void *buf, int len ); + int RecvFrom( void *buf, int max, struct sockaddr_storage *sa, socklen_t *len ); + int SendTo( const void *buf, int max, const struct sockaddr_storage *sa, socklen_t len ); + + // status + unsigned long GetBytesSent(void) {return m_sentcnt;}; + unsigned long GetBytesRecv(void) {return m_recvcnt;}; + const char *GetHostName(void) {return g_hostname;}; + const char *GetHost(void) {return m_host;}; + const char *GetPort(void) {return m_port;}; + + int GetFamily(void) {return m_family;}; + int GetProto(void) {return m_proto;}; + int GetSock(void) {return m_sock;}; + int GetSocket(void) {return m_sock;}; + int SockAddr( struct sockaddr_storage *sa ) {return SockAddr(m_sock,sa);}; + int SockName( char *buf, int max ) {return SockName(m_sock,buf,max); }; + + // virtual functions (must be overridden!) + virtual int Client( const char *host, const char *port ) {return -1;}; + virtual int Server( const char *host, const char *port ) {return -1;}; + virtual void Closed(void) {;}; + + // exceptions + class SocketException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + static int Bind( int sock, const struct sockaddr_storage *sa, socklen_t len ); + static int Recv( int sock, void *buf, int max ); + static int Send( int sock, const void *buf, int len ); + static int RecvFrom( int sock, void *buf, int n, + struct sockaddr_storage *sa, socklen_t *len ); + static int SendTo( int sock, const void *buf, int len, + const struct sockaddr_storage *sa, int salen ); + + static int Host2Addr(const char *host, const char *service, + struct sockaddr_storage *sa, socklen_t *len); + static const char *Host2Name( const struct sockaddr_storage *sa, + char *buf, int max ); + static int Name2Host( const char *buf, struct sockaddr_storage *sa ); + static int SockAddr( int sock, struct sockaddr_storage *sa ); + static int SockName( int sock, char *buf, int max ); + + static int String2Mac( const char *str, unsigned char *mac ); + static int Mac2String( const unsigned char *mac, char *str ); + static int Interface2MacAddr( const char *name, unsigned char *mac ); + static int Service2Port( const char *service, int port, const char *proto ); + + // protected methods +protected: + void Copy( const Socket &sock ); + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/TcpArchdaemon.h b/include/libnet++/TcpArchdaemon.h new file mode 100644 index 0000000..add6130 --- /dev/null +++ b/include/libnet++/TcpArchdaemon.h @@ -0,0 +1,56 @@ +// +// TCP Daemon +// + +/* prevent multiple inclusions */ +#ifndef __TcpArchdaemon__ +#define __TcpArchdaemon__ + +/* includes *****************************************************************/ + +#include "TcpDaemon.h" +#include "TcpThread.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class TcpArchdaemon : public TcpDaemon { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + TcpArchdaemon(); + + // destructor + virtual ~TcpArchdaemon(); + + // public methods + int StartService(const char *n,const char *h,const char *p,int d=0,int c=0); + int RunService(void); + + // overidden methods + int Listen( void *arg=NULL ); + virtual TcpThread *ClientThread( void **parg ) {return NULL;}; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/TcpClient.h b/include/libnet++/TcpClient.h new file mode 100644 index 0000000..1062bb6 --- /dev/null +++ b/include/libnet++/TcpClient.h @@ -0,0 +1,64 @@ +// +// TCP Client +// + +/* prevent multiple inclusions */ +#ifndef __TcpClient__ +#define __TcpClient__ + +/* includes *****************************************************************/ + +#include "TcpSocket.h" +#include "Client.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class TcpClient : public Client, public TcpSocket { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + TcpClient(); + TcpClient( const char *host, const char *service=NULL ); + + // destructor + virtual ~TcpClient(); + + // public methods + int ConnectUri( const char *uri ); + int Connect( const char *host, const char *service=NULL ); + int Reconnect(void) { Close();return Connect(GetHost(),GetPort()); }; + + // virtual functions + + // exceptions + class TcpClientException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + + // private methods + void Init( void ); + +private: +}; + +#endif diff --git a/include/libnet++/TcpDaemon.h b/include/libnet++/TcpDaemon.h new file mode 100644 index 0000000..7c65db8 --- /dev/null +++ b/include/libnet++/TcpDaemon.h @@ -0,0 +1,52 @@ +// +// TCP Daemon +// + +/* prevent multiple inclusions */ +#ifndef __TcpDaemon__ +#define __TcpDaemon__ + +/* includes *****************************************************************/ + +#include "Daemon.h" +#include "TcpServer.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class TcpDaemon : public TcpServer, public Daemon { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + TcpDaemon(); + + // destructor + virtual ~TcpDaemon(); + + // public methods + int StartService(const char *n,const char *h,const char *p,int d=0,int c=0); + int RunService(void); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/TcpServer.h b/include/libnet++/TcpServer.h new file mode 100644 index 0000000..4ef7115 --- /dev/null +++ b/include/libnet++/TcpServer.h @@ -0,0 +1,81 @@ +// +// TCP Server +// + +/* prevent multiple inclusions */ +#ifndef __TcpServer__ +#define __TcpServer__ + +/* includes *****************************************************************/ + +#include "TcpSocket.h" +#include "Daemon.h" +#include "Server.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class TcpServer : public Server, public TcpSocket { + // public data +public: + + // protected data +protected: + // logfile + + // private data +private: + // socket + int m_clients; + fd_set m_cfds; /* client sockets */ + + // static data + + // public methods +public: + // constructors + TcpServer(); + TcpServer( const char *host, const char *service ); + + // destructor + virtual ~TcpServer(); + + // public methods + int ServiceUri( const char *uri ); + int Service( const char *host, const char *service=NULL ); + int Listen( void ); + int Restart( void ); + int NumClients(void) {return m_clients;}; + + // virtual functions + virtual int ServerTimeout(void) {return 0;}; + virtual int ServerSocket(void) {return 0;}; // other socket (not client) + + virtual int ClientUp( int sock ) { return 1; }; + virtual void ClientDown( int sock ) {;}; + virtual int ClientSock( int sock ) {return 0;}; + virtual int ClientIn( int client, const char *buf, int n ); + virtual int ClientOut( int client, char *buf, int max ); + virtual void ClientCast( const char *buf, int len ); + + // exceptions + class TcpServerException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + + // private methods + void Init(void); + +private: + void ClientAdd(int sock); +}; + +#endif diff --git a/include/libnet++/TcpSocket.h b/include/libnet++/TcpSocket.h new file mode 100644 index 0000000..0ca95de --- /dev/null +++ b/include/libnet++/TcpSocket.h @@ -0,0 +1,69 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __TcpSocket__ +#define __TcpSocket__ + +/* includes *****************************************************************/ + +#include "Socket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class TcpSocket : public Socket { + // public data +public: + +protected: + // socket + + // stats + + // private data +private: + + // static data + + // public methods +public: + // constructors + TcpSocket(); + + // destructor + virtual ~TcpSocket(); + + // copy constructor + TcpSocket( const TcpSocket &src ) {Copy(src);}; + const TcpSocket& operator=( const TcpSocket &src ) {this->Copy(src);return *this;}; + + // public methods + int Client( const char *host, const char *port ); + int Server( const char *host, const char *port ); + int Accept( struct sockaddr_storage *sa ); + int SendStr( const char *str ); + + // control + int Nagle( int flag ) {return Nagle(m_sock,flag);}; + + // status + + // virtual functions + + // exceptions + + // static methods + static int Nagle( int sock, int flag ); + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/TcpThread.h b/include/libnet++/TcpThread.h new file mode 100644 index 0000000..3c9f8e5 --- /dev/null +++ b/include/libnet++/TcpThread.h @@ -0,0 +1,60 @@ +// +// TCP Thread +// + +/* prevent multiple inclusions */ +#ifndef __TcpThread__ +#define __TcpThread__ + +/* includes *****************************************************************/ + +#include "TcpClient.h" +#include "Thread.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class TcpThread : public TcpClient, public Thread { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + TcpThread(); + + // destructor + virtual ~TcpThread(); + + // public methods + void SetSocket( int sock ) {Socket::SetSocket(sock);}; + int Detach(void) {return pthread_detach(pthread_self());}; + + // virtual functions + virtual void *Run(void *); + + // exceptions + class TcpThreadException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/include/libnet++/Thread.h b/include/libnet++/Thread.h new file mode 100644 index 0000000..18223e8 --- /dev/null +++ b/include/libnet++/Thread.h @@ -0,0 +1,81 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Thread__ +#define __Thread__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Thread { + // public data +public: + void *m_arg; + + // protected data +protected: + pthread_t m_thread; + pthread_attr_t m_attr; + + // private data +private: + bool m_join; + + // public methods +public: + // constructors + Thread(); + + // destructor + virtual ~Thread(); + + Thread( const Thread& ); + const Thread& operator=( const Thread& ); + + // public methods + void Init(void); + int Start( void *arg = NULL, bool detach = false ); + int Stop( void ); + int Join( void **pptr = NULL ); + + pthread_t GetTid(void) {return m_thread;}; + + // virtual functions + virtual bool Prep(void); + virtual void *Run(void *) = 0; // {return NULL;}; + + // exceptions + class ThreadException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods to override + + // private methods +private: + // signal catchers (do not override) +}; + +#endif diff --git a/include/libnet++/Timer.h b/include/libnet++/Timer.h new file mode 100644 index 0000000..89d1b2a --- /dev/null +++ b/include/libnet++/Timer.h @@ -0,0 +1,80 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Timer__ +#define __Timer__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Timer { + // public data +public: + + // protected data +protected: + struct timespec m_timespec; + bool m_running; + + // private data +private: + + // public methods +public: + // constructors + Timer(); + + // destructor + virtual ~Timer(); + + // public methods + + // virtual functions + virtual int Restart(void); + virtual int Start( unsigned long usec ); + virtual void Stop(void); + virtual unsigned long Remaining(void); + virtual int Wait(void); + virtual int Sync(void); // Wait()+Restart() + + // exceptions + class TimerException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods +static void Sleep( unsigned int sec ) { sleep(sec); }; +static void MilliSleep( unsigned long msec ) { msleep(msec); }; +static void MicroSleep( unsigned long usec ) { usleep(usec); }; +static void NanoSleep( unsigned long nsleep ); + + // private methods +private: + + // signal catchers (do not override) +}; + +#endif diff --git a/include/libnet++/UdpArchdaemon.h b/include/libnet++/UdpArchdaemon.h new file mode 100644 index 0000000..e5d679b --- /dev/null +++ b/include/libnet++/UdpArchdaemon.h @@ -0,0 +1,56 @@ +// +// TCP Daemon +// + +/* prevent multiple inclusions */ +#ifndef __UdpArchdaemon__ +#define __UdpArchdaemon__ + +/* includes *****************************************************************/ + +#include "UdpDaemon.h" +#include "UdpThread.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpArchdaemon : public UdpDaemon { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpArchdaemon(); + + // destructor + virtual ~UdpArchdaemon(); + + // public methods + int StartService(const char *n,const char *h,const char *p,int d=0,int c=0); + int RunService(void); + + // overidden methods + int Listen( void *arg=NULL ); + virtual UdpThread *ClientThread( void **parg ) {return NULL;}; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/UdpCaster.h b/include/libnet++/UdpCaster.h new file mode 100644 index 0000000..3f85944 --- /dev/null +++ b/include/libnet++/UdpCaster.h @@ -0,0 +1,65 @@ +// +// UDP Caster +// + +/* prevent multiple inclusions */ +#ifndef __UdpCaster__ +#define __UdpCaster__ + +/* includes *****************************************************************/ + +#include "UdpSocket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpCaster : public UdpSocket { + // public data +public: + +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpCaster(); + UdpCaster( const char *host, const char *service ); + + // destructor + virtual ~UdpCaster(); + + // public methods + int BroadcasterUri( const char *uri ); + int Broadcaster( const char *host, const char *service=NULL ); + int CasterUri( const char *uri ); + int Caster( const char *host, const char *service=NULL ); + int Restart( void ); + + // virtual functions + virtual int SendTo( const void *buf, int max ); + + // exceptions + class UdpCasterException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + + // private methods + void Init( void ); + +private: +}; + +#endif diff --git a/include/libnet++/UdpClient.h b/include/libnet++/UdpClient.h new file mode 100644 index 0000000..ad6e8e3 --- /dev/null +++ b/include/libnet++/UdpClient.h @@ -0,0 +1,63 @@ +// +// TCP Client +// + +/* prevent multiple inclusions */ +#ifndef __UdpClient__ +#define __UdpClient__ + +/* includes *****************************************************************/ + +#include "UdpSocket.h" +#include "Client.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpClient : public Client, public UdpSocket { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpClient(); + UdpClient( const char *host, const char *service ); + + // destructor + virtual ~UdpClient(); + + // public methods + int ConnectUri( const char *uri ); + int Connect( const char *host, const char *service=NULL ); + int Reconnect() { Close();return Connect(GetHost(),GetPort()); }; + int ListenUri( const char *uri ); + int Listen( const char *host, const char *port ); + + // virtual functions + + // exceptions + class UdpClientException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/include/libnet++/UdpDaemon.h b/include/libnet++/UdpDaemon.h new file mode 100644 index 0000000..449f0d5 --- /dev/null +++ b/include/libnet++/UdpDaemon.h @@ -0,0 +1,52 @@ +// +// TCP Daemon +// + +/* prevent multiple inclusions */ +#ifndef __UdpDaemon__ +#define __UdpDaemon__ + +/* includes *****************************************************************/ + +#include "Daemon.h" +#include "UdpServer.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpDaemon : public UdpServer, public Daemon { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpDaemon(); + + // destructor + virtual ~UdpDaemon(); + + // public methods + int StartService(const char *n,const char *h,const char *p,int d=0,int c=0); + int RunService(void); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/UdpServer.h b/include/libnet++/UdpServer.h new file mode 100644 index 0000000..bf6c11e --- /dev/null +++ b/include/libnet++/UdpServer.h @@ -0,0 +1,65 @@ +// +// TCP Server +// + +/* prevent multiple inclusions */ +#ifndef __UdpServer__ +#define __UdpServer__ + +/* includes *****************************************************************/ + +#include "UdpSocket.h" +#include "Daemon.h" +#include "Server.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpServer : public Server, public UdpSocket { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpServer(); + UdpServer( const char *host, const char *service ); + + // destructor + virtual ~UdpServer(); + + // public methods + int ServiceUri( const char *uri ); + int Service( const char *host, const char *service=NULL ); + int Listen( void ); + int Restart( void ); + + // virtual functions + virtual int ClientSock( int sock ) {return 0;}; + virtual int ClientInOut( char *buf, int n, int max ) {return n;}; + + // exceptions + class UdpServerException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/include/libnet++/UdpSocket.h b/include/libnet++/UdpSocket.h new file mode 100644 index 0000000..4cf0bee --- /dev/null +++ b/include/libnet++/UdpSocket.h @@ -0,0 +1,74 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __UdpSocket__ +#define __UdpSocket__ + +/* includes *****************************************************************/ + +#include "Socket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpSocket : public Socket { + // public data +public: + + // protected data +protected: + struct sockaddr_storage sock_addr; + socklen_t sock_len; + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpSocket(); + + // destructor + virtual ~UdpSocket(); + + // copy constructor + UdpSocket( const UdpSocket &src ) ; + const UdpSocket& operator=( const UdpSocket &src ); + + // public methods + int Socket( const char *host, const char *port ); + int Client( const char *host, const char *port ); + int Server( const char *host, const char *port ); + int Broadcast( const char *host, const char *port, + struct sockaddr_storage *sa, socklen_t *len ); + int Listener( const char *host, const char *port ); + int Multicast( const char *host, const char *port, + struct sockaddr_storage *sa, socklen_t *len ); + + int RecvFrom( void *buf, int max ); + int SendTo( const void *buf, int len ); + + // control + + // status + + // virtual functions + + // exceptions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/UdpThread.h b/include/libnet++/UdpThread.h new file mode 100644 index 0000000..5ca3866 --- /dev/null +++ b/include/libnet++/UdpThread.h @@ -0,0 +1,59 @@ +// +// UDP Thread +// + +/* prevent multiple inclusions */ +#ifndef __UdpThread__ +#define __UdpThread__ + +/* includes *****************************************************************/ + +#include "UdpClient.h" +#include "Thread.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpThread : public UdpClient, public Thread { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpThread(); + + // destructor + virtual ~UdpThread(); + + // public methods + void SetSocket( int sock ) {Socket::SetSocket(sock);}; + + // virtual functions + virtual void *Run(void *); + + // exceptions + class UdpThreadException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/include/libnet++/UdsClient.h b/include/libnet++/UdsClient.h new file mode 100644 index 0000000..1f73bc3 --- /dev/null +++ b/include/libnet++/UdsClient.h @@ -0,0 +1,59 @@ +// +// TCP Client +// + +/* prevent multiple inclusions */ +#ifndef __UdsClient__ +#define __UdsClient__ + +/* includes *****************************************************************/ + +#include "UdsSocket.h" +#include "Client.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdsClient : public Client, public UdsSocket { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdsClient(); + UdsClient( const char *file ); + + // destructor + virtual ~UdsClient(); + + // public methods + int Connect( const char *file ); + + // virtual functions + + // exceptions + class UdsClientException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/include/libnet++/UdsDaemon.h b/include/libnet++/UdsDaemon.h new file mode 100644 index 0000000..5a2f55e --- /dev/null +++ b/include/libnet++/UdsDaemon.h @@ -0,0 +1,52 @@ +// +// TCP Daemon +// + +/* prevent multiple inclusions */ +#ifndef __UdsDaemon__ +#define __UdsDaemon__ + +/* includes *****************************************************************/ + +#include "Daemon.h" +#include "UdsServer.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdsDaemon : public UdsServer, public Daemon { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdsDaemon(); + + // destructor + virtual ~UdsDaemon(); + + // public methods + int StartService(const char *f,int d=0,int c=0); + int RunService(void); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/UdsServer.h b/include/libnet++/UdsServer.h new file mode 100644 index 0000000..31d629c --- /dev/null +++ b/include/libnet++/UdsServer.h @@ -0,0 +1,64 @@ +// +// TCP Server +// + +/* prevent multiple inclusions */ +#ifndef __UdsServer__ +#define __UdsServer__ + +/* includes *****************************************************************/ + +#include "UdsSocket.h" +#include "Daemon.h" +#include "Server.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdsServer : public Server, public UdsSocket { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdsServer(); + UdsServer( const char *file ); + + // destructor + virtual ~UdsServer(); + + // public methods + int Service( const char *file ); + int Listen( void ); + int Restart( void ); + + // virtual functions + virtual int ClientSock( int sock ) {return 0;}; + virtual int ClientInOut( char *buf, int n, int max ) {return n;}; + + // exceptions + class UdsServerException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/include/libnet++/UdsSocket.h b/include/libnet++/UdsSocket.h new file mode 100644 index 0000000..e65b0aa --- /dev/null +++ b/include/libnet++/UdsSocket.h @@ -0,0 +1,70 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __UdsSocket__ +#define __UdsSocket__ + +/* includes *****************************************************************/ + +#include "Socket.h" +#include + +/* defines ******************************************************************/ + +#define MAX_UDS_CLIENTS 10 + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdsSocket : public Socket { + // public data +public: + + // protected data +protected: + char m_file[1024]; + struct sockaddr_storage sock_addr; + socklen_t sock_len; + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdsSocket(); + + // destructor + virtual ~UdsSocket(); + + // copy constructor + UdsSocket( const UdsSocket &src ) ; + const UdsSocket& operator=( const UdsSocket &src ); + + // public methods + int Socket( const char *file ); + int Client( const char *file ); + int Server( const char *file ); + + // control + + // status + + // virtual functions + + // exceptions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/include/libnet++/UdsThread.h b/include/libnet++/UdsThread.h new file mode 100644 index 0000000..a740736 --- /dev/null +++ b/include/libnet++/UdsThread.h @@ -0,0 +1,59 @@ +// +// UDP Thread +// + +/* prevent multiple inclusions */ +#ifndef __UdsThread__ +#define __UdsThread__ + +/* includes *****************************************************************/ + +#include "UdsClient.h" +#include "Thread.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdsThread : public UdsClient, public Thread { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdsThread(); + + // destructor + virtual ~UdsThread(); + + // public methods + void SetSocket( int sock ) {Socket::SetSocket(sock);}; + + // virtual functions + virtual void *Run(void *); + + // exceptions + class UdsThreadException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/include/libnet++/UriParse.h b/include/libnet++/UriParse.h new file mode 100644 index 0000000..68f1caa --- /dev/null +++ b/include/libnet++/UriParse.h @@ -0,0 +1,91 @@ +// +// URI Parser +// Neal Probert +// + +/* prevent multiple inclusions */ +#ifndef __UriParse__ +#define __UriParse__ + +/* includes *****************************************************************/ + +#include +#include +#include + +#include +#include + +#include "QueryString.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Chop up the URI into it's component parts +// +class UriParse { + // public data +public: + std::string Proto; + std::string User; + std::string Pass; + std::string Host; + std::string Port; + std::string Path; + std::vector Queries; + + // private data +private: + int Rate; + + // static data + + // public methods +public: + // constructors + UriParse(); + UriParse( const char *uri ); + + // destructor + virtual ~UriParse(); + + // access methods + int setUri( const char *uri ); // parse + int getUri( char *buf, int size ); + + void setProto( const char *s ) { Proto = s; }; + void setUser( const char *s ) { User = s; }; + void setPassword( const char *s ) { Pass = s; }; + void setHost( const char *s ) { Host = s; }; + void setService( const char *s ){ Port = s; }; + void setPort( int p ) { Port = p; }; + void setPath( const char *s ) { Path = s; }; + void setRate( int r ) { Rate = r; }; + + const char *getProto(void) { return Proto.c_str(); }; + const char *getUser(void) { return User.c_str(); }; + const char *getPassword(void) { return Pass.c_str(); }; + const char *getHost(void) { return Host.c_str(); }; + const char *getService(void) { return Port.c_str(); }; + int getPort(void); + const char *getPath(void) { return Path.c_str(); }; + int getRate(void) { return Rate; }; + + void setQuery( const char *name, const char *value ); + const char *getQuery( const char *name ); + + // static methods + + // private methods +private: + void Init(void); + int Parse( const char *uri ); +}; + +#endif diff --git a/include/memlib.h b/include/memlib.h new file mode 100644 index 0000000..3fff148 --- /dev/null +++ b/include/memlib.h @@ -0,0 +1,39 @@ +#ifndef __MEMLIB_INCLUDE__ +#define __MEMLIB_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include + +//#pragma deprecated (memcpy, memmove) + +/****************************************************************************** + * defines + *****************************************************************************/ + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void memcpy_s(void *dest, size_t max, const void *src, size_t count); +void memmove_s(void *dest, size_t max, const void *src, size_t count); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/include/netlib.h b/include/netlib.h new file mode 100644 index 0000000..9ec98b1 --- /dev/null +++ b/include/netlib.h @@ -0,0 +1,143 @@ +#ifndef __NETLIB_INCLUDE__ +#define __NETLIB_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "strlib.h" + +/****************************************************************************** + * defines + *****************************************************************************/ + +#define VAR_LOG_RUN_NAME "cnomicon" + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +typedef struct _uri_parts { + char proto[8]; + char user[16]; + char pass[16]; + char host[256]; + char port[16]; + char path[1204]; + int rate; +} uri_parts; + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* File */ +int fd_add( int sock, fd_set *pfds, int nfds ); +int fd_count( fd_set *pfds ); +int selector( int *nfds, fd_set *rfds, fd_set *wfds, long usec ); + +/* Runtime */ +void log_path( const char * ); +FILE *log_open( const char * ); +void log_write( const char * ); +void log_printf( const char *, ... ); +void log_error( const char * ); +void log_on(void); +void log_off(void); +void pid_path( const char * ); +int pid_create( const char * ); +void pid_delete( void ); + +/* Serial I/O */ +int serial_open( char *tty, int baud, int vmin, int vwait ); + +/* Signals */ +int sigrt_alloc(void); +void sigrt_free(int sig); + +/* TCP/IP Basics */ +int ip_host2addr( const char *host, const char *service, struct sockaddr_storage *ss, socklen_t *len ); +const char *ip_host2name( char *buf, int max, const struct sockaddr_storage *ss); +int ip_name2host( const char *buf, struct sockaddr_storage *ss); +int ip_service2port( const char *service, int port, const char *proto ); +int ip_sockname( int sock, struct sockaddr_storage *ss ); + +/* MAC Address */ +int mac_interface2macaddr( const char *, unsigned char * ); +int mac_string2mac( const char *str, unsigned char *mac ); +int mac_mac2string( const unsigned char *mac, char *str ); + +/* TCP Server */ +int tcp_server( const char *host, const char *service ); +int tcp_accept( int sock, struct sockaddr_storage *ss ); + +/* TCP Client */ +int tcp_client( const char *host, const char *service ); +int tcp_nagle( int sock, int flag ); + +/* TCP I/O */ +int tcp_recv( int sock, void *buf, int len ); +int tcp_send( int sock, const char *buf, int len ); +int tcp_sendstr( int sock, const char *str ); + +/* UDP Server */ +int udp_server( const char *host, const char *service ); +int udp_client( const char *host, const char *service ); +int udp_socket( const char *host, const char *service ); + +/* UDP Broadcast */ +int udp_broadcast( const char *host, const char *service, struct sockaddr_storage *, socklen_t *); +int udp_multicast( const char *host, const char *service, struct sockaddr_storage *, socklen_t *); +int udp_listener( const char *host, const char *service ); + +/* UDP I/O */ +int udp_recvfrom( int sock, void *buf, int n, struct sockaddr_storage *, socklen_t *len ); +int udp_sendto( int sock, const char *buf, int n, const struct sockaddr_storage *, int len ); +int udp_sendstr( int sock, const char *buf, const struct sockaddr_storage *, int len ); + +/* Unix Domain Socket (UDS) */ +int uds_client( const char *file ); +int uds_server( const char *file ); + +/* URI */ +void uri_clear( uri_parts *parsed ); +void uri_defaults( uri_parts *parsed ); +int uri_parse( const char *uri, uri_parts *parsed ); + +/* misc */ +int chomp(char *s); +void base64(const unsigned char *in, char *out, int len); +int unbase64(const char *in, unsigned char *out, int max); +int msleep(unsigned long msec); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +// connected udp socket +#define udp_send(S,B,L) tcp_send(S,B,L) +#define uds_recv(S,B,L) tcp_recv(S,B,L) +#define uds_send(S,B,L) tcp_send(S,B,L) + +#endif diff --git a/include/strlib.h b/include/strlib.h new file mode 100644 index 0000000..cccadbc --- /dev/null +++ b/include/strlib.h @@ -0,0 +1,40 @@ +#ifndef __STRLIB_INCLUDE__ +#define __STRLIB_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include + +//#pragma deprecated (strcpy, strcat) + +/****************************************************************************** + * defines + *****************************************************************************/ + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +size_t strlcat(char *dst, const char *src, size_t siz); +size_t strlcpy(char *dst, const char *src, size_t siz); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/include/utillib.h b/include/utillib.h new file mode 100644 index 0000000..5e798a8 --- /dev/null +++ b/include/utillib.h @@ -0,0 +1,55 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Multiplatform Embedded Data Types and Conversion + * Checksum and CRC Routines +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _UTILLIB_H_ +#define _UTILLIB_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include +#include + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void hex_print(FILE *pHexFile, const u_char *packet, int length); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/libasn1.so.1.0 b/lib/libasn1.so.1.0 new file mode 120000 index 0000000..811963b --- /dev/null +++ b/lib/libasn1.so.1.0 @@ -0,0 +1 @@ +libasn1.so \ No newline at end of file diff --git a/lib/libcan++.so.1.0 b/lib/libcan++.so.1.0 new file mode 120000 index 0000000..f275a06 --- /dev/null +++ b/lib/libcan++.so.1.0 @@ -0,0 +1 @@ +libcan++.so \ No newline at end of file diff --git a/lib/libemb.so.1.0 b/lib/libemb.so.1.0 new file mode 120000 index 0000000..1050149 --- /dev/null +++ b/lib/libemb.so.1.0 @@ -0,0 +1 @@ +libemb.so \ No newline at end of file diff --git a/lib/libgps++.so.1.0 b/lib/libgps++.so.1.0 new file mode 120000 index 0000000..a106203 --- /dev/null +++ b/lib/libgps++.so.1.0 @@ -0,0 +1 @@ +libgps++.so \ No newline at end of file diff --git a/lib/libnet++.so.1.0 b/lib/libnet++.so.1.0 new file mode 120000 index 0000000..be1ffaa --- /dev/null +++ b/lib/libnet++.so.1.0 @@ -0,0 +1 @@ +libnet++.so \ No newline at end of file diff --git a/lib/libnet.so.1.0 b/lib/libnet.so.1.0 new file mode 120000 index 0000000..d99389f --- /dev/null +++ b/lib/libnet.so.1.0 @@ -0,0 +1 @@ +libnet.so \ No newline at end of file diff --git a/lib/libutil.so.1.0 b/lib/libutil.so.1.0 new file mode 120000 index 0000000..de1506d --- /dev/null +++ b/lib/libutil.so.1.0 @@ -0,0 +1 @@ +libutil.so \ No newline at end of file diff --git a/misc/PACKAGES.txt b/misc/PACKAGES.txt new file mode 100644 index 0000000..e27bd1f --- /dev/null +++ b/misc/PACKAGES.txt @@ -0,0 +1,35 @@ + + Libraries (lib*-dev packages) needed + + +Install via apt-get for Debian/Ubuntu (Debian packages): +-------------------------------------------------------- +Must have g++, gcc, linux-headers and build-essential (Ubuntu) + +asn1c +libboost-dev (Boost library) +libgd2-xpm-dev (GD, graphics library) +libmuparser-dev (muParser expression library) +libmysqlclient15-dev (MySQL client) +libpthread (Thread library, included in base) +librt (Realtime library, included in base) +libxml2-dev (XML library) +xutils-dev (X11 development) +libbz2-dev (Bzip2 library) +libkml-dev (Google KML library) +liburiparser-dev (URI Parser library) +libpopt-dev (Needed by PCAN driver) + +Install via yum for Fedora Core 4 (RPM packages): +------------------------------------------------- +*-devel equivalents for above. +subversion (Latest version not available as package) + +Downloaded, compiled and installed (if packages not available): +--------------------------------------------------------------- +libkml (Google KML library) +libmuparser (muParser, if no package available) + +External dependencies: +---------------------- +Socket-CAN needed for libcan++ diff --git a/misc/PORTS.txt b/misc/PORTS.txt new file mode 100644 index 0000000..bf639e7 --- /dev/null +++ b/misc/PORTS.txt @@ -0,0 +1,13 @@ + + Network Port Map + ================ + +rtcmd 2101 dgpsip rtcm-sc104 + +logd 2940 tcp +stdiod 2945 tcp +seriald 2941 tcp + +cand 2946 tcp +gpsd 2947 gpsd +trackd 2948 tcp diff --git a/misc/README.net b/misc/README.net new file mode 100644 index 0000000..91738c5 --- /dev/null +++ b/misc/README.net @@ -0,0 +1,10 @@ + + C, C++ Sockets Library + +Is based on Neal's socket library that he's built up over the years, updated +for IPv6. Much of which came from the Stevens Unix Network programming book. + +Rather than write testing tools, there are a ton of them out there: + +nc, netcat, netcat6, netpipes, netsed, telnet, udpcast + diff --git a/misc/packages.sh b/misc/packages.sh new file mode 100755 index 0000000..6668f5f --- /dev/null +++ b/misc/packages.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +apt-get install build-essential linux-headers + +apt-get install asn1c libboost-dev libgd2-xpm-dev libmuparser-dev libmysqlclient-dev libxml2-dev xutils-dev libbz2-dev libkml-dev liburiparser-dev subversion subversion-tools can-utils libpopt-dev diff --git a/packages/PACKAGES.txt b/packages/PACKAGES.txt new file mode 100644 index 0000000..e27bd1f --- /dev/null +++ b/packages/PACKAGES.txt @@ -0,0 +1,35 @@ + + Libraries (lib*-dev packages) needed + + +Install via apt-get for Debian/Ubuntu (Debian packages): +-------------------------------------------------------- +Must have g++, gcc, linux-headers and build-essential (Ubuntu) + +asn1c +libboost-dev (Boost library) +libgd2-xpm-dev (GD, graphics library) +libmuparser-dev (muParser expression library) +libmysqlclient15-dev (MySQL client) +libpthread (Thread library, included in base) +librt (Realtime library, included in base) +libxml2-dev (XML library) +xutils-dev (X11 development) +libbz2-dev (Bzip2 library) +libkml-dev (Google KML library) +liburiparser-dev (URI Parser library) +libpopt-dev (Needed by PCAN driver) + +Install via yum for Fedora Core 4 (RPM packages): +------------------------------------------------- +*-devel equivalents for above. +subversion (Latest version not available as package) + +Downloaded, compiled and installed (if packages not available): +--------------------------------------------------------------- +libkml (Google KML library) +libmuparser (muParser, if no package available) + +External dependencies: +---------------------- +Socket-CAN needed for libcan++ diff --git a/packages/packages.sh b/packages/packages.sh new file mode 100755 index 0000000..7471089 --- /dev/null +++ b/packages/packages.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +ver=`uname -r` +echo "Build packages:" +apt-get install -y build-essential +#apt-get install -y linux-headers +#apt-get install -y linux-headers-$ver + +echo "Library packages:" +apt-get install -y cmake libbz2-dev libboost-dev libgd-dev libmuparser-dev libxml2-dev xutils-dev libbz2-dev libkml-dev liburiparser-dev git subversion subversion-tools libpopt-dev libpcap-dev tcpdump flip + +echo "Misc packages:" +apt-get install -y can-utils + +apt-get autoremove +apt-get clean + +echo +echo "Some packages (can-utils) may have to be manually built and installed" diff --git a/proto/TODO b/proto/TODO new file mode 100644 index 0000000..75e53a1 --- /dev/null +++ b/proto/TODO @@ -0,0 +1,4 @@ + + TODO + +Add SQL samples (MySQL). diff --git a/proto/c++/header.cpp b/proto/c++/header.cpp new file mode 100644 index 0000000..5bff227 --- /dev/null +++ b/proto/c++/header.cpp @@ -0,0 +1,50 @@ +//**************************************************************************** +// Copyright (C) 2008 +// ProbeStar Telematics, LLC +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ +/// \file +/// \brief Description +//---------------------------------------------------------------------------- +// Details +//**************************************************************************** + +//**************************************************************************** +// includes +//***************************************************************************/ + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static prototypes +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ diff --git a/proto/c++/header.h b/proto/c++/header.h new file mode 100644 index 0000000..858fac3 --- /dev/null +++ b/proto/c++/header.h @@ -0,0 +1,41 @@ +//**************************************************************************** +// Copyright (C) 2008 +// ProbeStar Telematics, LLC +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ +/// \file +/// \brief Description +//---------------------------------------------------------------------------- +// Details +//**************************************************************************** + +/* prevent multiple inclusions */ +#ifndef __HEADER_NAME__ +#define __HEADER_NAME__ + +/* includes *****************************************************************/ + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +/** + * + * Class description + * + */ + + /** + * \brief + * Name In/Out/In-Out Range + * \param one + * \param two + * \param three + * \return + */ + +#endif diff --git a/proto/c/func.c b/proto/c/func.c new file mode 100644 index 0000000..2386ba3 --- /dev/null +++ b/proto/c/func.c @@ -0,0 +1,9 @@ +/** + * \brief + * Name In/Out/In-Out Range + * \param one + * \param two + * \param three + * \return + */ + diff --git a/proto/c/header.c b/proto/c/header.c new file mode 100644 index 0000000..41abc02 --- /dev/null +++ b/proto/c/header.c @@ -0,0 +1,51 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Description + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + + diff --git a/proto/c/header.h b/proto/c/header.h new file mode 100644 index 0000000..572e3ab --- /dev/null +++ b/proto/c/header.h @@ -0,0 +1,54 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Description + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef __HEADER_NAME__ +#define __HEADER_NAME__ + +/***************************************************************************** + * includes +*****************************************************************************/ + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ + +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + + +#ifdef __cpluscplus +} +#endif + +#endif diff --git a/proto/java/header.java b/proto/java/header.java new file mode 100644 index 0000000..84a3521 --- /dev/null +++ b/proto/java/header.java @@ -0,0 +1,29 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Description + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/** + * Class constructor. + */ + +/** + * Description + * + * @param url an absolute URL giving the base location of the image + * @param name the location of the image, relative to the url argument + * @return the image at the specified URL + * @see Image + */ +public Image getImage(URL url, String name) { + try { + return getImage(new URL(url, name)); + } catch (MalformedURLException e) { + return null; + } +} \ No newline at end of file diff --git a/proto/javascript/header.js b/proto/javascript/header.js new file mode 100644 index 0000000..520a718 --- /dev/null +++ b/proto/javascript/header.js @@ -0,0 +1,9 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Description + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ diff --git a/proto/perl/header.pl b/proto/perl/header.pl new file mode 100644 index 0000000..ce96cd7 --- /dev/null +++ b/proto/perl/header.pl @@ -0,0 +1,39 @@ +#!/usr/bin/perl -w +############################################################################## +# Copyright (C) 2008 +# ProbeStar Telematics, LLC. +# All Rights Reserved. Proprietary and Confidential. +#============================================================================= +# Description +#----------------------------------------------------------------------------- +# Details +############################################################################## + +use strict; + +############################################################################## +# imported packages +############################################################################## + +############################################################################## +# global constants +############################################################################## + +############################################################################## +# global variables +############################################################################## + +############################################################################## +# functions +############################################################################## + +############################################################################## +# main body +############################################################################## + +sub main { + +} + +&main(); +0; diff --git a/proto/php/header.php b/proto/php/header.php new file mode 100644 index 0000000..1c7dfb4 --- /dev/null +++ b/proto/php/header.php @@ -0,0 +1,29 @@ + diff --git a/proto/python/header.py b/proto/python/header.py new file mode 100644 index 0000000..c57f298 --- /dev/null +++ b/proto/python/header.py @@ -0,0 +1,40 @@ +############################################################################## +# Copyright (C) 2008 +# ProbeStar Telematics, LLC. +# All Rights Reserved. Proprietary and Confidential. +#============================================================================= +# Description +#----------------------------------------------------------------------------- +# Details +############################################################################## + +## @package pyexample +# Documentation for this module. +# +# More details. + +############################################################################## +# imported packages +############################################################################## + +############################################################################## +# global constants +############################################################################## + +############################################################################## +# global variables +############################################################################## + +############################################################################## +# functions +############################################################################## + +############################################################################## +# main body +############################################################################## + +## Documentation for a function. +# +# More details. +def func(): + pass diff --git a/proto/shell/header.sh b/proto/shell/header.sh new file mode 100644 index 0000000..57eb0b0 --- /dev/null +++ b/proto/shell/header.sh @@ -0,0 +1,10 @@ +#!/bin/sh +############################################################################## +# Copyright (C) 2008 +# ProbeStar Telematics, LLC. +# All Rights Reserved. Proprietary and Confidential. +#============================================================================= +# Description +#----------------------------------------------------------------------------- +# Details +############################################################################## diff --git a/sbin-scripts/can-down b/sbin-scripts/can-down new file mode 100755 index 0000000..2384d29 --- /dev/null +++ b/sbin-scripts/can-down @@ -0,0 +1,5 @@ +#!/bin/sh + +killall candump 2> /dev/null + +ifconfig can0 down 2> /dev/null diff --git a/sbin-scripts/can-up b/sbin-scripts/can-up new file mode 100755 index 0000000..68891e5 --- /dev/null +++ b/sbin-scripts/can-up @@ -0,0 +1,11 @@ +#!/bin/sh + +# PCAN +echo "can0" +#modprobe pcan +ifconfig can0 down +ip link set can0 up type can bitrate 500000 +ip link set can0 txqueuelen 1000 +ip link set up can0 +ifconfig can0 + diff --git a/sbin-scripts/cnomicon-setup b/sbin-scripts/cnomicon-setup new file mode 100755 index 0000000..035c8aa --- /dev/null +++ b/sbin-scripts/cnomicon-setup @@ -0,0 +1,8 @@ +#!/bin/sh + +for i in cnomicon +do + mkdir -p /var/run/$i /var/log/$i + chmod a+rwx /var/run/$i /var/log/$i +done + diff --git a/sbin-scripts/vcan-down b/sbin-scripts/vcan-down new file mode 100755 index 0000000..553741e --- /dev/null +++ b/sbin-scripts/vcan-down @@ -0,0 +1,3 @@ +#!/bin/sh + +ifconfig vcan0 down 2> /dev/null diff --git a/sbin-scripts/vcan-up b/sbin-scripts/vcan-up new file mode 100755 index 0000000..62148d5 --- /dev/null +++ b/sbin-scripts/vcan-up @@ -0,0 +1,8 @@ +#!/bin/sh + +# VCAN +echo "vcan0" +modprobe vcan +ip link add dev vcan0 type vcan +ip link set up vcan0 +ifconfig vcan0 diff --git a/sbin/keepme b/sbin/keepme new file mode 100644 index 0000000..e69de29 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..54280c9 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.7) +project(Cnomicon) +set(CMAKE_INSTALL_PREFIX .) + +# list of header files +set(SUB_DIRS + libasn1 libemb libnet libutil libnet++ libcan++ libgps++ + ) + +foreach(SUB_DIR ${SUB_DIRS}) + add_subdirectory(${SUB_DIR}) +endforeach() diff --git a/src/include b/src/include new file mode 120000 index 0000000..f5030fe --- /dev/null +++ b/src/include @@ -0,0 +1 @@ +../include \ No newline at end of file diff --git a/src/lib b/src/lib new file mode 120000 index 0000000..dc598c5 --- /dev/null +++ b/src/lib @@ -0,0 +1 @@ +../lib \ No newline at end of file diff --git a/src/libPIC/Doxygen b/src/libPIC/Doxygen new file mode 100644 index 0000000..c6ba53b --- /dev/null +++ b/src/libPIC/Doxygen @@ -0,0 +1,1161 @@ +# Doxyfile 1.3.9.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = PIC C Library + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of source +# files, where putting all generated files in the same directory would otherwise +# cause performance problems for the file system. + +CREATE_SUBDIRS = YES + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, +# Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is used +# as the annotated text. Otherwise, the brief description is used as-is. If left +# blank, the following values are used ("$name" is automatically replaced with the +# name of the entity): "The $name class" "The $name widget" "The $name file" +# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited +# members of a class in the documentation of that class as if those members were +# ordinary class members. Constructors, destructors and assignment operators of +# the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources +# only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. + +SHOW_DIRECTORIES = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp +# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm + +FILE_PATTERNS = *.c *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories +# that are symbolic links (a Unix filesystem feature) are excluded from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = YES + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_PREDEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse the +# parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = YES + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or +# super classes. Setting the tag to NO turns the diagrams off. Note that this +# option is superseded by the HAVE_DOT option below. This is only a fallback. It is +# recommended to install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = YES + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found on the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes that +# lay further from the root node will be omitted. Note that setting this option to +# 1 or 2 may greatly reduce the computation time needed for large code bases. Also +# note that a graph may be further truncated if the graph's image dimensions are +# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). +# If 0 is used for the depth value (the default), the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/src/libPIC/PIC-LIB.kpf b/src/libPIC/PIC-LIB.kpf new file mode 100644 index 0000000..7bd55b9 --- /dev/null +++ b/src/libPIC/PIC-LIB.kpf @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libPIC/TODO b/src/libPIC/TODO new file mode 100644 index 0000000..b77b5a4 --- /dev/null +++ b/src/libPIC/TODO @@ -0,0 +1,30 @@ + + TODO + +Message +------- +Messaging software + Local or remote messaging (queued per task) + Runs on PIC, Windows or Linux + Uses Packet for remote + Routing table (task id -> packet id) + +Packet +------ +Packet interrupt routine needs to timeout on packet. +Use Id high byte for + 0=serial + 1=SPI + 2=I2C + 3=... + other=socket + +I2C +--- + I2C API Rewrite/Update + Fix I2C Master + Fix Bitbanged timing + +Chips +----- +Add links (for Doxygen) to chip manuals diff --git a/src/libPIC/ad_linux.c b/src/libPIC/ad_linux.c new file mode 100644 index 0000000..8266922 --- /dev/null +++ b/src/libPIC/ad_linux.c @@ -0,0 +1,93 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Linux A/D Emulation Driver + *---------------------------------------------------------------------------- + * Linux Analog Drivers (hook into Comedi) +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "analog.h" +#include "delay.h" + +#ifdef __linux__ +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +static short sAnalogData[16] = { 0 }; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// MAX186 +void AdMax186Init( void ) +{ +} + +WORD AdMax186Read( BYTE byChan ) +{ + return (WORD)sAnalogData[byChan&15]++; +} + +// supports two MAX355 Muxes +void AdMax355Mux( BYTE c ) +{ +} + +// MCP320X +void AdMcp320XInit( void ) +{ +} + +WORD AdMcp320XRead( BYTE byChan ) +{ + return (WORD)sAnalogData[byChan&15]++; +} + +// MCP3301 +void AdMcp3301Init( void ) +{ +} + +short AdMcp3301Read( void ) +{ + return sAnalogData[0]++; +} + +#endif diff --git a/src/libPIC/ad_max186.c b/src/libPIC/ad_max186.c new file mode 100644 index 0000000..42b40c5 --- /dev/null +++ b/src/libPIC/ad_max186.c @@ -0,0 +1,152 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * MAX 186 A/D Chip + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "analog.h" +#include "delay.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +// see spec as channel #s aren't same as select bits +#define AD_MUX(C) (((C)<<4)|0x8E) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +// table +#ifdef ANALOG_MAX186 +static const BYTE byChTbl[8] = { + AD_MUX( 0 ), + AD_MUX( 4 ), + AD_MUX( 1 ), + AD_MUX( 5 ), + AD_MUX( 2 ), + AD_MUX( 6 ), + AD_MUX( 3 ), + AD_MUX( 7 ) +}; +#endif + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ +#ifdef ANALOG_MAX186 + +void AdMax186Init( void ) +{ + // disable + AD_CS = 1; + AD_CK_DIR = 1; + AD_DT_DIR = 1; +} + +// output channel # to read +static void AdMax186Chan( BYTE x ) +{ + BYTE n = 8; + + // kick mux & start conversion + x = byChTbl[x & 7]; // map + + while ( n-- ) + { + // bits out + if ( x & 0x80 ) + AD_OUT = 1; + else + AD_OUT = 0; + x <<= 1; + + // rising edge and hold + DelayNs0100(); + AD_CK = 1; + DelayNs0200(); + AD_CK = 0; + } +} + +static WORD AdMax186Rd( void ) +{ + BYTE n = 16; + WORD w = 0; + + while ( n-- ) + { + // falling edge + AD_CK = 1; + DelayNs0200(); + AD_CK = 0; + DelayNs0100(); + + // bits in + w <<= 1; + w |= AD_IN; + } + + // return data + return w >> 4; +} + +WORD AdMax186Read( BYTE chan ) +{ + WORD data; + + // clock out, data in and select + AD_CK_DIR = 0; + AD_DT_DIR = 1; + AD_CS = 0; + + // set channel + AdChan( chan ); + + DelayUsec( 10 ); + + // read data + data = AdMax186AdRd(); + + // deselect + AD_CS = 1; + AD_CK_DIR = 1; + AD_DT_DIR = 1; + + return data; +} +#endif diff --git a/src/libPIC/ad_max355.c b/src/libPIC/ad_max355.c new file mode 100644 index 0000000..29ff8c7 --- /dev/null +++ b/src/libPIC/ad_max355.c @@ -0,0 +1,91 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * MAX 255 A/D Multiplexor + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "analog.h" +#include "delay.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ +#ifdef ADMUX_MAX355 + +// supports two MAX355 Muxes +void AdMax355Mux( BYTE c ) +{ + // call with channel number 0..7 + + // turn mux off + ADMUX_ENABLE0 = 0; +#ifdef ADMUX_ENABLE1 + ADMUX_ENABLE1 = 0; +#endif + // wait to transition off + DelayNs0400(); + + // mux off + if ( c == 0xff ) + return; + + // select channel + ADMUX_A0 = ( c & 1 ) ? 1 : 0; + ADMUX_A1 = ( c & 2 ) ? 1 : 0; + + // wait to switch + DelayNs0400(); + +#ifdef ADMUX_ENABLE1 + if ( c & 4 ) + ADMUX_ENABLE1 = 1; // 4..7 + else + ADMUX_ENABLE0 = 1; // 0..3 +#else + ADMUX_ENABLE0 = 1; +#endif + // wait to settle + DelayNs2000(); +} +#endif diff --git a/src/libPIC/ad_mcp320x.c b/src/libPIC/ad_mcp320x.c new file mode 100644 index 0000000..8a430aa --- /dev/null +++ b/src/libPIC/ad_mcp320x.c @@ -0,0 +1,102 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Microchip MCP320X A/D Chip + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "analog.h" +#include "delay.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ +#if defined(ANALOG_MCP3204) || defined(ANALOG_MCP3208) + +void AdMcp320XInit( void ) +{ + AD_CK = 0; + AD_CS = 1; +} + +// one channel +WORD AdMcp320XRead( BYTE byChan ) +{ + WORD wChan = byChan; + BYTE n = 10; + WORD wData = 0; + + wChan &= 7; // mask address + wChan |= 0x18; // start bit, single ended mode + + AD_CK = 0; // might have already been + AD_CS = 0; // select the chip + + // send channel + while ( n-- ) + { + AD_OUT = (wChan & 0x200) ? 1 : 0; + AD_CK = 1; + DelayUsec( 2 ); + AD_CK = 0; + wChan <<= 1; + DelayUsec( 2 ); + } + + // read + n = 14; + while ( n-- ) + { + wData << = 1; + AD_CK = 1; + wData |= AD_IN; + DelayNs0200(); + AD_CK = 0; + DelayNs0100(); + } + + AD_CS = 1; // de-select the chip + + return wData & 0xfff; // 12 bit mask +} +#endif diff --git a/src/libPIC/ad_mcp3301.c b/src/libPIC/ad_mcp3301.c new file mode 100644 index 0000000..ff05f8c --- /dev/null +++ b/src/libPIC/ad_mcp3301.c @@ -0,0 +1,102 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Microchip MCP3301 A/D Chip + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "analog.h" +#include "delay.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ +#ifdef ANALOG_MCP3301 + +void AdMcp3301Init( void ) +{ + AD_CK = 0; + AD_CS = 1; +} + +// one channel +short AdMcp3301Read( void ) +{ + // returns signed a/d value, 12 bits plus sign bit. + // for MCP330X a/d on bit-bang SPI bus + BYTE n = 3; + WORD x = 0; + + AD_CK = 0; // might have already been + AD_CS = 0; // select the chip + + // convert, interrupts blocked here + while ( n-- ) + { + AD_CK = 1; + DelayUsec( 5 ); + AD_CK = 0; + DelayUsec( 5 ); + } + + // read + n = 13; + while ( n-- ) + { + x << = 1; + AD_CK = 1; + x |= AD_DAT; + DelayNs0300(); + AD_CK = 0; + DelayNs0200(); + } + + AD_CS = 1; // de-select the chip + + // mask and sign extend + x &= 0x1fff; + if ( x & 0x1000 ) + x |= 0xf000; + return (short) x; +} +#endif diff --git a/src/libPIC/adc.c b/src/libPIC/adc.c new file mode 100644 index 0000000..80b9a30 --- /dev/null +++ b/src/libPIC/adc.c @@ -0,0 +1,112 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC A/D Interface + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include +#include + +#include "system.h" +#include "analog.h" +#include "delay.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +#ifdef __linux__ +static WORD wAdcData[8] = { 0 }; +#endif + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void AdInit( void ) +{ +#ifdef __linux__ + bzero( wAdcData, sizeof(wAdcData) ); +#else + ADON = 1; + ADFM = 1; +#if defined(_PIC18) && XTAL==40 + ADCS2 = 1; +#endif + ADCS1 = 1; + ADCS0 = 0; +#endif +} + +WORD AdRead( BYTE byCh ) +{ +#ifdef __linux__ + return wAdcData[byCh&7]++; +#else + short_word data; + + ADCON0 = ( byCh << 3 ) | 0b10000000; +#ifdef _PIC18 + DelayUsec(13); +#else + DelayUsec(20); +#endif + +#ifdef _PIC18 + GODONE = 1; + while ( GODONE ) // wait for conversion complete + ; +#else + ADGO = 1; + while ( ADGO ) // wait for conversion complete + ; +#endif + data.b.h = ADRESH; + data.b.l = ADRESL; + + return data.w; +#endif +} + +#ifdef __linux__ +void AdWrite( BYTE byCh, WORD wData ) +{ + wAdcData[byCh&7] = wData; +} +#endif diff --git a/src/libPIC/adc.h b/src/libPIC/adc.h new file mode 100644 index 0000000..feec572 --- /dev/null +++ b/src/libPIC/adc.h @@ -0,0 +1,57 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC 10-bit A/D + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _ADC_H_ +#define _ADC_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +// Internal Analog +extern void AdInit( void ); +extern WORD AdRead( BYTE byCh ); +extern void AdWrite( BYTE byCh, WORD wData ); + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/analog.h b/src/libPIC/analog.h new file mode 100644 index 0000000..5d32fb1 --- /dev/null +++ b/src/libPIC/analog.h @@ -0,0 +1,101 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Generic A/D Chip Interface + *---------------------------------------------------------------------------- + * PIC 10-bit A/D + * Maxim 186, 188, 355 + * Microchip MCP320X, MCP3301 +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _ANALOG_H_ +#define _ANALOG_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#ifdef ANALOG_MAX186 +#define ANALOG_MODULE +#define AnalogInit() AdMax186Init() +#define AnalogRead(C) AdMax186Read(C) +#endif + +#ifdef ANALOG_MCP320X +#define ANALOG_MODULE +#define AnalogInit() AdMcp320XInit() +#define AnalogRead(C) AdMcp320XRead(C) +#endif + +#ifdef ANALOG_MCP3301 +#define ANALOG_MODULE +#define AnalogInit() AdMcp3301Init() +#define AnalogRead(C) AdMcp3301Read() +#endif + +#ifdef ADMUX_MAX355 +#define AnalogMux(C) AdMax355Mux(C) +#endif + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +// Internal Analog +extern void AdInit( void ); +extern WORD AdRead( BYTE byCh ); +extern void AdWrite( BYTE byCh, WORD wData ); + +// Analog Drivers +#ifdef ANALOG_MAX186 +extern void AdMax186Init(void); +extern WORD AdMax186Read( BYTE byChan ); +#endif +#ifdef ANALOG_MCP320X +extern void AdMcp320XInit( void ); +extern WORD AdMcp320XRead( BYTE byChan ); +#endif +#ifdef ANALOG_MCP3301 +extern void AdMcp3301Init( void ); +extern short AdMcp3301Read( void ); +#endif + +// Analog Multiplexors +#ifdef ADMUX_MAX355 +extern void AdMax355Mux( BYTE byChan ); +#endif + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/atmel.c b/src/libPIC/atmel.c new file mode 100644 index 0000000..139e811 --- /dev/null +++ b/src/libPIC/atmel.c @@ -0,0 +1,493 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Atmel Data Flash Driver + *---------------------------------------------------------------------------- + * Atmel AT45DB041B, AT45DB081B, AT45DB161B Data Flash Driver + * SPI or Bitbanged +*****************************************************************************/ + +/****************************************************************************/ + +#include "system.h" +#include "delay.h" + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "delay.h" +#include "atmel.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#if defined(ATMEL_MODULE) || defined(__linux__) + +#ifdef __linux__ +#define ATMEL_SIZE 1048510L +#define MEMORY_EMUL +#else +#define ATMEL_PAGE 264 +#endif + +#ifdef ATMEL_SIZE +#define MEMORY_SIZE ATMEL_SIZE +#endif +#define MEMORY_NAME "Atmel" +#define MEMORY_FILE "atmel.pic" +#ifdef MEMORY_DEBUG +#define MEMORY_ERROR +#define READ_PROTECT +#define WRITE_PROTECT +#endif + +#define ATYPE DWORD + +#include "memio.h" + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +// number of pages +const static WORD wAtmelSizes[16] = { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2048, // AT45DB041B + 0, + 4096, // AT45DB081B + 0, + 0, + 0, + 8192, // AT45DB161B + 0, + 0 +}; + +/***************************************************************************** + * static variables +*****************************************************************************/ + +LIBBANK static bit bAtmelBank = 0; + +// current page +LIBBANK static bit bWritePending = 0; +LIBBANK static DWORD dwWriteAddr = 0L; +LIBBANK static DWORD dwNextPage = 0L; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// templated +#include "memio.c" + +/* Init *****************************************************************/ + +#ifdef MEMORY_EMUL + +BYTE AtmelStatus( void ) +{ + return 0; +} + +DWORD AtmelSize( void ) +{ + return MemGetSize(); +} + +#else + +void DevInit( void ) +{ +#ifdef ATMEL_WP + ATMEL_WP = 0; +#endif + ATMEL_CS1 = 1; +#ifndef ATMEL_SPI + ATMEL_CLK = 0; +#endif + MemSetSize( AtmelSize() ); + +#ifdef ATMEL_SPI + // spi setup + SpiInit(); + SpiWaitTime( 0 ); +#endif +} + +/* Internal *****************************************************************/ + +BYTE AtmelStatus( void ) +{ + BYTE c; + + // start + ATMEL_CS1 = 0; + + // status command and status read + DevWriteByte( 0, 0xD7 ); + c = DevReadByte( 0 ); + + // end + ATMEL_CS1 = 1; + + return c; +} + +DWORD AtmelSize( void ) +{ + // status has id bits + BYTE c = AtmelStatus(); + if ( c == 0xff ) + return 0; + + // map id bits to # of pages times page size + return (DWORD)wAtmelSizes[(c>>2) & 0x0f] * ATMEL_PAGE; +} + +void AtmelWait( void ) +{ + // wait till ready + while ( ( AtmelStatus() & 0x80 ) == 0 ) + CLRWDT(); +} + +/* Command *****************************************************************/ + +static void AtmelSendCommand( BYTE cd, DWORD dwAddr, BYTE n ) +{ + BYTE i; + WORD wSegment; + WORD wOffset; + + // break up address into page segment and offset + wSegment = (dwAddr / ATMEL_PAGE) << 1; // 15 bit segment + wOffset = (dwAddr % ATMEL_PAGE); // 9 bit offset +#if ATMEL_PAGE > 256 + wPage |= (wOffset>>8) & 1; // 9th bit to segment +#endif + // wait till ready + AtmelWait(); + + // start command + ATMEL_CS1 = 0; + + // send command and 24 bit address + DevWriteByte( 0, cd ); + DevWriteByte( 0, wSegment >> 8 ); + DevWriteByte( 0, wSegment ); + DevWriteByte( 0, wOffset ); + for ( i = 0; i < n; i++ ) + DevWriteByte( 0, 0 ); + + // may be followed by data +} + +// page writing control +static void AtmelReadPage( DWORD dwAddr ) +{ + // Page to Buffer 1/2 (ignores offset) + AtmelSendCommand( bAtmelBank ? 0x55 : 0x53, dwAddr, 0 ); + + ATMEL_CS1 = 1; // end command + + // write address + dwWriteAddr = dwAddr; + dwNextPage = (dwAddr / ATMEL_PAGE) * ATMEL_PAGE; +} + +static void AtmelWritePage( void ) +{ + if ( !bWritePending ) + return; + + // Buffer 1/2 to Page w/ Erase (ignores offset) + AtmelSendCommand( bAtmelBank ? 0x86 : 0x83, dwWriteAddr, 0 ); + + bAtmelBank ^= 1; // switch buffers + ATMEL_CS1 = 1; // end command + + bWritePending = 0; +} + +static void AtmelWriteBuffer( DWORD dwAddr ) +{ + // Buffer 1 or 2 Write (ignores segment) + AtmelSendCommand( bAtmelBank ? 0x87 : 0x84, dwAddr, 0 ); + // followed by data +} + +void AtmelFlush( void ) +{ + AtmelWritePage(); + +#ifdef ATMEL_WP + ATMEL_WP = 0; +#endif +} + +/* Write ****************************************************************/ + + +static BYTE DevStartWrite( DWORD dwAddr, WORD nBytes ) +{ +#ifdef ATMEL_WP + // write protect first 64K + if ( dwAddr < 0x10000L ) + ATMEL_WP = 1; +#endif + // flush pending write + AtmelWritePage(); + + // read page to buffer + AtmelReadPage( dwAddr ); + + // begin buffer write + AtmelWriteBuffer( dwAddr ); + + return 1; +} + +static void DevStopWrite( void ) +{ + // end buffer write + ATMEL_CS1 = 1; + + // check for end of page + if ( MemGetAddr() == dwNextPage ) + AtmelWritePage(); +} + +static void DevWriteByte( DWORD dwAddr, BYTE byData ) +{ + // write page buffering + if ( dwAddr == dwNextPage ) + { + AtmelWritePage(); + AtmelReadPage( dwAddr ); + } +#ifdef ATMEL_SPI + SpiWriteByte( byData ); +#else + byte_bits x; + x.byte = byData; + ATMEL_CLK = 0; + ATMEL_OUT = x.bits.b7; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + ATMEL_OUT = x.bits.b6; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + ATMEL_OUT = x.bits.b5; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + ATMEL_OUT = x.bits.b4; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + ATMEL_OUT = x.bits.b3; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + ATMEL_OUT = x.bits.b2; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + ATMEL_OUT = x.bits.b1; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + ATMEL_OUT = x.bits.b0; + ATMEL_CLK = 1; +#endif + // write pending only if anything actually written to buffer + bWritePending = 1; +} + +/* Read *****************************************************************/ + +static BYTE DevStartRead( DWORD dwAddr, WORD nBytes ) +{ + // flush any pending writes + AtmelWritePage(); + + // Continuous Array Read + AtmelSendCommand( 0xE8, dwAddr, 4 ); + + return 1; +} + +static void DevStopRead( void ) +{ + ATMEL_CS1 = 1; +} + +static BYTE DevReadByte( DWORD dwAddr ) +{ +#ifdef ATMEL_SPI + return SpiReadByte(); +#else + // fast + byte_bits x; + x.byte = 0; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + x.bits.b7 = ATMEL_IN; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + x.bits.b6 = ATMEL_IN; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + x.bits.b5 = ATMEL_IN; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + x.bits.b4 = ATMEL_IN; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + x.bits.b3 = ATMEL_IN; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + x.bits.b2 = ATMEL_IN; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + x.bits.b1 = ATMEL_IN; + ATMEL_CLK = 1; + ATMEL_CLK = 0; + x.bits.b0 = ATMEL_IN; + return x.byte; +#endif +} + +#endif + +// desired functions +MT_Init(Atmel) +MT_GetChecksum(Atmel) +MT_GetError(Atmel) + +MT_ReadBlock(Atmel) +MT_ReadNext(Atmel) +MT_ReadBytes(Atmel) + +MT_WriteBlock(Atmel) +MT_WriteNext(Atmel) +MT_WriteBytes(Atmel) + +MT_ReadData(Atmel) +MT_WriteData(Atmel) + +MT_ReadCSData(Atmel) +MT_WriteCSData(Atmel) + +MT_SkipNext(Atmel) +MT_WriteFill(Atmel) + +// additional functions + +/* Peek/Poke ****************************************************************/ + +#ifdef ATMEL_DIRECT +BYTE AtmelReadByte( DWORD dwAddr ) +{ + BYTE byData = 0; + AtmelReadData( dwAddr, &byData, sizeof(BYTE) ); + return byData; +} + +WORD AtmelReadWord( DWORD dwAddr ) +{ + WORD wData = 0; + AtmelReadData( dwAddr, (BYTE*)&wData, sizeof(WORD) ); + return wData; +} + +DWORD AtmelReadDword( DWORD dwAddr ) +{ + DWORD dwData = 0; + AtmelReadData( dwAddr, (BYTE*)&dwData, sizeof(DWORD) ); + return dwData; +} + +void AtmelWriteByte( DWORD dwAddr, BYTE byData ) +{ + AtmelWriteData( dwAddr, (const BYTE *)&byData, sizeof(BYTE) ); +} + +void AtmelWriteWord( DWORD dwAddr, WORD wData ) +{ + AtmelWriteData( dwAddr, (const BYTE *)&wData, sizeof(WORD) ); +} + +void AtmelWriteDword( DWORD dwAddr, DWORD dwData ) +{ + AtmelWriteData( dwAddr, (const BYTE *)&dwData, sizeof(DWORD) ); +} +#endif + +/* Erase ********************************************************************/ + +#ifdef ATMEL_ERASE +void AtmelEraseBlock( DWORD a, DWORD l ) +{ +#ifdef MEMORY_EMUL + AtmelWriteFill( a, 0, l ); +#else + l &= 0x00fff800; + while ( l ) + { + AtmelWait(); + AtmelSendCommand( 0x50, a, 0 ); + ATMEL_CS1 = 1; + a += 0x800; + l -= 0x800; + } +#endif +} + +void AtmelErasePage( DWORD a, DWORD l ) +{ +#ifdef MEMORY_EMUL + AtmelWriteFill( a, 0, l ); +#else + l &= 0x00ffff00; + while ( l ) + { + AtmelWait(); + AtmelSendCommand( 0x81, a, 0 ); + ATMEL_CS1 = 1; + a += 0x100; + l -= 0x100; + } +#endif +} +#endif + +#endif diff --git a/src/libPIC/atmel.h b/src/libPIC/atmel.h new file mode 100644 index 0000000..93c3d23 --- /dev/null +++ b/src/libPIC/atmel.h @@ -0,0 +1,88 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Atmel Data Flash Chip + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _ATMEL_H_ +#define _ATMEL_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "types.h" + +#ifdef ATMEL_MODULE +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define AtmelGetSize() AtmelSize() +#define AtmelReadNextByte() AtmelReadNext() +#define AtmelWriteNextByte(B) AtmelWriteNext(B) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +extern void AtmelInit( void ); +extern BYTE AtmelStatus( void ); +extern DWORD AtmelSize( void ); +extern void AtmelFlush( void ); + +extern WORD AtmelReadBlock( DWORD dwAddr, WORD nBytes ); +extern BYTE AtmelReadNext( void ); +extern WORD AtmelReadBytes( BYTE *pbyData, WORD nBytes ); +extern WORD AtmelReadData( DWORD dwAddr, BYTE * pbyData, WORD nBytes ); + +extern WORD AtmelWriteBlock( DWORD dwAddr, WORD nBytes ); +extern void AtmelWriteNext( BYTE byData ); +extern WORD AtmelWriteBytes( const BYTE *pbyData, WORD nBytes ); +extern WORD AtmelWriteData( DWORD dwAddr, const BYTE *pbyData, WORD nBytes ); +extern WORD AtmelWriteFill( DWORD dwAddr, BYTE byFill, WORD nBytes ); + +extern WORD AtmelReadCSData( DWORD dwAddr, BYTE *pbyData, WORD nBytes ); +extern WORD AtmelWriteCSData( DWORD dwAddr, const BYTE *pbyData, WORD nBytes ); + +extern BYTE AtmelReadByte( DWORD dwAddr ); +extern WORD AtmelReadWord( DWORD dwAddr ); +extern DWORD AtmelReadDword( DWORD dwAddr ); + +extern void AtmelWriteByte( DWORD dwAddr, BYTE byData ); +extern void AtmelWriteWord( DWORD dwAddr, WORD wData ); +extern void AtmelWriteDword( DWORD dwAddr, DWORD dwData ); + +extern void AtmelEraseBlock( DWORD dwAddr, DWORD nBytes ); +extern void AtmelErasePage( DWORD dwAddr, DWORD nBytes ); + +#ifdef __cpluscplus +} +#endif +#endif +#endif diff --git a/src/libPIC/atmel.pic b/src/libPIC/atmel.pic new file mode 100644 index 0000000..cf95c1d Binary files /dev/null and b/src/libPIC/atmel.pic differ diff --git a/src/libPIC/atmeltest.c b/src/libPIC/atmeltest.c new file mode 100644 index 0000000..3d4a5af --- /dev/null +++ b/src/libPIC/atmeltest.c @@ -0,0 +1,128 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Atmel Memory Test + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#ifdef __linux__ +#include +#endif + +#include "atmel.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +BYTE byBuf1[256] = { 0 }; +BYTE byBuf2[256] = { 0 }; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +int main() +{ + int i; + + // init + for ( i=0 ; i + +#ifdef __linux__ +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void ClkNju6355Init( void ) +{ +} + +void ClkNju6355Write( CLKBANK NJU6355Clock * pClk ) +{ +} + +void ClkNju6355Read( CLKBANK NJU6355Clock * pClk ) +{ + // read time + time_t t; + struct tm *ptm; + + time( &t ); + ptm = localtime( &t ); + + // 52 bits + pClk->byYear = bin2bcd( ptm->tm_year - 100 ); + pClk->byMonth = bin2bcd( ptm->tm_mon + 1 ); + pClk->byDay = bin2bcd( ptm->tm_mday ); + pClk->byWeekDay = ptm->tm_wday + 1; + pClk->byHour = bin2bcd( ptm->tm_hour ); + pClk->byMinute = bin2bcd( ptm->tm_min ); + pClk->bySecond = bin2bcd( ptm->tm_sec ); + pClk->byHundredth = 0; +} + +#endif diff --git a/src/libPIC/clk_nju6355.c b/src/libPIC/clk_nju6355.c new file mode 100644 index 0000000..607f655 --- /dev/null +++ b/src/libPIC/clk_nju6355.c @@ -0,0 +1,184 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * NJU 6355 Clock Driver + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "clock.h" +#include "delay.h" + +#ifndef _PIC +#include +#endif + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ +#ifdef CLOCK_NJU6355 + +void ClkNju6355Init( void ) +{ + // deselect + CLK_CE = 0; + + // float all inputs + CLK_CK_DIR = 1; + CLK_CK = 1; + CLK_DT_DIR = 1; + CLK_DT = 1; +} + +static void ClockWriteBits( BYTE x, BYTE n ) +{ + // push bits out LSB first + while ( n-- ) + { + // low + CLK_CK = 0; + + // data + CLK_DT = ( x & 1 ) ? 1 : 0; + x >>= 1; + + // clock on rising edge + DelayNs0100(); // Twds + CLK_CK = 1; + DelayNs0100(); // Twdh + } + CLK_CK = 0; +} + +void ClkNju6355Write( CLKBANK NJU6355Clock * pClk ) +{ + // all outputs + CLK_CK = 0; + CLK_DT = 0; + CLK_CK_DIR = 0; + CLK_DT_DIR = 0; + + // select chip + CLK_IO = 1; // slow to rise + DelayNs0100(); // Tds + CLK_CE = 1; + DelayNs0500(); // Tcs + + // 44 bits, write order + ClockWriteBits( pClk->byYear, 8 ); + ClockWriteBits( pClk->byMonth, 8 ); + ClockWriteBits( pClk->byDay, 8 ); + ClockWriteBits( pClk->byWeekDay, 4 ); + ClockWriteBits( pClk->byHour, 8 ); + ClockWriteBits( pClk->byMinute, 8 ); + + // deselect chip + CLK_CE = 0; + CLK_IO = 0; + + // float inputs + CLK_CK_DIR = 1; + CLK_DT_DIR = 1; +} + +static BYTE ClockReadBits( BYTE n ) +{ + BYTE x = 0; + BYTE b = 1; + + // pop bits in LSB first + while ( n-- ) + { + // high + DelayNs0200(); + CLK_CK = 1; + + // read data (previous falling edge) + if ( CLK_DT ) + x |= b; + b <<= 1; + + // falling edge +#if XTAL == 40 + DelayNs0200(); +#endif + CLK_CK = 0; + DelayNs0200(); + } + DelayNs0300(); + CLK_CK = 1; + + // returns BCD + return x; +} + +void ClkNju6355Read( CLKBANK NJU6355Clock * pClk ) +{ + // clock out, data in + CLK_CK = 0; + CLK_CK_DIR = 0; + CLK_DT_DIR = 1; + + // select chip + CLK_IO = 0; + DelayNs0100(); // Tds + CLK_CE = 1; + DelayNs0500(); // Tcs + + // 52 bits + pClk->byYear = ClockReadBits( 8 ); // bad year means low voltage + pClk->byMonth = ClockReadBits( 8 ); + pClk->byDay = ClockReadBits( 8 ); + pClk->byWeekDay = ClockReadBits( 4 ); + pClk->byHour = ClockReadBits( 8 ); + pClk->byMinute = ClockReadBits( 8 ); + pClk->bySecond = ClockReadBits( 8 ); + + // deselect chip + CLK_CE = 0; + + // float inputs + CLK_CK_DIR = 1; + CLK_DT_DIR = 1; +} + +#endif diff --git a/src/libPIC/clock.h b/src/libPIC/clock.h new file mode 100644 index 0000000..f8aee7f --- /dev/null +++ b/src/libPIC/clock.h @@ -0,0 +1,93 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Generic Clock Chip Interface + *---------------------------------------------------------------------------- + * NJU 6355 +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _CLOCK_H_ +#define _CLOCK_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +#ifdef CLOCK_NJU6355 +#define CLOCK_MODULE +// JRC NJU6355 +#define SECOND 0 +#define MINUTE 1 +#define HOUR 2 +#define WEEKDAY 3 +#define DATE 4 +#define MONTH 5 +#define YEAR 6 +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +#ifdef CLOCK_NJU6355 +#define ClockInit() ClockNju6355Init() +#define ClockWrite(C) ClockNju6355Write(C) +#define ClockRead(C) ClockNju6355Read(C) +#endif + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +typedef struct _GenericClock +{ + BYTE byHundredth; // 100th second + BYTE bySecond; // 0-59 + BYTE byMinute; // 0-59 + BYTE byHour; // 0-23 + BYTE byWeekDay; // 1-7 + BYTE byDay; // 1-31 + BYTE byMonth; // 1-12 + BYTE byYear; // 0-99 starting from 2000 +} GenericClock; + +#ifdef CLOCK_NJU6355 +typedef struct _GenericClock NJU6355Clock; +#endif + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef CLOCK_NJU6355 +extern void ClkNju6355Init( void ); +extern void ClkNju6355Write( CLKBANK NJU6355Clock * pClk ); +extern void ClkNju6355Read( CLKBANK NJU6355Clock * pClk ); +#endif + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/config.h b/src/libPIC/config.h new file mode 100644 index 0000000..7d69bea --- /dev/null +++ b/src/libPIC/config.h @@ -0,0 +1,137 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC C Library Custom Build Configuration + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _CONFIG_H_ +#define _CONFIG_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +// +// bump this number on each release of this library +// +#define PICLIB_VERSION 1 +#define PICLIB_BUILD 1 + +/***************************************************************************** + * defines +*****************************************************************************/ + +// The following modules are always used +#define TIMER_MODULE // Interrupts for timers +#define SERIAL_MODULE // Should double check serial.h for port assignments + +// The following modules are linked in if we use them +#define FLASH_MODULE // compile this in, so it's available +#define PACKET_MODULE // default, but should be compiled for app + +#ifdef __linux__ +//---------------------------------------------------------------------------- +// Linux port +//---------------------------------------------------------------------------- +#define XTAL 20L + +#define LIBBANK +#define PKTBANK +#define SERBANK + +#elif _PIC18 +//---------------------------------------------------------------------------- +// PIC-18 Port +//---------------------------------------------------------------------------- +#ifndef XTAL +#define XTAL 40L +#endif + +#define LIBBANK near +#define PKTBANK +#define SERBANK + +#define PACKET_FILTER + +#else +//---------------------------------------------------------------------------- +// PIC-16 Port +//---------------------------------------------------------------------------- +#ifndef XTAL +#define XTAL 20L +#endif + +#define LIBBANK bank1 +#define PKTBANK bank2 +#define SERBANK bank2 + +#endif + +//----------------------------------------------------------------------------- +// Defaults +//----------------------------------------------------------------------------- +#ifndef BAUD +#define BAUD 56700L // serial port +#endif + +// timers +#define TIMER1_INT // fast timer +#define TIMER2_INT // msec timer +#ifdef _PIC18 +#define SW_TIMERS 4 +#else +#define SW_TIMERS 2 +#endif + +// counters +#define CCP1_PIN +#define CCP2_PIN + +// portb i/o +#define RB0_PIN +#define RB1_PIN +#define RB2_PIN +#define RB4_PIN +#define RB5_PIN +#define RB6_PIN +#define RB7_PIN + +//----------------------------------------------------------------------------- +// Dependencies +//----------------------------------------------------------------------------- + +// timer 1 needed for period counting +#if (defined(CCP1_PIN) && defined(CCP2_PIN)) && !defined(TIMER1_INT) +#define TIMER1_INT +#endif + +// timer 1 needed for pin interrupt time stamp +#if defined(RB0_PIN) && !defined(TIMER1_INT) +#define TIMER1_INT +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ + +#endif diff --git a/src/libPIC/dataee.c b/src/libPIC/dataee.c new file mode 100644 index 0000000..94ba5cb --- /dev/null +++ b/src/libPIC/dataee.c @@ -0,0 +1,229 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Data EE Driver + *---------------------------------------------------------------------------- + * Low end PICs have FLASH, while high end PICs have EEPROM + * This does not access the program flash memory! +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "dataee.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +// Linux emulation +#ifdef __linux__ +#define MEMORY_EMUL +#endif + +// default size +#ifndef EEPROM_SIZE +#define EEPROM_SIZE 256 +#endif + +#define MEMORY_NAME "DataEE" +#define MEMORY_FILE "dataee.pic" +#define MEMORY_SIZE EEPROM_SIZE +#ifdef MEMORY_DEBUG +#if EEPROM_SIZE > 256 +#define READ_PROTECT +#endif +#define WRITE_COUNTING +#endif + +#if EEPROM_SIZE <= 256 +#define ATYPE BYTE +#define STYPE BYTE +#else +#define ATYPE WORD +#define STYPE BYTE +#endif + +#include "memio.h" + +/***************************************************************************** + * macros +*****************************************************************************/ + +#ifndef MEMORY_EMUL +// hardware i/o +#define DevStartRead(A,N) DevStart() +#define DevStopRead() +#define DevStartWrite(A,N) DevStart() +#define DevStopWrite() + +// map byte i/o +#define DevReadByte(A) eeprom_read(A) +#endif + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ +#ifndef MEMORY_EMUL + +// device functions +static void DevInit( void ) +{ + MemSetSize( EEPROM_SIZE ); +} + +static BYTE DevStart( void ) +{ +#ifdef _PIC18 + // access data eeprom + EEPGD = 0; + CFGS = 0; +#endif + return 1; +} + +static void DevWriteByte( WORD wAddr, BYTE byData ) +{ + BYTE byComp; + BYTE nTries = 3; + + while ( nTries-- ) + { + // read + byComp = EEPROM_READ(wAddr); + + // compare + if ( byData == byComp ) + return; + + // write + EEPROM_WRITE(wAddr,byData); + +#ifdef WRITE_COUNTING + // bump write count + MemIncrCount(); +#endif + } + +#ifdef MEMORY_ERROR + // mark error + MemSetError( MEM_ERR_WRITE ); +#endif +} + +// special functions +#ifdef WRITE_COUNTING +void DataEERefresh( void ) +{ + WORD a = 0; + WORD n = EEPROM_SIZE; + BYTE d; + + while ( n-- ) + { + d = DevReadByte( a ); + DevWriteByte( a++, d ); + } +} +#endif +#endif + +// templated +#include "memio.c" + +// desired functions +MT_Init(DataEE) +MT_GetChecksum(DataEE) +MT_GetError(DataEE) + +MT_ReadBlock(DataEE) +MT_ReadNext(DataEE) +MT_ReadBytes(DataEE) + +MT_WriteBlock(DataEE) +MT_WriteNext(DataEE) +MT_WriteBytes(DataEE) + +MT_ReadData(DataEE) +MT_WriteData(DataEE) + +MT_ReadCSData(DataEE) +MT_WriteCSData(DataEE) + +MT_SkipNext(DataEE) +MT_WriteFill(DataEE) + +#ifdef WRITE_COUNTING +// additional functions +DWORD DataEEGetCount( void ) +{ + return MemGetCount(); +} + +void DataEESetCount( DWORD dwCount ) +{ + MemSetCount( dwCount ); +} +#endif + +#ifdef DATAEE_DIRECT +WORD DataEEReadWord( ATYPE wAddr ) +{ + short_word data; + data.b.l = DevReadByte( wAddr++ ); + data.b.h = DevReadByte( wAddr ); + return data.w; +} + +void DataEEWriteWord( ATYPE wAddr, WORD wData ) +{ + DevWriteByte( wAddr++, wData ); + DevWriteByte( wAddr, wData >> 8 ); +} + +DWORD DataEEReadDword( ATYPE wAddr ) +{ + long_dword data; + data.b.ll = DevReadByte( wAddr++ ); + data.b.lh = DevReadByte( wAddr++ ); + data.b.hl = DevReadByte( wAddr++ ); + data.b.hh = DevReadByte( wAddr ); + return data.dw; +} + +void DataEEWriteDword( ATYPE wAddr, DWORD dwData ) +{ + DevWriteByte( wAddr++, dwData ); + DevWriteByte( wAddr++, dwData >> 8 ); + DevWriteByte( wAddr++, dwData >> 16 ); + DevWriteByte( wAddr, dwData >> 24 ); +} +#endif diff --git a/src/libPIC/dataee.h b/src/libPIC/dataee.h new file mode 100644 index 0000000..5e2716a --- /dev/null +++ b/src/libPIC/dataee.h @@ -0,0 +1,98 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Data EEPROM + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _DATAEE_H_ +#define _DATAEE_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "config.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +#ifndef EEPROM_SIZE +#define EEPROM_SIZE 256 +#endif + +#if EEPROM_SIZE <= 256 +#define ATYPE BYTE +#define STYPE BYTE +#else +#define ATYPE WORD +#define STYPE BYTE +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define DataEEGetSize() EEPROM_SIZE + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +extern STYPE DataEEReadBlock( ATYPE xAddr, BYTE nBytes ); +extern STYPE DataEEWriteBlock( ATYPE xAddr, BYTE nBytes ); +extern void DataEESkip( BYTE nBytes ); + +extern BYTE DataEEReadNext( void ); +extern STYPE DataEEReadBytes( BYTE *pbyData, BYTE nBytes ); +extern STYPE DataEEReadData( ATYPE xAddr, BYTE *pbyData, BYTE nBytes ); + +extern void DataEEWriteNext( BYTE byData ); +extern STYPE DataEEWriteBytes( const BYTE *pbyData, BYTE nBytes ); +extern STYPE DataEEWriteData( ATYPE xAddr, const BYTE *pbyData, BYTE nBytes ); +extern STYPE DataEEWriteFill( ATYPE xAddr, BYTE byFill, BYTE nBytes ); + +extern STYPE DataEEReadCSData( ATYPE xAddr, BYTE *pbyData, BYTE nBytes ); +extern STYPE DataEEWriteCSData( ATYPE xAddr, const BYTE *pbyData, BYTE nBytes ); + +extern WORD DataEEReadWord( ATYPE xAddr ); +extern void DataEEWriteWord( ATYPE xAddr, WORD wData ); + +extern DWORD DataEEReadDword( ATYPE xAddr ); +extern void DataEEWriteDword( ATYPE xAddr, DWORD dwData ); + +extern BYTE DataEEGetChecksum( void ); +extern BYTE DataEEGetError( void ); + +extern DWORD DataEEGetCount( void ); +extern void DataEESetCount( DWORD dwCount ); +extern void DataEERefresh( void ); + +#ifdef __cpluscplus +} +#endif + +#undef ATYPE +#undef STYPE +#endif diff --git a/src/libPIC/dataee.pic b/src/libPIC/dataee.pic new file mode 100644 index 0000000..15d236f Binary files /dev/null and b/src/libPIC/dataee.pic differ diff --git a/src/libPIC/deetest.c b/src/libPIC/deetest.c new file mode 100644 index 0000000..d794b39 --- /dev/null +++ b/src/libPIC/deetest.c @@ -0,0 +1,113 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Data EE Test + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#ifdef __linux__ +#include +#endif + +#include "dataee.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +BYTE byBuf1[256] = { 0 }; +BYTE byBuf2[256] = { 0 }; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +int main() +{ + int i; + + // init + for ( i=0 ; i +#endif + +/***************************************************************************** + * defines +*****************************************************************************/ + +#ifdef __linux__ +//----------------------------------------------------------------------------- +// Delays mapped to sleep functions +//----------------------------------------------------------------------------- +#define DelayInit() +#define DelayUsec(C) usleep(C) +#define DelayMsec(C) usleep((C)*1000) +#define DelaySec(C) sleep(C) +#else +//----------------------------------------------------------------------------- +// Microsecond delay routine +//----------------------------------------------------------------------------- +#if XTAL == 20 +// PIC-18 20Mhz +#define DelayUs(x) { \ + _dcnt = x; \ + while(--_dcnt) { \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + } \ +} +#elif XTAL == 40 +// PIC-18 40Mhz +#define DelayUs(x) { \ + _dcnt = x; \ + while(--_dcnt) { \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + } \ +} +#endif +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +#ifndef __linux__ +//----------------------------------------------------------------------------- +// Fixed Delays +//----------------------------------------------------------------------------- +#ifdef XTAL == 20 +// 20Mhz PIC-16 or PIC-18 +#define DelayNs0100() { \ + asm("nop"); \ +} +#define DelayNs0200() { \ + asm("nop"); \ +} +#define DelayNs0300() { \ + asm("nop"); \ + asm("nop"); \ +} +#define DelayNs0400() { \ + asm("nop"); \ + asm("nop"); \ +} +#define DelayNs0500() { \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ +} +#define DelayNs1000() { \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ +} + +#elif XTAL == 40 +// PIC-18 40Mhz +#define DelayNs0100() { \ + asm("nop"); \ +} +#define DelayNs0200() { \ + asm("nop"); \ + asm("nop"); \ +} +#define DelayNs0300() { \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ +} +#define DelayNs0400() { \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ +} +#define DelayNs0500() { \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ +} +#define DelayNs1000() { \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ + asm("nop"); \ +} +#endif + +// Nanosecond delays +#define DelayNs1500() { \ + DelayNs0500(); \ + DelayNs1000(); \ +} +#define DelayNs2000() { \ + DelayNs1000(); \ + DelayNs1000(); \ +} +#define DelayNs3000() { \ + DelayNs2000(); \ + DelayNs1000(); \ +} +#define DelayNs4000() { \ + DelayNs2000(); \ + DelayNs2000(); \ +} +#define DelayNs5000() { \ + DelayNs2000(); \ + DelayNs2000(); \ + DelayNs1000(); \ +} + +// Microsecond delays +#define DelayUs1() DelayNs1000() +#define DelayUs2() DelayNs2000() +#define DelayUs3() DelayNs3000() +#define DelayUs4() DelayNs4000() +#define DelayUs5() DelayNs5000() + +#define DelayUs10() { \ + DelayUs5(); \ + DelayUs5(); \ +} +#endif + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +#ifndef __linux__ +extern LIBBANK volatile BYTE _dcnt; +#endif + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __linux__ +extern void DelayInit( void ); // Timer #0 init + +// library delay routines +extern void DelayUsec( BYTE byCount ); // short delays up to 50usec +extern void DelayUsecW( WORD wCount ); // longer delays over 5usec +extern void DelayMsec( WORD wCount ); +extern void DelaySec( WORD wCount ); +#endif + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/dly_msec.c b/src/libPIC/dly_msec.c new file mode 100644 index 0000000..2804424 --- /dev/null +++ b/src/libPIC/dly_msec.c @@ -0,0 +1,70 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Millisecond Delay + *---------------------------------------------------------------------------- + * 200nsec instruction cycle at 20Mhz, 100nsec at 40Mhz + * You have to examine the asm output to count the instructions + * Make sure this code is compiled with optimization -O -Zg4 +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "delay.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void DelayMsec( WORD n ) +{ + while ( n-- ) + { +#ifdef _PIC18 + DelayUsecW( 1000 ); +#else + DelayUsec( 250 ); + DelayUsec( 250 ); + DelayUsec( 250 ); + DelayUsec( 250 ); +#endif + CLRWDT(); + } +} diff --git a/src/libPIC/dly_sec.c b/src/libPIC/dly_sec.c new file mode 100644 index 0000000..97fd47c --- /dev/null +++ b/src/libPIC/dly_sec.c @@ -0,0 +1,58 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Second Delay Routine + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "delay.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void DelaySec( WORD n ) +{ + while ( n-- ) + DelayMsec( 1000 ); +} diff --git a/src/libPIC/dly_usec.c b/src/libPIC/dly_usec.c new file mode 100644 index 0000000..5d0cf4f --- /dev/null +++ b/src/libPIC/dly_usec.c @@ -0,0 +1,113 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Microsecond Delay Routine using Timer 0 + *---------------------------------------------------------------------------- + * 200nsec instruction cycle at 20Mhz, 100nsec at 40Mhz + * You have to examine the asm output to count the instructions + * Make sure this code is compiled with optimization -O -Zg4 +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "delay.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +// used by DelayUs() macro +LIBBANK volatile BYTE _dcnt = 0; + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void DelayInit( void ) +{ + // timer #0 as counter, 2 nsec counts (5 per usec) +#ifdef _PIC18 +#if XTAL==40 + T0CON = 0b10000000; // prescalar = 2 +#else + T0CON = 0b10001000; // no prescalar +#endif +#else + OPTION = 0b10000000; +#endif +} + +// short delays up to 255 usec +void DelayUsec( BYTE n ) +{ + // clear counter +#ifdef _PIC18 + TMR0H = 0; + TMR0L = 0; +#else + TMR0 = 0; +#endif + // # ticks per usec + n--; // calling overhead + n *= 5; + + // wait till count reaches +#ifdef _PIC18 + while ( TMR0L < n ) + ; +#else + while ( TMR0 < n ) + ; +#endif +} + +// longer delays up to 10000 usec (10 msec) +#ifdef _PIC18 +void DelayUsecW( WORD n ) +{ + // clear counter + TMR0H = 0; + TMR0L = 0; + + // 5 ticks per usec + n--; // calling overhead + n *= 5; + + // wait till count reaches + while ( TMR0 < n ) + ; +} +#endif diff --git a/src/libPIC/emul.c b/src/libPIC/emul.c new file mode 100644 index 0000000..54d3032 --- /dev/null +++ b/src/libPIC/emul.c @@ -0,0 +1,54 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Linux Digital I/O Emulation Driver + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "emul.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +byte_bits bbDigdir[8]; +byte_bits bbDigio[8]; + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ diff --git a/src/libPIC/emul.h b/src/libPIC/emul.h new file mode 100644 index 0000000..711d72d --- /dev/null +++ b/src/libPIC/emul.h @@ -0,0 +1,169 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Linux PIC Emulation + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _EMUL_H_ +#define _EMUL_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +// macros +#define _port_byte(A) bbDigio[A].byte +#define _port_bit(A,B) bbDigio[A].bits.b(B) + +#define _port_dirbyte(A) bbDigdir[A].byte +#define _port_dirbit(A,D) bbDigdir[A].bits.b(D) + +// +// emulation +#define PORTA _port_byte(0) +#define RA0 _port_bit(0,0) +#define RA1 _port_bit(0,1) +#define RA2 _port_bit(0,2) +#define RA3 _port_bit(0,3) +#define RA4 _port_bit(0,4) +#define RA5 _port_bit(0,5) +#define RA6 _port_bit(0,6) +#define RA7 _port_bit(0,7) + +#define PORTB _port_byte(1) +#define RB0 _port_bit(1,0) +#define RB1 _port_bit(1,1) +#define RB2 _port_bit(1,2) +#define RB3 _port_bit(1,3) +#define RB4 _port_bit(1,4) +#define RB5 _port_bit(1,5) +#define RB6 _port_bit(1,6) +#define RB7 _port_bit(1,7) + +#define PORTC _port_byte(2) +#define RC0 _port_bit(2,0) +#define RC1 _port_bit(2,1) +#define RC2 _port_bit(2,2) +#define RC3 _port_bit(2,3) +#define RC4 _port_bit(2,4) +#define RC5 _port_bit(2,5) +#define RC6 _port_bit(2,6) +#define RC7 _port_bit(2,7) + +#define PORTD _port_byte(3) +#define RD0 _port_bit(3,0) +#define RD1 _port_bit(3,1) +#define RD2 _port_bit(3,2) +#define RD3 _port_bit(3,3) +#define RD4 _port_bit(3,4) +#define RD5 _port_bit(3,5) +#define RD6 _port_bit(3,6) +#define RD7 _port_bit(3,7) + +#define PORTE _port_byte(4) +#define RE0 _port_bit(4,0) +#define RE1 _port_bit(4,1) +#define RE2 _port_bit(4,2) +#define RE3 _port_bit(4,3) +#define RE4 _port_bit(4,4) +#define RE5 _port_bit(4,5) +#define RE6 _port_bit(4,6) +#define RE7 _port_bit(4,7) + +#define TRISA _port_dirbyte(0) +#define TRISA0 _port_dirbit(0,0) +#define TRISA1 _port_dirbit(0,1) +#define TRISA2 _port_dirbit(0,2) +#define TRISA3 _port_dirbit(0,3) +#define TRISA4 _port_dirbit(0,4) +#define TRISA5 _port_dirbit(0,5) +#define TRISA6 _port_dirbit(0,6) +#define TRISA7 _port_dirbit(0,7) + +#define TRISB _port_dirbyte(1) +#define TRISB0 _port_dirbit(1,0) +#define TRISB1 _port_dirbit(1,1) +#define TRISB2 _port_dirbit(1,2) +#define TRISB3 _port_dirbit(1,3) +#define TRISB4 _port_dirbit(1,4) +#define TRISB5 _port_dirbit(1,5) +#define TRISB6 _port_dirbit(1,6) +#define TRISB7 _port_dirbit(1,7) + +#define TRISC _port_dirbyte(2) +#define TRISC0 _port_dirbit(2,0) +#define TRISC1 _port_dirbit(2,1) +#define TRISC2 _port_dirbit(2,2) +#define TRISC3 _port_dirbit(2,3) +#define TRISC4 _port_dirbit(2,4) +#define TRISC5 _port_dirbit(2,5) +#define TRISC6 _port_dirbit(2,6) +#define TRISC7 _port_dirbit(2,7) + +#define TRISD _port_dirbyte(3) +#define TRISD0 _port_dirbit(3,0) +#define TRISD1 _port_dirbit(3,1) +#define TRISD2 _port_dirbit(3,2) +#define TRISD3 _port_dirbit(3,3) +#define TRISD4 _port_dirbit(3,4) +#define TRISD5 _port_dirbit(3,5) +#define TRISD6 _port_dirbit(3,6) +#define TRISD7 _port_dirbit(3,7) + +#define TRISE _port_dirbyte(4) +#define TRISE0 _port_dirbit(4,0) +#define TRISE1 _port_dirbit(4,1) +#define TRISE2 _port_dirbit(4,2) +#define TRISE3 _port_dirbit(4,3) +#define TRISE4 _port_dirbit(4,4) +#define TRISE5 _port_dirbit(4,5) +#define TRISE6 _port_dirbit(4,6) +#define TRISE7 _port_dirbit(4,7) + +#define TO 1 +#define BOR 1 +#define RI 1 + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +extern byte_bits bbDigdir[8]; +extern byte_bits bbDigio[8]; + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/fram.c b/src/libPIC/fram.c new file mode 100644 index 0000000..68b2f86 --- /dev/null +++ b/src/libPIC/fram.c @@ -0,0 +1,260 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * FRAM Chip Driver + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "delay.h" +#include "fram.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +#if defined(FRAM_MODULE) || defined(__linux__) + +#ifdef __linux__ +#define FRAM_SIZE 8192 +#undef FRAM_SCL +// Linux I2C driver? +#define MEMORY_EMUL +#endif + +#ifdef FRAM_SIZE +#define MEMORY_SIZE FRAM_SIZE +#endif +#define MEMORY_FILE "fram.pic" +#define MEMORY_NAME "Fram" +#ifdef MEMORY_DEBUG +#define MEMORY_ERROR // track errors +#define READ_PROTECT +#define WRITE_PROTECT +#endif + +#include "memio.h" + +#ifdef FRAM_SCL +// internalize the module for I2C bit banged I/O +#define I2C_INTERNAL +#define I2C_MODULE +#endif + +#ifdef I2C_INTERNAL +// port definitions from project.h +#define SCL FRAM_SCL +#define SCL_DIR FRAM_SCL_DIR +#define SDA FRAM_SDA +#define SDA_DIR FRAM_SDA_DIR + +// include the C modules directly +// adjusted timings +#define I2C_TM_PUT_FUDGE 0 +#define I2C_TM_START_SU 1 +#define I2C_TM_START_HD 1 +#define I2C_TM_SCL_LOW 0 +#define I2C_TM_SCL_HIGH 0 +#define I2C_TM_DATA_SU 0 +#define I2C_TM_DATA_HD 0 +#define I2C_TM_SCL_TO_DATA 0 // SCL low to data valid +#define I2C_TM_STOP_SU 1 +#define I2C_TM_STOP_HD 0 +#define I2C_TM_BUS_FREE 1 +#define I2C_TM_SCL_TMO 0 // clock time out + +#include "i2c_master.h" +#include "i2c_bitbang.c" +#else +//#include "i2c_master.h" +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +#ifndef MEMORY_EMUL +#define DevStopRead() i2c_StopRead() +#define DevStopWrite() i2c_StopWrite() +#endif + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// templated +#include "memio.c" + +/* Init *****************************************************************/ + +// special functions +DWORD FramSize( void ) +{ +#ifdef FRAM_SIZE + return FRAM_SIZE; +#else + BYTE byZero, byTest, byCount; + WORD wAddr; + + // already sized? + if ( MemGetSize() ) + return MemGetSize(); + + wAddr = 0; // establish test byte addr + byZero = FramReadByte(wAddr); // store test byte + FramWriteByte(wAddr, 0); // establish test byte value + + byCount=0; + while (FramReadByte(0) == 0) + { + if (++byCount > 1) + FramWriteByte(wAddr, byTest); // restore real byte + wAddr += 8192; // increment address 8K + byTest = FramReadByte(wAddr); // store real byte + FramWriteByte(wAddr, byCount); // write real/test byte + } + FramWriteByte(0, byZero); // restore test byte + + return (DWORD)wAddr; +#endif +} + +/* I/O ******************************************************************/ + +#ifndef MEMORY_EMUL +// device functions +static BYTE FramWriteAddr( WORD wAddr ) +{ + // setup up for write + BYTE byCtl = ROM | ((wAddr & 0x8000) >> 14); + i2c_WriteTo( byCtl ); + i2c_PutByte( wAddr >> 8 ); + i2c_PutByte( wAddr ); + return byCtl; +} + +static void DevInit( void ) +{ +#ifdef I2C_INTERNAL + I2C_init(); +#endif + MemSetSize( FramSize() ); +} + +static BYTE DevStartRead( WORD wAddr, WORD nBytes ) +{ + i2c_ReadFrom( FramWriteAddr( wAddr ) ); + return 1; +} + +static BYTE DevReadByte( WORD wAddr ) +{ + return i2c_GetByte( MemGetLen() > 0 ? I2C_MORE : I2C_LAST ); +} + +static BYTE DevStartWrite( WORD wAddr, WORD nBytes ) +{ + FramWriteAddr( wAddr ); + return 1; +} + +static void DevWriteByte( WORD wAddr, BYTE byData ) +{ + i2c_PutByte( byData ); +} +#endif + +// desired functions +MT_Init(Fram) +MT_GetChecksum(Fram) +MT_GetError(Fram) + +MT_ReadBlock(Fram) +MT_ReadNext(Fram) +MT_ReadBytes(Fram) + +MT_WriteBlock(Fram) +MT_WriteNext(Fram) +MT_WriteBytes(Fram) + +MT_ReadData(Fram) +MT_WriteData(Fram) + +MT_ReadCSData(Fram) +MT_WriteCSData(Fram) + +MT_SkipNext(Fram) +MT_WriteFill(Fram) + +// additional functions +#ifdef FRAM_DIRECT +BYTE FramReadByte( WORD wAddr ) +{ + BYTE byData = 0; + FramReadData( wAddr, &byData, sizeof(BYTE) ); + return byData; +} + +WORD FramReadWord( WORD wAddr ) +{ + WORD wData = 0; + FramReadData( wAddr, (BYTE*)&wData, sizeof(WORD) ); + return wData; +} + +DWORD FramReadDword( WORD wAddr ) +{ + DWORD dwData = 0; + FramReadData( wAddr, (BYTE*)&dwData, sizeof(DWORD) ); + return dwData; +} + +void FramWriteByte( WORD wAddr, BYTE byData ) +{ + FramWriteData( wAddr, (const BYTE *)&byData, sizeof(BYTE) ); +} + +void FramWriteWord( WORD wAddr, WORD wData ) +{ + FramWriteData( wAddr, (const BYTE *)&wData, sizeof(WORD) ); +} + +void FramWriteDword( WORD wAddr, DWORD dwData ) +{ + FramWriteData( wAddr, (const BYTE *)&dwData, sizeof(DWORD) ); +} +#endif + +#endif diff --git a/src/libPIC/fram.h b/src/libPIC/fram.h new file mode 100644 index 0000000..e7d3a57 --- /dev/null +++ b/src/libPIC/fram.h @@ -0,0 +1,84 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * FRAM Chip Interface + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _FRAM_H_ +#define _FRAM_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "config.h" +#include "types.h" + +#ifdef FRAM_MODULE +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define FramGetSize() FramSize() + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +extern void FramInit( void ); +extern DWORD FramSize( void ); + +extern WORD FramReadBlock( WORD wAddr, WORD nBytes ); +extern BYTE FramReadNext( void ); +extern WORD FramReadBytes( BYTE *pbyData, WORD nBytes ); +extern WORD FramReadData( WORD wAddr, BYTE *pbyData, WORD nBytes ); + +extern WORD FramWriteBlock( WORD wAddr, WORD nBytes ); +extern void FramWriteNext( BYTE byData ); +extern WORD FramWriteBytes( const BYTE *pbyData, WORD nBytes ); +extern WORD FramWriteData( WORD wAddr, const BYTE *pbyData, WORD nBytes ); +extern WORD FramWriteFill( WORD wAddr, BYTE byFill, WORD nBytes ); + +extern WORD FramReadCSData( WORD wAddr, BYTE *pbyData, WORD nBytes ); +extern WORD FramWriteCSData( WORD wAddr, const BYTE *pbyData, WORD nBytes ); + +extern BYTE FramGetChecksum( void ); +extern BYTE FramGetError( void ); + +extern BYTE FramReadByte( WORD wAddr ); +extern WORD FramReadWord( WORD wAddr ); +extern DWORD FramReadDword( WORD wAddr ); + +extern void FramWriteByte( WORD wAddr, BYTE byData ); +extern void FramWriteWord( WORD wAddr, WORD wData ); +extern void FramWriteDword( WORD wAddr, DWORD dwData ); + +#ifdef __cpluscplus +} +#endif +#endif +#endif diff --git a/src/libPIC/fram.pic b/src/libPIC/fram.pic new file mode 100644 index 0000000..b1567f0 Binary files /dev/null and b/src/libPIC/fram.pic differ diff --git a/src/libPIC/framtest.c b/src/libPIC/framtest.c new file mode 100644 index 0000000..ddb3310 --- /dev/null +++ b/src/libPIC/framtest.c @@ -0,0 +1,128 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * FRAM Memory Test + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#ifdef __linux__ +#include +#endif + +#include "fram.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +BYTE byBuf1[256] = { 0 }; +BYTE byBuf2[256] = { 0 }; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +int main() +{ + int i; + + // init + for ( i=0 ; i0 + DelayUs( I2C_TM_DATA_SU ); +#endif + SCL_HIGH(); /* float clock high */ + +#if I2C_TM_SCL_TMO>0 + i2c_WaitForSCL(); /* wait for clock release */ +#endif + +#if I2C_TM_STOP_SU==1 + DelayNs1000(); +#elif I2C_TM_STOP_SU>1 + DelayUs( I2C_TM_STOP_SU ); +#endif + + SDA_HIGH(); /* the low->high data transistion */ +#if I2C_TM_STOP_HD>0 + DelayUs( I2C_TM_STOP_HD ); /* bus free time before next start */ +#endif + SDA_HIGH(); /* float data high */ +#if I2C_TM_BUS_FREE>0 + DelayUs( I2C_TM_BUS_FREE ); /* bus free time before next start */ +#endif + + return; +} + +/* + * Send stop condition + * - data low-high while clock high + * add SCL_LOW so we get to a different pulse for stopping than the last of write par011001 + */ + +I2C_EXPORT void i2c_StopWrite( void ) +{ + /* don't assume SCL is high on entry */ +#if I2C_TM_SCL_HIGH>0 + DelayUs( I2C_TM_SCL_HIGH ); +#endif + SCL_LOW(); +#if I2C_TM_SCL_LOW>0 + DelayUs( I2C_TM_SCL_LOW ); +#endif + i2c_Stop(); + + return; +} + +/* + * Send (re)start condition + * - ensure data is high then issue a start condition + * - see also i2c_Start() macro + */ + +I2C_EXPORT void i2c_Restart( void ) +{ + SCL_HIGH(); /* clock pulse high - should already be */ +#if I2C_TM_SCL_HIGH==1 + DelayNs1000(); +#elif I2C_TM_SCL_HIGH>1 + DelayUs( I2C_TM_START_SU ); +#endif + SDA_LOW(); /* the high->low transition */ +#if I2C_TM_START_HD==1 + DelayNs1000(); +#elif I2C_TM_START_HD>1 + DelayUs( I2C_TM_START_HD ); +#endif + SCL_LOW(); + return; +} + +/* + * Send a byte to the slave + * - returns true on error + */ + +I2C_EXPORT BYTE i2c_SendByte( BYTE byte ) +{ + BYTE n = 8; + + while ( n-- ) + { + SCL_LOW(); /* drive clock low */ + + /* data hold time = 0, send data now (DO NOT REMOVE BRACES!) */ + if ( byte & 0x80 ) + { + SDA_HIGH(); + } + else + { + SDA_LOW(); + } +#if I2C_TM_DATA_SU>0 + DelayUs( I2C_TM_DATA_SU ); +#endif + SCL_HIGH(); /* float clock high */ +#if I2C_TM_SCL_TMO>0 + if ( i2c_WaitForSCL() ) /* wait for clock release */ + return TRUE; /* bus error */ +#endif +#if I2C_TM_SCL_HIGH==1 + DelayNs0400(); +#elif I2C_TM_SCL_HIGH>0 + DelayUs( I2C_TM_SCL_HIGH ); /* clock high time */ +#endif + byte <<= 1; + } + return FALSE; +} + +/* + * send an address and data direction to the slave + * - 7-bit address (lsb ignored) + * - direction (FALSE = write ) + */ + +I2C_EXPORT BYTE i2c_SendAddress( BYTE address, BYTE rw ) +{ + return i2c_SendByte( address | ( rw ? 1 : 0 ) ); +} + +/* + * Check for an acknowledge + * - returns ack or ~ack, or ERROR if a bus error + */ + +I2C_EXPORT CHAR i2c_ReadAcknowledge( void ) +{ + BYTE ack; + + SCL_LOW(); /* make clock is low */ + DelayNs0500(); + SDA_HIGH(); /* disable data line - listen for ack */ +#if I2C_TM_SCL_TO_DATA>0 + DelayUs( I2C_TM_SCL_TO_DATA ); /* SCL low to data out valid */ +#endif + SCL_HIGH(); /* float clock high */ +#if I2C_TM_DATA_SU>0 + DelayUs( I2C_TM_DATA_SU ); +#endif + ack = SDA; /* read the acknowledge */ + + /* wait for slave to release clock line after processing byte */ +#if I2C_TM_SCL_TMO>0 + if ( i2c_WaitForSCL() ) + return I2C_ERROR; +#endif + return ack; +} + +/* + * Read a byte from the slave + * - returns the byte, or I2C_ERROR if a bus error + */ + +I2C_EXPORT int i2c_ReadByte( void ) +{ + BYTE n = 8; + BYTE byte = 0; + + while ( n-- ) + { + SCL_LOW(); /* drive clock low */ +#if I2C_TM_SCL_LOW>0 + DelayUs( I2C_TM_SCL_LOW ); /* min clock low period */ +#endif + SDA_HIGH(); /* release data line */ + SCL_HIGH(); /* float clock high */ +#if I2C_TM_SCL_TMO>0 + if ( i2c_WaitForSCL() ) + return I2C_ERROR; +#endif +#if I2C_TM_SCL_HIGH>0 + DelayUs( I2C_TM_SCL_HIGH ); +#endif + byte <<= 1; /* read the next bit */ + byte |= SDA; + } + return ( int ) byte; +} + +/* + * Send an (~)acknowledge to the slave + * - status of I2C_LAST implies this is the last byte to be sent + */ + +I2C_EXPORT void i2c_SendAcknowledge( BYTE status ) +{ + SCL_LOW(); + if ( status & 0x01 ) + { + SDA_LOW(); /* drive line low -> more to come */ + } + else + { + SDA_HIGH(); + } +#if I2C_TM_DATA_SU>0 + DelayUs( I2C_TM_DATA_SU ); +#endif + SCL_HIGH(); /* float clock high */ +#if I2C_TM_SCL_HIGH>0 + DelayUs( I2C_TM_SCL_HIGH ); +#endif + return; +} + +/* + * Send a byte to the slave and acknowledges the transfer + * - returns I2C_ERROR, ack or ~ack + */ + +I2C_EXPORT CHAR i2c_PutByte( BYTE data ) +{ + if ( i2c_SendByte( data ) ) + return I2C_ERROR; + return i2c_ReadAcknowledge(); /* returns ack, ~ack */ +} + +/* + * Get a byte from the slave and acknowledges the transfer + * - returns true on I2C_ERROR or byte + */ + +I2C_EXPORT int i2c_GetByte( BYTE more ) +{ + int byte; + + if ( ( byte = i2c_ReadByte() ) == I2C_ERROR ) + return I2C_ERROR; + + i2c_SendAcknowledge( more ); +#if I2C_TM_PUT_FUDGE>0 + DelayUs( I2C_TM_PUT_FUDGE ); +#endif + + return byte; +} + +#ifdef I2C_STRING +/* + * Send an array of bytes to the slave and acknowledges the transfer + * - returns number of bytes not successfully transmitted + */ +I2C_EXPORT int i2c_PutString( const BYTE * str, BYTE length ) +{ + CHAR error; + + while ( length ) + { + if ( ( error = i2c_PutByte( *str++ ) ) == I2C_ERROR ) + return -( int ) length; /* bus error */ + else if ( error ) + return ( int ) length; /* non acknowledge */ + length--; + } + + return FALSE; /* everything OK */ +} + +/* + * Reads number bytes from the slave, stores them at str and acknowledges the transfer + * - returns number of bytes not successfully read in + */ + +I2C_EXPORT BYTE i2c_GetString( BYTE * str, BYTE number ) +{ + int byte; + + while ( number ) + { + if ( ( byte = i2c_GetByte( number - 1 ) ) == I2C_ERROR ) + return number; /* bus error */ + else + *str++ = ( BYTE ) byte; + number--; + } + + return FALSE; /* everything OK */ +} +#endif + +/* + * Opens communication with a device at address. mode + * indicates I2C_READ or I2C_WRITE. + * - returns TRUE if address is not acknowledged + */ + +I2C_EXPORT BYTE i2c_Open( BYTE address, BYTE mode ) +{ + i2c_Start(); + i2c_SendAddress( address, mode ); + if ( i2c_ReadAcknowledge() ) + return TRUE; + + return FALSE; +} + +/* + * wait for the clock line to be released by slow slaves + * - returns TRUE if SCL was not released after the + * time out period. + * - returns FALSE if and when SCL released + */ + +#if I2C_TM_SCL_TMO>0 +I2C_EXPORT BYTE i2c_WaitForSCL( void ) +{ + /* SCL_DIR should be input here */ + WORD d = I2C_TM_SCL_TMO; + + while ( d-- ) + { + if ( SCL ) + return FALSE; + DelayNs1000(); + } + return TRUE; +} +#endif + +#endif diff --git a/src/libPIC/i2c_bitbang.h b/src/libPIC/i2c_bitbang.h new file mode 100644 index 0000000..82a4cdb --- /dev/null +++ b/src/libPIC/i2c_bitbang.h @@ -0,0 +1,52 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * I2C BitBang Master + *---------------------------------------------------------------------------- + * Not very reliable +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _I2C_BITBANG_H_ +#define _I2C_BITBANG_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/i2c_master.c b/src/libPIC/i2c_master.c new file mode 100644 index 0000000..f3dddb9 --- /dev/null +++ b/src/libPIC/i2c_master.c @@ -0,0 +1,265 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC I2C Master + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "flash.h" +#include "inter.h" + +#include "i2c_slave.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +#ifndef _PIC18 +#define DA STAT_DA +#define RW STAT_RW +#define SSPCON1 SSPCON +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +// RX +static volatile BYTE *pbyRxBuf = NULL; // pointer to buffer +static volatile BYTE *pbyRxPtr = NULL; // input pointer +static LIBBANK volatile BYTE byRxCount = 0;// input counter +static LIBBANK volatile BYTE byRxSize = 0; // size of buffer +static LIBBANK volatile BYTE byLastRxByte = 0; + +// TX +static volatile BYTE *pbyTxBuf = NULL; // pointer to buffer +static volatile BYTE *pbyTxPtr = NULL; // output pointer +static LIBBANK volatile BYTE byTxCount = 0;// output counter +static LIBBANK volatile BYTE byTxSize = 0; // size of buffer +static LIBBANK volatile BYTE byTxMax = 0; + +// misc +volatile LIBBANK BYTE byCheckSum = 0; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +/* c functions ---------------------------------------------------------*/ + +BYTE I2C_bufferSlave( BYTE byAddress ) +{ + // I2C init here + // need to double check this, MSSP port is different than old SSP port?? + // sspstat was read only? - no action needed + //'do not try to clear sspcon 4 so as to enable clock stretching? + // 'bit0 of SSPADD is R/W, with 0=a write to this device + // need to set tris registers too + // need to enable interrupts + + SSPIE = 0; // disable interrupt while configuring + TRISC |= 0b00011000; // make sure RC3 and RC4 are tristated + SSPCON1 = 0b00110110; // Configure SSP as I2C Slave and enable (with 7 bit address) + SSPCON2 = 0b10000001; // Enable rx broadcast and enable rx, clock stretching + SSPSTAT = 0; // set to normal I2C specifications + SSPADD = byAddress; // set node address + SSPIF = 0; // clear interrupt flag + SSPIE = 1; // enable SSP interrupt +#ifdef _PIC18 + SSPIP = 1; // high priority +#endif + bI2CRxBusy = 0; + bI2CRxDone = 0; + bI2CTxBusy = 0; + bI2CTxDone = 0; + + return TRUE; +} + +BYTE I2C_setRxBuffer( BYTE *pbyBuf, BYTE maxBuf ) +{ + BYTE byRC = 1; + if ( bI2CRxBusy ) + { + byRC = 0; + } + else + { + pbyRxBuf = pbyRxPtr = pbyBuf; + byRxSize = maxBuf; + byRxCount = 0; + bI2CRxBusy = 0; + bI2CRxDone = 0; + } + return byRC; +} + +BYTE I2C_getRxCount( void ) +{ + return byRxCount; +} + +BYTE I2C_setTxBuffer( BYTE *pbyBuf, BYTE maxBuf ) +{ + BYTE byRC = 1; + if ( bI2CTxBusy ) + { + byRC = 0; + } + else + { + pbyTxBuf = pbyTxPtr = pbyBuf; + byTxSize = byTxMax = maxBuf; + byTxCount = 0; + bI2CTxBusy = 0; + bI2CTxDone = 0; + } + return byRC; +} + +BYTE I2C_getTxCount( void ) +{ + return byTxCount; +} + +// high priority communications interrupt +void I2C_buffer_handler( void ) +{ + // must be SSP interrupt + if ( !SSPIF ) + return; + SSPOV = 0; // clear errors + CKP = 0; + + if ( DA == 0 ) //sspstat data/addr bit + { + // previous checksum + byCheckSum = 0; // zap checksum + + // we've got an address (just read from SSPBUF) + if ( RW ) // sspstat r/w bit + { + // read request, start transmit buffer + pbyTxPtr = pbyTxBuf; + byTxSize = byTxMax; + byTxCount = 0; + + // send first byte + if ( byTxCount++ < byTxSize ) + SSPBUF = byCheckSum = *pbyTxPtr++; // send first + else + SSPBUF = 0; + + // busy till all sent + if ( byTxCount < byTxSize ) + { + bI2CTxBusy = 1; + bI2CTxDone = 0; + } + else + { + bI2CTxBusy = 0; + bI2CTxDone = 1; + } + // cancels receive + bI2CRxBusy = 0; + bI2CRxDone = 1; + } + else + { + byLastRxByte = SSPBUF; // fetch the address + + // write request, prep receive buffer + pbyRxPtr = pbyRxBuf; + byRxCount = 0; + bI2CRxBusy = 1; + bI2CRxDone = 0; + // cancels transmit + bI2CTxBusy = 0; + bI2CTxDone = 1; + } + } + else + { + if ( RW && bI2CTxBusy ) + { + // master reading what we buffered + if ( byTxCount++ < byTxSize ) + { + // put data, add to checksum + byCheckSum += *pbyTxPtr; + SSPBUF = *pbyTxPtr++; + } + else + { + // put checksum + SSPBUF = 256 - byCheckSum; + byCheckSum = 0; + } + + // filled? + if ( byTxCount >= byTxSize ) + { + bI2CTxBusy = 0; + bI2CTxDone = 1; + } + } + else if ( bI2CRxBusy ) + { + // fetch the byte (ok even if sending) + byLastRxByte = SSPBUF; + // add to checksum + byCheckSum += byLastRxByte; + + // slave reading the master + if ( byRxCount++ < byRxSize ) + *pbyRxPtr++ = byLastRxByte; // get data + + // filled? + if ( byRxCount >= byRxSize ) + bI2CRxDone = 1; + + // clean up + if ( bI2CRxDone ) + bI2CRxBusy = 0; + } + } + + CKP = 1; // we must release clock! + SSPIF = 0; // clear SSP interrupt flag + + TRISC |= 0b00011000; // make sure RC3 and RC4 are tristated + // EK not required per datasheet but the dash needed this too. +} diff --git a/src/libPIC/i2c_master.h b/src/libPIC/i2c_master.h new file mode 100644 index 0000000..3a9dd18 --- /dev/null +++ b/src/libPIC/i2c_master.h @@ -0,0 +1,51 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * I2C Hardware Master + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _I2C_MASTER_H_ +#define _I2C_MASTER_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/i2c_slave.c b/src/libPIC/i2c_slave.c new file mode 100644 index 0000000..d93455c --- /dev/null +++ b/src/libPIC/i2c_slave.c @@ -0,0 +1,268 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC I2C Slave + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "i2c.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +// RX +static volatile BYTE *pbyRxBuf = NULL; // pointer to buffer +static volatile BYTE *pbyRxPtr = NULL; // input pointer +static near volatile BYTE byRxCount = 0;// input counter +static near volatile BYTE byRxSize = 0; // size of buffer +static near volatile BYTE byLastRxByte = 0; +volatile bit bRxBusy = 0; // busy receiving +volatile bit bRxDone = 0; // set when full + +// TX +static volatile BYTE *pbyTxBuf = NULL; // pointer to buffer +static volatile BYTE *pbyTxPtr = NULL; // output pointer +static near volatile BYTE byTxCount = 0;// output counter +static near volatile BYTE byTxSize = 0; // size of buffer +static near volatile BYTE byTxMax = 0; +volatile bit bTxBusy = 0; // busy sending +volatile bit bTxDone = 0; // set when done + +// misc +static near BYTE byTmp = 0; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +/* c functions ---------------------------------------------------------*/ + +BYTE I2C_initSlave( BYTE byAddress ) +{ + // I2C init here + + SSPIE = 0; // disable interrupt while configuring + TRISC |= 0b00011000; // make sure RC3 and RC4 are tristated + SSPCON1 = 0b00110110; // Configure SSP as I2C Slave and enable (with 7 bit address) + SSPCON2 = 0b10000001; // Enable rx broadcast and enable rx, clock stretching + SSPSTAT = 0; // set to normal I2C specifications + SSPADD = byAddress; // set node address + SSPIF = 0; // clear interrupt flag + SSPIE = 1; // enable SSP interrupt + SSPIP = 1; // high priority + + bRxBusy = 0; + bRxDone = 0; + bTxBusy = 0; + bTxDone = 0; + + return TRUE; +} + +BYTE I2C_setRxBuffer( BYTE *pbyBuf, BYTE maxBuf ) +{ + BYTE byRC = 1; + if ( bRxBusy ) + { + byRC = 0; + } + else + { + pbyRxBuf = pbyRxPtr = pbyBuf; + byRxSize = maxBuf; + byRxCount = 0; + bRxBusy = 0; + bRxDone = 0; + } + return byRC; +} + +BYTE I2C_getRxCount( void ) +{ + return byRxCount; +} + +void I2C_clrRxDone( void ) +{ + bRxDone = 0; +} + +BYTE I2C_setTxBuffer( BYTE *pbyBuf, BYTE maxBuf ) +{ + BYTE byRC = 1; + if ( bTxBusy ) + { + byRC = 0; + } + else + { + pbyTxBuf = pbyTxPtr = pbyBuf; + byTxSize = byTxMax = maxBuf; + byTxCount = 0; + bTxBusy = 0; + bTxDone = 0; + } + return byRC; +} + +BYTE I2C_getTxCount( void ) +{ + return byTxCount; +} + +void I2C_clrTxDone( void ) +{ + bTxDone = 0; +} + +// high priority communications interrupt +void I2CSlaveHandler( void ) +{ + // must be SSP interrupt + if ( !SSPIF ) + goto default_handler; + SSPOV = 0; // clear errors + CKP = 0; + + if ( DA == 0 ) + { + // we've got an address (just read from SSPBUF) + if ( RW ) + { + pbyTxPtr = pbyTxBuf; + byTxSize = byTxMax; + byTxCount = 0; + + // send first byte + if ( byTxCount++ < byTxSize ) + SSPBUF = byCheckSum = *pbyTxPtr++; // send first + else + SSPBUF = 0; + + // busy till all sent + if ( byTxCount < byTxSize ) + { + bTxBusy = 1; + bTxDone = 0; + } + else + { + bTxBusy = 0; + bTxDone = 1; + } + // cancels receive + bRxBusy = 0; + bRxDone = 1; + } + else + { + byLastRxByte = SSPBUF; // fetch the address + + // write request, prep receive buffer + pbyRxPtr = pbyRxBuf; + byRxCount = 0; + byCmdByte = 0; + byCfgByte = 0xff; + bRxBusy = 1; + bRxDone = 0; + // cancels transmit + bTxBusy = 0; + bTxDone = 1; + } + } + else + { + if ( RW && bTxBusy ) + { + // generic transmit + if ( bTxCalib ) + { + pbyTxPtr = (BYTE*)&ezCalib; + byTxSize = sizeof(ezCalib)+1; + bTxCalib = 0; + } + + // master reading what we buffered + if ( byTxCount++ < byTxSize ) + { + // put data, add to checksum + byCheckSum += *pbyTxPtr; + SSPBUF = *pbyTxPtr++; + } + else + { + // put checksum + SSPBUF = 256 - byCheckSum; + byCheckSum = 0; + } + + // filled? + if ( byTxCount >= byTxSize ) + { + bTxBusy = 0; + bTxDone = 1; + } + } + else if ( bRxBusy ) + { + // fetch the byte (ok even if sending) + byLastRxByte = SSPBUF; + // add to checksum + byCheckSum += byLastRxByte; + + // slave reading the master + if ( byRxCount++ < byRxSize ) + *pbyRxPtr++ = byLastRxByte; // get data + + // filled? + if ( byRxCount >= byRxSize ) + bRxDone = 1; + + // clean up + if ( bRxDone ) + bRxBusy = 0; + } + } + + CKP = 1; // we must release clock! + SSPIF = 0; // clear SSP interrupt flag + + TRISC |= 0b00011000; // make sure RC3 and RC4 are tristated +} diff --git a/src/libPIC/i2c_slave.h b/src/libPIC/i2c_slave.h new file mode 100644 index 0000000..975e141 --- /dev/null +++ b/src/libPIC/i2c_slave.h @@ -0,0 +1,51 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * I2C Hardware Slave + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _I2C_SLAVE_H_ +#define _I2C_SLAVE_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/inter16.c b/src/libPIC/inter16.c new file mode 100644 index 0000000..8a8e661 --- /dev/null +++ b/src/libPIC/inter16.c @@ -0,0 +1,231 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Generic 18F Interrupt Handler + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "timers.h" +#include "period.h" +#include "portb.h" +#include "serial.h" +#include "queue.h" + +#if defined(INTER_MODULE) && !defined(_PIC18) +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +LIBBANK static volatile long_dword intTemp; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void InterruptInit( void ) +{ +#ifdef RB0_PIN + PortB0Init(); +#endif +#if defined(RB4_PIN) || defined(RB5_PIN) || defined(RB6_PIN) || defined(RB7_PIN) + PortB4567Init(); +#endif +#ifdef TIMER_MODULE + TimerInit(); +#endif +#ifdef PERIOD_MODULE + PeriodInit(); +#endif + PEIE = 1; + ei(); +} + +// 16F only +#ifndef INTER_HANDLER +void interrupt interrupt_handler( void ) +{ + // RB0 interrupt pin + if ( INTF ) + { + g_bRb0Flag = 1; + g_stCount0.w.h = g_wTimer1High; // high first so can check for change + g_stCount0.b.lh = TMR1H; + g_stCount0.b.ll = TMR1L; + if ( g_stCount0.w.h != intTimerH || g_stCount0.b.lh != TMR1H ) + { + g_stCount0.w.h = g_wTimer1High; + g_stCount0.b.lh = TMR1H; + g_stCount0.b.ll = TMR1L; + } + INTF = 0; + g_wCount0++; + } + + // Timer1 overflow +#ifdef TIMER1_INT + if ( TMR1IF ) + { + g_wTimer1High++; + TMR1IF = 0; + } +#endif + // Timer2 interrupt +#ifdef TIMER2_INT + if ( TMR2IF ) + { + g_dwTimer2++; + TMR2IF = 0; +#ifdef SW_TIMERS + if ( g_wTimers2[0] ) + g_wTimers2[0]--; +#if SW_TIMERS > 1 + if ( g_wTimers2[1] ) + g_wTimers2[1]--; +#endif +#if SW_TIMERS > 2 + if ( g_wTimers2[2] ) + g_wTimers2[2]--; +#endif +#if SW_TIMERS > 3 + if ( g_wTimers2[3] ) + g_wTimers2[3]--; +#endif +#endif + } +#endif + + // RC2/CCP1 overflow +#ifdef CCP1_PIN + if ( CCP1IF ) + { + s_dwLast1 = s_stNext1.dw; // keep last reading + s_stNext1.w.h = g_wTimer1High; // high first so can check for change + s_stNext1.b.lh = CCPR1H; + s_stNext1.b.ll = CCPR1L; + if ( s_stNext1.w.h != g_wTimer1High || s_stNext1.b.lh != CCPR1H ) + { + s_stNext1.w.h = g_wTimer1High; + s_stNext1.b.lh = CCPR1H; + s_stNext1.b.ll = CCPR1L; + } + // keep this and last reading + s_dwSum1 += (s_stNext1.dw - s_dwLast1); + g_wPeriod1++; + CCP1IF = 0; + } +#endif +#ifdef CCP2_PIN + // RC1/CCP2 overflow + if ( CCP2IF ) + { + s_dwLast2 = s_stNext2.dw; // keep last reading + s_stNext2.w.h = g_wTimer1High; // high first so can check for change + s_stNext2.b.lh = CCPR2H; + s_stNext2.b.ll = CCPR2L; + if ( s_stNext2.w.h != g_wTimer1High || s_stNext2.b.lh != CCPR2H ) + { + s_stNext2.w.h = g_wTimer1High; + s_stNext2.b.lh = CCPR2H; + s_stNext2.b.ll = CCPR2L; + } + // keep this and last reading + s_dwSum2 += (s_stNext2.dw - s_dwLast2); + g_wPeriod2++; + CCP2IF = 0; + } +#endif + + // Port B 4-7 Changed + if ( !RBIF ) + return; + + // read bits, measure width +#ifdef RB4_PIN + if ( g_bRb4Flag != RB4 ) + { + // RB4 changed + if ( RB4 ) + g_wRb4Low = TMR1 - g_wRb4Last; // pulse width low + else + g_wRb4High = TMR1 - g_wRb4Last; // pulse width high + g_wRb4Last = TMR1; + g_bRb4Flag = RB4; + } +#endif +#ifdef RB5_PIN + if ( g_bRb5Flag != RB5 ) + { + // RB5 changed + if ( RB5 ) + g_wRb5Low = TMR1 - g_wRb5Last; // pulse width low + else + g_wRb5High = TMR1 - g_wRb5Last; // pulse width high + g_wRb5Last = TMR1; + g_bRb5Flag = RB5; + } +#endif +#ifdef RB6_PIN + if ( g_bRb6Flag != RB6 ) + { + // RB6 changed + if ( RB6 ) + g_wRb6Low = TMR1 - g_wRb6Last; // pulse width low + else + g_wRb6High = TMR1 - g_wRb6Last; // pulse width high + g_wRb6Last = TMR1; + g_bRb6Flag = RB6; + } +#endif +#ifdef RB7_PIN + if ( g_bRb7Flag != RB7 ) + { + // RB7 changed + if ( RB7 ) + g_wRb7Low = TMR1 - g_wRb7Last; // pulse width low + else + g_wRb7High = TMR1 - g_wRb7Last; // pulse width high + g_wRb7Last = TMR1; + g_bRb7Flag = RB7; + } + RBIF = 0; +#endif +} +#endif + +#endif diff --git a/src/libPIC/inter18.c b/src/libPIC/inter18.c new file mode 100644 index 0000000..b1cd56d --- /dev/null +++ b/src/libPIC/inter18.c @@ -0,0 +1,116 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Generic 18F Interrupt Handler + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "timers.h" +#include "period.h" +#include "portb.h" + +#include "project.h" + +#if defined(INTER_MODULE) && defined(_PIC18) +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +bit bPowerFail = 0; + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// initialize interrupts +void InterruptInit( void ) +{ +#ifdef RB0_PIN + PortB0Init(); +#endif +#if defined(RB1_PIN) || defined(RB2_PIN) + PortB12Init(); // app turns them on +#endif +#if defined(RB4_PIN) || defined(RB5_PIN) || defined(RB6_PIN) || defined(RB7_PIN) + PortB4567Init(); +#endif +#ifdef TIMER_MODULE + TimerInit(); +#endif +#ifdef PERIOD_MODULE + PeriodInit(); +#endif + GIE = PEIE = 1; + ei(); +} + +// callable handler +void InterruptHandler( void ) +{ + // default handler + if ( LVDIE && LVDIF ) + { + PowerfailHandler(); + bPowerFail = 1; + LVDIF = 0; + return; + } + bPowerFail = 0; + + // high priority only +#ifdef RB0_PIN + PortB0handler(); +#endif + // low priority default +#if defined(RB1_PIN) || defined(RB2_PIN) + PortB12Handler(); +#endif +#ifdef TIMER_MODULE + TimerHandler(); +#endif +#ifdef PERIOD_MODULE + PeriodHandler(); +#endif +#if defined(RB4_PIN) || defined(RB5_PIN) || defined(RB6_PIN) || defined(RB7_PIN) + PortB47Handler(); +#endif +} + +#endif diff --git a/src/libPIC/lin_period.c b/src/libPIC/lin_period.c new file mode 100644 index 0000000..9a82568 --- /dev/null +++ b/src/libPIC/lin_period.c @@ -0,0 +1,164 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Linux PIC Period Emulation + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "period.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +// RC2/CCP1 flag, status and counters +#ifdef CCP1_PIN +volatile long_dword Period1; +LIBBANK volatile WORD wPeriod1 = 0; +extern LIBBANK volatile WORD wTimer1High; +#endif + +#ifdef CCP2_PIN +// RC1/CCP2 flag, status and counters +volatile long_dword Period2; +LIBBANK volatile WORD wPeriod2 = 0; +#endif + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +// RC2/CCP1 flag, status and counters +#ifdef CCP1_PIN +static LIBBANK volatile long_dword Next1; // current reading +static LIBBANK volatile DWORD dwLast1 = 0L; // last reading +static LIBBANK volatile DWORD dwSum1 = 0L; +static BYTE byDrop1 = 0xff; +static BYTE byZero1 = 0; +#endif + +#ifdef CCP2_PIN +// RC1/CCP2 flag, status and counters +static LIBBANK volatile long_dword Next2; // current reading +static LIBBANK volatile DWORD dwLast2 = 0L; // last reading +static LIBBANK volatile DWORD dwSum2 = 0L; +static BYTE byDrop2 = 0xff; +static BYTE byZero2 = 0; +#endif + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void PeriodInit( void ) +{ + wPeriod1 = 0; + wPeriod1 = 0; +} + +void PeriodHandler( void ) +{ +} + +void PeriodZero( BYTE byZ1, BYTE byZ2 ) +{ + byZero1 = byZ1; + byZero2 = byZ2; +} + +BYTE PeriodRead( void ) +{ + BYTE byFlag = 0; + + PeriodHandler(); + +#ifdef CCP1_PIN + if ( wPeriod1 ) + { + // current reading minus last reading for period +// CCP1IE = 0; + Period1.dw = dwSum1 / wPeriod1; + dwSum1 = wPeriod1 = 0; +// CCP1IE = 1; + byFlag |= 1; + byDrop1 = 0; + } + else + { + // drop zero + if ( byDrop1 < byZero1 ) + { + byDrop1++; // stopping + Period1.dw = 0; + } + else if ( byDrop1 == byZero1 ) + { + // stopped + byDrop1++; + byFlag |= 1; + Period1.dw = 0x7FFFFFFF; + } + } +#endif +#ifdef CCP2_PIN + if ( wPeriod2 ) + { + // current reading minus last reading for period +// CCP2IE = 0; + Period2.dw = dwSum2 / wPeriod2; + dwSum2 = wPeriod2 = 0; +// CCP2IE = 1; + byFlag |= 2; + byDrop2 = 0; + } + else + { + if ( byDrop2 < byZero2 ) + { + byDrop2++; // stopping + Period2.dw = 0; + } + else if ( byDrop2 == byZero2 ) + { + // stopped + byDrop2++; + byFlag |= 2; + Period2.dw = 0x7FFFFFFF; + } + } +#endif + return byFlag; +} + diff --git a/src/libPIC/lin_pin0.c b/src/libPIC/lin_pin0.c new file mode 100644 index 0000000..302fc79 --- /dev/null +++ b/src/libPIC/lin_pin0.c @@ -0,0 +1,80 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Linux PIC Pin0 Emulation + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "inter.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +// external interrupt pin (RB0), flag and counter +volatile bit intFlag = 0; +volatile long_parts intCount; +volatile WORD intCounter = 0L; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void init_pin0( void ) +{ + intFlag = 0; + intCount.LN = 0L; + intCounter = 0L; +} + +void int0_pin_edge( BYTE byEdge ) +{ +} + +// high priority only +void int0_pin_handler( void ) +{ + // RB0 interrupt pin +// if ( INT0IF ) +// { +// intFlag = 1; +// intCount.LN = int_timer(); +// intCounter++; +// } +} diff --git a/src/libPIC/lin_pinx.c b/src/libPIC/lin_pinx.c new file mode 100644 index 0000000..c6bde9f --- /dev/null +++ b/src/libPIC/lin_pinx.c @@ -0,0 +1,92 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Linux PIC Emulation + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "inter.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +volatile bit int1Flag = 0; +volatile WORD int1Counter = 0L; + +volatile bit int2Flag = 0; +volatile WORD int2Counter = 0L; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void init_pins( BYTE byPins ) +{ + if ( byPins & 1 ) + { + int1Flag = 0; + int1Counter = 0L; + } + + if ( byPins & 2 ) + { + int2Flag = 0; + int2Counter = 0L; + } +} + +void int_pins_edge( BYTE byEdge ) +{ +} + +void intx_pin_handler( void ) +{ +// if ( INT1IF ) +// { +// int1Flag = 1; +// int1Counter++; +// } + +// if ( INT2IF ) +// { +// int2Flag = 1; +// int2Counter++; +// } +} diff --git a/src/libPIC/lin_rb47.c b/src/libPIC/lin_rb47.c new file mode 100644 index 0000000..496937e --- /dev/null +++ b/src/libPIC/lin_rb47.c @@ -0,0 +1,81 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Linux PIC RB47 Emulation + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "inter.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +// not good for long pulses +volatile bit bRb4; +volatile WORD int4High = 0L; +volatile WORD int4Low = 0L; +volatile WORD int4Last = 0L; +volatile bit bRb5; +volatile WORD int5High = 0L; +volatile WORD int5Low = 0L; +volatile WORD int5Last = 0L; + +// not good for long pulses +volatile bit bRb6; +volatile WORD int6High = 0L; +volatile WORD int6Low = 0L; +volatile WORD int6Last = 0L; +volatile bit bRb7; +volatile WORD int7High = 0L; +volatile WORD int7Low = 0L; +volatile WORD int7Last = 0L; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void init_rb47( void ) +{ +} + +// 18F callable +void int_rb47_handler( void ) +{ +} diff --git a/src/libPIC/lin_timer.c b/src/libPIC/lin_timer.c new file mode 100644 index 0000000..036e5fd --- /dev/null +++ b/src/libPIC/lin_timer.c @@ -0,0 +1,114 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Linux Timer Emulation + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include +#include + +#include "system.h" +#include "timers.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +// Timer #1 +volatile long_dword Timer1; + +// Timer #2 +volatile DWORD dwTimer2; +volatile WORD wTimers2[SW_TIMERS] = { 0 }; + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +// Timer #2 +static DWORD dwLastClock = 0; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void TimerInit( void ) +{ + int i; + + for ( i=0 ; i<4 ; i++ ) + MsecTimerSet( i, 0 ); + + Timer1Clear(); + + Timer2Clr(); +} + +void TimerHandler( void ) +{ + DWORD dwMsec; + int i; + + // timer + Timer1.dw = clock() * 625L / 1000L; + + // clock + dwTimer2 = clock() / 1000L; + + // every msec, decrement timers + if ( dwMsec = dwTimer2 - dwLastClock ) + { + for ( i=0 ; i<4 ; i++ ) + { + if ( wTimers2[i] ) + wTimers2[i] -= dwMsec; + } + + // save last reading + dwLastClock = dwTimer2; + } +} + +void Timer1Clear( void ) +{ + Timer1.dw = 0L; +} + +DWORD Timer1Read( void ) +{ + TimerHandler(); + + return Timer1.dw; +} diff --git a/src/libPIC/memio.c b/src/libPIC/memio.c new file mode 100644 index 0000000..0a98eea --- /dev/null +++ b/src/libPIC/memio.c @@ -0,0 +1,403 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Linux Memory Emulation Driver + *---------------------------------------------------------------------------- + * Uses file for non-volatile storage. +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _MEMIO_C_ +#define _MEMIO_C_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#ifdef MEMORY_EMUL +#include +#include +#include +#endif + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +#ifdef MEMORY_EMUL +static FILE *pDev = NULL; // block device or file +#endif + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ +#ifdef MEMORY_EMUL + +static int EmulOpenFile( char *pszFile ) +{ + BYTE byData[1024]; + int i, n; + + if ( pDev ) + return 1; + + // check file existence + if ( access( pszFile, F_OK ) != 0 ) + { + // create file if missing + if ( pDev = fopen( pszFile, "wb" ) ) + { + // zap + memset( byData, 0, sizeof(byData) ); + + n = MemGetSize(); + while ( n ) + { + if ( n < sizeof(byData) ) + i = n; + else + i = sizeof(byData); + + fwrite( byData, 1, i, pDev ); + n -= i; + } + fclose( pDev ); + } + else + return 0; + } + + // open file for reading/writing + if ( pDev = fopen( pszFile, "r+b" ) ) + { + fseek( pDev, 0, SEEK_SET ); + return 1; + } + return 0; +} + +// close +static void EmulCloseFile( void ) +{ + if ( pDev ) + fclose( pDev ); +} + +// init +static void DevInit( void ) +{ + EmulOpenFile( MEMORY_FILE ); + MemSetSize( MEMORY_SIZE ); + MemSetProtect(0); +} + +// map byte i/o +static BYTE DevReadByte( ATYPE xAddr ) +{ + if ( pDev ) + { + return fgetc( pDev ); + } + return 0; +} + +static void DevWriteByte( ATYPE xAddr, BYTE byData ) +{ + if ( pDev ) + { + fputc( byData, pDev ); + } +} + +// hardware i/o +static STYPE DevStartRead( ATYPE xAddr, STYPE nBytes ) +{ + int n; + + // create file + if ( pDev ) + { + if ( fseek( pDev, xAddr, SEEK_SET ) == 0 ) + return nBytes; + } + return 0; +} + +static void DevStopRead( void ) +{ + if ( pDev ) + fflush( pDev ); +} + +static STYPE DevStartWrite( ATYPE xAddr, STYPE nBytes ) +{ + // create file + if ( pDev ) + { + if ( fseek( pDev, xAddr, SEEK_SET ) == 0 ) + return nBytes; + } + return 0; +} + +static void DevStopWrite( void ) +{ + if ( pDev ) + fflush( pDev ); +} + +#endif + +#define MT_Init(NAME) \ +void NAME ## Init( void ) \ +{ \ + DevInit(); \ +} + +#define MT_GetChecksum(NAME) \ +BYTE NAME ## GetChecksum( void ) \ +{ \ + return MemGetChecksum(); \ +} + +#define MT_GetError(NAME) \ +BYTE NAME ## GetError( void ) \ +{ \ + return MemGetError(); \ +} + +#define MT_GetSize(NAME) \ +ATYPE NAME ## GetSize( void ) \ +{ \ + return MemGetSize(); \ +} + +#define MT_ReadBlock(NAME) \ +STYPE NAME ## ReadBlock( ATYPE wAddr, STYPE nBytes ) \ +{ \ + MemStopBlock(); \ + \ + if ( MemStartRead( wAddr, nBytes ) ) \ + { \ + MemStartBlock( wAddr, nBytes ); \ + MemClrChecksum(); \ + return nBytes; \ + } \ + MemStartBlock( 0, 0 ); \ + MemSetError( MEM_ERR_BOUNDARY ); \ + return 0; \ +} + +#define MT_WriteBlock(NAME) \ +STYPE NAME ## WriteBlock( ATYPE wAddr, STYPE nBytes ) \ +{ \ + MemStopBlock(); \ +\ + if ( MemStartWrite( wAddr, nBytes ) ) \ + { \ + MemStartBlock( wAddr, nBytes ); \ + MemClrChecksum(); \ + return nBytes; \ + } \ + MemStartBlock( 0, 0 ); \ + MemSetError( MEM_ERR_BOUNDARY ); \ + return 0; \ +} + +#define MT_SkipNext(NAME) \ +void NAME ## SkipNext( STYPE nBytes ) \ +{ \ + if ( MemBytesCheck( nBytes ) ) \ + { \ + MemBlockBytes( nBytes ); \ + } \ + else \ + MemSetError( MEM_ERR_OVERFLOW ); \ +} + +// +// The byte i/o work is done here +// +#define MT_ReadNext(NAME) \ +BYTE NAME ## ReadNext( void ) \ +{ \ + BYTE byData; \ +\ + if ( MemDecrLen() ) \ + { \ + byData = DevReadByte( MemGetAddr() ); \ + MemIncrAddr(); \ + MemAddChecksum( byData ); \ + if ( !MemGetLen() ) \ + MemStopRead(); \ + return byData; \ + } \ + MemSetError( MEM_ERR_OVERFLOW ); \ + return 0; \ +} + +#define MT_ReadBytes(NAME) \ +STYPE NAME ## ReadBytes( BYTE *pbyData, STYPE nBytes ) \ +{ \ + STYPE nRead = 0; \ + BYTE byData; \ +\ + if ( !MemBytesCheck( nBytes ) ) \ + { \ + nBytes = MemGetLen(); \ + MemSetError( MEM_ERR_OVERFLOW ); \ + } \ + nRead = nBytes; \ +\ + while ( nBytes-- ) \ + { \ + byData = NAME ## ReadNext(); \ + if ( pbyData ) \ + *pbyData++ = byData; \ + } \ +\ + return nRead; \ +} + +#define MT_WriteNext(NAME) \ +void NAME ## WriteNext( BYTE byData ) \ +{ \ + if ( MemDecrLen() ) \ + { \ + DevWriteByte( MemGetAddr(), byData ); \ + MemIncrAddr();\ + MemAddChecksum( byData ); \ + if ( MemDoChecksum() && MemGetLen() == 1 ) \ + { \ + MemDecrLen(); \ + DevWriteByte( MemGetAddr(), 256 - MemGetChecksum() ); \ + MemIncrAddr(); \ + } \ + if ( !MemGetLen() ) \ + MemStopWrite(); \ + return; \ + } \ +\ + MemSetError( MEM_ERR_OVERFLOW ); \ +} + +#define MT_WriteBytes(NAME) \ +STYPE NAME ## WriteBytes( const BYTE *pbyData, STYPE nBytes ) \ +{ \ + STYPE nWrite = 0; \ +\ + if ( !MemBytesCheck( nBytes ) ) \ + { \ + nBytes = MemGetLen(); \ + MemSetError( MEM_ERR_OVERFLOW ); \ + } \ + nWrite = nBytes; \ +\ + if ( pbyData ) \ + { \ + while ( nBytes-- ) \ + NAME ## WriteNext( *pbyData++ ); \ + } \ + else if ( MemDoChecksum() ) \ + { \ + while ( --nBytes ) \ + NAME ## ReadNext(); \ + NAME ## WriteNext( 0 ); \ + } \ +\ + return nWrite; \ +} + +// +// The data i/o work is done here +// +#define MT_ReadData(NAME) \ +STYPE NAME ## ReadData( ATYPE wAddr, BYTE *pbyData, STYPE nBytes ) \ +{ \ + if ( NAME ## ReadBlock( wAddr, nBytes ) ) \ + return NAME ## ReadBytes( pbyData, nBytes ); \ + return 0; \ +} + +#define MT_WriteData(NAME) \ +STYPE NAME ## WriteData( ATYPE wAddr, const BYTE *pbyData, STYPE nBytes ) \ +{ \ + if ( NAME ## WriteBlock( wAddr, nBytes ) ) \ + { \ + MemDisChecksum(); \ + return NAME ## WriteBytes( pbyData, nBytes ); \ + } \ + return 0; \ +} + +#define MT_ReadCSData(NAME) \ +STYPE NAME ## ReadCSData( ATYPE wAddr, BYTE *pbyData, STYPE nBytes ) \ +{ \ + if ( NAME ## ReadData( wAddr, pbyData, nBytes ) ) \ + { \ + if ( MemGetChecksum() == 0 ) \ + return nBytes; \ + return (STYPE)0xFFFFFFFF; \ + } \ + return 0; \ +} + +#define MT_WriteCSData(NAME) \ +STYPE NAME ## WriteCSData( ATYPE wAddr, const BYTE *pbyData, STYPE nBytes ) \ +{ \ + if ( NAME ## WriteBlock( wAddr, nBytes ) ) \ + { \ + MemEnaChecksum(); \ + return NAME ## WriteBytes( pbyData, nBytes ); \ + } \ + return 0; \ +} + +#define MT_WriteFill(NAME) \ +STYPE NAME ## WriteFill( ATYPE wAddr, BYTE byFill, STYPE nBytes ) \ +{ \ + int nWrite = nBytes; \ +\ + if ( NAME ## WriteBlock( wAddr, nBytes ) ) \ + { \ + while ( MemDecrLen() ) \ + { \ + DevWriteByte( MemGetAddr(), byFill ); \ + MemIncrAddr(); \ + } \ + return nWrite; \ + } \ + return 0; \ +} + +#endif diff --git a/src/libPIC/memio.h b/src/libPIC/memio.h new file mode 100644 index 0000000..b2ff74c --- /dev/null +++ b/src/libPIC/memio.h @@ -0,0 +1,179 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Internal Memory Interface Template + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _MEMORY_H_ +#define _MEMORY_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +#ifdef MEMORY_DEBUG +#define MEMORY_ERROR +#endif + +// flags +#define MEM_DO_CHECKSUM 1 + +// error bits +#define MEM_ERR_BOUNDARY 1 // out of bounds block +#define MEM_ERR_UNDERFLOW 2 // didn't finish last block +#define MEM_ERR_OVERFLOW 4 // overflowed last block +#define MEM_ERR_CHECKSUM 8 // bad checksum +#define MEM_ERR_WRITE 16 // write failed +#define MEM_ERR_MEDIA 32 // removable media error + +// default address and size types +#ifndef ATYPE +#define ATYPE WORD +#endif + +#ifndef STYPE +#define STYPE WORD +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +#ifdef MEMORY_SIZE +#define MemSetSize(S) +#define MemGetSize() MEMORY_SIZE +#else +#define MemSetSize(S) MemCtrl.xMemSize=(S) +#define MemGetSize() MemCtrl.xMemSize +#endif + +#ifdef READ_PROTECT +#define MemReadCheck(A,S) ((A)+(S)<=MemGetSize()) +#define MemStartRead(A,S) (MemReadCheck(A,S) && DevStartRead(A,S)) +#else +#define MemStartRead(A,S) DevStartRead(A,S) +#endif + +#ifdef WRITE_PROTECT +#define MemSetProtect(A) MemCtrl.xMemProt=(A) +#define MemWriteCheck(A,S) ((A)>=MemCtrl.xMemProt) +#define MemStartWrite(A,S) (MemWriteCheck(A,S) && MemReadCheck(A,S) && DevStartWrite(A,S)) +#else +#ifdef READ_PROTECT +#define MemStartWrite(A,S) (MemReadCheck(A,S) && DevStartWrite(A,S)) +#else +#define MemStartWrite(A,S) DevStartWrite(A,S) +#endif +#endif +#ifndef MemSetProtect +#define MemSetProtect(A) +#endif + +#define MemBytesCheck(N) ((N)<=MemCtrl.xBlockLen) + +#define MemStartBlock(A,S) {MemCtrl.xBlockAddr=(A);MemCtrl.xBlockLen=(S);} +#ifdef MEMORY_ERROR +#define MemStopBlock() if(MemCtrl.xBlockLen)MemSetError(MEM_ERR_UNDERFLOW) +#define MemStopRead() {DevStopRead();MemStopBlock();} +#define MemStopWrite() {DevStopWrite();MemStopBlock();} +#else +#define MemStopBlock() +#define MemStopRead() DevStopRead() +#define MemStopWrite() DevStopWrite() +#endif + +#define MemGetAddr() MemCtrl.xBlockAddr +#define MemGetLen() MemCtrl.xBlockLen +#define MemIncrAddr() MemCtrl.xBlockAddr++ +#define MemDecrLen() MemCtrl.xBlockLen-- +#define MemSetLen +#define MemBlockNext() {MemCtrl.xBlockAddr++;MemCtrl.xBlockLen--;} +#define MemBlockBytes(B) {MemCtrl.xBlockAddr+=(B);MemCtrl.xBlockLen-=(B);} + +#define MemEnaChecksum() MemCtrl.byMemFlag|=MEM_DO_CHECKSUM +#define MemDisChecksum() MemCtrl.byMemFlag&=~MEM_DO_CHECKSUM +#define MemDoChecksum() (MemCtrl.byMemFlag & MEM_DO_CHECKSUM) +#define MemClrChecksum() MemCtrl.byCheckSum=0 +#define MemAddChecksum(B) MemCtrl.byCheckSum+=(B) +#define MemGetChecksum() MemCtrl.byCheckSum + +#ifdef MEMORY_ERROR +#define MemClrError() MemCtrl.byErrorFlag=0 +#define MemSetError(E) MemCtrl.byErrorFlag|=(E) +#define MemGetError() MemCtrl.byErrorFlag +#else +#define MemClrError() +#define MemSetError(E) +#define MemGetError() 0 +#endif + +#ifdef WRITE_COUNTING +#define MemIncrCount() MemCtrl.dwWriteCount++ +#define MemClearCount() MemCtrl.dwWriteCount=0 +#define MemGetCount() MemCtrl.dwWriteCount +#define MemSetCount(C) MemCtrl.dwWriteCount=(C) +#else +#define MemIncrCount() +#define MemClearCount() +#define MemGetCount() 0 +#define MemSetCount(C) +#endif + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +typedef struct _MindCtrl { + ATYPE xBlockAddr; // start of current block + STYPE xBlockLen; // remaining length of current block + BYTE byMemFlag; + BYTE byCheckSum; // checksum of current block +#if defined(READ_PROTECT) && !defined(MEMORY_SIZE) + ATYPE xMemSize; // end read/write region (size) +#endif +#ifdef WRITE_PROTECT + ATYPE xMemProt; // begin write region +#endif +#ifdef MEMORY_ERROR + BYTE byErrorFlag; // last error +#endif +#ifdef WRITE_COUNTING + DWORD dwWriteCount; // write counts +#endif +} MindCtrl; + +/***************************************************************************** + * global constants +*****************************************************************************/ + +// memory block control structure +static near MindCtrl MemCtrl = { 0 }; + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/packet.h b/src/libPIC/packet.h new file mode 100644 index 0000000..d71a544 --- /dev/null +++ b/src/libPIC/packet.h @@ -0,0 +1,293 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Packet Interface + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _PACKET_H_ +#define _PACKET_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#if defined (__linux__) +// Linux, for testing +#include +#include +#ifndef BYTE +#define BYTE u_char +#define WORD u_short +#define UINT u_int +#define DWORD u_long +#endif +#define PKTBANK +#define DelayUs(X) usleep(X) +#define DelayMs(X) usleep((X)*1000) +#elif defined(_WINDOWS) +#define PKTBANK +#define DelayUs(X) _sleep((X)/1000) +#define DelayMs(X) _sleep(X) +#define usleep(X) _sleep((X)/1000) +#else +// PIC +#define PIC_PACKET +#include "system.h" +#include "types.h" +#include "serial.h" +#endif + +/***************************************************************************** + * defines +*****************************************************************************/ + +// +// Packet Synchonization Header +// +#ifndef PACKET_SYNC_LENGTH +#define PACKET_SYNC_LENGTH 3 // minimum of 2, includes padding and sync char +#endif +#ifndef PACKET_SYNC_PAD +#define PACKET_SYNC_PAD 0xFF +#endif +#ifndef PACKET_SYNC_CHAR +#define PACKET_SYNC_CHAR 0x00 +#endif +#ifndef PACKET_RECV_SYNC +#define PACKET_RECV_SYNC PACKET_SYNC_PAD +#endif +#ifndef PACKET_XMIT_SYNC +#define PACKET_XMIT_SYNC PACKET_SYNC_PAD +#endif + +// +// Packet Identification (required with radio) +// +#if (defined(RADIO_BIDI) || defined(RADIO_UNI)) && !defined(PACKET_IDENT) +#define PACKET_IDENT // required for radio, packet ids +#undef PACKET_ID_SIZE +#undef PACKET_CK_SIZE +#define PACKET_ID_SIZE 2 // ID +#define PACKET_CK_SIZE 1 // CRC default? +#endif + +// +// Packet Identification Size (defaults) +// +#ifndef PACKET_ID_SIZE +#define PACKET_ID_SIZE 2 // default +#endif + +// +// Packet Flag +// +#define PACKET_FLAG_USER1 0x01 +#define PACKET_FLAG_USER2 0x02 +#define PACKET_FLAG_USER3 0x04 +#define PACKET_FLAG_USER4 0x08 +#define PACKET_FLAG_CRC 0x10 +#define PACKET_FLAG_STREAM 0x80 + + +// +// Packet Streaming Control +// +#ifdef PACKET_STREAM +#define PACKET_FL_SIZE 1 +#ifdef PACKET_LARGE +#define PACKET_MAX_STREAM 0x8000 +#else +#define PACKET_MAX_STREAM 0x80 +#endif +#else +#define PACKET_FL_SIZE 0 +#define PACKET_FLAG_STREAM 0x80 +#define PACKET_MAX_STREAM 0x80 +#endif + +// +// Packet Buffer Size +// +#ifdef PACKET_LARGE +#define PACKET_BC_SIZE 2 // 32767 byte packets max (too big for normal apps) +#define PACKET_MAX_PACKET 0xffff +#else +#define PACKET_BC_SIZE 1 // 255 byte packets max +#define PACKET_MAX_PACKET 0xff +#endif + +// +// Checksum/CRC Size +// +#ifndef PACKET_CK_SIZE +#define PACKET_CK_SIZE 1 // 1 = 8 bit checksum, 2 = 16 bit CRC +#endif + +// +// serial errors included +// +#define PACKET_ERR_DEVICE -1 +#define PACKET_ERR_TIMEOUT -2 +#define PACKET_BAD_PACKET -3 +#define PACKET_BAD_CHECKSUM -4 +#define PACKET_BUF_TOOBIG -5 +#define PACKET_BUF_OVERWRITE -6 +#define PACKET_ERR_SEQUENCE -7 +#define PACKET_ERR_STREAM -8 +#define PACKET_ERR_NOISE -9 +#define PACKET_ERR_ALIEN -10 + +// +// Character timeouts +// +#define TIMEOUT 50 + +// +// Serial Data Rate +// +#ifndef BAUD +#if defined(RADIO_BIDI) +#define BAUD 19200L +#elif defined(RADIO_UNI) +#define BAUD 38400L +#else +#define BAUD 57600L +#endif +#endif +#define PACKET_CHAR_TIME ((1000000L*10L)/BAUD) // usec time, 1 start, 8 bits, 1 stop + +// +// Radio Packet Handling +// +#if defined(RADIO_UNI) && defined(RADIO_BIDI) +#error You cannot choose both unidirectional and bidirectional radio packet handling +#endif +#if defined(RADIO_UNI) || defined(RADIO_BIDI) +#define RADIO +#endif +// worst case (PC RX->TX, PIC TX->RX) wait timeout +#define PACKET_WAIT_TIME 5000L // time to wait for packet +// worst case (PC TX->RX, PIC RX->TX) +#define PACKET_SWITCH_TIME 8000L +#define RADIO_NOCHAR_TIME 5000L // PC xmit timeout (worst case) +#define PACKET_NOCHAR_TIME RADIO_NOCHAR_TIME + +// padding needed to allow resync between consecutive packets +#define PACKET_RESYNC_LENGTH (PACKET_SYNC_LENGTH+1) +// padding needed which switching direction, plus sync chars +#define PACKET_HEADER_LENGTH ((PACKET_SWITCH_TIME/PACKET_CHAR_TIME)+PACKET_RESYNC_LENGTH+1) +#define PACKET_TRAILER_LENGTH 1 // sacrificed to TX->RX switch + +// radio direction control +#define RADIO_DISABLE 0xff +#define RADIO_OFF 0 // no radio +#define RADIO_LISTEN 1 +#define RADIO_TALK 2 +#define RADIO_DIRECT 3 // direct connect override / no radio + +// +// Packet Lengths (sync+id+flag+bc+checksum) +// +#define PACKET_LENGTH (PACKET_SYNC_LENGTH+PACKET_ID_SIZE+PACKET_FL_SIZE+PACKET_BC_SIZE+PACKET_CK_SIZE) + +/***************************************************************************** + * macros +*****************************************************************************/ + +#ifdef SERIAL_RECV_BUFFER +// really can't do without it +#define PACKET_FILTER +#ifdef PACKET_IDENT +#define recvFilter(I) g_wPacketId=(I) +#else +#define recvFilter(I) g_wPacketId=0 +#endif +#define recvAvail() g_byPacketAvail +#endif + +#ifdef RADIO_BIDI +#define baudRadio(B) serial_baud(B) +#endif + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +#ifdef PACKET_FILTER +extern PKTBANK WORD g_wPacketId; +extern PKTBANK BYTE g_byPacketAvail; +#endif +extern PKTBANK bit g_bPacketCRC; + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +// Radio Control +extern BYTE getRadio( void ); +extern BYTE dirRadio( BYTE bXmit ); +extern void noRadio( void ); + +// Misc Utility +extern BYTE doCheckSum( const BYTE *pbyData, BYTE nBytes ); + +// Port Control +extern void PacketInit( void ); +extern void PacketHandler( void ); +#ifndef PIC_PACKET +extern int openPort( int iCom, int iBaud ); +extern int closePort( void ); +#endif + +// Receive Functions +extern int recvWait( UINT iWait ); +extern int recvHeader( WORD *pwCheck, WORD *pwId, BYTE *pbyFlag ); +extern int recvByte( WORD *pwCheck ); +extern int recvData( WORD *pwCheck, PKTBANK BYTE *pbyData, WORD nBytes, WORD maxBytes ); +extern int recvTrailer( WORD *pwCheck ); +extern void recvClear( BYTE nBytes ); +extern void recvFlush( void ); + +// Send Functions +extern void sendSynch( BYTE nBytes ); +extern void sendPadding( BYTE nBytes ); +extern void sendSpacing( BYTE nBytes ); +extern void sendHeader( WORD *pwCheckSum, WORD wId, BYTE byFlag, WORD nBytes ); +extern void sendByte( WORD *pwCheckSum, BYTE byByte ); +extern void sendData( WORD *pwCheckSum, const BYTE *pbyData, WORD nBytes ); +extern void sendTrailer( WORD *pwCheckSum ); +extern void sendFlush( void ); + +// All in One +extern int recvPacket( WORD *pwId, PKTBANK BYTE *pbyData, BYTE *pbyFlag, WORD maxBytes ); // all in one +extern int sendPacket( WORD wId, const BYTE *pbyData, WORD nBytes ); // all in one + +// Streaming Functions +extern int recvFinish( WORD nBytes ); +extern int recvSequence( WORD *pwId, WORD *pwCheck, BYTE *pbySeq ); +extern int recvStream( WORD wId, PKTBANK BYTE *pbyData, WORD nBytes ); +extern int readStream( WORD wMyBoxId, void(*put)(BYTE c), WORD wBytes ); + +extern int sendStream( WORD wId, const BYTE *pbyData, WORD nBytes ); +extern int writeStream( WORD wMyBoxId, BYTE(*get)(void), WORD wBytes ); + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/period.c b/src/libPIC/period.c new file mode 100644 index 0000000..725dbbf --- /dev/null +++ b/src/libPIC/period.c @@ -0,0 +1,237 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Period Counters + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "period.h" +#include "timers.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +// RC2/CCP1 flag, status and counters +#ifdef CCP1_PIN +volatile long_dword g_stPeriod1 = 0L; +LIBBANK volatile WORD g_wPeriod1 = 0; +extern LIBBANK volatile WORD g_wTimer1High; +#endif + +#ifdef CCP2_PIN +// RC1/CCP2 flag, status and counters +volatile long_dword g_stPeriod2 = 0L; +LIBBANK volatile WORD g_wPeriod2 = 0; +#endif + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +// RC2/CCP1 flag, status and counters +#ifdef CCP1_PIN +static LIBBANK volatile long_dword s_stNext1 = 0L; // current reading +static LIBBANK volatile DWORD s_dwLast1 = 0L; // last reading +static LIBBANK volatile DWORD s_dwSum1 = 0L; +static BYTE s_byDrop1 = 0xff; +static BYTE s_byZero1 = 0; +#endif + +#ifdef CCP2_PIN +// RC1/CCP2 flag, status and counters +static LIBBANK volatile long_dword s_stNext2 = 0L; // current reading +static LIBBANK volatile DWORD s_dwLast2 = 0L; // last reading +static LIBBANK volatile DWORD s_dwSum2 = 0L; +static BYTE s_byDrop2 = 0xff; +static BYTE s_byZero2 = 0; +#endif + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void PeriodInit( void ) +{ +#ifdef CCP1_PIN + RC2 = 0; + TRISC2 = 1; + CCP1IE = 1; +#ifdef _PIC18 + CCP1IP = 0; + CCP1CON |= 0x80; // RD16 +#endif + CCP1CON = 0b00000101; // default every rising edge + g_wPeriod1 = 0; +#endif + +#ifdef CCP2_PIN + RC1 = 0; + TRISC1 = 1; + CCP2IE = 1; +#ifdef _PIC18 + CCP2IP = 0; + CCP2CON |= 0x80; // 16 bit read/write +#endif + CCP2CON = 0b00000101; // default every rising edge + g_wPeriod2 = 0; +#endif + +#ifdef _PIC18 + // CCP1, CCP2 source + T3CCP1 = 0; +#if defined(_18F442) || defined(_18F452) + T3CCP2 = 0; +#endif +#endif +} + +#ifdef _PIC18 +void PeriodHandler( void ) +{ + // RC2/CCP1 overflow +#ifdef CCP1_PIN + if ( CCP1IF ) + { + s_dwLast1 = s_stNext1.dw; // keep last reading + s_stNext1.w.h = g_wTimer1High; // high first so can check for change + s_stNext1.w.l = CCPR1; + if ( s_stNext1.w.h != g_wTimer1High || s_stNext1.b.lh != CCPR1H ) + { + s_stNext1.w.h = g_wTimer1High; + s_stNext1.w.l = CCPR1; + } + // keep this and last reading + s_dwSum1 += (s_stNext1.dw - s_dwLast1); + g_wPeriod1++; + CCP1IF = 0; + } +#endif +#ifdef CCP2_PIN + // RC1/CCP2 overflow + if ( CCP2IF ) + { + s_dwLast2 = s_stNext2.dw; // keep last reading + s_stNext2.w.h = g_wTimer1High; // high first so can check for change + s_stNext2.w.l = CCPR2; + if ( s_stNext2.w.h != g_wTimer1High || s_stNext2.b.lh != CCPR2H ) + { + s_stNext2.w.h = g_wTimer1High; + s_stNext2.w.l = CCPR2; + } + // keep this and last reading + s_dwSum2 += (s_stNext2.dw - s_dwLast2); + g_wPeriod2++; + CCP2IF = 0; + } +#endif +} +#endif + + +void PeriodZero( BYTE byZero1, BYTE byZero2 ) +{ +#ifdef CCP1_PIN + s_byZero1 = byZero1; +#endif +#ifdef CCP2_PIN + s_byZero2 = byZero2; +#endif +} + +BYTE PeriodRead( void ) +{ + BYTE byFlag = 0; +#ifdef CCP1_PIN + if ( g_wPeriod1 ) + { + // current reading minus last reading for period + CCP1IE = 0; + g_stPeriod1.dw = s_dwSum1 / g_wPeriod1; + s_dwSum1 = g_wPeriod1 = 0; + CCP1IE = 1; + byFlag |= 1; + s_byDrop1 = 0; + } + else + { + // no reading available + if ( s_byDrop1 < s_byZero1 ) + { + // drop zero + s_byDrop1++; // stopping + g_stPeriod1.dw = 0; + } + else if ( s_byDrop1 == s_byZero1 ) + { + // stopped + s_byDrop1++; + byFlag |= 1; + g_stPeriod1.dw = 0x7FFFFFFF; + } + } +#endif +#ifdef CCP2_PIN + if ( g_wPeriod2 ) + { + // current reading minus last reading for period + CCP2IE = 0; + g_stPeriod2.dw = s_dwSum2 / g_wPeriod2; + s_dwSum2 = g_wPeriod2 = 0; + CCP2IE = 1; + byFlag |= 2; + s_byDrop2 = 0; + } + else + { + // no reading available + if ( s_byDrop2 < s_byZero2 ) + { + // drop zero + s_byDrop2++; // stopping + g_stPeriod2.dw = 0; + } + else if ( s_byDrop2 == s_byZero2 ) + { + // stopped + s_byDrop2++; + byFlag |= 2; + g_stPeriod2.dw = 0x7FFFFFFF; + } + } +#endif + return byFlag; +} + diff --git a/src/libPIC/period.h b/src/libPIC/period.h new file mode 100644 index 0000000..192e470 --- /dev/null +++ b/src/libPIC/period.h @@ -0,0 +1,83 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Period Counters + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _PERIOD_H_ +#define _PERIOD_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +// this is application specific +#include "system.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +// CCP1/CCP2 +#ifdef CCP1_PIN +#define Period1Cnt() g_wPeriod1 +#define Period1Clr() g_wPeriod1=0 +#define Period1Clear() g_stPeriod1.dw=0 +#define Period1Read() g_stPeriod1.dw +#endif +#ifdef CCP2_PIN +#define Period2Cnt() g_wPeriod2 +#define Period2Clr() g_wPeriod2=0 +#define Period2Clear() g_stPeriod2.dw=0 +#define Period2Read() g_stPeriod2.dw +#endif + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +#ifdef CCP1_PIN +LIBBANK extern volatile WORD g_wPeriod1; +extern volatile long_dword g_stPeriod1; +#endif +#ifdef CCP2_PIN +LIBBANK extern volatile WORD g_wPeriod2; +extern volatile long_dword g_stPeriod2; +#endif + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +// counters +extern void PeriodInit( void ); +extern void PeriodHandler( void ); +extern void PeriodClear( void ); +extern BYTE PeriodRead( void ); +extern void PeriodZero( BYTE byZero1, BYTE byZero2 ); + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/pkt_int.c b/src/libPIC/pkt_int.c new file mode 100644 index 0000000..00ab13d --- /dev/null +++ b/src/libPIC/pkt_int.c @@ -0,0 +1,226 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Packet Serial Interrupt Handling + * Description + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +/***************************************************************************** + * defines +*****************************************************************************/ + +#include "system.h" +#include "serial.h" +#include "packet.h" +#include "queue.h" + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +// queues used +extern SERBANK Queue g_qSerialRx; +extern SERBANK Queue g_qSerialTx; + +// global packet control +PKTBANK WORD g_wPacketId = 0; +PKTBANK BYTE g_byPacketAvail = 0; // used by interrupt handler +PKTBANK bit g_bPacketCRC = 0; + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +// interrupt driven serial i/o +static LIBBANK volatile WORD s_wPcktId = 0; +static LIBBANK volatile BYTE s_byPcktCnt = 0; +static LIBBANK volatile BYTE s_byByteCnt = 0; +static LIBBANK volatile BYTE s_byCheckSum = 0; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void PacketInit( void ) +{ +#if PACKET_CK_SIZE + g_bPacketCRC = 1; +#endif +} + +void PacketHandler( void ) +{ + // temps +static LIBBANK BYTE byRx; +static LIBBANK BYTE byTx; + + // RC6/TX + if ( TXIF ) + { + // ready to xmit + byTx = _QueueCount( g_qSerialTx ); + if ( byTx ) + { + // output from queue + _QueueGet( g_qSerialTx, TXREG ); + } + if ( byTx <= 1 ) + { + // nothing left, disable + TXIE = 0; + } + } + + // RC7/RX + if ( !RCIF ) + return; + + // check queue, lose a byte if necessary + while ( _QueueFull( g_qSerialRx ) ) + _QueueGet( g_qSerialRx, byRx ); + + // read char + byRx = RCREG; + + // depacketizer + if ( s_byByteCnt ) + { + // data byte, last is checksum + if ( s_byByteCnt-- ) + { + if ( s_byPcktCnt ) + { + s_byPcktCnt++; + _QueuePut( g_qSerialRx, byRx ); + s_byCheckSum += byRx; + } + } + // done with packet? + if ( s_byByteCnt == 0 ) + { + if ( g_bPacketCRC == 1 ) + { + g_byPacketAvail++; // defer CRC check + } + else if ( g_bPacketCRC == 0 && s_byCheckSum == 0 ) + { + // signal good packet is available + g_byPacketAvail++; + } + else if ( s_byPcktCnt == _QueueSize( g_qSerialRx ) ) + { + // eat bad packet + _QueueClear( g_qSerialRx ); + } + s_byPcktCnt = 0; + } + } + else if ( s_byPcktCnt < 3 ) + { + // look for sync chars + if ( byRx == PACKET_RECV_SYNC ) + { + if ( s_byPcktCnt < PACKET_SYNC_LENGTH-1 ) + s_byPcktCnt++; + } + else if ( byRx == PACKET_SYNC_CHAR ) + { + if ( s_byPcktCnt == PACKET_SYNC_LENGTH-1 ) + s_byPcktCnt++; + else + s_byPcktCnt = 0; + } + else + s_byPcktCnt = 0; + } + else + { + // reading packet + s_byPcktCnt++; + + // got byte count? +#if PACKET_ID_SIZE >= 1 + if ( s_byPcktCnt == 4 ) + s_wPcktId = byRx; + else +#if PACKET_ID_SIZE == 2 + if ( s_byPcktCnt == 5 ) + s_wPcktId |= byRx << 8; + else +#endif +#endif + if ( s_byPcktCnt == PACKET_LENGTH-1 ) + { + // bytes to slurp + s_byByteCnt = byRx + g_bPacketCRC ? 2 : 1; // got byte count + checksum + s_byCheckSum = 0; + + // my packet? +#ifdef PACKET_IDENT + if ( g_wPacketId == 0 || g_wPacketId == s_wPcktId ) + { +#endif + // dump header into queue + _QueuePut(g_qSerialRx, PACKET_RECV_SYNC); + _QueuePut(g_qSerialRx, PACKET_RECV_SYNC); + _QueuePut(g_qSerialRx, PACKET_SYNC_CHAR); +#if PACKET_ID_SIZE >= 1 + _QueuePut( g_qSerialRx, s_wPcktId ); +#endif +#if PACKET_ID_SIZE == 2 + _QueuePut( g_qSerialRx, s_wPcktId >> 8 ); +#endif +#if PACKET_FL_SIZE >= 1 + _QueuePut( g_qSerialRx, s_byCheckSum ); +#endif + _QueuePut( g_qSerialRx, byRx ); // bc +#ifdef PACKET_IDENT + } + else + s_byPcktCnt = 0; // ignore packet data +#endif + } +#if PACKET_FL_SIZE >= 1 + else + { + s_byCheckSum = byRx; // tmp for flag byte + } +#endif + } + + // doesn't handle overflow, so app had better have big buffer + if ( OERR ) + { + // overrun error (lost data) + CREN = 0; + CREN = 1; + } +} diff --git a/src/libPIC/pkt_radio.c b/src/libPIC/pkt_radio.c new file mode 100644 index 0000000..551787d --- /dev/null +++ b/src/libPIC/pkt_radio.c @@ -0,0 +1,144 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Packet Radio Control + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "delay.h" +#include "types.h" +#include "serial.h" +#include "packet.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +static BYTE s_byDir = RADIO_OFF; // radio status + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +BYTE getRadio( void ) +{ + return s_byDir; +} + +BYTE dirRadio( BYTE byFlag ) +{ +#if defined(RXEN_RADIO) || defined(TXEN_RADIO) + // radio logic disabled + if ( s_byDir == RADIO_DISABLE ) + return 0; + + // direct connect? +#ifdef OVER_RADIO + if ( !OVER_RADIO ) + byFlag = RADIO_DIRECT; // includes debug +#endif + // change direction only if necessary + if ( s_byDir == byFlag ) + return 0; + + // flush buffer + sendFlush(); + + // shut off radio + if ( byFlag == RADIO_OFF ) + { + // shut it all off + serial_baud( 38400 ); +#ifdef RXEN_RADIO + RXEN_RADIO = 0; +#endif +#ifdef TXEN_RADIO + TXEN_RADIO = 0; +#endif + } + else if ( byFlag == RADIO_LISTEN ) + { + // flush, wait and switch + serial_baud( BAUD ); +#ifdef TXEN_RADIO + TXEN_RADIO = 0; +#endif +#ifdef RXEN_RADIO + RXEN_RADIO = 1; +#endif + } + else if ( byFlag == RADIO_TALK ) + { + // let's talk + serial_baud( BAUD ); +#ifdef RXEN_RADIO + RXEN_RADIO = 0; +#endif + // switch +#ifdef TXEN_RADIO + TXEN_RADIO = 1; +#endif + } + else if ( byFlag == RADIO_DIRECT ) + { + // bump speed + serial_baud( 115200 ); +#ifdef RXEN_RADIO + RXEN_RADIO = 0; +#endif +#ifdef TXEN_RADIO + TXEN_RADIO = 0; +#endif + } + + // ready to listen + recvFlush(); + + // remember radio state + s_byDir = byFlag; + return 1; +#else + return 0; +#endif +} + +void noRadio( void ) +{ + s_byDir = RADIO_DISABLE; +} diff --git a/src/libPIC/pkt_recv.c b/src/libPIC/pkt_recv.c new file mode 100644 index 0000000..9c1954c --- /dev/null +++ b/src/libPIC/pkt_recv.c @@ -0,0 +1,297 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Packet Receive + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "delay.h" +#include "types.h" +#include "serial.h" +#include "packet.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +/////////////////////////////////////////////////////////////////////////////// +// de-Packetizer +/////////////////////////////////////////////////////////////////////////////// + +void recvClear( BYTE n ) +{ + // clear buffer till end of current packet + n++; + while ( n-- && getchavail() ) + getch(); +} + +void recvFlush( void ) +{ + // flush queue + SerialClear(); +} + +int recvGet( BYTE n ) +{ + int c; + BYTE i; + UINT t; + DWORD v = 0; + + for ( i = 0; i < n; i++ ) + { + t = TIMEOUT; + if ( ( c = getchtimeout( &t ) ) < 0 ) + return PACKET_ERR_TIMEOUT; + v |= ( c << ( i * 8 ) ); + } + return v; +} + +int recvWait( UINT iWait ) +{ + iWait /= 10; + + // wait for a packet + while ( iWait-- ) + { + if ( getchavail() > 0 ) + return 1; + DelayUsec( 100 ); + } + return 0; +} + +int recvHeader( WORD *pwCheck, WORD *pwId, BYTE *pbyFlag ) +{ + int c = 0; + WORD n = 0; + UINT t; + + // software timeouts + // check if line needs to turn around + if ( dirRadio( RADIO_LISTEN ) ) + { + // generous wait for a packet + if ( !recvWait( PACKET_WAIT_TIME ) ) + return PACKET_ERR_TIMEOUT; + } + else + { + // wait for next packet + if ( !recvWait( PACKET_WAIT_TIME/2 ) ) + return PACKET_ERR_TIMEOUT; + } + + // wait till synchronization string + while ( n < PACKET_SYNC_LENGTH ) + { + t = TIMEOUT; + c = getchtimeout( &t ); + + if ( c == PACKET_RECV_SYNC ) + { + if ( n < PACKET_SYNC_LENGTH - 1 ) + n++; + } + else if ( c == PACKET_SYNC_CHAR ) + { + if ( n == PACKET_SYNC_LENGTH - 1 ) + n++; + else + n = 0; + } + else if ( c < 0 ) + return c; + else + n = 0; + } + +#ifdef PACKET_FILTER + // got it + if ( g_byPacketAvail ) + g_byPacketAvail--; +#endif + // init checksum or CRC + *pwCheck = 0; + + // id + *pwId = (WORD) recvGet( PACKET_ID_SIZE ); + + // flag byte + *pbyFlag = (BYTE) recvGet( PACKET_FL_SIZE ); + + // byte count + n = (WORD) recvGet( PACKET_BC_SIZE ); + + // check flag + if ( *pbyFlag ) + { + // check control flag bits + if ( *pbyFlag & PACKET_FLAG_STREAM ) + return n; // ignore rest of bits used for streaming counter + + // check each flag + if ( *pbyFlag & PACKET_FLAG_CRC ) + g_bPacketCRC = 1; + } + + return n; +} + +int recvByte( WORD *pwCheck ) +{ + UINT t = TIMEOUT; + int c; + + if ( ( c = getchtimeout( &t ) ) < 0 ) + return c; + + if ( g_bPacketCRC ) + *pwCheck = doCRC16( *pwCheck, c ); + else + *pwCheck += (BYTE) c; + return (BYTE) c; +} + +int recvData( WORD *pwCheck, PKTBANK BYTE * pbyData, WORD nBytes, WORD maxBytes ) +{ + WORD nRead = 0; + UINT t; + int c; + + // read bytes + while ( nBytes-- ) + { + // read + t = TIMEOUT; + c = getchtimeout( &t ); + if ( c < 0 ) + return c; + + // store data away + if ( pbyData && ( nRead < maxBytes ) ) + *pbyData++ = c; + + // CRC or checksum + if ( g_bPacketCRC ) + *pwCheck = doCRC16( *pwCheck, c ); + else + *pwCheck += (BYTE) c; + + // count + nRead++; + } + + return nRead; +} + +int recvTrailer( WORD *pwCheck ) +{ + UINT t = TIMEOUT; + WORD wCheck; + int c; + + if ( ( c = getchtimeout( &t ) ) < 0 ) + return c; + + // CRC or checksum + if ( g_bPacketCRC ) + { + // low byte + wCheck = c; + // high byte + if ( ( c = getchtimeout( &t ) ) < 0 ) + return c; + wCheck |= (c << 8); + + // compare CRCs + if ( *pwCheck != wCheck ) + return 0; + } + else + { + // byte, masked + *pwCheck += (BYTE) c; + *pwCheck &= 0xff; + + // good checksum is zero + if ( *pwCheck ) + return 0; + } + return 1; +} + +int recvPacket( WORD *pwId, PKTBANK BYTE *pbyPacket, BYTE *pbyFlag, WORD maxBytes ) +{ + WORD wCheck; + int nBytes; + + // header + if ( ( nBytes = recvHeader( &wCheck, pwId, pbyFlag ) ) < 0 ) + return nBytes; + + // check + if ( nBytes > maxBytes ) + return PACKET_BUF_TOOBIG; + + // data + if ( ( nBytes = recvData( &wCheck, pbyPacket, (WORD)nBytes, (WORD)maxBytes ) ) < 0 ) + return nBytes; + + // checksum + if ( recvTrailer( &wCheck ) ) + return nBytes; + return PACKET_BAD_CHECKSUM; +} + +int recvFinish( WORD nBytes ) +{ + WORD wCheck; + + recvData( &wCheck, NULL, nBytes, nBytes ); + if ( recvTrailer( &wCheck ) ) + return nBytes; + return PACKET_BAD_CHECKSUM; +} diff --git a/src/libPIC/pkt_recvs.c b/src/libPIC/pkt_recvs.c new file mode 100644 index 0000000..b6d5348 --- /dev/null +++ b/src/libPIC/pkt_recvs.c @@ -0,0 +1,203 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Streaming Packet Receive + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "delay.h" +#include "serial.h" +#include "types.h" +#include "serial.h" +#include "packet.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +int recvSequence( WORD *pwId, WORD *pwCheck, BYTE *pwCheckSeq ) +{ + BYTE byFlag = 0; + int nBytes; + + // get header + if ( ( nBytes = recvHeader( pwCheck, pwId, &byFlag ) ) < 0 ) + return nBytes; + + // check sequence number (last packet need not have flag) + if ( ( byFlag ^ *pwCheckSeq ) & 0x7f ) + { + recvFinish( nBytes ); + return PACKET_ERR_SEQUENCE; + } + + // must be streaming packet + if ( !( byFlag & PACKET_FLAG_STREAM ) && nBytes == 0 ) + { + recvFinish( nBytes ); + return PACKET_ERR_STREAM; + } + + // bump sequence + ( *pwCheckSeq )++; + + return nBytes; +} + +int recvStream( WORD wBoxId, PKTBANK BYTE *pbyData, WORD nLen ) +{ + WORD wId; + WORD wCheck = 0; + BYTE bySeq = 0; + WORD nTotal = 0; + int nBytes = PACKET_ERR_TIMEOUT; + + do + { + // get header + if ( ( nBytes = recvSequence( &wId, &wCheck, &bySeq ) ) < 0 ) + return nBytes; // error + + // check id + if ( wBoxId != wId ) + { + // ignore + recvFinish( nBytes ); + continue; + } + + // to read + if ( nBytes > nLen ) + { + recvFinish( nBytes ); +// return PACKET_BUF_OVERWRITE; + continue; + } + + // gobble the rest + if ( nLen == 0 ) + pbyData = NULL; + + // receive data + if ( recvData( &wCheck, pbyData, nBytes, nLen ) != nBytes ) + { + recvTrailer( &wCheck ); + return nBytes; + } + + // checksum + if ( !recvTrailer( &wCheck ) ) + return PACKET_BAD_CHECKSUM; + + // next + if ( pbyData ) + pbyData += nBytes; + nTotal += nBytes; + nLen -= nBytes; + + // flag off + if ( !( bySeq & PACKET_FLAG_STREAM ) ) + break; + } + while ( nBytes > 0 ); + + return nTotal; +} + +int readStream( WORD wBoxId, void (*put)(BYTE), WORD nLen ) +{ + WORD wId; + WORD wCheck = 0; + BYTE bySeq = 0; + WORD nTotal = 0; + int nBytes = PACKET_ERR_TIMEOUT; + int n, c; + + do + { + // get header + if ( ( nBytes = recvSequence( &wId, &wCheck, &bySeq ) ) < 0 ) + return nBytes; // error + + // check id + if ( wBoxId != wId ) + { + // ignore + recvFinish( nBytes ); + continue; + } + + // to read + if ( nBytes > nLen ) + { + recvFinish( nBytes ); +// return PACKET_BUF_OVERWRITE; + continue; + } + + // receive data + n = nBytes; + while ( n-- ) + { + if ( ( c = recvByte( &wCheck ) ) >= 0 ) + ( *put ) ( c ); // call user's function + else + return c; // timeout + } + + // checksum + if ( !recvTrailer( &wCheck ) ) + return PACKET_BAD_CHECKSUM; + + // next + nTotal += nBytes; + nLen -= nBytes; + + // flag off + if ( !( bySeq & PACKET_FLAG_STREAM ) ) + break; + } + while ( nBytes > 0 ); + + return nTotal; +} diff --git a/src/libPIC/pkt_xmit.c b/src/libPIC/pkt_xmit.c new file mode 100644 index 0000000..3bfdead --- /dev/null +++ b/src/libPIC/pkt_xmit.c @@ -0,0 +1,191 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Packet Transmitter + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "delay.h" +#include "types.h" +#include "serial.h" +#include "packet.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +/////////////////////////////////////////////////////////////////////////////// +// Packetizer +/////////////////////////////////////////////////////////////////////////////// + +void sendPadding( BYTE nBytes ) +{ + // packet header for synchronization + while ( nBytes-- ) + putch( PACKET_SYNC_PAD ); +} + +void sendSpacing( BYTE nBytes ) +{ + // inter packet spacing + while ( nBytes-- ) + putch( PACKET_SYNC_CHAR ); +} + +void sendPut( int v, int n ) +{ + while ( n-- ) + { + putch( v ); + v >>= 8; + } +} + +void sendSynch( BYTE nBytes ) +{ + // packet header for synchronization + while ( nBytes-- > PACKET_SYNC_LENGTH ) + putch( PACKET_SYNC_PAD ); + while ( nBytes-- ) + putch( PACKET_XMIT_SYNC ); + putch( PACKET_SYNC_CHAR ); +} + +void sendHeader( WORD *pwCheck, WORD wId, BYTE byFlag, WORD nBytes ) +{ + // check if line needs to turn around + // packet header for synchronization + // switch the radio + + if ( getRadio() == RADIO_DIRECT ) + sendSynch( PACKET_RESYNC_LENGTH ); // direct connection + else if ( dirRadio( RADIO_TALK ) ) + sendSynch( PACKET_HEADER_LENGTH ); // padding for worst case TX->RX switch + else + sendSynch( PACKET_RESYNC_LENGTH ); + + // put id + sendPut( wId, PACKET_ID_SIZE ); + + // put flag + sendPut( byFlag, PACKET_FL_SIZE ); + + // send byte count + sendPut( nBytes, PACKET_BC_SIZE ); + + // init chksum + *pwCheck = 0; +} + +void sendByte( WORD *pwCheck, BYTE byByte ) +{ + putch( byByte ); + if ( *pwCheck ) + { + // CRC or checksum + if ( g_bPacketCRC ) + *pwCheck = doCRC16( *pwCheck, byByte ); + else + *pwCheck += byByte; + } +} + +void sendData( WORD *pwCheck, const BYTE *pbyData, WORD nBytes ) +{ + // output data and compute checksum + while ( nBytes-- ) + { + // CRC or checksum + if ( g_bPacketCRC ) + *pwCheck = doCRC16( *pwCheck, *pbyData ); + else + *pwCheck += *pbyData; + putch( *pbyData++ ); + } +} + +void sendTrailer( WORD *pwCheck ) +{ + // CRC or checksum + if ( g_bPacketCRC ) + { + // CRC + putch( *pwCheck++ ); + putch( *pwCheck ); + } + else + { + // final checksum + *pwCheck = 256 - (BYTE)*pwCheck; + putch( *pwCheck ); + } + + // padding + if ( getRadio() == RADIO_TALK ) + sendPadding( PACKET_TRAILER_LENGTH ); // PIC TX->RX switch may kill last char + sendFlush(); +} + +void sendFlush( void ) +{ + while ( !putchempty() ) + CLRWDT(); +} + +int sendPacket( WORD wId, const BYTE *pbyPacket, WORD nBytes ) +{ + WORD wCheck = 0; + + // header + sendHeader( &wCheck, wId, 0, (WORD)(pbyPacket ? nBytes : 0) ); + + // data + if ( pbyPacket && nBytes ) + sendData( &wCheck, pbyPacket, nBytes ); + + // trailer + sendTrailer( &wCheck ); + + return nBytes; +} + diff --git a/src/libPIC/pkt_xmits.c b/src/libPIC/pkt_xmits.c new file mode 100644 index 0000000..d314538 --- /dev/null +++ b/src/libPIC/pkt_xmits.c @@ -0,0 +1,133 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Streaming Packet Transmitter + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "delay.h" +#include "types.h" +#include "serial.h" +#include "packet.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +int sendStream( WORD wId, const BYTE *pbyData, WORD nLen ) +{ + WORD wCheck; + BYTE bySeq = 0; + WORD nTotal = 0; + int nBytes; + + while ( nLen > 0 ) + { + // how much can I send? + nBytes = nLen; + if ( nBytes > PACKET_MAX_STREAM ) + nBytes = PACKET_MAX_STREAM; + + // last packet? + if ( nBytes == nLen ) + bySeq &= ~PACKET_FLAG_STREAM; + else + bySeq |= PACKET_FLAG_STREAM; + + // send data + sendHeader( &wCheck, wId, bySeq, nBytes ); + sendData( &wCheck, pbyData, nBytes ); + sendTrailer( &wCheck ); + + // next + pbyData += nBytes; + nTotal += nBytes; + nLen -= nBytes; + bySeq++; // bump sequence + } + + return nTotal; +} + +int writeStream( WORD wId, BYTE(*get)(void), WORD nLen ) +{ + WORD wCheck; + BYTE bySeq = 0; + WORD nTotal = 0; + BYTE byData; + int nBytes; + int n; + + while ( nLen > 0 ) + { + // how much can I send? + nBytes = nLen; + if ( nBytes > PACKET_MAX_STREAM ) + nBytes = PACKET_MAX_STREAM; + + // last packet? + if ( nBytes == nLen ) + bySeq &= ~PACKET_FLAG_STREAM; + else + bySeq |= PACKET_FLAG_STREAM; + + // send data + sendHeader( &wCheck, wId, bySeq, nBytes ); + + n = nBytes; + while ( n-- ) + { + byData = ( *get ) ( ); + sendByte( &wCheck, byData ); + } + sendTrailer( &wCheck ); + + // next + nTotal += nBytes; + nLen -= nBytes; + bySeq++; // bump sequence + } + + return nTotal; +} + diff --git a/src/libPIC/portb.h b/src/libPIC/portb.h new file mode 100644 index 0000000..f0e11dc --- /dev/null +++ b/src/libPIC/portb.h @@ -0,0 +1,150 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Port B + *---------------------------------------------------------------------------- + * Int Pin 0 Interrupt + * Int Pin 1-2 Interrupt + * Int Pin 4-7 Change detect +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _PORTB_H_ +#define _PORTB_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +// this is application specific +#include "system.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + + +// INT0 +#ifdef RB0_PIN +#define PortB0Clr() g_bRb0Flag=0 +#define PortB0Set() g_bRb0Flag=1 +#define PortB0Get() g_bRb0Flag +#define PortB0Clear() g_wRb0Count0=0 +#define PortB0Count() g_wRb0Count0 +#define PortB0Read() g_stCount0.dw // timer #1 reading +#endif + +// INT0-2 +#ifdef _PIC18 +#ifdef RB1_PIN +#define PortB1Clr() g_bRb1Flag=0 +#define PortB1Set() g_bRb1Flag=1 +#define PortB1Get() g_bRb1Flag +#define PortB1Clear() g_wRb1Count=0 +#define PortB1Count() g_wRb1Count +#endif +#ifdef RB2_PIN +#define PortB2Clr() g_bRb2Flag=0 +#define PortB2Set() g_bRb2Flag=1 +#define PortB2Get() g_bRb2Flag +#define PortB2Clear() g_wRb2Count=0 +#define PortB2Count() g_wRb2Count +#endif +#endif + +#define PortB4567Flag() g_bRb4567Flag +#define PortB4567Clear() g_bRb4567Flag=0 +#ifdef RB4_PIN +#define PortB4High() g_wRb4High +#define PortB4Low() g_wRb4Low +#endif +#ifdef RB5_PIN +#define PortB5High() g_wRb5High +#define PortB5Low() g_wRb5Low +#endif +#ifdef RB6_PIN +#define PortB6High() g_wRb6High +#define PortB6Low() g_wRb6Low +#endif +#ifdef RB7_PIN +#define PortB7High() g_wRb7High +#define PortB7Low() g_wRb7Low +#endif + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +#ifdef RB0_PIN +LIBBANK extern volatile bit g_bRb0Flag; +LIBBANK extern volatile long_dword g_stCount0; +LIBBANK extern volatile WORD g_wRb0Counter; +#endif +#ifdef RB1_PIN +LIBBANK extern volatile bit g_bRb1Flag; +LIBBANK extern volatile WORD g_wRb1Counter; +#endif +#ifdef RB2_PIN +LIBBANK extern volatile bit g_bRb2Flag; +LIBBANK extern volatile WORD g_wRb2Counter; +#endif + +LIBBANK extern volatile bit g_bRb4567Flag; +#ifdef RB4_PIN +LIBBANK extern volatile bit g_bRb4Flag; +LIBBANK extern volatile WORD g_wRb4Low; +LIBBANK extern volatile WORD g_wRb4High; +#endif +#ifdef RB5_PIN +LIBBANK extern volatile bit g_bRb5Flag; +LIBBANK extern volatile WORD g_wRb5Low; +LIBBANK extern volatile WORD g_wRb5High; +#endif +#ifdef RB6_PIN +LIBBANK extern volatile bit g_bRb6Flag; +LIBBANK extern volatile WORD g_wRb6Low; +LIBBANK extern volatile WORD g_wRb7High; +#endif +#ifdef RB7_PIN +LIBBANK extern volatile bit g_bRb7Flag; +LIBBANK extern volatile WORD g_wRb7Low; +LIBBANK extern volatile WORD g_wRb7High; +#endif + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +// interrupt pins +extern void PortB0Init( void ); +extern void PortB0Handler( void ); + +extern void PortB12Init( BYTE byPins ); +extern void PortB12Handler( void ); + +extern void PortB4567Init( void ); +extern void PortB4567Handler( void ); + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/portb_0.c b/src/libPIC/portb_0.c new file mode 100644 index 0000000..91f6678 --- /dev/null +++ b/src/libPIC/portb_0.c @@ -0,0 +1,111 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Port B Pin 0 Interrupt (INT0) + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "portb.h" + +#ifdef RB0_PIN +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +// external interrupt pin (RB0), flag and counter +LIBBANK volatile bit g_bRb0Flag = 0; +LIBBANK volatile long_dword g_stCount0; +LIBBANK volatile WORD g_wCount0 = 0L; + +extern LIBBANK volatile WORD g_wTimer1High; + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void PortB0Init( void ) +{ + RB0 = 0; + TRISB0 = 1; // input +#ifdef _PIC18 + INT0IE = 1; + INTEDG0 = 1; // default rising +#else + INTE = 1; + INTEDG = 1; // default rising +#endif + g_bRb0Flag = 0; + g_stCount0.dw = 0L; +} + +// high priority only +void PortB0Handler( void ) +{ + // RB0 interrupt pin +#ifdef _PIC18 + if ( INT0IF ) +#else + if ( INTF ) +#endif + { + g_bRb0Flag = 1; +#ifdef _PIC18 + g_stCount0.w.h = g_wTimer1High; // high first so can check for change + g_stCount0.w.l = TMR1; +#else + g_stCount0.w.h = g_wTimer1High; // high first so can check for change + g_stCount0.b.lh = TMR1H; + g_stCount0.b.ll = TMR1L; + if ( g_stCount0.w.h != g_wTimer1High || g_stCount0.b.lh != TMR1H ) + { + g_stCount0.w.h = g_wTimer1High; + g_stCount0.b.lh = TMR1H; + g_stCount0.b.ll = TMR1L; + } +#endif +#ifdef _PIC18 + INT0IF = 0; +#else + INTF = 0; +#endif + g_wCount0++; + } +} + +#endif diff --git a/src/libPIC/portb_12.c b/src/libPIC/portb_12.c new file mode 100644 index 0000000..4effa25 --- /dev/null +++ b/src/libPIC/portb_12.c @@ -0,0 +1,113 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Port B Pins 1-2 Interrupt (INT1-2) + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "portb.h" + +#if (defined(RB1_PIN) || defined(RB2_PIN)) && defined(_PIC18) +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +#ifdef RB1_PIN +LIBBANK volatile WORD g_wRb1Count = 0L; +#endif + +#ifdef RB2_PIN +LIBBANK volatile WORD g_wRb2Count = 0L; +#endif + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void PortB12Init( BYTE byPins ) +{ +#ifdef RB1_PIN + RB1 = 0; + if ( byPins & 1 ) + { + TRISB1 = 1; // input + INT1IE = 1; + INT1IP = 0; + INTEDG1 = 1; // default rising + g_wRb1Count = 0L; + } +#endif + +#ifdef RB2_PIN + RB2 = 0; + if ( byPins & 2 ) + { + TRISB2 = 1; // input + INT2IE = 1; + INT2IP = 0; + INTEDG2 = 1; // default rising + g_wRb2Count = 0L; + } +#endif +} + +void PortB12Edge( BYTE byEdge ) +{ + INTEDG1 = byEdge; + INTEDG2 = byEdge >> 1; +} + +void PortB12Handler( void ) +{ + if ( INT1IF ) + { + g_bRb1Flag = 1; + g_wRb1Count++; + INT1IF = 0; + } + + if ( INT2IF ) + { + g_bRb2Flag = 1; + g_wRb2Count++; + INT2IF = 0; + } +} +#endif diff --git a/src/libPIC/portb_4567.c b/src/libPIC/portb_4567.c new file mode 100644 index 0000000..4190def --- /dev/null +++ b/src/libPIC/portb_4567.c @@ -0,0 +1,171 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Port B Pin 4-7 Change Detect + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "project.h" +#include "portb.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +LIBBANK volatile bit g_bRb4567Flag = 0; + +// not good for long pulses +#ifdef RB4_PIN +LIBBANK volatile bit g_bRb4Flag = 0; +LIBBANK volatile WORD g_wRb4High = 0L; +LIBBANK volatile WORD g_wRb4Low = 0L; +LIBBANK volatile WORD g_wRb4Last = 0L; +#endif +#ifdef RB5_PIN +LIBBANK volatile bit g_bRb5Flag = 0; +LIBBANK volatile WORD g_wRb5High = 0L; +LIBBANK volatile WORD g_wRb5Low = 0L; +LIBBANK volatile WORD g_wRb5Last = 0L; +#endif +#ifdef RB6_PIN +// not good for long pulses +LIBBANK volatile bit g_bRb6Flag = 0; +LIBBANK volatile WORD g_wRb6High = 0L; +LIBBANK volatile WORD g_wRb6Low = 0L; +LIBBANK volatile WORD g_wRb6Last = 0L; +#endif +#ifdef RB7_PIN +LIBBANK volatile bit g_bRb7Flag = 0; +LIBBANK volatile WORD g_wRb7High = 0L; +LIBBANK volatile WORD g_wRb7Low = 0L; +LIBBANK volatile WORD g_wRb7Last = 0L; +#endif + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void PortB4567Init( void ) +{ +#ifdef RB4_PIN + RB4 = 0; + g_bRb4Flag = RB4; + TRISC4 = 0; +#endif +#ifdef RB5_PIN + RB5 = 0; + g_bRb5Flag = RB5; + TRISC5 = 0; +#endif +#ifdef RB6_PIN + RB6 = 0; + g_bRb6Flag = RB6; + TRISC6 = 0; +#endif +#ifdef RB7_PIN + RB7 = 0; + g_bRb7Flag = RB7; + TRISC7 = 0; +#endif + RBIE = 1; +#ifdef _PIC18 + RBIP = 0; +#endif +} + +// 18F callable +#ifdef _PIC18 +void PortB4567Handler( void ) +{ + if ( !RBIF ) + return; + g_bRb4567Flag = 1; + + // read bits, measure width +#ifdef RB4_PIN + if ( g_bRb4Flag != RB4 ) + { + // RB4 changed + if ( RB4 ) + g_wRb4Low = TMR1 - g_wRb4Last; // pulse width low + else + g_wRb4High = TMR1 - g_wRb4Last; // pulse width high + g_wRb4Last = TMR1; + g_bRb4Flag = RB4; + } +#endif +#ifdef RB5_PIN + if ( g_bRb5Flag != RB5 ) + { + // RB5 changed + if ( RB5 ) + g_wRb5Low = TMR1 - g_wRb5Last; // pulse width low + else + g_wRb5High = TMR1 - g_wRb5Last; // pulse width high + g_wRb5Last = TMR1; + g_bRb5Flag = RB5; + } +#endif +#ifdef RB6_PIN + if ( g_bRb6Flag != RB6 ) + { + // RB6 changed + if ( RB6 ) + g_wRb6Low = TMR1 - g_wRb6Last; // pulse width low + else + g_wRb6High = TMR1 - g_wRb6Last; // pulse width high + g_wRb6Last = TMR1; + g_bRb6Flag = RB6; + } +#endif +#ifdef RB7_PIN + if ( g_bRb7Flag != RB7 ) + { + // RB7 changed + if ( RB7 ) + g_wRb7Low = TMR1 - g_wRb7Last; // pulse width low + else + g_wRb7High = TMR1 - g_wRb7Last; // pulse width high + g_wRb7Last = TMR1; + g_bRb7Flag = RB7; + } +#endif + RBIF = 0; +} +#endif diff --git a/src/libPIC/project.h b/src/libPIC/project.h new file mode 100644 index 0000000..5459353 --- /dev/null +++ b/src/libPIC/project.h @@ -0,0 +1,51 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Project Header + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _PROJECT_H_ +#define _PROJECT_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/pwm.c b/src/libPIC/pwm.c new file mode 100644 index 0000000..c711591 --- /dev/null +++ b/src/libPIC/pwm.c @@ -0,0 +1,87 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PWM Output + *---------------------------------------------------------------------------- + * Output PWM (8 bit resolution for now) +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "delay.h" +#include "pwm.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + + +void PwmInit( void ) +{ + RC1 = RC2 = 0; + PR2 = 255; // max period + T2CON = 0b00000111; // 16:1 prescale + // PWM1 + TRISC1 = 0; + CCPR1L = 0; + CCP1CON = 0b00001100; + // PMW2 + TRISC2 = 0; + CCPR2L = 0; + CCP2CON = 0b00001100; +} + +// duty cycle 0-PWM_DUTY_MAX (use macro) +void PwmOut( BYTE byPin, WORD wDuty ) +{ + // clip + if ( wDuty > PWM_DUTY_MAX ) + wDuty = PWM_DUTY_MAX; + + // allows custom rate for timer 2 + if ( PR2 != 255 ) + wDuty = wDuty * PR2 / PWM_DUTY_CYCLE; + + // scale duty cycle + if ( byPin == 1 ) + CCPR1L = wDuty; + if ( byPin == 2 ) + CCPR2L = wDuty; +} diff --git a/src/libPIC/pwm.h b/src/libPIC/pwm.h new file mode 100644 index 0000000..587594c --- /dev/null +++ b/src/libPIC/pwm.h @@ -0,0 +1,61 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PWM Output + *---------------------------------------------------------------------------- + * PWM1 + * PWM2 +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _PWM_H_ +#define _PWM_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +#define PWM_DUTY_CYCLE 256 +#define PWM_DUTY_MIN 0 +#define PWM_DUTY_HALF (PWM_DUTY_CYCLE/2) +#define PWM_DUTY_MAX (PWM_DUTY_CYCLE-1) + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +extern void PwmInit( void ); +extern void PwmOut( BYTE pin, WORD duty ); + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/queue.h b/src/libPIC/queue.h new file mode 120000 index 0000000..fcb4c93 --- /dev/null +++ b/src/libPIC/queue.h @@ -0,0 +1 @@ +../include/bytequeue.h \ No newline at end of file diff --git a/src/libPIC/ser_baud.c b/src/libPIC/ser_baud.c new file mode 100644 index 0000000..1aa1c36 --- /dev/null +++ b/src/libPIC/ser_baud.c @@ -0,0 +1,63 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial Baud Rate + *---------------------------------------------------------------------------- + * Serial port driver loop using USART, interrupt driven. +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "serial.h" +#include "delay.h" +#include "queue.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void SerialBaud( DWORD dwBaud ) +{ +#ifdef __linux__ + openPort( closePort(), dwBaud ); +#else + SPBRG = USART_GEN( dwBaud ); +#endif +} diff --git a/src/libPIC/ser_getn.c b/src/libPIC/ser_getn.c new file mode 100644 index 0000000..f088b3d --- /dev/null +++ b/src/libPIC/ser_getn.c @@ -0,0 +1,133 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial Number Input + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "serial.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +static DWORD getun_internal( BYTE echo ) +{ + DWORD n; + char c; + + do + { + c = getch( ); + if ( echo ) + putch( c ); + } + while ( c < '0' || c > '9' ); + + n = 0; + for ( ;; ) + { + if ( c >= ( ( int ) '0' ) && c <= ( ( int ) '9' ) ) + { + n *= 10; + n += c - '0'; + } + else + break; + c = getch( ); + if ( echo ) + putch( c ); + } + return n; +} + +DWORD getun( void ) +{ + return ( getun_internal( 1 ) ); +} + +DWORD getunn( void ) +{ + return ( getun_internal( 0 ) ); +} + +static DWORD getuntimeout_internal( UINT * t, BYTE echo ) +{ + WORD n; + char c; + + do + { + c = getchtimeout( t ); + if ( echo ) + putch( c ); + } + while ( c < '0' || c > '9' ); + + n = 0; + for ( ;; ) + { + if ( c >= ( ( int ) '0' ) && c <= ( ( int ) '9' ) ) + { + n *= 10; + n += c - '0'; + } + else + break; + + c = getchtimeout( t ); + if ( echo ) + putch( c ); + } + return n; +} + +DWORD getuntimeout( UINT * t ) +{ + return getuntimeout_internal( t, 1 ); +} + +DWORD getunntimeout( UINT * t ) +{ + return getuntimeout_internal( t, 0 ); +} diff --git a/src/libPIC/ser_gets.c b/src/libPIC/ser_gets.c new file mode 100644 index 0000000..49e2e76 --- /dev/null +++ b/src/libPIC/ser_gets.c @@ -0,0 +1,81 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial String Input + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "serial.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +#ifdef SERIAL_GET +int serial_get( BYTE *s, WORD n ) +{ + int r = n; + while ( n-- ) + *s++ = getch(); + return r; +} +#endif + +int gets( char *s, short n ) +{ + char c; + int l = 0; + + while ( (c = getch()) && n-- ) + { + if ( c == '\r' ) + { + putch( c ); + putch( '\n' ); + break; + } + *s++ = c; + l++; + } + return l; +} diff --git a/src/libPIC/ser_getw.c b/src/libPIC/ser_getw.c new file mode 100644 index 0000000..19c9313 --- /dev/null +++ b/src/libPIC/ser_getw.c @@ -0,0 +1,72 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial Input + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "serial.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +WORD getword( ) +{ + short_word word; + + word.b.l = getch(); + word.b.h = getch(); + return word.w; +} + +DWORD getdword( ) +{ + long_dword dword; + + dword.b.ll = getch(); + dword.b.lh = getch(); + dword.b.hl = getch(); + dword.b.hh = getch(); + return dword.dw; +} diff --git a/src/libPIC/ser_init.c b/src/libPIC/ser_init.c new file mode 100644 index 0000000..4f0aa34 --- /dev/null +++ b/src/libPIC/ser_init.c @@ -0,0 +1,154 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial Initialization & Interrupt Handler + *---------------------------------------------------------------------------- + * Serial port driver loop using USART, interrupt driven. +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "serial.h" +#include "delay.h" +#include "queue.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +// interrupt driven serial i/o uses queues +SERBANK Queue g_qSerialRx = { 0, 0, 0, 0 }; +SERBANK Queue g_qSerialTx = { 0, 0, 0, 0 }; + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +static LIBBANK BYTE byRx = 0; +static LIBBANK BYTE byTx = 0; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void SerialInit( void ) +{ + // fix these + RC6 = 1; + RC7 = 1; + TRISC6 = 0; + TRISC7 = 1; + + // baud rate + SerialBaud( BAUD ); + + // asynchronous serial + // recv, 8 bits, continuous + RCSTA = 0b10010000; + // xmit, 8 bits, high speed + TXSTA = 0b00100110; + + CREN = 0; + CREN = 1; +} + +void SerialAlloc( BYTE *pbyTx, BYTE nTx, BYTE *pbyRx, BYTE nRx ) +{ + QueueAlloc( &g_qSerialTx, pbyTx, nTx ); + QueueAlloc( &g_qSerialRx, pbyRx, nRx ); + if ( nTx ) + { + RCIE = 1; +#ifdef _PIC18 + RCIP = 1; +#endif + } + if ( nRx ) + { + TXIE = 0; // turned on by putch() +#ifdef _PIC18 + TXIP = 1; +#endif + } + RCIF = TXIF = 0; +} + +void SerialClear( void ) +{ + CREN = 0; + CREN = 1; + QueueClear( &g_qSerialTx ); + QueueClear( &g_qSerialRx ); + getchflush(); +} + +void SerialHandler( void ) +{ + // RC7/RX + if ( RCIF ) + { + // check queue, lose a byte if necessary + while ( _QueueFull( g_qSerialRx ) ) + _QueueGet( g_qSerialRx, byRx ); + + // read char + byRx = RCREG; + _QueuePut( g_qSerialRx, byRx ); + + // doesn't handle overflow, so app had better have big buffer + if ( OERR ) + { + // overrun error (lost data) + CREN = 0; + CREN = 1; + } + RCIF = 0; + } + // RC6/TX + if ( TXIF ) + { + // ready to xmit + byTx = _QueueCount( g_qSerialTx ); + if ( byTx ) + { + // output from queue + _QueueGet( g_qSerialTx, TXREG ); + byTx--; + } + if ( byTx == 0 ) + { + // nothing left, disable + TXIE = 0; + } + TXIF = 0; + } +} diff --git a/src/libPIC/ser_input.c b/src/libPIC/ser_input.c new file mode 100644 index 0000000..b4767b9 --- /dev/null +++ b/src/libPIC/ser_input.c @@ -0,0 +1,137 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial Char/Byte Input + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "serial.h" +#include "delay.h" +#include "queue.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +extern SERBANK Queue g_qSerialRx; + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +BYTE getchavail( void ) +{ + if ( QueueSize( &g_qSerialRx ) ) + return QueueCount( &g_qSerialRx ); + return RCIF; +} + +void getchflush( void ) +{ + char c; + if ( QueueSize( &g_qSerialRx ) ) + { + QueueClear( &g_qSerialRx ); + } + else + { + while ( RCIF ) + c = RCREG; + } + CREN = 0; + CREN = 1; +} + +int getch( void ) +{ + int c; + BYTE b; + + // from buffer + if ( QueueSize( &g_qSerialRx ) ) + { + while ( QueueCount( &g_qSerialRx ) == 0 ) + CLRWDT(); + QueueGet( &g_qSerialRx, &b ); + c = b; + } + else + { + while ( !RCIF ) + CLRWDT(); + c = RCREG; + } + + // check for errors + if ( FERR ) + c = SER_ERR_FRAME; + else if ( OERR ) + c = SER_ERR_OVERRUN; + if ( c < 0 ) + { + CREN = 0; + CREN = 1; + } + + return c; +} + +int getchtimeout( UINT * t ) +{ + WORD d = *t * 100; + if ( QueueSize( &g_qSerialRx ) ) + { + while ( d-- ) + { + if ( QueueCount( &g_qSerialRx ) ) + return getch(); + } + } + else + { + while ( d-- ) + { + if ( RCIF ) + return getch(); + DelayUsec( 10 ); + *t = d / 10; + } + } + return SER_ERR_TIMEOUT; +} diff --git a/src/libPIC/ser_lnx.c b/src/libPIC/ser_lnx.c new file mode 100644 index 0000000..402816f --- /dev/null +++ b/src/libPIC/ser_lnx.c @@ -0,0 +1,243 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Linux Serial Driver + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +#if defined(__linux__) +/***************************************************************************** + * includes +*****************************************************************************/ + +// Linux +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +static int port = -1; +static int fd = -1; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// defaults to stdio for debugging purposes until serial port is opened +// Better to use select() in the at the app level when reading serial port + +int openPort( int iPort, int iBaud ) +{ + struct termios oldtio, newtio; + char tty[255]; + + // old port + if ( iPort < 0 ) + iPort = port; + else + port = iPort; + if ( iPort < 0 ) + return -1; + + // device name + sprintf( tty, "/dev/ttyS%d", iPort - 1 ); + + fd = open( tty, O_RDWR | O_NOCTTY ); + if ( fd < 0 ) + { + perror( tty ); + return -1; + } + + // termios + tcgetattr( fd, &oldtio ); /* save current serial port settings */ + bzero( &newtio, sizeof(newtio) ); /* clear struct for new port settings */ + + // no handshake, 8N1, local + newtio.c_cflag = CS8 | CLOCAL | CREAD; + + // speed + switch ( iBaud ) + { + case 9600: + newtio.c_cflag |= B9600; + break; + case 19200: + newtio.c_cflag |= B19200; + break; + case 38400: + newtio.c_cflag |= B38400; + break; + case 57600: + newtio.c_cflag |= B57600; + break; + case 115200: + newtio.c_cflag |= B115200; + break; + default: + close( fd ); + return -1; + } + + // raw mode, no special character processing + newtio.c_iflag = 0; + newtio.c_oflag = 0; + newtio.c_lflag = 0; + + // timing + newtio.c_cc[VMIN] = 1; // 1 char at a time + newtio.c_cc[VTIME] = 1; // 100msec timeout + + // set it + tcflush( fd, TCIFLUSH ); + tcsetattr( fd, TCSANOW, &newtio ); + + // return handle + return fd; +} + +int closePort( void ) +{ + if ( fd >= 0 ) + close( fd ); + else + port = -1; + fd = -1; + return port; +} + +int getchavail( void ) +{ + int n = 0; + + if ( fd < 0 ) + { + if ( feof( stdin ) == 0 ) + return 1; + return -1; + } + + ioctl( fd, FIONREAD, &n ); + return n; +} + +int getchflush( void ) +{ + if ( fd < 0 ) + return fd; + + tcflush( fd, TCIFLUSH ); + return 0; +} + +int getch( void ) +{ + char c = 0; + + if ( fd < 0 ) + return getchar(); + + while ( read( fd, &c, 1 ) < 1 ) + ; + return c; +} + +int getchtimeout( int *t ) +{ + char c = 0; + + if ( fd < 0 ) + return getchar(); + + // ignore timeout + if ( read( fd, &c, 1 ) == 1 ) + return c; + return -2; +} + +void putch( int i ) +{ + char c = i; + + if ( fd < 0 ) + { + putchar( c ); + return; + } + + // not particularly efficient + write( fd, &c, 1 ); +} + +BYTE putchempty( void ) +{ + if ( fd < 0 ) + { + fflush( stdout ); + return 1; + } + + // flush it + tcflush( fd, TCOFLUSH ); + tcdrain( fd ); + return 1; +} + +void putchflush( void ) +{ + if ( fd < 0 ) + { + fflush( stdout ); + return; + } + + // flush it + tcflush( fd, TCOFLUSH ); + tcdrain( fd ); +} + +#endif diff --git a/src/libPIC/ser_output.c b/src/libPIC/ser_output.c new file mode 100644 index 0000000..321e9b1 --- /dev/null +++ b/src/libPIC/ser_output.c @@ -0,0 +1,106 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial Char/Byte Output + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "serial.h" +#include "delay.h" +#include "queue.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +extern SERBANK Queue g_qSerialTx; + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +BYTE putchempty( void ) +{ + if ( QueueSize( &g_qSerialTx ) ) + { + if ( QueueCount( &g_qSerialTx ) ) + return 0; + } + return TRMT; +} + +void putchflush( void ) +{ + if ( QueueSize( &g_qSerialTx ) ) + { + while ( QueueCount( &g_qSerialTx ) ) + CLRWDT(); + QueueClear( &g_qSerialTx ); + } + else + { + while ( !TRMT ) + CLRWDT(); + } +} + +// put character +void putch( char c ) +{ + // buffer + if ( QueueSize( &g_qSerialTx ) ) + { + if ( TXIE ) + { + // interrupts are running, store in buffer + while ( QueueFull( &g_qSerialTx ) ) + CLRWDT(); + QueuePut( &g_qSerialTx, (BYTE*)&c ); + return; + } + QueueClear( &g_qSerialTx ); + TXIE = 1; // enable interrupt + } + + // put char + while ( !TXIF ) + CLRWDT(); + TXREG = c; +} + diff --git a/src/libPIC/ser_putn.c b/src/libPIC/ser_putn.c new file mode 100644 index 0000000..eb104d6 --- /dev/null +++ b/src/libPIC/ser_putn.c @@ -0,0 +1,88 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial Number Output + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "serial.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// warning, only does 8 digits +void putun( DWORD l ) +{ + BYTE i = 0; + DWORD o = 0; + + while ( l ) + { + o <<= 4; + o |= ( l % 10 ); + l /= 10; + i++; + } + + if ( i == 0 ) + i++; + + while ( i-- ) + { + putch( (o & 0xf) + '0' ); + o >>= 4; + } + + putch( ' ' ); +} + +void putn( long n ) +{ + if ( n < 0 ) + { + putch( '-' ); + n = -n; + } + putun( n ); +} diff --git a/src/libPIC/ser_puts.c b/src/libPIC/ser_puts.c new file mode 100644 index 0000000..791a98d --- /dev/null +++ b/src/libPIC/ser_puts.c @@ -0,0 +1,87 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial String Output + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "serial.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#ifdef __linux__ +#define putch(C) putchar(C) +#endif + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +#ifdef SERIAL_PUTS +int serial_puts( const BYTE *s, WORD n ) +{ + int r = n; + while ( n-- ) + putch( *s++ ); + return r; +} +#endif + +int puts( const char *s ) +{ + char c; + int n = 0; + + while ( c = *s++ ) + { + if ( c == '\n' ) + { + putch( '\r' ); + n++; + } + putch( c ); + n++; + } + putch( '\r' ); + putch( '\n' ); + + return n+2; +} diff --git a/src/libPIC/ser_putw.c b/src/libPIC/ser_putw.c new file mode 100644 index 0000000..8a6717f --- /dev/null +++ b/src/libPIC/ser_putw.c @@ -0,0 +1,66 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial Output + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "serial.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void putword( WORD i ) +{ + putch( i ); + putch( i >> 8 ); +} + +void putdword( DWORD i ) +{ + putch( i ); + putch( i >> 8 ); + putch( i >> 16 ); + putch( i >> 24 ); +} diff --git a/src/libPIC/ser_putx.c b/src/libPIC/ser_putx.c new file mode 100644 index 0000000..c19572d --- /dev/null +++ b/src/libPIC/ser_putx.c @@ -0,0 +1,83 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial Hex Output + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "serial.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void puthex( DWORD l, BYTE s ) +{ + BYTE d; + + while ( s ) + { + s -= 4; + d = ( l >> s ) & 0x0f; + if ( d < 10 ) + putch( d + 0x30 ); + else + putch( d - 10 + 0x41 ); + } + putch( ' ' ); +} + +void putbx( BYTE b ) +{ + puthex( b, 8 ); +} + +void putwx( WORD w ) +{ + puthex( w, 16 ); +} + +void putdwx( DWORD l ) +{ + puthex( l, 32 ); +} diff --git a/src/libPIC/ser_win.c b/src/libPIC/ser_win.c new file mode 100644 index 0000000..9de3914 --- /dev/null +++ b/src/libPIC/ser_win.c @@ -0,0 +1,296 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Windows Serial Emulation Driver + *---------------------------------------------------------------------------- + * Win32 API serial communications +*****************************************************************************/ + +#if defined(_WINDOWS) +/***************************************************************************** + * includes +*****************************************************************************/ + +// Windows +#include +#include +#include +#include +#include "wtypes.h" +#ifdef USB_FTDI +// USB instead of serial +#include "FTD2XX.h" +#endif + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +#ifdef USB_FTDI +static FT_HANDLE m_ftHandle; +static FT_DEVICE m_ftDevice; +static DWORD m_dwDeviceId = 0; +#else +static HANDLE hComm = NULL; +#endif + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +int openPort( int iPort, int iBaud ) +{ +#ifdef USB_FTDI + // default USB device + if ( FT_OpenEx( "DLP-USB232M", FT_OPEN_BY_DESCRIPTION, &m_ftHandle ) == FT_OK ) + { + // DLP/FTDI D2XX unprogrammed, probably a virtual communications port (VCP) + } +#ifdef CORSA_USB_RADIO + else if ( FT_OpenEx( "Corsa-USB232M-Radio", FT_OPEN_BY_DESCRIPTION, &m_ftHandle ) == FT_OK ) + { + // Corsa EZ-Logger, by description + } +#endif + else + return 0; + + // set speed, if standard or custom + if ( iBaud == 1200 || iBaud == 2400 || iBaud == 4800 || iBaud == 9600 || + iBaud == 19200 || iBaud == 38400 || iBaud == 57600 || iBaud == 115200 ) + { + // use default divisors + if ( FT_SetBaudRate( m_ftHandle, iBaud ) != FT_OK ) + { + FT_Close( m_ftHandle ); + return 0; + } + } + else + { + // note that I ignored the fractional portion (for now) + if ( FT_SetDivisor( m_ftHandle, 3000000 / iBaud ) != FT_OK ) + { + FT_Close( m_ftHandle ); + return 0; + } + } + + // setup + if ( FT_ResetDevice( m_ftHandle ) != FT_OK || + FT_SetDataCharacteristics( m_ftHandle, FT_BITS_8, FT_STOP_BITS_1, FT_PARITY_NONE ) != FT_OK || + FT_SetFlowControl( m_ftHandle, FT_FLOW_NONE, 0, 0 ) != FT_OK || + FT_SetChars( m_ftHandle, 0, 0, 0, 0 ) != FT_OK || + FT_SetTimeouts( m_ftHandle, 100, 0 ) != FT_OK ) + { + FT_Close( m_ftHandle ); + return 0; + } + return 1; +#else + char szPort[256]; + COMMTIMEOUTS timeouts; + DCB dcb; + + // comm port name + sprintf( szPort, "COM%d", iPort ); + + // open + hComm = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0 ); + if ( hComm == INVALID_HANDLE_VALUE ) + { + hComm = 0; + return -1; + } + + // control + FillMemory( &dcb, sizeof( dcb ), 0 ); + dcb.DCBlength = sizeof( dcb ); + sprintf( szPort, "%d,n,8,1", iBaud ); + if ( !BuildCommDCB( szPort, &dcb ) ) + { + CloseHandle( hComm ); + hComm = 0; + return -1; + } + + // handshake + dcb.fDtrControl = DTR_CONTROL_DISABLE; + dcb.fRtsControl = RTS_CONTROL_DISABLE; + if ( !SetCommState( hComm, &dcb ) ) + { + CloseHandle( hComm ); + hComm = 0; + return -1; + } + + // the first two don't help at all, so don't set them! + memset( &timeouts, 0, sizeof( timeouts ) ); + timeouts.ReadIntervalTimeout = 0; // between chars (no char time) + timeouts.ReadTotalTimeoutMultiplier = 0; // * #chars to read + timeouts.ReadTotalTimeoutConstant = 500; // wait time till something arrives + + if ( !SetCommTimeouts( hComm, &timeouts ) ) + { + CloseHandle( hComm ); + hComm = 0; + return -1; + } + + // generous buffering + SetupComm( hComm, 16384, 16384 ); + + // done + return iPort; +#endif +} + +int closePort( void ) +{ +#ifdef USB_FTDI + if ( m_ftHandle ) + { + FT_Close( m_ftHandle ); + m_ftHandle = 0; + } + return 0; +#else + if ( hComm ) + { + return CloseHandle( hComm ); + hComm = 0; + } + return 0; +#endif +} + +int getchavail( void ) +{ +#ifdef USB_FTDI + DWORD dwAvail = 0; + + if ( FT_GetQueueStatus( m_ftHandle, &dwAvail ) == FT_OK ) + return ( int ) dwAvail; + return 0; +#else + COMSTAT comStat; + DWORD dwErrors; + + // weird + if ( !ClearCommError( hComm, &dwErrors, &comStat ) ) + return -1; + return comStat.cbInQue; +#endif +} + +int getch( void ) +{ + DWORD dwRead = 0; + BYTE c = 0; +#ifdef USB_FTDI + if ( FT_Read( m_ftHandle, &c, 1, &dwRead ) == FT_OK ) + { + if ( dwRead == 1 ) + return c; + } +#else + + if ( ReadFile( hComm, &c, 1, &dwRead, NULL ) ) + { + if ( dwRead == 1 ) + return c; + } +#endif + return -2; +} + +void getchflush( void ) +{ +#ifdef USB_FTDI + FT_Purge( m_ftHandle, FT_PURGE_RX ); +#else + int i, n = 0; + + while ( (i = getchavail()) > 0 ) + { + n += i; + while ( i-- ) + getch(); + } +#endif +} + +int getchtimeout( int *t ) +{ + BYTE c = 0; + DWORD dwRead = 0; +#ifdef USB_FTDI + if ( FT_Read( m_ftHandle, &c, 1, &dwRead ) == FT_OK ) + { + if ( dwRead == 1 ) + return c; + } +#else + if ( ReadFile( hComm, &c, 1, &dwRead, NULL ) ) + { + if ( dwRead == 1 ) + return c; + } +#endif + return -2; +} + +void putch( int c ) +{ + DWORD dwWrite = 0; +#ifdef USB_FTDI + FT_Write( m_ftHandle, &byData, 1, &dwWrite ); +#else + WriteFile( hComm, &c, 1, &dwWrite, NULL ); +#endif +} + +BYTE putchempty( void ) +{ +#ifdef USB_FTDI + if ( FT_Purge( m_ftHandle, FT_PURGE_TX ) == FT_OK ) + return 1; + return 0; +#else + // flush + FlushFileBuffers( hComm ); + return 1; +#endif +} + +#endif diff --git a/src/libPIC/ser_xdump.c b/src/libPIC/ser_xdump.c new file mode 100644 index 0000000..e1d9a71 --- /dev/null +++ b/src/libPIC/ser_xdump.c @@ -0,0 +1,87 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Serial Hex Dump + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "serial.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void hexdump( DWORD dwAddr, const BYTE *pbyData, WORD nBytes ) +{ + WORD n; + BYTE i; + BYTE c; + + while ( nBytes ) + { + puthex( dwAddr, 32 ); + + n = 16; + if ( nBytes < n ) + n = nBytes; + + // hex + for ( i = 0; i < n; i++ ) + puthex( *( pbyData + i ), 8 ); + + // string + for ( i = 0; i < n; i++ ) + { + c = *( pbyData + i ); + if ( 0x20 <= c && c < 0x7f ) + putch( c ); + else + putch( '.' ); + } + putnl(); + + dwAddr += 16; + pbyData += 16; + nBytes -= n; + } +} diff --git a/src/libPIC/serial.h b/src/libPIC/serial.h new file mode 100644 index 0000000..3d09ca5 --- /dev/null +++ b/src/libPIC/serial.h @@ -0,0 +1,136 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Serial I/O Interface + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _SERIAL_H_ +#define _SERIAL_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +#ifndef BAUD +#define BAUD 57600 +#endif + +// some of these may not apply w/ -DSERIAL_LOOP +#define SER_ERR_DEVICE (-1) +#define SER_ERR_TIMEOUT (-2) +#define SER_ERR_OVERRUN (-3) +#define SER_ERR_FRAME (-4) +#define SER_NO_DATA (-5) + +/***************************************************************************** + * macros +*****************************************************************************/ + +// rate generation +#define USART_GEN(B) ((((byXtal*1000000L)/(B))/16L)-1) +#define USART_RATE USART_GEN(BAUD) + +#define hexchar(c) ((c >= (int)'0' && c <= (int)'9') || \ + (c >= (int)'A' && c <= (int)'F') || (c >= (int)'a' && c <= (int)'f')) + +#define putnl() puts("\n") +#define putlf() putch('\f') +#define putbl() putch(' ') +#define putline(s) puts(s);putnl() + +// memory i/o style semantics +#define SerialReadByte() getch() +#define SerialWriteByte(B) putch(B) +#define SerialReadBlock(B,N) serial_get(B,N) +#define SerialWriteBlock(B,N) serial_put(B,N) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +extern void SerialIdle( void ); // user supplied serial idle routine +extern void SerialInit( void ); +extern void SerialBaud( DWORD dwBaud ); +extern void SerialClear( void ); +extern void SerialAlloc( BYTE *pbyTx, BYTE nTx, BYTE *pbyRx, BYTE nRx ); + +// interrupt +extern void SerialHandler( void ); + +extern BYTE getchavail( void ); +extern void getchflush( void ); +extern BYTE putchempty( void ); +extern void putchflush( void ); + +extern void putch( char c ); + +extern BYTE gethook( void ); // nonzero if cable plugged in + +#ifndef _STDIO_H_ +extern int getch( void ); // <0 error +#endif +extern int getchtimeout( UINT * t ); // <0 error + +// primitive data i/o +#define putint(I) putword(I) +extern void putword( WORD i ); + +#define putlint(L) putdword(L) +extern void putdword( DWORD i ); + +#define getint() getword() +extern WORD getword( void ); + +#define getlint() getdword() +extern DWORD getdword( void ); + +// string i/o +extern int puts( const char *s ); +extern int serial_put( const BYTE *s, WORD n ); +extern void puthex( DWORD l, BYTE s ); +extern void putbx( BYTE n ); +extern void putwx( WORD b ); +extern void putdwx( DWORD n ); +extern void putun( DWORD n ); +extern void putn( long n ); + +extern int serial_get( const BYTE *s, WORD n ); +extern DWORD getx( void ); +extern DWORD getun( void ); +extern DWORD getuntimeout( UINT * t ); +extern DWORD getunn( void ); // no echo +extern DWORD getunntimeout( UINT * t ); // no echo + +extern void hexdump( DWORD dwAddr, const BYTE * pbyData, WORD nBytes ); + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/spi.c b/src/libPIC/spi.c new file mode 100644 index 0000000..fb75790 --- /dev/null +++ b/src/libPIC/spi.c @@ -0,0 +1,145 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * SPI Polled Hardware I/O + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "spi.h" +#include "delay.h" +#include "queue.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +// master +#ifdef SPI_FAST +#define SPI_SSPCON 0b00100001 +#ifndef SPI_WAIT +#define SPI_WAIT 9 +#endif +#else +#define SPI_SSPCON 0b00100010 +#ifndef SPI_WAIT +#define SPI_WAIT 18 +#endif +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +static LIBBANK BYTE bySpiWait = SPI_WAIT; + +#ifdef SPI_DEBUG +static LIBBANK BYTE cSpiLastXmit = 0; +static LIBBANK BYTE cSpiThisXmit = 0; +#endif + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void SpiInit( void ) +{ + // init + RC3 = RC4 = RC5 = 0; + + // fix these + TRISC3 = 0; + TRISC4 = 1; + TRISC5 = 0; + + SSPSTAT = 0; +#ifdef _PIC18 + SSPCON1 = SPI_SSPCON; +#else + SSPCON = SPI_SSPCON; +#endif +} + +void SpiWaitTime( BYTE byUsec ) +{ + bySpiWait = byUsec; +} + +BYTE SpiXferByte( BYTE byOut ) +{ + BYTE byIn; + + // send byte + SSPBUF = byOut; + while ( WCOL ) + { + // xmit collision + WCOL = 0; + SSPBUF = byOut; + } + + // recv byte +#ifdef _PIC18 + while ( !BF ) + ; +#else + while ( !(SSPSTAT & 1) ) + ; +#endif + byIn = SSPBUF; + +#ifdef SPI_DEBUG + cSpiLastXmit = byIn; + if ( cSpiLastXmit != cSpiNextXmit ) + SPI_DEBUG = 1; + else + SPI_DEBUG = 0; + cSpiNextXmit = byOut; +#endif + if ( bySpiWait ) + DelayUsec( bySpiWait ); // be patient + return byIn; +} + +void SpiReadData( BYTE *pbyData, BYTE nBytes ) +{ + while ( nBytes-- ) + *pbyData++ = SpiXferByte( 0 ); +} + +void SpiWriteData( const BYTE *pbyData, BYTE nBytes ) +{ + while ( nBytes-- ) + SpiXferByte( *pbyData++ ); +} diff --git a/src/libPIC/spi.h b/src/libPIC/spi.h new file mode 100644 index 0000000..16ff6af --- /dev/null +++ b/src/libPIC/spi.h @@ -0,0 +1,70 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC SPI Interface + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _SPI_H_ +#define _SPI_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "queue.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +#ifdef _PIC18 +#define SSPCON SSPCON1 +#define STAT_RW RW +#define STAT_DA DA +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define SpiReadByte() SpiXferByte(0) +#define SpiWriteByte(B) SpiXferByte(B) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +extern void SpiInit( void ); +extern void SpiWaitTime( BYTE byUsec ); + +extern BYTE SpiXferByte( BYTE byOut ); + +extern void SpiReadData( BYTE *pbyData, BYTE nBytes ); +extern void SpiWriteData( const BYTE *pbyData, BYTE nBytes ); + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/stack.h b/src/libPIC/stack.h new file mode 120000 index 0000000..5b0c384 --- /dev/null +++ b/src/libPIC/stack.h @@ -0,0 +1 @@ +../include/bytestack.h \ No newline at end of file diff --git a/src/libPIC/system.c b/src/libPIC/system.c new file mode 100644 index 0000000..7af080c --- /dev/null +++ b/src/libPIC/system.c @@ -0,0 +1,156 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Board Support Initialization + * Description + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include + +#include "system.h" +#include "delay.h" + +#include "analog.h" +#include "clock.h" + +// user's project +#include "project.h" + +// hardware +#include "timers.h" +#ifdef PERIOD_MODULE +#include "period.h" +#endif +#ifdef PWM_MODULE +#include "pwm.h" +#endif + +// communications +#ifdef I2C_MODULE +#include "i2c.h" +#endif +#ifdef SPI_MODULE +#include "spi.h" +#endif +#ifdef SERIAL_MODULE +#include "serial.h" +#endif + +// mass storage +#ifdef ATMEL_MODULE +#include "atmel.h" +#endif +#ifdef FRAM_MODULE +#include "fram.h" +#endif + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +const BYTE byXtal = XTAL; + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void SystemInit( void ) +{ + di(); + + // low voltage detect +#ifdef _PIC18 + LVDIF = 0; + LVDCON = 0b00011101; // 4.2V + while ( LVDIF ) + ; + LVDIF = 0; +#endif + // init delay (timer 0) + DelayInit(); + + // Application's hardware initializations + BoardInit(); + + // the following inits may alter the app's inits + AdInit(); +#ifdef ANALOG_MODULE + AnalogInit(); +#endif +#ifdef CLOCK_MODULE + ClockInit(); +#endif + +#ifdef I2C_MODULE + I2CInit(); +#endif +#ifdef SPI_MODULE + SpiInit(); +#endif +#ifdef SERIAL_MODULE + SerialInit(); +#endif + + TimerInit(); +#ifdef PERIOD_MODULE + PeriodInit(); +#endif +#ifdef PWM_MODULE + PwmInit(); +#endif + + // Memory devices +#ifdef ATMEL_MODULE + AtmelInit(); +#endif +#ifdef FRAM_MODULE + FramInit(); +#endif + + // application takes care of watchdog + CLRWDT(); + + // persistent across reset + persist_check(1); + + // interrupts +#ifdef INTER_MODULE + InterruptInit(); +#endif +} diff --git a/src/libPIC/system.h b/src/libPIC/system.h new file mode 100644 index 0000000..2f7fe06 --- /dev/null +++ b/src/libPIC/system.h @@ -0,0 +1,76 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Initialization & Runtime + *---------------------------------------------------------------------------- +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _SYSTEM_H_ +#define _SYSTEM_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#ifdef __linux__ +#include "emul.h" +#elif defined(_PIC18) +#include +#else +#include +#endif +#include "types.h" + +// this works out the nitty gritty +#include "config.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define getXtalFreq() byXtal +#define inPowerFail() bPowerFail + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +extern const BYTE byXtal; + +/***************************************************************************** + * global variables +*****************************************************************************/ + +extern bit bPowerFail; + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +extern void BoardInit( void ); // system specific initialization +extern void SystemInit( void ); // calls board_init and library inits +extern void InterruptInit( void ); // interrupt inits +extern void WatchdogInit( void ); // turn on watchdog + +extern void InterruptHandler( void ); +extern void PowerfailHandler( void ); + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/timers.c b/src/libPIC/timers.c new file mode 100644 index 0000000..4b00bbe --- /dev/null +++ b/src/libPIC/timers.c @@ -0,0 +1,187 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Timers + *---------------------------------------------------------------------------- + * Timer #1 - Fast clock counter + * Timer #2 - 1 msec software timer +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" +#include "timers.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +// Timer #1 +#ifdef TIMER1_INT +volatile long_dword g_stTimer1 = { 0 }; +LIBBANK volatile WORD g_wTimer1High = 0; +#endif + +// Timer 2, used for time stamping and msec timing +#ifdef TIMER2_INT +LIBBANK volatile DWORD g_dwTimer2 = 0L; +LIBBANK volatile WORD g_wTimers2[SW_TIMERS] = { 0 }; +#endif + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void TimerInit( void ) +{ + // Timer 1 setup +#ifdef TIMER1_INT + TMR1IE = 1; +#ifdef _PIC18 + T1CON = 0b10110001; // 16 bit read of Timer 1 + TMR1IP = 0; // low priority +#else + T1CON = 0b00110001; +#endif + PIR1 = 0; + PIR2 = 0; + TMR1L = 0; + TMR1H = 0; + g_wTimer1High = 0; + g_stTimer1.dw = 0L; +#endif + + // Timer 2 setup +#ifdef TIMER2_INT + TMR2IE = 1; +#ifdef _PIC18 + TMR2IP = 0; +#endif +#if XTAL==40 + // pre 1:4, post 1:10 (100us..1ms period) + T2CON = 0b10000101 | ( (10-1) << 3 ); + PR2 = 250; +#else + // pre 1:4, post 1:5 (1ms period) + T2CON = 0b00100101; + PR2 = 250; +#endif + TMR2 = 0; + g_dwTimer2 = 0L; +#endif +} + +#ifdef _PIC18 +void TimerHandler( void ) +{ + // Timer1 overflow +#ifdef TIMER1_INT + if ( TMR1IF ) + { + g_wTimer1High++; + TMR1IF = 0; + } +#endif + // Timer2 interrupt +#ifdef TIMER2_INT + if ( TMR2IF ) + { + g_dwTimer2++; + TMR2IF = 0; +#ifdef SW_TIMERS + if ( g_wTimers2[0] ) + g_wTimers2[0]--; +#if SW_TIMERS > 1 + if ( g_wTimers2[1] ) + g_wTimers2[1]--; +#endif +#if SW_TIMERS > 2 + if ( g_wTimers2[2] ) + g_wTimers2[2]--; +#endif +#if SW_TIMERS > 3 + if ( g_wTimers2[3] ) + g_wTimers2[3]--; +#endif +#endif + } +#endif +} +#endif + +void Timer1Clear( void ) +{ +#ifdef TIMER1_INT + g_wTimer1High = 0; + TMR1ON = 0; +#ifdef _PIC18 + TMR1 = 0; +#else + TMR1H = 0; + TMR1L = 0; +#endif + TMR1ON = 1; + g_stTimer1.dw = 0L; +#endif +} + +DWORD Timer1Read( void ) +{ +#ifdef TIMER1_INT +#ifdef _PIC18 + g_stTimer1.w.h = g_wTimer1High; // high first so can check for change + g_stTimer1.w.l = TMR1; + if ( g_stTimer1.w.h != g_wTimer1High ) + { + g_stTimer1.w.h = g_wTimer1High; + g_stTimer1.w.l = TMR1; + } +#else + g_stTimer1.w.h = g_wTimer1High; // high first so can check for change + g_stTimer1.b.lh = TMR1H; + g_stTimer1.b.ll = TMR1L; + if ( g_stTimer1.w.h != g_wTimer1High || g_stTimer1.b.lh != TMR1H ) + { + g_stTimer1.w.h = g_wTimer1High; + g_stTimer1.b.lh = TMR1H; + g_stTimer1.b.ll = TMR1L; + } +#endif + return g_stTimer1.dw; +#else + return 0L; +#endif +} + diff --git a/src/libPIC/timers.h b/src/libPIC/timers.h new file mode 100644 index 0000000..9acb534 --- /dev/null +++ b/src/libPIC/timers.h @@ -0,0 +1,112 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * PIC Timer Interface + *---------------------------------------------------------------------------- + * Timer #0 - Used by delay routines (dly_usec.c) + * Timer #1 - Fast clock counter + * Timer #2 - 1 msec software timer +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _TIMERS_H_ +#define _TIMERS_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +// this is application specific +#include "system.h" +#include "types.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +// Timer #1: 1:8 prescale, Fosc/4 (625000/sec @ 20Mhz, 1250000/sec @ 40Mhz) +#define COUNTER_SEC_TICKS ((XTAL*1000000L)/32L) +#define COUNTER_MSEC_TICKS (COUNTER_SEC_TICKS/1000L) + +// Timer #2 +#ifndef CLOCKS_PER_SEC +#define CLOCKS_PER_SEC 1000L +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +// Timer #1 +#ifdef TIMER1_INT +#define Timer1Rd() g_stTimer1.dw +#define Timer1Clr() g_stTimer1.dw=0 +#define Timer1Set(V) g_stTimer1.dw=(V) +#define Timer1Ticks() COUNTER_SEC_TICKS +#endif + +// Timer #2 (millisecond) +#ifdef TIMER2_INT +#define Timer2Rd() g_dwTimer2 +#define Timer2Clr() g_dwTimer2=0 +#define Timer2Set(V) g_dwTimer2=(V) +#endif + +#ifdef TIMER2_INT +#define clock() g_dwTimer2 +#ifdef SW_TIMERS +#define MsecTimerGet(i) g_wTimers2[i] +#define MsecTimerSet(i,d) g_wTimers2[i]=(d) +#endif +#else +#define clock() (Timer1Rd()/COUNTER_MSEC_TICKS) +#endif + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +// Timer #1 +#ifdef TIMER1_INT +extern volatile long_dword g_stTimer1; +#endif + +// Timer #2 +#ifdef TIMER2_INT +LIBBANK extern volatile DWORD g_dwTimer2; +#ifdef SW_TIMERS +LIBBANK extern volatile WORD g_wTimers2[SW_TIMERS]; +#endif +#endif + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +extern void TimerInit( void ); +extern void TimerHandler( void ); + +// timer #1 +extern void Timer1Clear( void ); +extern DWORD Timer1Read( void ); + +// timer #2 + +#ifdef __cpluscplus +} +#endif +#endif diff --git a/src/libPIC/types.h b/src/libPIC/types.h new file mode 120000 index 0000000..b72bd04 --- /dev/null +++ b/src/libPIC/types.h @@ -0,0 +1 @@ +../include/embtypes.h \ No newline at end of file diff --git a/src/libPIC/watchdog.c b/src/libPIC/watchdog.c new file mode 100644 index 0000000..959e672 --- /dev/null +++ b/src/libPIC/watchdog.c @@ -0,0 +1,61 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Watchdog Initialization + *---------------------------------------------------------------------------- + * Details +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "system.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void WatchdogInit( void ) +{ + // watchdog rate programming? +#ifdef _PIC18 + SWDTEN = 1; // unless already programmed in config +#else + OPTION |= 0b00000100; +#endif +} diff --git a/src/libasn1/CMakeLists.txt b/src/libasn1/CMakeLists.txt new file mode 100644 index 0000000..835f04f --- /dev/null +++ b/src/libasn1/CMakeLists.txt @@ -0,0 +1,65 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME asn1) +set(TARGET lib${NAME}) +project(Cnomicon-${TARGET}) +set(CMAKE_INSTALL_PREFIX ..) +set(LIBRARY ${TARGET}) + +# list of header files +set(LIBH + asn1common.h + asn1oer.h + asn1uper.h + ) + +# list of source files +set(LIBSRC + asn1_debug.c + oer_stream.c oer_decode.c oer_encode.c + oer_get_bits.c oer_put_bits.c + oer_get_ext.c oer_put_ext.c + oer_get_octet.c oer_put_octet.c + uper_stream.c uper_decode.c uper_encode.c + uper_get_bits.c uper_put_bits.c + uper_get_ext.c uper_put_ext.c + uper_get_octet.c uper_put_octet.c + ) + +# includes +include_directories( + ../include + ) +link_directories(../lib) + +link_libraries( + json-c.a + pcap.a + m + ) + +# executables +#add_executable(test_${NAME}_uper test_${NAME}_uper.c) + +# includes +include_directories(../include) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) + +# this is the "object library" target: compiles the sources only once +add_library(${LIBRARY} OBJECT ${LIBSRC}) + +# shared libraries need PIC +set_property(TARGET ${LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE 1) + +# shared and static libraries built from the same object files +add_library(${LIBRARY}-shared SHARED $) +add_library(${LIBRARY}-static STATIC $) + +# output file names +set_target_properties(${LIBRARY}-shared PROPERTIES OUTPUT_NAME ${NAME}) +set_target_properties(${LIBRARY}-static PROPERTIES OUTPUT_NAME ${NAME}) + +# installations +install (FILES ${LIBH} DESTINATION include) +#install (FILES lib${NAME}.a lib${NAME}.so DESTINATION lib) diff --git a/src/libasn1/TODO b/src/libasn1/TODO new file mode 100644 index 0000000..7695a95 --- /dev/null +++ b/src/libasn1/TODO @@ -0,0 +1,18 @@ + + ASN.1 ToDo + +Implementations added as needed + +BER/DER + As needed + +OER + Enumerated + Real types + +UPER + Enumerated + Real types + +JSON/XER + dunno diff --git a/src/libasn1/asn1_debug.c b/src/libasn1/asn1_debug.c new file mode 100644 index 0000000..3b88371 --- /dev/null +++ b/src/libasn1/asn1_debug.c @@ -0,0 +1,56 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1uper.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +uint8_t _asn1_debug_on_ = 0; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void asn1_set_debug(uint8_t flag) +{ + _asn1_debug_on_ = flag; +} diff --git a/src/libasn1/asn1common.h b/src/libasn1/asn1common.h new file mode 100644 index 0000000..ac72d0d --- /dev/null +++ b/src/libasn1/asn1common.h @@ -0,0 +1,77 @@ +#ifndef __ASN1COMMON_INCLUDE__ +#define __ASN1COMMON_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include +#include + +#include "embtypes.h" + +/****************************************************************************** + * defines + *****************************************************************************/ + +#define ASN1_UPER_ALIGNED 0 +#define ASN1_APER_ALIGNED 1 +#define ASN1_OER_ALIGNED 2 + +#define asn1_get_error(S) ((S)->error) + +#define asn1_get_bits_consumed(O) ((O)->consumed) +#define asn1_get_bytes_consumed(O) ((O)->consumed?(((O)->consumed-1)/8+1):0) + +#define asn1_init_extension(E) memset((E),0,sizeof(ASN1_Extension)) +#define asn1_init_bitstream(E) memset((E),0,sizeof(ASN1_BitStream)) + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +typedef struct _asn1_stream { + uint8_t *buf; // pointer to first byte + uint8_t *ptr; // pointer to current byte + uint8_t alloc; // set if alloc'd + uint8_t align; // alignment + uint8_t error; // set if error + uint16_t bit; // current bit in byte + uint16_t max; // maximum bits + uint16_t consumed;// bits consumed +} ASN1_Stream; + +typedef struct _asn1_bitstream { + uint64_t value; // value + uint16_t max; // maximum bits +} ASN1_BitStream; + +typedef struct _asn1_extension { + uint64_t value; // extension+option bits + uint8_t ellipses; // 0 or 1 + uint8_t options; // # options + uint16_t length; // length of extension +} ASN1_Extension; + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void asn1_set_debug(uint8_t flag); +extern uint8_t _asn1_debug_on_; + + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/src/libasn1/asn1oer.h b/src/libasn1/asn1oer.h new file mode 100644 index 0000000..78eddc6 --- /dev/null +++ b/src/libasn1/asn1oer.h @@ -0,0 +1,111 @@ +#ifndef __ASN1OER_INCLUDE__ +#define __ASN1OER_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include +#include + +#include "embtypes.h" +#include "asn1common.h" + +/****************************************************************************** + * defines + *****************************************************************************/ + +#define oer_get_error(O) ((O)->error) +#define oer_get_bytes_consumed(O) asn1_get_bytes_consumed(O) + +#define oer_init_extension(E) asn1_init_extension(E) +#define oer_init_bitstream(E) asn1_init_bitstream(E) + +#define oer_get_signed_value(U,B,O) (((int64_t)uper_get_bits_stream(U,B))-O) +#define oer_get_unsigned_value(U,B) uper_get_bits_stream(U,B) + +#define oer_get_char_value(O) ((int8_t)(oer_get_value(O,1))) +#define oer_get_int8_value(O) ((int8_t)(oer_get_value(O,1))) +#define oer_get_byte_value(O) ((uint8_t)(oer_get_value(O,1))) +#define oer_get_uint8_value(O) ((uint8_t)(oer_get_value(O,1))) + +#define oer_get_short_value(O) ((int16_t)(oer_get_value(O,2))) +#define oer_get_int16_value(O) ((int16_t)(oer_get_value(O,2))) +#define oer_get_word_value(O) ((uint16_t)(oer_get_value(O,2))) +#define oer_get_uint16_value(O) ((uint16_t)(oer_get_value(O,2))) + +#define oer_get_long_value(O) ((int32_t)(oer_get_value(O,4))) +#define oer_get_int32_value(O) ((int32_t)(oer_get_value(O,4))) +#define oer_get_dword_value(O) ((uint32_t)(oer_get_value(O,4))) +#define oer_get_uint32_value(O) ((uint32_t)(oer_get_value(O,4))) + +#define oer_get_llong_value(O) ((int64_t)oer_get_value(O,8)) +#define oer_get_int64_value(O) ((int64_t)oer_get_value(O,8)) +#define oer_get_qword_value(O) ((uint64_t)oer_get_value(O,8)) +#define oer_get_uint64_value(O) ((uint64_t)oer_get_value(O,8)) + +#define oer_get_string(O,B,N,X) oer_get_octet_stream(O,B,N,X) +#define oer_put_string(O,B,L,N,X) oer_put_octet_stream(O,B,L,N,X) + +#define OER_Stream ASN1_Stream +#define OER_Extension ASN1_Extension +#define OER_BitStream ASN1_BitStream + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void oer_init_stream(OER_Stream *strm, uint8_t *ptr, uint max); +OER_Stream *uper_alloc_stream(uint8_t *ptr, uint max); +void oer_free_stream(OER_Stream *oer); + +// DECODE +uint oer_get_length(OER_Stream *oer, uint *value); +uint64_t oer_get_value(OER_Stream *oer, uint size); +uint oer_get_data(OER_Stream *oer, uint8_t *data, uint max); + +// ENCODE +uint oer_put_length(OER_Stream *oer, uint value); +void oer_put_value(OER_Stream *oer, uint64_t value, uint size); +void oer_put_data(OER_Stream *oer, uint8_t *data, uint length); + +// EXTENSIONS +uint oer_get_extension(OER_Stream *uper, OER_Extension *ext, uint nbits, uint ellipses); +uint oer_get_ext_ellipses(OER_Extension *ext); +uint oer_get_ext_optional(OER_Extension *ext, uint bit); +uint oer_get_ext_length(OER_Stream *uper, OER_Extension *ext); +uint oer_get_ext_skip(OER_Stream *uper, OER_Extension *ext); +void oer_put_extension(OER_Stream *uper, OER_Extension *ext); +void oer_set_ext_ellipses(OER_Extension *ext); +void oer_set_ext_length(OER_Extension *ext, uint len); +void oer_set_ext_optional(OER_Extension *ext, uint option, uint val, uint nbits); + +// OCTET +uint oer_get_octet_stream(OER_Stream *ptr, uint8_t *buf, uint min, uint max); +void oer_put_octet_stream(OER_Stream *ptr, uint8_t *buf, uint len, uint min, uint max); + +// BIT STREAM +uint64_t oer_get_bitstream(OER_Stream *ptr, OER_BitStream *bs, uint max); +uint64_t oer_get_bit_bitstream(OER_BitStream *bs, uint bit); +void oer_put_bitstream(OER_Stream *ptr, OER_BitStream *bs); +void oer_set_bit_bitstream(OER_BitStream *bs, uint bit, uint max); +void oer_set_bits_bitstream(OER_BitStream *bs, uint64_t value, uint max); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/src/libasn1/asn1uper.h b/src/libasn1/asn1uper.h new file mode 100644 index 0000000..e94f152 --- /dev/null +++ b/src/libasn1/asn1uper.h @@ -0,0 +1,118 @@ +#ifndef __ASN1UPER_INCLUDE__ +#define __ASN1UPER_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include +#include + +#include "embtypes.h" +#include "asn1common.h" + +/****************************************************************************** + * defines + *****************************************************************************/ + +#define uper_get_error(S) ((S)->error) +#define uper_get_bits_consumed(U) asn1_get_bits_consumed(U) +#define uper_get_bytes_consumed(U) asn1_get_bytes_consumed(U) + +#define uper_get_bits_length(U,S) (uper_get_bits_stream(U,S)+1) +#define uper_put_bits_length(U,L,S) uper_put_bits_stream(U,(L)-1,S) + +#define uper_init_extension(E) asn1_init_extension(E) +#define uper_init_bitstream(E) asn1_init_bitstream(E) + +#define uper_get_signed_value(U,B,O) (((int64_t)uper_get_bits_stream(U,B))-O) +#define uper_get_unsigned_value(U,B) uper_get_bits_stream(U,B) + +#define uper_get_char_value(O) ((int8_t)(uper_get_value(O,1))) +#define uper_get_int8_value(O) ((int8_t)(uper_get_value(O,1))) +#define uper_get_byte_value(O) ((uint8_t)(uper_get_value(O,1))) +#define uper_get_uint8_value(O) ((uint8_t)(uper_get_value(O,1))) + +#define uper_get_short_value(O) ((int16_t)(uper_get_value(O,2))) +#define uper_get_int16_value(O) ((int16_t)(uper_get_value(O,2))) +#define uper_get_word_value(O) ((uint16_t)(uper_get_value(O,2))) +#define uper_get_uint16_value(O) ((uint16_t)(uper_get_value(O,2))) + +#define uper_get_long_value(O) ((int32_t)(uper_get_value(O,4))) +#define uper_get_int32_value(O) ((int32_t)(uper_get_value(O,4))) +#define uper_get_dword_value(O) ((uint32_t)(uper_get_value(O,4))) +#define uper_get_uint32_value(O) ((uint32_t)(uper_get_value(O,4))) + +#define uper_get_llong_value(O) ((int64_t)uper_get_value(O,8)) +#define uper_get_int64_value(O) ((int64_t)uper_get_value(O,8)) +#define uper_get_qword_value(O) ((uint64_t)uper_get_value(O,8)) +#define uper_get_uint64_value(O) ((uint64_t)uper_get_value(O,8)) + +#define uper_get_string(O,B,N,X) uper_get_octet_stream(O,B,N,X) +#define uper_put_string(O,B,L,N,X) uper_put_octet_stream(O,B,L,N,X) + +#define UPER_Stream ASN1_Stream +#define UPER_Extension ASN1_Extension +#define UPER_BitStream ASN1_BitStream + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void uper_init_stream(UPER_Stream *strm, uint8_t *ptr, uint max); +UPER_Stream *uper_alloc_stream(uint8_t *ptr, uint max); +void uper_free_stream(UPER_Stream *oer); + +// DECODE +uint uper_get_bit_direct(const uint8_t *pkt, uint bit); +uint64_t uper_get_bits_direct(const uint8_t *pkt, uint bit, uint bits); +uint64_t uper_get_bits_stream(UPER_Stream *ptr, uint bits); +uint64_t uper_get_bits_stream_reverse(UPER_Stream *ptr, uint nbits); +uint uper_get_bytes_stream(UPER_Stream *uper, uint8_t *buf, uint nbytes); + +// ENCODE +void uper_put_bit_direct(uint8_t *pkt, uint val, uint bit); +void uper_put_bits_direct(uint8_t *pkt, uint64_t value, uint bit, uint bits); +void uper_put_bits_stream(UPER_Stream *uper, uint64_t value, uint bits); +void uper_put_bytes_stream(UPER_Stream *uper, uint8_t *buf, uint nbytes); + +// EXTENSIONS +uint uper_get_extension(UPER_Stream *uper, UPER_Extension *ext, uint nbits, uint ellipses); +uint uper_get_ext_ellipses(UPER_Extension *ext); +uint uper_get_ext_optional(UPER_Extension *ext, uint bit); +uint uper_get_ext_length(UPER_Stream *uper, UPER_Extension *ext); +uint uper_get_ext_skip(UPER_Stream *uper, UPER_Extension *ext); +void uper_put_extension(UPER_Stream *uper, UPER_Extension *ext); +void uper_set_ext_ellipses(UPER_Extension *ext); +void uper_set_ext_length(UPER_Extension *ext, uint len); +void uper_set_ext_optional(UPER_Extension *ext, uint option, uint val, uint nbits); + +// OCTET +uint uper_get_octet_stream(UPER_Stream *ptr, uint8_t *buf, uint min, uint max); +void uper_put_octet_stream(UPER_Stream *uper, uint8_t *buf, uint len, uint min, uint max); + +// BIT STREAM +uint64_t uper_get_bitstream(UPER_Stream *uper, UPER_BitStream *bs, uint max); +uint64_t uper_get_bit_bitstream(UPER_BitStream *bs, uint bit); +void uper_put_bitstream(UPER_Stream *uper, UPER_BitStream *bs); +void uper_set_bit_bitstream(UPER_BitStream *bs, uint bit, uint max); +void uper_set_bits_bitstream(UPER_BitStream *bs, uint64_t value, uint max); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/src/libasn1/makefile b/src/libasn1/makefile new file mode 100644 index 0000000..a5c9dd9 --- /dev/null +++ b/src/libasn1/makefile @@ -0,0 +1,25 @@ + +ASN=asn1_debug.c +OERS=oer_stream.c oer_decode.c oer_encode.c +OERE=oer_put_ext.c oer_put_octet.c oer_put_bits.c +OERD=oer_get_ext.c oer_get_octet.c oer_get_bits.c +OER=$(ASN) $(OERS) $(OERE) $(OERD) +UPERS=uper_stream.c uper_encode.c uper_decode.c +UPERE=uper_put_ext.c uper_put_octet.c uper_put_bits.c +UPERD=uper_get_ext.c uper_get_octet.c uper_get_bits.c +UPER=$(ASN) $(UPERS) $(UPERE) $(UPERD) + +OPTS=-g -Wall -I../include + +TESTS=test_asn1_uper test_asn1_oer + +all : $(TESTS) + +test_asn1_uper : test_asn1_uper.c $(ASN) $(UPER) asn1common.h asn1uper.h + $(CC) -o $@ $(OPTS) test_asn1_uper.c $(UPER) + +test_asn1_oer : test_asn1_oer.c $(ASN) $(OER) asn1common.h asn1oer.h + $(CC) -o $@ $(OPTS) test_asn1_oer.c $(OER) + +clean : $(TESTS) + -rm -f $(TESTS) diff --git a/src/libasn1/oer_decode.c b/src/libasn1/oer_decode.c new file mode 100644 index 0000000..af0da2d --- /dev/null +++ b/src/libasn1/oer_decode.c @@ -0,0 +1,116 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1oer.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// OER length +uint oer_get_length(OER_Stream *oer, uint *value) { + if (!oer) + return 0; + + int len = *oer->ptr++; + int val = len & 0x7f; + int size = 1; + + // if length > 127 + if (len & 0x80) { + // slurp + val <<= 8; + val |= *oer->ptr++; + size = 2; + } + + if (value) + *value = val; + size *= 8; + oer->consumed += size; + return val; +} + +uint64_t oer_get_value(OER_Stream *oer, uint size) +{ + if (!oer || !size) + return 0; + + if (oer->consumed + size >= oer->max) { + oer->error = 1; + return 0; + } + + // fix size to byte sized + uint n = ((size-1)/8)+1; + + uint64_t value = 0; + + while (n--) { + value <<= 8; + value |= *oer->ptr++; + } + + // bit size + oer->consumed += size; + + return value; +} + +uint oer_get_data(OER_Stream *oer, uint8_t *data, uint length) +{ + if (!oer || !oer->ptr || !data || !length) + return 0; + + oer->consumed += (length*8); + uint len = length; + while (len--) { + *data++ = *oer->ptr++; + } + + return length; +} diff --git a/src/libasn1/oer_encode.c b/src/libasn1/oer_encode.c new file mode 100644 index 0000000..af65b45 --- /dev/null +++ b/src/libasn1/oer_encode.c @@ -0,0 +1,102 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1oer.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// OER length +uint oer_put_length(OER_Stream *oer, uint value) +{ + if (!oer || !oer->ptr) + return 0; + + int size = 8; + if (value > 0x7f) { + *oer->ptr++ = (value >> 8) | 0x80; + size = 16; + } + *oer->ptr++ = value & 0xff; + + oer->consumed += size; + return size; +} + +void oer_put_value(OER_Stream *oer, uint64_t value, uint size) +{ + if (!oer || !oer->ptr || !size) + return; + + if (oer->consumed + size >= oer->max) { + oer->error = 1; + return; + } + + uint n = ((size-1)/8)+1; + uint shift = (n-1) * 8; + + while (n--) { + *oer->ptr++ = (uint8_t)(value >> shift); + shift -= 8; + } + + // bit size + oer->consumed += size; +} + +void oer_put_data(OER_Stream *oer, uint8_t *data, uint length) +{ + if (!oer || !oer->ptr || !data || !length) + return; + + oer->consumed += (length*8); + while (length--) { + *oer->ptr++ = *data++; + } +} diff --git a/src/libasn1/oer_get_bits.c b/src/libasn1/oer_get_bits.c new file mode 100644 index 0000000..26c3a62 --- /dev/null +++ b/src/libasn1/oer_get_bits.c @@ -0,0 +1,71 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1oer.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +uint64_t oer_get_bitstream(OER_Stream *oer, OER_BitStream *bs, uint max) +{ + if (!oer || !bs || !max) + return 0; + + bs->value = oer_get_value(oer, max); + bs->max = max; + return max; +} + +// from the front (high->low bits) +uint64_t oer_get_bit_bstream(OER_BitStream *bs, uint bit) +{ + if (!bs || (bit>=bs->max)) + return 0; + + return (bs->value & 1<<(bs->max-bit-1)); +} diff --git a/src/libasn1/oer_get_ext.c b/src/libasn1/oer_get_ext.c new file mode 100644 index 0000000..019737b --- /dev/null +++ b/src/libasn1/oer_get_ext.c @@ -0,0 +1,143 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1oer.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// grab extension bits, check for extension defined by ellipses +uint oer_get_extension(OER_Stream *oer, OER_Extension *ext, uint noptions, uint ellipses) +{ + if (!oer || !ext) + return 0; + + ellipses &= 1; + if ((noptions+ellipses)==0) { + oer->error = 1; + return 0; + } + + uint64_t value = oer_get_value(oer, ellipses+noptions); + + uint nbits = ellipses + noptions; + uint shift = (64 - nbits) % 8; + if (_asn1_debug_on_ == 2) + printf("\tEXT_VALUE = %lx (%ld) >> %d\n", value, value, shift); + value >>= shift; + + // mask + uint64_t mask = (0xffffffffffffffffULL >> (64 - nbits)); + ext->value = value & mask; + + if (ellipses) { + ext->ellipses = (ext->value >> noptions) & 1; + + ext->length = oer_get_length(oer, NULL); + + if (_asn1_debug_on_) + printf("\tEXT_LEN = %d\n", ext->length); + // otherwise no ... + } + else { + ext->length = 0; + } + + if (noptions) { + ext->options = noptions; + } + + return ellipses + noptions; +} + +uint oer_get_ext_length(OER_Stream *oer, OER_Extension *ext) +{ + if (!ext->ellipses) + return 0; + + uint len; + ext->length = oer_get_length(oer, &len); + + return ext->length; +} + +// if ellipses extension available +uint oer_get_ext_ellipses(OER_Extension *ext) +{ + if (ext) + return ext->ellipses; + return 0; +} + +// from the front (high->low bits) +uint oer_get_ext_optional(OER_Extension *ext, uint bit) +{ + if (!ext || (bit>=ext->options)) + return 0; + + return (ext->value & 1<<(ext->options-bit)); +} + +uint oer_get_ext_skip(OER_Stream *oer, OER_Extension *ext) +{ + if (!oer && !ext && !ext->length) + return 0; + + int bits = ext->length; + + // copy in + int sbit = oer->bit; // bit order in stream (not byte) + int ebit = (sbit+bits) % 8; // after last bit + + // copy out + oer->ptr += (sbit + bits) / 8; + oer->bit = ebit; + oer->consumed += bits; + + return bits; +} diff --git a/src/libasn1/oer_get_octet.c b/src/libasn1/oer_get_octet.c new file mode 100644 index 0000000..a04c5b7 --- /dev/null +++ b/src/libasn1/oer_get_octet.c @@ -0,0 +1,79 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1oer.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +uint oer_get_octet_stream(OER_Stream *oer, uint8_t *buf, uint min, uint max) +{ + if (!oer || !buf || !max) + return 0; + + // # bits + uint num = 0; + uint m = max; + while (m) { + m >>= 1; + num++; + } + + uint len = max; + + // # bytes + if (min < max) { + oer_get_length(oer, &len); + } + + if (_asn1_debug_on_) + printf("\tGET_OCTET = bits=%d, len/max=%d/%d\n", num, len, max); + + // slurp bytes + return oer_get_data(oer, buf, len); +} diff --git a/src/libasn1/oer_put_bits.c b/src/libasn1/oer_put_bits.c new file mode 100644 index 0000000..ec1b175 --- /dev/null +++ b/src/libasn1/oer_put_bits.c @@ -0,0 +1,80 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1oer.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void oer_put_bitstream(OER_Stream *oer, OER_BitStream *bs) +{ + if (!oer || !bs) + return; + + // limit 64 bits + oer_put_value(oer, bs->value, bs->max); +} + +// from the front (high->low bits) +void oer_set_bit_bitstream(OER_BitStream *bs, uint bit, uint max) +{ + if (!bs || !max) + return; + bs->max = max; + + if (bit) + bs->value |= 1<<(bs->max-bit-1); + else + bs->value &= ~(1<<(bs->max-bit-1)); +} + +void oer_set_bits_bitstream(OER_BitStream *bs, uint64_t value, uint max) +{ + if (!bs) + return; + + bs->value = value; + bs->max = max; +} diff --git a/src/libasn1/oer_put_ext.c b/src/libasn1/oer_put_ext.c new file mode 100644 index 0000000..e7b9204 --- /dev/null +++ b/src/libasn1/oer_put_ext.c @@ -0,0 +1,118 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1oer.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// grab extension bits, check for extension defined by ellipses +void oer_put_extension(OER_Stream *oer, OER_Extension *ext) +{ + if (!oer || !ext) + return; + + if (ext->ellipses) { + ext->value |= 1 << ext->options; + } + else { + ext->length = 0; + } + + uint64_t value = ext->value; + uint nbits = ext->ellipses + ext->options; + uint shift = (64 - nbits) % 8; + if (_asn1_debug_on_ == 2) + printf("\tEXT_VALUE = %lx (%ld) << %d\n", value, value, shift); + value <<= shift; + + oer_put_value(oer, value, nbits); + + if (ext->length) { + uint len = ext->length & 0x7fff; + if (_asn1_debug_on_) + printf("\tEXT_LEN = %d\n", ext->length); + oer_put_length(oer, len); + } +} + +void oer_set_ext_length(OER_Extension *ext, uint len) +{ + if (ext && len && len < 32768) { + ext->ellipses = 1; + ext->length = len & 0x7fff; + } +} + +// if ellipses extension available +void oer_set_ext_ellipses(OER_Extension *ext) +{ + if (ext) { + ext->ellipses = 1; + ext->length = 0; + } +} + +// from the front (high->low bits) +void oer_set_ext_optional(OER_Extension *ext, uint option, uint val, uint nbits) +{ + if (!ext) + return; + + if (!ext->options) + ext->options = nbits; + + // check + if (option >= ext->options) + return; + + if (val) + ext->value |= 1<<(ext->options-option-1); + else + ext->value &= ~(1<<(ext->options-option-1)); +} diff --git a/src/libasn1/oer_put_octet.c b/src/libasn1/oer_put_octet.c new file mode 100644 index 0000000..ed30e74 --- /dev/null +++ b/src/libasn1/oer_put_octet.c @@ -0,0 +1,77 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1oer.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void oer_put_octet_stream(OER_Stream *oer, uint8_t *buf, uint len, uint min, uint max) +{ + if (!oer || !buf || !max) + return; + + // # bits + uint num = 0; + uint m = max; + while (m) { + m >>= 1; + num++; + } + + if (_asn1_debug_on_) + printf("\tGET_OCTET = bits=%d, len/max=%d/%d\n", num, len, max); + + // # bytes + if (min < max) { + oer_put_length(oer, len); + } + + // slurp bytes + oer_put_data(oer, buf, len); +} diff --git a/src/libasn1/oer_stream.c b/src/libasn1/oer_stream.c new file mode 100644 index 0000000..2cd4a24 --- /dev/null +++ b/src/libasn1/oer_stream.c @@ -0,0 +1,88 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include + +#include "embtypes.h" +#include "asn1oer.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void oer_init_stream(OER_Stream *strm, uint8_t *ptr, uint max) +{ + if (strm && ptr && max) { + strm->buf = ptr; + strm->ptr = ptr; + strm->align = ASN1_OER_ALIGNED; + strm->bit = 0; + strm->max = max; + strm->consumed = 0; + strm->error = 0; + } +} + +OER_Stream *oer_alloc_stream(uint8_t *ptr, uint max) +{ + OER_Stream *oer = (OER_Stream*)calloc(1, sizeof(OER_Stream)); + + if (oer) { + if (!ptr && max) { + ptr = (uint8_t*)calloc(max/8+1,1); + oer->alloc = 1; + } + oer_init_stream(oer, ptr, max); + } + + return oer; +} + +void oer_free_stream(OER_Stream *oer) +{ + if (oer) { + if (oer->buf && oer->alloc) + free(oer->buf); + free(oer); + } +} diff --git a/src/libasn1/test_asn1_oer b/src/libasn1/test_asn1_oer new file mode 100755 index 0000000..db631fa Binary files /dev/null and b/src/libasn1/test_asn1_oer differ diff --git a/src/libasn1/test_asn1_oer.c b/src/libasn1/test_asn1_oer.c new file mode 100644 index 0000000..103b549 --- /dev/null +++ b/src/libasn1/test_asn1_oer.c @@ -0,0 +1,233 @@ + +#include "asn1oer.h" + + +static uint8_t buffer[1500]; + +#define NUM_OPTIONS 5 + +void buffer_print(OER_Stream *strm, uint8_t *buf) +{ + int n = ((strm->consumed-1) / 8) +1; + printf("\tBUFFER[%d] = (", n); + for (int i=0; ibit, strm->consumed, strm->max); +} + +void opt_ext_print(OER_Extension *ext) +{ + printf("Extension status: value=%lu (%ld) (0x%lx), options=%u, %s\n", ext->value, ext->value, ext->value, ext->options, ext->ellipses?"...":""); +} + +void opt_test(void) +{ + memset(buffer, 0, sizeof(buffer)); + + OER_Stream strm_enc, strm_dec; + oer_init_stream(&strm_enc, buffer, sizeof(buffer)); + oer_init_stream(&strm_dec, buffer, sizeof(buffer)); + + OER_Extension ext_enc, ext_dec; + oer_init_extension(&ext_enc); + oer_init_extension(&ext_dec); + + printf("Options test:\n"); + + // encode + oer_set_ext_optional(&ext_enc, 2, 1, 5); + oer_put_extension(&strm_enc, &ext_enc); + + printf("\tENCODED "); + opt_ext_print(&ext_enc); + printf("\tENCODED "); + stream_print(&strm_enc); + printf("\tENCODED"); + buffer_print(&strm_enc, buffer); + + // decode + oer_get_extension(&strm_dec, &ext_dec, NUM_OPTIONS, 0); + + printf("\tDECODED "); + opt_ext_print(&ext_dec); + printf("\tDECODED "); + stream_print(&strm_dec); + + if (ext_enc.options == ext_dec.options && ext_enc.ellipses == ext_dec.ellipses && ext_enc.length == ext_dec.length && ext_enc.value == ext_dec.value) + printf("\tPASSED\n"); + else + printf("\tFAILED\n"); +} + +void ext_test(void) +{ + memset(buffer, 0, sizeof(buffer)); + + OER_Stream strm_enc, strm_dec; + oer_init_stream(&strm_enc, buffer, sizeof(buffer)); + oer_init_stream(&strm_dec, buffer, sizeof(buffer)); + + OER_Extension ext_enc, ext_dec; + oer_init_extension(&ext_enc); + oer_init_extension(&ext_dec); + + printf("Extensions test:\n"); + + // encode + oer_set_ext_ellipses(&ext_enc); + oer_set_ext_length(&ext_enc, 257); + oer_put_extension(&strm_enc, &ext_enc); + + printf("\tENCODED "); + opt_ext_print(&ext_enc); + printf("\tENCODED "); + stream_print(&strm_enc); + printf("\tENCODED"); + buffer_print(&strm_enc, buffer); + + // decode + oer_get_extension(&strm_dec, &ext_dec, 0, 1); + + printf("\tDECODED "); + opt_ext_print(&ext_dec); + printf("\tDECODED "); + stream_print(&strm_dec); + + if (ext_enc.options == ext_dec.options && ext_enc.ellipses == ext_dec.ellipses && ext_enc.length == ext_dec.length && ext_enc.value == ext_dec.value) + printf("\tPASSED\n"); + else + printf("\tFAILED\n"); +} + +void opt_ext_test(void) +{ + memset(buffer, 0, sizeof(buffer)); + + OER_Stream strm_enc, strm_dec; + oer_init_stream(&strm_enc, buffer, sizeof(buffer)); + oer_init_stream(&strm_dec, buffer, sizeof(buffer)); + + OER_Extension ext_enc, ext_dec; + oer_init_extension(&ext_enc); + oer_init_extension(&ext_dec); + + printf("Extensions and Options test:\n"); + + // encode + oer_set_ext_ellipses(&ext_enc); + oer_set_ext_length(&ext_enc, 257); + oer_set_ext_optional(&ext_enc, 2, 1, 5); + oer_put_extension(&strm_enc, &ext_enc); + + printf("\tENCODED "); + opt_ext_print(&ext_enc); + printf("\tENCODED "); + stream_print(&strm_enc); + printf("\tENCODED"); + buffer_print(&strm_enc, buffer); + + // decode + oer_get_extension(&strm_dec, &ext_dec, NUM_OPTIONS, 1); + + printf("\tDECODED "); + opt_ext_print(&ext_dec); + printf("\tDECODED "); + stream_print(&strm_dec); + + if (ext_enc.options == ext_dec.options && ext_enc.ellipses == ext_dec.ellipses && ext_enc.length == ext_dec.length && ext_enc.value == ext_dec.value) + printf("\tPASSED\n"); + else + printf("\tFAILED\n"); +} + +void octet_test(void) +{ + memset(buffer, 0, sizeof(buffer)); + + OER_Stream strm_enc, strm_dec; + oer_init_stream(&strm_enc, buffer, sizeof(buffer)); + oer_init_stream(&strm_dec, buffer, sizeof(buffer)); + + printf("Octet String test:\n"); + + uint8_t din[32]; + uint8_t dout[32]; + strcpy((char *)din, "0123456789ABCDEF"); + oer_put_octet_stream(&strm_enc, din, 16, 16, 32); + + printf("\tENCODED"); + buffer_print(&strm_enc, buffer); + + int n = oer_get_octet_stream(&strm_dec, dout, 16, 32); + + printf("\tDATA[%d] = (", n); + for (int i=0; iconsumed-1) / 8) + 1; + printf("\tBUFFER[%d] = (", n); + for (int i=0; ibit, strm->consumed, strm->max); +} + +void opt_ext_print(UPER_Extension *ext) +{ + printf("Extension status: value=%lu (%ld) (0x%lx), options=%u, %s\n", ext->value, ext->value, ext->value, ext->options, ext->ellipses?"...":""); +} + +void opt_test(void) +{ + memset(buffer, 0, sizeof(buffer)); + + UPER_Stream strm_enc, strm_dec; + uper_init_stream(&strm_enc, buffer, sizeof(buffer)); + uper_init_stream(&strm_dec, buffer, sizeof(buffer)); + + UPER_Extension ext_enc, ext_dec; + uper_init_extension(&ext_enc); + uper_init_extension(&ext_dec); + + printf("Options test:\n"); + + // encode + uper_set_ext_optional(&ext_enc, 2, 1, 5); + uper_put_extension(&strm_enc, &ext_enc); + + printf("\tENCODED "); + opt_ext_print(&ext_enc); + printf("\tENCODED "); + stream_print(&strm_enc); + printf("\tENCODED"); + buffer_print(&strm_enc, buffer); + + // decode + uper_get_extension(&strm_dec, &ext_dec, NUM_OPTIONS, 0); + + printf("\tDECODED "); + opt_ext_print(&ext_dec); + printf("\tDECODED "); + stream_print(&strm_dec); + + if (ext_enc.options == ext_dec.options && ext_enc.ellipses == ext_dec.ellipses && ext_enc.length == ext_dec.length && ext_enc.value == ext_dec.value) + printf("\tPASSED\n"); + else + printf("\tFAILED\n"); +} + +void ext_test(void) +{ + memset(buffer, 0, sizeof(buffer)); + + UPER_Stream strm_enc, strm_dec; + uper_init_stream(&strm_enc, buffer, sizeof(buffer)); + uper_init_stream(&strm_dec, buffer, sizeof(buffer)); + + UPER_Extension ext_enc, ext_dec; + uper_init_extension(&ext_enc); + uper_init_extension(&ext_dec); + + printf("Extensions test:\n"); + + // encode + uper_set_ext_ellipses(&ext_enc); + uper_set_ext_length(&ext_enc, 257); + uper_put_extension(&strm_enc, &ext_enc); + + printf("\tENCODED "); + opt_ext_print(&ext_enc); + printf("\tENCODED "); + stream_print(&strm_enc); + printf("\tENCODED"); + buffer_print(&strm_enc, buffer); + + // decode + uper_get_extension(&strm_dec, &ext_dec, 0, 1); + + printf("\tDECODED "); + opt_ext_print(&ext_dec); + printf("\tDECODED "); + stream_print(&strm_dec); + + if (ext_enc.options == ext_dec.options && ext_enc.ellipses == ext_dec.ellipses && ext_enc.length == ext_dec.length && ext_enc.value == ext_dec.value) + printf("\tPASSED\n"); + else + printf("\tFAILED\n"); +} + +void opt_ext_test(void) +{ + memset(buffer, 0, sizeof(buffer)); + + UPER_Stream strm_enc, strm_dec; + uper_init_stream(&strm_enc, buffer, sizeof(buffer)); + uper_init_stream(&strm_dec, buffer, sizeof(buffer)); + + UPER_Extension ext_enc, ext_dec; + uper_init_extension(&ext_enc); + uper_init_extension(&ext_dec); + + printf("Extensions and Options test:\n"); + + // encode + uper_set_ext_ellipses(&ext_enc); + uper_set_ext_length(&ext_enc, 257); + uper_set_ext_optional(&ext_enc, 2, 1, 5); + uper_put_extension(&strm_enc, &ext_enc); + + printf("\tENCODED "); + opt_ext_print(&ext_enc); + printf("\tENCODED "); + stream_print(&strm_enc); + printf("\tENCODED"); + buffer_print(&strm_enc, buffer); + + // decode + uper_get_extension(&strm_dec, &ext_dec, NUM_OPTIONS, 1); + + printf("\tDECODED "); + opt_ext_print(&ext_dec); + printf("\tDECODED "); + stream_print(&strm_dec); + + if (ext_enc.options == ext_dec.options && ext_enc.ellipses == ext_dec.ellipses && ext_enc.length == ext_dec.length && ext_enc.value == ext_dec.value) + printf("\tPASSED\n"); + else + printf("\tFAILED\n"); +} + +void octet_test(void) +{ + memset(buffer, 0, sizeof(buffer)); + + UPER_Stream strm_enc, strm_dec; + uper_init_stream(&strm_enc, buffer, sizeof(buffer)); + uper_init_stream(&strm_dec, buffer, sizeof(buffer)); + + printf("Octet String test:\n"); + + uint8_t din[32]; + uint8_t dout[32]; + for (int i=0; i<16; i++) + din[i] = 0x5a; +// strcpy((char *)din, "0123456789ABCDEF"); + uper_put_octet_stream(&strm_enc, din, 16, 16, 32); + + printf("\tENCODED"); + buffer_print(&strm_enc, buffer); + + uint n = uper_get_octet_stream(&strm_dec, dout, 16, 32); + + printf("\tDATA[%d] = (", n); + for (int i=0; i(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +static const uint8_t masks[9] = { + 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff +}; + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +uint uper_get_bit_direct(const uint8_t *pkt, uint bit) +{ + if (!pkt) + return 0; + + pkt += (bit/8); + return *pkt & (1 << (7-(bit%8))); +} + +// works well if arbitrarily peeking into the bit stream +uint64_t uper_get_bits_direct(const uint8_t *pkt, uint bit, uint bits) +{ + uint64_t value = 0; + uint8_t val; + int off; + + if (!pkt || !bits) + return 0; + + // start byte from bit + pkt += (bit/8); + off = bit % 8; // bit offset + if (_asn1_debug_on_ == 2) + printf( "BIT_OFFSET = %d, %d:\n", bit, bits); + + // grab the bits from byte array + while (bits > 0) { + // # bits to fetch + int num = 8 - off; + // # bits to extract + int size = min(num, bits); + + // get whole byte + val = *pkt++; + + // shift desired bits + val >>= (num - size); + + // mask desired bits + val &= (0xff >> (8-size)); + + // update value + value <<= size; // make room for new bits + value |= val; // add them in + if (_asn1_debug_on_) + printf( "\tBIT INPUT = %d, %d, %d/%d, %d(0x%02x), %lu(0x%08x)\n", bit, off, num, bits, val, val, value, (unsigned)value); + + bit += size; + bits -= size; + off = 0; // byte boundary from now on. + } + + return value; +} + +uint64_t uper_get_bits_stream(UPER_Stream *uper, uint nbits) +{ + if (!uper || nbits > 64) + return 0; + + // check + if (uper->consumed + nbits >= uper->max) { + uper->error = 1; + return 0; + } + + // copy in + const uint8_t *raw = uper->ptr; + uint sbit = uper->bit; // bit order in stream (not byte) + uint ebit = (sbit+nbits) % 8; // after last bit + uint64_t value = 0; + + // # bytes to read + uint n = 1 + ((sbit + nbits)/8); + + if (_asn1_debug_on_ == 2) + printf("\tGET_BITS_DETAIL = sbit=%d, ebit=%d, nbits=%d (%d) ", sbit, ebit, nbits, n); + + if (nbits==1) { + // speed short cut + value = (*raw >> (8 - ebit)) & 1; + } + else { + // read bytes + while (n--) { + value <<= 8; + value |= *raw++; + } + + // shift + uint shift = (8 - ebit); + value >>= shift; + + // mask + uint64_t mask = (0xffffffffffffffffULL >> (64 - nbits)); + value &= mask; + } + + // copy out + uper->ptr += (sbit + nbits)/8; + uper->bit = ebit; + uper->consumed += nbits; + + if (_asn1_debug_on_) + printf("\tGET_BITS = %08lx (%ld)\n", value, value); + + return value; +} + +uint64_t uper_get_bits_stream_reverse(UPER_Stream *ptr, uint nbits) +{ + uint64_t in = uper_get_bits_stream(ptr, nbits); + uint64_t out = 0; + uint64_t mask = 1; + uint64_t set = 1 << (nbits-1); + + while(nbits--) { + if (in & mask) + out |= set; + mask <<= 1; + set >>= 1; + } + + return out; +} + +uint uper_get_bytes_stream(UPER_Stream *uper, uint8_t *buf, uint nbytes) +{ + if (!uper) + return 0; + uint8_t nbits = 8; + + // check + if (uper->consumed + nbits >= uper->max) { + uper->error = 1; + return 0; + } + + // copy in + const uint8_t *raw = uper->ptr; + uint sbit = uper->bit; // bit order in stream (not byte) + uint ebit = (sbit+nbits) % 8; // after last bit + + // # bytes to read + uint n = 1 + ((sbit + nbits)/8); + + if (_asn1_debug_on_ == 2) + printf("\tGET_BYTES_DETAIL = sbit=%d, ebit=%d, nbits=%d (%d)\n", sbit, ebit, nbits, n); + + // read + uint ntotal = nbytes; + while (nbytes--) { + uint8_t value = 0; + + if (n==1) { + *buf++ = *raw++; + } + else { + uint nhi = 8 - ebit; + uint nlo = 8 - nhi; + + value = (*raw++ & masks[nhi]) << (nlo); + value |= (*raw >> (nhi)) & masks[nlo]; + + *buf++ = value; + } + } + + // copy out + uper->ptr += ntotal; + uper->bit = ebit; + uper->consumed += ntotal * nbits; + + return ntotal; +} diff --git a/src/libasn1/uper_encode.c b/src/libasn1/uper_encode.c new file mode 100644 index 0000000..150d510 --- /dev/null +++ b/src/libasn1/uper_encode.c @@ -0,0 +1,206 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1uper.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void uper_put_bit_direct(uint8_t *pkt, uint val, uint bit) +{ + if (!pkt) + return; + + pkt += (bit/8); + + if (val) + *pkt |= (1 << (7-(bit%8))); + else + *pkt &= ~((1 << (7-(bit%8)))); +} + +// works well if arbitrarily poking into the bit stream +void uper_put_bits_direct(uint8_t *pkt, uint64_t value, uint bit, uint bits) +{ + uint8_t val; + int off; + + if (!pkt || !bits) + return; + + // start byte from bit + pkt += (bit/8); + off = bit % 8; // bit offset + if (_asn1_debug_on_ == 2) + printf( "BIT_OFFSET = %d(%d):\n", bit, bits); + + // grab the bits from byte array + while (bits > 0) { + // # bits to fetch + int num = 8 - off; + // # bits to extract + int size = min(num, bits); + + // get whole byte + val = *pkt; + + // shift desired bits + val >>= (num - size); + + // mask desired bits + val &= (0xff >> (8-size)); + + // set the byte + *pkt++ |= val; + + // update value + if (_asn1_debug_on_) + printf( "\tBIT OUTPUT = %d, %d, %d/%d, %d(0x%02x), %lu(0x%08lx)\n", bit, off, num, bits, val, val, value, value); + + bit += size; + bits -= size; + off = 0; // byte boundary from now on. + } +} + +void uper_put_bits_stream(UPER_Stream *uper, uint64_t value, uint nbits) +{ + if (!uper || nbits > 64) + return; + + // check + if (uper->consumed + nbits >= uper->max) { + uper->error = 1; + return; + } + + // copy in + uint8_t *raw = uper->ptr; + uint sbit = uper->bit; // bit order in stream (not byte) + uint ebit = (sbit+nbits) % 8; // after last bit + + // # bytes to write + uint n = 1 + ((sbit + nbits)/8); + + // shift + uint shift = (8 - ebit); + uint64_t ovalue = value; + + if (_asn1_debug_on_ == 2) + printf("\tPUT_BITS_DETAIL = sbit=%d, ebit=%d, nbits=%d (%d) ", sbit, ebit, nbits, n); + if (_asn1_debug_on_) + printf("\tPUT_BITS = %08lx (%ld) = %lx << %d\n", value, value, ovalue, shift); + + // update + if (nbits == 1) { + // speed short cut + *raw |= (value & 1) << (shift); + } + else { + // shift up + value <<= shift; + shift = (n-1)*8; + + for (int i=0 ; i> shift); + shift -= 8; + } + } + + // copy out + uper->ptr += (sbit + nbits)/8; + uper->bit = ebit; + uper->consumed += nbits; +} + +void uper_put_bytes_stream(UPER_Stream *uper, uint8_t *buf, uint nbytes) +{ + if (!uper) + return; + uint8_t nbits = 8; + + // check + if (uper->consumed + nbits >= uper->max) { + uper->error = 1; + return; + } + + // copy in + uint8_t *raw = uper->ptr; + uint sbit = uper->bit; // bit order in stream (not byte) + uint ebit = (sbit+nbits) % 8; // after last bit + + // # bytes to write + uint n = 1 + ((sbit + nbits)/8); + + if (_asn1_debug_on_ == 2) + printf("\tPUT_BYTES_DETAIL = sbit=%d, ebit=%d, nbits=%d (%d)\n", sbit, ebit, nbits, n); + + int ntotal = nbytes; + while (nbytes--) { + uint8_t value = *buf++; + +// if (_asn1_debug_on_) +// printf("\tPUT_BYTE = %02x (%d)\n", value, value); + + // update + if (n==1) { + *raw++ = value; + } + else { + *raw++ |= value >> sbit; + if (n>1) + *raw = value << (8 - sbit); + } + } + + // copy out + uper->ptr += ntotal; + uper->bit = ebit; + uper->consumed += ntotal * nbits; +} diff --git a/src/libasn1/uper_get_bits.c b/src/libasn1/uper_get_bits.c new file mode 100644 index 0000000..6f6a32b --- /dev/null +++ b/src/libasn1/uper_get_bits.c @@ -0,0 +1,71 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1uper.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +uint64_t uper_get_bitstream(UPER_Stream *uper, UPER_BitStream *bs, uint max) +{ + if (!uper || !bs || !max) + return 0; + + bs->value = uper_get_bits_stream(uper, max); + bs->max = max; + return max; +} + +// from the front (high->low bits) +uint64_t uper_get_bit_bstream(UPER_BitStream *bs, uint bit) +{ + if (!bs || (bit>=bs->max)) + return 0; + + return (bs->value & 1<<(bs->max-bit-1)); +} diff --git a/src/libasn1/uper_get_ext.c b/src/libasn1/uper_get_ext.c new file mode 100644 index 0000000..2396a12 --- /dev/null +++ b/src/libasn1/uper_get_ext.c @@ -0,0 +1,142 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1uper.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// grab extension bits, check for extension defined by ellipses +uint uper_get_extension(UPER_Stream *uper, UPER_Extension *ext, uint noptions, uint ellipses) +{ + if (!uper || !ext) + return 0; + + uper_init_extension(ext); + + ellipses &= 1; + if ((noptions+ellipses)==0) { + uper->error = 1; + return 0; + } + + // check for extensions + if (ellipses) { + ext->ellipses = uper_get_bits_stream(uper, 1); + } + + // check for options + if (noptions) { + ext->value = uper_get_bits_stream(uper, noptions); + ext->options = noptions; + } + + if (ext->ellipses) { + uper_get_ext_length(uper, ext); + + if (_asn1_debug_on_) + printf("\tEXT_LEN = %d\n", ext->length); + // otherwise no ... + } + + return ellipses + noptions; +} + +uint uper_get_ext_length(UPER_Stream *uper, UPER_Extension *ext) +{ + if (!ext->ellipses) + return 0; + + uint len = uper_get_bits_stream(uper, 8); + + if (len & 0x80) { + len = (len & 0x7f) << 8; + len |= uper_get_bits_stream(uper, 8); + } + else + len &= 0x7f; + ext->length = len; + + return len; +} + +// if ellipses extension available +uint uper_get_ext_ellipses(UPER_Extension *ext) +{ + if (ext) + return ext->ellipses; + return 0; +} + +// from the front (high->low bits) +uint uper_get_ext_optional(UPER_Extension *ext, uint bit) +{ + if (!ext || (bit>=ext->options)) + return 0; + + return (ext->value & 1<<(ext->options-bit)); +} + +uint uper_get_ext_skip(UPER_Stream *uper, UPER_Extension *ext) +{ + if (!uper && !ext && !ext->length) + return 0; + + int bits = ext->length; + + // copy in + int sbit = uper->bit; // bit order in stream (not byte) + int ebit = (sbit+bits) % 8; // after last bit + + // copy out + uper->ptr += (sbit + bits) / 8; + uper->bit = ebit; + uper->consumed += bits; + + return bits; +} diff --git a/src/libasn1/uper_get_octet.c b/src/libasn1/uper_get_octet.c new file mode 100644 index 0000000..bc387de --- /dev/null +++ b/src/libasn1/uper_get_octet.c @@ -0,0 +1,79 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1uper.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +uint uper_get_octet_stream(UPER_Stream *uper, uint8_t *buf, uint min, uint max) +{ + if (!uper || !buf || !max) + return 0; + + // # bits + uint num = 0; + uint m = max; + while (m) { + m >>= 1; + num++; + } + + uint len = max; + + // # bytes + if (min < max) { + len = uper_get_bits_length(uper, num); + } + + if (_asn1_debug_on_) + printf("\tGET_OCTET = bits=%d, len/max=%d/%d\n", num, len, max); + + // slurp bytes + return uper_get_bytes_stream(uper, buf, len); +} diff --git a/src/libasn1/uper_put_bits.c b/src/libasn1/uper_put_bits.c new file mode 100644 index 0000000..4449c7d --- /dev/null +++ b/src/libasn1/uper_put_bits.c @@ -0,0 +1,80 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1uper.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void uper_put_bitstream(UPER_Stream *uper, UPER_BitStream *bs) +{ + if (!uper || !bs) + return; + + // limit 64 bits + uper_put_bits_stream(uper, bs->value, bs->max); +} + +// from the front (high->low bits) +void uper_set_bit_bitstream(UPER_BitStream *bs, uint bit, uint max) +{ + if (!bs || !max) + return; + bs->max = max; + + if (bit) + bs->value |= 1<<(bs->max-bit-1); + else + bs->value &= ~(1<<(bs->max-bit-1)); +} + +void uper_set_bits_bitstream(UPER_BitStream *bs, uint64_t value, uint max) +{ + if (!bs) + return; + + bs->value = value; + bs->max = max; +} diff --git a/src/libasn1/uper_put_ext.c b/src/libasn1/uper_put_ext.c new file mode 100644 index 0000000..022b7fc --- /dev/null +++ b/src/libasn1/uper_put_ext.c @@ -0,0 +1,118 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1uper.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +// grab extension bits, check for extension defined by ellipses +void uper_put_extension(UPER_Stream *uper, UPER_Extension *ext) +{ + if (!uper || !ext) + return; + + if (ext->ellipses) { + uper_put_bits_stream(uper, 1, 1); + } + else { + ext->length = 0; + } + + if (ext->options) { + uper_put_bits_stream(uper, ext->value, ext->options); + } + + if (ext->length) { + uint len = ext->length & 0x7fff; + if (_asn1_debug_on_) + printf("\tEXT_LEN = %d\n", ext->length); + if (len >= 128) { + uper_put_bits_stream(uper, 0x8000 | len, 16); + } + else { + uper_put_bits_stream(uper, len & 0x7f, 8); + } + } +} + +void uper_set_ext_length(UPER_Extension *ext, uint len) +{ + if (ext && len && len < 32768) { + ext->ellipses = 1; + ext->length = len & 0x7fff; + } +} + +// if ellipses extension available +void uper_set_ext_ellipses(UPER_Extension *ext) +{ + if (ext) { + ext->ellipses = 1; + ext->length = 0; + } +} + +// from the front (high->low bits) +void uper_set_ext_optional(UPER_Extension *ext, uint option, uint val, uint nbits) +{ + if (!ext) + return; + + if (!ext->options) + ext->options = nbits; + + // check + if (option >= ext->options) + return; + + if (val) + ext->value |= 1<<(ext->options-option-1); + else + ext->value &= ~(1<<(ext->options-option-1)); +} diff --git a/src/libasn1/uper_put_octet.c b/src/libasn1/uper_put_octet.c new file mode 100644 index 0000000..d2038a4 --- /dev/null +++ b/src/libasn1/uper_put_octet.c @@ -0,0 +1,77 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "asn1uper.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void uper_put_octet_stream(UPER_Stream *uper, uint8_t *buf, uint len, uint min, uint max) +{ + if (!uper || !buf || !max) + return; + + // # bits + uint num = 0; + uint m = max; + while (m) { + m >>= 1; + num++; + } + + if (_asn1_debug_on_) + printf("\tGET_OCTET = bits=%d, len/max=%d/%d\n", num, len, max); + + // # bytes + if (min < max) { + uper_put_bits_length(uper, len, num); + } + + // slurp bytes + uper_put_bytes_stream(uper, buf, len); +} diff --git a/src/libasn1/uper_stream.c b/src/libasn1/uper_stream.c new file mode 100644 index 0000000..3a7bdd9 --- /dev/null +++ b/src/libasn1/uper_stream.c @@ -0,0 +1,88 @@ +/***************************************************************************** + * Copyright (C) 2004-2021 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include + +#include "embtypes.h" +#include "asn1uper.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void uper_init_stream(UPER_Stream *strm, uint8_t *ptr, uint max) +{ + if (strm && ptr && max) { + strm->buf = ptr; + strm->ptr = ptr; + strm->align = ASN1_UPER_ALIGNED; + strm->bit = 0; + strm->max = max; + strm->consumed = 0; + strm->error = 0; + } +} + +UPER_Stream *uper_alloc_stream(uint8_t *ptr, uint max) +{ + UPER_Stream *uper = (UPER_Stream*)calloc(1, sizeof(UPER_Stream)); + + if (uper) { + if (!ptr && max) { + ptr = (uint8_t*)calloc(max/8+1,1); + uper->alloc = 1; + } + uper_init_stream(uper, ptr, max); + } + + return uper; +} + +void uper_free_stream(UPER_Stream *uper) +{ + if (uper) { + if (uper->buf && uper->alloc) + free(uper->buf); + free(uper); + } +} diff --git a/src/libcan++/CMakeLists.txt b/src/libcan++/CMakeLists.txt new file mode 100644 index 0000000..f3b0a42 --- /dev/null +++ b/src/libcan++/CMakeLists.txt @@ -0,0 +1,50 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME can++) +set(TARGET lib${NAME}) +project(Cnomicon-${TARGET}) +set(CMAKE_INSTALL_PREFIX ..) +set(LIBRARY ${TARGET}) + +# list of header files +set(LIBH + CanDatabase.h +# CanDevice.h + CanMessage.h + CanSignal.h + CanSocket.h + DbcParser.h + ) + +# list of source files +set(LIBSRC + CanDatabase.cpp +# CanDevice.cpp + CanMessage.cpp + CanSignal.cpp + CanSocket.cpp + DbcParser.cpp + ) + +# includes +include_directories(../include) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) + +# this is the "object library" target: compiles the sources only once +add_library(${LIBRARY} OBJECT ${LIBSRC}) + +# shared libraries need PIC +set_property(TARGET ${LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE 1) + +# shared and static libraries built from the same object files +add_library(${LIBRARY}-shared SHARED $) +add_library(${LIBRARY}-static STATIC $) + +# output file names +set_target_properties(${LIBRARY}-shared PROPERTIES OUTPUT_NAME ${NAME}) +set_target_properties(${LIBRARY}-static PROPERTIES OUTPUT_NAME ${NAME}) + +# installations +install (FILES ${LIBH} DESTINATION include/${TARGET}) +#install (FILES lib${NAME}.a lib${NAME}.so DESTINATION lib) diff --git a/src/libcan++/CanDatabase.cpp b/src/libcan++/CanDatabase.cpp new file mode 100644 index 0000000..ba88d10 --- /dev/null +++ b/src/libcan++/CanDatabase.cpp @@ -0,0 +1,238 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CanDatabase.h" +#include "CanSocket.h" + +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +CanDatabase::CanDatabase() +{ +} + +CanDatabase::~CanDatabase() +{ +} + +// formatted output ********************************************************** + +int CanDatabase::FormatHeader( char *buf, int max ) +{ + int t = 0; + + bzero( buf, max ); + strcpy( buf, "$CANHD" ); + t = strlen( buf ); + buf += t; + max -= t; + + // find message from filter list + for ( u_int j = 0 ; j < Signals.size() ; j++ ) + { + int n = snprintf( buf, max, ",%s", Signals[j]->Name.c_str() ); + + if ( n > 0 ) + { + buf += n; + max -= n; + } + else if ( n < 0 ) + break; + t += n; + } + + return t; +} + +int CanDatabase::FormatMessage( char *buf, int max ) +{ + int t = 0; + int n = 0; + + bzero( buf, max ); + + // time + struct timeval tv; + gettimeofday( &tv, NULL ); + t = snprintf( buf, max, "$CANV2,%lu.%06lu", tv.tv_sec, tv.tv_usec ); + buf += t; + max -= t; + + // find message from filter list + for ( u_int j = 0 ; j < Signals.size() ; j++ ) + { + CanSignal *pSig = Signals[j]; + + if ( !pSig->isNew ) + continue; + pSig->isNew = 0; + + if ( pSig->isValid ) + { + // valid data + if ( pSig->NumBits > 1 && pSig->GetScale() < 1.0 ) + n = snprintf( buf, max, ",%s=%f", pSig->Name.c_str(), pSig->realValue ); + else + n = snprintf( buf, max, ",%s=%d", pSig->Name.c_str(), (int32_t)pSig->currValue ); + } + else + { + // invalid data + n = snprintf( buf, max, ",%s=INV", pSig->Name.c_str() ); + } + + if ( n > 0 ) + { + buf += n; + max -= n; + } + else if ( n < 0 ) + break; + t += n; + } + + return t; +} + +int CanDatabase::SubscribeCan( CanSocket *pCan ) +{ + if ( !pCan ) + return -1; + + CanFilter filters[CAN_MAX_FILTER]; + bzero(filters, sizeof(filters)); + int num = 0; + + // subscribe to the messages we want + for ( u_int i=0 ; idoSubscribe ) + continue; + + bool found = false; + + // find existing filter + for ( int j=0 ; jAddress ) { + found = true; + break; + } + } + + // create data mask (tbd) + + if ( found ) + { + // update data mask (tbd) + + log_printf( "CAN Filter: %s, %lX Updated", + pSig->Name.c_str(), pSig->Address ); + } + else + { + // add filter and data mask + if ( pSig->Address <= CAN_SFF_MASK ) + { + filters[num].can_id = pSig->Address; + filters[num].can_mask = CAN_SFF_MASK; + } + else + { + filters[num].can_id = pSig->Address | CAN_EFF_FLAG; + filters[num].can_mask = CAN_EFF_MASK; + } + + filters[num].can_id = pSig->Address; + filters[num].can_mask = CAN_SFF_MASK; + + log_printf( "CAN Filter: %s, %lX Added", + pSig->Name.c_str(), pSig->Address ); + num++; + } + } + log_printf("CAN Filters: %d added", num ); + if (pCan) + pCan->CanAddRx( filters, num ); + + return num; +} + +int CanDatabase::ReadCan( CanSocket *pCan ) +{ + CanFrame frame[1]; + int n, msgs = 0; + + // frame from CAN device (will block on more than 1) + if ( (n = pCan->CanRawRead( frame, sizeof(frame)/sizeof(CanFrame) )) > 0 ) + { + // convert matching addresses (might be more than 1 signal) + for ( u_int i=0 ; iAddress ) + { + if ( Signals[i]->Read( frame[0].data, NULL, NULL ) ) + msgs++; + } + } + } + return msgs; +} diff --git a/src/libcan++/CanDatabase.h b/src/libcan++/CanDatabase.h new file mode 100644 index 0000000..63a9330 --- /dev/null +++ b/src/libcan++/CanDatabase.h @@ -0,0 +1,63 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __CanDatabase__ +#define __CanDatabase__ + +/* includes *****************************************************************/ + +#include +#include + +#include "CanSignal.h" +#include "CanSocket.h" +#include "DbcParser.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +/** + * CAN class to handle database of CAN signals from DBC (.dbc) file + */ +class CanDatabase : public DbcParser { + // public data +public: + + // private data +private: + + // 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 +private: +}; + +#endif diff --git a/src/libcan++/CanDevice.cpp b/src/libcan++/CanDevice.cpp new file mode 100644 index 0000000..f4bdfcd --- /dev/null +++ b/src/libcan++/CanDevice.cpp @@ -0,0 +1,82 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "CanDevice.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +CanDevice::CanDevice() +{ +} + +CanDevice::~CanDevice() +{ +} + +int CanDevice::ReadChannel( void *data, int chan, int n ) +{ + return 0; +} + +int CanDevice::ReadSample( void *data, int start, int end, int n ) +{ + return 0; +} + +int CanDevice::WriteChannel( void *data, int chan, int n ) +{ + return 0; +} + +int CanDevice::WriteSample( void *data, int start, int end, int n ) +{ + return 0; +} diff --git a/src/libcan++/CanDevice.h b/src/libcan++/CanDevice.h new file mode 100644 index 0000000..f207a48 --- /dev/null +++ b/src/libcan++/CanDevice.h @@ -0,0 +1,57 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __CanDevice__ +#define __CanDevice__ + +/* includes *****************************************************************/ + +#include "CanSocket.h" +#include "InputDevice.h" +#include "OutputDevice.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class CanDevice : public CanSocket, public InputDevice, public OutputDevice { + // public data +public: + + // private data +private: + // device + + // errors + + // static data + + // public methods +public: + // constructors + CanDevice(); + + // destructor + virtual ~CanDevice(); + + // virtual functions + + // public methods + int ReadChannel( void *data, int chan, int n=1 ); + int ReadSample( void *data, int start, int end, int n=1 ); + int WriteChannel( void *data, int chan, int n=1 ); + int WriteSample( void *data, int start, int end, int n=1 ); +}; + +#endif diff --git a/src/libcan++/CanMessage.cpp b/src/libcan++/CanMessage.cpp new file mode 100644 index 0000000..1e0c2f0 --- /dev/null +++ b/src/libcan++/CanMessage.cpp @@ -0,0 +1,128 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CanMessage.h" +#include "CanSocket.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +CanMessage::CanMessage() +{ + Name = ""; + Module = ""; + bzero(Data,sizeof(Data)); +} + +CanMessage::~CanMessage() +{ +} + +int CanMessage::Read(CanFrame *frame) +{ + if (frame->can_id != Address) + return 0; + if (memcmp(Data, frame->data, frame->can_dlc)==0) + return 0; + if (Signals.size()==0) + return 0; + memcpy(Data, frame->data, frame->can_dlc); + + // traverse signals + int n = 0; + for(unsigned int i=0; iRead(Data); + } + + return n; +} + +int CanMessage::Write(CanFrame *frame) +{ + if (frame->can_id != Address) + return 0; + if (memcmp(Data, frame->data, frame->can_dlc)==0) + return 0; + if (Signals.size()==0) + return 0; + memcpy(Data, frame->data, frame->can_dlc); + + // traverse signals + int n = 0; + for(unsigned int i=0; iWrite(Data); + } + + return n; +} + +int CanMessage::Subscribe(void) +{ + int n = 0; + + return n; +} + +int CanMessage::Unsubscribe(void) +{ + int n = 0; + + return n; +} + diff --git a/src/libcan++/CanMessage.h b/src/libcan++/CanMessage.h new file mode 100644 index 0000000..c5d7639 --- /dev/null +++ b/src/libcan++/CanMessage.h @@ -0,0 +1,74 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __CanMessage__ +#define __CanMessage__ + +/* includes *****************************************************************/ + +#include +#include +#include + +#include "CanSignal.h" +#include "CanSocket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +// based on .dbc data + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class CanMessage { + // 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 +private: + + // 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 +private: +}; + +#endif diff --git a/src/libcan++/CanSignal.cpp b/src/libcan++/CanSignal.cpp new file mode 100644 index 0000000..aca29c6 --- /dev/null +++ b/src/libcan++/CanSignal.cpp @@ -0,0 +1,244 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CanSignal.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +CanSignal::CanSignal() +{ + Name = ""; + Units = ""; + Address = 0L; + StartBit = NumBits = BigEndian = IsSigned = HighBit = LowBit = 0; + Scale = Offset = realValue = 0.0; + Mask = Sign = 0L; + doSubscribe = isNew = isValid = 0; + currValue = 0L; + lastValue = 0xFFFFFFFFFFFFFFFFULL; + activity = 0L; + userData = NULL; + userIndex = 0; +} + +CanSignal::~CanSignal() +{ +} + +int CanSignal::Init( void ) +{ + // bytes to pick + StartByte = StartBit / 8; + NumBytes = (NumBits-1) / 8 + 1; + + // bits to pick + if (!BigEndian || NumBits==1) { + LowBit = StartBit % 8; // Intel + } else { + LowBit = (StartBit+NumBits+1) % 8; // Motorola + } + HighBit = (NumBits-1) + LowBit; + + // mask & sign (after shifting) + Mask = ~(0xFFFFFFFFFFFFFFFFULL << NumBits); + if (IsSigned && NumBits>1) { + Sign = ~(Mask >> 1); + } + else { + IsSigned = 0; + Sign = 0L; + } + + // scaling + if ( Scale == 0.0 ) + Scale = 1.0; + + return 1; +} + +/** + * Convert CAN 8 byte message frame to CAN signal + */ +int CanSignal::Read( const u_char *buf, long *value, double *real ) +{ + buf += StartByte; + int n = NumBytes; + rawValue = 0; + + if (NumBytes == 1) + { + // single byte values + rawValue = *buf++; + } + else + { + // multibyte values + if ( BigEndian ) + { + while (n--) { + rawValue <<= 8; + rawValue |= *buf++; + } + } + else + { + // LittleEndian + buf += n; + while (n--) { + rawValue <<= 8; + rawValue |= *--buf; + } + } + } + + // data shift and mask + if (LowBit) + rawValue >>= LowBit; + + // initial flags + isValid = 1; + + // sign extend using mask + rawValue &= Mask; + if ( IsSigned && (rawValue & Sign) ) + rawValue |= Sign; + + // scale and offset + realValue = (double)rawValue * GetScale() + GetOffset(); // scale + + // new value + currValue = rawValue; + + // check for changes + if (currValue != lastValue) + isNew = 1; + else + isNew = 0; + + // save last value + lastValue = currValue; + + // return values + if ( value ) + *value = rawValue; + if ( real ) + *real = realValue; + + return isNew & isValid; +} + +/** + * Convert CAN signal to CAN message frame + */ +int CanSignal::Write( u_char *buf ) +{ + // copy + lastValue = currValue; + currValue = rawValue; + if (rawValue != lastValue) + isNew = 1; + + if (buf) { + rawValue <<= LowBit; + u_int64_t rawMask = Mask << LowBit; + + buf += StartByte; + int n = NumBytes; + + if ( BigEndian ) + { + buf += n; + while (n--) { + --buf; + *buf = (*buf & ~rawMask) | rawValue; + rawValue >>= 8; + rawMask >>= 8; + } + } + else + { + // LittleEndian + while (n--) { + *buf = (*buf & ~rawMask) | rawValue; + buf++; + rawValue >>= 8; + rawMask >>= 8; + } + } + } + + return isNew; +} + +int CanSignal::Write( long value, u_char *buf ) +{ + // mask + rawValue = value & Mask; + return Write(buf); +} + +long CanSignal::Write(double value, u_char *buf) +{ + long raw = (long)((value - GetOffset()) / GetScale()); + + if (buf) + Write(raw, buf); + return raw; +} + diff --git a/src/libcan++/CanSignal.h b/src/libcan++/CanSignal.h new file mode 100644 index 0000000..88541e3 --- /dev/null +++ b/src/libcan++/CanSignal.h @@ -0,0 +1,116 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __CanSignal__ +#define __CanSignal__ + +/* includes *****************************************************************/ + +#include +#include +#include + +//#include "BaseSignal.h" +//#include "VoltType.h" + +#include "CanSocket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +// based on .dbc data + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +#ifdef __BaseSignal__ +class CanSignal : public BaseSignal, public VoltType { +#else +class CanSignal { +#endif + // public data + 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 + u_char BigEndian; // 0 = little endian (intel), 1 = big endian (moto) + 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 + u_char HighBit; // 0..7 + 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; + u_char isValid; + int32_t rawValue; + 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: + + // static data + + // public methods + public: + // constructors + CanSignal(); + + // destructor + virtual ~CanSignal(); + + // virtual functions + + // public methods + int Init( void ); + int Convert(CanFrame *frame) {return Read(frame->data);}; + int Read(CanFrame *frame) {return Read(frame->data);}; + int Read(const u_char *pbyData, long *ldata=NULL, double *ddata=NULL); + int Write(CanFrame *frame) {return Write(frame->data);}; + int Write(u_char *pbyData); + int Write(long value, u_char *pbyData); + 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: +}; + +#endif diff --git a/src/libcan++/CanSocket.cpp b/src/libcan++/CanSocket.cpp new file mode 100644 index 0000000..0defe5c --- /dev/null +++ b/src/libcan++/CanSocket.cpp @@ -0,0 +1,425 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CanSocket.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +#define U64_DATA(p) (*(unsigned long long*)(p)->data) + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +CanSocket::CanSocket() +{ + m_sock = -1; + m_proto = 0; + m_flags = 0; + m_logerrs = false; + m_errcount = 0; +} + +CanSocket::~CanSocket() +{ + CanClose(); +} + +void CanSocket::CanClose( void ) +{ + if ( m_sock >= 0 ) + { + log_printf( "Socket-CAN: Closed (%d)", m_sock ); + close( m_sock ); + m_sock = -1; + } +} + +int CanSocket::CanOpen( const char *dev, int proto, int flag ) +{ + if ( !dev || !strlen(dev) ) + return -1; + if ( strlen(dev) >= IFNAMSIZ ) + return -1; + + // type + int type = SOCK_DGRAM; + if ( proto == CAN_RAW ) + type = SOCK_RAW; + else if ( proto == CAN_BCM ) + type = SOCK_DGRAM; + else + return -1; + m_flags = flag; + + // socket + if ( (m_sock = socket(PF_CAN, type, proto)) < 0 ) + { + log_error("socket"); + log_printf( "Socket-CAN: Open failed on %s %d:%d", dev, type, proto ); + return -1; + } + m_proto = proto; + + // ioctl + struct ifreq ifr; + bzero( &ifr, sizeof(ifr) ); + strcpy(ifr.ifr_name, dev); + if ( ioctl(m_sock, SIOCGIFINDEX, &ifr) != 0 ) + { + log_error("ioctl"); + log_printf( "Socket-CAN: Open failed on %s %d:%d", dev, type, proto ); + close(m_sock); + m_sock = -1; + return -1; + } + + // addr + struct sockaddr_can addr; + bzero( &addr, sizeof(addr) ); + addr.can_family = AF_CAN; + addr.can_ifindex = ifr.ifr_ifindex; + + if ( m_proto == CAN_RAW ) + { + // bind + if ( bind(m_sock, (struct sockaddr *)&addr, sizeof(addr)) != 0 ) + { + log_error("bind"); + log_printf( "Socket-CAN: Open failed on %s %d:%d", dev, type, proto ); + close(m_sock); + m_sock = -1; + return -1; + } + } + else + { + // connect + if ( connect(m_sock, (struct sockaddr *)&addr, sizeof(addr)) != 0 ) + { + log_error("connect"); + log_printf( "Socket-CAN: Open failed on %s %d:%d", dev, type, proto ); + close(m_sock); + m_sock = -1; + return -1; + } + } + log_printf( "Socket-CAN: Open successful on %s %d:%d (%d)", dev, type, proto, m_sock ); + + return m_sock; +} + +//**************************************************************************** +// misc control +//***************************************************************************/ + +int CanSocket::ClearFilters( void ) +{ + if ( m_sock<0 ) + return -1; + log_printf("Socket-CAN: Filters cleared"); + return setsockopt(m_sock, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0); +} + +int CanSocket::Loopback( bool loop ) +{ + if ( m_sock<0 ) + return -1; + int loopback = loop ? 1 : 0; + log_printf("Socket-CAN: Loopback=%d", loopback); + return setsockopt(m_sock, SOL_CAN_RAW, CAN_RAW_LOOPBACK, &loopback, sizeof(loopback)); +} + +int CanSocket::Blocking( bool block ) +{ + if ( m_sock<0 ) + return -1; + + int flag = block ? 0 : 1; + + if (ioctl(m_sock, FIONBIO, (char *)&flag) != 0) + log_error("ioctl"); + + log_printf("Socket-CAN: Blocking=%d", block); + + return 0; +} + +//**************************************************************************** +// RX control +//***************************************************************************/ + +int CanSocket::CanAddRx( u_int32_t addr ) +{ + if ( m_sock<0 ) + return -1; + + if ( m_proto == CAN_RAW ) + { + struct can_filter filter; + bzero( &filter, sizeof(filter) ); + + if ( addr <= CAN_SFF_MASK ) + { + filter.can_id = addr; + filter.can_mask = CAN_SFF_MASK; + } + else + { + filter.can_id = addr | CAN_EFF_FLAG; + filter.can_mask = CAN_EFF_MASK; + } + + return setsockopt(m_sock, SOL_CAN_RAW, CAN_RAW_FILTER, &filter, sizeof(filter)); + } + else if ( m_proto == CAN_BCM ) + { + BcmFrame msg; + bzero( &msg, sizeof(msg) ); + + // check subscription + msg.head.opcode = RX_READ; + msg.head.can_id = m_flags | addr; // 29 bit address! + msg.head.flags = RX_CHECK_DLC; + + // read + if (read(m_sock, &msg, sizeof(msg)) != 0) + return -1; + if ( msg.head.opcode != RX_STATUS ) + return -1; + + // header + msg.head.opcode = RX_SETUP; + msg.head.can_id = m_flags | addr; // 29 bit address! + msg.head.flags = RX_CHECK_DLC; + + // timeouts + msg.head.ival1.tv_sec = 0; + msg.head.ival1.tv_usec = 0; + msg.head.ival2.tv_sec = 0; + msg.head.ival2.tv_usec = 0; + + // mask + msg.head.nframes = 1; + U64_DATA(&msg.frame) = (__u64) 0xFFFFFFFFFFFFFFFFULL; // all 64 bits + + // send it down + if (write(m_sock, &msg, sizeof(msg)) < 0) + { + log_error("bcm add rx filter"); + return -1; + } + } + return 0; +} + +int CanSocket::CanAddRx( const CanFilter *filter, int max ) +{ + if ( m_sock<0 ) + return -1; + + if ( !filter || !max ) + return 0; + + log_printf("Socket-CAN: Filters set (%d)", max); + + if ( m_proto == CAN_RAW ) + return setsockopt(m_sock, SOL_CAN_RAW, CAN_RAW_FILTER, filter, sizeof(can_filter)*max ); + + return 0; +} + +int CanSocket::CanDelRx( u_int32_t addr ) +{ + if ( m_sock<0 ) + return -1; + + if ( m_proto != CAN_BCM ) + return -1; + + struct bcm_msg_head head; + + head.opcode = RX_DELETE; + head.can_id = m_flags | addr; + head.nframes = 0; + + if (write(m_sock, &head, sizeof(head)) < 0) + { + log_error("can del rx filter"); + return -1; + } + return 0; +} + +//**************************************************************************** +// Raw Packet +//***************************************************************************/ + +int CanSocket::CanRawRead( CanFrame *buf, int max ) +{ + if ( m_sock < 0 || !buf ) + return -1; + if ( m_proto != CAN_RAW ) + return -1; + + int tot = 0; + + while ( max-- ) + { + int n; + + // read + if ((n = read(m_sock, buf, sizeof(CanFrame))) < 0) + { + if ( m_logerrs ) + log_error("Socket-CAN: raw read"); + m_errcount++; + return -1; + } + + buf++; + if ( n ) + tot++; + } + + return tot; +} + +int CanSocket::CanRawWrite( const CanFrame *buf, int max ) +{ + if ( m_sock < 0 || !buf ) + return -1; + if ( m_proto != CAN_RAW ) + return -1; + + int tot = 0; + + while ( max-- ) + { + int n; + + // write + if ((n = write(m_sock, buf, sizeof(CanFrame))) < 0) + { + if ( m_logerrs ) + log_error("Socket-CAN: raw write"); + m_errcount++; + return -1; /* quit */ + } + + buf++; + if ( n ) + tot++; + } + + return tot; +} + +//**************************************************************************** +// BasicCanMessage +//***************************************************************************/ + +int CanSocket::CanBcmRead( BcmFrame *msg, int max ) +{ + if ( m_sock < 0 || !msg ) + return -1; + if ( m_proto != CAN_BCM ) + return -1; + int n = 0; + + // read + if ( (n = read(m_sock, &msg, max)) < 0 ) + { + if ( m_logerrs ) + log_error("Socket-CAN: bcm read"); + m_errcount++; + return -1; /* quit */ + } + + // changed data + if ( msg->head.opcode != RX_CHANGED ) + return -1; + + // pick up time stamp +#ifdef SIOCGSTAMP + ioctl(m_sock, SIOCGSTAMP, &msg->head.ival1); +#endif + + return n; +} + +int CanSocket::CanBcmWrite( BcmFrame *msg, int max ) +{ + if ( m_sock < 0 || !msg ) + return -1; + if ( m_proto != CAN_BCM ) + return -1; + + int n = 0; + msg->head.opcode = TX_SEND; + + // write + if ( (n = write(m_sock, &msg, max)) < 0 ) + { + if ( m_logerrs ) + log_error("Socket-CAN: bcm write"); + m_errcount++; + return -1; /* quit */ + } + + return n; +} diff --git a/src/libcan++/CanSocket.h b/src/libcan++/CanSocket.h new file mode 100644 index 0000000..9005a85 --- /dev/null +++ b/src/libcan++/CanSocket.h @@ -0,0 +1,101 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __CanSocket__ +#define __CanSocket__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include +#include +#include + + +/* defines ******************************************************************/ + +#define CAN_MAX_FILTER 31 +#define CAN_MAX_ADDRESSES 256 + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +typedef struct can_filter CanFilter; +typedef struct can_frame CanFrame; + +typedef struct _BcmFrame { + struct bcm_msg_head head; + struct can_frame frame; +} BcmFrame; + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class CanSocket { + // public data +public: + int m_sock; + int m_proto; + + // private data +private: + // 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 ); +}; + +#endif diff --git a/src/libcan++/DbcParser.cpp b/src/libcan++/DbcParser.cpp new file mode 100644 index 0000000..a5a9711 --- /dev/null +++ b/src/libcan++/DbcParser.cpp @@ -0,0 +1,385 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "DbcParser.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +DbcParser::DbcParser() +{ +} + +DbcParser::~DbcParser() +{ +} + +DbcFilter *DbcParser::AddFilter( char *name, u_int32_t addr1, u_int32_t addr2 ) +{ + DbcFilter *pNew = new DbcFilter; + strcpy( pNew->Name, "*" ); + pNew->CanAddrLo = pNew->CanAddrHi = 0; + pNew->found = 0; + int ret = 0; + + if ( name && strlen(name) ) + { + strcpy( pNew->Name, name ); + char temp[40]; + sprintf( temp, "^%s$", name ); + regcomp( &pNew->preg, temp, REG_ICASE|REG_NOSUB|REG_NEWLINE ); + ret = 1; + } + if ( addr1 ) + { + if ( !addr2 ) + addr2 = addr1; + + if ( addr1 <= addr2 ) + { + pNew->CanAddrLo = addr1; + pNew->CanAddrHi = addr2; + } + else + { + pNew->CanAddrLo = addr2; + pNew->CanAddrHi = addr1; + } + ret = 1; + } + + if ( ret ) + return pNew; + + delete pNew; + return NULL; +} + +int DbcParser::AddMsgFilter( char *name, u_int32_t addr1, u_int32_t addr2 ) +{ + DbcFilter *pNew = AddFilter( name, addr1, addr2 ); + + if (pNew) { + MsgFilters.push_back( pNew ); + return 1; + } + return 0; +} + +int DbcParser::AddSigFilter( char *name, u_int32_t addr1, u_int32_t addr2 ) +{ + DbcFilter *pNew = AddFilter( name, addr1, addr2 ); + + if (pNew) { + SigFilters.push_back( pNew ); + return 1; + } + return 0; +} + +int DbcParser::AddMessage( char *name, u_int32_t addr, u_int32_t size, char *module ) +{ + // check + if ( !name || !strlen(name) || !addr ) { + return 0; + } + + // check existing messages + for (unsigned int i=0; iAddress == addr) + return 0; + } + + // new message + CanMessage *pMsg = new CanMessage(); + pMsg->Name = name; + pMsg->Address = addr; + pMsg->Size = size; + if (module && strlen(module)) + pMsg->Module = module; + + Messages.push_back( pMsg ); + + log_printf( "CAN Message: %s, %03X (%d) Added", + pMsg->Name.c_str(), pMsg->Address, pMsg->Size ); + + return 1; +} + + +int DbcParser::AddSignal( char *name, char *units, u_int32_t addr, char startbit, char numbits, char endian, char sign, float scale, float offset ) +{ + // check + if ( !name || !strlen(name) || !addr || !numbits ) { + return 0; + } + + CanSignal *pSig = new CanSignal(); + + // fixups + if ( *units == '\"' ) + units++; + int n = strlen(units); + if ( n>0 && *(units+n-1) == '\"' ) + *(units+n-1) = '\0'; + + // name,units + pSig->Name = name; + if ( units && strlen(units) ) + pSig->Units = units; + + // data + pSig->Address = addr; + pSig->StartBit = startbit; + pSig->NumBits = numbits; + if ( endian == '0' ) + pSig->BigEndian = 1; + else + pSig->BigEndian = 0; + if ( sign == '-' ) + pSig->IsSigned = 1; + else + pSig->IsSigned = 0; + pSig->SetScaling( scale, offset ); + + // add signal + pSig->Init(); + Signals.push_back( pSig ); + + // link signal to message + CanMessage* pMsg = Messages.back(); + if (pMsg) + pMsg->Signals.push_back(pSig); + + log_printf( "CAN Signal: %s [%03X,%d,%d,%c%c,*%g+%g]->(%d,%d,%d,%d,&%04lX|%04lX) Added", + pSig->Name.c_str(), pSig->Address, pSig->StartBit, pSig->NumBits, + pSig->BigEndian?'B':'L', pSig->IsSigned?'-':'+', + pSig->GetScale(), pSig->GetOffset(), + pSig->StartByte, pSig->NumBytes, pSig->HighBit, pSig->LowBit, + pSig->Mask, pSig->Sign & 0xFFFFFFFFL ); + + return 1; +} + +int DbcParser::LoadDatabase( const char *path ) +{ + FILE *file; + char buf[16384]; + int n = 0; + + if ( !(file = fopen( path, "r" )) ) + return -1; + + u_int32_t addr = 0; + u_int32_t address = 0; + char mod[16]; + char msg[32]; + int size = 0; + strcpy(mod,""); + strcpy(msg,""); + int message = 0; + int msg_add = 0; + + // we care about signals not whole messages! + while ( fgets( buf, sizeof(buf), file ) ) + { + if (strncmp(buf, "BO_ ", 4) == 0) + { + if ( sscanf( buf, "BO_ %u %s %d %s ", &addr, msg, &size, mod ) == 4 ) + { + char *s = strchr(msg, ':'); + if ( s ) + *s = '\0'; + if (addr == 0xC0000000) + continue; + + // got a record, check against filter + if ( MsgFilters.size() ) + { + for ( u_int i=0 ; i < MsgFilters.size() ; i++ ) + { + int namematch = 0; + int addrmatch = 0; + + if ( strlen( MsgFilters[i]->Name ) ) + { + regmatch_t pmatch[1]; + + // match + if ( regexec( &MsgFilters[i]->preg, msg, 1, pmatch, 0 ) == 0 ) { + namematch = 1; + } + } + else + namematch = 1; + + if ( MsgFilters[i]->CanAddrLo && MsgFilters[i]->CanAddrHi ) + { + // address range match + if ( MsgFilters[i]->CanAddrLo <= addr && addr <= MsgFilters[i]->CanAddrHi ) { + addrmatch = 1; + } + } + else + addrmatch = 1; // add the message too + + if ( namematch && addrmatch ) + { + message = msg_add = 1; + address = addr; + } + } + } + else + { + // add the message + message = msg_add = 1; + address = addr; + } + } + } + else if (message && strncmp( buf, " SG_ ", 5 ) == 0) + { + char name[32], units[16]; + int startbit, numbits; + char endian, sign; + float scale, offset; + float min, max; + + // scan for SG_ line + if (sscanf( buf, " SG_ %s : %d|%d@%c%c (%f,%f) [%f|%f] %s ", + name, &startbit, &numbits, &endian, &sign, + &scale, &offset, &min, &max, units ) == 10 ) + { + // got a record, check against filter + if ( SigFilters.size() ) + { + for ( u_int i=0 ; i < SigFilters.size() ; i++ ) + { + int namematch = 0; + int addrmatch = 0; + + if ( strlen( SigFilters[i]->Name ) ) + { + regmatch_t pmatch[1]; + + // match + if ( regexec( &SigFilters[i]->preg, name, 1, pmatch, 0 ) == 0 ) { + namematch = 1; + } + } + else + namematch = 1; + + if ( SigFilters[i]->CanAddrLo && SigFilters[i]->CanAddrHi ) + { + // address range match + if ( SigFilters[i]->CanAddrLo <= addr && addr <= SigFilters[i]->CanAddrHi ) { + addrmatch = 1; + } + } + else + addrmatch = 1; // add the message too + + if ( namematch && addrmatch ) + { + // add the message too + if (msg_add) { + AddMessage( msg, addr, size, mod ); + msg_add = 0; + } + + // add the signal + if ( AddSignal( name, units, address, startbit, numbits, + endian, sign, scale, offset ) ) + { + n++; + SigFilters[i]->found++; + break; + } + } + } + } + else + { + // add the message + if (msg_add) { + AddMessage( msg, addr, size, mod ); + msg_add = 0; + } + + // add the signal + if ( AddSignal(name, units, address, startbit, numbits, + endian, sign, scale, offset) ) + n++; + } + } + } + else + { + message = 0; + } + } + fclose( file ); + + log_printf("CAN Database: %d messages, %d signals", Messages.size(), Signals.size()); + + return n; +} diff --git a/src/libcan++/DbcParser.h b/src/libcan++/DbcParser.h new file mode 100644 index 0000000..96f003c --- /dev/null +++ b/src/libcan++/DbcParser.h @@ -0,0 +1,87 @@ +//**************************************************************************** +// Copyright (C) 2007 +// Nissan North America +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __DbcParser__ +#define __DbcParser__ + +/* includes *****************************************************************/ + +#include +#include + +#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 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 +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 diff --git a/src/libemb/CMakeLists.txt b/src/libemb/CMakeLists.txt new file mode 100644 index 0000000..8f17db4 --- /dev/null +++ b/src/libemb/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME emb) +set(TARGET lib${NAME}) +project(Cnomicon-${TARGET}) +set(CMAKE_INSTALL_PREFIX ..) +set(LIBRARY ${TARGET}) + +# list of header files +set(LIBH + bitlib.h bytequeue.h bytestack.h + emblib.h embstruct.h embtypes.h + ) + +# list of source files +set(LIBSRC + base64.c chomp.c + bitreverse.c bitstream.c + bytequeue.c bytestack.c + chksum8.c chksum16.c + crc8.c crc16.c crc32.c + interplong.c interpshort.c + ) + +# includes +include_directories(../include) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) + +# this is the "object library" target: compiles the sources only once +add_library(${LIBRARY} OBJECT ${LIBSRC}) + +# shared libraries need PIC +set_property(TARGET ${LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE 1) + +# shared and static libraries built from the same object files +add_library(${LIBRARY}-shared SHARED $) +add_library(${LIBRARY}-static STATIC $) + +# output file names +set_target_properties(${LIBRARY}-shared PROPERTIES OUTPUT_NAME ${NAME}) +set_target_properties(${LIBRARY}-static PROPERTIES OUTPUT_NAME ${NAME}) + +# installations +install (FILES ${LIBH} DESTINATION include) +#install (FILES lib${NAME}.a lib${NAME}.so DESTINATION lib) diff --git a/src/libemb/base64.c b/src/libemb/base64.c new file mode 100644 index 0000000..05953fd --- /dev/null +++ b/src/libemb/base64.c @@ -0,0 +1,135 @@ +/* Proxytunnel - (C) 2001-2006 Jos Visser / Mark Janssen */ +/* Contact: josv@osp.nl / maniac@maniac.nl */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "strlib.h" + +/* Needed for base64 encoding... */ +static const char base64digits[] = +"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +#define BAD -1 +static const char base64val[] = { + BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, + BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, + BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD, 62, BAD,BAD,BAD, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,BAD,BAD, BAD,BAD,BAD,BAD, + BAD, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,BAD, BAD,BAD,BAD,BAD, + BAD, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,BAD, BAD,BAD,BAD,BAD +}; +#define DECODE64(c) (isascii(c) ? base64val[c] : BAD) + + +/* + * Small MAX macro + */ +#ifndef MAX +#define MAX( x, y ) ( ( (x)>(y) ) ? (x) : (y) ) +#endif + +/* + * This base64 code is heavily modified from fetchmail (also GPL'd, of + * course) by Brendan Cully . + * + * Original copyright notice: + * + * The code in the fetchmail distribution is Copyright 1997 by Eric + * S. Raymond. Portions are also copyrighted by Carl Harris, 1993 + * and 1995. Copyright retained for the purpose of protecting free + * redistribution of source. + * + */ + +/* raw bytes to null-terminated base 64 string */ +void base64(const unsigned char *in, char *out, int len) +{ + while (len >= 3) { + *out++ = base64digits[in[0] >> 2]; + *out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)]; + *out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)]; + *out++ = base64digits[in[2] & 0x3f]; + len -= 3; + in += 3; + } + + /* clean up remainder */ + if (len > 0) { + unsigned char fragment; + + *out++ = base64digits[in[0] >> 2]; + fragment = (in[0] << 4) & 0x30; + if (len > 1) + fragment |= in[1] >> 4; + *out++ = base64digits[fragment]; + *out++ = (len < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c]; + *out++ = '='; + } + *out = '\0'; +} + +int unbase64(const char *in, unsigned char *out, int maxlen) +/* base 64 to raw bytes in quasi-big-endian order, returning count of bytes */ +/* maxlen limits output buffer size, set to zero to ignore */ +{ + int len = 0; + register unsigned char digit1, digit2, digit3, digit4; + + if (in[0] == '+' && in[1] == ' ') + in += 2; + if (*in == '\r') + return(0); + + do { + digit1 = in[0]; + if (DECODE64(digit1) == BAD) + return(-1); + digit2 = in[1]; + if (DECODE64(digit2) == BAD) + return(-1); + digit3 = in[2]; + if (digit3 != '=' && DECODE64(digit3) == BAD) + return(-1); + digit4 = in[3]; + if (digit4 != '=' && DECODE64(digit4) == BAD) + return(-1); + in += 4; + ++len; + if (maxlen && len > maxlen) + return(-1); + *out++ = (DECODE64(digit1) << 2) | (DECODE64(digit2) >> 4); + if (digit3 != '=') + { + ++len; + if (maxlen && len > maxlen) + return(-1); + *out++ = ((DECODE64(digit2) << 4) & 0xf0) | (DECODE64(digit3) >> 2); + if (digit4 != '=') + { + ++len; + if (maxlen && len > maxlen) + return(-1); + *out++ = ((DECODE64(digit3) << 6) & 0xc0) | DECODE64(digit4); + } + } + } while + (*in && *in != '\r' && digit4 != '='); + + return (len); +} diff --git a/src/libemb/bitlib.h b/src/libemb/bitlib.h new file mode 100644 index 0000000..c8f844a --- /dev/null +++ b/src/libemb/bitlib.h @@ -0,0 +1,52 @@ +#ifndef __BITLIB_INCLUDE__ +#define __BITLIB_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include +#include + +#include "embtypes.h" + +/****************************************************************************** + * defines + *****************************************************************************/ + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +typedef struct _bit_struct { + const uint8_t *ptr; + int bit; + int max; + int consumed; +} BIT_Stream; + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +BYTE reverseByteBits(BYTE b); + +void enableBitDebug(int flag); +int getBitDirect(const uint8_t *pkt, int bit); +uint64_t getBitsDirect(const uint8_t *pkt, int bit, int bits); +uint64_t getBitsStream(BIT_Stream *ptr, int bits); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/src/libemb/bitreverse.c b/src/libemb/bitreverse.c new file mode 100644 index 0000000..fe6a6c8 --- /dev/null +++ b/src/libemb/bitreverse.c @@ -0,0 +1,62 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *---------------------------------------------------------------------------- + * Reverse bits in a byte + *****************************************************************************/ + +/***************************************************************************** + * includes + *****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines + *****************************************************************************/ + +/***************************************************************************** + * macros + *****************************************************************************/ + +/***************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/***************************************************************************** + * global constants + *****************************************************************************/ + +/***************************************************************************** + * global variables + *****************************************************************************/ + +/***************************************************************************** + * static constants + *****************************************************************************/ + +/***************************************************************************** + * static variables + *****************************************************************************/ + +/***************************************************************************** + * static prototypes + *****************************************************************************/ + +/***************************************************************************** + * C functions + *****************************************************************************/ + +/** + * \brief Byte reverse bits + * + * \param byte + * \return reversed byte + */ +BYTE reverseByteBits(BYTE b) { + b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; + b = (b & 0xCC) >> 2 | (b & 0x33) << 2; + b = (b & 0xAA) >> 1 | (b & 0x55) << 1; + return b; +} diff --git a/src/libemb/bitstream.c b/src/libemb/bitstream.c new file mode 100644 index 0000000..999416f --- /dev/null +++ b/src/libemb/bitstream.c @@ -0,0 +1,149 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * FIFO Circular Queue (Round robin or ring buffer) +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "bitlib.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define min(A,B) ((A)<(B)?(A):(B)) +#define max(A,B) ((A)>(B)?(A):(B)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +static int bit_debug_on = 0; + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void enableBitDebug(int flag) +{ + bit_debug_on = flag; +} + +int getBitDirect(const uint8_t *pkt, int bit) +{ + pkt += (bit/8); + return *pkt & (1 << (7-(bit%8))); +} + +// works well if arbitrarily peeking into the bit stream +uint64_t getBitsDirect(const uint8_t *pkt, int bit, int bits) +{ + unsigned long value = 0; + uint8_t val; + int off; + + // start byte from bit + pkt += (bit/8); + off = bit % 8; // bit offset + if (bit_debug_on == 2) + printf( "%d, %d:\n", bit, bits); + + // grab the bits from byte array + while (bits > 0) { + // # bits to fetch + int num = 8 - off; + // # bits to extract + int size = min(num, bits); + + // get whole byte + val = *pkt++; + + // shift desired bits + val >>= (num - size); + + // mask desired bits + val &= (0xff >> (8-size)); + + // update value + value <<= size; // make room for new bits + value |= val; // add them in + if (bit_debug_on) + printf( "\t%d, %d, %d/%d, %d(0x%02x), %lu(0x%08x)\n", bit, off, num, bits, val, val, value, (unsigned)value); + + bit += size; + bits -= size; + off = 0; // byte boundary from now on. + } + + return value; +} + +uint64_t getBitsStream(BIT_Stream *ptr, int bits) +{ + // copy in + const uint8_t *raw = ptr->ptr; + int sbit = ptr->bit; // bit order in stream (not byte) + int ebit = (sbit+bits) % 8; // after last bit + + // init + uint64_t value = 0; + int n = 1 + ((ptr->bit + bits) / 8); // # bytes + if (bit_debug_on == 2) + printf("\tsbit=%d, ebit=%d, nbits=%d (%d) ", sbit, ebit, bits, n); + + // slurp the bytes + while (n--) { + value <<= 8; + value |= *raw++; + } + + // shift + int shift = (8 - ebit); + value >>= shift; +// printf("shift=%d ", shift); + + // mask + uint64_t mask = (0xffffffffffffffffULL >> (64 - bits)); + value &= mask; + + // copy out + ptr->ptr += (sbit + bits) / 8; + ptr->bit = ebit; + ptr->consumed += bits; + + if (bit_debug_on) + printf("%08lx (%ld)\n", value, value); + + return value; +} + diff --git a/src/libemb/bytequeue.c b/src/libemb/bytequeue.c new file mode 100644 index 0000000..5a160a7 --- /dev/null +++ b/src/libemb/bytequeue.c @@ -0,0 +1,102 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * FIFO Circular Queue (Round robin or ring buffer) +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "bytequeue.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void QueueAlloc( Queue *pQ, BYTE *pbyData, BYTE bySize ) +{ + _QueueAlloc( *pQ, pbyData, bySize ); + _QueueClear( *pQ ); +} + +void QueueClear( Queue *pQ ) +{ + _QueueClear( *pQ ); +} + +BYTE QueuePut( Queue *pQ, BYTE *pbyData ) +{ + if ( !QueueFull(pQ) ) + { + _QueuePut( *pQ, *pbyData ); + return 1; + } + return 0; +} + +BYTE QueueUnput( Queue *pQ ) +{ + if ( QueueCount(pQ) ) + { + _QueueUnput( *pQ ); + return 1; + } + return 0; +} + +BYTE QueueGet( Queue *pQ, BYTE *pbyData ) +{ + BYTE byData = 0; + + if ( QueueCount(pQ) ) + { + _QueueGet( *pQ, *pbyData ); + } + return byData; +} + +BYTE QueueUnget( Queue *pQ, BYTE byData ) +{ + if ( !QueueFull(pQ) ) + { + _QueueUnget( *pQ, byData ); + return 1; + } + return 0; +} diff --git a/src/libemb/bytequeue.h b/src/libemb/bytequeue.h new file mode 100644 index 0000000..734ee1f --- /dev/null +++ b/src/libemb/bytequeue.h @@ -0,0 +1,112 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * BYTE Queue +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef __EMBEDDED_BYTEQUEUE__ +#define __EMBEDDED_BYTEQUEUE__ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define _QueuePut(Q,D) \ +{ \ + *((Q).pbyBuf+((Q).byFront++)) = (D); \ + (Q).byCount++; \ + if ( (Q).byFront == (Q).bySize ) \ + (Q).byFront = 0; \ +} + +#define _QueueUnput(Q) \ +{ \ + if ( (Q).byFront == 0 ) \ + (Q).byFront = (Q).bySize; \ + *((Q).pbyBuf+(--(Q).byFront)) = (0); \ + (Q).byCount--; \ +} + +#define _QueueGet(Q,D) \ +{ \ + (D) = *((Q).pbyBuf+((Q).byRear++)); \ + (Q).byCount--; \ + if ( (Q).byRear == (Q).bySize ) \ + (Q).byRear = 0; \ +} + +#define _QueueUnget(Q,D) \ +{ \ + if ( (Q).byRear == 0 ) \ + (Q).byRear = (Q).bySize; \ + *((Q).pbyBuf+(--(Q).byRear)) = (D); \ + (Q).byCount++; \ +} + +#define _QueueAlloc(Q,B,N) (Q).pbyBuf=(B);(Q).bySize=(N) +#define _QueueClear(Q) (Q).byCount=(Q).byFront=(Q).byRear=0 +#define _QueueCount(Q) (Q).byCount +#define _QueueSize(Q) (Q).bySize +#define _QueueEmpty(Q) ((Q).byCount==0) +#define _QueueFull(Q) ((Q).byCount>=(Q).bySize) + +#define QueueCount(Q) (Q)->byCount +#define QueueSize(Q) (Q)->bySize +#define QueueEmpty(Q) ((Q)->byCount==0) +#define QueueFull(Q) ((Q)->byCount>=(Q)->bySize) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +typedef struct _Queue { + BYTE byCount; + BYTE byFront; + BYTE byRear; + BYTE bySize; + BYTE *pbyBuf; +} Queue; + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void QueueAlloc( Queue *pQ, BYTE *pbyData, BYTE bySize ); +void QueueClear( Queue *pQ ); + +BYTE QueueGet( Queue *pQ, BYTE *pbyData ); +BYTE QueuePut( Queue *pQ, BYTE *pbyData ); + +BYTE QueueUnget( Queue *pQ, BYTE byData ); +BYTE QueueUnput( Queue *pQ ); + +#ifdef __cpluscplus +} +#endif + +#endif diff --git a/src/libemb/bytestack.c b/src/libemb/bytestack.c new file mode 100644 index 0000000..76f09e5 --- /dev/null +++ b/src/libemb/bytestack.c @@ -0,0 +1,76 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * LIFO Stack (push/pop) +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" +#include "bytestack.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +void StackAlloc( Stack *pS, BYTE *pbyBuf, BYTE bySize ) +{ + _StackAlloc( *pS, pbyBuf, bySize ); +} + +BYTE StackPush( Stack *pS, BYTE *pbyData ) +{ + if ( !StackFull( pS ) ) + { + _StackPush( *pS, *pbyData ); + return 1; + } + return 0; +} + +BYTE StackPop( Stack *pS, BYTE *pbyData ) +{ + if ( StackCount( pS ) ) + { + *pbyData = _StackPop( *pS ); + return 1; + } + return 0; +} + diff --git a/src/libemb/bytestack.h b/src/libemb/bytestack.h new file mode 100644 index 0000000..96d9e98 --- /dev/null +++ b/src/libemb/bytestack.h @@ -0,0 +1,81 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * BYTE Stack +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef __EMBEDDED_BYTESTACK__ +#define __EMBEDDED_BYTESTACK__ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +#define _StackPush(S,D) \ + if ( (S).byCount < (S).bySize ) \ + *((S).pbyBuf+((S).byCount++)) = (D); + +#define _StackPop(S) ((S).byCount ? *((S).pbyBuf+(--(S).byCount)) : 0) + +#define _StackAlloc(S,B,N) (S).pbyBuf=(B);(S).bySize=(N) +#define _StackClear(S) (S).byCount=0 +#define _StackCount(S) (S).byCount +#define _StackSize(S) (S).bySize +#define _StackEmpty(S) ((S).byCount==0) +#define _StackFull(S) ((S).byCount>=(S).bySize) + +#define StackClear(S) (S)->byCount=0 +#define StackCount(S) (S)->byCount +#define StackSize(S) (S)->bySize +#define StackEmpty(S) ((S)->byCount==0) +#define StackFull(S) ((S)->byCount>=(S)->bySize) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +typedef struct _Stack { + BYTE byCount; + BYTE bySize; + BYTE *pbyBuf; +} Stack; + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void StackAlloc( Stack *pS, BYTE *pbyBuf, BYTE bySize ); + +BYTE StackPush( Stack *pS, BYTE *pbyData ); +BYTE StackPop( Stack *pS, BYTE *pbyData ); + +#ifdef __cpluscplus +} +#endif + +#endif diff --git a/src/libemb/chksum16.c b/src/libemb/chksum16.c new file mode 100644 index 0000000..743fdc2 --- /dev/null +++ b/src/libemb/chksum16.c @@ -0,0 +1,66 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * 16 bit Intel checksum + * Sum of data bytes + checksum = 0 + *****************************************************************************/ + +/***************************************************************************** + * includes + *****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines + *****************************************************************************/ + +/***************************************************************************** + * macros + *****************************************************************************/ + +/***************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/***************************************************************************** + * global constants + *****************************************************************************/ + +/***************************************************************************** + * global variables + *****************************************************************************/ + +/***************************************************************************** + * static constants + *****************************************************************************/ + +/***************************************************************************** + * static variables + *****************************************************************************/ + +/***************************************************************************** + * static prototypes + *****************************************************************************/ + +/***************************************************************************** + * C functions + *****************************************************************************/ + +/** + * \brief Intel style checksum 16 bits + * + * \param pbyData Pointer to data + * \param nBytes Number of bytes + * \return byCheckSum + */ +WORD doWordCheckSum( const BYTE *pbyData, WORD nBytes ) +{ + WORD wCheckSum = 0; + + while ( nBytes-- ) + wCheckSum += *pbyData++; + return wCheckSum; +} diff --git a/src/libemb/chksum8.c b/src/libemb/chksum8.c new file mode 100644 index 0000000..d3071a3 --- /dev/null +++ b/src/libemb/chksum8.c @@ -0,0 +1,66 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *---------------------------------------------------------------------------- + * 8 bit Intel checksum + * Sum of data bytes + checksum = 0 + *****************************************************************************/ + +/***************************************************************************** + * includes + *****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines + *****************************************************************************/ + +/***************************************************************************** + * macros + *****************************************************************************/ + +/***************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/***************************************************************************** + * global constants + *****************************************************************************/ + +/***************************************************************************** + * global variables + *****************************************************************************/ + +/***************************************************************************** + * static constants + *****************************************************************************/ + +/***************************************************************************** + * static variables + *****************************************************************************/ + +/***************************************************************************** + * static prototypes + *****************************************************************************/ + +/***************************************************************************** + * C functions + *****************************************************************************/ + +/** + * \brief Intel style checksum + * + * \param pbyData Pointer to data + * \param nBytes Number of bytes + * \return byCheckSum + */ +BYTE doByteCheckSum( const BYTE *pbyData, BYTE nBytes ) +{ + BYTE byCheckSum = 0; + + while ( nBytes-- ) + byCheckSum += *pbyData++; + return byCheckSum; +} diff --git a/src/libemb/chomp.c b/src/libemb/chomp.c new file mode 100644 index 0000000..bccb4a6 --- /dev/null +++ b/src/libemb/chomp.c @@ -0,0 +1,18 @@ +#include "strlib.h" + +int chomp (char *s) +{ + char c; + int end = strlen(s) - 1; + + while (end >= 0 && (c = *(s+end)) ) + { + if ( c=='\r' || c=='\n' ) + *(s+end) = '\0'; + else + break; + end--; + } + return end+1; +} + diff --git a/src/libemb/crc16.c b/src/libemb/crc16.c new file mode 100644 index 0000000..5a641f7 --- /dev/null +++ b/src/libemb/crc16.c @@ -0,0 +1,131 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * CCITT 16 bit CRC (x^16 + x^12 + x^5 + 1) + *****************************************************************************/ + +/***************************************************************************** + * includes + *****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines + *****************************************************************************/ + +/***************************************************************************** + * macros + *****************************************************************************/ + +/***************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/***************************************************************************** + * global constants + *****************************************************************************/ + +/***************************************************************************** + * global variables + *****************************************************************************/ + +/***************************************************************************** + * static constants + *****************************************************************************/ + +/* + * This table is for generating the following CRC: + * + * X25 standard: 1021 hex [CRC-CCITT, ADCCP, SDLC/HDLC] + */ + +static const WORD s_wCRC16Table[256] = +{ + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, + 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, + 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, + 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, + 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, + + 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, + 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, + 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, + 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, + 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, + 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, + 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, + + 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, + 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, + 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, + 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, + 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, + 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, + 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, + 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, + 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, + 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 +}; + +/***************************************************************************** + * static variables + *****************************************************************************/ + +/***************************************************************************** + * static prototypes + *****************************************************************************/ + +/***************************************************************************** + * C functions + *****************************************************************************/ + +/** + * \brief CCITT 16 bit CRC (x^16 + x^12 + x^5 + 1) + * + * \param wCrc Current CRC + * \param byData Next byte + * \returns wCrc + * + */ +WORD doCRC16( WORD wCrc, BYTE byData ) +{ + return (wCrc << 8) ^ s_wCRC16Table[(BYTE) (wCrc >> 8) ^ byData]; +} + +/** + * \brief CCITT 16 bit CRC (x^16 + x^12 + x^5 + 1) + * + * \param pbyData Pointer to data + * \param nBytes Number of bytes + * \param wInit Initial CRC + * \returns wCrc + * + */ +WORD strCRC16( BYTE *pbyData, WORD nBytes, WORD wInit) +{ + WORD wCrc; + + /* Some initial values may have blind spots. */ + wCrc = wInit; + + while ( nBytes-- ) + { + wCrc = doCRC16( wCrc, *pbyData++ ); + } + + return wCrc; +} diff --git a/src/libemb/crc32.c b/src/libemb/crc32.c new file mode 100644 index 0000000..d792ddb --- /dev/null +++ b/src/libemb/crc32.c @@ -0,0 +1,145 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * 32 bit + *****************************************************************************/ + +/***************************************************************************** + * includes + *****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines + *****************************************************************************/ + +/***************************************************************************** + * macros + *****************************************************************************/ + +/***************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/***************************************************************************** + * global constants + *****************************************************************************/ + +/***************************************************************************** + * global variables + *****************************************************************************/ + +/***************************************************************************** + * static constants + *****************************************************************************/ + +// CRCTable generator polynomial is: +// X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0 +// as specified in the Autodin/Ethernet/ADCCP protocol standards. +static const DWORD s_dwCRC32Table[ 256 ] = +{ + 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, + 0x17c56b6b, 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, + 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, + 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, + 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, + 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, + 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, + 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, + 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, + 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, + 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, + 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, + 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, + 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, + 0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, + 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, + 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, + 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, + 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, + 0x40d816ba, 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, + 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, + 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, + 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, + 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, + 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, + 0xd1799b34, 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, + 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, + 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, + 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, + 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, + 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, + 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, + 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, + 0xe6ea3d65, 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, + 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, + 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, + 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, + 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, + 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, + 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, + 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, + 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, + 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, + 0x0fdc1bec, 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, + 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, + 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, + 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, + 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, + 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, + 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, + 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, + 0xb1f740b4 +}; + +/***************************************************************************** + * static variables + *****************************************************************************/ + +/***************************************************************************** + * static prototypes + *****************************************************************************/ + +/***************************************************************************** + * C functions + *****************************************************************************/ + +/** + * \brief CCITT 32 bit CRC (X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0) + * + * \param wCrc Current CRC + * \param byData Next byte + * \returns wCrc + * + */ +DWORD doCRC32( DWORD dwCrc, BYTE byData ) +{ + return (dwCrc << 8) ^ s_dwCRC32Table[(BYTE) (dwCrc >> 24) ^ byData]; +} + +/** + * \brief CCITT 32 bit CRC (X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0) + * + * \param pbyData Pointer to data + * \param nBytes Number of bytes + * \param wInit Initial CRC + * \returns wCrc + * + */ +BYTE strCRC32(BYTE *pbyData, WORD nBytes, BYTE byInit) +{ + DWORD dwCrc = 0; + + /* Some initial values may have blind spots. */ + dwCrc = byInit; + + while ( nBytes-- ) + { + dwCrc = doCRC32( dwCrc, *pbyData++); + } + + return dwCrc; +} diff --git a/src/libemb/crc8.c b/src/libemb/crc8.c new file mode 100644 index 0000000..5dc87bc --- /dev/null +++ b/src/libemb/crc8.c @@ -0,0 +1,121 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * 8 bit CRC x^8 + x^2 + x + 1 (100000111b) + *****************************************************************************/ + +/***************************************************************************** + * includes + *****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines + *****************************************************************************/ + +/***************************************************************************** + * macros + *****************************************************************************/ + +/***************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/***************************************************************************** + * global constants + *****************************************************************************/ + +/***************************************************************************** + * global variables + *****************************************************************************/ + +/***************************************************************************** + * static constants + *****************************************************************************/ + +static const BYTE s_byCRC8Table[256] = { + 0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15, + 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D, + 0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65, + 0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D, + 0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5, + 0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD, + 0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85, + 0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD, + 0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2, + 0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA, + 0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2, + 0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A, + 0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32, + 0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A, + 0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42, + 0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A, + 0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C, + 0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4, + 0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC, + 0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4, + 0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C, + 0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44, + 0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C, + 0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34, + 0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B, + 0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63, + 0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B, + 0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13, + 0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB, + 0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83, + 0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB, + 0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3, +}; + +/***************************************************************************** + * static variables + *****************************************************************************/ + +/***************************************************************************** + * static prototypes + *****************************************************************************/ + +/***************************************************************************** + * C functions + *****************************************************************************/ + +/** + * \brief CCITT 8 bit CRC (x^8 + x^2 + x + 1) + * + * \param wCrc Current CRC + * \param byData Next byte + * \returns wCrc + * + */ +BYTE doCRC8( BYTE byCrc, BYTE byData ) +{ + return s_byCRC8Table[byCrc ^ byData]; +} + +/** + * \brief CCITT 16 bit CRC (x^8 + x^2 + x + 1) + * + * \param pbyData Pointer to data + * \param nBytes Number of bytes + * \param wInit Initial CRC + * \returns wCrc + * + */ +BYTE strCRC8(BYTE *pbyData, WORD nBytes, BYTE byInit) +{ + BYTE byCrc; + + /* Some initial values may have blind spots. */ + byCrc = byInit; + + while ( nBytes-- ) + { + byCrc = s_byCRC8Table[byCrc ^ *pbyData++]; + } + + return byCrc; +} diff --git a/src/libemb/crctest.c b/src/libemb/crctest.c new file mode 100644 index 0000000..92df782 --- /dev/null +++ b/src/libemb/crctest.c @@ -0,0 +1,12 @@ +#include +#include "types.h" + +main() +{ + WORD w = 0; + + w = doCRC16( &w, 0 ); + + printf( "CRC = %04x\n", w ); +} + diff --git a/src/libemb/emblib.h b/src/libemb/emblib.h new file mode 100644 index 0000000..57fff15 --- /dev/null +++ b/src/libemb/emblib.h @@ -0,0 +1,74 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Multiplatform Embedded Data Types and Conversion + * Checksum and CRC Routines +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _EMBLIB_H_ +#define _EMBLIB_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/* useful one to have */ +#define bin2bcd(d) (((((d)/10)<<4|(d)%10))) +#define bcd2bin(b) ((((b)>>4)*10)+((b)&0xf)) + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +int chomp(char *s); +void base64(const unsigned char *in, char *out, int len); +int unbase64(const char *in, unsigned char *out, int max); + +extern BYTE doCheckSum( const BYTE *pbyData, BYTE nBytes ); +extern WORD doCheckSumW( const WORD *pwData, WORD nBytes ); + +extern BYTE doCRC8( BYTE byCrc, BYTE byData ); +extern BYTE strCRC8( BYTE *pbyData, WORD nBytes, BYTE byInit ); + +extern WORD doCRC16( WORD wCrc, BYTE byData ); +extern WORD strCRC16( BYTE *pbyData, WORD nBytes, WORD wInit ); + +short InterpolateShortTable( const short *psTbl, BYTE nPairs, short sData ); +long InterpolateLongTable( const long *plTbl, BYTE nPairs, long lData ); + +BYTE reverseByteBits(BYTE b); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/libemb/embstruct.h b/src/libemb/embstruct.h new file mode 100644 index 0000000..a528a25 --- /dev/null +++ b/src/libemb/embstruct.h @@ -0,0 +1,47 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Multiplatform Embedded Data Types and Conversion + * Checksum and CRC Routines +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _EMBSTRUCT_H_ +#define _EMBSTRUCT_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" + +#include "bytequeue.h" +#include "bytestack.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ + +#endif diff --git a/src/libemb/embtypes.h b/src/libemb/embtypes.h new file mode 100644 index 0000000..1de462e --- /dev/null +++ b/src/libemb/embtypes.h @@ -0,0 +1,260 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Multiplatform Embedded Data Types and Conversion + * Checksum and CRC Routines +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _EMBTYPES_H_ +#define _EMBTYPES_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include +#ifdef __linux__ +#include +#endif + +/***************************************************************************** + * defines +*****************************************************************************/ + +#ifndef NULL +#define NULL 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif +#ifndef ON +#define ON 1 +#define OFF 0 +#endif + +#ifdef __linux__ +/* take out those keywords */ +#define interrupt +#define near +#define far +#endif + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +// data types +#ifdef __linux__ +typedef unsigned char bit; +#else +typedef bit BOOL; +#endif + +// ProbeStar Standard +typedef int8_t CHAR; +typedef int16_t SHORT; +typedef int INT; +typedef int32_t LONG; +typedef int64_t LLONG; +typedef uint8_t BYTE; +typedef uint16_t WORD; +typedef uint UINT; +typedef uint32_t DWORD; +typedef uint64_t QWORD; + +#ifdef BIG_ENDIAN + +typedef union +{ + WORD w; + SHORT s; + struct + { + BYTE h; + BYTE l; + } b; + BYTE c[2]; +} __attribute__((__packed__)) short_word; + +typedef union +{ + DWORD dw; + LONG l; + struct + { + WORD h; + WORD l; + } w; + short s[2]; + struct + { + short_word h; + short_word l; + } sw; + struct + { + BYTE hh; + BYTE hl; + BYTE lh; + BYTE ll; + } b; + BYTE c[4]; +} __attribute__((__packed__)) long_dword; + +typedef union +{ + QWORD qw; + LLONG ll; + struct + { + DWORD h; + DWORD l; + } dw; + long l[2]; + struct + { + WORD hh; + WORD hl; + WORD lh; + WORD ll; + } w; + short s[4]; + struct + { + short_word hh; + short_word hl; + short_word lh; + short_word ll; + } sw; + struct + { + BYTE hhh; + BYTE hhl; + BYTE hlh; + BYTE hll; + BYTE lhh; + BYTE lhl; + BYTE llh; + BYTE lll; + } b; + BYTE c[8]; +} __attribute__((__packed__)) llong_qword; + +#elif defined(LITTLE_ENDIAN) + +// new +typedef union +{ + WORD w; + SHORT s; + struct + { + BYTE l; + BYTE h; + } b; + BYTE c[2]; +} __attribute__((__packed__)) short_word; + +typedef union +{ + DWORD dw; + LONG l; + struct + { + WORD l; + WORD h; + } w; + short s[2]; + struct + { + short_word l; + short_word h; + } sw; + struct + { + BYTE ll; + BYTE lh; + BYTE hl; + BYTE hh; + } b; + BYTE c[4]; +} __attribute__((__packed__)) long dword; + +typedef union +{ + QWORD qw; + LLONG ll; + struct + { + DWORD l; + DWORD h; + } dw; + long l[2]; + struct + { + WORD ll; + WORD lh; + WORD hl; + WORD hh; + } w; + short s[4]; + struct + { + short_word ll; + short_word lh; + short_word hl; + short_word hh; + } sw; + struct + { + BYTE lll; + BYTE llh; + BYTE lhl; + BYTE lhh; + BYTE hll; + BYTE hlh; + BYTE hhl; + BYTE hhh; + } b; + BYTE c[8]; +} __attribute__((__packed__)) llong_qword; + +#endif + +typedef union +{ + BYTE byte; + struct { + unsigned b0:1; + unsigned b1:1; + unsigned b2:1; + unsigned b3:1; + unsigned b4:1; + unsigned b5:1; + unsigned b6:1; + unsigned b7:1; + } bits; +} byte_bits; + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ + +#endif diff --git a/src/libemb/interplong.c b/src/libemb/interplong.c new file mode 100644 index 0000000..85b852a --- /dev/null +++ b/src/libemb/interplong.c @@ -0,0 +1,99 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Long Interpolation Table +*****************************************************************************/ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * static constants +*****************************************************************************/ + +/***************************************************************************** + * static variables +*****************************************************************************/ + +/***************************************************************************** + * static prototypes +*****************************************************************************/ + +/***************************************************************************** + * C functions +*****************************************************************************/ + +/** + * \brief Long Integer Interpolation Table + * + * \param plTbl Pointer to table + * \param nPairs Size of table + * \param lData Value to interpolate + * \return + */ +long InterpolateLongTable( const long *plTbl, BYTE nPairs, long lData ) +{ + BYTE i; + long lLow; + long lHigh; + long lRes; + + // # entries to # pairs + nPairs /= 2; + + // lookup in table + if ( lData <= *plTbl ) + { + // low limit + lRes = *(plTbl+1); + } + else if ( lData >= *(plTbl+(nPairs-1)*2) ) + { + // high limit + lRes = *(plTbl+(nPairs-1)*2); + } + else + { + // search for points to interpolate between + for ( i = 0; i < nPairs-1; i++ ) + { + // check range + lLow = *plTbl; + lHigh = *(plTbl+2); + + if ( lLow <= lData && lData < lHigh ) + break; + plTbl += 2; + } + + // interpolate + lRes = *(plTbl+1) + (((lData - lLow) * (*(plTbl+3) - *(plTbl+1))) / (lHigh - lLow)); + } + + return lRes; +} diff --git a/src/libemb/interpshort.c b/src/libemb/interpshort.c new file mode 100644 index 0000000..3572bb6 --- /dev/null +++ b/src/libemb/interpshort.c @@ -0,0 +1,100 @@ +/***************************************************************************** + * Copyright (C) 2004-2005 + * ProbeStar Technical Systems, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Short Interpolation Table + *****************************************************************************/ + +/***************************************************************************** + * includes + *****************************************************************************/ + +#include "embtypes.h" + +/***************************************************************************** + * defines + *****************************************************************************/ + +/***************************************************************************** + * macros + *****************************************************************************/ + +/***************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/***************************************************************************** + * global constants + *****************************************************************************/ + +/***************************************************************************** + * global variables + *****************************************************************************/ + +/***************************************************************************** + * static constants + *****************************************************************************/ + +/***************************************************************************** + * static variables + *****************************************************************************/ + +/***************************************************************************** + * static prototypes + *****************************************************************************/ + +/***************************************************************************** + * C functions + *****************************************************************************/ + +/** + * \brief Short Integer Interpolation Table + * + * \param psTbl Pointer to table + * \param nPairs Size of table + * \param sData Value to interpolate + * \return + */ +short InterpolateShortTable( const short *psTbl, BYTE nPairs, short sData ) +{ + BYTE i; + short sLow; + short sHigh; + short sRes; + + // # entries to # pairs + nPairs /= 2; + + // lookup in table + if ( sData <= *psTbl ) + { + // low limit + sRes = *(psTbl+1); + } + else if ( sData >= *(psTbl+(nPairs-1)*2) ) + { + // high limit + sRes = *(psTbl+(nPairs-1)*2); + } + else + { + // search for points to interpolate between + for ( i = 0; i < nPairs-1; i++ ) + { + // check range + sLow = *psTbl; + sHigh = *(psTbl+2); + + if ( sLow <= sData && sData < sHigh ) + break; + psTbl += 2; + } + + // interpolate + sRes = *(psTbl+1) + (short)(((long)(sData - sLow) * ((long)*(psTbl+3) - (long)*(psTbl+1))) / (long)(sHigh - sLow)); + } + + return sRes; +} + diff --git a/src/libgps++/ApplanixParser.cpp b/src/libgps++/ApplanixParser.cpp new file mode 100644 index 0000000..8ce80a5 --- /dev/null +++ b/src/libgps++/ApplanixParser.cpp @@ -0,0 +1,181 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "GpsListener.h" +#include "ApplanixParser.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +#pragma pack(1) + +// data is little endian +typedef struct ApplanixPAST2 { + uint16_t Header; + int64_t Time; // UTC seconds + int16_t Roll; + int16_t Pitch; + int16_t Heading; // 0..359.99, 0.01 deg + int32_t Latitude; // -90..+90, 0.001 arcsec + int32_t Longitude; // -180..+180, 0.001 arcsec + int32_t Altitude; // -1000..20000m, 0.01 meters + uint16_t Speed; // 0..300 m/sec, 0.01 m/sec + uint16_t Track; // 0..359.99, 0.01 deg + uint16_t LongAccel; // 0.0005 m/sec2 + uint16_t TranAccel; // 0.0005 m/sec2 + uint16_t DownAccel; // 0.0005 m/sec2 + uint16_t Checksum; +} PAST2; + +#pragma pack(0) + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +ApplanixParser::ApplanixParser() +{ + strcpy( Vendor, "Applanix" ); + strcpy( Product, "POS LV" ); + state = 0; +} + +ApplanixParser::~ApplanixParser() +{ +} + +int ApplanixParser::ApplanixDecode( const u_char *buf, int max ) +{ + int posflag = 0; + int timeflag = 0; + + // if we are big endian, we need to swab the decks + + // decode message + + // post data + if ( timeflag || posflag ) + { + // call listeners + for ( u_int i=0 ; iTimeListener( PosData.TimeStamp ); + if ( posflag ) + GpsListeners[i]->PositionListener( PosData, ErrInfo ); + } + } + + return posflag + timeflag; +} + +int ApplanixParser::ApplanixParse( const char *buf, int max ) +{ + int n = 0; + + if ( *buf == '$' ) + return NmeaParse( buf, max ); + + while ( max-- ) + { + u_char c = (u_char) *buf++; + + switch ( state ) + { + case 0: + // header + if ( c == 0x00 ) + state++; + break; + case 1: + if ( c == 0x96 && lastc == 0x00 ) + { + data[0] = lastc; + data[1] = c; + numbytes = 2; + totbytes = 40; + checksum = 0; + state++; + } + else + state = 0; // error + break; + case 2: + // data + if ( numbytes < totbytes ) + { + if ( numbytes < sizeof(data) ) + data[numbytes++] = c; + checksum += c; + } + else + state++; + break; + case 3: + state++; + case 5: + // checksum + if ( checksum == ((lastc | (c << 8)) & 0x7fff) ) + { + if ( ApplanixDecode( data, numbytes ) ) + { + counter++; + n++; + } + state++; + } + state = 0; // start over + break; + default: + // done + state = 0; + break; + } + + lastc = c; + } + + return n; +} diff --git a/src/libgps++/ApplanixParser.h b/src/libgps++/ApplanixParser.h new file mode 100644 index 0000000..9834bd5 --- /dev/null +++ b/src/libgps++/ApplanixParser.h @@ -0,0 +1,62 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __ApplanixParser__ +#define __ApplanixParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaParser.h" +#include "NmeaProtocol.h" +//#include "ApplanixProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +class ApplanixParser : public NmeaParser { + // public data +public: + + // protected data +protected: + + // private data +private: + // data + u_char state; // parser state + + // private methods + + // public methods +public: + // constructors + ApplanixParser(); + + // destructor + virtual ~ApplanixParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return ApplanixDecode( (const u_char *)buf, max); }; + int GpsParse( const char *buf, int max ) { return ApplanixParse( buf, max ); }; + + // public methods + int ApplanixDecode( const u_char *buf, int max ); + int ApplanixParse( const char *buf, int max ); +}; + +#endif diff --git a/src/libgps++/CMakeLists.txt b/src/libgps++/CMakeLists.txt new file mode 100644 index 0000000..7d4d70a --- /dev/null +++ b/src/libgps++/CMakeLists.txt @@ -0,0 +1,78 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME gps++) +set(TARGET lib${NAME}) +project(Cnomicon-${TARGET}) +set(CMAKE_INSTALL_PREFIX ..) +set(LIBRARY ${TARGET}) + +# list of header files +set(LIBH + ApplanixParser.h + DgpsClient.h + FastraxParser.h + GarminParser.h + GpsdClient.h + GpsDevice.h + GpsListener.h + GpsMath.h + GpsParser.h + GpsPoint.h +# GpsTrack.h +# KmlFile.h + NmeaParser.h + NmeaProtocol.h + NmeaSentence.h + NtripClient.h + RtcmDevice.h + SirfParser.h + SirfProtocol.h + UbloxParser.h + ) + +# list of source files +set(LIBSRC + ApplanixParser.cpp + DgpsClient.cpp + FastraxParser.cpp + GarminParser.cpp + GpsdClient.cpp + GpsDevice.cpp + GpsListener.cpp + GpsMath.cpp + GpsParser.cpp + GpsPoint.cpp +# GpsTrack.cpp +# KmlFile.cpp + NmeaParser.cpp + NmeaProtocol.cpp + NmeaSentence.cpp + NtripClient.cpp + RtcmDevice.cpp + SirfParser.cpp + SirfProtocol.cpp + UbloxParser.cpp + ) + +# includes +include_directories(../include/libnet++ ../include) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) + +# this is the "object library" target: compiles the sources only once +add_library(${LIBRARY} OBJECT ${LIBSRC}) + +# shared libraries need PIC +set_property(TARGET ${LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE 1) + +# shared and static libraries built from the same object files +add_library(${LIBRARY}-shared SHARED $) +add_library(${LIBRARY}-static STATIC $) + +# output file names +set_target_properties(${LIBRARY}-shared PROPERTIES OUTPUT_NAME ${NAME}) +set_target_properties(${LIBRARY}-static PROPERTIES OUTPUT_NAME ${NAME}) + +# installations +install (FILES ${LIBH} DESTINATION include/${TARGET}) +#install (FILES lib${NAME}.a lib${NAME}.so DESTINATION lib) diff --git a/src/libgps++/DgpsClient.cpp b/src/libgps++/DgpsClient.cpp new file mode 100644 index 0000000..e5941bc --- /dev/null +++ b/src/libgps++/DgpsClient.cpp @@ -0,0 +1,108 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "DgpsClient.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +DgpsClient::DgpsClient() +{ + count = 0; +} + +DgpsClient::~DgpsClient() +{ +} + +int DgpsClient::DgpsConnect( const char *host, const char *service ) +{ + if ( !host ) + host = "localhost"; + + // close existing + Close(); + + /* tell GPSd to emit raw records */ + if ( Connect( host, service ) >= 0 ) + { + char buf[80]; + + // so server doesn't close up + snprintf( buf, sizeof(buf), "HELO %s %s %s\r\n", GetHostName(), "nGPSd", "1.0" ); + Send( buf, strlen(buf) ); + + log_printf( "Connected to RTCMd server %s:%s", host, service ); + } + return GetSocket(); +} + +int DgpsClient::DgpsRead( char *buf, int max ) +{ + if ( !buf ) + return -1; + + int n = Recv( buf, max ); + + // xmit + if ( n == 0 ) + log_error( "Remote RTCM server closed!" ); + else + count++; + return n; +} + +int DgpsClient::DgpsWrite( const char *msg, int max ) +{ + return Send( msg, max ); +} diff --git a/src/libgps++/DgpsClient.h b/src/libgps++/DgpsClient.h new file mode 100644 index 0000000..6ea7d6f --- /dev/null +++ b/src/libgps++/DgpsClient.h @@ -0,0 +1,56 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __DgpsClient__ +#define __DgpsClient__ + +/* includes *****************************************************************/ + +#include "TcpClient.h" +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + + +/* c class definitions ******************************************************/ + +class DgpsClient : public TcpClient { + // public data +public: + + // protected data +protected: + + // private data +private: + unsigned long count; + + // private methods + + // static data + + // public methods +public: + // constructors + DgpsClient(); + + // destructor + virtual ~DgpsClient(); + + // virtual functions + + // public methods + int DgpsConnect( const char *host, const char *service ); + void DgpsClose(void) {Close();}; + + int DgpsRead( char *buf, int max ); + int DgpsWrite( const char *buf, int max ); +}; + +#endif diff --git a/src/libgps++/FastraxParser.cpp b/src/libgps++/FastraxParser.cpp new file mode 100644 index 0000000..f7c70db --- /dev/null +++ b/src/libgps++/FastraxParser.cpp @@ -0,0 +1,125 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "GpsListener.h" +#include "NmeaParser.h" +#include "FastraxParser.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +FastraxParser::FastraxParser() +{ + strcpy( Vendor, "Fastrax" ); + strcpy( Product, "iTrax03" ); + NmeaPosFix( "$PFST" ); // Parvus OBE + + // iTrax + NmeaSentences.push_back( &PFST ); +} + +FastraxParser::~FastraxParser() +{ +} + +int FastraxParser::FastraxDecode( const u_char *buf, int max ) +{ + int posflag = 0; + int timeflag = 0; + + switch( *buf ) + { + case '$': + return NmeaDecode( (const char *)buf, max ); + break; + } + + return posflag + timeflag; +} + +int FastraxParser::FastraxParse( const char *buf, int max ) +{ + if ( *buf == '$' ) + return NmeaParse( (const char *)buf, max ); + + return 0; +} + +// Fastrax iTrax03************************************************************ + +NmeaSentencePFST::NmeaSentencePFST() +{ + strcpy( name, "PFST" ); + argc = 3; +} + +NmeaSentencePFST::~NmeaSentencePFST() +{ +} + +int NmeaSentencePFST::Decode( int argc, char *argv[] ) +{ + // TBD + strncpy( msg, argv[1], sizeof(msg) ); + + if ( strcmp( msg, "FOM" ) == 0 ) + { + } + else if ( strcmp( msg, "PPS" ) == 0 ) + { + } + else + return 0; + + return 1; +} + +void NmeaSentencePFST::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ +} + diff --git a/src/libgps++/FastraxParser.h b/src/libgps++/FastraxParser.h new file mode 100644 index 0000000..9dbe086 --- /dev/null +++ b/src/libgps++/FastraxParser.h @@ -0,0 +1,73 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __FastraxParser__ +#define __FastraxParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaParser.h" +#include "NmeaProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// Fastrax iTrax03 +class NmeaSentencePFST : public NmeaSentence { +public: + char msg[4]; + + NmeaSentencePFST(); + ~NmeaSentencePFST(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class FastraxParser : public NmeaParser { + // public data +public: + + // protected data +protected: + // Fastrax iTrax03 + NmeaSentencePFST PFST; + + // private data +private: + // data + + // private methods + + // public methods +public: + // constructors + FastraxParser(); + + // destructor + virtual ~FastraxParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return FastraxDecode( (const u_char *)buf, max); }; + int GpsParse( const char *buf, int max ) { return FastraxParse( buf, max ); }; + + // public methods + int FastraxDecode( const u_char *buf, int max ); + int FastraxParse( const char *buf, int max ); +}; + +#endif diff --git a/src/libgps++/GarminParser.cpp b/src/libgps++/GarminParser.cpp new file mode 100644 index 0000000..e32176f --- /dev/null +++ b/src/libgps++/GarminParser.cpp @@ -0,0 +1,198 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "GpsListener.h" +#include "NmeaSentence.h" +#include "GarminParser.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +GarminParser::GarminParser() +{ + strcpy( Vendor, "Garmin" ); + strcpy( Product, "All" ); + + // Garmin + NmeaSentences.push_back( &PGRME ); + NmeaSentences.push_back( &PGRMF ); + // NmeaSentences.push_back( &PGRMM ); // not useful +} + +GarminParser::~GarminParser() +{ +} + + +int GarminParser::GarminDecode( const u_char *buf, int max ) +{ + int posflag = 0; + int timeflag = 0; + + // decode message + switch( *buf ) + { + case '$': + return NmeaDecode( (const char *)buf, max ); + break; + } + + return posflag + timeflag; +} + +int GarminParser::GarminParse( const char *buf, int max ) +{ + if ( *buf == '$' ) + return NmeaParse( (const char *)buf, max ); + + return 0; +} + +// Garmin PGRME ************************************************************** + +NmeaSentencePGRME::NmeaSentencePGRME() +{ + strcpy( name, "PGRME" ); + argc = 7; +} + +NmeaSentencePGRME::~NmeaSentencePGRME() +{ +} + +int NmeaSentencePGRME::Decode( int argc, char *argv[] ) +{ + horizontal = atof( argv[1] ); + strncpy( horizontal_unit, argv[2], sizeof(horizontal_unit) ); + + vertical = atof( argv[3] ); + strncpy( vertical_unit, argv[4], sizeof(vertical_unit) ); + + three_dimensions = atof( argv[5] ); + strncpy( three_dimensions_unit, argv[6], sizeof(three_dimensions) ); + + return 1; +} + +void NmeaSentencePGRME::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ +} + +// Garmin PGRMF ************************************************************** + +NmeaSentencePGRMF::NmeaSentencePGRMF() +{ + strcpy( name, "PGRMF" ); + argc = 16; +} + +NmeaSentencePGRMF::~NmeaSentencePGRMF() +{ +} + +int NmeaSentencePGRMF::Decode( int argc, char *argv[] ) +{ + week = atoi( argv[1] ); + seconds = atoi( argv[2] ); + utctime = timestamp = DecodeTime( argv[3], argv[4] ); + leap = atoi( argv[5] ); + latitude = DecodeCoordinate( argv[6], argv[7] ); + longitude = DecodeCoordinate( argv[8], argv[9] ); + mode = *argv[10]; + type = atoi( argv[11] ) + 1; + speed = atof( argv[12] ); + course = atof( argv[13] ); + position_dilution = atof( argv[14] ); + time_dilution = atof( argv[15] ); + + return 1; +} + +void NmeaSentencePGRMF::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ + // Garmins don't send these out by default + if ( type >= NMEA_TYPE_2D ) + { + PosData.Fix = NMEA_FIX_GPS; + PosData.Mode = mode; + PosData.Type = type; + PosData.TimeStamp = utctime; + PosData.Latitude = latitude; + PosData.Longitude = longitude; + PosData.Heading = course; + PosData.Speed = speed * 1000.0 / 3600.0; // kph -> m/sec + ErrInfo.PositionDilution = position_dilution; + ErrInfo.TimeDilution = time_dilution; + + // could use instead of $GPRMC + } +} + +// Garmin PGRME ************************************************************** + +NmeaSentencePGRMM::NmeaSentencePGRMM() +{ + strcpy( name, "PGRMM" ); + argc = 2; +} + +NmeaSentencePGRMM::~NmeaSentencePGRMM() +{ +} + +int NmeaSentencePGRMM::Decode( int argc, char *argv[] ) +{ + memcpy( datum, argv[1], sizeof(datum) ); + + return 1; +} + +void NmeaSentencePGRMM::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ +} diff --git a/src/libgps++/GarminParser.h b/src/libgps++/GarminParser.h new file mode 100644 index 0000000..a982c34 --- /dev/null +++ b/src/libgps++/GarminParser.h @@ -0,0 +1,125 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GarminParser__ +#define __GarminParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaParser.h" +#include "NmeaProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + + +// Garmin +class NmeaSentencePGRME : public NmeaSentence { +public: + float horizontal; + char horizontal_unit[4]; + float vertical; + char vertical_unit[4]; + float three_dimensions; + char three_dimensions_unit[4]; + + NmeaSentencePGRME(); + ~NmeaSentencePGRME(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentencePGRMF : public NmeaSentence { +public: + int week; + int seconds; + struct timespec utctime; + int leap; + double latitude; + double longitude; + char mode; + int type; + double speed; + double course; + double position_dilution; + double time_dilution; + + NmeaSentencePGRMF(); + ~NmeaSentencePGRMF(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentencePGRMM : public NmeaSentence { +public: + char datum[256]; + + NmeaSentencePGRMM(); + ~NmeaSentencePGRMM(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentencePGRMZ : public NmeaSentence { +public: + + NmeaSentencePGRMZ(); + ~NmeaSentencePGRMZ(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +// main class +class GarminParser : public NmeaParser { + // public data +public: + + // protected data +protected: + // Garmin + NmeaSentencePGRME PGRME; + NmeaSentencePGRMF PGRMF; + NmeaSentencePGRMM PGRMM; + + // private data +private: + // data + + // private methods + + // public methods +public: + // constructors + GarminParser(); + + // destructor + virtual ~GarminParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return GarminDecode( (const u_char *)buf, max); }; + int GpsParse( const char *buf, int max ) { return GarminParse( buf, max ); }; + + // public methods + int GarminDecode( const u_char *buf, int max ); + int GarminParse( const char *buf, int max ); +}; + +#endif diff --git a/src/libgps++/GpsDevice.cpp b/src/libgps++/GpsDevice.cpp new file mode 100644 index 0000000..9efdaa8 --- /dev/null +++ b/src/libgps++/GpsDevice.cpp @@ -0,0 +1,82 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "UriParse.h" +#include "GpsDevice.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +GpsDevice::GpsDevice() +{ +} + +GpsDevice::~GpsDevice() +{ + Close(); +} + +int GpsDevice::GpsOpen( const char *device, int baud ) +{ + // close prior device + Close(); + + // default + if ( !device ) + device = "/dev/gps"; + if ( !baud ) + baud = 38400; + + // non-canonical mode + return Open( device, baud ); +} diff --git a/src/libgps++/GpsDevice.h b/src/libgps++/GpsDevice.h new file mode 100644 index 0000000..1278cea --- /dev/null +++ b/src/libgps++/GpsDevice.h @@ -0,0 +1,52 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GpsDevice__ +#define __GpsDevice__ + +/* includes *****************************************************************/ + +#include "netlib.h" + +#include "SerialIO.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class GpsDevice : public SerialIO { + // public data +public: + // parser + + // protected data +protected: + + // private data +private: + // private methods + + // public methods +public: + // constructors + GpsDevice(); + + // destructor + virtual ~GpsDevice(); + + // virtual functions + + // public methods + int GpsOpen( const char *dev, int baud=38400 ); + int GpsRead( char *buf, int max ) {return Read(buf,max); }; + int GpsWrite( const char *buf, int max ) {return Write(buf,max); }; + void GpsClose(void) { Close(); }; +}; + +#endif diff --git a/src/libgps++/GpsListener.cpp b/src/libgps++/GpsListener.cpp new file mode 100644 index 0000000..21434a7 --- /dev/null +++ b/src/libgps++/GpsListener.cpp @@ -0,0 +1,71 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "GpsListener.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +GpsListener::GpsListener() +{ + PosData.Fix = -1; +} + +GpsListener::~GpsListener() +{ +} + +void GpsListener::PositionListener( const GpsPoint &Pos, const ErrorInfo &Err ) +{ +} + +void GpsListener::TimeListener( const struct timespec &Time ) +{ +} + diff --git a/src/libgps++/GpsListener.h b/src/libgps++/GpsListener.h new file mode 100644 index 0000000..cca448d --- /dev/null +++ b/src/libgps++/GpsListener.h @@ -0,0 +1,95 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GpsListener__ +#define __GpsListener__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsPoint.h" + +/* defines ******************************************************************/ + +#define NMEA_MAX_SATELLITE 32 + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +typedef struct _ErrorInfo { + // GPGSA dilution of precision (DOP) + double PositionDilution; // PDOP + double HorizontalDilution; // HDOP + double VerticalDilution; // VDOP + + // GPGST standard deviation of error + double HorizontalDeviation; // largest + double VerticalDeviation; + + // PUBX-01 + double HorizontalAccuracy; + double VerticalAccuracy; + double TimeDilution; // TDOP +} ErrorInfo; + +typedef struct _SatelliteInfo { + // GPGSV, PUBX-03 + u_int Satellites; + struct { + char Id; + char Status; + double Elevation; + double Azimuth; + double Signal2noise; + } Satellite[NMEA_MAX_SATELLITE]; +} SatelliteInfo; + +/* c class definitions ******************************************************/ + +// +class GpsListener { + // public data +public: + // Position Data + GpsPoint PosData; + + // Accuracy, Dilution, Error + ErrorInfo ErrInfo; + + // Satellite info + SatelliteInfo SatInfo; + + // protected data +protected: + + // private data +private: + + // private methods + + // static data + + // public methods +public: + // constructors + GpsListener(); + + // destructor + virtual ~GpsListener(); + + // virtual functions + virtual void PositionListener( const GpsPoint &Pos, const ErrorInfo &Err ); + virtual void TimeListener( const struct timespec &Time ); + + // public methods + int GpsTime( struct timespec *tv ) {*tv=PosData.TimeStamp;return PosData.Fix;}; + int GpsFix(void) {return PosData.Fix;}; +}; + +#endif diff --git a/src/libgps++/GpsMath.cpp b/src/libgps++/GpsMath.cpp new file mode 100644 index 0000000..e1c29c3 --- /dev/null +++ b/src/libgps++/GpsMath.cpp @@ -0,0 +1,227 @@ +// +// Linux GPS +// +// http://www.movable-type.co.uk/scripts/latlong.html +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "GpsMath.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +GpsMath::GpsMath() +{ +} + +GpsMath::~GpsMath() +{ +} + +//**************************************************************************** +// static methods +//***************************************************************************/ + +timespec GpsMath::String2Time(const char *hhmmss, const char *ddmmyy) +{ + timespec tv; + static struct tm tm; + const char *s; + + // time decode is in UTC, not local time! + strptime( hhmmss, "%H%M%S", &tm ); + s = strchr( hhmmss, '.' ); + if ( s ) + tv.tv_nsec = (long int)(atof(s) * 1000000000.0); + else + tv.tv_nsec = 0; + + // date + if ( ddmmyy ) + { + // adjusted automatically + if ( strlen( ddmmyy ) > 6 ) + strptime( ddmmyy, "%d%m%Y", &tm ); + else + strptime( ddmmyy, "%d%m%y", &tm ); + } + + tv.tv_sec = mktime(&tm); + + return tv; +} + +double GpsMath::Minutes2Degrees(char *value, char *side) +{ + /* decode longitude & latitude from the nmea format (ddmm.mmmmm) + * to the format used by the census bureau (dd.dddddd): + */ + double min; + + // pick apart ddmm.mmmmm or dddmm.mmmmm + int deg = atoi( value ) / 100; + value = strchr( value, '.' ); + if ( value ) + min = atof( value-2 ); + + /* decimal degrees */ + double degrees = (double)deg + (min / 60.0); + + // negative quadrant + if ( side && (*side == 'S' || *side == 'W') ) + degrees *= -1.0; + + return degrees; +} + +void GpsMath::Degrees2Minutes(double degrees, char *buf, int max, bool lat) +{ + int deg; + bool sign; + if ( degrees >= 0.0 ) + { + deg = (int)degrees; + sign = true; + } + else + { + deg = -(int)degrees; + sign = false; + } + + double min = (degrees - (double)deg) * 60.0; + char dir; + + // direction + if ( lat ) + dir = sign ? 'N' : 'S'; + else + dir = sign ? 'E' : 'W'; + + snprintf( buf, max, "%d%f%c", deg, min, dir ); +} + +double GpsMath::Bearing( double lat1, double lon1, double lat2, double lon2 ) +{ + lon1 = DEG2RAD(lon1); + lon2 = DEG2RAD(lon2); + lat1 = DEG2RAD(lat1); + lat2 = DEG2RAD(lat2); + + double y = sin(lon2-lon1) * cos(lat2); + double x = cos(lat1)*sin(lat2) - sin(lat1)*cos(lat2)*cos(lon2-lon1); + double bearing = RAD2DEG( atan2(y, x) ); + return fmod(bearing + 360.0, 360.0); +} + +double GpsMath::Distance(double lat1, double lon1, double lat2, double lon2) +{ + // haversine formula (more work, but well conditioned for short distances) + lat1 = DEG2RAD(lat1); + lon1 = DEG2RAD(lon1); + lat2 = DEG2RAD(lat2); + lon2 = DEG2RAD(lon2); + + double dlon = lon2 - lon1; + double dlat = lat2 - lat1; + double a = pow(sin(dlat/2.0), 2.0) + (cos(lat1) * cos(lat2) * pow(sin(dlon/2.0), 2.0)); + double c = 2.0 * asin(sqrt(a)); + // double a = sin(dLat/2.0)*sin(dLat/2.0) + sin(dLon/2.0)*sin(dLon/2.0)*cos(lat1)*cos(lat2); + // double c = 2 * atan2( sqrt(a), sqrt(1.0-a) ); + return EARTHRADIUS * c; + + // distance (spherical law of cosines) + // lat1 = DEG2RAD( lat1 ); + // lon1 = DEG2RAD( lon1 ); + // lat2 = DEG2RAD( lat2 ); + // lon2 = DEG2RAD( lon2 ); + // return acos( sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2-lon1) ) * EARTHRADIUS; +} + +double GpsMath::DistanceX(double lat1, double lon1, double lat2, double lon2) +{ + double x, y; + DistanceXY(lat1, lon1, lat2, lon2, x, y); + return x; +} + +double GpsMath::DistanceY(double lat1, double lon1, double lat2, double lon2) +{ + double x, y; + DistanceXY(lat1, lon1, lat2, lon2, x, y); + return y; +} + +double GpsMath::DistanceXY(double lat1, double lon1, double lat2, double lon2, double &x, double &y ) +{ + double mperdeg = MPERDEG + cos(DEG2RAD(lat2+lat1)/2); + x = (lon2 - lon1) * mperdeg; + y = (lat2 - lat1) * MPERDEG; + + // distance + return sqrt(x*x + y*y); +} + +double GpsMath::Travel( double *lat, double *lon, double *ele, double x, double y, double z) +{ + // generate GPS coordinates from offsets (meters) + *lat = DEG2RAD(*lat); + *lon = DEG2RAD(*lon); + + *lon /= cos(*lat) * (MPERDEG + 0.373*sin(*lat)*sin(*lat)); + *lat /= MPERDEG, + *ele += z; + + *lat = RAD2DEG(*lat); + *lon = RAD2DEG(*lon); + + // distance + return sqrt(x*x + y*y); +} diff --git a/src/libgps++/GpsMath.h b/src/libgps++/GpsMath.h new file mode 100644 index 0000000..717aa70 --- /dev/null +++ b/src/libgps++/GpsMath.h @@ -0,0 +1,81 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GpsMath__ +#define __GpsMath__ + +/* includes *****************************************************************/ + +#include +#include +#include "netlib.h" + +/* defines ******************************************************************/ + +// degrees <-> radians +#define DEG2RAD(X) ((X)*M_PI/180.0) +#define RAD2DEG(X) ((X)*180.0/M_PI) + +// (nautical mile to km) to meters per degree +#define MPERDEG (111.13285*1000.0) +#define EARTHRADIUS 6378100.0 // meters + +// speed conversions +#define KNOTS_KPH 1.85200 +#define KNOTS_METERSPERSEC (KNOTS_KPH*1000.0/3600.0) + +#define KPH2MSEC(X) ((X)*0.277777778) +#define MSEC2KPH(X) ((X)/0.277777778) + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// GpsLinux because it depennds on GPSd, the HAMLIB and NMEAP libraries +// +class GpsMath { + // public data +public: + + // parser + + // protected data +protected: + + // private data +private: + // static data + + // private methods + + // public methods +public: + // constructors + GpsMath(); + + // destructor + virtual ~GpsMath(); + + // virtual functions + + // public methods + + // static methods + static double Minutes2Degrees(char *value, char *side = NULL); + static void Degrees2Minutes(double deg, char *buf, int max, bool lat); + static timespec String2Time(const char *hhmmss, const char *ddmmyy); + + static double Bearing( double lat1, double lon1, double lat2, double lon2 ); + static double Distance( double lat1, double lon1, double lat2, double lon2 ); + static double DistanceX( double lat1, double lon1, double lat2, double lon2 ); + static double DistanceY( double lat1, double lon1, double lat2, double lon2 ); + static double DistanceXY(double lat1, double lon1, double lat2, double lon2, double &x, double &y ); + static double Travel( double *lat, double *lon, double *ele, double x, double y, double z); +}; + +#endif diff --git a/src/libgps++/GpsParser.cpp b/src/libgps++/GpsParser.cpp new file mode 100644 index 0000000..8024531 --- /dev/null +++ b/src/libgps++/GpsParser.cpp @@ -0,0 +1,101 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "GpsParser.h" +#include "NmeaParser.h" + +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +GpsParser::GpsParser() +{ + PosData.Fix = -1; + + bzero(data,sizeof(data)); + lastc = '\0'; + numbytes = totbytes = 0; + counter = 0; + checksum = 0; +} + +GpsParser::~GpsParser() +{ +} + +int GpsParser::GpsDecode( const char *buf, int max ) +{ + return 0; +} + +int GpsParser::GpsParse( const char *buf, int max ) +{ + return 0; +} + +int GpsParser::Gps2Vii( char *buf, int max ) +{ + if ( !buf || !max ) + return 0; + + // construct a custom message + int n = snprintf( buf, max, "$PVII,%d,%ld.%03ld,%d,%lg,%lg,%lg,%lg,%lg,%lg,%lg\n", + 0, + PosData.TimeStamp.tv_sec, PosData.TimeStamp.tv_nsec / 1000000, + PosData.Fix, + PosData.Latitude, PosData.Longitude, PosData.Altitude, + PosData.Speed, PosData.Heading, + ErrInfo.HorizontalDeviation, ErrInfo.VerticalDeviation + ); + + if ( n > 0 ) + n = NmeaChecksum( buf, n, max ); + + return n; +} diff --git a/src/libgps++/GpsParser.h b/src/libgps++/GpsParser.h new file mode 100644 index 0000000..f55f844 --- /dev/null +++ b/src/libgps++/GpsParser.h @@ -0,0 +1,93 @@ +// +// Linux GPS +// +// + +/* prevent multiple inclusions */ +#ifndef __GpsParser__ +#define __GpsParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "NmeaProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +class GpsParser : public NmeaProtocol { + // public data +public: + char Vendor[32]; + char Product[32]; + + // Position Data + GpsPoint PosData; + + // Accuracy, Dilution, Error + ErrorInfo ErrInfo; + + // Satellite info + SatelliteInfo SatInfo; + +protected: + // protected data + std::vector GpsListeners; + + // incoming data buffer + u_char data[2048]; + u_char lastc; + u_short numbytes; // current byte count + u_short totbytes; // expect byte count + u_short checksum; + u_long counter; // # parsed + + // private data +private: + // private methods + + // static data + + // public methods +public: + // constructors + GpsParser(); + + // destructor + virtual ~GpsParser(); + + // virtual functions + virtual void GpsInit( void ) {}; + virtual int GpsDecode( const char *buf, int max ); + virtual int GpsParse( const char *buf, int max ); + + // public methods + + // subscribe/unsubscribe + void Subscribe( GpsListener *ear ) { + GpsInit(); + if (ear) + GpsListeners.push_back(ear); + }; + + int GetNumParsed(void) {return counter;}; + + // misc + int GpsTime( struct timespec *tv ) {*tv=PosData.TimeStamp;return PosData.Fix;}; + int GpsFix(void) {return PosData.Fix;}; + int Gps2Vii( char *buf, int max ); + + // static functions +}; + +#endif diff --git a/src/libgps++/GpsPoint.cpp b/src/libgps++/GpsPoint.cpp new file mode 100644 index 0000000..83f0fb0 --- /dev/null +++ b/src/libgps++/GpsPoint.cpp @@ -0,0 +1,245 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "GpsPoint.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +GpsPoint::GpsPoint() +{ + Latitude = Longitude = Speed = Heading = 0.0; + Accel = Yaw = 0.0; + Fix = Mode = Type = 0; + TimeStamp.tv_sec = 0; + TimeStamp.tv_nsec = 0; +} + +GpsPoint::GpsPoint(const GpsPoint © ) +{ + Latitude = copy.Latitude; + Longitude = copy.Longitude; + Altitude = copy.Altitude; + Speed = copy.Speed; + Heading = copy.Heading; + Accel = copy.Accel; + Yaw = copy.Yaw; + Fix = copy.Fix; + Mode = copy.Mode; + Type = copy.Type; +} + +GpsPoint::GpsPoint( double lat, double lon ) +{ + Latitude = lat; + Longitude = lon; + Speed = Heading = 0.0; +} + +GpsPoint::~GpsPoint() +{ +} + +GpsPoint& GpsPoint::operator=(const GpsPoint &rhs) +{ + // copy + this->TimeStamp = rhs.TimeStamp; + this->Latitude = rhs.Latitude; + this->Longitude = rhs.Longitude; + this->Altitude = rhs.Altitude; + this->Speed = rhs.Speed; + this->Heading = rhs.Heading; + this->Accel = rhs.Accel; + this->Yaw = rhs.Yaw; + this->Fix = rhs.Fix; + this->Mode = rhs.Mode; + this->Type = rhs.Type; + + return *this; +} + +void GpsPoint::GetPosition( double *lat, double *lon, double *ele ) +{ + // copy + if ( lat ) + *lat = Latitude; + if ( lon ) + *lon = Longitude; + if ( ele ) + *ele = Altitude; +} + +void GpsPoint::SetTimeStamp( uint64_t t ) +{ + // in msec + TimeStamp.tv_sec = t / 1000L; + TimeStamp.tv_nsec = (t % 1000L) * 1000000L; +} + +void GpsPoint::SetTimeStamp( double t ) +{ + TimeStamp.tv_sec = (time_t)t; + t = t - (double)TimeStamp.tv_sec; + TimeStamp.tv_nsec = (long int)(t * 1000000000.0); +} + +void GpsPoint::SetTimeStamp( const char *time ) +{ + char *dp = NULL; + TimeStamp.tv_sec = strtoul( time, &dp, 10 ); + if ( dp ) + TimeStamp.tv_nsec = (long int)(atof( dp ) * 1000000000.0); +} + +void GpsPoint::AddMeters( double x, double y ) +{ + double latrad = DEG2RAD(Latitude); // to radians + + // math from Wikipedia + double latlen = MPERDEG; + double lonlen = cos(latrad) * (MPERDEG + 0.373*sin(latrad)*sin(latrad)); + + // add + Latitude = Latitude + ( y / latlen ); + Longitude = Longitude + ( x / lonlen ); +} + +void GpsPoint::Extrapolate( double speed, double accel, double yaw, double time ) +{ + // new speed + Speed = speed; + Accel = accel; + Yaw = yaw; + + speed *= time; + accel *= (time*time); + yaw *= time; + + // extrapolate (x=lon, y=lat) + double angle = DEG2RAD( Heading + yaw ); + AddMeters( sin(angle) * (speed + accel), cos(angle) * (speed + accel) ); + + // new speed and heading + Speed += (accel * time); + Heading += yaw; +} + +double GpsPoint::Bearing( const GpsPoint &gpt ) +{ + return GpsMath::Bearing( Latitude, Longitude, gpt.Latitude, gpt.Longitude ); +} + +double GpsPoint::Distance(double lat, double lon) +{ + return GpsMath::Distance(Latitude,Longitude,lat,lon); +} + +double GpsPoint::Distance( const GpsPoint &gpt ) +{ + return GpsMath::Distance(Latitude,Longitude,gpt.Latitude,gpt.Longitude); +} + +double GpsPoint::DistanceXY( const GpsPoint &gpt1, const GpsPoint &gpt2, double &x, double &y ) +{ + return GpsMath::DistanceXY(gpt1.Latitude, gpt1.Longitude, gpt2.Latitude, gpt2.Longitude, x, y); +} + +double GpsPoint::DistanceXY( const GpsPoint &gpt1, double lat, double lon, double &x, double &y ) +{ + return GpsMath::DistanceXY(gpt1.Latitude, gpt1.Longitude, lat, lon, x, y); +} + +bool GpsPoint::Inside( const GpsPoint polygon[], int num ) +{ + int i, j, c = 0; + double x = Longitude; + double y = Latitude; + + // code from Wikipedia + for (i = 0, j = num-1; i < num; j = i++) + { + double xpi = polygon[i].Longitude; + double ypi = polygon[i].Latitude; + double xpj = polygon[j].Longitude; + double ypj = polygon[j].Latitude; + + if ((((ypi<=y) && (y +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +using namespace std; + +// libkml types are in the kmldom namespace +#include "kml/dom.h" +#include "kml/engine.h" +#include "kml/base/file.h" + +using kmldom::KmlFactory; +using kmldom::KmlPtr; +using kmldom::ContainerPtr; +using kmldom::CoordinatesPtr; +using kmldom::ElementPtr; +using kmldom::FolderPtr; +using kmldom::FeaturePtr; +using kmldom::GeometryPtr; +using kmldom::PlacemarkPtr; +using kmldom::PointPtr; +using kmlengine::KmlFile; +using kmlengine::KmlFilePtr; +using kmlengine::KmzFile; +using kmlengine::KmzFilePtr; + +#include "GpsTrack.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +typedef std::vector placemark_vector_t; + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +static void WalkContainer(const ContainerPtr& container, GpsTrack_t &Track); + +static void WalkGeometry(const GeometryPtr& geometry, GpsTrack_t &Track) { + if (!geometry) + return; + + if(geometry->Type() == kmldom::Type_Point) + { + const PointPtr point = kmldom::AsPoint(geometry); + + if (point->has_coordinates()) + { + double lat = point->get_coordinates()->get_coordinates_array_at(0).get_latitude(); + double lon = point->get_coordinates()->get_coordinates_array_at(0).get_longitude(); + + GpsPoint Pt(lat, lon); + Track.push_back( Pt ); + } + } +} + +static void WalkFeature(const FeaturePtr& feature, GpsTrack_t &Track) { + if (feature) { + if (const ContainerPtr container = kmldom::AsContainer(feature)) { + WalkContainer(container, Track); + } else if (const PlacemarkPtr placemark = kmldom::AsPlacemark(feature)) { + WalkGeometry(placemark->get_geometry(), Track); + } + } +} + +static void WalkContainer(const ContainerPtr& container, GpsTrack_t &Track) { + for (size_t i = 0; i < container->get_feature_array_size(); ++i) { + WalkFeature(container->get_feature_array_at(i), Track); + } +} + +static const FeaturePtr GetRootFeature(const ElementPtr& root) { + const KmlPtr kml = kmldom::AsKml(root); + if (kml && kml->has_feature()) { + return kml->get_feature(); + } + return kmldom::AsFeature(root); +} + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +GpsTrack::GpsTrack() +{ + strcpy( Name, "GpsTrack" ); +} + +GpsTrack::GpsTrack( const char *name ) +{ + SetName( name ); +} + +GpsTrack::GpsTrack(const GpsTrack © ) +{ + strcpy(Name, copy.Name); + Points = copy.Points; +} + +GpsTrack::~GpsTrack() +{ + Points.clear(); +} + +GpsTrack& GpsTrack::operator=(const GpsTrack &rhs) +{ + Points.clear(); + this->Points = rhs.Points; + return *this; +} + +int GpsTrack::AddPoint( const GpsPoint &Pt ) +{ + Points.push_back( Pt ); + + return Points.size(); +} + +int GpsTrack::GenerateKML( const char *kmlfile ) +{ + // Get the factory singleton to create KML elements. + KmlFactory* factory = KmlFactory::GetFactory(); + + // Create + KmlPtr kml = factory->CreateKml(); + + // create Folder + FolderPtr folder = factory->CreateFolder(); + folder->set_name( Name ); + kml->set_feature(folder); + + // set style? + + // add points to the folder + for( u_int i=0 ; i. + CoordinatesPtr coordinates = factory->CreateCoordinates(); + coordinates->add_latlng(Pt->GetLatitude(),Pt->GetLongitude()); + + // Create and give it . + PointPtr point = factory->CreatePoint(); + point->set_coordinates(coordinates); // point takes ownership + + // Create and give it a and the . + PlacemarkPtr placemark = factory->CreatePlacemark(); + sprintf( name, "%d", i ); + placemark->set_name(name); + placemark->set_geometry(point); // placemark takes ownership + + // timestamp + + folder->add_feature(placemark); // kml takes ownership. + } + + // Serialize to XML + std::string xml = kmldom::SerializePretty(kml); + + ofstream myfile(kmlfile); + if (myfile.is_open()) + { + myfile << xml; + myfile.close(); + return 1; + } + return 0; +} + +int GpsTrack::ParseKML( const char *kmlfile ) +{ + // Read the file. + std::string file_data; + if (!kmlbase::File::ReadFileToString(kmlfile, &file_data)) + return 0; + + // If the file was KMZ, extract the KML file. + std::string kml; + if (KmzFile::IsKmz(file_data)) + { + KmzFilePtr kmz_file = KmzFile::OpenFromString(kmlfile); + if (!kmz_file) + return 0; + if (!kmz_file->ReadKml(&kml)) + return 0; + } else { + kml = file_data; + } + + // find all the points + std::string errors; + WalkFeature(GetRootFeature(kmldom::Parse(kml, &errors)), Points); + if (!errors.empty()) + return -1; + + return Points.size(); +} diff --git a/src/libgps++/GpsTrack.h b/src/libgps++/GpsTrack.h new file mode 100644 index 0000000..917751f --- /dev/null +++ b/src/libgps++/GpsTrack.h @@ -0,0 +1,70 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GpsTrack__ +#define __GpsTrack__ + +/* includes *****************************************************************/ + +#include + +#include "GpsPoint.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +typedef std::vector GpsTrack_t; + +/* c class definitions ******************************************************/ + +// +// GpsLinux because it depennds on GPSd, the HAMLIB and NMEAP libraries +// +class GpsTrack { + // public data +public: + char Name[64]; + GpsTrack_t Points; + + // parser + + // protected data +protected: + + // private data +private: + // static data + + // private methods + + // public methods +public: + // constructors + GpsTrack(); + GpsTrack(const char *name); + GpsTrack(const GpsTrack ©); + + // destructor + virtual ~GpsTrack(); + + // operators + GpsTrack &operator=(const GpsTrack &rhs); + + // virtual functions + + // public methods + void SetName( const char *name ) { strncpy(Name,name,sizeof(Name)-1); }; + int AddPoint( const GpsPoint &Pt ); + + int GenerateKML( const char *kmlfile ); + int ParseKML( const char *kmlfile ); + + // static methods +}; + +#endif diff --git a/src/libgps++/GpsdClient.cpp b/src/libgps++/GpsdClient.cpp new file mode 100644 index 0000000..0999e0d --- /dev/null +++ b/src/libgps++/GpsdClient.cpp @@ -0,0 +1,186 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "GpsdClient.h" +#include "NmeaParser.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +GpsdClient::GpsdClient() +{ +} + +GpsdClient::GpsdClient( const char *host ) +{ + GpsdConnect( host ); +} + +GpsdClient::~GpsdClient() +{ +} + +//**************************************************************************** +// GPSd +//***************************************************************************/ + +int GpsdClient::GpsdConnect( const char *host ) +{ + if ( !host ) + host = "localhost"; + + /* tell GPSd to emit raw records */ + if ( Connect( host, "2947" ) > 0 ) + { + char buf[80]; + + sprintf( buf, "HELO %s %s %s\r\nr\r\n", host, "nGPSd", "1.0" ); + Send( buf, strlen(buf) ); + + log_printf( "Connected to GPSd server %s:2947", host ); + } + return GetSocket(); +} + +int GpsdClient::GpsdRead( void ) +{ + char buf[1024]; + + // read GPSd + int rc = Recv( buf, sizeof(buf) ); + + if ( rc > 0 ) + { + /* successful parse with good data */ + if ( strncmp( buf, "GPSD", 4 ) == 0 ) + { + log_write( buf ); + return GpsdParse( buf ); + } + } + return -1; +} + +int GpsdClient::GpsdWrite( const char *msg, int max ) +{ + return Send( msg, max ); +} + +int GpsdClient::GpsdParse( char *msg ) +{ + // check for NMEA + if ( *msg == '$' ) + return 0; + + // gpsd message + double data[16]; + int index = 0; + char *value = strtok( msg, "," ); + + while ( value ) + { + if ( index == 0 ) + { + data[0] = 0; + if ( strncmp( value, "GPSD", 4 ) != 0 ) + data[0] = 1; + } + else if ( index == 1 ) + { + data[1] = 0; + if ( strncmp( value, "O=", 2 ) == 0 && *(value+2) != '?' ) + data[1] = 1; + } + + data[index++] = atof( value ); + + value = strtok( NULL, "," ); + } + + // data? + if ( !data[0] || !data[1] || index < 15 ) + { + Fix = -1; + return -1; + } + + // fix? + Fix = (int)(data[14] - 1); + + Time.tv_sec = (time_t)data[1]; + Time.tv_nsec = ((long int)(data[1] * 10000.0) % 1000000) * 1000; + Latitude = data[3]; + Longitude = data[4]; + Heading = data[8]; + Elevation = data[5]; + Speed = data[9]; + + return Fix; +} + +int GpsdClient::Gpsd2Vii( char *buf, int max ) +{ + // construct a custom message + int n = sprintf( buf, "$PVII,gpsd://%s:%s,%ld.%03ld,%d,%lg,%lg,%lg,%lg,%lg,0.0,0.0\n", + GetHost(), GetPort(), + Time.tv_sec, Time.tv_nsec / 1000000, + Fix, + Latitude, Longitude, Elevation, + Speed, Heading + ); + + if ( n > 0 ) + n = NmeaParser::NmeaChecksum( buf, n, sizeof(buf) ); + + return n; +} diff --git a/src/libgps++/GpsdClient.h b/src/libgps++/GpsdClient.h new file mode 100644 index 0000000..bd15c82 --- /dev/null +++ b/src/libgps++/GpsdClient.h @@ -0,0 +1,70 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __GpsdClient__ +#define __GpsdClient__ + +/* includes *****************************************************************/ + +#include "TcpClient.h" +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Connect to http://gpsd.berlios.de/ GPSD +// +class GpsdClient : public TcpClient { + // public data +public: + int Fix; + int Satellites; + + struct timespec Time; + double Latitude; + double Longitude; + double Elevation; + double Heading; + double Speed; + + // protected data +protected: + + // private data +private: + + // static data + + // private methods + + // public methods +public: + // constructors + GpsdClient(); + GpsdClient( const char *host ); + + // destructor + virtual ~GpsdClient(); + + // virtual functions + + // public methods + int GpsdParse( char *msg ); + int GpsdConnect( const char *host = "localhost" ); + + int GpsdRead( void ); + int GpsdWrite( const char *msg, int max ); + + int Gpsd2Vii( char *buf, int max ); +}; + +#endif + diff --git a/src/libgps++/KmlFile.cpp b/src/libgps++/KmlFile.cpp new file mode 100644 index 0000000..094c18a --- /dev/null +++ b/src/libgps++/KmlFile.cpp @@ -0,0 +1,312 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "KmlFile.h" +#include "GpsMath.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +KmlFile::KmlFile() +{ + xmlDoc = NULL; + xmlRoot = xmlRoutes = xmlTracks = xmlWaypoints = NULL; + fileKml = NULL; +} + +KmlFile::~KmlFile() +{ +} + +int KmlFile::Create( const char *file ) +{ + fileKml = fopen( file, "w" ); + if ( !fileKml ) + return 0; + + // create the name space + // "\n" ); + + // Creates a new document, a node and set it as a root node + xmlDoc = xmlNewDoc( (xmlChar *) "1.0" ); + xmlRoot = xmlNewNode( NULL, (xmlChar *)"kml" ); + xmlDocSetRootElement( xmlDoc, xmlRoot ); + + xmlNodePtr doc = xmlNewChild(xmlRoot, NULL, (xmlChar *)"Document", NULL ); + + // create Waypoints folder + xmlNodePtr points = xmlNewChild(doc, NULL, (xmlChar *)"Folder", NULL ); + xmlNewChild(points, NULL, (xmlChar *)"name", (xmlChar *)"Waypoints" ); + + // create Tracks folder + xmlNodePtr tracks = xmlNewChild(doc, NULL, (xmlChar *)"Folder", NULL ); + xmlNewChild(tracks, NULL, (xmlChar *)"name", (xmlChar *)"Tracks" ); + + // create Routes folder + xmlNodePtr routes = xmlNewChild(doc, NULL, (xmlChar *)"Folder", NULL ); + xmlNewChild(routes, NULL, (xmlChar *)"name", (xmlChar *)"Routes" ); + + return -1; +} + +int KmlFile::Open( const char *file ) +{ + /*parse the file and get the DOM */ + if ( !(xmlDoc = xmlParseFile( file )) ) + return -1; + + /*Get the root element node */ + xmlRoot = xmlDocGetRootElement(xmlDoc); + + if ( xmlRoot ) + { + if ( xmlStrcmp( xmlRoot->name, (const xmlChar *)"kml" ) == 0 ) + { + xmlNodePtr kml = xmlRoot->xmlChildrenNode; + + while ( kml ) + { + if ( xmlStrcmp( kml->name, (const xmlChar *)"Document" ) == 0 ) + { + xmlNodePtr doc = kml->xmlChildrenNode; + + while ( doc ) + { + // find Folders + if ( xmlStrcmp( doc->name, (const xmlChar *)"Folder" ) == 0 ) + { + xmlNodePtr fol = doc->xmlChildrenNode; + const char *name = NULL; + + while ( fol ) + { + if ( xmlStrcmp( fol->name, (const xmlChar *)"name" ) == 0 ) + name = (const char *)xmlNodeGetContent(fol); + else if ( xmlStrcmp( fol->name, (const xmlChar *)"Folder" ) == 0 ) + { + if ( !name ) + continue; + + // find the folder(s) we want, for later + if ( strcmp( name, "Routes" ) == 0 ) + xmlTracks = fol; + else if ( strcmp( name, "Tracks" ) == 0 ) + xmlTracks = fol; + else if ( strcmp( name, "Waypoints" ) == 0 ) + xmlWaypoints = fol; + } + + fol = fol->next; + } + } + doc = doc->next; + } + } + + kml = kml->next; + } + + // success + return 1; + } + else + { + // not KML! + Close(); + return 0; + } + } + + // return failed + return -1; +} + +void KmlFile::Close( void ) +{ + if ( xmlDoc ) + { + xmlFreeDoc(xmlDoc); + xmlDoc = NULL; + } +} + +GpsTrack *KmlFile::GetTracks( void ) +{ + if ( !xmlTracks ) + return NULL; + GpsTrack *Track = new GpsTrack(); + + // Folder named "Tracks" + xmlNodePtr fol = xmlTracks->xmlChildrenNode; + + while ( fol ) + { + if ( xmlStrcmp( fol->name, (const xmlChar *)"description" ) == 0 ) + ; + else if ( xmlStrcmp( fol->name, (const xmlChar *)"TimeSpan" ) == 0 ) + ; + else if ( xmlStrcmp( fol->name, (const xmlChar *)"Folder" ) == 0 ) + { + xmlNodePtr place = fol->xmlChildrenNode; + const char *name = NULL; + + while ( place ) + { + if ( xmlStrcmp( place->name, (const xmlChar *)"name" ) == 0 ) + name = (const char *)xmlNodeGetContent(place); + else if ( xmlStrcmp( place->name, (const xmlChar *)"Placemark" ) == 0 ) + { + if ( !name ) + continue; + + if ( strcmp(name, "Points") == 0 ) + { + xmlNodePtr node = place->xmlChildrenNode; + time_t timestamp = 0L; + double speed = 0.0; + double heading = 0.0; + + while ( node ) + { + if ( xmlStrcmp( node->name, (const xmlChar *)"name" ) == 0 ) + { + // _# or Path(LineString) + } + else if ( xmlStrcmp( node->name, (const xmlChar *)"description" ) == 0 ) + { + // parse out HTML for speed & heading + const char *html = (const char *)xmlNodeGetContent(node); + + if ( !html || !strlen(html) ) + continue; + + char *units = (char*)"km/hour"; // default kph + const char *s; + + // pick off speed and heading + if ( (s = strstr( html, "Speed: " )) ) + { + speed = strtod( s+7, &units ); + if ( units ) + { + units++; + + // speed conversions + if ( strncmp( units, "meters/hour ", 12 ) == 0 ) + speed /= 1000.0; + else if ( strncmp( units, "mph ", 4 ) == 0 ) + speed *= 1.609344; + } + } + else + speed = 0.0; + + if ( (s = strstr( html, "Heading: ")) ) + heading = atof( s+9 ); + else + heading = 0.0; + + } + else if ( xmlStrcmp( node->name, (const xmlChar *)"TimeStamp" ) == 0 ) + { + // ... + timestamp = ParseTime( (const char *)xmlNodeGetContent(node) ); + } + else if ( xmlStrcmp( node->name, (const xmlChar *)"Point" ) == 0 ) + { + // long,lat,elev + double lon, lat, elev; + const char *s = (const char *)xmlNodeGetContent(node); + + if ( s && sscanf( s, "%lf,%lf,%lf", &lon, &lat, &elev ) == 3 ) + { + GpsPoint Point; + Point.SetTimeStamp( timestamp ); + Point.SetPosition( lat, lon, elev ); + Point.SetSpeed( speed ); + Point.SetHeading( heading ); + + Track->AddPoint( Point ); + } + } + else if ( xmlStrcmp( node->name, (const xmlChar *)"LineString" ) == 0 ) + { + // long, lat, elev (ignore for now) + } + + node = node->next; + } + } + } + + place = place->next; + } + } + + fol = fol->next; + } + + return Track; +} + +time_t KmlFile::ParseTime( const char *time ) +{ + struct tm tm; + + // Google Earth always uses Zulu time + if ( strptime( time, "%FT%T", &tm ) ) + return mktime( &tm ); + return 0L; +} diff --git a/src/libgps++/KmlFile.h b/src/libgps++/KmlFile.h new file mode 100644 index 0000000..f5f1e06 --- /dev/null +++ b/src/libgps++/KmlFile.h @@ -0,0 +1,73 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __KmlFile__ +#define __KmlFile__ + +/* includes *****************************************************************/ + +#include +#include + +#include "netlib.h" + +#include "GpsTrack.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// GpsLinux because it depennds on GPSd, the HAMLIB and NMEAP libraries +// +class KmlFile { + // public data +public: + xmlDocPtr xmlDoc; + xmlNodePtr xmlRoot; + + // folders we're interested in + xmlNodePtr xmlRoutes; + xmlNodePtr xmlTracks; + xmlNodePtr xmlWaypoints; + + // parser + + // protected data +protected: + FILE *fileKml; + + // private data +private: + // static data + + // private methods + + // public methods +public: + // constructors + KmlFile(); + + // destructor + virtual ~KmlFile(); + + // virtual functions + + // public methods + int Open( const char *file ); + void Close( void ); + int Create( const char *file ); + + GpsTrack *GetTracks(void); + + // static methods + static time_t ParseTime( const char *time ); +}; + +#endif diff --git a/src/libgps++/NmeaParser.cpp b/src/libgps++/NmeaParser.cpp new file mode 100644 index 0000000..0103ee5 --- /dev/null +++ b/src/libgps++/NmeaParser.cpp @@ -0,0 +1,250 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "NmeaParser.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +NmeaParser::NmeaParser() +{ + strcpy( Vendor, "Generic" ); + strcpy( Product, "NMEA" ); + PosData.Fix = -1; + + // + // NMEA Standard + // + NmeaSentences.push_back( &GPRMC ); + NmeaSentences.push_back( &GPGGA ); + NmeaSentences.push_back( &GPGSA ); + NmeaSentences.push_back( &GPGSV ); + NmeaSentences.push_back( &GPVTG ); + NmeaSentences.push_back( &GPGLL ); // not useful + NmeaSentences.push_back( &GPGST ); // needed for error, not always available + NmeaSentences.push_back( &GPZDA ); // not always available + + // notification triggers + strcpy( posfixnmea, "$GPRMC" ); // usually comes first + strcpy( timefixnmea, "$GPRMC" ); +} + +NmeaParser::~NmeaParser() +{ +} + +int NmeaParser::CsvSplit( char *buf, char *field[], int max ) +{ + // split up into tokens + int count = 0; + + if ( !buf || !strlen(buf) ) + return 0; + + // zap off checksum + char *s = strchr( buf, '*' ); + if ( s ) + *s = '\0'; + + // parse tokens out between commas + char *token = buf; + do + { + char *delim = strchr( token, ',' ); + + // mark token + field[count++] = token; + + // separate + if ( delim ) + *delim++ = '\0'; + token = delim; + } while ( token && *token && count < max ); + + // zap the rest out + for ( int i=count; iparsed = 0; + for ( i = 0 ; i < NmeaSentences.size() ; i++ ) + { + // mark it unparsed + NmeaSentences[i]->parsed = 0; + + // match it, decode it + if ( strcasecmp( NmeaSentences[i]->name, field[0]+1 ) == 0 ) + { + // check argument count + if ( count < NmeaSentences[i]->argc ) + break; + + // mark it parsed if successful + if ( (flag = NmeaSentences[i]->Decode( count, field )) > 0 ) + { + // mark it parsed + NmeaSentences[i]->parsed = 1; + NmeaSentences[i]->counter++; + + // update data + NmeaSentences[i]->Update( PosData, ErrInfo, SatInfo ); + } + break; + } + } + + // unsuccessful parse + if ( !flag ) + return 0; + + // flags + char posflag = 0; + char timeflag = 0; + + // trigger messages (first for time, last for position) + if ( strcmp( field[0], posfixnmea ) == 0 ) + posflag = 1; + else if ( strcmp( field[0], "$PVII") == 0 ) + posflag = 1; + if ( strcmp( field[0], timefixnmea ) == 0 ) + timeflag = 1; + + // time notification + if ( timeflag ) + { + // call listeners + for ( u_int i=0 ; iTimeListener( PosData.TimeStamp ); + } + + // position notification (all position & error data in) + if ( posflag ) + { + // call listeners + for ( u_int i=0 ; iPositionListener( PosData, ErrInfo ); + } + + return flag; +} + +int NmeaParser::NmeaParse( const char *msg, int max ) +{ + /* GPS message? (gpsd response) */ + if ( !msg || !strlen(msg) || !max ) + return -1; + int n = 0; + + // between $ and eol + while ( max-- ) + { + char c = *msg++; + + if ( numbytes == 0 ) + { + if ( c == '$' ) + { + // start buffer + data[numbytes++] = c; + } + } + else + { + // must be cr-lf terminated + if ( isprint(c) ) + { + // add to buffer, otherwise ignore + data[numbytes++] = c; + } + else + { + // terminate + data[numbytes] = '\0'; + + // decode at end of string + if ( NmeaDecode( (const char *)data, numbytes ) ) + { + counter++; + n++; + } + numbytes = 0; + } + } + + // done + if ( c == '\0' ) + break; + } + + return n; +} diff --git a/src/libgps++/NmeaParser.h b/src/libgps++/NmeaParser.h new file mode 100644 index 0000000..42ce3cc --- /dev/null +++ b/src/libgps++/NmeaParser.h @@ -0,0 +1,86 @@ +// +// Linux GPS +// +// NMEA Parser code stolen from Pascal Martin's RoadMap +// + +/* prevent multiple inclusions */ +#ifndef __NmeaParser__ +#define __NmeaParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaProtocol.h" +#include "NmeaSentence.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +class NmeaParser : public GpsParser { + // public data +public: + +protected: + // private data + std::vector NmeaSentences; + + // Standard + NmeaSentenceGPRMC GPRMC; + NmeaSentenceGPVTG GPVTG; + NmeaSentenceGPGGA GPGGA; + NmeaSentenceGPGSA GPGSA; + NmeaSentenceGPGSV GPGSV; + NmeaSentenceGPGLL GPGLL; + NmeaSentenceGPGST GPGST; + NmeaSentenceGPZDA GPZDA; + + // private data +private: + // incoming data buffer + + // NMEA record for notification + char posfixnmea[8]; + char timefixnmea[8]; + + // private methods + + // static data + + // public methods +public: + // constructors + NmeaParser(); + + // destructor + virtual ~NmeaParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return NmeaDecode( buf, max ); }; + int GpsParse( const char *buf, int max ) { return NmeaParse( buf, max ); }; + + // public methods + int NmeaDecode( const char *msg, int max ); + int NmeaParse( const char *msg, int max ); + + // misc + void NmeaPosFix( const char *str ) + { strncpy(posfixnmea,str,sizeof(posfixnmea)-1);}; + + // static functions + static int CsvSplit( char *buf, char *field[], int max ); +}; + +#endif diff --git a/src/libgps++/NmeaProtocol.cpp b/src/libgps++/NmeaProtocol.cpp new file mode 100644 index 0000000..65e07a5 --- /dev/null +++ b/src/libgps++/NmeaProtocol.cpp @@ -0,0 +1,102 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "NmeaProtocol.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +NmeaProtocol::NmeaProtocol() +{ +} + +NmeaProtocol::~NmeaProtocol() +{ +} + +int NmeaProtocol::NmeaChecksum( char *buf, int len, int max ) +{ + // NMEA message? + if ( !buf || *buf != '$' ) + return 0; + char *s = buf+1; + int n = 1; + + // calc checksum + u_char cs = 0; + while ( *s && *s != '*' && n +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "GpsMath.h" +#include "NmeaSentence.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +NmeaSentence::NmeaSentence() +{ + argc = 0; + parsed = 0; + counter = 0; + timestamp.tv_sec = 0; + timestamp.tv_nsec = 0; +} + +NmeaSentence::~NmeaSentence() +{ +} + +int NmeaSentence::Decode( int argc, char *argv[] ) +{ + return 0; +} + +void NmeaSentence::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ +} + +// GPGGA ********************************************************************* + +NmeaSentenceGPGGA::NmeaSentenceGPGGA() +{ + strcpy( name, "GPGGA" ); + argc = 11; +} + +NmeaSentenceGPGGA::~NmeaSentenceGPGGA() +{ +} + +int NmeaSentenceGPGGA::Decode( int argc, char *argv[] ) +{ + fixtime = timestamp = DecodeTime(argv[1], NULL ); + latitude = DecodeCoordinate(argv[2], argv[3]); + longitude = DecodeCoordinate(argv[4], argv[5]); + quality = *argv[6] - '0'; + satellites = atoi( argv[7] ); + horizontal_dilution = atof( argv[8] ); + altitude = atof( argv[9] ); + geoid = atof( argv[10] ); + + return 1; +} + +void NmeaSentenceGPGGA::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ + if ( quality ) + { + PosData.Fix = quality; + PosData.TimeStamp.tv_sec = fixtime.tv_sec; + PosData.Latitude = latitude; + PosData.Longitude = longitude; + ErrInfo.HorizontalDilution = horizontal_dilution; + PosData.Altitude = altitude; + // no speed or heading + } +} + +// GPGLL ********************************************************************* + +NmeaSentenceGPGLL::NmeaSentenceGPGLL() +{ + strcpy( name, "GPGLL" ); + argc = 5; +} + +NmeaSentenceGPGLL::~NmeaSentenceGPGLL() +{ +} + +int NmeaSentenceGPGLL::Decode( int argc, char *argv[] ) +{ + latitude = DecodeCoordinate (argv[1], argv[2]); + longitude = DecodeCoordinate (argv[3], argv[4]); + mode = status = '\0'; + + /* We have to be extra cautious, as some people report that GPGLL + * returns a mode field, but some GPS do not have this field at all. + */ + status = 'A'; + if ( argc >= 7 ) + { + utctime = timestamp = DecodeTime( argv[5], NULL ); + status = *argv[6]; + if ( argc > 7 ) + mode = *argv[7]; + } + + return 1; +} + +void NmeaSentenceGPGLL::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ + // do we want this one? + if ( status == 'A' ) + { + PosData.Latitude = latitude; + PosData.Longitude = longitude; + + // figure out fix, mode, type + } +} + +// GPGSA ********************************************************************* + +NmeaSentenceGPGSA::NmeaSentenceGPGSA() +{ + strcpy( name, "GPGSA" ); + argc = 6; +} + +NmeaSentenceGPGSA::~NmeaSentenceGPGSA() +{ +} + +int NmeaSentenceGPGSA::Decode( int argc, char *argv[] ) +{ + int index = 3; + + mode = *argv[1]; + type = atoi(argv[2]); + + /* # satellites */ + int i; + int n = argc - 6; + + // each satellite + for ( i = 0; i < n && i < NMEA_MAX_SATELLITE; i++ ) + satellite[i] = atoi( argv[index++] ); + + while (i < NMEA_MAX_SATELLITE) + satellite[i++] = 0; + + position_dilution = atof(argv[index++]); + horizontal_dilution = atof(argv[index++]); + vertical_dilution = atof(argv[index++]); + + return 1; +} + +void NmeaSentenceGPGSA::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ + PosData.Mode = mode; + PosData.Type = type; + ErrInfo.PositionDilution = position_dilution; + ErrInfo.HorizontalDilution = horizontal_dilution; + ErrInfo.VerticalDilution = vertical_dilution; +} + +// GPGSV ********************************************************************* + +NmeaSentenceGPGST::NmeaSentenceGPGST() +{ + strcpy( name, "GPGST" ); + argc = 9; +} + +NmeaSentenceGPGST::~NmeaSentenceGPGST() +{ +} + +int NmeaSentenceGPGST::Decode( int argc, char *argv[] ) +{ + utctime = timestamp = DecodeTime( argv[1], NULL ); + rms_deviation = atof( argv[2] ); + semimajor_deviation = atof( argv[3] ); + semiminor_deviation = atof( argv[4] ); + semimajor_orientation = atof( argv[5] ); + latitude_deviation = atof( argv[6] ); + longitude_deviation = atof( argv[7] ); + altitude_deviation = atof( argv[8] ); + + return 1; +} + +void NmeaSentenceGPGST::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ + ErrInfo.HorizontalDeviation = fmax( + fmax( semimajor_deviation, semiminor_deviation ), + fmax( longitude_deviation, latitude_deviation ) + ); + ErrInfo.VerticalDeviation = altitude_deviation; +} + +// GPGSV ********************************************************************* + +NmeaSentenceGPGSV::NmeaSentenceGPGSV() +{ + strcpy( name, "GPGSV" ); + argc = 4; +} + +NmeaSentenceGPGSV::~NmeaSentenceGPGSV() +{ +} + +int NmeaSentenceGPGSV::Decode( int argc, char *argv[] ) +{ + int index = 4; + + total = (char) atoi(argv[1]); + sequence = (char) atoi(argv[2]); + satellites = (char) atoi(argv[3]); + + // check + if (satellites <= 0) + return 0; + if ( satellites > NMEA_MAX_SATELLITE) + satellites = NMEA_MAX_SATELLITE; + int i; + + for( i=0 ; i m/sec + // no altitude + // no error info + } +} + +// GPVTG ********************************************************************* + +NmeaSentenceGPVTG::NmeaSentenceGPVTG() +{ + strcpy( name, "GPVTG" ); + argc = 9; +} + +NmeaSentenceGPVTG::~NmeaSentenceGPVTG() +{ +} + +int NmeaSentenceGPVTG::Decode( int argc, char *argv[] ) +{ + course = atof( argv[1] ); + speed = atof( argv[7] ); + if ( argc > 9 ) + mode = *argv[9]; + + return 1; +} + +void NmeaSentenceGPVTG::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ + PosData.Heading = course; + PosData.Speed = speed * KNOTS_METERSPERSEC; +} + +// GPZDA ********************************************************************* + +NmeaSentenceGPZDA::NmeaSentenceGPZDA() +{ + strcpy( name, "GPZDA" ); + argc = 7; +} + +NmeaSentenceGPZDA::~NmeaSentenceGPZDA() +{ +} + +int NmeaSentenceGPZDA::Decode( int argc, char *argv[] ) +{ + char date[10]; + + sprintf( date, "%02d%02d%04d", atoi(argv[2]), atoi(argv[3]), atoi(argv[4]) ); + utctime = DecodeTime(argv[1], date); + + return 1; +} + +void NmeaSentenceGPZDA::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ + PosData.TimeStamp = utctime; +} + diff --git a/src/libgps++/NmeaSentence.h b/src/libgps++/NmeaSentence.h new file mode 100644 index 0000000..bc34d9c --- /dev/null +++ b/src/libgps++/NmeaSentence.h @@ -0,0 +1,197 @@ +// +// Linux GPS +// +// NMEA Parser code stolen from Pascal Martin's RoadMap +// + +/* prevent multiple inclusions */ +#ifndef __NmeaSentence__ +#define __NmeaSentence__ + +/* includes *****************************************************************/ + +#include + +#include "GpsMath.h" +#include "GpsListener.h" + +/* defines ******************************************************************/ + +#define NMEA_MAX_SATELLITE 32 + +#define NMEA_FIX_INVALID 0 +#define NMEA_FIX_NOFIX 0 +#define NMEA_FIX_GPS 1 +#define NMEA_FIX_DGPS 2 +#define NMEA_FIX_PPS 3 +#define NMEA_FIX_RTK_FIXED 4 +#define NMEA_FIX_RTK_FLOAT 5 +#define NMEA_FIX_DEAD_RECKONING 6 +#define NMEA_FIX_MANUAL 7 +#define NMEA_FIX_SIMULATION 8 + +#define NMEA_MODE_AUTOMATIC 'A' +#define NMEA_MODE_DIFFERENTIAL 'D' +#define NMEA_MODE_ESTIMATED 'E' // dead reckoning +#define NMEA_MODE_MANUAL 'M' +#define NMEA_MODE_SIMULATED 'S' +#define NMEA_MODE_INVALID 'N' + +#define NMEA_TYPE_INVALID 0 +#define NMEA_TYPE_NOFIX 1 +#define NMEA_TYPE_2D 2 +#define NMEA_TYPE_3D 3 + +/* macros *******************************************************************/ + +#define DecodeCoordinate(A,B) GpsMath::Minutes2Degrees(A,B) +#define DecodeTime(A,B) GpsMath::String2Time(A,B) + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class NmeaSentence { +public: + char name[8]; + char argc; + char parsed; // just parsed flag + u_long counter; + timespec timestamp; + + NmeaSentence(); + virtual ~NmeaSentence(); + + virtual int Decode( int argc, char *argv[] ); + virtual void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPGGA : public NmeaSentence { +public: + timespec fixtime; + double latitude; // decimal degrees + double longitude; + int quality; + int satellites; + float horizontal_dilution; + double altitude; // meters + double geoid; + + NmeaSentenceGPGGA(); + ~NmeaSentenceGPGGA(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPGLL : public NmeaSentence { +public: + double latitude; + double longitude; + timespec utctime; + char status; + char mode; + + NmeaSentenceGPGLL(); + ~NmeaSentenceGPGLL(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPGSA : public NmeaSentence { +public: + char mode; + char type; + char satellite[NMEA_MAX_SATELLITE]; + float position_dilution; + float horizontal_dilution; + float vertical_dilution; + + NmeaSentenceGPGSA(); + ~NmeaSentenceGPGSA(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPGST : public NmeaSentence { +public: + timespec utctime; + // standard deviation of error + float rms_deviation; + float semimajor_deviation; + float semiminor_deviation; + float semimajor_orientation; + float latitude_deviation; + float longitude_deviation; + float altitude_deviation; + + NmeaSentenceGPGST(); + ~NmeaSentenceGPGST(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPGSV : public NmeaSentence { +public: + char total; + char sequence; + char satellites; + struct { + char id; + char elevation; + short azimuth; + short signal2noise; + } satellite[NMEA_MAX_SATELLITE]; + + NmeaSentenceGPGSV(); + ~NmeaSentenceGPGSV(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPRMC : public NmeaSentence { +public: + timespec utctime; + char status; + double latitude; + double longitude; + double speed; // convert knots to kph + double course; + double variation; + + NmeaSentenceGPRMC(); + ~NmeaSentenceGPRMC(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPVTG : public NmeaSentence { +public: + double course; + double speed; + char mode; + + NmeaSentenceGPVTG(); + ~NmeaSentenceGPVTG(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class NmeaSentenceGPZDA : public NmeaSentence { +public: + timespec utctime; + + NmeaSentenceGPZDA(); + ~NmeaSentenceGPZDA(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +#endif diff --git a/src/libgps++/NtripClient.cpp b/src/libgps++/NtripClient.cpp new file mode 100644 index 0000000..b69bc90 --- /dev/null +++ b/src/libgps++/NtripClient.cpp @@ -0,0 +1,202 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "NtripClient.h" +#include "UriParse.h" + +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +NtripClient::NtripClient() +{ + count = 0UL; +} + +NtripClient::~NtripClient() +{ +} + +int NtripClient::NtripConnect( const char *host, const char *service, const char *user, const char *pass, const char *path ) +{ + char uri[256]; + int port = Service2Port( service?service:"http", 80, "tcp" ); + + sprintf( uri, "ntrip://%s:%s@%s:%d/%s", user, pass, host, port, path ); + + return NtripConnect( uri ); +} + +int NtripClient::NtripConnect( const char *uri ) +{ + UriParse parsed; + parsed.setUri( uri ); + + // close existing + Close(); + + // connect + if ( Connect( parsed.getHost(), parsed.getService() ) >= 0 ) + { + log_printf( "Connected to NTRIP server: %s", uri ); + + // handshake + char buf[1024]; + int n = 0; + if ( strlen( parsed.getUser() ) == 0 ) + { + // no auth + // Authorization: Basic %s + n = snprintf( buf, sizeof(buf), + "GET /%s HTTP/1.1\r\n" + "Host: %s\r\n" + "User-Agent: NTRIP NtripClientPOSIX/1.51\r\n" + "Connection: close\r\n" + "\r\n", + parsed.getPath(), parsed.getHost() ); + } + else + { + // base64 encode user/password + char auth[128]; + snprintf( auth, sizeof(auth), "%s:%s", + parsed.getUser(), parsed.getPassword() ); + char enc[256]; + base64( (unsigned char *)auth, enc, strlen(auth) ); + + // Authorization: Basic %s + n = snprintf( buf, sizeof(buf), + "GET /%s HTTP/1.1\r\n" + "Host: %s\r\n" + "User-Agent: NTRIP NtripClientPOSIX/1.51\r\n" + "Connection: close\r\n" + "Authorization: Basic %s\r\n" + "\r\n", + parsed.getPath(), parsed.getHost(), enc ); + + // $GGA support TBD + + } + + log_printf("%s", buf); + + // send get request + if ( Send( buf, n ) != n ) + { + log_error( "Remote NTRIP server closed!" ); + exit(1); + } + + // wait response + n = Recv( buf, sizeof(buf) ); + + // log source table for now + if ( strncmp( "ICY 200 OK\r\n", buf, 12 ) == 0 ) + { + // successful + log_printf("%s", buf); + strcpy( Uri, uri ); + return GetSocket(); + } + else if ( strncmp( "SOURCETABLE 200 OK\r\n", buf, 20 ) == 0 ) + { + log_printf( "%s", buf ); + + // read source table + while ( (n = Recv( buf, sizeof(buf) )) > 0 ) + { + log_printf( "%s", buf ); + + if ( strncmp( "ENDSOURCETABLE\r\n", buf, 14 ) == 0 ) + break; + } + + // could pick off a source and open that + } + else + { + } + + // error + log_printf( "NTRIP connection error: %s", buf ); + Close(); + } + else + { + log_printf( "Unable to connect to NTRIP server: %s", uri ); + } + + return GetSocket(); +} + +int NtripClient::NtripRead( unsigned char *buf, int max ) +{ + int n = TcpClient::Recv( (char *)buf,max ); + + // special strip of leading 0x00 and trailing 0xff + if ( n == 0 ) + { + log_printf( "Ntrip client packet stats: %lu packets received", count ); + } + else if ( n > 0 ) + { + if ( n >= 2 && *buf == 0x00 && *(buf+n-1) == 0x0ff ) + { + n -= 2; + memmove( buf, buf+1, n ); + } + count++; + } + + return n; +} diff --git a/src/libgps++/NtripClient.h b/src/libgps++/NtripClient.h new file mode 100644 index 0000000..0984ffd --- /dev/null +++ b/src/libgps++/NtripClient.h @@ -0,0 +1,65 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __NtripClient__ +#define __NtripClient__ + +/* includes *****************************************************************/ + +#include "TcpClient.h" +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + + +/* c class definitions ******************************************************/ + +// +// GpsLinux because it depennds on GPSd, the HAMLIB and NMEAP libraries +// +class NtripClient : public TcpClient { + // public data +public: + char Uri[1024]; + +protected: + unsigned long count; + + // private data +private: + + // private methods + + // static data + + // public methods +public: + // constructors + NtripClient(); + + // destructor + virtual ~NtripClient(); + + // virtual functions + + // public methods + int NtripConnect( const char *host, const char *service, + const char *user = "anonymous", const char *pass = "", + const char *path = "" ); + int NtripConnect( const char *uri ); + int NtripReconnect( void ) {return NtripConnect( Uri ); }; + void NtripClose(void) {Close();}; + + int NtripRead( unsigned char *buf, int max ); + int NtripWrite( const unsigned char *buf, int max ) + {return TcpClient::Send((const char *)buf,max);}; +}; + +#endif + diff --git a/src/libgps++/RtcmDevice.cpp b/src/libgps++/RtcmDevice.cpp new file mode 100644 index 0000000..a20bb00 --- /dev/null +++ b/src/libgps++/RtcmDevice.cpp @@ -0,0 +1,109 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "RtcmDevice.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +RtcmDevice::RtcmDevice() +{ + SerialFd = -1; +} + +RtcmDevice::~RtcmDevice() +{ +} + +int RtcmDevice::RtcmRead( char *buf, int max ) +{ + if ( !buf || SerialFd < 0 ) + return -1; + + return read( SerialFd, buf, max ); +} + +int RtcmDevice::RtcmWrite( const char *buf, int max ) +{ + if ( !buf || SerialFd < 0 ) + return -1; + + return write( SerialFd, buf, max ); +} + +//**************************************************************************** +// Serial I/O +//***************************************************************************/ + +int RtcmDevice::SerialOpen( const char *device, int baud ) +{ + // RTCM vmin=32, vwait=100ms to allow buffer to fill + SerialFd = serial_open( (char*)device, baud, 32, 1 ); + + if ( SerialFd > 0 ) + log_printf( "Connected to GPS serial device: %s", device ); + else + log_printf( "Unable to open serial device: %s", device ); + + return SerialFd; +} + +void RtcmDevice::SerialClose( void ) +{ + if ( SerialFd >= 0 ) + { + close( SerialFd ); + SerialFd = -1; + } +} + diff --git a/src/libgps++/RtcmDevice.h b/src/libgps++/RtcmDevice.h new file mode 100644 index 0000000..9fa1fde --- /dev/null +++ b/src/libgps++/RtcmDevice.h @@ -0,0 +1,62 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __RtcmDevice__ +#define __RtcmDevice__ + +/* includes *****************************************************************/ + +#include "TcpClient.h" +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + + +/* c class definitions ******************************************************/ + +class RtcmDevice { + // public data +public: + + // protected data +protected: + int SerialFd; // serial port + + // private data +private: + + // private methods + int SerialOpen( const char *dev, int baud ); + int SerialRead( char *buf, int max ); + void SerialClose( void ); + + // static data + + // public methods +public: + // constructors + RtcmDevice(); + + // destructor + virtual ~RtcmDevice(); + + // virtual functions + + // public methods + int GetFd(void) {return SerialFd;}; + + int RtcmOpen( const char *dev, int baud ) {return SerialOpen(dev,baud); }; + void RtcmClose(void) {SerialClose();}; + + int RtcmRead( char *buf, int max ); + int RtcmWrite( const char *buf, int max ); +}; + +#endif + diff --git a/src/libgps++/SirfParser.cpp b/src/libgps++/SirfParser.cpp new file mode 100644 index 0000000..571fae7 --- /dev/null +++ b/src/libgps++/SirfParser.cpp @@ -0,0 +1,286 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "GpsListener.h" +#include "NmeaSentence.h" +#include "SirfParser.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +#pragma pack(1) + +typedef struct SiRFmsgID_41 { + u_char MessageID; + u_short NavValid; + u_short NavType; + u_short WeekNumber; + u_long TOW; + u_short UtcYear; + u_char UtcMonth; + u_char UtcDay; + u_char UtcHour; + u_char UtcMinute; + u_short UtcSecond; + u_long SatelliteList; + long Latitude; // x 10^7 + long Longitude; // x 10^7 + long AltitudeEllipsoid; + long AltitudeMSL; + u_char MapDatum; + u_short Speed; // x 10^2 + u_short Course; // x 10^2 + u_short MagneticVariation; + u_short ClimbRate; // x 10^2 + u_short HeadingRate; // x 10^2 + u_long HorizontalError; // x 10^2 + u_long VerticalError; // x 10^2 + u_long TimeError; // x 10^2 + u_short VelocityError; // x 10^2 + u_long ClockBias; + u_long ClockBiasError; + u_long ClockDrift; + u_long ClockDriftError; + u_long Distance; + u_short DistanceError; + u_char NumSatellites; + u_char HDOP; + u_char ModeInfo; +} GeodeticNavigationData; + +#pragma pack(0) + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +SirfParser::SirfParser() +{ + strcpy( Vendor, "SiRF" ); + strcpy( Product, "II/III" ); + state = 0; + + // SiRF sentences +} + +SirfParser::~SirfParser() +{ +} + +int SirfParser::SirfDecode( const u_char *buf, int max ) +{ + int posflag = 0; + int timeflag = 0; + + // decode message + switch( *buf ) + { + case '$': + return NmeaDecode( (const char *)buf, max ); + break; + case 41: // geodetic navigation message + const GeodeticNavigationData *dat = (GeodeticNavigationData *)buf; + + // fix, mode, type + PosData.Fix = NMEA_FIX_INVALID; + PosData.Mode = NMEA_MODE_INVALID; + PosData.Type = NMEA_TYPE_NOFIX; + + if ( dat->NavValid == 0 ) + { + PosData.Fix = NMEA_FIX_GPS; + PosData.Mode = NMEA_MODE_AUTOMATIC; + PosData.Type = NMEA_TYPE_2D; + + switch ( dat->NavType & 0x0007 ) + { + case 6: + PosData.Type = NMEA_TYPE_3D; + break; + case 7: + PosData.Fix = NMEA_FIX_DEAD_RECKONING; + PosData.Mode = NMEA_MODE_ESTIMATED; + break; + } + + if ( dat->NavType & 0x0080 ) + { + PosData.Fix = NMEA_FIX_DGPS; + PosData.Mode = NMEA_MODE_DIFFERENTIAL; + } + posflag = 1; + } + + // time + struct tm tm; + tm.tm_year = dat->UtcYear - 1900; + tm.tm_mon = dat->UtcMonth - 1; + tm.tm_mday = dat->UtcDay; + tm.tm_hour = dat->UtcHour; + tm.tm_min = dat->UtcMinute; + tm.tm_sec = dat->UtcSecond / 1000; + PosData.TimeStamp.tv_sec = mktime( &tm ); + PosData.TimeStamp.tv_nsec = (dat->UtcSecond % 1000) * 1000; + if ( PosData.TimeStamp.tv_sec ) + timeflag = 1; + + // position + PosData.Latitude = (double)dat->Latitude / 1E7; + PosData.Longitude = (double)dat->Longitude / 1E7; + PosData.Heading = (double)dat->Course / 1E2; + PosData.Speed = (double)dat->Speed / 1E2; + PosData.Altitude = (double)dat->AltitudeEllipsoid / 1E2; + + // error + ErrInfo.HorizontalDilution = (double)dat->HDOP * 0.2; + ErrInfo.HorizontalDeviation = 0.0; + ErrInfo.VerticalDeviation = 0.0; + break; + } + + if ( timeflag || posflag ) + { + // call listeners + for ( u_int i=0 ; iTimeListener( PosData.TimeStamp ); + if ( posflag ) + GpsListeners[i]->PositionListener( PosData, ErrInfo ); + } + } + + return posflag + timeflag; +} + +int SirfParser::SirfParse( const char *buf, int max ) +{ + if ( *buf == '$' ) + return NmeaParse( (const char *)buf, max ); + int n = 0; + + while ( max-- ) + { + u_char c = (u_char) *buf++; + + switch ( state ) + { + case 0: + // header + if ( c == 0xA0 ) + state++; + break; + case 1: + if ( c == 0xA2 && lastc == 0xA0 ) + state++; + else + state = 0; // error + break; + case 2: + // byte count + if ( c < 0x7f ) + { + totbytes = (c << 8); + state++; + } + else + state = 0; // error + break; + case 3: + totbytes |= c; + numbytes = 0; + checksum = 0; + state++; + break; + case 4: + // data + if ( numbytes < totbytes ) + { + if ( numbytes < sizeof(data) ) + data[numbytes++] = c; + checksum += c; + } + else + state++; + break; + case 5: + // checksum + if ( lastc & 0x80 ) + state = 0; // error + else if ( checksum == (((lastc << 8) | c) & 0x7fff) ) + state++; + else + state = 0; // bad checksum + break; + case 6: + // trailer + if ( c == 0xB0 ) + state++; + else + state = 0; + break; + case 7: + if ( c == 0xB3 && lastc == 0xB0 ) + { + // process sirf message + if ( SirfDecode( data, numbytes ) ) + { + counter++; + n++; + } + } + state = 0; // start over + break; + default: + // done + state = 0; + break; + } + + lastc = c; + } + + return n; +} diff --git a/src/libgps++/SirfParser.h b/src/libgps++/SirfParser.h new file mode 100644 index 0000000..eabe482 --- /dev/null +++ b/src/libgps++/SirfParser.h @@ -0,0 +1,62 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __SirfParser__ +#define __SirfParser__ + +/* includes *****************************************************************/ + +#include + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaParser.h" +#include "NmeaProtocol.h" +#include "SirfProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +class SirfParser : public NmeaParser, public SirfProtocol { + // public data +public: + + // protected data +protected: + + // private data +private: + // data + u_char state; // parser state + + // private methods + + // public methods +public: + // constructors + SirfParser(); + + // destructor + virtual ~SirfParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return SirfDecode( (const u_char *)buf, max); }; + int GpsParse( const char *buf, int max ) { return SirfParse( buf, max ); }; + + // public methods + int SirfDecode( const u_char *buf, int max ); + int SirfParse( const char *buf, int max ); +}; + +#endif diff --git a/src/libgps++/SirfProtocol.cpp b/src/libgps++/SirfProtocol.cpp new file mode 100644 index 0000000..a64aa4e --- /dev/null +++ b/src/libgps++/SirfProtocol.cpp @@ -0,0 +1,116 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "SirfProtocol.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +SirfProtocol::SirfProtocol() +{ +} + +SirfProtocol::~SirfProtocol() +{ +} + +void SirfProtocol::SirfChecksum( unsigned char *msg, int len ) +{ + unsigned short chksum = 0; + *msg++ = 0xa0; + *msg++ = 0xa2; + *msg++ = (unsigned char)(len >> 8); + *msg++ = (unsigned char)len; + + while ( len-- ) + chksum += *msg++; + chksum &= 0x7fff; + + *msg++ = (unsigned char)(chksum >> 8); + *msg++ = (unsigned char)chksum; + *msg++ = 0xb0; + *msg++ = 0xb3; +} + +/* switch from binary to NMEA at specified baud */ +void SirfProtocol::SirfBinary2Nmea( int baud, unsigned char *buf, int max ) +{ + static unsigned char msg[] = { + 0xa0, 0xa2, /* start */ + 0x00, 0x18, /* length */ + 0x81, 0x02, /* MSG 129 */ + 0x01, 0x01, /* +GGA */ + 0x00, 0x00, /* -GLL */ + 0x01, 0x01, /* +GSA */ + 0x05, 0x01, /* +GSV */ + 0x01, 0x01, /* +RMC */ + 0x01, 0x01, /* +VTG */ + 0x00, 0x01, /* -MSS */ + 0x00, 0x01, + 0x00, 0x01, /* -ZDA */ + 0x00, 0x01, + 0x96, 0x00, /* 38400 bps */ + 0x00, 0x00, /* checksum */ + 0xb0, 0xb3 /* stop */ + }; + + if ( max < (int)sizeof(msg) ) + return; + + msg[26] = (unsigned char)(baud>>8); + msg[27] = (unsigned char)baud; + + SirfChecksum( msg, 24 ); + + strcpy( (char *)buf, (const char *)msg ); +} diff --git a/src/libgps++/SirfProtocol.h b/src/libgps++/SirfProtocol.h new file mode 100644 index 0000000..325f8bb --- /dev/null +++ b/src/libgps++/SirfProtocol.h @@ -0,0 +1,53 @@ +// +// Linux GPS +// + +/* prevent multiple inclusions */ +#ifndef __SirfProtocol__ +#define __SirfProtocol__ + +/* includes *****************************************************************/ + +#include "netlib.h" + +#include "NmeaProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// GpsLinux because it depennds on GPSd, the HAMLIB and NMEAP libraries +// +class SirfProtocol { + // public data +public: + + // protected data +protected: + + // private data +private: + + // private methods + + // public methods +public: + // constructors + SirfProtocol(); + + // destructor + virtual ~SirfProtocol(); + + // virtual functions + + // public methods + static void SirfChecksum( unsigned char *buf, int len ); + static void SirfBinary2Nmea( int baud, unsigned char *buf, int max ); +}; + +#endif diff --git a/src/libgps++/TODO b/src/libgps++/TODO new file mode 100644 index 0000000..c4470d3 --- /dev/null +++ b/src/libgps++/TODO @@ -0,0 +1,8 @@ + + TODO + +Implement Applanix Parser, if absolutely needed +Test Fastrax Parser +Test Garmin Parser +Test Sirf Parser + diff --git a/src/libgps++/UbloxParser.cpp b/src/libgps++/UbloxParser.cpp new file mode 100644 index 0000000..ab6bdcf --- /dev/null +++ b/src/libgps++/UbloxParser.cpp @@ -0,0 +1,214 @@ +// +// Linux GPS +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "GpsListener.h" +#include "NmeaSentence.h" +#include "UbloxParser.h" +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UbloxParser::UbloxParser() +{ + strcpy( Vendor, "uBlox" ); + strcpy( Product, "Antares" ); + NmeaPosFix( "$GPGGA" ); // VII u-Blox + state = 0; + + // u-Blox + NmeaSentences.push_back( &PUBX ); +} + +UbloxParser::~UbloxParser() +{ +} + +int UbloxParser::UbloxDecode( const u_char *buf, int max ) +{ + int posflag = 0; + int timeflag = 0; + + switch( *buf ) + { + case '$': + return NmeaDecode( (const char *)buf, max ); + break; + } + + return posflag + timeflag; +} + +int UbloxParser::UbloxParse( const char *buf, int max ) +{ + if ( *buf == '$' ) + return NmeaParse( (const char *)buf, max ); + + return 0; +} + +// u-Blox PUBX *************************************************************** + +NmeaSentencePUBX::NmeaSentencePUBX() +{ + strcpy( name, "PUBX" ); + argc = 2; +} + +NmeaSentencePUBX::~NmeaSentencePUBX() +{ +} + +int NmeaSentencePUBX::Decode( int argc, char *argv[] ) +{ + int index; + + id = atoi( argv[1] ); + + switch ( id ) + { + case 0: // Lat/Long Position Data + if ( argc < 20 ) + return 0; + utctime = timestamp = DecodeTime( argv[2], NULL ); + latitude = DecodeCoordinate( argv[3], argv[4] ); + longitude = DecodeCoordinate( argv[5], argv[6] ); + altitude_ref = atof( argv[7] ); + strncpy( navstat, argv[8], sizeof(navstat) ); + horizontal_accuracy = atof( argv[9] ); + vertical_accuracy = atof( argv[10] ); + speed = atof( argv[11] ); + course = atof( argv[12] ); + vvel = atof( argv[13] ); + agec = atof( argv[14] ); + horizontal_dilution = atof( argv[15] ); + vertical_dilution = atof( argv[16] ); + time_dilution = atof( argv[17] ); + gps = atoi( argv[18] ); + glonass = atoi( argv[19] ); + dead_reckoning = atoi( argv[20] ); + break; + + case 1: // UTM Position Data + break; + + case 3: // Satellite Status + if ( argc < 7 ) + return 0; + satellites = atoi( argv[2] ); + index = 3; + + for ( int i = 0 ; i < satellites ; i++ ) + { + satellite[i].prn = atoi( argv[index++] ); + satellite[i].status = *argv[index++]; + satellite[i].azimuth = atof( argv[index++] ); + satellite[i].elevation = atof( argv[index++] ); + satellite[i].signal2noise = atoi( argv[index++] ); + satellite[i].locktime = atoi( argv[index++] ); + } + break; + + case 4: // Time of Day and Clock Information + if ( argc < 9 ) + return 0; + utctime = timestamp = DecodeTime( argv[2], argv[3] ); + utc_tow = atof( argv[4] ); + week = atoi( argv[5] ); + clk_b = atoi( argv[6] ); + clk_d = atoi( argv[7] ); + granularity = atoi( argv[8] ); + + break; + } + + return 0; +} + +void NmeaSentencePUBX::Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ) +{ + switch ( id ) + { + case 0: + PosData.Fix = NMEA_FIX_NOFIX; + if ( strcasecmp( navstat, "NF" ) != 0 ) + { + if ( strcasecmp( navstat, "DR" ) ) + PosData.Fix = NMEA_FIX_DEAD_RECKONING; + else if ( navstat[0] == 'G' ) + PosData.Fix = NMEA_FIX_GPS; + else if ( navstat[0] == 'D' ) + PosData.Fix = NMEA_FIX_DGPS; + if ( isdigit( navstat[1] ) ) + PosData.Type = navstat[1] - '0'; + PosData.TimeStamp.tv_sec = utctime.tv_sec; + PosData.Latitude = latitude; + PosData.Longitude = longitude; + PosData.Heading = course; + PosData.Speed = speed; + // no error info + } + break; + case 1: + break; + case 3: + SatInfo.Satellites = satellites; + for ( u_int i=0 ; i + +#include "netlib.h" + +#include "GpsListener.h" +#include "GpsParser.h" + +#include "NmeaParser.h" +#include "NmeaProtocol.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class NmeaSentencePUBX : public NmeaSentence { +public: + int id; + timespec utctime; + // 00 + double latitude; + double longitude; + double altitude_ref; + char navstat[4]; + double horizontal_accuracy; + double vertical_accuracy; + double speed; + double course; + double vvel; + double agec; + double horizontal_dilution; + double vertical_dilution; + double time_dilution; + int gps; + int glonass; + int dead_reckoning; + + // 01 + + // 03 + int satellites; + struct { + int prn; + char status; + double azimuth; + double elevation; + int signal2noise; + int locktime; + } satellite[NMEA_MAX_SATELLITE]; + + // 04 + double utc_tow; + int week; + int clk_b; + double clk_d; + int granularity; + + NmeaSentencePUBX(); + ~NmeaSentencePUBX(); + + int Decode( int argc, char *argv[] ); + void Update( GpsPoint &PosData, ErrorInfo &ErrInfo, SatelliteInfo &SatInfo ); +}; + +class UbloxParser : public NmeaParser { + // public data +public: + + // protected data +protected: + // u-Blox + NmeaSentencePUBX PUBX; + + // private data +private: + // data + u_char state; // parser state + + // private methods + + // public methods +public: + // constructors + UbloxParser(); + + // destructor + virtual ~UbloxParser(); + + // virtual functions + int GpsDecode( const char *buf, int max ) { return UbloxDecode( (const u_char *)buf, max); }; + int GpsParse( const char *buf, int max ) { return UbloxParse( buf, max ); }; + + // public methods + int UbloxDecode( const u_char *buf, int max ); + int UbloxParse( const char *buf, int max ); +}; + +#endif diff --git a/src/libnet++/CMakeLists.txt b/src/libnet++/CMakeLists.txt new file mode 100644 index 0000000..d9c6d3e --- /dev/null +++ b/src/libnet++/CMakeLists.txt @@ -0,0 +1,106 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME net++) +set(TARGET lib${NAME}) +project(Cnomicon-${TARGET}) +set(CMAKE_INSTALL_PREFIX ..) +set(LIBRARY ${TARGET}) + +# list of header files +set(LIBH + Client.h + Clock.h + ClockTimer.h + Daemon.h + LogData.h + Logging.h + Mutex.h + PosixTimer.h + QueryString.h + RawSocket.h + SerialIO.h + Server.h + Socket.h + TcpArchdaemon.h + TcpClient.h + TcpDaemon.h + TcpServer.h + TcpSocket.h + TcpThread.h + Thread.h + Timer.h + UdpArchdaemon.h + UdpCaster.h + UdpClient.h + UdpDaemon.h + UdpServer.h + UdpSocket.h + UdpThread.h + UdsClient.h + UdsDaemon.h + UdsServer.h + UdsSocket.h + UdsThread.h + UriParse.h + ) + +# list of source files +set(LIBSRC + Client.cpp + Clock.cpp + ClockTimer.cpp + Daemon.cpp + LogData.cpp + Logging.cpp + Mutex.cpp + PosixTimer.cpp + QueryString.cpp + RawSocket.cpp + SerialIO.cpp + Server.cpp + Socket.cpp + TcpArchdaemon.cpp + TcpClient.cpp + TcpDaemon.cpp + TcpServer.cpp + TcpSocket.cpp + TcpThread.cpp + Thread.cpp + Timer.cpp + UdpArchdaemon.cpp + UdpCaster.cpp + UdpClient.cpp + UdpDaemon.cpp + UdpServer.cpp + UdpSocket.cpp + UdpThread.cpp + UdsClient.cpp + UdsDaemon.cpp + UdsServer.cpp + UdsSocket.cpp + UdsThread.cpp + UriParse.cpp + ) + +# includes +include_directories(../include ../libnet) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) + +# this is the "object library" target: compiles the sources only once +add_library(${LIBRARY} OBJECT ${LIBSRC}) + +# shared libraries need PIC +set_property(TARGET ${LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE 1) + +# shared and static libraries built from the same object files +add_library(${LIBRARY}-shared SHARED $) +add_library(${LIBRARY}-static STATIC $) + +# output file names +set_target_properties(${LIBRARY}-shared PROPERTIES OUTPUT_NAME ${NAME}) +set_target_properties(${LIBRARY}-static PROPERTIES OUTPUT_NAME ${NAME}) + +# installations +install (FILES ${LIBH} DESTINATION include/${TARGET}) +#install (FILES lib${NAME}.a lib${NAME}.so DESTINATION lib) diff --git a/src/libnet++/Client.cpp b/src/libnet++/Client.cpp new file mode 100644 index 0000000..5c30fa8 --- /dev/null +++ b/src/libnet++/Client.cpp @@ -0,0 +1,79 @@ +// +// Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "Client.h" +#include "UriParse.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +Client::Client() +{ +} + +Client::~Client() +{ +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int Client::ConnectUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Connect( Uri.getHost(), Uri.getService() ); +} + +int Client::ListenUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Listen( Uri.getHost(), Uri.getService() ); +} + diff --git a/src/libnet++/Client.h b/src/libnet++/Client.h new file mode 100644 index 0000000..ead125a --- /dev/null +++ b/src/libnet++/Client.h @@ -0,0 +1,63 @@ +// +// Client +// + +/* prevent multiple inclusions */ +#ifndef __Client__ +#define __Client__ + +/* includes *****************************************************************/ + +#include "Socket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Client { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + Client(); + + // destructor + virtual ~Client(); + + // public methods + int ConnectUri( const char *uri ); + int ListenUri( const char *uri ); + + // virtual functions + virtual int Connect( const char *host, const char *service=NULL ) + {return -1;}; + virtual int Listen( const char *host, const char *service=NULL ) + {return 0;}; + + // exceptions + class ClientException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/Clock.cpp b/src/libnet++/Clock.cpp new file mode 100644 index 0000000..d5609a0 --- /dev/null +++ b/src/libnet++/Clock.cpp @@ -0,0 +1,139 @@ +// +// Linux Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "Clock.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +static bool m_init = false; + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +Clock::Clock() +{ + SetTime(); + if ( !m_init ) + { + m_init = true; + } +} + +Clock::Clock( time_t tic ) +{ + if ( tic ) + SetTime( tic ); +} + +Clock::~Clock() +{ +} + +// copy +inline Clock::Clock( const Clock& src ) +{ +} + +// assignment +inline const Clock& Clock::operator=( const Clock& src ) +{ + return *this; +} + +//**************************************************************************** +// Parent Functions +//***************************************************************************/ + +void Clock::SetTime(void) +{ + clock_gettime( CLOCK_REALTIME, &Time ); +} + +void Clock::SetTime( time_t sec, suseconds_t usec ) +{ + Time.tv_sec = sec; + Time.tv_nsec = usec * 1000L; +} + +unsigned long long Clock::GetTimeStamp() +{ + // microsecond timestamp + unsigned long long ts = ((unsigned long long)Time.tv_sec * 1000000UL) + ((unsigned long long)Time.tv_nsec / 1000UL); + return ts; +} + +void Clock::SetTimeStamp( unsigned long long ts ) +{ + Time.tv_sec = ts / 1000UL; + Time.tv_nsec = (ts % 1000000UL) * 1000UL; +} + +int Clock::Format( char *buf, int max ) +{ + return Format( Time, &buf, &max ); +} + +struct timespec Clock::Parse( const char *buf ) +{ + struct tm tm; + + char *s = strptime( buf, "%F %T", &tm ); + Time.tv_sec = mktime( &tm ); + + if ( s && *s =='.' ) + Time.tv_nsec = atol( s+1 ) * 1000; + + return Time; +} + +int Clock::Format( const struct timespec &tv, char **buf, int *max ) +{ + struct tm tm; + + gmtime_r( &tv.tv_sec, &tm ); + + int n = snprintf( *buf, *max, "%4d-%02d-%02d %02d:%02d:%02d.%06d", + tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec, (int)(tv.tv_nsec/1000) ); + + *buf += n; + *max -= n; + return n; +} + diff --git a/src/libnet++/Clock.h b/src/libnet++/Clock.h new file mode 100644 index 0000000..adb62dd --- /dev/null +++ b/src/libnet++/Clock.h @@ -0,0 +1,79 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Clock__ +#define __Clock__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include + +#include +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Clock { + // public data +public: + + // protected data +protected: + struct timespec Time; + + // private data +private: + + // public methods +public: + // constructors + Clock(); + Clock( time_t tic ); + + // destructor + virtual ~Clock(); + + Clock( const Clock& ); + const Clock& operator=( const Clock& ); + + // public methods + time_t GetUtc( void ) { return Time.tv_sec; }; + struct timespec GetTimeSpec() { return Time; }; + + int Format( char *buf, int max ); + struct timespec Parse( const char *buf ); + + void SetTime( void ); + void SetTime( time_t sec, suseconds_t usec=0L ); + void SetTime( const struct timespec &tv ) { Time = tv; }; + + // microsecond time stamp + unsigned long long GetTimeStamp(); + void SetTimeStamp( unsigned long long ts ); + + // virtual functions + + // exceptions + + // static methods +static int Format( const struct timespec &tv, char **buf, int *max ); + + // private methods +private: + + // signal catchers (do not override) +}; + +#endif diff --git a/src/libnet++/ClockTimer.cpp b/src/libnet++/ClockTimer.cpp new file mode 100644 index 0000000..a717ebc --- /dev/null +++ b/src/libnet++/ClockTimer.cpp @@ -0,0 +1,148 @@ +// +// Linux Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "ClockTimer.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +static bool m_init = false; +static struct timespec s_resolution; + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +ClockTimer::ClockTimer() +{ + if ( !m_init ) + { + clock_getres( CLOCK_MONOTONIC, &s_resolution ); + log_printf( "Timer/clock monotonic resolution = %lu nanoseconds", + (unsigned long)s_resolution.tv_nsec ); + m_init = true; + } + m_running = false; +} + +ClockTimer::ClockTimer(unsigned long usec) +{ + Start(usec); +} + +ClockTimer::~ClockTimer() +{ +} + +// copy +inline ClockTimer::ClockTimer( const ClockTimer& src ) +{ + m_timespec = src.m_timespec; + m_timeout = src.m_timeout; + m_running = src.m_running; +} + +// assignment +inline const ClockTimer& ClockTimer::operator=( const ClockTimer& src ) +{ + this->m_timespec = src.m_timespec; + this->m_timeout = src.m_timeout; + this->m_running = src.m_running; + return *this; +} + +//**************************************************************************** +// Parent Functions +//***************************************************************************/ + +int ClockTimer::Restart(void) +{ + if ( !m_timeout ) + return 0; + clock_gettime( CLOCK_MONOTONIC, &m_timespec ); + m_running = true; + return 1; +} + +int ClockTimer::Start( unsigned long msec ) +{ + clock_gettime( CLOCK_MONOTONIC, &m_timespec ); + m_timeout = msec; + m_running = true; + return 1; +} + +void ClockTimer::Stop(void) +{ + m_running = false; +} + +unsigned long ClockTimer::Remaining(void) +{ + struct timespec now; + clock_gettime( CLOCK_MONOTONIC, &now ); + + long diff = ((now.tv_sec - m_timespec.tv_sec) * 1000000L) + + ((now.tv_nsec - m_timespec.tv_nsec) / 1000L); + + // time remaining + return m_timeout - diff; +} + +int ClockTimer::Wait(void) +{ + if ( !m_running ) + return 0; + + m_running = false; + + m_timespec.tv_nsec += (m_timeout % 1000000UL) * 1000UL; + if ( m_timespec.tv_nsec >= 1000000000L ) + { + m_timespec.tv_nsec -= 1000000000UL; + m_timespec.tv_sec++; + } + m_timespec.tv_sec += (m_timeout / 1000000UL); + + return clock_nanosleep( CLOCK_MONOTONIC, TIMER_ABSTIME, &m_timespec, NULL ); +} + +int ClockTimer::Sync(void) +{ + Wait(); + return Restart(); +} diff --git a/src/libnet++/ClockTimer.h b/src/libnet++/ClockTimer.h new file mode 100644 index 0000000..ec2083f --- /dev/null +++ b/src/libnet++/ClockTimer.h @@ -0,0 +1,64 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __ClockTimer__ +#define __ClockTimer__ + +/* includes *****************************************************************/ + +#include "Timer.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class ClockTimer : public Timer { + // public data +public: + + // protected data +protected: + + // private data +private: + long m_timeout; // usec + + // public methods +public: + // constructors + ClockTimer(); + ClockTimer(unsigned long usec); + + // destructor + virtual ~ClockTimer(); + + ClockTimer( const ClockTimer& ); + const ClockTimer& operator=( const ClockTimer& ); + + // public methods + int Restart(void); + int Start( unsigned long usec ); + void Stop(void); + unsigned long Remaining(void); + int Wait(void); + int Sync(void); // Wait()+Restart() + + // virtual functions + + // exceptions + + // static methods + + // private methods +private: + + // signal catchers (do not override) +}; + +#endif diff --git a/src/libnet++/Daemon.cpp b/src/libnet++/Daemon.cpp new file mode 100644 index 0000000..5c24e3d --- /dev/null +++ b/src/libnet++/Daemon.cpp @@ -0,0 +1,191 @@ +// +// Linux Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "Daemon.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +static Daemon *Self = NULL; + +//**************************************************************************** +// static functions +//***************************************************************************/ + +void Daemon::signal_alarm(int signum) +{ + Self->SignalAlarm(); +} + +void Daemon::signal_child(int signum) +{ + pid_t pid; + int stat; + + /* grim reaper cleans up after children */ + while( (pid = waitpid(-1, &stat, WNOHANG)) > 0) + ; + return; +} + +void Daemon::signal_death(int signum) +{ + signal(signum, NULL); + int e = Daemon::SignalDeath(); + if ( e ) + { + log_printf( "SIGTERM received, exit code = %d", e ); + Self->DaemonShutdown(); + exit( e ); + } + else + log_write( "SIGTERM received, handled by application" ); +} + +void Daemon::signal_intrp(int signum) +{ + int e = Daemon::SignalInterrupt(); + if ( e ) + { + log_printf( "SIGINT received, exit code = %d", e ); + Self->DaemonShutdown(); + exit( e ); + } + else + log_write( "SIGINT received, handled by application" ); +} + +void Daemon::signal_hup( int signum ) +{ + log_write( "SIGHUP received, reload" ); + Daemon::SignalHup(); + Self->DaemonReload(); +} + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +Daemon::Daemon() +{ + m_debug = 0; + bzero( m_name, sizeof(m_name) ); + Self = this; +} + +Daemon::Daemon( const char *name, int debug, int noclose ) +{ + m_debug = 0; + Self = this; + if ( !Daemonize( name, debug, noclose ) ) + throw DaemonException(); +} + +Daemon::~Daemon() +{ + DaemonShutdown(); + log_write( "Daemon destructor called!" ); +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int Daemon::Daemonize( const char *name, int debug, int noclose ) +{ + m_debug = debug; + + /* become a daemon */ + if ( !m_debug ) + { + if ( daemon( 0, noclose ) < 0 ) + { + /* error */ + log_error( "daemon" ); + return 0; + } + } + + // process name + if ( name && strlen(name) ) + strncpy( m_name, name, sizeof(m_name)-1 ); + + /* pid */ + m_pid = getpid(); + if ( !pid_create( m_name ) ) + { + log_error( "Daemon can't write pid file!" ); + return 0; + } + + log_printf( "Daemon forked: %s (pid=%d) debug=%d", m_name, m_pid, m_debug ); + + // Establish signal handler to clean up before termination + if (signal(SIGTERM, (void(*)(int))&signal_death) == SIG_IGN) + signal(SIGTERM, SIG_IGN); + + // alarm handler + signal(SIGALRM, (void(*)(int))&signal_alarm); + + // ctrl-c handler + if ( m_debug ) + signal(SIGINT, (void(*)(int))&signal_intrp); + else + signal(SIGINT, SIG_IGN); + + // reload handler + signal( SIGHUP, signal_hup ); + + DaemonStartup(); + + return 1; +} + +void Daemon::Die( int code ) +{ + DaemonShutdown(); + log_write( "Die called!" ); + exit(code); +} + +void Daemon::Dprintf( const char *fmt, ... ) +{ + va_list ap; + + if ( !m_debug ) + return; + + va_start( ap, fmt ); + vfprintf( stderr, fmt, ap ); + va_end( ap ); +} diff --git a/src/libnet++/Daemon.h b/src/libnet++/Daemon.h new file mode 100644 index 0000000..9c1311f --- /dev/null +++ b/src/libnet++/Daemon.h @@ -0,0 +1,89 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Daemon__ +#define __Daemon__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include + +#include "LogData.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Daemon { + // public data +public: + + // protected data +protected: + + // private data +private: + char m_name[32]; + bool m_debug; + int m_pid; + + // public methods +public: + // constructors + Daemon(); + Daemon( const char *name, int debug, int noclose ); + + // destructor + virtual ~Daemon(); + + // public methods + int Daemonize( const char *name, int debug=0, int noclose=0 ); + void Die( int code ); + + void SetDebug(bool debug) {m_debug = debug;}; + bool GetDebug(void) {return m_debug;}; + bool IsDebug(void) {return m_debug;}; + void Dprintf( const char *fmt, ... ); + + void SetName(const char *s) {strncpy(m_name,s,sizeof(m_name)-1);}; + char *GetName(void) {return m_name;}; + + int GetPid(void) {return m_pid;}; + + // virtual functions + virtual void DaemonStartup(void) {}; + virtual void DaemonShutdown(void) {}; + virtual void DaemonReload(void) {}; + + // exceptions + class DaemonException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods to override +static int SignalAlarm(void) {return 1;}; +static int SignalDeath(void) {return 1;}; +static int SignalInterrupt(void) {return 1;}; +static void SignalHup(void) {;}; + + // private methods +private: + // signal catchers (do not override) +static void signal_alarm(int signum); +static void signal_child(int signum); +static void signal_death(int signum); +static void signal_intrp(int signum); +static void signal_hup(int signum); +}; + +#endif diff --git a/src/libnet++/LogData.cpp b/src/libnet++/LogData.cpp new file mode 100644 index 0000000..8e415c4 --- /dev/null +++ b/src/libnet++/LogData.cpp @@ -0,0 +1,553 @@ +// +// GPS Daemon +// Neal Probert +// + +#include + +#include "UriParse.h" +#include "LogData.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +#ifdef MYSQL_LOGGING +#define XML_LOGGING +#endif + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + + +#ifdef MYSQL_LOGGING +static const char *create_tbl = + "CREATE TABLE `%s` (\n" + "`recid` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,\n" + "`timestamp` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,\n" + "`timeval` BIGINT NOT NULL,\n" + "`rectype` CHAR NOT NULL,\n" + "`recdata` VARCHAR(65536) NULL\n" + ") ENGINE = MYISAM ;"; + +static const char *insert_rec = + "INSERT INTO %s (timeval,rectype,%s) VALUES (%llu,'%c','%s');"; +#endif + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +LogData::LogData() +{ + m_binary = false; + nrecords = 0; + pFile = NULL; +#ifdef MYSQL_LOGGING + myconn = NULL; + strcpy( mytable, "" ); + strcpy( myfields, "recdata" ); +#endif + m_syslog = false; + m_logging = false; +} + +LogData::~LogData() +{ + LogClose(); +} + +FILE *LogData::LogOpen( const char *uri, int bz2 ) +{ + UriParse parsed; + parsed.setService( LOGD_PORT ); + parsed.setUri( uri ); + + m_logging = false; +#ifdef MYSQL_LOGGING + myconn = NULL; +#endif + + const char *proto = parsed.getProto(); + + const char *file = NULL; + if ( proto && strlen(proto) ) + file = parsed.getPath(); + else + file = uri; + + if ( !proto || strcmp( proto, "" ) == 0 ) + { + // default to file + pFile = fopen(file, "a+"); + if ( pFile ) + { + m_logging = true; + return pFile; + } + } + else if ( strcmp( proto, "-") == 0 || strcmp( proto, "stderr" ) == 0 ) + { + // stderr + pFile = fdopen(STDERR_FILENO, "a+"); + if ( pFile ) + { + m_logging = true; + return pFile; + } + } + else if ( strcmp( proto, "file" ) == 0 ) + { + // explicit file + pFile = fopen(file, "a+"); + if ( pFile ) + { + m_logging = true; + return pFile; + } + } + else if ( strcmp( proto, "logd" ) == 0 ) + { + // open UDP client + Connect( parsed.getHost(), parsed.getService() ); + m_logging = true; + return fdopen(m_sock, "a"); + } + else if ( strcmp( proto, "syslog") == 0 ) + { + // syslog://name:level + const char *facility = parsed.getService(); + int fac = LOG_LOCAL0; + if ( strcmp(facility,"local1")==0) + fac = LOG_LOCAL1; + else if ( strcmp(facility,"local2")==0) + fac = LOG_LOCAL2; + else if ( strcmp(facility,"local3")==0) + fac = LOG_LOCAL3; + else if ( strcmp(facility,"local4")==0) + fac = LOG_LOCAL4; + else if ( strcmp(facility,"local5")==0) + fac = LOG_LOCAL5; + else if ( strcmp(facility,"local6")==0) + fac = LOG_LOCAL6; + else if ( strcmp(facility,"local7")==0) + fac = LOG_LOCAL7; + else if ( strcmp(facility,"user")==0) + fac = LOG_USER; + + openlog( parsed.getHost(), LOG_PID, fac ); + m_logging = true; + m_syslog = true; + } +#ifdef MYSQL_LOGGING + else if ( strcmp( proto, "mysql" ) == 0 ) + { + // mysql://host:database/table + char dbtable[256]; + MYSQL_RES *res; + + myconn = mysql_init(NULL); + if ( !myconn ) + { + log_write( "Unable to initialize MySQL connection!" ); + return NULL; + } + + time_t ti = time(NULL); + struct tm *tm; + tm = localtime( &ti ); + + // extract database and table + strncpy( dbtable, parsed.getPath(), sizeof(dbtable) ); + char *db = dbtable; + if ( *db == '/' ) + db++; + char *tbl = strchr( db, '/' ); + if ( tbl ) + { + // split db and table names + *tbl++ = '\0'; + + if ( strchr( (const char *)tbl, '%') ) + strftime( mytable, sizeof(mytable), tbl, tm ); + else + strncpy( mytable, tbl, sizeof(mytable) ); + } + else + { + // make table name + strftime( mytable, sizeof(mytable), + "data_%y%m%d_%H%M", tm ); + } + + if ( !mysql_real_connect( myconn, + parsed.getHost(), + parsed.getUser(), parsed.getPassword(), + db, + 0, NULL, 0L ) ) + { + log_printf( "MySQL Database failed: %s", uri ); + return NULL; + } + log_printf( "MySQL Database opened: %s", uri ); + + // check table + res = mysql_list_tables( myconn, mytable ); + if ( res && res->row_count > 0 ) + { + log_printf( "Table found: %s", mytable ); + mysql_free_result( res ); + tbl = mytable; + } + else + { + log_printf( "Table not found: %s", mytable ); + tbl = NULL; + } + + // new table? + if ( !tbl ) + { + // create table + char sql[4096]; + snprintf( sql, sizeof(sql), create_tbl, mytable ); + log_printf( "Table created: %s", mytable ); + log_write( sql ); + mysql_query( myconn, sql ); + } + + // check for columns (tbd) + + m_logging = true; + return (FILE*)myconn; + } +#endif + return NULL; +} + +int LogData::CsvSplit( char *buf, char *field[], int max ) +{ + // split up into tokens + int count = 0; + + if ( !buf || !strlen(buf) ) + return 0; + + // parse tokens out between commas + char *token = buf; + do + { + char *delim = strchr( token, ',' ); + + // mark token + if ( field ) + field[count] = token; + count++; + + // separate + if ( delim ) + *delim++ = '\0'; + token = delim; + } while ( token && *token && count < max ); + + // zap the rest out + if ( field ) + { + for ( int i=count; i= 0 ) + LogWrite(buf, n ); + return n; +} + +int LogData::LogWrite( const char *in, int max ) +{ + if ( !m_logging ) + return 0; + + // time stamp + struct timeval tv; + gettimeofday( &tv, NULL ); + +#ifdef XML_LOGGING + bool xml = false; + + // detect XML + if ( strncasecmp( in, "= 0 ) + { + // send as is, time stamped on other end + SendTo( in, max ); + return strlen(in); + } + else if ( m_syslog ) + { + int level = LOG_INFO; + if ( strcasestr( in, "error" ) ) + level = LOG_ERR; + else if ( strcasestr( in, "warning" ) ) + level = LOG_WARNING; + else if ( strcasestr( in, "notice" ) ) + level = LOG_NOTICE; + else if ( strcasestr( in, "debug" ) ) + level = LOG_DEBUG; + + syslog(level, "%s", in ); + } +#ifdef MYSQL_LOGGING + else if ( myconn ) + { + char sql[65536]; + int n; + + // time stamp in microseconds + unsigned long long stamp = (tv.tv_sec * 1000ULL) + (tv.tv_usec/1000L); + + if ( m_binary ) + { + // DSRC messages + char dat[4096]; + + // base64 (no need to escape) + base64( (const unsigned char *)in, dat, max ); + + // create query + n = snprintf( sql, sizeof(sql), insert_rec, mytable, myfields, + stamp, 'B', dat ); + } + else + { + // XML up to 64K + char dat[65536]; + + // text, quote the data for insertion + mysql_real_escape_string( myconn, dat, in, max ); + + // create query + n = snprintf( sql, sizeof(sql), insert_rec, mytable, myfields, + stamp, xml?'X':'T', dat ); + } + + // do it! + if ( mysql_query( myconn, sql ) == 0 ) + { + nrecords++; + return n; + } + else + { + log_printf( "Insert failed: ", sql ); +// mysql_close( myconn ); +// myconn = NULL; + return -1; + } + } +#endif + else if ( !m_binary ) + { + log_write( in ); + return strlen(in); + } + + return 0; +} + +int LogData::LogRead( timeval *tv, char *buf, int max ) +{ + if ( buf ) + *buf = '\0'; + else + return 0; + + if ( pFile ) + { + char log[4096]; + if ( fgets(log, sizeof(log), pFile) ) + { + // decode timestamp + sscanf(log, "%lu.%lu,", &tv->tv_sec, &tv->tv_usec ); + + char *s = strchr(log,' '); + if ( s ) + strncpy(buf, s, max); + } + } +#ifdef MYSQL_LOGGING + else if ( myconn ) + { + // initial query + if ( !myres ) + { + // query + char sql[256]; + snprintf( sql, sizeof(sql), "SELECT * FROM %s;", mytable ); + + // get result + if ( mysql_query( myconn, sql ) == 0 ) + { + myres = mysql_store_result( myconn ); + + int nfields = mysql_num_fields(myres); + if ( nfields < 5 ) + return -1; + } + else + return -1; + } + + // read next row + MYSQL_ROW row; + + if ((row = mysql_fetch_row(myres))) + { + // pick off (recid, timestamp, timeval, base64, recdata) +// long recid = atol( row[0] ); +// char *timestamp = row[1]; +// double timeval = atof( row[2] ); + + // type + m_binary = *row[3]=='B'; + + // data + char *recdata = row[4]; + if ( m_binary ) + unbase64( buf, (unsigned char *)buf, max ); + else + strncpy( buf, recdata, max-1 ); + } + else + { + mysql_free_result(myres); + return 0; + } + } +#endif + + return strlen(buf); +} + + +void LogData::LogClose( void ) +{ + if ( !m_logging ) + return; + + if ( pFile ) + fclose(pFile); + else if ( m_sock >= 0 ) + close( m_sock ); +#ifdef MYSQL_LOGGING + else if ( myconn ) + { + mysql_close( myconn ); + myconn = NULL; + } +#endif + m_logging = false; +} + +void LogData::LogRotate( void ) +{ + // TBD +#ifdef MYSQL_LOGGING + if ( myconn ) + { + // change table + } +#endif +} diff --git a/src/libnet++/LogData.h b/src/libnet++/LogData.h new file mode 100644 index 0000000..f0fc4c3 --- /dev/null +++ b/src/libnet++/LogData.h @@ -0,0 +1,91 @@ +// +// GPS Daemon +// Neal Probert +// + +/* prevent multiple inclusions */ +#ifndef __LogData__ +#define __LogData__ + +/* includes *****************************************************************/ + +#include +#include + +#include "UdpClient.h" + +#ifdef MYSQL_LOGGING +#include "mysql/mysql.h" +#endif +#ifdef BZIP2_LOGGING +#include "bzlib.h" +#endif + +/* defines ******************************************************************/ + +#define LOGD_PORT "2940" + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Uses the Peak Systems CAN Linux driver and Nissan CAN data +// +class LogData : public UdpClient { + // public data +public: + + // private data +private: + // MySQL logging + int nfields; + char myfields[2048]; + FILE *pFile; +#ifdef MYSQL_LOGGING + MYSQL *myconn; + char mytable[256]; + MYSQL_RES *myres; +#endif + long nrecords; + + // formats + bool m_logging; + bool m_syslog; + bool m_binary; + + // static data + + // public methods +public: + // constructors + LogData(); + + // destructor + virtual ~LogData(); + + // public methods + FILE *LogOpen( const char *log = NULL, int bz2=0 ); + int LogRead( timeval *tv, char *buf, int max ); + int LogPrintf( const char *fmt, ... ); + int LogWrite( const char *buf, int max ); + void LogClose( void ); + void LogRotate( void ); + + // text only csv logging + void LogFields( const char *flds ); + int CsvSplit( char *buf, char *field[], int max ); + + // logging control + bool IsLogging(void) {return m_logging;}; + void SetBinary(void) { m_binary=true; }; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/Logging.cpp b/src/libnet++/Logging.cpp new file mode 100644 index 0000000..5a0dd2e --- /dev/null +++ b/src/libnet++/Logging.cpp @@ -0,0 +1,59 @@ +// +// Linux Logging +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "Logging.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +Logging::Logging() +{ +} + +Logging::~Logging() +{ + Log.LogClose(); +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + diff --git a/src/libnet++/Logging.h b/src/libnet++/Logging.h new file mode 100644 index 0000000..0d79c35 --- /dev/null +++ b/src/libnet++/Logging.h @@ -0,0 +1,59 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Logging__ +#define __Logging__ + +/* includes *****************************************************************/ + +#include "LogData.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Logging { + // public data +public: + LogData Log; + +protected: + // logfile + + // pid + + // private data +private: + + // static data + + // public methods +public: + // constructors + Logging(); + + // destructor + virtual ~Logging(); + + // public methods + FILE *LogOpen( const char *log, int bz2 ) + { return Log.LogOpen( log, bz2 ); }; + FILE *LogOpen( const char *log ) + { return Log.LogOpen( log ); }; + bool IsLogging(void) {return Log.IsLogging();}; + + // virtual functions + + // exceptions + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/Mutex.cpp b/src/libnet++/Mutex.cpp new file mode 100644 index 0000000..f41cb90 --- /dev/null +++ b/src/libnet++/Mutex.cpp @@ -0,0 +1,98 @@ +// +// Linux Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "Mutex.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +Mutex::Mutex() +{ + Mutex::Init(); +} + +Mutex::~Mutex() +{ +} + +// copy +inline Mutex::Mutex( const Mutex& src ) +{ + memcpy( &m_attr, &src.m_attr, sizeof( pthread_mutexattr_t ) ); + memcpy( &m_mutex, &src.m_mutex, sizeof( pthread_mutex_t ) ); +} + +// assignment +inline const Mutex& Mutex::operator=( const Mutex& src ) { + memcpy( &m_attr, &src.m_attr, sizeof( pthread_attr_t ) ); + memcpy( &m_mutex, &src.m_mutex, sizeof( pthread_mutex_t ) ); + return *this; +} + +void Mutex::Init(void) +{ + bzero(&m_attr, sizeof(m_attr)); + bzero(&m_mutex, sizeof(m_mutex)); + + pthread_mutexattr_init(&m_attr); + pthread_mutexattr_settype(&m_attr, PTHREAD_MUTEX_ERRORCHECK); + pthread_mutex_init(&m_mutex, &m_attr); +} + +//**************************************************************************** +// Parent Functions +//***************************************************************************/ + +int Mutex::Lock(void) +{ + return pthread_mutex_lock(&m_mutex); +} + +int Mutex::TryLock(void) +{ + return pthread_mutex_trylock(&m_mutex); +} + +int Mutex::Unlock(void) +{ + return pthread_mutex_unlock(&m_mutex); +} + diff --git a/src/libnet++/Mutex.h b/src/libnet++/Mutex.h new file mode 100644 index 0000000..815b429 --- /dev/null +++ b/src/libnet++/Mutex.h @@ -0,0 +1,72 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Mutex__ +#define __Mutex__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Mutex { + // public data +public: + + // protected data +protected: + pthread_mutexattr_t m_attr; + pthread_mutex_t m_mutex; + + // private data +private: + + // public methods +public: + // constructors + Mutex(); + + // destructor + virtual ~Mutex(); + + Mutex( const Mutex& ); + const Mutex& operator=( const Mutex& ); + + // public methods + void Init( void ); + int Lock( void ); + int TryLock( void ); + int Unlock( void ); + + // virtual functions + + // exceptions + class MutexException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods to override + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/PosixTimer.cpp b/src/libnet++/PosixTimer.cpp new file mode 100644 index 0000000..9881c5e --- /dev/null +++ b/src/libnet++/PosixTimer.cpp @@ -0,0 +1,202 @@ +// +// Posix Timer +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "PosixTimer.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +static bool s_init = false; + +//**************************************************************************** +// static functions +//***************************************************************************/ + +static void handler( int sig, siginfo_t *info, void *context ) +{ +} + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +void PosixTimer::Init(void) +{ + if ( !s_init ) + { + log_printf( "RT Signals = %d .. %d\n", SIGRTMIN, SIGRTMAX ); + s_init = true; + } + m_timerid = 0; + m_running = false; + m_oneshot = false; + + // need RT signal + m_signal = sigrt_alloc(); + log_printf( "RT Signal allocated = %d\n", m_signal ); + if ( !m_signal ) + return; + + // signal handler + struct sigaction action; + action.sa_sigaction = handler; + sigemptyset(&action.sa_mask); // add signal to mask ??? + sigaddset(&action.sa_mask, m_signal); + action.sa_flags = SA_SIGINFO; + sigaction(m_signal, &action, NULL); +} + +PosixTimer::PosixTimer() +{ + Init(); +} + +PosixTimer::PosixTimer(unsigned long usec) +{ + Init(); + Start(usec); +} + +PosixTimer::~PosixTimer() +{ + Stop(); + + signal( m_signal, NULL ); + sigrt_free( m_signal ); + m_signal = 0; +} + +//**************************************************************************** +// Parent Functions +//***************************************************************************/ + +int PosixTimer::Restart(void) +{ + if ( m_oneshot ) + { + m_value.it_interval.tv_sec = 0; + m_value.it_interval.tv_nsec = 0; + } + else + { + m_value.it_interval.tv_sec = m_value.it_value.tv_sec; + m_value.it_interval.tv_nsec = m_value.it_value.tv_nsec; + } + + // start timer + if ( timer_settime( m_timerid, 0, &m_value, NULL ) == 0 ) + { + m_running = true; + return 1; + } + return 0; +} + +int PosixTimer::Start( unsigned long usec, bool one_shot ) +{ + // use timer to send signal + if ( !m_signal ) + return 0; + struct sigevent event; + event.sigev_notify = SIGEV_SIGNAL; + event.sigev_signo = m_signal; + + if ( m_timerid ) + timer_delete( m_timerid ); + + if ( timer_create( CLOCK_REALTIME, &event, &m_timerid ) == 0 ) + { + // timeout + m_value.it_value.tv_sec = usec / 1000000; + m_value.it_value.tv_nsec = (usec % 1000000) * 1000; + m_oneshot = one_shot; + + return Restart(); + } + m_running = false; + return 0; +} + +void PosixTimer::Stop(void) +{ + if ( m_timerid ) + timer_delete( m_timerid ); + m_timerid = 0; + m_running = false; +} + +unsigned long PosixTimer::Remaining(void) +{ + if ( !m_running ) + return 0L; + + struct itimerspec value; + + timer_gettime( m_timerid, &value ); + + unsigned long usec = value.it_value.tv_sec * 1000000; + usec += value.it_value.tv_nsec / 1000; + return usec; +} + +int PosixTimer::Wait(void) +{ + if ( !m_running ) + return 0; + + // wait for signal + sigset_t sigs; + sigemptyset(&sigs); + sigaddset(&sigs, m_signal); + int sig; + if ( sigwait( &sigs, &sig ) == 0 ) + { + if ( sig == m_signal ) + { + if ( m_oneshot ) + { + timer_delete( m_timerid ); + m_timerid = 0; + m_running = false; + } + return 1; + } + } + return 0; +} + +int PosixTimer::Sync(void) +{ + Wait(); + return Restart(); +} diff --git a/src/libnet++/PosixTimer.h b/src/libnet++/PosixTimer.h new file mode 100644 index 0000000..b974603 --- /dev/null +++ b/src/libnet++/PosixTimer.h @@ -0,0 +1,66 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __PosixTimer__ +#define __PosixTimer__ + +/* includes *****************************************************************/ + +#include "Timer.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class PosixTimer : public Timer { + // public data +public: + + // protected data +protected: + + // private data +private: + timer_t m_timerid; + struct itimerspec m_value; + int m_signal; // signal used + bool m_running; + bool m_oneshot; + + // public methods +public: + // constructors + PosixTimer(); + PosixTimer(unsigned long usec); + + // destructor + virtual ~PosixTimer(); + + // public methods + int Restart(void); + int Start( unsigned long usec, bool one_shot=true ); + void Stop(void); + unsigned long Remaining(void); + int Wait(void); + int Sync(void); // Wait()+Restart() + + // virtual functions + + // exceptions + + // static methods + + // private methods +private: + void Init(void); + + // signal catchers (do not override) +}; + +#endif diff --git a/src/libnet++/QueryString.cpp b/src/libnet++/QueryString.cpp new file mode 100644 index 0000000..3186b32 --- /dev/null +++ b/src/libnet++/QueryString.cpp @@ -0,0 +1,107 @@ +// +// Neal Probert +// + +#include "QueryString.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +QueryString::QueryString() +{ +} + +QueryString::~QueryString() +{ +} + +QueryString::QueryString( const QueryString © ) +{ + Name = copy.Name; + Value = copy.Value; +} + +QueryString& QueryString::operator=(const QueryString &rhs) +{ + this->Name = rhs.Name; + this->Value = rhs.Value; + return *this; +} + +void QueryString::Set( const char *name, const char *value ) +{ + if ( !name ) + return; + + if ( value ) + { + setName(name); + setValue(value); + } + else + { + // split + char buf[128]; + strcpy( buf, name ); + + char *s = strchr( buf, '=' ); + if ( s ) + { + *s++ = '\0'; + setName(buf); + setValue(s); + } + else + setName(name); + } +} + +void QueryString::setName( const char *name ) +{ + // no special chars + Name = name; +} + +void QueryString::setValue( const char *value ) +{ + // canonicalize + Value = value; +} + +void QueryString::setValue( int value ) +{ + Value = value; +} diff --git a/src/libnet++/QueryString.h b/src/libnet++/QueryString.h new file mode 100644 index 0000000..c2efa17 --- /dev/null +++ b/src/libnet++/QueryString.h @@ -0,0 +1,67 @@ +// +// URI Parser +// Neal Probert +// + +/* prevent multiple inclusions */ +#ifndef __QueryString__ +#define __QueryString__ + +/* includes *****************************************************************/ + +#include + +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Chop up the URI into it's component parts +// +class QueryString { + // public data +public: + std::string Name; + std::string Value; + + // private data +private: + + // static data + + // public methods +public: + // constructors + QueryString(); + QueryString(const QueryString ©); + + // destructor + virtual ~QueryString(); + + // operators + QueryString &operator=(const QueryString &rhs); + + // access methods + void setName( const char *s ); + void setValue( const char *s ); + void setValue( int v ); + void Set( const char *name, const char *value=NULL ); + + const char *getName(void) { return Name.c_str(); }; + int getLength(void) { return Value.length(); }; + const char *getValue(void) { return Value.c_str(); }; + const char *Get(void) { return Value.c_str(); }; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/RawSocket.cpp b/src/libnet++/RawSocket.cpp new file mode 100644 index 0000000..252ffc0 --- /dev/null +++ b/src/libnet++/RawSocket.cpp @@ -0,0 +1,177 @@ +// +// Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "RawSocket.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +RawSocket::RawSocket() +{ + m_proto = IPPROTO_UDP; + sock_len = 0; +} + +RawSocket::~RawSocket() +{ + Close(); +} + +RawSocket::RawSocket( const RawSocket &src ) +{ + Copy(src); + sock_len = 0; +} + +const RawSocket& RawSocket::operator=( const RawSocket& src ) +{ + this->Copy(src); + sock_len = 0; + return *this; +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int RawSocket::Socket() +{ + m_sock = socket(AF_INET , SOCK_RAW , IPPROTO_TCP); + + // socket + LogSocket( "RAW Socket" ); + + return m_sock; +} + +int RawSocket::RecvFrom( void *buf, int max ) +{ + socklen_t len = sizeof(sock_addr); + + return Socket::RecvFrom( buf, max, &sock_addr, &len ); +} + +int RawSocket::GetIPHdrLen( const void *buf ) +{ + unsigned short iphdrlen; + + struct iphdr *iph = (struct iphdr *)buf; + iphdrlen = iph->ihl*4; + + return (int)iphdrlen; +} + +int RawSocket::GetProtocol( const void *buf ) +{ + //Get the IP Header part of this packet + struct iphdr *iph = (struct iphdr*)buf; + return iph->protocol; + + //ICMP Protocol = 1 + //IGMP Protocol = 2 + //TCP Protocol = 6 + //UDP Protocol = 17 +} + +struct tcphdr *RawSocket::GetTcpHeader( const void *buf ) +{ + unsigned short iphdrlen; + + struct iphdr *iph = (struct iphdr *)buf; + iphdrlen = iph->ihl*4; + + if (iph->protocol == IPPROTO_TCP) + { + struct tcphdr *tcph=(struct tcphdr*)((unsigned char *)buf + iphdrlen); + return tcph; + } + return NULL; +} + +struct udphdr *RawSocket::GetUdpHeader( const void *buf ) +{ + unsigned short iphdrlen; + + struct iphdr *iph = (struct iphdr *)buf; + iphdrlen = iph->ihl*4; + + if (iph->protocol == IPPROTO_UDP) + { + struct udphdr *udph=(struct udphdr*)((unsigned char *)buf + iphdrlen); + return udph; + } + return NULL; +} + +unsigned char *RawSocket::GetData( const void *buf, int *length, int proto ) +{ + //Get the IP Header part of this packet + struct iphdr *iph = (struct iphdr*)buf; + unsigned char *data = (unsigned char *)buf; + + // match what we are looking for? + if (proto != 0 && proto != iph->protocol) + return NULL; + + // IP header length + int len = sizeof(iphdr); + + // pointer after protocol header + switch( iph->protocol ) + { + case IPPROTO_TCP: //TCP Protocol = 6 + len += sizeof(struct tcphdr); + break; + case IPPROTO_UDP: //UDP Protocol = 17 + len += sizeof(struct udphdr); + break; + default: + return NULL; + } + + // update data pointer and length + data += len; + if (length) + *length -= len; + + return data; +} + diff --git a/src/libnet++/RawSocket.h b/src/libnet++/RawSocket.h new file mode 100644 index 0000000..2c00af6 --- /dev/null +++ b/src/libnet++/RawSocket.h @@ -0,0 +1,78 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __RawSocket__ +#define __RawSocket__ + +/* includes *****************************************************************/ + +#include "Socket.h" + +#include //Provides declarations for icmp header +#include //Provides declarations for udp header +#include //Provides declarations for tcp header +#include //Provides declarations for ip header +#include +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class RawSocket : public Socket { + // public data +public: + struct sockaddr_storage sock_addr; + socklen_t sock_len; + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + RawSocket(); + + // destructor + virtual ~RawSocket(); + + // copy constructor + RawSocket( const RawSocket &src ) ; + const RawSocket& operator=( const RawSocket &src ); + + // public methods + int Socket(); + int RecvFrom( void *buf, int max ); + + // control + + // status + int GetIPHdrLen( const void *buf ); + int GetProtocol( const void *buf ); + struct iphdr *GetIPHeader( const void *buf ) {return (struct iphdr*)buf;}; + struct tcphdr *GetTcpHeader( const void *buf ); + struct udphdr *GetUdpHeader( const void *buf ); + unsigned char *GetData( const void *buf, int *length, int proto=0 ); + + // virtual functions + + // exceptions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/SerialIO.cpp b/src/libnet++/SerialIO.cpp new file mode 100644 index 0000000..7be5550 --- /dev/null +++ b/src/libnet++/SerialIO.cpp @@ -0,0 +1,225 @@ +// +// Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "SerialIO.h" +#include "UriParse.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +SerialIO::SerialIO() +{ + m_fd = -1; + m_sentcnt = m_recvcnt = 0L; +} + +SerialIO::~SerialIO() +{ + Close(); +} + +//**************************************************************************** +// Serial I/O open/close +//***************************************************************************/ + +void SerialIO::Close(void) +{ + if( m_fd >= 0 ) + { + close(m_fd); + log_printf( "Device (%d) closed: %lu received, %lu sent", m_fd, m_recvcnt, m_sentcnt ); + m_sentcnt = m_recvcnt = 0L; + } + m_fd = -1; +} + +int SerialIO::Open( const char *device, int baud ) +{ + int fd; + m_fd = -1; + + // open non-blocking, to allow use of select() + fd = open(device, O_RDWR | O_NONBLOCK | O_NOCTTY ); + if (fd < 0) + { + log_error("open"); + return (-1); + } + + if (tcgetattr(fd, &termios) < 0) + { + // not a serial port + close(fd); + log_error("tcgetattr"); + return (-1); + } + m_fd = fd; + + /* zap special chars */ + for (int cnt = 0; cnt < NCCS; cnt++) + termios.c_cc[cnt] = -1; + + /* default control flags */ + termios.c_iflag = 0; + termios.c_oflag = 0; /* (ONLRET) */ + termios.c_cflag = CS8 | CLOCAL | CREAD; + termios.c_lflag = 0; + + /* default canonical */ + SetCanonical( true ); + + /* default baud */ + SetBaud( baud ); + +#if WANT_BLOCKING_READ + if (fcntl(fd, F_SETFL, 0) == -1) + { + log_error("fcntl: set nonblock"); + } +#endif + + log_printf( "Connected to serial device (%d): %s:%d", fd, device, baud ); + + return fd; +} + +//**************************************************************************** +// Serial I/O control +//***************************************************************************/ + +void SerialIO::SetBaud( int baud ) +{ + /* baud rates */ + switch (baud) + { + case 300: + baud = B300; + break; + case 1200: + baud = B1200; + break; + case 2400: + baud = B2400; + break; + case 4800: + baud = B4800; + break; + case 9600: + baud = B9600; + break; + case 19200: + baud = B19200; + break; + case 38400: + baud = B38400; + break; + case 57600: + baud = B57600; + break; + case 115200: + baud = B115200; + break; + case 230400: + baud = B230400; + break; + default: + baud = B9600; + break; + } + + if (cfsetispeed(&termios, baud) != 0) { + log_error("cfsetispeed"); + } + if (cfsetospeed(&termios, baud) != 0) { + log_error("cfsetospeed"); + } + if (tcsetattr(m_fd, TCSANOW, &termios) < 0) { + log_error("tcsetattr"); + } +} + +void SerialIO::SetCanonical( bool canonical, int blocksize, int waittime ) +{ + /* canonical or not? */ + if ( canonical ) + { + /* assume canonical (ascii) */ + termios.c_lflag = ICANON; + termios.c_cc[VEOL] = '\n'; + } + + /* size, wait */ + termios.c_cc[VMIN] = blocksize; + termios.c_cc[VTIME] = waittime; // x100 msec + + if (tcsetattr(m_fd, TCSANOW, &termios) < 0) + { + log_error("tcsetattr"); + } +} + +//**************************************************************************** +// Serial I/O +//***************************************************************************/ + +int SerialIO::Read( void *buf, int max ) +{ + if ( !buf || m_fd < 0 ) + return -1; + + // read port + int n = read( m_fd, buf, max ); + + if ( n >= 0 ) + m_recvcnt += n; + return n; +} + +int SerialIO::Write( const void *buf, int max ) +{ + if ( !buf || m_fd < 0 ) + return -1; + m_sentcnt += max; + + // write port + return write( m_fd, buf, max ); +} + diff --git a/src/libnet++/SerialIO.h b/src/libnet++/SerialIO.h new file mode 100644 index 0000000..a4c4f86 --- /dev/null +++ b/src/libnet++/SerialIO.h @@ -0,0 +1,94 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __SerialIO__ +#define __SerialIO__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +/** \class + * + * Serial I/O wrapper and support class, Linux only + */ + +class SerialIO { + // public data +public: + + // protected data +protected: + + // private data +private: + int m_fd; // handle + unsigned long m_sentcnt; // # bytes sent + unsigned long m_recvcnt; // # bytes recv + + // serial config + struct termios termios; + + // public methods +public: + // constructors + SerialIO(); + + // destructor + virtual ~SerialIO(); + + // public methods + + // control + int GetFd( void ) { return m_fd; }; + + void SetBaud( int baud ); + void SetCanonical( bool canonical, int bs=0, int wt=0 ); + void Canonical(void) { SetCanonical(true); }; + void NonCanonical(void) { SetCanonical(false); }; + + // i/o + int Open( const char *dev, int baud ); + int Read( void *buf, int len ); + int Write( const void *buf, int len ); + void Close( void ); + + // status + unsigned long GetBytesSent(void) {return m_sentcnt;}; + unsigned long GetBytesRecv(void) {return m_recvcnt;}; + + // virtual functions (must be overridden!) + + // exceptions + class SerialIOException + { + char *toString(void) { return strerror(errno); }; + }; + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/Server.cpp b/src/libnet++/Server.cpp new file mode 100644 index 0000000..481c478 --- /dev/null +++ b/src/libnet++/Server.cpp @@ -0,0 +1,100 @@ +// +// Server +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "Server.h" +#include "UriParse.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +Server::Server() +{ + m_timeout.tv_sec = m_timeout.tv_usec = 0L; + m_seltime = m_timeout; + FD_ZERO(&m_rfds); + FD_ZERO(&m_sfds); + m_nfds = 0; + m_client_to = true; // reset timeout on clients +} + +Server::~Server() +{ +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int Server::ServiceUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Service( Uri.getHost(), Uri.getService() ); +} + +int Server::Select(void) +{ + /* copy descriptors */ + m_sfds = m_rfds; + + /* select timeout */ + return select( m_nfds, &m_sfds, NULL, NULL, (m_seltime.tv_sec || m_seltime.tv_usec)?&m_seltime:NULL ); +} + +void Server::ResetTimeout( void ) +{ + m_seltime = m_timeout; +} + +void Server::SetTimeout( time_t to ) +{ + m_timeout.tv_sec = to / 1000000; + m_timeout.tv_usec = to % 1000000; + m_seltime = m_timeout; +} + +void Server::SetTimeout( timeval &tv ) +{ + m_seltime = m_timeout = tv; +} diff --git a/src/libnet++/Server.h b/src/libnet++/Server.h new file mode 100644 index 0000000..fc5c238 --- /dev/null +++ b/src/libnet++/Server.h @@ -0,0 +1,82 @@ +// +// Server +// + +/* prevent multiple inclusions */ +#ifndef __Server__ +#define __Server__ + +/* includes *****************************************************************/ + +#include "Socket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Server { + // public data +public: + +protected: + // socket + int m_nfds; /* number of descriptors */ + fd_set m_rfds; /* set of open sockets */ + + // select + fd_set m_sfds; + struct timeval m_timeout; + struct timeval m_seltime; + + bool m_client_to; // reset timeout on client + + // private data +private: + + // static data + + // public methods +public: + // constructors + Server(); + + // destructor + virtual ~Server(); + + // public methods + // control + void SetTimeout(time_t to); + void SetTimeout(timeval &tv); + void ResetTimeout(void); + void ResetClientTimeout(void) {if(m_client_to)ResetTimeout();}; + void ResetServerTimeout(void) {ResetTimeout();}; + void SetClientTimeout(bool ct) {m_client_to=ct;}; + + // select + void AddFd(int sock) {if(sock>=0)m_nfds=fd_add(sock,&m_rfds,m_nfds);}; + void DelFd(int sock) {if(sock>=0)FD_CLR(sock,&m_rfds);}; + bool IsSet(int sock) {if(sock>=0)return FD_ISSET(sock,&m_sfds);return 0;}; + int Select( void ); + + // service + int ServiceUri( const char *uri ); + + // virtual functions + virtual int Service( const char *host, const char *service=NULL ) {return -1;}; + virtual int Listen( void ) {return 0;}; + virtual int ServerTimeout(void) {return 0;}; + virtual int ServerSocket(void) {return 0;}; // other socket + + // exceptions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/Socket.cpp b/src/libnet++/Socket.cpp new file mode 100644 index 0000000..dfaf265 --- /dev/null +++ b/src/libnet++/Socket.cpp @@ -0,0 +1,508 @@ +// +// Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "Socket.h" +#include "UriParse.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +char Socket::g_hostname[256] = ""; + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +static bool g_initialized = false; + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +Socket::Socket() +{ + m_family = AF_INET6; + m_proto = 0; + m_sock = -1; + m_sentcnt = m_recvcnt = 0L; + bzero(m_host, sizeof(m_host)); + bzero(m_port, sizeof(m_port)); + + if ( !g_initialized ) { + gethostname( g_hostname, sizeof(g_hostname) ); + } +} + +Socket::~Socket() +{ + Close(); +} + +// copy +Socket::Socket( const Socket& src ) +{ + Copy( src ); +} + +// assignment +const Socket& Socket::operator=( const Socket& src ) +{ + this->Copy( src ); + return *this; +} + +void Socket::Copy( const Socket &src ) +{ + m_sock = src.m_sock; + m_family = src.m_family; + m_proto = src.m_family; + strcpy(m_host, src.m_host); + strcpy(m_port, src.m_port); +} + +void Socket::Close(void) +{ + Closed(); + + if( m_sock>=0 ) + { + close(m_sock); + log_printf( "Socket (%d) closed: %lu received, %lu sent", m_sock, m_recvcnt, m_sentcnt ); + m_sentcnt = m_recvcnt = 0L; + } + m_sock=-1; +} + +//**************************************************************************** +// uri +//***************************************************************************/ + +int Socket::ClientUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Client( Uri.getHost(), Uri.getService() ); +} + +int Socket::ServerUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Server( Uri.getHost(), Uri.getService() ); +} + +void Socket::LogSocket( const char *str ) +{ + if ( m_sock >= 0 ) + log_printf( "Socket (%d) %s %s:%s", GetSocket(), str, GetHost(), GetPort() ); + else + log_printf( "Socket %s %s:%s failed (%s)", str, GetHost(), GetPort(), strerror(errno) ); +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int Socket::Recv( void *buf, int max ) +{ + if ( m_sock < 0 ) + return m_sock; + + int rc = Socket::Recv( m_sock, buf, max ); + + if ( rc == 0 ) + { + log_write( "Socket closed by server" ); + Close(); + } + else if ( rc > 0 ) + m_recvcnt += rc; + else + log_printf( "Socket read error (%d) %s!", m_sock, strerror(errno) ); + + return rc; +} + +int Socket::Send( const void *buf, int len ) +{ + if ( m_sock < 0 ) + return m_sock; + + int rc = Socket::Send( m_sock, buf, len ); + + if ( rc > 0 ) + m_sentcnt += rc; + else if ( rc < 0 ) + log_printf( "Socket write error (%d) %s!", m_sock, strerror(errno) ); + + return rc; +} + +int Socket::RecvFrom( void *buf, int max, struct sockaddr_storage *sa, socklen_t *len ) +{ + if ( m_sock < 0 ) + return m_sock; + + int rc = RecvFrom( m_sock, buf, max, sa, len ); + + if ( rc == 0 ) + Close(); + else if ( rc > 0 ) + m_recvcnt += rc; + else + log_printf( "Socket recvfrom error (%d) %s!", m_sock, strerror(errno) ); + + return rc; +} + +int Socket::SendTo( const void *buf, int max, const struct sockaddr_storage *sa, socklen_t len ) +{ + if ( m_sock < 0 ) + return m_sock; + + int rc = SendTo( m_sock, buf, max, sa, len ); + + if ( rc > 0 ) + m_sentcnt += rc; + else if ( rc < 0 ) + log_printf( "Socket sendto error (%d) %s!", m_sock, strerror(errno) ); + + return rc; +} + +//**************************************************************************** +// Static Functions +//***************************************************************************/ + +int Socket::Bind( int sock, const struct sockaddr_storage *sa, socklen_t len ) +{ + return bind( sock, (struct sockaddr *)sa, len ); +} + +int Socket::Recv( int sock, void *buf, int max ) +{ + char *s = (char *)buf; + int n; + + /* check! */ + if ( sock < 0 ) + return -1; + if ( !buf || max <= 0 ) + return -1; + + /* read */ + n = recv( sock, buf, max, 0 ); + + if ( n > 0 && n < max ) + *(s+n) = '\0'; + + return n; +} + +int Socket::Send( int sock, const void *buf, int len ) +{ + int total = 0; + int n = 0; + + /* check! */ + if ( sock < 0 ) + return -1; + if ( !buf || len <= 0 ) + return -1; + + /* send it all */ + const char *s = (const char *)buf; + while ( total < len ) + { + int n = send( sock, s, len, 0 ); + if ( n == -1 ) + break; + s += n; + total += n; + len -= n; + } + + return n==-1 ? -1 : total; +} + +int Socket::RecvFrom( int sock, void *buf, int max, + struct sockaddr_storage *sa, socklen_t *len ) +{ + struct sockaddr_storage ss; + char *s = (char *)buf; + + /* check! */ + if ( sock < 0 ) + return -1; + if ( !buf || max <= 0 ) + return -1; + + if ( !sa ) + sa = &ss; + + /* read */ + if ( len ) + *len = sizeof(ss); + int n = recvfrom( sock, buf, max, 0, (struct sockaddr *)sa, len ); + + if ( n > 0 && n < max ) + *(s+n) = '\0'; + + return n; +} + +int Socket::SendTo( int sock, const void *buf, int len, + const struct sockaddr_storage *sa, int salen ) +{ + /* check! */ + if ( sock < 0 ) + return -1; + if ( !buf || len <= 0 ) + return -1; + + return sendto( sock, buf, len, MSG_DONTROUTE, (struct sockaddr *)sa, salen ); +} + +//**************************************************************************** +// Static Functions +//***************************************************************************/ + +int Socket::Host2Addr(const char *host, const char *service, + struct sockaddr_storage *sa, socklen_t *len) +{ + struct hostent *ent; + + /* clear and initialize address structure */ + if ( sa ) + bzero(sa, sizeof(struct sockaddr_storage) ); + + /* do host lookup matching family (this is not POSIX) */ + if ( (ent = gethostbyname2( host, AF_INET )) == NULL ) + { + // favor IPv4 over IPv6 + if ( (ent = gethostbyname2( host, AF_INET6 )) == NULL ) + { + return -1; + } + } + int family = ent->h_addrtype; + + // service + int port = atoi(service); + port = Service2Port( service, port, NULL ); + + if ( family == AF_INET6 ) + { + if ( sa ) + { + struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)sa; + sa6->sin6_family = family; + sa6->sin6_port = port; + sa6->sin6_addr = *((struct in6_addr *)ent->h_addr); + } + if ( len ) + *len = sizeof(struct sockaddr_in6); + } + else if ( family == AF_INET ) + { + if ( sa ) + { + struct sockaddr_in *sa4 = (struct sockaddr_in *)sa; + sa4->sin_family = family; + sa4->sin_port = port; + sa4->sin_addr = *((struct in_addr *)ent->h_addr); + } + if ( len ) + *len = sizeof(struct sockaddr_in); + } + else + return -1; + + return family; +} + +const char *Socket::Host2Name( const struct sockaddr_storage *sa, char *buf, int max ) +{ + const char *s = NULL; + + // to string + switch (sa->ss_family) + { + case AF_INET: + s = inet_ntop(sa->ss_family, + &((struct sockaddr_in *)sa)->sin_addr, + buf, max); + break; + case AF_INET6: + s = inet_ntop(sa->ss_family, + &((struct sockaddr_in6 *)sa)->sin6_addr, + buf, max); + break; + } + if ( s ) + return s; + + return NULL; +} + +int Socket::Name2Host( const char *buf, struct sockaddr_storage *sa ) +{ + // from string + switch (sa->ss_family) + { + case AF_INET: + return inet_pton(sa->ss_family, buf, + &((struct sockaddr_in *)sa)->sin_addr ); + break; + case AF_INET6: + return inet_pton(sa->ss_family, buf, + &((struct sockaddr_in6 *)sa)->sin6_addr ); + break; + } + return EAFNOSUPPORT; +} + +int Socket::String2Mac( const char *str, unsigned char *mac ) +{ + // exact 00:00:00:00:00:00 string + char buf[25]; + bzero(buf, sizeof(buf)); + strncpy(buf, str, sizeof(buf)-1); + + char *s, *t; + t = strtok_r(buf, ":", &s); + int n = 0; + + while ( t ) + { + // decode + char *e; + *mac++ = (unsigned char) strtol( t, &e, 16 ); + n++; + + // invalid decode + if ( *e ) + return 0; + + t = strtok_r(NULL, ":", &s); + } + + if ( n == 6 ) + return 1; + return 0; +} + +int Socket::Mac2String( const unsigned char *mac, char *str ) +{ + // exact 00:00:00:00:00:00 string + return sprintf( str, "%02x:%02x:%02x:%02x:%02x:%02x", + *mac, *(mac+1), *(mac+2), *(mac+3), *(mac+4), *(mac+5) ); +} + +int Socket::Interface2MacAddr( const char *name, unsigned char *mac ) +{ + int i; + + if ( !name ) + name = "eth0"; + + // MAC address (should be temporary) + int fd; + + if ( (fd = socket(AF_INET6, SOCK_DGRAM, 0)) ) + { + struct ifreq ifr; + bzero(&ifr, sizeof(ifr)); + ifr.ifr_addr.sa_family = AF_INET6; + strncpy(ifr.ifr_name, name, IFNAMSIZ-1); + + if ( ioctl(fd, SIOCGIFHWADDR, &ifr) == 0 ) + { + for ( i=0 ; i<6 ; i++ ) + *mac++ = ifr.ifr_hwaddr.sa_data[i]; + close(fd); + return 0; + } + + close(fd); + } + return -1; +} + +int Socket::Service2Port( const char *service, int port, const char *proto ) +{ + /* socket stuff */ + struct servent *serv; /* service entry from /etc/services */ + + /* check args */ + if ( port ) + serv = getservbyport( htons(port), proto ); + else if ( service ) + serv = getservbyname( service, proto ); + + // return network byte order + if ( serv ) + return serv->s_port; + return htons(port); +} + +int Socket::SockAddr( int sock, struct sockaddr_storage *sa ) +{ + if ( !sa ) + return -1; + + bzero( sa, sizeof(struct sockaddr_storage) ); + + /* address info */ + socklen_t l = sizeof(struct sockaddr_storage); + if ( getsockname( sock, (struct sockaddr *)&sa, &l ) < 0 ) + return -1; + + return 0; +} + +int Socket::SockName( int sock, char *buf, int max ) +{ + struct sockaddr_storage sa; + + Socket::SockAddr( sock, &sa ); + if ( Socket::Host2Name( (const struct sockaddr_storage *)&sa, buf, max ) ) + return strlen(buf); + return 0; +} diff --git a/src/libnet++/Socket.h b/src/libnet++/Socket.h new file mode 100644 index 0000000..3262dac --- /dev/null +++ b/src/libnet++/Socket.h @@ -0,0 +1,165 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __Socket__ +#define __Socket__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +#if defined(__BIG_ENDIAN) +# define ntohll(x) (x) +# define htonll(x) (x) +#elif defined(__LITTLE_ENDIAN) +# define ntohll(x) bswap_64(x) +# define htonll(x) bswap_64(x) +#endif + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Socket { + // public data +public: + + // protected data +protected: + // socket + int m_family; // AF_UNIX, AF_INET or AF_INET6 + int m_proto; // protocol + int m_sock; // socket + + void LogSocket( const char *str ); + + // private data +private: + // reference + static char g_hostname[256]; + char m_host[256]; + char m_port[32]; + + // stats + unsigned long m_sentcnt; + unsigned long m_recvcnt; + + // static data + + // public methods +public: + // constructors + Socket(); + + // destructor + virtual ~Socket(); + + // copy constructor + Socket( const Socket& ); + const Socket& operator=( const Socket& ); + + // public methods + int ClientUri( const char *uri ); + int ServerUri( const char *uri ); + + // control + void SetFamily( int family ) {m_family = family;}; + void SetProto( int proto ) {m_proto = proto;}; + void SetHost(const char *host) {if(host)strncpy(m_host,host,sizeof(m_host)-1);}; + void SetPort(const char *port) {if(port)strncpy(m_port,port,sizeof(m_port)-1);}; + void SetHostPort(const char *host, const char *port) + {SetHost(host);SetPort(port);}; + void SetSocket( int sock ) {m_sock=sock;}; + + // i/o + int Bind( const struct sockaddr_storage *sa, int len ) + {return Bind(m_sock,sa,len);}; + void Close( void ); + + int Recv( void *buf, int len ); + int Send( const void *buf, int len ); + int RecvFrom( void *buf, int max, struct sockaddr_storage *sa, socklen_t *len ); + int SendTo( const void *buf, int max, const struct sockaddr_storage *sa, socklen_t len ); + + // status + unsigned long GetBytesSent(void) {return m_sentcnt;}; + unsigned long GetBytesRecv(void) {return m_recvcnt;}; + const char *GetHostName(void) {return g_hostname;}; + const char *GetHost(void) {return m_host;}; + const char *GetPort(void) {return m_port;}; + + int GetFamily(void) {return m_family;}; + int GetProto(void) {return m_proto;}; + int GetSock(void) {return m_sock;}; + int GetSocket(void) {return m_sock;}; + int SockAddr( struct sockaddr_storage *sa ) {return SockAddr(m_sock,sa);}; + int SockName( char *buf, int max ) {return SockName(m_sock,buf,max); }; + + // virtual functions (must be overridden!) + virtual int Client( const char *host, const char *port ) {return -1;}; + virtual int Server( const char *host, const char *port ) {return -1;}; + virtual void Closed(void) {;}; + + // exceptions + class SocketException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + static int Bind( int sock, const struct sockaddr_storage *sa, socklen_t len ); + static int Recv( int sock, void *buf, int max ); + static int Send( int sock, const void *buf, int len ); + static int RecvFrom( int sock, void *buf, int n, + struct sockaddr_storage *sa, socklen_t *len ); + static int SendTo( int sock, const void *buf, int len, + const struct sockaddr_storage *sa, int salen ); + + static int Host2Addr(const char *host, const char *service, + struct sockaddr_storage *sa, socklen_t *len); + static const char *Host2Name( const struct sockaddr_storage *sa, + char *buf, int max ); + static int Name2Host( const char *buf, struct sockaddr_storage *sa ); + static int SockAddr( int sock, struct sockaddr_storage *sa ); + static int SockName( int sock, char *buf, int max ); + + static int String2Mac( const char *str, unsigned char *mac ); + static int Mac2String( const unsigned char *mac, char *str ); + static int Interface2MacAddr( const char *name, unsigned char *mac ); + static int Service2Port( const char *service, int port, const char *proto ); + + // protected methods +protected: + void Copy( const Socket &sock ); + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/TcpArchdaemon.cpp b/src/libnet++/TcpArchdaemon.cpp new file mode 100644 index 0000000..df0a1f2 --- /dev/null +++ b/src/libnet++/TcpArchdaemon.cpp @@ -0,0 +1,107 @@ +// +// UDP Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "TcpArchdaemon.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +TcpArchdaemon::TcpArchdaemon() +{ +} + +TcpArchdaemon::~TcpArchdaemon() +{ +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int TcpArchdaemon::Listen( void *arg ) +{ + /* select timeout */ + int rc = Select(); + + if ( rc == 0 ) + { + rc = ServerTimeout(); + + if ( rc == 0 ) + ResetServerTimeout(); + else if ( rc > 0 ) + SetTimeout( rc ); +// else +// return -1; + } + else if ( rc > 0 ) + { + /* incoming connection? */ + if (FD_ISSET(m_sock, &m_sfds)) + { + /* accept the incoming connection */ + int cli = Accept( NULL ); + + /* check for errors. if any, ignore new connection */ + if ( cli > 0 ) + { + /* turn off nagle */ + Nagle( cli, 0 ); + + void *parg = NULL; + + // get thread + TcpThread *thread = ClientThread( &parg ); + if ( !parg ) + parg = arg; + + if ( thread ) + { + // hand off socket and detach + thread->SetSocket( cli ); + thread->Start( parg, true ); + } + } + rc--; + } + } + return rc; +} diff --git a/src/libnet++/TcpArchdaemon.h b/src/libnet++/TcpArchdaemon.h new file mode 100644 index 0000000..add6130 --- /dev/null +++ b/src/libnet++/TcpArchdaemon.h @@ -0,0 +1,56 @@ +// +// TCP Daemon +// + +/* prevent multiple inclusions */ +#ifndef __TcpArchdaemon__ +#define __TcpArchdaemon__ + +/* includes *****************************************************************/ + +#include "TcpDaemon.h" +#include "TcpThread.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class TcpArchdaemon : public TcpDaemon { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + TcpArchdaemon(); + + // destructor + virtual ~TcpArchdaemon(); + + // public methods + int StartService(const char *n,const char *h,const char *p,int d=0,int c=0); + int RunService(void); + + // overidden methods + int Listen( void *arg=NULL ); + virtual TcpThread *ClientThread( void **parg ) {return NULL;}; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/TcpClient.cpp b/src/libnet++/TcpClient.cpp new file mode 100644 index 0000000..ae7090d --- /dev/null +++ b/src/libnet++/TcpClient.cpp @@ -0,0 +1,86 @@ +// +// TCP Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "TcpClient.h" +#include "UriParse.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +void TcpClient::Init( void ) +{ +} + +TcpClient::TcpClient() +{ + Init(); +} + +TcpClient::TcpClient( const char *host, const char *service ) +{ + Init(); + if ( Connect( host, service ) < 0 ) + throw TcpClientException(); +} + +TcpClient::~TcpClient() +{ + Close(); +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int TcpClient::ConnectUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Connect( Uri.getHost(), Uri.getService() ); +} + +int TcpClient::Connect( const char *host, const char *port ) +{ + return TcpSocket::Client( host, port ); +} diff --git a/src/libnet++/TcpClient.h b/src/libnet++/TcpClient.h new file mode 100644 index 0000000..1062bb6 --- /dev/null +++ b/src/libnet++/TcpClient.h @@ -0,0 +1,64 @@ +// +// TCP Client +// + +/* prevent multiple inclusions */ +#ifndef __TcpClient__ +#define __TcpClient__ + +/* includes *****************************************************************/ + +#include "TcpSocket.h" +#include "Client.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class TcpClient : public Client, public TcpSocket { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + TcpClient(); + TcpClient( const char *host, const char *service=NULL ); + + // destructor + virtual ~TcpClient(); + + // public methods + int ConnectUri( const char *uri ); + int Connect( const char *host, const char *service=NULL ); + int Reconnect(void) { Close();return Connect(GetHost(),GetPort()); }; + + // virtual functions + + // exceptions + class TcpClientException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + + // private methods + void Init( void ); + +private: +}; + +#endif diff --git a/src/libnet++/TcpDaemon.cpp b/src/libnet++/TcpDaemon.cpp new file mode 100644 index 0000000..0c76636 --- /dev/null +++ b/src/libnet++/TcpDaemon.cpp @@ -0,0 +1,81 @@ +// +// TCP Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "TcpDaemon.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +TcpDaemon::TcpDaemon() +{ +} + +TcpDaemon::~TcpDaemon() +{ +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int TcpDaemon::StartService( const char *name, const char *host, const char *port, + int debug, int noclose ) +{ + // start daemon + if ( Daemonize(name, debug, noclose) ) + { + // start service + return Service( host, port ); + } + return -1; +} + +int TcpDaemon::RunService( void ) +{ + int rc = 0; + + // accept-read-write infinite loop + while( (rc = Listen()) >= 0 ) + ; + + return rc; +} + diff --git a/src/libnet++/TcpDaemon.h b/src/libnet++/TcpDaemon.h new file mode 100644 index 0000000..7c65db8 --- /dev/null +++ b/src/libnet++/TcpDaemon.h @@ -0,0 +1,52 @@ +// +// TCP Daemon +// + +/* prevent multiple inclusions */ +#ifndef __TcpDaemon__ +#define __TcpDaemon__ + +/* includes *****************************************************************/ + +#include "Daemon.h" +#include "TcpServer.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class TcpDaemon : public TcpServer, public Daemon { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + TcpDaemon(); + + // destructor + virtual ~TcpDaemon(); + + // public methods + int StartService(const char *n,const char *h,const char *p,int d=0,int c=0); + int RunService(void); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/TcpServer.cpp b/src/libnet++/TcpServer.cpp new file mode 100644 index 0000000..a84009c --- /dev/null +++ b/src/libnet++/TcpServer.cpp @@ -0,0 +1,241 @@ +// +// TCP Server +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "TcpServer.h" +#include "UriParse.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +void TcpServer::Init( void ) +{ + FD_ZERO(&m_cfds); + m_clients = 0; +} + +TcpServer::TcpServer() +{ + Init(); +} + +TcpServer::TcpServer( const char *host, const char *service ) +{ + Init(); + if ( Service( host, service ) < 0 ) + throw TcpServerException(); +} + +TcpServer::~TcpServer() +{ + Close(); +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int TcpServer::ServiceUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Service( Uri.getHost(), Uri.getService() ); +} + +int TcpServer::Service( const char *host, const char *port ) +{ + int sock = TcpSocket::Server( host, port ); + + if ( sock >= 0 ) + AddFd( sock ); + + return sock; +} + +int TcpServer::Restart( void ) +{ + Close(); + return Service( GetHost(), GetPort() ); +} + +int TcpServer::Listen( void ) +{ + /* select timeout */ + int rc = Select(); + + if ( rc == 0 ) + { + rc = ServerTimeout(); + + if ( rc == 0 ) + ResetServerTimeout(); + else if ( rc > 0 ) + SetTimeout( rc ); +// else +// return -1; + } + else if ( rc > 0 ) + { + /* incoming connection? */ + if (FD_ISSET(m_sock, &m_sfds)) + { + /* accept the incoming connection */ + int cli = Accept( NULL ); + + /* check for errors. if any, ignore new connection */ + if ( cli > 0 ) + { + /* turn off nagle */ + Nagle( cli, 0 ); + + // new client hook + if ( ClientUp( cli ) > 0 ) + { + /* add the new socket to the set of open sockets */ + m_clients++; + ClientAdd( cli ); + } + } + ResetClientTimeout(); + rc--; + } + if ( rc > 0 ) + { + bool client_to = false; + + /* check which sockets are ready for reading */ + for (int cli=0; cli 0 ) + { + // post message + if ( ClientIn( cli, buf, n ) > 0 ) + { + // get & send response + if ( (n = ClientOut( cli, buf, sizeof(buf) )) > 0 ) + Socket::Send( cli, buf, n ); + } + } + + // reset timeout + client_to = true; + } + rc--; + } + } + if ( client_to ) + ResetClientTimeout(); + } + + // any remaining sockets? + if ( rc > 0 ) + rc = ServerSocket(); + } + return rc; +} + +void TcpServer::ClientAdd( int sock ) +{ + if ( sock<0 ) + return; + + // add to read descriptors + m_nfds = fd_add(sock,&m_rfds,m_nfds); // AddFd() + + // add to client descriptors + fd_add(sock,&m_cfds,m_nfds); +} + +int TcpServer::ClientIn( int sock, const char *buf, int n ) +{ + // default echo + return Socket::Send( sock, buf, n ); +} + +int TcpServer::ClientOut( int sock, char *buf, int n ) +{ + return 0; +} + +void TcpServer::ClientCast( const char *buf, int n ) +{ + // write when in continuous or update only mode + for (int cli=0; cli= 0) + { + /* connect */ + if ( connect(m_sock, (struct sockaddr *)&sa, len) != 0 ) + { + close(m_sock); + m_sock = -1; + } + } + + // socket + SetHostPort( host, port ); + LogSocket( "TCP Connect" ); + + return m_sock; +} + +int TcpSocket::Server( const char *host, const char *port ) +{ + int err, i; + m_sock = -1; + + if ( !host || !strlen(host) ) + host = (m_family == AF_INET6) ? "::0" : "0.0.0.0"; + + /* dual stack listener */ + struct addrinfo hints; + struct addrinfo *res, *ressave; + + /* set-up hints structure */ + bzero(&hints, sizeof(hints)); + hints.ai_family = AF_UNSPEC; +// hints.ai_protocol = m_proto; + hints.ai_flags = AI_PASSIVE; + hints.ai_socktype = SOCK_STREAM; + if ( (err = getaddrinfo(host, port, &hints, &res)) == 0 ) + { + ressave = res; + + while (res) + { + /* bind() and listen() to res->ai_addr */ + m_sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol ); + if ( m_sock < 0 ) + continue; + + /* reuse socket */ + i = 1; + setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i) ); + + /* bind */ + if ( bind(m_sock, res->ai_addr, res->ai_addrlen) == 0 ) + break; // success + + /* error, try again */ + Close(); + res = res->ai_next; + } + + freeaddrinfo( ressave ); + + /* able to bind? */ + if ( res ) + { + /* listen, queue up to 10 pending connections */ + if ( listen(m_sock, 10) != 0 ) + { + close(m_sock); + m_sock = -1; + } + } + } + + // socket + SetHostPort( host, port ); + LogSocket( "TCP Listen" ); + + return m_sock; +} + +int TcpSocket::Accept( struct sockaddr_storage *sa ) +{ + /* storage? */ + struct sockaddr_storage ss; + if ( !sa ) + sa = &ss; + + /* tcp request */ + socklen_t len = sizeof(struct sockaddr_storage); + + /* accept the incoming connection */ + int cs = accept(m_sock, (struct sockaddr *)sa, &len ); + + /* check for errors. if any, ignore new connection */ + if (cs < 0 ) + { + log_error("tcp_accept"); + return -1; + } + + /* turn off nagle, writes are shipped immediately */ + int flag = 1; + setsockopt( cs, /* socket affected */ + IPPROTO_TCP, /* set option at TCP level */ + TCP_NODELAY, /* name of option */ + (char *) &flag, /* the cast is historical cruft */ + sizeof(int)); /* length of option value */ + + /* log new client */ + if ( cs > 0 ) + { + char szBuf[256]; + Host2Name( sa, szBuf, sizeof(szBuf)-1 ); + log_printf( "Accepted (%d) client from %s", cs, szBuf ); + } + + return cs; +} + +int TcpSocket::SendStr( const char *str ) +{ + return Send( str, strlen(str) ); +} + +int TcpSocket::Nagle( int sock, int flag ) +{ + /* turn off nagle, writes are shipped immediately */ + flag = flag ? 0 : 1; + return setsockopt( sock, /* socket affected */ + IPPROTO_TCP, /* set option at TCP level */ + TCP_NODELAY, /* name of option */ + (char *) &flag, /* the cast is historical cruft */ + sizeof(int)); /* length of option value */ + + log_printf( "tcp_nagle = %d", flag ); +} diff --git a/src/libnet++/TcpSocket.h b/src/libnet++/TcpSocket.h new file mode 100644 index 0000000..0ca95de --- /dev/null +++ b/src/libnet++/TcpSocket.h @@ -0,0 +1,69 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __TcpSocket__ +#define __TcpSocket__ + +/* includes *****************************************************************/ + +#include "Socket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class TcpSocket : public Socket { + // public data +public: + +protected: + // socket + + // stats + + // private data +private: + + // static data + + // public methods +public: + // constructors + TcpSocket(); + + // destructor + virtual ~TcpSocket(); + + // copy constructor + TcpSocket( const TcpSocket &src ) {Copy(src);}; + const TcpSocket& operator=( const TcpSocket &src ) {this->Copy(src);return *this;}; + + // public methods + int Client( const char *host, const char *port ); + int Server( const char *host, const char *port ); + int Accept( struct sockaddr_storage *sa ); + int SendStr( const char *str ); + + // control + int Nagle( int flag ) {return Nagle(m_sock,flag);}; + + // status + + // virtual functions + + // exceptions + + // static methods + static int Nagle( int sock, int flag ); + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/TcpThread.cpp b/src/libnet++/TcpThread.cpp new file mode 100644 index 0000000..f4cc923 --- /dev/null +++ b/src/libnet++/TcpThread.cpp @@ -0,0 +1,78 @@ +// +// TCP Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "TcpThread.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +TcpThread::TcpThread() +{ +} + +TcpThread::~TcpThread() +{ +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +void *TcpThread::Run(void *arg) +{ + // default echo server + char buf[16384]; + + // server will detach thread + + // loop forever + while (1) + { + int n = Recv( buf, sizeof(buf) ); + if ( n > 0 ) + Send( buf, n ); + else if ( n == 0 ) + break; + } + + // exit thread + return NULL; +} diff --git a/src/libnet++/TcpThread.h b/src/libnet++/TcpThread.h new file mode 100644 index 0000000..3c9f8e5 --- /dev/null +++ b/src/libnet++/TcpThread.h @@ -0,0 +1,60 @@ +// +// TCP Thread +// + +/* prevent multiple inclusions */ +#ifndef __TcpThread__ +#define __TcpThread__ + +/* includes *****************************************************************/ + +#include "TcpClient.h" +#include "Thread.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class TcpThread : public TcpClient, public Thread { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + TcpThread(); + + // destructor + virtual ~TcpThread(); + + // public methods + void SetSocket( int sock ) {Socket::SetSocket(sock);}; + int Detach(void) {return pthread_detach(pthread_self());}; + + // virtual functions + virtual void *Run(void *); + + // exceptions + class TcpThreadException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/src/libnet++/Thread.cpp b/src/libnet++/Thread.cpp new file mode 100644 index 0000000..1e6c67b --- /dev/null +++ b/src/libnet++/Thread.cpp @@ -0,0 +1,159 @@ +// +// Linux Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "Thread.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +static volatile bool thread_init = false; + +// mutex for locking on this class +static pthread_mutexattr_t thread_attr; +static pthread_mutex_t thread_lock = PTHREAD_MUTEX_INITIALIZER; + +//**************************************************************************** +// static functions +//***************************************************************************/ + +static void *run( void *arg ) +{ + Thread *thread = (Thread *)arg; + + log_printf( "Thread started %u", pthread_self() ); + + void *ret = thread->Run( thread->m_arg ); + + log_printf( "Thread finished %u", pthread_self() ); + + return ret; +} + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +Thread::Thread() +{ + m_thread = 0; + m_arg = NULL; + m_join = false; + m_running = false; + Thread::Init(); +} + +Thread::~Thread() +{ + if ( m_running ) + pthread_exit(NULL); +} + +// copy +inline Thread::Thread( const Thread& src ) +{ + memcpy( &m_attr, &src.m_attr, sizeof( pthread_mutexattr_t ) ); +} + +// assignment +inline const Thread& Thread::operator=( const Thread& src ) { + memcpy( &m_attr, &src.m_attr, sizeof( pthread_mutexattr_t ) ); + return *this; +} + +void Thread::Init(void) +{ + if ( !thread_init ) + { + pthread_mutexattr_init(&thread_attr); + pthread_mutexattr_settype(&thread_attr, PTHREAD_MUTEX_ERRORCHECK); + pthread_mutex_init(&thread_lock, &thread_attr); + } + m_join = true; + pthread_attr_init(&m_attr); +} + +bool Thread::Prep(void) +{ + return true; +} + +//**************************************************************************** +// Parent Functions +//***************************************************************************/ + +int Thread::Start( void *arg, bool detach ) +{ + if ( !Prep() ) + return -1; + + m_arg = arg; + int ret = pthread_create( &m_thread, &m_attr, run, this ); + + if ( ret == 0 || m_running == 0 ) + { + log_printf( "Thread created %u", m_thread ); + + if ( detach ) + { + // can't join + log_printf( "Thread detached %u", m_thread ); + + m_join = false; + m_running = true; + return pthread_detach( m_thread ); + } + } + + return ret; +} + +int Thread::Stop( ) +{ + int ret = 0; + + if ( m_running ) + { + log_printf( "Thread canceled %u", m_thread ); + ret = pthread_cancel( m_thread ); + m_thread = 0; + m_running = 0; + } + return ret; +} + +int Thread::Join( void **pptr ) +{ + if ( m_join ) + return pthread_join( m_thread, pptr ); + return 0; +} diff --git a/src/libnet++/Thread.h b/src/libnet++/Thread.h new file mode 100644 index 0000000..9a4c766 --- /dev/null +++ b/src/libnet++/Thread.h @@ -0,0 +1,82 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Thread__ +#define __Thread__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Thread { + // public data +public: + void *m_arg; + + // protected data +protected: + pthread_t m_thread; + pthread_attr_t m_attr; + + // private data +private: + bool m_join; + bool m_running; + + // public methods +public: + // constructors + Thread(); + + // destructor + virtual ~Thread(); + + Thread( const Thread& ); + const Thread& operator=( const Thread& ); + + // public methods + void Init(void); + int Start( void *arg = NULL, bool detach = false ); + int Stop( void ); + int Join( void **pptr = NULL ); + + pthread_t GetTid(void) {return m_thread;}; + + // virtual functions + virtual bool Prep(void); + virtual void *Run(void *) = 0; // {return NULL;}; + + // exceptions + class ThreadException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods to override + + // private methods +private: + // signal catchers (do not override) +}; + +#endif diff --git a/src/libnet++/Timer.cpp b/src/libnet++/Timer.cpp new file mode 100644 index 0000000..9ea9d70 --- /dev/null +++ b/src/libnet++/Timer.cpp @@ -0,0 +1,99 @@ +// +// Linux Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "Timer.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +Timer::Timer() +{ + m_running = false; +} + +Timer::~Timer() +{ +} + +//**************************************************************************** +// Parent Functions +//***************************************************************************/ + +int Timer::Restart(void) +{ + return 1; +} + +int Timer::Start( unsigned long msec ) +{ + return 1; +} + +void Timer::Stop(void) +{ + m_running = false; +} + +unsigned long Timer::Remaining(void) +{ + return 0L; +} + +int Timer::Wait(void) +{ + return 0; +} + +int Timer::Sync(void) +{ + Wait(); + return Restart(); +} + +void Timer::NanoSleep( unsigned long nsec ) +{ + struct timespec ts; + + ts.tv_sec = nsec / 1000000000; + ts.tv_nsec = nsec % 1000000000; + + nanosleep( &ts, NULL ); +} diff --git a/src/libnet++/Timer.h b/src/libnet++/Timer.h new file mode 100644 index 0000000..89d1b2a --- /dev/null +++ b/src/libnet++/Timer.h @@ -0,0 +1,80 @@ +// +// Linux Daemon +// + +/* prevent multiple inclusions */ +#ifndef __Timer__ +#define __Timer__ + +/* includes *****************************************************************/ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "netlib.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Timer { + // public data +public: + + // protected data +protected: + struct timespec m_timespec; + bool m_running; + + // private data +private: + + // public methods +public: + // constructors + Timer(); + + // destructor + virtual ~Timer(); + + // public methods + + // virtual functions + virtual int Restart(void); + virtual int Start( unsigned long usec ); + virtual void Stop(void); + virtual unsigned long Remaining(void); + virtual int Wait(void); + virtual int Sync(void); // Wait()+Restart() + + // exceptions + class TimerException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods +static void Sleep( unsigned int sec ) { sleep(sec); }; +static void MilliSleep( unsigned long msec ) { msleep(msec); }; +static void MicroSleep( unsigned long usec ) { usleep(usec); }; +static void NanoSleep( unsigned long nsleep ); + + // private methods +private: + + // signal catchers (do not override) +}; + +#endif diff --git a/src/libnet++/UdpArchdaemon.cpp b/src/libnet++/UdpArchdaemon.cpp new file mode 100644 index 0000000..c06cc2a --- /dev/null +++ b/src/libnet++/UdpArchdaemon.cpp @@ -0,0 +1,100 @@ +// +// UDP Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdpArchdaemon.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdpArchdaemon::UdpArchdaemon() +{ +} + +UdpArchdaemon::~UdpArchdaemon() +{ +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int UdpArchdaemon::Listen( void *arg ) +{ + /* select timeout */ + int rc = Select(); + + if ( rc == 0 ) + { + rc = ServerTimeout(); + + if ( rc == 0 ) + ResetServerTimeout(); + else if ( rc > 0 ) + SetTimeout( rc ); + else + return -1; + } + if ( rc > 0 ) + { + /* incoming connection? */ + if (FD_ISSET(m_sock, &m_sfds)) + { + void *parg = NULL; + + // get thread + UdpThread *thread = ClientThread( &parg ); + if ( !parg ) + parg = arg; + + if ( thread ) + { + // recvfrom and sendto on socket + thread->SetSocket( m_sock ); + thread->Start( parg, true ); // detach + } + rc--; + } + + if ( rc > 0 ) + rc = ServerSocket(); + } + return rc; +} diff --git a/src/libnet++/UdpArchdaemon.h b/src/libnet++/UdpArchdaemon.h new file mode 100644 index 0000000..e5d679b --- /dev/null +++ b/src/libnet++/UdpArchdaemon.h @@ -0,0 +1,56 @@ +// +// TCP Daemon +// + +/* prevent multiple inclusions */ +#ifndef __UdpArchdaemon__ +#define __UdpArchdaemon__ + +/* includes *****************************************************************/ + +#include "UdpDaemon.h" +#include "UdpThread.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpArchdaemon : public UdpDaemon { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpArchdaemon(); + + // destructor + virtual ~UdpArchdaemon(); + + // public methods + int StartService(const char *n,const char *h,const char *p,int d=0,int c=0); + int RunService(void); + + // overidden methods + int Listen( void *arg=NULL ); + virtual UdpThread *ClientThread( void **parg ) {return NULL;}; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/UdpCaster.cpp b/src/libnet++/UdpCaster.cpp new file mode 100644 index 0000000..cf571e2 --- /dev/null +++ b/src/libnet++/UdpCaster.cpp @@ -0,0 +1,118 @@ +// +// UCP Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdpCaster.h" +#include "UriParse.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdpCaster::UdpCaster() +{ +} + +UdpCaster::UdpCaster( const char *host, const char *port ) +{ + if ( Caster( host, port ) < 0 ) + throw UdpCasterException(); +} + +UdpCaster::~UdpCaster() +{ + Close(); +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int UdpCaster::BroadcasterUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Broadcaster( Uri.getHost(), Uri.getService() ); +} + +int UdpCaster::Broadcaster( const char *host, const char *port ) +{ + return Broadcast( host, port, &sock_addr, &sock_len ); +} + +int UdpCaster::CasterUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Caster( Uri.getHost(), Uri.getService() ); +} + +int UdpCaster::Caster( const char *host, const char *port ) +{ + m_family = Host2Addr( host, port, NULL, NULL ); + + if ( m_family == AF_INET ) + return Broadcast( host, port, &sock_addr, &sock_len ); + else if ( m_family == AF_INET6 ) + return Multicast( host, port, &sock_addr, &sock_len ); + + return -1; +} + +int UdpCaster::Restart( void ) +{ + Close(); + return Caster( GetHost(), GetPort() ); +} + +int UdpCaster::SendTo( const void *buf, int len ) +{ + int rc = -1; + + if ( m_sock >= 0 ) + rc = Socket::SendTo( m_sock, buf, len, &sock_addr, sock_len ); + + return rc; +} diff --git a/src/libnet++/UdpCaster.h b/src/libnet++/UdpCaster.h new file mode 100644 index 0000000..3f85944 --- /dev/null +++ b/src/libnet++/UdpCaster.h @@ -0,0 +1,65 @@ +// +// UDP Caster +// + +/* prevent multiple inclusions */ +#ifndef __UdpCaster__ +#define __UdpCaster__ + +/* includes *****************************************************************/ + +#include "UdpSocket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpCaster : public UdpSocket { + // public data +public: + +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpCaster(); + UdpCaster( const char *host, const char *service ); + + // destructor + virtual ~UdpCaster(); + + // public methods + int BroadcasterUri( const char *uri ); + int Broadcaster( const char *host, const char *service=NULL ); + int CasterUri( const char *uri ); + int Caster( const char *host, const char *service=NULL ); + int Restart( void ); + + // virtual functions + virtual int SendTo( const void *buf, int max ); + + // exceptions + class UdpCasterException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + + // private methods + void Init( void ); + +private: +}; + +#endif diff --git a/src/libnet++/UdpClient.cpp b/src/libnet++/UdpClient.cpp new file mode 100644 index 0000000..79130dc --- /dev/null +++ b/src/libnet++/UdpClient.cpp @@ -0,0 +1,95 @@ +// +// UCP Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdpClient.h" +#include "UriParse.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdpClient::UdpClient() +{ +} + +UdpClient::UdpClient( const char *host, const char *service ) +{ + if ( Connect( host, service ) < 0 ) + throw UdpClientException(); +} + +UdpClient::~UdpClient() +{ + Close(); +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int UdpClient::ConnectUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Connect( Uri.getHost(), Uri.getService() ); +} + +int UdpClient::Connect( const char *host, const char *port ) +{ + return UdpSocket::Client( host, port ); +} + +int UdpClient::ListenUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Listen( Uri.getHost(), Uri.getService() ); +} + +int UdpClient::Listen( const char *host, const char *port ) +{ + return UdpSocket::Listener( host, port ); +} diff --git a/src/libnet++/UdpClient.h b/src/libnet++/UdpClient.h new file mode 100644 index 0000000..ad6e8e3 --- /dev/null +++ b/src/libnet++/UdpClient.h @@ -0,0 +1,63 @@ +// +// TCP Client +// + +/* prevent multiple inclusions */ +#ifndef __UdpClient__ +#define __UdpClient__ + +/* includes *****************************************************************/ + +#include "UdpSocket.h" +#include "Client.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpClient : public Client, public UdpSocket { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpClient(); + UdpClient( const char *host, const char *service ); + + // destructor + virtual ~UdpClient(); + + // public methods + int ConnectUri( const char *uri ); + int Connect( const char *host, const char *service=NULL ); + int Reconnect() { Close();return Connect(GetHost(),GetPort()); }; + int ListenUri( const char *uri ); + int Listen( const char *host, const char *port ); + + // virtual functions + + // exceptions + class UdpClientException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/src/libnet++/UdpDaemon.cpp b/src/libnet++/UdpDaemon.cpp new file mode 100644 index 0000000..09d98bd --- /dev/null +++ b/src/libnet++/UdpDaemon.cpp @@ -0,0 +1,81 @@ +// +// UDP Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdpDaemon.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdpDaemon::UdpDaemon() +{ +} + +UdpDaemon::~UdpDaemon() +{ +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int UdpDaemon::StartService( const char *name, const char *host, const char *port, + int debug, int noclose ) +{ + // start daemon + if ( Daemonize(name, debug, noclose) ) + { + // start service + return Service( host, port ); + } + return -1; +} + +int UdpDaemon::RunService( void ) +{ + int rc = 0; + + // accept-read-write infinite loop + while( (rc = Listen()) >= 0 ) + ; + + return rc; +} + diff --git a/src/libnet++/UdpDaemon.h b/src/libnet++/UdpDaemon.h new file mode 100644 index 0000000..449f0d5 --- /dev/null +++ b/src/libnet++/UdpDaemon.h @@ -0,0 +1,52 @@ +// +// TCP Daemon +// + +/* prevent multiple inclusions */ +#ifndef __UdpDaemon__ +#define __UdpDaemon__ + +/* includes *****************************************************************/ + +#include "Daemon.h" +#include "UdpServer.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpDaemon : public UdpServer, public Daemon { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpDaemon(); + + // destructor + virtual ~UdpDaemon(); + + // public methods + int StartService(const char *n,const char *h,const char *p,int d=0,int c=0); + int RunService(void); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/UdpServer.cpp b/src/libnet++/UdpServer.cpp new file mode 100644 index 0000000..4d2b9a9 --- /dev/null +++ b/src/libnet++/UdpServer.cpp @@ -0,0 +1,139 @@ +// +// UDP Server +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdpServer.h" +#include "UriParse.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdpServer::UdpServer() +{ +} + +UdpServer::UdpServer( const char *host, const char *port ) +{ + if ( Service( host, port ) < 0 ) + throw UdpServerException(); +} + +UdpServer::~UdpServer() +{ + Close(); +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int UdpServer::ServiceUri( const char *uri ) +{ + if ( !uri ) + return -1; + UriParse Uri; + Uri.setUri( uri ); + + return Service( Uri.getHost(), Uri.getService() ); +} + +int UdpServer::Service( const char *host, const char *port ) +{ + UdpSocket::Server( host, port ); + + if ( m_sock >= 0 ) + AddFd(m_sock); + + return m_sock; +} + +int UdpServer::Restart( void ) +{ + Close(); + return Service( GetHost(), GetPort() ); +} + +int UdpServer::Listen( void ) +{ + /* select timeout */ + int rc = Select(); + + if ( rc == 0 ) + { + rc = ServerTimeout(); + + if ( rc == 0 ) + ResetServerTimeout(); + else if ( rc > 0 ) + SetTimeout( rc ); + else + return -1; + } + if ( rc > 0 ) + { + /* incoming connection? */ + if (FD_ISSET(m_sock, &m_sfds)) + { + char buf[16384]; + + // call handler for udp socket, return 0 if not handled + if ( ClientSock( m_sock ) == 0 ) + { + // simple handler, get message + int n = UdpSocket::RecvFrom( buf, sizeof(buf) ); + + if ( n >= 0 ) + { + // process message and create response + n = ClientInOut( buf, n, sizeof(buf) ); + + if ( n > 0 ) + UdpSocket::SendTo( buf, n ); + } + ResetClientTimeout(); + } + rc--; + } + + if ( rc > 0 ) + rc = ServerSocket(); + } + return rc; +} diff --git a/src/libnet++/UdpServer.h b/src/libnet++/UdpServer.h new file mode 100644 index 0000000..bf6c11e --- /dev/null +++ b/src/libnet++/UdpServer.h @@ -0,0 +1,65 @@ +// +// TCP Server +// + +/* prevent multiple inclusions */ +#ifndef __UdpServer__ +#define __UdpServer__ + +/* includes *****************************************************************/ + +#include "UdpSocket.h" +#include "Daemon.h" +#include "Server.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpServer : public Server, public UdpSocket { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpServer(); + UdpServer( const char *host, const char *service ); + + // destructor + virtual ~UdpServer(); + + // public methods + int ServiceUri( const char *uri ); + int Service( const char *host, const char *service=NULL ); + int Listen( void ); + int Restart( void ); + + // virtual functions + virtual int ClientSock( int sock ) {return 0;}; + virtual int ClientInOut( char *buf, int n, int max ) {return n;}; + + // exceptions + class UdpServerException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/src/libnet++/UdpSocket.cpp b/src/libnet++/UdpSocket.cpp new file mode 100644 index 0000000..6c66254 --- /dev/null +++ b/src/libnet++/UdpSocket.cpp @@ -0,0 +1,434 @@ +// +// Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdpSocket.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdpSocket::UdpSocket() +{ + m_proto = IPPROTO_UDP; + bzero(&sock_addr,sizeof(sock_addr)); + sock_len = sizeof(sock_addr); +} + +UdpSocket::~UdpSocket() +{ + Close(); +} + +UdpSocket::UdpSocket( const UdpSocket &src ) +{ + Copy(src); + memcpy(&sock_addr, &src.sock_addr, sizeof(sock_addr)); + sock_len = src.sock_len; +} + +const UdpSocket& UdpSocket::operator=( const UdpSocket& src ) +{ + this->Copy(src); + memcpy(&this->sock_addr, &src.sock_addr, sizeof(sock_addr)); + this->sock_len = src.sock_len; + return *this; +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int UdpSocket::Socket( const char *host, const char *port ) +{ + struct addrinfo hints, *res, *ressave; + int err; + m_sock = -1; + + /* default IPv6 localhost */ + if ( !host || !strlen(host) ) + host = (m_family == AF_INET6) ? "ip6-localhost" : "localhost"; + if ( !port || !strlen(port) ) + return -1; + + /* get address information */ + bzero(&hints, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; +// hints.ai_protocol = m_proto; + hints.ai_socktype = SOCK_DGRAM; + if ( (err = getaddrinfo(host, port, &hints, &res)) == 0 ) + { + ressave = res; + + while (res) + { + m_sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + if (m_sock >= 0) + break; + + // next + close(m_sock); + m_sock = -1; + res = res->ai_next; + } + + freeaddrinfo(ressave); + } + + // socket + SetHostPort( host, port ); + LogSocket( "UDP Socket" ); + + return m_sock; +} + +int UdpSocket::Client( const char *host, const char *port ) +{ + struct addrinfo hints, *res, *ressave; + int err; + m_sock = -1; + + /* default IPv6 localhost */ + if ( !host || !strlen(host) ) + host = (m_family == AF_INET6) ? "ip6-localhost" : "localhost"; + if ( !port || !strlen(port) ) + return -1; + + /* get address information */ + bzero(&hints, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; +// hints.ai_protocol = m_proto; + hints.ai_socktype = SOCK_DGRAM; + if ( (err = getaddrinfo(host, port, &hints, &res)) == 0 ) + { + ressave = res; + + while (res) + { + m_sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + if (m_sock < 0) + continue; // ignore + + // connected (allows send()/write() to be used) + if ( connect(m_sock, res->ai_addr, res->ai_addrlen) == 0 ) + break; // success + + // next + close(m_sock); + m_sock = -1; + res = res->ai_next; + } + + freeaddrinfo(ressave); + } + + // socket + Host2Addr( host, port, &sock_addr, &sock_len ); + SetHostPort( host, port ); + LogSocket( "UDP Connect" ); + + return m_sock; +} + +int UdpSocket::Server( const char *host, const char *port ) +{ + /* dual stack listener */ + struct addrinfo hints; + struct addrinfo *res, *ressave; + int err; + + if ( !host || !strlen(host) ) + host = (m_family == AF_INET6 ) ? "::0" : "0.0.0.0"; + m_sock = -1; + + /* set-up hints structure */ + bzero(&hints, sizeof(hints)); + hints.ai_family = AF_UNSPEC; +// hints.ai_protocol = m_proto; + hints.ai_flags = AI_PASSIVE; + hints.ai_socktype = SOCK_DGRAM; + if ( (err = getaddrinfo(host, port, &hints, &res)) == 0 ) + { + ressave = res; + + while (res) + { + /* bind() and listen() to res->ai_addr */ + m_sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol ); + if ( m_sock < 0 ) + continue; + + /* bind */ + if ( bind(m_sock, res->ai_addr, res->ai_addrlen) == 0 ) + break; // success + + /* error, try again */ + close(m_sock); + m_sock = -1; + res = res->ai_next; + } + + freeaddrinfo( ressave ); + } + + // socket + SetHostPort( host, port ); + LogSocket( "UDP Listen" ); + + return m_sock; +} + +int UdpSocket::Broadcast( const char *host, const char *service, + struct sockaddr_storage *sa, socklen_t *len ) +{ + // IPv4 only + if ( !host || !strlen(host) ) + host = "255.255.255.255"; + + // host + m_family = Host2Addr( host, service, sa, len ); + + if ( m_family != AF_INET ) + { + // an IPv4 address could come back as IPv6 depending on resolver + struct sockaddr_in *sa4 = (struct sockaddr_in *)sa; + if ( inet_pton(AF_INET, host, &sa4->sin_addr.s_addr ) <= 0 ) + { + log_printf( "Broadcast address is not IPv4: %s", host ); + return -1; + } + m_family = sa4->sin_family = AF_INET; + + // fix port + int port = atoi(service); + port = Service2Port( service, port, NULL ); + sa4->sin_port = port; + } + + /* plug me into a socket */ + if ( (m_sock = socket( m_family, SOCK_DGRAM, 0)) >= 0 ) + { + // check for broad cast + struct sockaddr_in *sa4 = (struct sockaddr_in *)sa; + + // is it a class C (or higher) broadcast address? + if ( (ntohl(sa4->sin_addr.s_addr) & 0xff) == 0xff ) + { + // ipv4 uses classic broadcast + u_int i = 1; + if ( setsockopt(m_sock, SOL_SOCKET, SO_BROADCAST|SO_REUSEADDR, &i, sizeof(i)) != 0 ) + { + close(m_sock); + m_sock = -1; + log_printf( "Setsockopt for broadcast failed" ); + return -1; + } + log_printf( "Setsockopt for broadcast successful" ); + } + } + + // socket + SetHostPort( host, service ); + LogSocket( "UDP IPv4 Broadcast" ); + + return m_sock; +} + +int UdpSocket::Listener( const char *host, const char *port ) +{ + struct sockaddr_storage ss, any; + int bcast = 0; + + // default host + if ( !host || strlen(host) == 0 ) + host = (m_family==AF_INET6)?"ip6-allnodes":"0.0.0.0"; + + /* clear and initialize address structure */ + socklen_t sa_len; + m_family = Host2Addr( host, port, (struct sockaddr_storage *)&ss, &sa_len ); + + if ( m_family < 0 ) + return -1; + any = ss; + + // check if multicast + if ( m_family == AF_INET6 ) + { + struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)&ss; + + if ( !IN6_IS_ADDR_MULTICAST( sa6->sin6_addr.s6_addr ) ) + { + log_error(host); + return -1; + } + + // bind to any + sa6 = (struct sockaddr_in6 *)&any; + sa6->sin6_addr = in6addr_any; + } + else if ( m_family == AF_INET ) + { + struct sockaddr_in *sa = (struct sockaddr_in *)&ss; + + // broadcast listener? + if ( sa->sin_addr.s_addr == INADDR_ANY || + sa->sin_addr.s_addr == INADDR_LOOPBACK ) + { + bcast = 1; + } + else if ( IN_MULTICAST( sa->sin_addr.s_addr ) ) + { + log_error("multicast"); + return -1; + } + + // bind to any + sa = (struct sockaddr_in *)&any; + sa->sin_addr.s_addr = INADDR_ANY; + } + + /* plug me into a socket */ + if ( (m_sock = socket(m_family, SOCK_DGRAM, 0)) >= 0 ) + { + /* reuse socket */ + int i = 1; + if ( setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i)) == 0 ) + { + /* bind (any) */ + if ( bind(m_sock, (struct sockaddr *)&any, sa_len ) == 0 ) + { + // IPv6 Multicast + int level = (m_family == AF_INET6) ? IPPROTO_IPV6 : IPPROTO_IP; + + // join multi-cast group + struct group_req req; + req.gr_interface = 0; // kernel selects interface + req.gr_group = ss; + + // join + if ( m_family == AF_INET6 ) + { + if ( setsockopt(m_sock, level, MCAST_JOIN_GROUP, &req, sizeof(req) ) != 0 +) + { + close(m_sock); + m_sock = -1; + } + } + } + } + } + + // socket + if ( m_sock >= 0 ) + { + SetHostPort( host, port ); + + // IPv4 broadcast + if ( bcast ) + LogSocket( "UDP IPv4 Listener" ); + else + LogSocket( "UDP IPv6 Listener" ); + } + + return m_sock; +} + +int UdpSocket::Multicast( const char *host, const char *port, + struct sockaddr_storage *sa, socklen_t *len ) +{ + // default + if ( !host ) + host = m_family==AF_INET6?"ip6-allnodes":"255.255.255.255"; + + // address for link-local multi-cast + m_family = Host2Addr( host, port, sa, len ); + if ( m_family != AF_INET6 ) + return -1; + + // plug me into a socket + if ( (m_sock = socket( m_family, SOCK_DGRAM, 0)) >= 0 ) + { + int level = (m_family == AF_INET6) ? IPPROTO_IPV6 : IPPROTO_IP; + + // The Stevens book doesn't do the join source group + + // broadcast on this socket + if ( m_family == AF_INET6 ) + { + // no local echo + u_int flag = 0; + if ( setsockopt(m_sock, level, IPV6_MULTICAST_LOOP, &flag, sizeof(flag) ) +== 0 ) + { + // 1 hop + flag = 1; + if ( setsockopt(m_sock, level, IPV6_MULTICAST_HOPS, &flag, sizeof(flag) ) != 0 ) + { + close(m_sock); + m_sock = -1; + } + } + else + { + close(m_sock); + m_sock = -1; + } + } + } + + // socket + if ( m_sock >= 0 ) + SetHostPort( host, port ); + LogSocket( "UDP IPv6 Multicast" ); + + return m_sock; +} + +int UdpSocket::RecvFrom( void *buf, int max ) +{ + socklen_t len = sizeof(sock_addr); + + return Socket::RecvFrom( buf, max, &sock_addr, &len ); +} + +int UdpSocket::SendTo( const void *buf, int len ) +{ + return Socket::SendTo( m_sock, buf, len, &sock_addr, sizeof(sock_addr) ); +} diff --git a/src/libnet++/UdpSocket.h b/src/libnet++/UdpSocket.h new file mode 100644 index 0000000..4cf0bee --- /dev/null +++ b/src/libnet++/UdpSocket.h @@ -0,0 +1,74 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __UdpSocket__ +#define __UdpSocket__ + +/* includes *****************************************************************/ + +#include "Socket.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpSocket : public Socket { + // public data +public: + + // protected data +protected: + struct sockaddr_storage sock_addr; + socklen_t sock_len; + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpSocket(); + + // destructor + virtual ~UdpSocket(); + + // copy constructor + UdpSocket( const UdpSocket &src ) ; + const UdpSocket& operator=( const UdpSocket &src ); + + // public methods + int Socket( const char *host, const char *port ); + int Client( const char *host, const char *port ); + int Server( const char *host, const char *port ); + int Broadcast( const char *host, const char *port, + struct sockaddr_storage *sa, socklen_t *len ); + int Listener( const char *host, const char *port ); + int Multicast( const char *host, const char *port, + struct sockaddr_storage *sa, socklen_t *len ); + + int RecvFrom( void *buf, int max ); + int SendTo( const void *buf, int len ); + + // control + + // status + + // virtual functions + + // exceptions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/UdpThread.cpp b/src/libnet++/UdpThread.cpp new file mode 100644 index 0000000..f296598 --- /dev/null +++ b/src/libnet++/UdpThread.cpp @@ -0,0 +1,70 @@ +// +// UCP Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdpThread.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdpThread::UdpThread() +{ +} + +UdpThread::~UdpThread() +{ +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +void *UdpThread::Run(void *arg) +{ + // default echo + char buf[16384]; + + int n = RecvFrom( buf, sizeof(buf) ); + if ( n > 0 ) + SendTo( buf, n ); + + // exit thread + return NULL; +} diff --git a/src/libnet++/UdpThread.h b/src/libnet++/UdpThread.h new file mode 100644 index 0000000..5ca3866 --- /dev/null +++ b/src/libnet++/UdpThread.h @@ -0,0 +1,59 @@ +// +// UDP Thread +// + +/* prevent multiple inclusions */ +#ifndef __UdpThread__ +#define __UdpThread__ + +/* includes *****************************************************************/ + +#include "UdpClient.h" +#include "Thread.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdpThread : public UdpClient, public Thread { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdpThread(); + + // destructor + virtual ~UdpThread(); + + // public methods + void SetSocket( int sock ) {Socket::SetSocket(sock);}; + + // virtual functions + virtual void *Run(void *); + + // exceptions + class UdpThreadException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/src/libnet++/UdsClient.cpp b/src/libnet++/UdsClient.cpp new file mode 100644 index 0000000..1acc26a --- /dev/null +++ b/src/libnet++/UdsClient.cpp @@ -0,0 +1,70 @@ +// +// UCP Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdsClient.h" +#include "UriParse.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdsClient::UdsClient() +{ +} + +UdsClient::UdsClient( const char *file ) +{ + if ( Connect( file ) < 0 ) + throw UdsClientException(); +} + +UdsClient::~UdsClient() +{ + Close(); +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int UdsClient::Connect( const char *file ) +{ + return UdsSocket::Client( file ); +} diff --git a/src/libnet++/UdsClient.h b/src/libnet++/UdsClient.h new file mode 100644 index 0000000..1f73bc3 --- /dev/null +++ b/src/libnet++/UdsClient.h @@ -0,0 +1,59 @@ +// +// TCP Client +// + +/* prevent multiple inclusions */ +#ifndef __UdsClient__ +#define __UdsClient__ + +/* includes *****************************************************************/ + +#include "UdsSocket.h" +#include "Client.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdsClient : public Client, public UdsSocket { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdsClient(); + UdsClient( const char *file ); + + // destructor + virtual ~UdsClient(); + + // public methods + int Connect( const char *file ); + + // virtual functions + + // exceptions + class UdsClientException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/src/libnet++/UdsDaemon.cpp b/src/libnet++/UdsDaemon.cpp new file mode 100644 index 0000000..e70ea53 --- /dev/null +++ b/src/libnet++/UdsDaemon.cpp @@ -0,0 +1,80 @@ +// +// UDP Daemon +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdsDaemon.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdsDaemon::UdsDaemon() +{ +} + +UdsDaemon::~UdsDaemon() +{ +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int UdsDaemon::StartService( const char *file, int debug, int noclose ) +{ + // start daemon + if ( Daemonize(file, debug, noclose) ) + { + // start service + return Service( file ); + } + return -1; +} + +int UdsDaemon::RunService( void ) +{ + int rc = 0; + + // accept-read-write infinite loop + while( (rc = Listen()) >= 0 ) + ; + + return rc; +} + diff --git a/src/libnet++/UdsDaemon.h b/src/libnet++/UdsDaemon.h new file mode 100644 index 0000000..5a2f55e --- /dev/null +++ b/src/libnet++/UdsDaemon.h @@ -0,0 +1,52 @@ +// +// TCP Daemon +// + +/* prevent multiple inclusions */ +#ifndef __UdsDaemon__ +#define __UdsDaemon__ + +/* includes *****************************************************************/ + +#include "Daemon.h" +#include "UdsServer.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdsDaemon : public UdsServer, public Daemon { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdsDaemon(); + + // destructor + virtual ~UdsDaemon(); + + // public methods + int StartService(const char *f,int d=0,int c=0); + int RunService(void); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/UdsServer.cpp b/src/libnet++/UdsServer.cpp new file mode 100644 index 0000000..73485be --- /dev/null +++ b/src/libnet++/UdsServer.cpp @@ -0,0 +1,129 @@ +// +// UDP Server +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdsServer.h" +#include "UriParse.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdsServer::UdsServer() +{ +} + +UdsServer::UdsServer( const char *file ) +{ + if ( Service( file ) < 0 ) + throw UdsServerException(); +} + +UdsServer::~UdsServer() +{ + Close(); +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int UdsServer::Service( const char *file ) +{ + UdsSocket::Server( file ); + + if ( m_sock >= 0 ) + AddFd(m_sock); + + return m_sock; +} + +int UdsServer::Restart( void ) +{ + Close(); + return Service( m_file ); +} + +int UdsServer::Listen( void ) +{ + /* select timeout */ + int rc = Select(); + + if ( rc == 0 ) + { + rc = ServerTimeout(); + + if ( rc == 0 ) + ResetServerTimeout(); + else if ( rc > 0 ) + SetTimeout( rc ); + else + return -1; + } + if ( rc > 0 ) + { + /* incoming connection? */ + if (FD_ISSET(m_sock, &m_sfds)) + { + char buf[16384]; + + // call handler for udp socket, return 0 if not handled + if ( ClientSock( m_sock ) == 0 ) + { + // simple handler, get message + int n = UdsSocket::Recv( buf, sizeof(buf) ); + + if ( n >= 0 ) + { + // process message and create response + n = ClientInOut( buf, n, sizeof(buf) ); + + if ( n > 0 ) + UdsSocket::Send( buf, n ); + } + ResetClientTimeout(); + } + rc--; + } + + if ( rc > 0 ) + rc = ServerSocket(); + } + return rc; +} diff --git a/src/libnet++/UdsServer.h b/src/libnet++/UdsServer.h new file mode 100644 index 0000000..31d629c --- /dev/null +++ b/src/libnet++/UdsServer.h @@ -0,0 +1,64 @@ +// +// TCP Server +// + +/* prevent multiple inclusions */ +#ifndef __UdsServer__ +#define __UdsServer__ + +/* includes *****************************************************************/ + +#include "UdsSocket.h" +#include "Daemon.h" +#include "Server.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdsServer : public Server, public UdsSocket { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdsServer(); + UdsServer( const char *file ); + + // destructor + virtual ~UdsServer(); + + // public methods + int Service( const char *file ); + int Listen( void ); + int Restart( void ); + + // virtual functions + virtual int ClientSock( int sock ) {return 0;}; + virtual int ClientInOut( char *buf, int n, int max ) {return n;}; + + // exceptions + class UdsServerException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/src/libnet++/UdsSocket.cpp b/src/libnet++/UdsSocket.cpp new file mode 100644 index 0000000..de11583 --- /dev/null +++ b/src/libnet++/UdsSocket.cpp @@ -0,0 +1,143 @@ +// +// Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdsSocket.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdsSocket::UdsSocket() +{ + // Unix Domain Socket + m_family = AF_UNIX; + m_proto = IPPROTO_UDP; + bzero(&sock_addr,sizeof(sock_addr)); + sock_len = sizeof(sock_addr); +} + +UdsSocket::~UdsSocket() +{ + Close(); +} + +UdsSocket::UdsSocket( const UdsSocket &src ) +{ + Copy(src); + memcpy(&sock_addr, &src.sock_addr, sizeof(sock_addr)); + sock_len = src.sock_len; +} + +const UdsSocket& UdsSocket::operator=( const UdsSocket& src ) +{ + this->Copy(src); + memcpy(&this->sock_addr, &src.sock_addr, sizeof(sock_addr)); + this->sock_len = src.sock_len; + return *this; +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +int UdsSocket::Socket( const char *file ) +{ + if ( !file || !strlen(file) ) + return -1; + strncpy( m_file, file, sizeof(m_file) ); + + // socket + if ( (m_sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) + return -1; + + // socket + LogSocket( "UDS Socket" ); + + return m_sock; +} + +int UdsSocket::Client( const char *file ) +{ + struct sockaddr_un remote; + int len; + + if (Socket( file ) >= 0) + { + // connect + remote.sun_family = AF_UNIX; + strcpy(remote.sun_path, file); + len = strlen(remote.sun_path) + sizeof(remote.sun_family); + + if (connect(m_sock, (struct sockaddr *)&remote, len) == -1) { + Close(); + } + else { + // socket + LogSocket( "UDS Connect" ); + } + } + + return m_sock; +} + +int UdsSocket::Server( const char *file ) +{ + struct sockaddr_un local; + int len; + + if (Socket( file ) >= 0) + { + // bind + local.sun_family = AF_UNIX; /* local is declared before socket() ^ */ + strcpy(local.sun_path, file); + unlink(local.sun_path); + len = strlen(local.sun_path) + sizeof(local.sun_family); + + if (bind(m_sock, (struct sockaddr *)&local, len) < 0) { + Close(); + } + else { + // socket + LogSocket( "UDS Listen" ); + } + } + + return m_sock; +} diff --git a/src/libnet++/UdsSocket.h b/src/libnet++/UdsSocket.h new file mode 100644 index 0000000..e65b0aa --- /dev/null +++ b/src/libnet++/UdsSocket.h @@ -0,0 +1,70 @@ +// +// Socket +// + +/* prevent multiple inclusions */ +#ifndef __UdsSocket__ +#define __UdsSocket__ + +/* includes *****************************************************************/ + +#include "Socket.h" +#include + +/* defines ******************************************************************/ + +#define MAX_UDS_CLIENTS 10 + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdsSocket : public Socket { + // public data +public: + + // protected data +protected: + char m_file[1024]; + struct sockaddr_storage sock_addr; + socklen_t sock_len; + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdsSocket(); + + // destructor + virtual ~UdsSocket(); + + // copy constructor + UdsSocket( const UdsSocket &src ) ; + const UdsSocket& operator=( const UdsSocket &src ); + + // public methods + int Socket( const char *file ); + int Client( const char *file ); + int Server( const char *file ); + + // control + + // status + + // virtual functions + + // exceptions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libnet++/UdsThread.cpp b/src/libnet++/UdsThread.cpp new file mode 100644 index 0000000..a7bba47 --- /dev/null +++ b/src/libnet++/UdsThread.cpp @@ -0,0 +1,70 @@ +// +// UCP Client +// + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include "UdsThread.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +UdsThread::UdsThread() +{ +} + +UdsThread::~UdsThread() +{ +} + +//**************************************************************************** +// Functions +//***************************************************************************/ + +void *UdsThread::Run(void *arg) +{ + // default echo + char buf[16384]; + + int n = Recv( buf, sizeof(buf) ); + if ( n > 0 ) + Send( buf, n ); + + // exit thread + return NULL; +} diff --git a/src/libnet++/UdsThread.h b/src/libnet++/UdsThread.h new file mode 100644 index 0000000..a740736 --- /dev/null +++ b/src/libnet++/UdsThread.h @@ -0,0 +1,59 @@ +// +// UDP Thread +// + +/* prevent multiple inclusions */ +#ifndef __UdsThread__ +#define __UdsThread__ + +/* includes *****************************************************************/ + +#include "UdsClient.h" +#include "Thread.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class UdsThread : public UdsClient, public Thread { + // public data +public: + + // protected data +protected: + + // private data +private: + + // static data + + // public methods +public: + // constructors + UdsThread(); + + // destructor + virtual ~UdsThread(); + + // public methods + void SetSocket( int sock ) {Socket::SetSocket(sock);}; + + // virtual functions + virtual void *Run(void *); + + // exceptions + class UdsThreadException + { + char *toString(void) { return strerror(errno); }; + }; + + // static methods + +private: +}; + +#endif diff --git a/src/libnet++/UriParse.cpp b/src/libnet++/UriParse.cpp new file mode 100644 index 0000000..f9a4902 --- /dev/null +++ b/src/libnet++/UriParse.cpp @@ -0,0 +1,386 @@ +// +// URI Parser +// +// Use only for device, file, network service/port parsing, not web URL parsing! +// use liburiparser for serious URI parsing +// +// Neal Probert +// + +#include "UriParse.h" +#include "Socket.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +void UriParse::Init(void) +{ + Rate = 0; +} + +UriParse::UriParse() +{ + Rate = 0; +} + +UriParse::UriParse( const char *uri ) +{ + Parse( uri ); +} + +UriParse::~UriParse() +{ +} + +int UriParse::getUri( char *buf, int max ) +{ + int n = 0; + + if ( !buf || max== 0 ) + return 0; + + strcpy( buf, "" ); + + // proto: + if ( Proto.length() ) + { + n = snprintf( buf, max, "%s:", Proto.c_str() ); + buf += n; + max -= n; + } + + // URL or path + if ( Host.length() ) + { + // //user:pass@host:port;options/path + strncpy( buf, "//", max ); + buf += 2; + max -= 2; + + // user:pass@ + if ( User.length() ) + { + if ( Pass.length() ) + n = snprintf( buf, max, "%s:%s@", User.c_str(), Pass.c_str() ); + else + n = snprintf( buf, max, "%s@", User.c_str() ); + buf += n; + max -= n; + } + if ( Port.length() ) + n = snprintf( buf, max, "%s:%s", Host.c_str(), Port.c_str() ); + else + n = snprintf( buf, max, "%s", Host.c_str() ); + buf += n; + max -= n; + + // path + if ( Path.length() ) + n = snprintf( buf, max, "%s", Path.c_str() ); + else + n = snprintf( buf, max, "/" ); + buf += n; + max -= n; + } + else if ( Path.length() ) + { + // /path:rate + if ( Rate ) + n = snprintf( buf, max, "%s:%u", Path.c_str(), Rate ); + else + n = snprintf( buf, max, "%s", Path.c_str() ); + buf += n; + max -= n; + } + else + return -1; + + for ( unsigned int i=0 ; is_port); + return 0; +} + +void UriParse::setQuery( const char *name, const char *value ) +{ + QueryString qs; + qs.Set(name,value); + Queries.push_back(qs); +} + +const char *UriParse::getQuery( const char *s ) +{ + std::string name(s); + + for ( unsigned int i=0 ; i +#include +#include + +#include +#include + +#include "QueryString.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +// +// Chop up the URI into it's component parts +// +class UriParse { + // public data +public: + std::string Proto; + std::string User; + std::string Pass; + std::string Host; + std::string Port; + std::string Path; + std::vector Queries; + + // private data +private: + int Rate; + + // static data + + // public methods +public: + // constructors + UriParse(); + UriParse( const char *uri ); + + // destructor + virtual ~UriParse(); + + // access methods + int setUri( const char *uri ); // parse + int getUri( char *buf, int size ); + + void setProto( const char *s ) { Proto = s; }; + void setUser( const char *s ) { User = s; }; + void setPassword( const char *s ) { Pass = s; }; + void setHost( const char *s ) { Host = s; }; + void setService( const char *s ){ Port = s; }; + void setPort( int p ) { Port = p; }; + void setPath( const char *s ) { Path = s; }; + void setRate( int r ) { Rate = r; }; + + const char *getProto(void) { return Proto.c_str(); }; + const char *getUser(void) { return User.c_str(); }; + const char *getPassword(void) { return Pass.c_str(); }; + const char *getHost(void) { return Host.c_str(); }; + const char *getService(void) { return Port.c_str(); }; + int getPort(void); + const char *getPath(void) { return Path.c_str(); }; + int getRate(void) { return Rate; }; + + void setQuery( const char *name, const char *value ); + const char *getQuery( const char *name ); + + // static methods + + // private methods +private: + void Init(void); + int Parse( const char *uri ); +}; + +#endif diff --git a/src/libnet/CMakeLists.txt b/src/libnet/CMakeLists.txt new file mode 100644 index 0000000..15e89cc --- /dev/null +++ b/src/libnet/CMakeLists.txt @@ -0,0 +1,71 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME net) +set(TARGET lib${NAME}) +project(Cnomicon-${TARGET}) +set(CMAKE_INSTALL_PREFIX ..) +set(LIBRARY ${TARGET}) + +# list of header files +set(LIBH + memlib.h + netlib.h + strlib.h + ) + +# list of source files +set(LIBSRC + fd_selector.c + fd_utils.c + io_serial.c + ip_hostaddr.c + ip_hostname.c + ip_servport.c + ip_sockname.c + log_file.c + mac_address.c + mem_safe.c + msleep.c + pid_file.c + sig_rt.c + strlcat.c + strlcpy.c + tcp_accept.c + tcp_client.c + tcp_nagle.c + tcp_recv.c + tcp_send.c + tcp_server.c + udp_broadcast.c + udp_client.c + udp_listener.c + udp_multicast.c + udp_recvfrom.c +# udp_sendmcast.c + udp_sendto.c + udp_server.c + udp_socket.c + uds_client.c + uds_server.c + uri_parse.c +) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) + +# this is the "object library" target: compiles the sources only once +add_library(${LIBRARY} OBJECT ${LIBSRC}) + +# shared libraries need PIC +set_property(TARGET ${LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE 1) + +# shared and static libraries built from the same object files +add_library(${LIBRARY}-shared SHARED $) +add_library(${LIBRARY}-static STATIC $) + +# output file names +set_target_properties(${LIBRARY}-shared PROPERTIES OUTPUT_NAME ${NAME}) +set_target_properties(${LIBRARY}-static PROPERTIES OUTPUT_NAME ${NAME}) + +# installations +install (FILES ${LIBH} DESTINATION include) +#install (FILES lib${NAME}.a lib${NAME}.so DESTINATION lib) diff --git a/src/libnet/fd_selector.c b/src/libnet/fd_selector.c new file mode 100644 index 0000000..8740502 --- /dev/null +++ b/src/libnet/fd_selector.c @@ -0,0 +1,43 @@ +#include "netlib.h" + +#define max(A,B) ((A)>=(B)?(A):(B)) + +int selector( int *nfds, fd_set *rfds, fd_set *wfds, long usec ) +{ + // descriptor count + int n = 0; + if ( !nfds ) + { + // maximum + n = getdtablesize(); + } + else if ( ! *nfds ) + { + n = fd_count(rfds); + int m = fd_count(wfds); + n = max( n, m ); + } + else + n = *nfds; + + if( nfds ) + *nfds = n; + + // timeout + struct timeval timeout; + if ( usec ) + { + timeout.tv_sec = usec / 1000000; + timeout.tv_usec = usec % 1000000; + } + + // do it + int rc = select( n, rfds, wfds, NULL, usec ? &timeout:NULL ); + + if ( rc < 0 ) + { + // error + log_error( "select" ); + } + return rc; +} diff --git a/src/libnet/fd_utils.c b/src/libnet/fd_utils.c new file mode 100644 index 0000000..90150bd --- /dev/null +++ b/src/libnet/fd_utils.c @@ -0,0 +1,47 @@ +#include "netlib.h" + +#define max(A,B) ((A)>=(B)?(A):(B)) + +int fd_add( int sock, fd_set *pfds, int nfds ) +{ + if ( sock < 0 ) + return nfds; + + // set it + if ( pfds ) + FD_SET(sock, pfds); + + // fix # + if ( nfds < sock + 1 ) + nfds = sock + 1; + + return nfds; +} + +int fd_count( fd_set *pfds ) +{ + // optimal number of descriptors + int i, n = 0; + + if ( !pfds ) + return 0; + + for ( i=0 ; i + +int serial_open( char *tty, int ttybaud, int blocksz, int waittime ) +{ + int fd; + struct termios termios; + + // open non-blocking, to allow use of select() + fd = open(tty, O_RDWR | O_NONBLOCK | O_NOCTTY ); + if (fd < 0) + { + log_error("open"); + return (-1); + } + if (tcgetattr(fd, &termios) < 0) + { + // not a serial port + log_error("tcgetattr"); + return (-1); + } + + /* zap special chars */ + int cnt; + + for (cnt = 0; cnt < NCCS; cnt++) + termios.c_cc[cnt] = -1; + + /* default control flags */ + termios.c_iflag = 0; + termios.c_oflag = 0; /* (ONLRET) */ + termios.c_cflag = CS8 | CLOCAL | CREAD; + termios.c_lflag = 0; + + /* canonical or not? */ + if ( blocksz <= 0 && waittime <= 0 ) + { + /* assume canonical (ascii) */ + termios.c_lflag = ICANON; + termios.c_cc[VEOL] = '\n'; + + termios.c_cc[VMIN] = 0; + termios.c_cc[VTIME] = 0; + } + else + { + /* non-canonical (binary) */ + termios.c_cc[VMIN] = blocksz; + termios.c_cc[VTIME] = waittime; // x100 msec + } + + /* baud rates */ + switch (ttybaud) + { + case 300: + ttybaud = B300; + break; + case 1200: + ttybaud = B1200; + break; + case 2400: + ttybaud = B2400; + break; + case 4800: + ttybaud = B4800; + break; + case 9600: + ttybaud = B9600; + break; + case 19200: + ttybaud = B19200; + break; + case 38400: + ttybaud = B38400; + break; + case 57600: + ttybaud = B57600; + break; + case 115200: + ttybaud = B115200; + break; + case 230400: + ttybaud = B230400; + break; + default: + ttybaud = B9600; + break; + } + + if (cfsetispeed(&termios, ttybaud) != 0) { + log_error("cfsetispeed"); + return (-1); + } + if (cfsetospeed(&termios, ttybaud) != 0) { + log_error("cfsetospeed"); + return (-1); + } + if (tcsetattr(fd, TCSANOW, &termios) < 0) { + log_error("tcsetattr"); + return (-1); + } + + #if WANT_BLOCKING_READ + if (fcntl(fd, F_SETFL, 0) == -1) { + log_error("fcntl: set nonblock"); + } + #endif + return (fd); +} diff --git a/src/libnet/ip_hostaddr.c b/src/libnet/ip_hostaddr.c new file mode 100644 index 0000000..cf9fcbe --- /dev/null +++ b/src/libnet/ip_hostaddr.c @@ -0,0 +1,57 @@ +// +// IP gethostname +// + +#include "netlib.h" + +int ip_host2addr( const char *host, const char *service, struct sockaddr_storage *sa, socklen_t *len ) +{ + struct hostent *ent; + + /* do host lookup matching family (this is not POSIX) */ + if ( (ent = gethostbyname2( host, AF_INET6 )) == NULL ) + { + if ( (ent = gethostbyname2( host, AF_INET )) == NULL ) + { + log_error( "gethostbyname" ); + return -1; + } + } + int family = ent->h_addrtype; + + // service + int port = ip_service2port( service, atoi(service), NULL ); + + /* clear and initialize address structure */ + if ( sa ) + bzero(sa, sizeof(struct sockaddr_storage) ); + + if ( family == AF_INET6 ) + { + if ( sa ) + { + struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)sa; + sa6->sin6_family = family; + sa6->sin6_port = port; + sa6->sin6_addr = *((struct in6_addr *)ent->h_addr); + } + if ( len ) + *len = sizeof(struct sockaddr_in6); + } + else if ( family == AF_INET ) + { + if ( sa ) + { + struct sockaddr_in *sa4 = (struct sockaddr_in *)sa; + sa4->sin_family = family; + sa4->sin_port = port; + sa4->sin_addr = *((struct in_addr *)ent->h_addr); + } + if ( len ) + *len = sizeof(struct sockaddr_in); + } + else + return -1; + + return family; +} diff --git a/src/libnet/ip_hostname.c b/src/libnet/ip_hostname.c new file mode 100644 index 0000000..b629ce9 --- /dev/null +++ b/src/libnet/ip_hostname.c @@ -0,0 +1,45 @@ +// +// IP gethostname +// + +#include "netlib.h" + +const char *ip_host2name( char *buf, int max, const struct sockaddr_storage *sa ) +{ + const char *s = NULL; + + switch (sa->ss_family) + { + case AF_INET: + s = inet_ntop(sa->ss_family, + &((struct sockaddr_in *)sa)->sin_addr, + buf, max); + break; + case AF_INET6: + s = inet_ntop(sa->ss_family, + &((struct sockaddr_in6 *)sa)->sin6_addr, + buf, max); + break; + } + if ( s ) + return s; + + return strerror(errno); +} + +int ip_name2host( const char *buf, struct sockaddr_storage *sa ) +{ + // from string + switch (sa->ss_family) + { + case AF_INET: + return inet_pton(sa->ss_family, buf, + &((struct sockaddr_in *)sa)->sin_addr ); + break; + case AF_INET6: + return inet_pton(sa->ss_family, buf, + &((struct sockaddr_in6 *)sa)->sin6_addr ); + break; + } + return EAFNOSUPPORT; +} diff --git a/src/libnet/ip_servport.c b/src/libnet/ip_servport.c new file mode 100644 index 0000000..c7aeec0 --- /dev/null +++ b/src/libnet/ip_servport.c @@ -0,0 +1,22 @@ +// +// IP Service -> Port +// + +#include "netlib.h" + +int ip_service2port( const char *service, int port, const char *proto ) +{ + /* socket stuff */ + struct servent *serv; /* service entry from /etc/services */ + + /* check args */ + if ( port ) + serv = getservbyport( htons(port), proto ); + else if ( service ) + serv = getservbyname( service, proto ); + + // return network byte order + if ( serv ) + return serv->s_port; + return htons(port); +} diff --git a/src/libnet/ip_sockname.c b/src/libnet/ip_sockname.c new file mode 100644 index 0000000..0cce50a --- /dev/null +++ b/src/libnet/ip_sockname.c @@ -0,0 +1,20 @@ +// +// Socket address +// + +#include "netlib.h" + +int ip_sockname( int sock, struct sockaddr_storage *sa ) +{ + if ( !sa ) + return -1; + + bzero( sa, sizeof(struct sockaddr_storage) ); + + /* address info */ + socklen_t l = sizeof(struct sockaddr_storage); + if ( getsockname( sock, (struct sockaddr *)&sa, &l ) < 0 ) + return -1; + + return 0; +} diff --git a/src/libnet/log_file.c b/src/libnet/log_file.c new file mode 100644 index 0000000..18a3923 --- /dev/null +++ b/src/libnet/log_file.c @@ -0,0 +1,100 @@ +// +// Logging +// + +#include "netlib.h" +#include "strlib.h" + +#include +#include +#include +#include +#include +#include + +static char szLogPath[MAXPATHLEN-5] = "/var/log/" VAR_LOG_RUN_NAME "/"; +static char szLogFile[MAXPATHLEN-5]; +static FILE *pLog = NULL; +static char bLogFlag = 1; + +void log_on(void) +{ + bLogFlag = 1; +} + +void log_off(void) +{ + bLogFlag = 0; +} + +void log_exit( void ) +{ + if ( pLog ) + { + log_printf( "Closed logfile (euid = %d.%d)", geteuid(), getegid() ); + fclose( pLog ); + } +} + +void log_path( const char *pszPath ) +{ + strlcpy( szLogPath, pszPath, sizeof(szLogPath) ); +} + +FILE *log_open( const char *pszFile ) +{ + mkdir(szLogPath, 0776); + snprintf(szLogFile, MAXPATHLEN-1, "%s%s.log", szLogPath, pszFile); + + if ( (pLog = fopen( szLogFile, "a" )) ) + { + log_printf( "Opened logfile: %s (uid = %d.%d)", szLogFile, getuid(), getgid() ); + atexit( log_exit ); + } + else + { + perror( szLogFile ); + } + return pLog; +} + +void log_write( const char *msg ) +{ + if ( !pLog || !bLogFlag || !msg || !strlen(msg) ) + return; + + /* time stamp it */ + time_t t = time(NULL); + struct tm *tm = localtime( &t ); + char szBuf[30]; + strftime( szBuf, sizeof(szBuf), "%F %T ", tm ); + + fprintf( pLog, "%s %s\n", szBuf, msg ); + fflush( pLog ); +} + +void log_printf( const char *fmt, ... ) +{ + va_list ap; + if ( !pLog || !bLogFlag || !fmt ) + return; + + /* time stamp it */ + time_t t = time(NULL); + struct tm *tm = localtime( &t ); + char szBuf[30]; + strftime( szBuf, sizeof(szBuf), "%F %T ", tm ); + fprintf( pLog, "%s", szBuf ); + + va_start( ap, fmt ); + vfprintf( pLog, fmt, ap ); + va_end( ap ); + fputs( "\n", pLog ); + fflush( pLog ); +} + +void log_error( const char *msg ) +{ + perror(msg); + log_printf( "%s (%s)", msg, strerror(errno) ); +} diff --git a/src/libnet/mac_address.c b/src/libnet/mac_address.c new file mode 100644 index 0000000..161e65f --- /dev/null +++ b/src/libnet/mac_address.c @@ -0,0 +1,75 @@ +// +// IP getmacaddr +// + +#include "strlib.h" +#include "netlib.h" +#include +#include + +int mac_interface2macaddr( const char *name, unsigned char *mac ) +{ + int i; + + if ( !name ) + name = "eth0"; + + // MAC address (should be temporary) + int fd; + + if ( (fd = socket(AF_INET6, SOCK_DGRAM, 0)) ) + { + struct ifreq ifr; + bzero(&ifr, sizeof(ifr)); + ifr.ifr_addr.sa_family = AF_INET6; + strncpy(ifr.ifr_name, name, IFNAMSIZ-1); + + if ( ioctl(fd, SIOCGIFHWADDR, &ifr) == 0 ) + { + for ( i=0 ; i<6 ; i++ ) + *mac++ = ifr.ifr_hwaddr.sa_data[i]; + close(fd); + return 0; + } + + close(fd); + } + return -1; +} + +int mac_string2mac( const char *str, unsigned char *mac ) +{ + // exact 00:00:00:00:00:00 string + char buf[25]; + bzero(buf, sizeof(buf)); + strncpy(buf, str, sizeof(buf)-1); + + char *s, *t; + t = strtok_r(buf, ":", &s); + int n = 0; + + while ( t ) + { + // decode + char *e; + *mac++ = (unsigned char) strtol( t, &e, 16 ); + n++; + + // invalid decode + if ( *e ) + return 0; + + t = strtok_r(NULL, ":", &s); + } + + if ( n == 6 ) + return 1; + return 0; +} + +int mac_mac2string( const unsigned char *mac, char *str ) +{ + // exact 00:00:00:00:00:00 string + return sprintf( str, "%02x:%02x:%02x:%02x:%02x:%02x", + *mac, *(mac+1), *(mac+2), *(mac+3), *(mac+4), *(mac+5) ); +} diff --git a/src/libnet/mem_safe.c b/src/libnet/mem_safe.c new file mode 100644 index 0000000..0784b02 --- /dev/null +++ b/src/libnet/mem_safe.c @@ -0,0 +1,16 @@ +#include "memlib.h" + +inline void memcpy_s(void *dest, size_t max, const void *src, size_t count) +{ + if (count > max) + count = max; + memcpy(dest, src, count); +} + +inline void memmove_s(void *dest, size_t max, const void *src, size_t count) +{ + if (count > max) + count = max; + memmove(dest, src, count); +} + diff --git a/src/libnet/memlib.h b/src/libnet/memlib.h new file mode 100644 index 0000000..3fff148 --- /dev/null +++ b/src/libnet/memlib.h @@ -0,0 +1,39 @@ +#ifndef __MEMLIB_INCLUDE__ +#define __MEMLIB_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include + +//#pragma deprecated (memcpy, memmove) + +/****************************************************************************** + * defines + *****************************************************************************/ + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void memcpy_s(void *dest, size_t max, const void *src, size_t count); +void memmove_s(void *dest, size_t max, const void *src, size_t count); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/src/libnet/msleep.c b/src/libnet/msleep.c new file mode 100644 index 0000000..ed7a2ab --- /dev/null +++ b/src/libnet/msleep.c @@ -0,0 +1,17 @@ +#include +#include +#include + + +int msleep(unsigned long msec) +{ + struct timespec req={0}; + time_t sec=(int)(msec/1000); + msec=msec-(sec*1000); + req.tv_sec=sec; + req.tv_nsec=msec*1000000L; + while(nanosleep(&req,&req)==-1) + continue; + return 1; +} + diff --git a/src/libnet/netlib.h b/src/libnet/netlib.h new file mode 100644 index 0000000..de60d21 --- /dev/null +++ b/src/libnet/netlib.h @@ -0,0 +1,140 @@ +#ifndef __NETLIB_INCLUDE__ +#define __NETLIB_INCLUDE__ + +/****************************************************************************** +* includes +*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "strlib.h" + +/****************************************************************************** +* defines +*****************************************************************************/ + +#define VAR_LOG_RUN_NAME "cnomicon" + +/****************************************************************************** +* structs & typedefs +*****************************************************************************/ + +typedef struct _uri_parts { + char proto[8]; + char user[16]; + char pass[16]; + char host[256]; + char port[16]; + char path[1204]; + int rate; +} uri_parts; + +/****************************************************************************** +* function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* File */ +int fd_add( int sock, fd_set *pfds, int nfds ); +int fd_count( fd_set *pfds ); +int selector( int *nfds, fd_set *rfds, fd_set *wfds, long usec ); + +/* Runtime */ +void log_path( const char * ); +FILE *log_open( const char * ); +void log_write( const char * ); +void log_printf( const char *, ... ); +void log_error( const char * ); +void log_on(void); +void log_off(void); +void pid_path( const char * ); +int pid_create( const char * ); +void pid_delete( void ); + +/* Serial I/O */ +int serial_open( char *tty, int baud, int vmin, int vwait ); + +/* Signals */ +int sigrt_alloc(void); +void sigrt_free(int sig); + +/* TCP/IP Basics */ +int ip_host2addr( const char *host, const char *service, struct sockaddr_storage *ss, socklen_t *len ); +const char *ip_host2name( char *buf, int max, const struct sockaddr_storage *ss); +int ip_name2host( const char *buf, struct sockaddr_storage *ss); +int ip_service2port( const char *service, int port, const char *proto ); +int ip_sockname( int sock, struct sockaddr_storage *ss ); + +/* MAC Address */ +int mac_interface2macaddr( const char *, unsigned char * ); +int mac_string2mac( const char *str, unsigned char *mac ); +int mac_mac2string( const unsigned char *mac, char *str ); + +/* TCP Server */ +int tcp_server( const char *host, const char *service ); +int tcp_accept( int sock, struct sockaddr_storage *ss ); + +/* TCP Client */ +int tcp_client( const char *host, const char *service ); +int tcp_nagle( int sock, int flag ); + +/* TCP I/O */ +int tcp_recv( int sock, void *buf, int len ); +int tcp_send( int sock, const char *buf, int len ); +int tcp_sendstr( int sock, const char *str ); + +/* UDP Server */ +int udp_server( const char *host, const char *service ); +int udp_client( const char *host, const char *service ); +int udp_socket( const char *host, const char *service ); + +/* UDP Broadcast */ +int udp_broadcast( const char *host, const char *service, struct sockaddr_storage *, socklen_t *); +int udp_multicast( const char *host, const char *service, struct sockaddr_storage *, socklen_t *); +int udp_listener( const char *host, const char *service ); + +/* UDP I/O */ +int udp_recvfrom( int sock, void *buf, int n, struct sockaddr_storage *, socklen_t *len ); +int udp_sendto( int sock, const char *buf, int n, const struct sockaddr_storage *, int len ); +int udp_sendstr( int sock, const char *buf, const struct sockaddr_storage *, int len ); + +/* Unix Domain Socket (UDS) */ +int uds_client( const char *file ); +int uds_server( const char *file ); + +/* URI */ +void uri_clear( uri_parts *parsed ); +void uri_defaults( uri_parts *parsed ); +int uri_parse( const char *uri, uri_parts *parsed ); + +/* misc */ +int msleep(unsigned long msec); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** +* Macros +* ***************************************************************************/ + +// connected udp socket +#define udp_send(S,B,L) tcp_send(S,B,L) +#define uds_recv(S,B,L) tcp_recv(S,B,L) +#define uds_send(S,B,L) tcp_send(S,B,L) + +#endif diff --git a/src/libnet/pid_file.c b/src/libnet/pid_file.c new file mode 100644 index 0000000..450d3d0 --- /dev/null +++ b/src/libnet/pid_file.c @@ -0,0 +1,43 @@ +// +// Pid file +// + +#include "netlib.h" +#include "strlib.h" +#include +#include + +static char szPidPath[MAXPATHLEN-5] = "/var/run/" VAR_LOG_RUN_NAME "/"; +static char szPidFile[MAXPATHLEN-5] = "/tmp/not-a-file"; + +void pid_path( const char *pszPath ) +{ + strlcpy( szPidPath, pszPath, sizeof(szPidPath) ); +} + +void pid_delete( void ) +{ + unlink( szPidFile ); +} + +int pid_create( const char *pszFile ) +{ + FILE *pPid; + + mkdir(szPidPath, 0776); + snprintf(szPidFile, MAXPATHLEN-1, "%s%s.pid", szPidPath, pszFile); + + if ( (pPid = fopen( szPidFile, "w" )) ) + { + fprintf( pPid, "%d", getpid() ); + fclose( pPid ); + + atexit( pid_delete ); + return 1; + } + else + { + perror( szPidFile ); + } + return 0; +} diff --git a/src/libnet/sig_rt.c b/src/libnet/sig_rt.c new file mode 100644 index 0000000..46f38f3 --- /dev/null +++ b/src/libnet/sig_rt.c @@ -0,0 +1,51 @@ +// +// signal table +// + +#include + +static unsigned char s_init = 0; +static unsigned char signal_list[32] = {0}; + +static void sigrt_init(void) +{ + int i; + + for ( i=0 ; i SIGRTMAX ) + return; + + if ( signal_list[sig-SIGRTMIN-1] == 0 ) + signal_list[sig-SIGRTMIN-1] = sig; +} diff --git a/src/libnet/strlcat.c b/src/libnet/strlcat.c new file mode 100644 index 0000000..bdfd413 --- /dev/null +++ b/src/libnet/strlcat.c @@ -0,0 +1,40 @@ +#include "strlib.h" + +/* + * * Appends src to string dst of size siz (unlike strncat, siz is the + * * full size of dst, not space left). At most siz-1 characters + * * will be copied. Always NUL terminates (unless siz <= strlen(dst)). + * * Returns strlen(src) + MIN(siz, strlen(initial dst)). + * * If retval >= siz, truncation occurred. + * */ +size_t +strlcat(dst, src, siz) +char *dst; +const char *src; +size_t siz; +{ + register char *d = dst; + register const char *s = src; + register size_t n = siz; + size_t dlen; + + /* Find the end of dst and adjust bytes left but don't go past end */ + while (n-- != 0 && *d != '\0') + d++; + dlen = d - dst; + n = siz - dlen; + + if (n == 0) + return(dlen + strlen(s)); + while (*s != '\0') { + if (n != 1) { + *d++ = *s; + n--; + } + s++; + } + *d = '\0'; + + return(dlen + (s - src)); /* count does not include NUL */ +} + diff --git a/src/libnet/strlcpy.c b/src/libnet/strlcpy.c new file mode 100644 index 0000000..f0c7635 --- /dev/null +++ b/src/libnet/strlcpy.c @@ -0,0 +1,33 @@ +#include "strlib.h" + +/* + * * Copy src to string dst of size siz. At most siz-1 characters + * * will be copied. Always NUL terminates (unless siz == 0). + * * Returns strlen(src); if retval >= siz, truncation occurred. + * */ +size_t +strlcpy(char *dst, const char *src, size_t siz) +{ + char *d = dst; + const char *s = src; + size_t n = siz; + + /* Copy as many bytes as will fit */ + if (n != 0) { + while (--n != 0) { + if ((*d++ = *s++) == '\0') + break; + } + } + + /* Not enough room in dst, add NUL and traverse rest of src */ + if (n == 0) { + if (siz != 0) + *d = '\0'; /* NUL-terminate dst */ + while (*s++) + ; + } + + return(s - src - 1); /* count does not include NUL */ +} + diff --git a/src/libnet/strlib.h b/src/libnet/strlib.h new file mode 100644 index 0000000..cccadbc --- /dev/null +++ b/src/libnet/strlib.h @@ -0,0 +1,40 @@ +#ifndef __STRLIB_INCLUDE__ +#define __STRLIB_INCLUDE__ + +/****************************************************************************** + * includes + *****************************************************************************/ + +#include +#include +#include + +//#pragma deprecated (strcpy, strcat) + +/****************************************************************************** + * defines + *****************************************************************************/ + +/****************************************************************************** + * structs & typedefs + *****************************************************************************/ + +/****************************************************************************** + * function prototypes + *****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +size_t strlcat(char *dst, const char *src, size_t siz); +size_t strlcpy(char *dst, const char *src, size_t siz); + +#ifdef __cplusplus +} +#endif +/****************************************************************************** + * Macros + * ***************************************************************************/ + +#endif diff --git a/src/libnet/tcp_accept.c b/src/libnet/tcp_accept.c new file mode 100644 index 0000000..722368f --- /dev/null +++ b/src/libnet/tcp_accept.c @@ -0,0 +1,46 @@ +// +// TCP Accept +// + +#include "netlib.h" +#include "strlib.h" + +int tcp_accept( int sock, struct sockaddr_storage *sa ) +{ + /* storage? */ + struct sockaddr_storage ss; + if ( !sa ) + sa = &ss; + + /* tcp request */ + socklen_t len = sizeof(struct sockaddr_storage); + + /* accept the incoming connection */ + int cs = accept(sock, (struct sockaddr *)sa, &len ); + + /* check for errors. if any, ignore new connection */ + if (cs < 0 ) + { + log_error("tcp_accept"); + return -1; + } + + /* turn off nagle, writes are shipped immediately */ + int flag = 1; + setsockopt( cs, /* socket affected */ + IPPROTO_TCP, /* set option at TCP level */ + TCP_NODELAY, /* name of option */ + (char *) &flag, /* the cast is historical cruft */ + sizeof(int)); /* length of option value */ + + /* log new client */ + if ( cs > 0 ) + { + char szBuf[256]; + ip_host2name( szBuf, sizeof(szBuf), sa ); + strlcat( szBuf, " client connected", sizeof(szBuf) ); + log_write( szBuf ); + } + + return cs; +} diff --git a/src/libnet/tcp_client.c b/src/libnet/tcp_client.c new file mode 100644 index 0000000..d7767e9 --- /dev/null +++ b/src/libnet/tcp_client.c @@ -0,0 +1,36 @@ +// +// TCP Client Connect +// + +#include "netlib.h" + +int tcp_client( const char *host, const char *service ) +{ + int sock, family; + struct sockaddr_storage sa; + socklen_t len = sizeof(sa); + + /* default IPv6 localhost */ + if ( !host || !strlen(host) ) + host = "ip6-localhost"; + + /* lookup */ + family = ip_host2addr( host, service, &sa, &len ); + + /* socket */ + sock = socket(family, SOCK_STREAM, 0); + if (sock < 0) + { + log_error( "socket" ); + return -1; + } + + /* connect */ + if ( connect(sock, (struct sockaddr *)&sa, len) != 0 ) + { + close(sock); + log_error( "connect" ); + return -1; + } + return sock; +} diff --git a/src/libnet/tcp_nagle.c b/src/libnet/tcp_nagle.c new file mode 100644 index 0000000..664599e --- /dev/null +++ b/src/libnet/tcp_nagle.c @@ -0,0 +1,16 @@ +// +// TCP Nagle'ing +// + +#include "netlib.h" + +int tcp_nagle( int sock, int flag ) +{ + /* turn off nagle, writes are shipped immediately */ + flag = flag ? 0 : 1; + return setsockopt( sock, /* socket affected */ + IPPROTO_TCP, /* set option at TCP level */ + TCP_NODELAY, /* name of option */ + (char *) &flag, /* the cast is historical cruft */ + sizeof(int)); /* length of option value */ +} diff --git a/src/libnet/tcp_recv.c b/src/libnet/tcp_recv.c new file mode 100644 index 0000000..6df8cb2 --- /dev/null +++ b/src/libnet/tcp_recv.c @@ -0,0 +1,25 @@ +// +// TCP recv +// + +#include "netlib.h" + +int tcp_recv( int sock, void *buf, int len ) +{ + char *s = (char *)buf; + size_t n; + + /* check! */ + if ( sock < 0 ) + return -1; + if ( !buf || len <= 0 ) + return -1; + + /* read */ + n = recv( sock, buf, len, 0 ); + + if ( n > 0 ) + *(s+n) = '\0'; + + return n; +} diff --git a/src/libnet/tcp_send.c b/src/libnet/tcp_send.c new file mode 100644 index 0000000..78572cc --- /dev/null +++ b/src/libnet/tcp_send.c @@ -0,0 +1,35 @@ +// +// TCP send +// + +#include "netlib.h" + +int tcp_send( int sock, const char *buf, int len ) +{ + int total = 0; + int n = 0; + + /* check! */ + if ( sock < 0 ) + return -1; + if ( !buf || len <= 0 ) + return -1; + + /* send it all */ + while ( total < len ) + { + int n = send( sock, buf, len, 0 ); + if ( n == -1 ) + break; + buf += n; + total += n; + len -= n; + } + + return n==-1 ? -1 : total; +} + +int tcp_sendstr( int sock, const char *str ) +{ + return tcp_send( sock, str, strlen(str) ); +} diff --git a/src/libnet/tcp_server.c b/src/libnet/tcp_server.c new file mode 100644 index 0000000..44b8707 --- /dev/null +++ b/src/libnet/tcp_server.c @@ -0,0 +1,72 @@ +// +// TCP Server +// + +#include "netlib.h" + +int tcp_server( const char *host, const char *service ) +{ + int i; + + /* socket stuff */ + int sock; /* tcp socket */ + + /* dual stack listener */ + struct addrinfo hints; + struct addrinfo *res, *ressave; + + /* set-up hints structure */ + bzero(&hints, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_flags = AI_PASSIVE; + hints.ai_socktype = SOCK_STREAM; + if ( getaddrinfo(host, service, &hints, &res) ) + { + log_error("getaddrinfo"); + return -1; + } + ressave = res; + + /* + * "res" has a chain of addrinfo structure filled with + * 0.0.0.0 (for IPv4), 0:0:0:0:0:0:0:0 (for IPv6) and alike, + * with port filled for "myservice". + */ + while (res) + { + /* bind() and listen() to res->ai_addr */ + sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol ); + if ( sock < 0 ) + continue; + + /* reuse socket */ + i = 1; + setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i) ); + + /* bind */ + if ( bind(sock, res->ai_addr, res->ai_addrlen) == 0 ) + break; // success + + /* error, try again */ + close( sock ); + res = res->ai_next; + } + + freeaddrinfo( ressave ); + + /* able to bind? */ + if ( !res ) + { + log_error("tcp_server"); + return -1; + } + + /* listen, queue up to 10 pending connections */ + if ( listen(sock, 10) ) + { + log_error("tcp_listen"); + return -1; + } + + return sock; +} diff --git a/src/libnet/udp_broadcast.c b/src/libnet/udp_broadcast.c new file mode 100644 index 0000000..fb15494 --- /dev/null +++ b/src/libnet/udp_broadcast.c @@ -0,0 +1,40 @@ +// +// Neal Probert +// + +#include "netlib.h" + +int udp_broadcast( const char *host, const char *service, struct sockaddr_storage *sa, socklen_t *len ) +{ + /* socket stuff */ + int sock, family; /* tcp socket */ + + if ( !host ) + host = "255.255.255.255"; + + // host + family = ip_host2addr( host, service, sa, len ); + + if ( family != AF_INET ) + { + log_error(host); + return -1; + } + + /* plug me into a socket */ + if ( (sock = socket( family, SOCK_DGRAM, 0)) < 0 ) + { + log_error("dgram_socket"); + return -1; + } + + // ipv4 uses classic broadcast + u_int i = 1; + if ( setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &i, sizeof(i)) != 0 ) + { + log_error("so_broadcast"); + return -1; + } + + return sock; +} diff --git a/src/libnet/udp_client.c b/src/libnet/udp_client.c new file mode 100644 index 0000000..3a3d65c --- /dev/null +++ b/src/libnet/udp_client.c @@ -0,0 +1,51 @@ +// +// UDP Client Connect +// + +#include "netlib.h" + +int udp_client( const char *host, const char *service ) +{ + int sock; /* tcp socket */ + struct addrinfo hints, *res, *ressave; + + /* default IPv6 localhost */ + if ( !host || !strlen(host) ) + host = "ip6-localhost"; + + /* get address information */ + bzero(&hints, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_DGRAM; + if ( getaddrinfo(host, service, &hints, &res) ) + { + log_error("getaddrinfo"); + return -1; + } + ressave = res; + + while (res) + { + sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + if (sock < 0) + continue; // ignore + + // connected (allows send()/write() to be used) + if ( connect(sock, res->ai_addr, res->ai_addrlen) == 0 ) + break; // success + + // next + close(sock); + res = res->ai_next; + } + + if ( !res ) + { + log_error("udp_client"); + return -1; + } + + freeaddrinfo(ressave); + + return sock; +} diff --git a/src/libnet/udp_listener.c b/src/libnet/udp_listener.c new file mode 100644 index 0000000..cfb4491 --- /dev/null +++ b/src/libnet/udp_listener.c @@ -0,0 +1,105 @@ +// +// UDP Client Connect +// + +#include "netlib.h" + +int udp_listener( const char *host, const char *service ) +{ + int sock; /* tcp socket */ + struct sockaddr_storage ss; + int bcast = 0; + + // default host? + if ( !host ) + host = "0.0.0.0"; // INADDR_ANY + + /* clear and initialize address structure */ + socklen_t sa_len; + int family = ip_host2addr( host, service, (struct sockaddr_storage *)&ss, &sa_len ); + + if ( family < 0 ) + return -1; + + // check if multicast + if ( family == AF_INET6 ) + { + struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)&ss; + + if ( !IN6_IS_ADDR_MULTICAST( sa6->sin6_addr.s6_addr ) ) + { + log_error(host); + return -1; + } + + // bind to any + sa6->sin6_addr = in6addr_any; + } + else if ( family == AF_INET ) + { + struct sockaddr_in *sa = (struct sockaddr_in *)&ss; + + // broadcast listener? + if ( sa->sin_addr.s_addr == INADDR_ANY || + sa->sin_addr.s_addr == INADDR_LOOPBACK ) + { + bcast = 1; + } + else if ( IN_MULTICAST( sa->sin_addr.s_addr ) ) + { + log_error("multicast"); + return -1; + } + + // bind to any + sa->sin_addr.s_addr = INADDR_ANY; + } + + /* plug me into a socket */ + if ( (sock = socket(family, SOCK_DGRAM, 0)) < 0 ) + { + log_error("dgram_socket"); + return -1; + } + + /* reuse socket */ + int i = 1; + if ( setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i)) == 1 ) + { + log_error("so_reuseaddr"); + close(sock); + return -1; + } + + /* bind (any) */ + if ( bind(sock, (struct sockaddr *)&ss, sa_len ) < 0 ) + { + log_error( "udp_bind" ); + return -1; + } + + // IPv4 broadcast + if ( bcast ) + return sock; + + // Multicast + int level = (family == AF_INET6) ? IPPROTO_IPV6 : IPPROTO_IP; + + // join multi-cast group + struct group_req req; + req.gr_interface = 0; // kernel selects interface + req.gr_group = ss; + + // join + if ( family == AF_INET6 ) + { + if ( setsockopt(sock, level, MCAST_JOIN_GROUP, &req, sizeof(req) ) != 0 ) + { + log_error( "ipv6_join_group" ); + close( sock ); + return -1; + } + } + + return sock; +} diff --git a/src/libnet/udp_multicast.c b/src/libnet/udp_multicast.c new file mode 100644 index 0000000..f7dedd8 --- /dev/null +++ b/src/libnet/udp_multicast.c @@ -0,0 +1,67 @@ +// +// Neal Probert +// + +#include "netlib.h" + +int udp_multicast( const char *host, const char *service, struct sockaddr_storage *sa, socklen_t *len ) +{ + // socket stuff + int sock; /* tcp socket */ + + // address for link-local multi-cast + int family = ip_host2addr( host, service, sa, len ); + if ( family < 0 ) + return -1; + + // plug me into a socket + if ( (sock = socket( family, SOCK_DGRAM, 0)) < 0 ) + { + log_error("dgram_socket"); + return -1; + } + + int level = (family == AF_INET6) ? IPPROTO_IPV6 : IPPROTO_IP; + + // The Stevens book doesn't do the join source group + + // broadcast on this socket + if ( family == AF_INET6 ) + { + // no local echo + u_int flag = 0; + if ( setsockopt(sock, level, IPV6_MULTICAST_LOOP, &flag, sizeof(flag) ) != 0 ) + { + log_error( "mcast_multicast_loop" ); + return -1; + } + + // 1 hop + flag = 1; + if ( setsockopt(sock, level, IPV6_MULTICAST_HOPS, &flag, sizeof(flag) ) != 0 ) + { + log_error( "mcast_multicast_hops" ); + // return -1; + } + } + else + { + // no local echo + u_char flag = 0; + if ( setsockopt(sock, level, IP_MULTICAST_LOOP, &flag, sizeof(flag) ) != 0 ) + { + log_error( "mcast_multicast_loop" ); + return -1; + } + + // 1 hop + flag = 1; + if ( setsockopt(sock, level, IP_MULTICAST_TTL, &flag, sizeof(flag) ) != 0 ) + { + log_error( "mcast_multicast_hops" ); + // return -1; + } + } + + return sock; +} diff --git a/src/libnet/udp_recvfrom.c b/src/libnet/udp_recvfrom.c new file mode 100644 index 0000000..90fa21b --- /dev/null +++ b/src/libnet/udp_recvfrom.c @@ -0,0 +1,35 @@ +// +// UDP recvfrom +// + +#include "netlib.h" + +int udp_recvfrom( int sock, void *buf, int max, struct sockaddr_storage *sa, socklen_t *len ) +{ + struct sockaddr_storage ss; + socklen_t num; + char *s = (char *)buf; + int n; + + /* check! */ + if ( sock < 0 ) + return -1; + if ( !buf || max <= 0 ) + return -1; + + /* sender */ + if ( !sa ) + sa = &ss; + if ( !len ) { + len = # + num = sizeof(ss); + } + + /* read */ + n = recvfrom( sock, buf, max, 0, (struct sockaddr *)sa, len ); + + if ( n > 0 && n<(max-1) ) + *(s+n) = '\0'; + + return n; +} diff --git a/src/libnet/udp_sendmcast.c b/src/libnet/udp_sendmcast.c new file mode 100644 index 0000000..0c5e5db --- /dev/null +++ b/src/libnet/udp_sendmcast.c @@ -0,0 +1,41 @@ +// +// Neal Probert +// + +#include "netlib.h" + +int udp_sendbcast( int sock, int port, char *buf, int len, const struct sockaddr_storage *sa ) +{ + struct sockaddr_storage ss; + + if ( !sa ) + { + bzero( &ss, sizeof(ss) ); + sa = &ss; + } + + if ( !sa->ss_family ) + { + socklen_t l = sizeof(struct sockaddr_storage); + + /* address info */ + if ( getsockname( sock, (struct sockaddr *)&ss, &l ) < 0 ) + return -1; + + // bcast address + if ( ss.ss_family == AF_INET6 ) + { + // ipv6 link local multicast (all-hosts with hop count of 1) + } + else + { + struct sockaddr_in *sa4 = (struct sockaddr_in *)&ss; + sa4->sin_port = port; + + // TBD address and netmask + sa4->sin_addr.s_addr = htonl( 0xC0A8FFFF ); // 192.168.255.255 + } + } + + return sendto( sock, buf, len, MSG_DONTROUTE, (const struct sockaddr *)sa, (socklen_t)sizeof(sockaddr_storage) ); +} diff --git a/src/libnet/udp_sendto.c b/src/libnet/udp_sendto.c new file mode 100644 index 0000000..974417b --- /dev/null +++ b/src/libnet/udp_sendto.c @@ -0,0 +1,16 @@ +// +// UDP send +// + +#include "netlib.h" + +int udp_sendto( int sock, const char *buf, int len, const struct sockaddr_storage *sa, int salen ) +{ + /* check! */ + if ( sock < 0 ) + return -1; + if ( !buf || len <= 0 ) + return -1; + + return sendto( sock, buf, len, MSG_DONTROUTE, (struct sockaddr *)sa, salen ); +} diff --git a/src/libnet/udp_server.c b/src/libnet/udp_server.c new file mode 100644 index 0000000..dd032e2 --- /dev/null +++ b/src/libnet/udp_server.c @@ -0,0 +1,59 @@ +// +// UDP Server +// + +#include "netlib.h" + +int udp_server( const char *host, const char *service ) +{ + /* socket stuff */ + int sock; /* tcp socket */ + + /* dual stack listener */ + struct addrinfo hints; + struct addrinfo *res, *ressave; + + /* set-up hints structure */ + bzero(&hints, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_flags = AI_PASSIVE; + hints.ai_socktype = SOCK_DGRAM; + if ( getaddrinfo(host, service, &hints, &res) ) + { + log_error( "getaddrinfo" ); + return -1; + } + ressave = res; + + /* + * "res" has a chain of addrinfo structure filled with + * 0.0.0.0 (for IPv4), 0:0:0:0:0:0:0:0 (for IPv6) and alike, + * with port filled for "myservice". + */ + while (res) + { + /* bind() and listen() to res->ai_addr */ + sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol ); + if ( sock < 0 ) + continue; + + /* bind */ + if ( bind(sock, res->ai_addr, res->ai_addrlen) == 0 ) + break; // success + + /* error, try again */ + close( sock ); + res = res->ai_next; + } + + freeaddrinfo( ressave ); + + /* able to bind? */ + if ( !res ) + { + log_error( "server" ); + return -1; + } + + return sock; +} diff --git a/src/libnet/udp_socket.c b/src/libnet/udp_socket.c new file mode 100644 index 0000000..5d4bebd --- /dev/null +++ b/src/libnet/udp_socket.c @@ -0,0 +1,47 @@ +// +// UDP Client Socket +// + +#include "netlib.h" + +int udp_socket(const char *host, const char *service) +{ + int sock; /* tcp socket */ + struct addrinfo hints, *res, *ressave; + + /* default IPv6 localhost */ + if ( !host || !strlen(host) ) + host = "ip6-localhost"; + + /* get address information */ + bzero(&hints, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_DGRAM; + if ( getaddrinfo(NULL, service, &hints, &res) ) + { + log_error("getaddrinfo"); + return -1; + } + ressave = res; + + while (res) + { + sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + if (sock >= 0) + break; + + // next + close(sock); + res = res->ai_next; + } + + if ( !res ) + { + log_error("udp_socket"); + return -1; + } + + freeaddrinfo(ressave); + + return sock; +} diff --git a/src/libnet/uds_client.c b/src/libnet/uds_client.c new file mode 100644 index 0000000..32491a2 --- /dev/null +++ b/src/libnet/uds_client.c @@ -0,0 +1,26 @@ +// +// TCP Client Connect +// + +#include "netlib.h" +#include + +int uds_client( const char *file ) +{ + int s, len; + struct sockaddr_un remote; + + if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { + log_error("uds_client"); + return -1; + } + + remote.sun_family = AF_UNIX; + strcpy(remote.sun_path, file); + len = strlen(remote.sun_path) + sizeof(remote.sun_family); + if (connect(s, (struct sockaddr *)&remote, len) == -1) { + log_error("uds_client"); + return -1; + } + return s; +} diff --git a/src/libnet/uds_server.c b/src/libnet/uds_server.c new file mode 100644 index 0000000..6aa9c22 --- /dev/null +++ b/src/libnet/uds_server.c @@ -0,0 +1,48 @@ +// +// Unix Domain Socket (UDS) Server +// + +#include "netlib.h" +#include + +int uds_server( const char *file ) +{ + unsigned int s; + struct sockaddr_un local; + int len; + + // socket + s = socket(AF_UNIX, SOCK_STREAM, 0); + if (s < 0) + { + log_error("uds_server"); + return -1; + } + + // bind + local.sun_family = AF_UNIX; /* local is declared before socket() ^ */ + strcpy(local.sun_path, file); + unlink(local.sun_path); + len = strlen(local.sun_path) + sizeof(local.sun_family); + if (bind(s, (struct sockaddr *)&local, len) < 0) { + close(s); + log_error("uds_server"); + return -1; + } + + // listen + if (listen(s, 10) < 0) { + close(s); + log_error("uds_server"); + } + + return s; +} + +int uds_accept( const int s ) +{ + struct sockaddr_un remote; + socklen_t len = sizeof(struct sockaddr_un); + int s2 = accept(s, (struct sockaddr *)&remote, &len); + return s2; +} diff --git a/src/libnet/uri_parse.c b/src/libnet/uri_parse.c new file mode 100644 index 0000000..db5a980 --- /dev/null +++ b/src/libnet/uri_parse.c @@ -0,0 +1,160 @@ +// +// IP gethostname +// + +#include "netlib.h" +#include "strlib.h" + +void uri_clear( uri_parts *parsed ) +{ + bzero( parsed, sizeof(uri_parts) ); +} + +void uri_defaults( uri_parts *parsed ) +{ + bzero( parsed, sizeof(uri_parts) ); + strcpy( parsed->proto, "http" ); + strcpy( parsed->host, "localhost" ); + strcpy( parsed->port, "80" ); + strcpy( parsed->path, "/" ); +} + +int uri_parse( const char *uri, uri_parts *parsed ) +{ + char buf[4096]; + char *proto = NULL, *host = NULL, *port = NULL; + char *user = NULL, *pass = NULL, *path = NULL; + char *s; + int ret = 0; + + // output + if ( !parsed ) + return 0; + + // buffer + strlcpy( buf, uri, sizeof(buf) ); + + // proto://user:pass@host:port/path + s = buf; + + // proto + if ( isalpha(*s) ) + { + s = strchr( buf, ':' ); + + if ( s ) + { + proto = buf; + *s++ = '\0'; + ret++; + } + else + s = buf; + } + + // absolute path + if ( strncmp( s, "///", 3 ) == 0 ) + { + // skip over + s += 2; + + // file path + path = s++; + + ret++; + } + else if ( strncmp( s, "//", 2 ) == 0 ) + { + // skip over + s += 2; + + // path + if ( (path = strchr( s, '/' )) ) + { + *path++ = '\0'; + strlcpy( parsed->path, "/", sizeof(parsed->path) ); + ret++; + } + + // user:pass, host + if ( (host = strchr( s, '@' )) ) + { + // user + user = s; + *host++ = '\0'; + ret++; + + // pass + pass = strchr( user, ':' ); + if ( pass ) + { + *pass++ = '\0'; + ret++; + } + } + else + host = s; + + // host:port + if ( strlen( host ) ) + { + ret++; + port = strchr( host, ':' ); + if ( port ) + { + *port++ = '\0'; + ret++; + } + } + parsed->rate = 0; + } + else if ( *s == '/' ) + { + // file path + path = s; + + // the case of /dev/ttyS0:baud + if ( (s = strchr( path, ':' )) ) + { + *s++ = '\0'; + parsed->rate = atoi( s ); + ret++; + } + ret++; + } + else + { + // hostname + host = s; + + if ( (s = strchr( host, ':' )) ) + { + *s++ = '\0'; + port = s; + ret++; + } + ret++; + } + + // copy + if ( proto ) + { + strncpy( parsed->proto, proto, sizeof(parsed->proto) ); + } + if ( user ) + { + strncpy( parsed->user, user, sizeof(parsed->user) ); + if ( pass ) + strncpy( parsed->pass, pass, sizeof(parsed->pass) ); + } + if ( host ) + { + strncpy( parsed->host, host, sizeof(parsed->host) ); + if ( port ) + strncpy( parsed->port, port, sizeof(parsed->port) ); + } + if ( path ) + strncat( parsed->path, path, sizeof(parsed->path) ); + + return ret; +} diff --git a/src/libnet/uritest.c b/src/libnet/uritest.c new file mode 100644 index 0000000..63eb055 --- /dev/null +++ b/src/libnet/uritest.c @@ -0,0 +1,27 @@ +#include + +#include "netlib.h" + +int main( int argc, char *argv[] ) +{ + struct uri_parse parsed; + + int i, n; + + for ( i=1 ; i +#include +#include + +#include +#include + +#include "AnalogInputChannel.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +AnalogInputChannel::AnalogInputChannel() +{ +} + +AnalogInputChannel::AnalogInputChannel(const AnalogInputChannel ©) +{ +} + +AnalogInputChannel::~AnalogInputChannel() +{ +} + +AnalogInputChannel& AnalogInputChannel::operator=(const AnalogInputChannel &rhs) +{ + return *this; +} + +double AnalogInputChannel::ReadEu( void ) +{ + long raw; + double data; + raw = ReadRaw(); + Raw2Eu( &raw, &data, 1 ); + return data; +} diff --git a/src/libsig++/AnalogInputChannel.h b/src/libsig++/AnalogInputChannel.h new file mode 100644 index 0000000..7c2e9f3 --- /dev/null +++ b/src/libsig++/AnalogInputChannel.h @@ -0,0 +1,62 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __AnalogInputChannel__ +#define __AnalogInputChannel__ + +/* includes *****************************************************************/ + +#include +#include + +#include "InputChannel.h" +#include "RawType.h" +#include "VoltType.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class AnalogInputChannel : public InputChannel, public VoltType { + // public data +public: + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + AnalogInputChannel(); + AnalogInputChannel(const AnalogInputChannel ©); + + // destructor + virtual ~AnalogInputChannel(); + + // operators + AnalogInputChannel &operator=(const AnalogInputChannel &rhs); + + // public methods + + // virtual functions + virtual double ReadEu( void ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/AnalogOutputChannel.cpp b/src/libsig++/AnalogOutputChannel.cpp new file mode 100644 index 0000000..ea521b6 --- /dev/null +++ b/src/libsig++/AnalogOutputChannel.cpp @@ -0,0 +1,78 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "AnalogOutputChannel.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +AnalogOutputChannel::AnalogOutputChannel() +{ +} + +AnalogOutputChannel::AnalogOutputChannel(const AnalogOutputChannel ©) +{ +} + +AnalogOutputChannel::~AnalogOutputChannel() +{ +} + +AnalogOutputChannel& AnalogOutputChannel::operator=(const AnalogOutputChannel &rhs) +{ + return *this; +} + +void AnalogOutputChannel::WriteEu( double eu ) +{ + long raw; + Eu2Raw( &eu, &raw, 1 ); + WriteRaw( raw ); +} diff --git a/src/libsig++/AnalogOutputChannel.h b/src/libsig++/AnalogOutputChannel.h new file mode 100644 index 0000000..abf5133 --- /dev/null +++ b/src/libsig++/AnalogOutputChannel.h @@ -0,0 +1,62 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __AnalogOutputChannel__ +#define __AnalogOutputChannel__ + +/* includes *****************************************************************/ + +#include +#include + +#include "OutputChannel.h" +#include "RawType.h" +#include "VoltType.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class AnalogOutputChannel : public OutputChannel, public VoltType { + // public data +public: + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + AnalogOutputChannel(); + AnalogOutputChannel(const AnalogOutputChannel ©); + + // destructor + virtual ~AnalogOutputChannel(); + + // operators + AnalogOutputChannel &operator=(const AnalogOutputChannel &rhs); + + // public methods + + // virtual functions + virtual void WriteEu( double eu ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/BaseChannel.cpp b/src/libsig++/BaseChannel.cpp new file mode 100644 index 0000000..9bdee4a --- /dev/null +++ b/src/libsig++/BaseChannel.cpp @@ -0,0 +1,77 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "BaseChannel.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +BaseChannel::BaseChannel() +{ + Channel = 0; + Resolution = 0; +} + +BaseChannel::BaseChannel(const BaseChannel ©) +{ + Channel = copy.Channel; + Resolution = copy.Resolution; +} + +BaseChannel::~BaseChannel() +{ +} + +BaseChannel& BaseChannel::operator=(const BaseChannel &rhs) +{ + this->Channel = rhs.Channel; + this->Resolution = rhs.Resolution; + return *this; +} diff --git a/src/libsig++/BaseChannel.h b/src/libsig++/BaseChannel.h new file mode 100644 index 0000000..2f65697 --- /dev/null +++ b/src/libsig++/BaseChannel.h @@ -0,0 +1,70 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __BaseChannel__ +#define __BaseChannel__ + +/* includes *****************************************************************/ + +#include +#include + +#include "Comedi.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class BaseChannel { + // public data +public: + + // protected data +protected: + int Device; + int SubDevice; + int Channel; + int Resolution; // 8, 12, 16, 24, 32 bits + + // private data +private: + + // static data + + // public methods +public: + // constructors + BaseChannel(); + BaseChannel(const BaseChannel ©); + + // destructor + virtual ~BaseChannel(); + + // operators + BaseChannel &operator=(const BaseChannel &rhs); + + // public methods + void SetDevice( int dev, int sub=0, int chan=0 ) {Device=dev;SubDevice=sub;Channel=chan;}; + comedi_t *GetDevice(void) { return Comedi::GetDevice(Device); }; + void SetChannel( int chan ) { Channel = chan; }; + int GetChannel( void ) { return Channel; }; + void SetResolution( int bits ) { Resolution = bits; }; + int GetResolution( void ) { return Resolution; }; + + // virtual functions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/BaseDevice.cpp b/src/libsig++/BaseDevice.cpp new file mode 100644 index 0000000..427652d --- /dev/null +++ b/src/libsig++/BaseDevice.cpp @@ -0,0 +1,62 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "BaseDevice.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +BaseDevice::BaseDevice() +{ +} + +BaseDevice::~BaseDevice() +{ +} diff --git a/src/libsig++/BaseDevice.h b/src/libsig++/BaseDevice.h new file mode 100644 index 0000000..994516e --- /dev/null +++ b/src/libsig++/BaseDevice.h @@ -0,0 +1,54 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __BaseDevice__ +#define __BaseDevice__ + +/* includes *****************************************************************/ + +#include +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class BaseDevice { + // public data +public: + std::string Name; + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + BaseDevice(); + + // destructor + virtual ~BaseDevice(); + + // public methods + + // virtual functions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/BaseSignal.cpp b/src/libsig++/BaseSignal.cpp new file mode 100644 index 0000000..38121ba --- /dev/null +++ b/src/libsig++/BaseSignal.cpp @@ -0,0 +1,75 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "BaseSignal.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +BaseSignal::BaseSignal() +{ +} + +BaseSignal::BaseSignal(const BaseSignal ©) +{ + Name = copy.Name; + Units = copy.Units; +} + +BaseSignal::~BaseSignal() +{ +} + +BaseSignal& BaseSignal::operator=(const BaseSignal &rhs) +{ + this->Name = rhs.Name; + this->Units = rhs.Units; + return *this; +} diff --git a/src/libsig++/BaseSignal.h b/src/libsig++/BaseSignal.h new file mode 100644 index 0000000..fd02834 --- /dev/null +++ b/src/libsig++/BaseSignal.h @@ -0,0 +1,59 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __BaseSignal__ +#define __BaseSignal__ + +/* includes *****************************************************************/ + +#include +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +// based on .dbc data + +/* c class definitions ******************************************************/ + +class BaseSignal { + // public data +public: + std::string Name; // Signal Name + std::string Units; // Signal Units + + // private data +private: + + // static data + + // public methods +public: + // constructors + BaseSignal(); + BaseSignal(const BaseSignal &BaseSignal); + + // destructor + virtual ~BaseSignal(); + + // operators + BaseSignal &operator=(const BaseSignal &rhs); + + // virtual functions + + // public methods + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/BoardDevice.cpp b/src/libsig++/BoardDevice.cpp new file mode 100644 index 0000000..4499e12 --- /dev/null +++ b/src/libsig++/BoardDevice.cpp @@ -0,0 +1,72 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "BoardDevice.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +BoardDevice::BoardDevice() +{ +} + +BoardDevice::BoardDevice( const char *name, comedi_t *it ) +{ + Name = name; + Handle = it; +} + +BoardDevice::~BoardDevice() +{ + AnalogInputs.clear(); + AnalogOutputs.clear(); + DigitalInputs.clear(); + DigitalOutputs.clear(); +} diff --git a/src/libsig++/BoardDevice.h b/src/libsig++/BoardDevice.h new file mode 100644 index 0000000..dfc2781 --- /dev/null +++ b/src/libsig++/BoardDevice.h @@ -0,0 +1,73 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __BoardDevice__ +#define __BoardDevice__ + +/* includes *****************************************************************/ + +#include +#include +#include + +#include "comedilib.hpp" + +#include "BaseDevice.h" +#include "AnalogInputChannel.h" +#include "AnalogOutputChannel.h" +#include "DigitalInputChannel.h" +#include "DigitalOutputChannel.h" +#include "DigitalInOutChannel.h" +//#include "CounterChannel.h" +//#include "TimerChannel.h" +//#include "PWMChannel.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class BoardDevice : public BaseDevice { + // public data +public: + std::vector AnalogInputs; + std::vector AnalogOutputs; + std::vector DigitalInputs; + std::vector DigitalOutputs; + std::vector DigitalInOuts; + + // protected data + + // private data +private: + comedi_t *Handle; + + // static data + + // public methods +public: + // constructors + BoardDevice(); + BoardDevice( const char *name, comedi_t *it ); + + // destructor + virtual ~BoardDevice(); + + // public methods + + // virtual functions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/Comedi.cpp b/src/libsig++/Comedi.cpp new file mode 100644 index 0000000..a6bfcaa --- /dev/null +++ b/src/libsig++/Comedi.cpp @@ -0,0 +1,178 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "Comedi.h" +using namespace comedi; + +#include "BoardDevice.h" + +#include "netlib.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +static int ndevices = 0; +static comedi_t *devices[COMEDI_NDEVICES] = { NULL }; + +BoardDevice *Devices[COMEDI_NDEVICES] = { NULL }; + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +Comedi::Comedi() +{ + log_printf( "Comedi: Initializing" ); + + // poll for devices + for ( int i=0 ; i> 16)&0xff, (vers >> 8)&0xff, vers&0xff, num ); + + // instantiate class + BoardDevice *dev = new BoardDevice( name, it ); + Devices[i] = dev; + + AnalogInputChannel ad; + AnalogOutputChannel da; + DigitalInputChannel di; + DigitalOutputChannel doh; + DigitalInOutChannel dio; + + // log devices and subdevice info + for ( unsigned int j=0 ; jAnalogInputs.push_back( ad ); + break; + case COMEDI_SUBD_AO: /* analog output */ + da.SetDevice( i, j, k ); + dev->AnalogOutputs.push_back( da ); + break; + case COMEDI_SUBD_DI: /* digital input */ + di.SetDevice( i, j, k ); + dev->DigitalInputs.push_back( di ); + break; + case COMEDI_SUBD_DO: /* digital output */ + doh.SetDevice( i, j, k ); + dev->DigitalOutputs.push_back( doh ); + break; + case COMEDI_SUBD_DIO: /* digital input/output */ + dio.SetDevice( i, j, k ); + dev->DigitalInOuts.push_back( dio ); + break; + case COMEDI_SUBD_COUNTER: /* counter */ + break; + case COMEDI_SUBD_TIMER: /* timer */ + break; + case COMEDI_SUBD_MEMORY: /* memory, EEPROM, DPRAM */ + break; + case COMEDI_SUBD_CALIB: /* calibration DACs */ + break; + case COMEDI_SUBD_PROC: /* processor, DSP */ + break; + case COMEDI_SUBD_SERIAL: /* serial IO */ + break; + case COMEDI_SUBD_PWM: /* PWM */ + break; + } + } + } + } + else + break; + } + log_printf( "Comedi: %d devices found" ); +} + +Comedi::~Comedi() +{ + while ( ndevices ) + { + delete Devices[ndevices]; + comedi_close( devices[ndevices] ); + ndevices--; + } +} + +comedi_t *Comedi::GetDevice( int device ) +{ + if ( device < 0 || device >= COMEDI_NDEVICES ) + { + // should throw exception + throw DeviceIndexError(); + return NULL; + } + return devices[device]; +} diff --git a/src/libsig++/Comedi.h b/src/libsig++/Comedi.h new file mode 100644 index 0000000..c0faf9f --- /dev/null +++ b/src/libsig++/Comedi.h @@ -0,0 +1,59 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __Comedi__ +#define __Comedi__ + +/* includes *****************************************************************/ + +#include +#include +#include "comedilib.hpp" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class Comedi { + // public data +public: + std::string Name; + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + Comedi(); + + // destructor + virtual ~Comedi(); + + // exceptions + class DeviceIndexError{}; + + // public methods + + // virtual functions + + // static methods +static comedi_t *GetDevice( int device ); + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/DigitalInOutChannel.cpp b/src/libsig++/DigitalInOutChannel.cpp new file mode 100644 index 0000000..97907b7 --- /dev/null +++ b/src/libsig++/DigitalInOutChannel.cpp @@ -0,0 +1,86 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "DigitalInOutChannel.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +DigitalInOutChannel::DigitalInOutChannel() +{ + Resolution = 1; +} + +DigitalInOutChannel::DigitalInOutChannel(const DigitalInOutChannel ©) +{ +} + +DigitalInOutChannel::~DigitalInOutChannel() +{ +} + +DigitalInOutChannel& DigitalInOutChannel::operator=(const DigitalInOutChannel &rhs) +{ + return *this; +} + +long DigitalInOutChannel::ReadRaw( void ) +{ + unsigned int bit; + + comedi_dio_read( GetDevice(), SubDevice, Channel, &bit); + + return bit; +} + +void DigitalInOutChannel::WriteRaw( long data ) +{ + comedi_dio_write( GetDevice(), SubDevice, Channel, (unsigned int)data); +} diff --git a/src/libsig++/DigitalInOutChannel.h b/src/libsig++/DigitalInOutChannel.h new file mode 100644 index 0000000..2c449e8 --- /dev/null +++ b/src/libsig++/DigitalInOutChannel.h @@ -0,0 +1,62 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __DigitalInOutChannel__ +#define __DigitalInOutChannel__ + +/* includes *****************************************************************/ + +#include +#include + +#include "InOutChannel.h" +#include "RawType.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class DigitalInOutChannel : public InOutChannel, public RawType { + // public data +public: + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + DigitalInOutChannel(); + DigitalInOutChannel(const DigitalInOutChannel ©); + + // destructor + virtual ~DigitalInOutChannel(); + + // operators + DigitalInOutChannel &operator=(const DigitalInOutChannel &rhs); + + // public methods + long ReadRaw( void ); + void WriteRaw( long data ); + + // virtual functions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/DigitalInputChannel.cpp b/src/libsig++/DigitalInputChannel.cpp new file mode 100644 index 0000000..879f099 --- /dev/null +++ b/src/libsig++/DigitalInputChannel.cpp @@ -0,0 +1,81 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "DigitalInputChannel.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +DigitalInputChannel::DigitalInputChannel() +{ + Resolution = 1; +} + +DigitalInputChannel::DigitalInputChannel(const DigitalInputChannel ©) +{ +} + +DigitalInputChannel::~DigitalInputChannel() +{ +} + +DigitalInputChannel& DigitalInputChannel::operator=(const DigitalInputChannel &rhs) +{ + return *this; +} + +long DigitalInputChannel::ReadRaw( void ) +{ + unsigned int bit; + + comedi_dio_read( GetDevice(), SubDevice, Channel, &bit); + + return bit; +} diff --git a/src/libsig++/DigitalInputChannel.h b/src/libsig++/DigitalInputChannel.h new file mode 100644 index 0000000..99028bc --- /dev/null +++ b/src/libsig++/DigitalInputChannel.h @@ -0,0 +1,62 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __DigitalInputChannel__ +#define __DigitalInputChannel__ + +/* includes *****************************************************************/ + +#include +#include + +#include "InputChannel.h" +#include "RawType.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class DigitalInputChannel : public InputChannel, public RawType { + // public data +public: + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + DigitalInputChannel(); + DigitalInputChannel(const DigitalInputChannel ©); + + // destructor + virtual ~DigitalInputChannel(); + + // operators + DigitalInputChannel &operator=(const DigitalInputChannel &rhs); + + // public methods + long ReadRaw( void ); + void WriteRaw( long data ); + + // virtual functions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/DigitalOutputChannel.cpp b/src/libsig++/DigitalOutputChannel.cpp new file mode 100644 index 0000000..581dbd0 --- /dev/null +++ b/src/libsig++/DigitalOutputChannel.cpp @@ -0,0 +1,77 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "DigitalOutputChannel.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +DigitalOutputChannel::DigitalOutputChannel() +{ + Resolution = 1; +} + +DigitalOutputChannel::DigitalOutputChannel(const DigitalOutputChannel ©) +{ +} + +DigitalOutputChannel::~DigitalOutputChannel() +{ +} + +DigitalOutputChannel& DigitalOutputChannel::operator=(const DigitalOutputChannel &rhs) +{ + return *this; +} + +void DigitalOutputChannel::WriteRaw( long data ) +{ + comedi_dio_write( GetDevice(), SubDevice, Channel, (unsigned int)data); +} diff --git a/src/libsig++/DigitalOutputChannel.h b/src/libsig++/DigitalOutputChannel.h new file mode 100644 index 0000000..b508ef9 --- /dev/null +++ b/src/libsig++/DigitalOutputChannel.h @@ -0,0 +1,61 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __DigitalOutputChannel__ +#define __DigitalOutputChannel__ + +/* includes *****************************************************************/ + +#include +#include + +#include "OutputChannel.h" +#include "RawType.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class DigitalOutputChannel : public OutputChannel, public RawType { + // public data +public: + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + DigitalOutputChannel(); + DigitalOutputChannel(const DigitalOutputChannel ©); + + // destructor + virtual ~DigitalOutputChannel(); + + // operators + DigitalOutputChannel &operator=(const DigitalOutputChannel &rhs); + + // public methods + void WriteRaw( long data ); + + // virtual functions + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/EuType.cpp b/src/libsig++/EuType.cpp new file mode 100644 index 0000000..9ead516 --- /dev/null +++ b/src/libsig++/EuType.cpp @@ -0,0 +1,62 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "EuType.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +EuType::EuType() +{ +} + +EuType::~EuType() +{ +} diff --git a/src/libsig++/EuType.h b/src/libsig++/EuType.h new file mode 100644 index 0000000..b368fb2 --- /dev/null +++ b/src/libsig++/EuType.h @@ -0,0 +1,57 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __EuType__ +#define __EuType__ + +/* includes *****************************************************************/ + +#include +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +// based on .dbc data + +/* c class definitions ******************************************************/ + +class EuType { + // public data +public: + + // private data +private: + + // static data + + // public methods +public: + // constructors + EuType(); + EuType(const EuType ©); + + // destructor + virtual ~EuType(); + + // operators + EuType &operator=(const EuType &rhs); + + // virtual functions + + // public methods + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/InOutChannel.cpp b/src/libsig++/InOutChannel.cpp new file mode 100644 index 0000000..0b19386 --- /dev/null +++ b/src/libsig++/InOutChannel.cpp @@ -0,0 +1,71 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "InOutChannel.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +InOutChannel::InOutChannel() +{ +} + +InOutChannel::InOutChannel(const InOutChannel ©) +{ +} + +InOutChannel::~InOutChannel() +{ +} + +InOutChannel& InOutChannel::operator=(const InOutChannel &rhs) +{ + return *this; +} diff --git a/src/libsig++/InOutChannel.h b/src/libsig++/InOutChannel.h new file mode 100644 index 0000000..6af31f9 --- /dev/null +++ b/src/libsig++/InOutChannel.h @@ -0,0 +1,63 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __InOutChannel__ +#define __InOutChannel__ + +/* includes *****************************************************************/ + +#include +#include + +#include "BaseChannel.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class InOutChannel : public BaseChannel { + // public data +public: + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + InOutChannel(); + InOutChannel(const InOutChannel ©); + + // destructor + virtual ~InOutChannel(); + + // operators + InOutChannel &operator=(const InOutChannel &rhs); + + // public methods + + // virtual functions + virtual long ReadRaw( void ) { return 0; }; + virtual double ReadEu( void ) { return (double)ReadRaw(); }; + virtual void WriteRaw( long raw ) {}; + virtual void WriteEu( double eu ) { WriteRaw((long)eu); }; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/InputChannel.cpp b/src/libsig++/InputChannel.cpp new file mode 100644 index 0000000..f84e325 --- /dev/null +++ b/src/libsig++/InputChannel.cpp @@ -0,0 +1,71 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "InputChannel.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +InputChannel::InputChannel() +{ +} + +InputChannel::InputChannel(const InputChannel ©) +{ +} + +InputChannel::~InputChannel() +{ +} + +InputChannel& InputChannel::operator=(const InputChannel &rhs) +{ + return *this; +} diff --git a/src/libsig++/InputChannel.h b/src/libsig++/InputChannel.h new file mode 100644 index 0000000..f366ab2 --- /dev/null +++ b/src/libsig++/InputChannel.h @@ -0,0 +1,61 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __InputChannel__ +#define __InputChannel__ + +/* includes *****************************************************************/ + +#include +#include + +#include "BaseChannel.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class InputChannel : public BaseChannel { + // public data +public: + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + InputChannel(); + InputChannel(const InputChannel ©); + + // destructor + virtual ~InputChannel(); + + // operators + InputChannel &operator=(const InputChannel &rhs); + + // public methods + + // virtual functions + virtual long ReadRaw( void ) { return 0; }; + virtual double ReadEu( void ) { return (double)ReadRaw(); }; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/InputDevice.cpp b/src/libsig++/InputDevice.cpp new file mode 100644 index 0000000..6582907 --- /dev/null +++ b/src/libsig++/InputDevice.cpp @@ -0,0 +1,72 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "InputDevice.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +InputDevice::InputDevice() +{ +} + +InputDevice::~InputDevice() +{ +} + +int InputDevice::ReadChannel( long *data, int chan, int n ) +{ + return 0; +} + +int InputDevice::ReadSample( long *data, int start, int end, int n ) +{ + return 0; +} diff --git a/src/libsig++/InputDevice.h b/src/libsig++/InputDevice.h new file mode 100644 index 0000000..6e53c7d --- /dev/null +++ b/src/libsig++/InputDevice.h @@ -0,0 +1,55 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __InputDevice__ +#define __InputDevice__ + +/* includes *****************************************************************/ + +#include +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class InputDevice { + // public data +public: + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + InputDevice(); + + // destructor + virtual ~InputDevice(); + + // public methods + + // virtual functions + virtual int ReadChannel( long *data, int chan, int n=1 ); + virtual int ReadSample( long *data, int start, int end, int n=1 ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/OutputChannel.cpp b/src/libsig++/OutputChannel.cpp new file mode 100644 index 0000000..2ca0f57 --- /dev/null +++ b/src/libsig++/OutputChannel.cpp @@ -0,0 +1,71 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "OutputChannel.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +OutputChannel::OutputChannel() +{ +} + +OutputChannel::OutputChannel(const OutputChannel ©) +{ +} + +OutputChannel::~OutputChannel() +{ +} + +OutputChannel& OutputChannel::operator=(const OutputChannel &rhs) +{ + return *this; +} diff --git a/src/libsig++/OutputChannel.h b/src/libsig++/OutputChannel.h new file mode 100644 index 0000000..23ef648 --- /dev/null +++ b/src/libsig++/OutputChannel.h @@ -0,0 +1,61 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __OutputChannel__ +#define __OutputChannel__ + +/* includes *****************************************************************/ + +#include +#include + +#include "BaseChannel.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class OutputChannel : public BaseChannel { + // public data +public: + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + OutputChannel(); + OutputChannel(const OutputChannel ©); + + // destructor + virtual ~OutputChannel(); + + // operators + OutputChannel &operator=(const OutputChannel &rhs); + + // public methods + + // virtual functions + virtual void WriteRaw( long raw ) {}; + virtual void WriteEu( double eu ) { WriteRaw((long)eu); }; + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/OutputDevice.cpp b/src/libsig++/OutputDevice.cpp new file mode 100644 index 0000000..76a09e5 --- /dev/null +++ b/src/libsig++/OutputDevice.cpp @@ -0,0 +1,72 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "OutputDevice.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +OutputDevice::OutputDevice() +{ +} + +OutputDevice::~OutputDevice() +{ +} + +int OutputDevice::WriteChannel( const long *data, int chan, int n ) +{ + return 0; +} + +int OutputDevice::WriteSample( const long *data, int start, int end, int n ) +{ + return 0; +} diff --git a/src/libsig++/OutputDevice.h b/src/libsig++/OutputDevice.h new file mode 100644 index 0000000..b1f398d --- /dev/null +++ b/src/libsig++/OutputDevice.h @@ -0,0 +1,55 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __OutputDevice__ +#define __OutputDevice__ + +/* includes *****************************************************************/ + +#include +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class OutputDevice { + // public data +public: + + // protected data + + // private data +private: + + // static data + + // public methods +public: + // constructors + OutputDevice(); + + // destructor + virtual ~OutputDevice(); + + // public methods + + // virtual functions + virtual int WriteChannel( const long *data, int chan, int n=1 ); + virtual int WriteSample( const long *data, int start, int end, int n=1 ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/RawType.cpp b/src/libsig++/RawType.cpp new file mode 100644 index 0000000..f4d232f --- /dev/null +++ b/src/libsig++/RawType.cpp @@ -0,0 +1,112 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "RawType.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +RawType::RawType() +{ + Shift = 0; + Mask = -1; + Signed = false; +} + +RawType::RawType(const RawType ©) +{ + Shift = copy.Shift; + Mask = copy.Mask; + Signed = copy.Signed; +} + +RawType::~RawType() +{ +} + +RawType& RawType::operator=(const RawType &rhs) +{ + this->Shift = rhs.Shift; + this->Mask = rhs.Mask; + this->Signed = rhs.Signed; + return *this; +} + +long RawType::SetRawMask( int size ) +{ + Mask = ~(-1L << size); + return Mask; +} + +int RawType::Raw2Eu( long *raw, double *eu, int n ) +{ + int t = n; + raw += n; + eu += n; + + while ( n-- ) + { + long val = (*--raw >> Shift) & Mask; + + if ( Signed && val && (val & (~Mask >> 1)) ) + val |= ~Mask; + + *--eu = (double)(val); + } + return t; +} + +int RawType::Eu2Raw( double *eu, long *raw, int n ) +{ + int t = n; + while ( n-- ) + *raw++ = ((long)*eu++ & Mask) << Shift; + return t; +} diff --git a/src/libsig++/RawType.h b/src/libsig++/RawType.h new file mode 100644 index 0000000..52611c9 --- /dev/null +++ b/src/libsig++/RawType.h @@ -0,0 +1,65 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __RawType__ +#define __RawType__ + +/* includes *****************************************************************/ + +#include +#include + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class RawType { + // public data +public: + + // private data +private: + // shift and mask + long Mask; + int Shift; + bool Signed; + + // static data + + // public methods +public: + // constructors + RawType(); + RawType(const RawType ©); + + // destructor + virtual ~RawType(); + + // operators + RawType &operator=(const RawType &rhs); + + // public methods + long SetRawMask( int size ); + void SetRawMaskShift( long mask, int shift=0 ) { Mask=mask;Shift=shift; }; + long GetRawMask( void ) { return Mask; }; + int GetRawShift( void ) { return Shift; }; + + // virtual functions + virtual int Raw2Eu( long *raw, double *eu, int n=1 ); + virtual int Eu2Raw( double *eu, long *raw, int n=1 ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libsig++/TODO b/src/libsig++/TODO new file mode 100644 index 0000000..cfd63a4 --- /dev/null +++ b/src/libsig++/TODO @@ -0,0 +1,8 @@ + + TODO + ==== + +Work on configuration and setup +Map channel i/o into sample i/o +Implement COMEDI Interface + diff --git a/src/libsig++/VoltType.cpp b/src/libsig++/VoltType.cpp new file mode 100644 index 0000000..db28e80 --- /dev/null +++ b/src/libsig++/VoltType.cpp @@ -0,0 +1,143 @@ +//**************************************************************************** +// Copyright (C) 2007 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +//**************************************************************************** +// includes +//***************************************************************************/ + +#include +#include +#include + +#include +#include + +#include "VoltType.h" + +//**************************************************************************** +// defines +//***************************************************************************/ + +//**************************************************************************** +// macros +//***************************************************************************/ + +//**************************************************************************** +// structs & typedefs +//***************************************************************************/ + +//**************************************************************************** +// global constants +//***************************************************************************/ + +//**************************************************************************** +// global variables +//***************************************************************************/ + +//**************************************************************************** +// static constants +//***************************************************************************/ + +//**************************************************************************** +// static variables +//***************************************************************************/ + +//**************************************************************************** +// static functions +//***************************************************************************/ + +//**************************************************************************** +// C++ functions +//***************************************************************************/ + +VoltType::VoltType() +{ + Zero = 0; + Gain = 1.0; + Scale = 1.0; + Offset = 0.0; +} + +VoltType::VoltType(const VoltType ©) +{ + Zero = copy.Zero; + Gain = copy.Gain; + Scale = copy.Scale; + Offset = copy.Offset; +} + +VoltType::~VoltType() +{ +} + +VoltType& VoltType::operator=(const VoltType &rhs) +{ + this->Zero = rhs.Zero; + this->Gain = rhs.Gain; + this->Scale = rhs.Scale; + this->Offset = rhs.Offset; + return *this; +} + +int VoltType::Raw2Volts( long *raw, double *volts, int n ) +{ + int t = n; + raw += n; + volts += n; + + while ( n-- ) + { + // calibs + double volt = ((double)*--raw + Zero) * Gain; + + // scale + volt = volt*Scale + Offset; + + *--volts = volt; + } + return t; +} + +int VoltType::Volts2Raw( double *volts, long *raw, int n ) +{ + int t = n; + + while ( n-- ) + { + double volt = *volts++; + + // unscale + volt = (volt - Offset) / Scale; + + // uncalib + *raw++ = (long)volt/Gain - Zero; + } + return t; +} + +int VoltType::Volts2Eu( double *volts, double *eu, int n ) +{ + int t = n; + + while ( n-- ) + { + // scale + *eu++ = *volts++ * Scale + Offset; + } + return t; +} + +int VoltType::Eu2Volts( double *eu, double *volts, int n ) +{ + int t = n; + + while ( n-- ) + { + // unscale + *volts++ = (*eu++ - Offset) / Scale; + } + return t; +} diff --git a/src/libsig++/VoltType.h b/src/libsig++/VoltType.h new file mode 100644 index 0000000..aa03747 --- /dev/null +++ b/src/libsig++/VoltType.h @@ -0,0 +1,80 @@ +//**************************************************************************** +// Copyright (C) 2009 +// ProbeStar Telematics +// All Rights Reserved. Proprietary and Confidential. +//============================================================================ + +/* prevent multiple inclusions */ +#ifndef __VoltType__ +#define __VoltType__ + +/* includes *****************************************************************/ + +#include +#include + +#include "RawType.h" + +/* defines ******************************************************************/ + +/* macros *******************************************************************/ + +/* structs & typedefs *******************************************************/ + +/* c class definitions ******************************************************/ + +class VoltType : public RawType { + // public data +public: + +protected: + // conversion + double Scale; + double Offset; + + // private data +private: + // calibration + double Gain; + long Zero; + + // static data + + // public methods +public: + // constructors + VoltType(); + VoltType(const VoltType ©); + + // destructor + virtual ~VoltType(); + + // operators + VoltType &operator=(const VoltType &rhs); + + // virtual functions + + // public methods + void SetCalibration( double gain, double zero ) { Gain=gain; Zero=zero; }; + void SetScaling( double scale=1.0, double offset=0.0 ) { Scale=scale; Offset=offset; }; + double GetScale( void ) { return Scale; }; + double GetOffset( void ) { return Offset; }; + + int Raw2Volts( long *raw, double *eu, int n=1 ); + int Volts2Raw( double *eu, long *raw, int n=1 ); + + // override + int Raw2Eu( long *raw, double *eu, int n=1 ) { return Raw2Volts(raw,eu,n); }; + int Eu2Raw( double *eu, long *raw, int n=1 ) { return Volts2Raw(eu,raw,n); }; + + // conversion + int Volts2Eu( double *volts, double *eu, int n=1 ); + int Eu2Volts( double *eu, double *volts, int n=1 ); + + // static methods + + // private methods +private: +}; + +#endif diff --git a/src/libutil/CMakeLists.txt b/src/libutil/CMakeLists.txt new file mode 100644 index 0000000..3ed818d --- /dev/null +++ b/src/libutil/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME util) +set(TARGET lib${NAME}) +project(Cnomicon-${TARGET}) +set(CMAKE_INSTALL_PREFIX ..) +set(LIBRARY ${TARGET}) + +# list of header files +set(LIBH + utillib.h + ) + +# list of source files +set(LIBSRC + hex_print.c + ) + +# includes +include_directories(../include) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib) + +# this is the "object library" target: compiles the sources only once +add_library(${LIBRARY} OBJECT ${LIBSRC}) + +# shared libraries need PIC +set_property(TARGET ${LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE 1) + +# shared and static libraries built from the same object files +add_library(${LIBRARY}-shared SHARED $) +add_library(${LIBRARY}-static STATIC $) + +# output file names +set_target_properties(${LIBRARY}-shared PROPERTIES OUTPUT_NAME ${NAME}) +set_target_properties(${LIBRARY}-static PROPERTIES OUTPUT_NAME ${NAME}) + +# installations +install (FILES ${LIBH} DESTINATION include) +#install (FILES lib${NAME}.a lib${NAME}.so DESTINATION lib) diff --git a/src/libutil/hex_print.c b/src/libutil/hex_print.c new file mode 100644 index 0000000..7ff1369 --- /dev/null +++ b/src/libutil/hex_print.c @@ -0,0 +1,11 @@ +#include "utillib.h" + +void hex_print(FILE *pHexOut, const u_char *packet, int length) { + if (!pHexOut) + return; + + while (length--) { + fprintf(pHexOut, "%02X", *packet++); + } + fprintf(pHexOut, "\n"); +} diff --git a/src/libutil/utillib.h b/src/libutil/utillib.h new file mode 100644 index 0000000..5e798a8 --- /dev/null +++ b/src/libutil/utillib.h @@ -0,0 +1,55 @@ +/***************************************************************************** + * Copyright (C) 2008 + * ProbeStar Telematics, LLC + * All Rights Reserved. Proprietary and Confidential. + *============================================================================ + * Multiplatform Embedded Data Types and Conversion + * Checksum and CRC Routines +*****************************************************************************/ + +/* prevent multiple inclusions */ +#ifndef _UTILLIB_H_ +#define _UTILLIB_H_ + +/***************************************************************************** + * includes +*****************************************************************************/ + +#include +#include + +/***************************************************************************** + * defines +*****************************************************************************/ + +/***************************************************************************** + * macros +*****************************************************************************/ + +/***************************************************************************** + * structs & typedefs +*****************************************************************************/ + +/***************************************************************************** + * global constants +*****************************************************************************/ + +/***************************************************************************** + * global variables +*****************************************************************************/ + +/***************************************************************************** + * C function prototypes +*****************************************************************************/ +/* export C functions to C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +void hex_print(FILE *pHexFile, const u_char *packet, int length); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/netlib b/src/netlib new file mode 120000 index 0000000..1f05e0b --- /dev/null +++ b/src/netlib @@ -0,0 +1 @@ +libnet \ No newline at end of file diff --git a/src/netlib++ b/src/netlib++ new file mode 120000 index 0000000..592ea9a --- /dev/null +++ b/src/netlib++ @@ -0,0 +1 @@ +libnet++ \ No newline at end of file diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..53a4d5e --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,4 @@ +gps/ext_test +nmea/nmeatest +uri/uritest + diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..f455183 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.7) +project(Cnomicon) + +# list of header files +set(SUB_DIRS + gps nmea uri + ) + +foreach(SUB_DIR ${SUB_DIRS}) + add_subdirectory(${SUB_DIR}) +endforeach() diff --git a/tests/gps/CMakeLists.txt b/tests/gps/CMakeLists.txt new file mode 100644 index 0000000..c43e81d --- /dev/null +++ b/tests/gps/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME gps) +project(Cnomicon-Test) +set(TARGET ${NAME}_test) + +# includes +include_directories(../include/libgps++ ../include) +link_directories(../lib) +link_libraries(gps++ net++ net kmlbase kmldom kmlengine pthread rt) + +# executables +add_executable(${TARGET} ${TARGET}.cpp) diff --git a/tests/gps/gps_test.cpp b/tests/gps/gps_test.cpp new file mode 100644 index 0000000..1a7ea81 --- /dev/null +++ b/tests/gps/gps_test.cpp @@ -0,0 +1,49 @@ +// +// GPS Daemon +// Neal Probert +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "GpsPoint.h" +#include "GpsListener.h" + +#include "netlib.h" + +extern int optind, opterr, optopt; + +int main(int argc, char **argv) +{ + // point for extrapolations + GpsPoint Gps; + Gps.SetPosition( 42.0, -83.0, 0.0 ); + + // data from vehicle + GpsPoint CarFix; + CarFix.Speed = 25.0; + CarFix.Yaw = 45.0; + + // time stamp, begin 100msec position extrapolations (9 of them) + for ( int i=1 ; i<11 ; i++ ) + { + Gps.Extrapolate( CarFix.Speed, 0.0, CarFix.Yaw, 0.100 ); + + // new fix + double dist = GpsMath::Distance( 42.0, -83.0, Gps.GetLatitude(), Gps.GetLongitude() ); + printf( "%.7g, %.7g, %g\n", Gps.GetLatitude(), Gps.GetLongitude(), dist ); + } +} diff --git a/tests/include b/tests/include new file mode 120000 index 0000000..f5030fe --- /dev/null +++ b/tests/include @@ -0,0 +1 @@ +../include \ No newline at end of file diff --git a/tests/lib b/tests/lib new file mode 120000 index 0000000..dc598c5 --- /dev/null +++ b/tests/lib @@ -0,0 +1 @@ +../lib \ No newline at end of file diff --git a/tests/nmea/CMakeLists.txt b/tests/nmea/CMakeLists.txt new file mode 100644 index 0000000..13b4f05 --- /dev/null +++ b/tests/nmea/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.10) +set(NAME nmea) +project(Cnomicon-Test) +set(TARGET ${NAME}_test) + +# includes +include_directories(../include/libgps++ ../include) +link_directories(../lib) +link_libraries(gps++ net++ net kmlbase kmldom kmlengine pthread rt) + +# executables +add_executable(${TARGET} ${TARGET}.cpp) diff --git a/tests/nmea/nmea_test.cpp b/tests/nmea/nmea_test.cpp new file mode 100644 index 0000000..4fbd40f --- /dev/null +++ b/tests/nmea/nmea_test.cpp @@ -0,0 +1,91 @@ +// +// GPS Daemon +// Neal Probert +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "NmeaParser.h" + +#include "netlib.h" + +extern int optind, opterr, optopt; + +// +// Written because gpsd (http://gpsd.berlios.de/) is too fat +// + +static const char *msg[] = { + // from web examples + "$GPGLL,3751.65,S,14507.36,E*77\r\n", + "$GPGLL,4916.45,N,12311.12,W,225444,A\n", + "$GPGSA,A,3,,,,,,16,18,,22,24,,,3.6,2.1,2.2*3C\n", + "$GPGSA,A,3,19,28,14,18,27,22,31,39,,,,,1.7,1.0,1.3*34\n", + "$GPGST,024603.00,3.2,6.6,4.7,47.3,5.8,5.6,22.0*58\n", + "$GPGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,00,13,06,292,00*74\n", + "$GPGSV,1,1,13,02,02,213,,03,-3,000,,11,00,121,,14,13,172,05*62\n", + "$GPRMC,081836,A,3751.65,S,14507.36,E,000.0,360.0,130998,011.3,E*62\n", + "$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68\n", + "$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70\n", + "$GPVTG,360.0,T,348.7,M,000.0,N,000.0,K*43\n", + "$GPZDA,024611.08,25,03,2002,00,00*6A\n", + + // real examples (u-Blox) + "$GPRMC,195042.00,A,4227.99355,N,08323.70161,W,0.000,-69.23,270307,,,E*6A\n", + "$GPVTG,-69.23,T,,M,0.000,N,0.000,K,E*2A\n", + "$GPGGA,195042.00,4227.99355,N,08323.70161,W,6,6,1.43,262.3,M,-34.1,M,,*57\n", + "$GPGSA,A,E,24,29,26,18,09,10,,,,,,,2.58,1.43,2.15*73\n", + "$GPGSV,3,1,12,24,56,138,39,29,39,048,41,26,51,051,45,21,78,286,28*7A\n", + "$GPGSV,3,2,12,18,50,288,33,09,26,144,37,07,22,212,,22,19,274,*72\n", + "$GPGSV,3,3,12,10,07,082,37,06,15,198,,03,10,319,,33,08,105,34*72\n", + "$GPGLL,4227.99355,N,08323.70161,W,195042.00,A,E*7F\n", + "$GPGST,195042.00,1.9,,,,50,50,3.5*7C\n", + "$GPZDA,195042.00,27,", + "03,2007,00,00*6E\n", + + NULL +}; + +int main(int argc, char **argv) +{ + NmeaParser Nmea; + int failed = 0; + + printf( "Starting NMEA Parser tests:\n" ); + + for ( int i=0 ; msg[i] ; i++ ) + { + printf( "%s", msg[i] ); + + int flag = Nmea.NmeaParse( msg[i], strlen(msg[i]) ); + + if ( flag < 0 ) + failed++; + + if ( flag > 0 ) + printf( "\tpassed\n" ); + else if ( flag < 0 ) + printf( "\tfailed\n" ); + } + + if ( failed ) + printf( "FAILED: %d tests failed!\n", failed ); + else + printf( "SUCCESS: All tests passed!\n" ); + + return 0; +} diff --git a/tests/uri/CMakeLists.txt b/tests/uri/CMakeLists.txt new file mode 100644 index 0000000..a27eb10 --- /dev/null +++ b/tests/uri/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.7) +set(NAME uri) +project(Cnomicon-Test) +set(TARGET ${NAME}_test) + +# includes +include_directories(../include/libgps++ ../include/libnet++ ../include) +link_directories(../lib) +link_libraries(gps++ net++ net kmlbase kmldom kmlengine pthread rt) + +# executables +add_executable(${TARGET} ${TARGET}.cpp) diff --git a/tests/uri/uri_test.cpp b/tests/uri/uri_test.cpp new file mode 100644 index 0000000..de9c9f3 --- /dev/null +++ b/tests/uri/uri_test.cpp @@ -0,0 +1,35 @@ +#include + +#include "UriParse.h" + +int main( int argc, char *argv[] ) +{ + for ( int i=1 ; i 0 ) + { + printf( "\tparsed out %d fields\n", n ); + printf( "\tproto: %s\n", uri.getProto() ); // scheme + printf( "\tuser: %s\n", uri.getUser() ); + printf( "\tpass: %s\n", uri.getPassword() ); + printf( "\thost: %s\n", uri.getHost() ); + printf( "\tport: %s\n", uri.getService() ); + printf( "\tpath: %s\n", uri.getPath() ); + printf( "\trate: %d\n", uri.getRate() ); + } + else + { + printf( "\tfailed!\n" ); + } + printf( "\n" ); + + + } + return 0; +} diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt new file mode 100644 index 0000000..fe2f6b9 --- /dev/null +++ b/utils/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.7) +project(Cnomicon) + +# list of header files +set(SUB_DIRS +# bin2c fdmp + ) + +foreach(SUB_DIR ${SUB_DIRS}) + add_subdirectory(${SUB_DIR}) +endforeach() diff --git a/utils/bin2c/bin2c.c b/utils/bin2c/bin2c.c new file mode 100644 index 0000000..db782a7 --- /dev/null +++ b/utils/bin2c/bin2c.c @@ -0,0 +1,22 @@ +#include + +int main( int argc, char *argv[] ) +{ + int c; + int n = 0; + + printf( "\t" ); + while ( (c = getchar()) !=EOF ) + { + if ( n ) + { + printf( ", " ); + if ( n % 8 == 0 ) + printf( "\n\t" ); + } + + printf( "0x%02x", c ); + n++; + } + printf( "\n" ); +} diff --git a/utils/fdmp/fdmp.c b/utils/fdmp/fdmp.c new file mode 100644 index 0000000..b172a07 --- /dev/null +++ b/utils/fdmp/fdmp.c @@ -0,0 +1,58 @@ +#include +#include +#include + +int main( int argc, char *argv[] ) +{ + FILE *pFile = NULL; + long iAddr = 0; + char szBuf[16]; + char szAsc[17]; + int i, n; + + if ( argc == 2 ) + pFile = fopen( argv[1], "r" ); + + if ( !pFile ) + { + perror( argv[1] ); + return 1; + } + + while( !feof(pFile) ) + { + printf( "%08lx ", (long)iAddr ); + + n = fread( szBuf, 1, 16, pFile ); + + for( i=0 ; i + +int main() +{ + int pic; + int rate; + double usb; + int div; + + for ( pic=1; pic<=64 ; pic++ ) + { + rate = 40000000 / ((pic+1)*16); + usb = 3000000.0 / (double)rate; + + div = (int)usb; + if ( usb - (double)div < .01 ) + printf( "%d = %d, %.2f\n", pic, rate, usb ); + } +} +