📄 scantool.h
字号:
/* * freediag - Vehicle Diagnostic Utility * * CVSID $Id: scantool.h,v 1.10 2002/09/11 19:59:02 rpalmeida Exp $ * * Copyright (C) 2001 Richard Almeida & Ibex Ltd (rpa@ibex.co.uk) * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. * ************************************************************************* * * * J1978 Scan tool */#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#include <string.h>#include <errno.h>#include "diag.h"#include "diag_l1.h"#include "diag_l2.h"#include "diag_l3.h"#include "diag_iso14230.h"#include "diag_err.h"#include "diag_general.h"extern int diag_l0_debug;extern int diag_l1_debug;extern int diag_l2_debug;extern int diag_l3_debug;extern int diag_cmd_debug;extern char *progname;/* Structure to hold responses */typedef struct response{ u_int8_t type; u_int8_t len; u_int8_t data[7];} response_t;#define TYPE_UNTESTED 0 /* unchecked, prob because ECU doesn't support */#define TYPE_FAILED 1 /* Got failure response */#define TYPE_GOOD 2 /* Valid info *//* * This structure holds all the data/config info for a given ecu * - one request can result in more than one ECU responding, and so * the data is stored in this */typedef struct ecu_data{ u_int8_t valid; /* Valid flag */ u_int8_t ecu_addr; /* Address */ u_int8_t supress; /* Supress output of data from ECU */ u_int8_t pids[0x100]; /* Pids supported by ECU */ u_int8_t mode2_info[0x100]; /* Freeze frame version */ u_int8_t mode5_info[0x100]; /* Mode 5 info */ u_int8_t mode6_info[0x100]; /* Mode 6 info */ u_int8_t mode8_info[0x100]; /* Mode 8 info */ u_int8_t mode9_info[0x100]; /* Mode 9 info */ u_int8_t data_good; /* Flags for above data */ u_int8_t O2_sensors; /* O2 sensors bit mask */ response_t mode1_data[256]; /* Response data for all responses */ response_t mode2_data[256]; /* Same, but for freeze frame */ diag_msg_t *rxmsg; /* Received message */} ecu_data_t;#define ECU_DATA_PIDS 0x01#define ECU_DATA_MODE2 0x02#define ECU_DATA_MODE5 0x04#define ECU_DATA_MODE6 0x08#define ECU_DATA_MODE8 0x10#define ECU_DATA_MODE9 0x20#define MAX_ECU 8 /* Max 8 Ecus responding */extern ecu_data_t ecu_info[MAX_ECU];extern int ecu_count;extern diag_l2_conn_t *global_l2_conn;extern diag_l3_conn_t *global_l3_conn;extern u_int8_t global_O2_sensors; /* O2 sensors bit mask *//* XXX end of stuff to move */extern int global_conmode;extern int global_protocol;extern int global_l2_fd; /* L2 file descriptor */#define PROTOCOL_NOTFOUND 0#define PROTOCOL_ISO9141_2 1#define PROTOCOL_ISO14230 2#define PROTOCOL_SAEJ1850 3/* * Do a J1979 request */int l3_do_j1979_rqst(diag_l3_conn_t *d_conn, int mode, int p1, int p2, int p3, int p4, int p5, int p6, int p7, void *handle);/* * Send some data on the connection */int l3_do_send( diag_l3_conn_t *d_conn, char *data, int len, void *handle);int l2_do_send( diag_l2_conn_t *d_conn, char *data, int len, void *handle);int l2_check_pid_bits(u_int8_t *data, int pid);int do_l2_9141_start(int destaddr); // 9141 initint do_l2_14230_start(int init_type); //14230 initint do_l2_generic_start(void);// Generic init, using parameters set by userint do_j1979_getdtcs();int do_j1979_getO2sensors();int diag_cleardtc(void);int ecu_connect(void);diag_msg_t *find_ecu_msg(int byte, u_int8_t val);/* * Handle values for above */#define RQST_HANDLE_NORMAL 0 /* Normal mode */#define RQST_HANDLE_WATCH 1 /* Watching, add timestamp */#define RQST_HANDLE_DECODE 2 /* Just decode what arrived */#define RQST_HANDLE_NCMS 3 /* Non cont. mon. tests */#define RQST_HANDLE_NCMS2 4 /* Ditto, print fails only */#define RQST_HANDLE_O2S 5 /* O2 sensor tests */#define RQST_HANDLE_READINESS 6 /* Readiness Tests */int do_j1979_getdata(int interruptible_flag);void do_j1979_basics() ;void do_j1979_cms();void do_j1979_ncms();void do_j1979_getpids();void do_j1979_O2tests();void do_j1979_getO2tests(int O2sensor);/* * Receive callback routines for various L3/L2 types */void j1979_data_rcv(void *handle, diag_msg_t *msg);void j1979_watch_rcv(void *handle, diag_msg_t *msg);void l2raw_data_rcv(void *handle, diag_msg_t *msg);extern int global_state;#define STATE_IDLE 0 /* Idle */#define STATE_WATCH 1 /* Watch mode */#define STATE_CONNECTED 2 /* Connected to ECU */#define STATE_L3ADDED 3 /* Layer 3 protocol added on Layer 2 */#define STATE_SCANDONE 4 /* J1978/9 Scan Done, so got J1979 PID list */int htoi(char *buf);/* Parameters set by user interface (and their defaults) */extern int set_speed ; /* Comms speed */extern unsigned char set_testerid ; /* Our tester ID */extern int set_addrtype ; /* Address type, 1 = functional */extern unsigned char set_destaddr ; /* Dest ECU address */extern int set_L1protocol ; /* L1 (H/W) Protocol type */extern int set_L2protocol ; /* L2 (S/W) Protocol type */extern int set_initmode ;extern int set_display ; /* English (1) or Metric (0) display */extern char* set_vehicle; /* Vehicle name */extern char* set_ecu; /* ECU name */extern char* set_interface; /* Physical interface name to use */extern unsigned int set_subinterface; /* Sub interface ID */typedef struct cmd_tbl_entry{ char *command; /* Command name */ char *usage; /* Usage info */ char *help; /* Help Text */ int (*routine)(int argc, char **argv); /* Command Routine */ int flags; /* Flag */ struct cmd_tbl_entry *sub_cmd_tbl; /* Next layer */} cmd_tbl_entry_t ;/* Return values from the commands */#define CMD_OK 0 /* OK */#define CMD_USAGE 1 /* Bad usage, print usage info */#define CMD_FAILED 2 /* Cmd failed */#define CMD_EXIT 3 /* Exit called */#define CMD_UP 4 /* Go up one level in command tree */#define FLAG_HIDDEN 1 /* Hidden command */int help_common(int argc, char **argv, struct cmd_tbl_entry *cmd_table);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -