📄 scantool_debug.c
字号:
/*
* freediag - Vehicle Diagnostic Utility
*
*
* 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.
*
*************************************************************************
*
*
* Mostly ODBII Compliant Scan Tool (as defined in SAE J1978)
*
* CLI routines - debug subcommand
*/
#include "diag_os.h" /* operating specific includes */
#include "scantool.h"
static char *cvsid = "$Id: scantool_debug.c,v 1.4 2002/07/26 19:25:48 rpalmeida Exp $";
int diag_cmd_debug = 0;
int cmd_debug_dumpdata(int argc, char **argv);
int cmd_debug_pids(int argc, char **argv);
int cmd_debug_help(int argc, char **argv);
int cmd_debug_quit(int argc, char **argv);
int cmd_debug_show(int argc, char **argv);
int cmd_debug_cli(int argc, char **argv);
int cmd_debug_l0(int argc, char **argv);
int cmd_debug_l1(int argc, char **argv);
int cmd_debug_l2(int argc, char **argv);
int cmd_debug_l3(int argc, char **argv);
int cmd_debug_all(int argc, char **argv);
struct cmd_tbl_entry debug_cmd_table[] =
{
{ "help", "help [command]", "Gives help for a command",
cmd_debug_help, 0, NULL},
{ "dumpdata", "dumpdata", "Show Mode1 Pid1/2 responses",
cmd_debug_dumpdata, 0, NULL},
{ "pids", "pids", "Shows PIDs supported by ECU",
cmd_debug_pids, 0, NULL},
{ "show", "show", "Shows current debug levels",
cmd_debug_show, 0, NULL},
{ "l0" , "l0 [val]", "Show/set Layer0 debug level",
cmd_debug_l0, 0, NULL},
{ "l1" , "l1 [val]", "Show/set Layer1 debug level",
cmd_debug_l1, 0, NULL},
{ "l2" , "l2 [val]", "Show/set Layer2 debug level",
cmd_debug_l2, 0, NULL},
{ "l3" , "l3 [val]", "Show/set Layer3 debug level",
cmd_debug_l3, 0, NULL},
{ "cli" , "cli [val]", "Show/set CLI debug level",
cmd_debug_cli, 0, NULL},
{ "all" , "all", "Show/set All layer debug level",
cmd_debug_all, 0, NULL},
{ "quit", "quit", "Return to previous menu level",
cmd_debug_quit, 0, NULL},
{ "exit", "exit", "Return to previous menu level",
cmd_debug_quit, FLAG_HIDDEN, NULL},
{ NULL, NULL, NULL, NULL, 0, NULL}
};
int
cmd_debug_quit(int argc, char **argv)
{
return (CMD_UP);
}
int
cmd_debug_help(int argc, char **argv)
{
help_common(argc, argv, debug_cmd_table);
return (0);
}
print_resp_info(int mode, response_t *data)
{
int i;
for (i=0; i<256; i++)
{
if (data->type != TYPE_UNTESTED)
{
if (data->type == TYPE_GOOD)
{
int j;
printf("0x%02x: ", i );
for (j=0; j<data->len; j++)
printf("%02x ", data->data[j]);
printf("\n");
}
else
printf("0x%02x: Failed 0x%x\n",
i, data->data[1]);
}
data++;
}
}
int
cmd_debug_dumpdata(int argc, char **argv)
{
ecu_data_t *ep;
int i, j;
printf("Current Data\n");
for (i=0, ep=ecu_info; i<MAX_ECU; i++,ep++)
{
if (ep->valid)
{
printf("ECU %d:\n", ep->ecu_addr & 0xff);
print_resp_info(1, ep->mode1_data);
}
}
printf("Freezeframe Data\n");
for (i=0,ep=ecu_info; i<MAX_ECU; i++,ep++)
{
if (ep->valid)
{
printf("ECU %d:\n", ep->ecu_addr & 0xff);
print_resp_info(2, ep->mode2_data);
}
}
return(CMD_OK);
}
int cmd_debug_common( char *txt, int *val, int argc, char **argv)
{
int r;
if (argc == 1)
{
printf("%s debug is 0x%x\n", txt, *val);
}
else
{
r = htoi(argv[1]);
*val = r;
}
return (CMD_OK);
}
int
cmd_debug_l0(int argc, char **argv)
{
return(cmd_debug_common("L0", &diag_l0_debug, argc, argv));
}
int
cmd_debug_l1(int argc, char **argv)
{
return(cmd_debug_common("L1", &diag_l1_debug, argc, argv));
}
int
cmd_debug_l2(int argc, char **argv)
{
return(cmd_debug_common("L2", &diag_l2_debug, argc, argv));
}
int
cmd_debug_l3(int argc, char **argv)
{
return(cmd_debug_common("L3", &diag_l3_debug, argc, argv));
}
int
cmd_debug_cli(int argc, char **argv)
{
return(cmd_debug_common("CLI", &diag_cmd_debug, argc, argv));
}
int
cmd_debug_all(int argc, char **argv)
{
int val;
if (argc == 1)
{
return(cmd_debug_show(1, NULL));
}
else
{
val = htoi(argv[1]);
diag_l0_debug = val;
diag_l1_debug = val;
diag_l2_debug = val;
diag_l3_debug = val;
diag_cmd_debug = val;
}
return (CMD_OK);
}
int
cmd_debug_show(int argc, char **argv)
{
/* int layer, val; */
printf("Debug values: L0 0x%x, L1 0x%x, L2 0x%x CLI 0x%x\n",
diag_l0_debug, diag_l1_debug, diag_l2_debug,
diag_cmd_debug);
return (CMD_OK);
}
void
print_pidinfo(int mode, u_int8_t *pid_data)
{
int i,j,p;
j = 0; p = 0;
printf(" Mode %d:\n ", mode);
for (i=0; i<=0x60; i++)
{
if (pid_data[i]) {
printf("0x%x ", i);
j++; p++;
}
if (j == 10)
{
j = 0;
printf("\n ");
}
}
if ((p == 0) || (j != 0))
printf("\n");
}
int cmd_debug_pids(int argc, char **argv)
{
ecu_data_t *ep;
int i;
if (global_state < STATE_SCANDONE)
{
printf("SCAN has not been done, please do a scan\n");
return(CMD_OK);
}
for (i=0,ep=ecu_info; i<MAX_ECU; i++,ep++)
{
if (ep->valid)
{
printf("ECU %d address 0x%x: Supported PIDs:\n",
i, ep->ecu_addr & 0xff);
print_pidinfo(1, ep->pids);
print_pidinfo(2, ep->mode2_info);
print_pidinfo(5, ep->mode5_info);
print_pidinfo(6, ep->mode6_info);
print_pidinfo(8, ep->mode8_info);
print_pidinfo(9, ep->mode9_info);
}
}
printf("\n");
return (CMD_OK);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -