mirror of
https://github.com/linux-can/can-utils.git
synced 2026-08-05 22:40:03 +02:00
can-calc-bit-timing: add option to specify explicit data bit timing
This commit is contained in:
+17
-3
@@ -140,6 +140,7 @@ struct calc_data {
|
|||||||
|
|
||||||
const struct calc_ref_clk *opt_ref_clk;
|
const struct calc_ref_clk *opt_ref_clk;
|
||||||
const unsigned int *opt_bitrates;
|
const unsigned int *opt_bitrates;
|
||||||
|
const unsigned int *opt_data_bitrates;
|
||||||
const struct can_bittiming *opt_bt;
|
const struct can_bittiming *opt_bt;
|
||||||
|
|
||||||
bool quiet;
|
bool quiet;
|
||||||
@@ -168,7 +169,8 @@ static void print_usage(char *cmd)
|
|||||||
"Options:\n"
|
"Options:\n"
|
||||||
"\t-q don't print header line\n"
|
"\t-q don't print header line\n"
|
||||||
"\t-l list all support CAN controller names\n"
|
"\t-l list all support CAN controller names\n"
|
||||||
"\t-b <bitrate> bit-rate in bits/sec\n"
|
"\t-b <bitrate> arbitration bit-rate in bits/sec\n"
|
||||||
|
"\t-d <bitrate> data bit-rate in bits/sec\n"
|
||||||
"\t-s <samp_pt> sample-point in one-tenth of a percent\n"
|
"\t-s <samp_pt> sample-point in one-tenth of a percent\n"
|
||||||
"\t or 0 for CIA recommended sample points\n"
|
"\t or 0 for CIA recommended sample points\n"
|
||||||
"\t-c <clock> real CAN system clock in Hz\n"
|
"\t-c <clock> real CAN system clock in Hz\n"
|
||||||
@@ -956,7 +958,9 @@ static void do_calc(struct calc_data *data)
|
|||||||
else
|
else
|
||||||
data->ref_clks = btc->ref_clk;
|
data->ref_clks = btc->ref_clk;
|
||||||
|
|
||||||
if (data->opt_bitrates)
|
if (data->opt_data_bitrates)
|
||||||
|
data->bitrates = data->opt_data_bitrates;
|
||||||
|
else if (data->opt_bitrates)
|
||||||
data->bitrates = data->opt_bitrates;
|
data->bitrates = data->opt_bitrates;
|
||||||
else
|
else
|
||||||
data->bitrates = common_data_bitrates;
|
data->bitrates = common_data_bitrates;
|
||||||
@@ -983,6 +987,10 @@ int main(int argc, char *argv[])
|
|||||||
0,
|
0,
|
||||||
0 /* sentinel */
|
0 /* sentinel */
|
||||||
};
|
};
|
||||||
|
unsigned int opt_data_bitrate[] = {
|
||||||
|
0,
|
||||||
|
0 /* sentinel */
|
||||||
|
};
|
||||||
struct calc_data data[1] = { };
|
struct calc_data data[1] = { };
|
||||||
bool list = false;
|
bool list = false;
|
||||||
int opt;
|
int opt;
|
||||||
@@ -999,7 +1007,7 @@ int main(int argc, char *argv[])
|
|||||||
{ 0, 0, 0, 0 },
|
{ 0, 0, 0, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
while ((opt = getopt_long(argc, argv, "b:c:lqs:?", long_options, NULL)) != -1) {
|
while ((opt = getopt_long(argc, argv, "b:c:d:lqs:?", long_options, NULL)) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'b':
|
case 'b':
|
||||||
opt_bitrate[0] = strtoul(optarg, NULL, 10);
|
opt_bitrate[0] = strtoul(optarg, NULL, 10);
|
||||||
@@ -1009,6 +1017,10 @@ int main(int argc, char *argv[])
|
|||||||
opt_ref_clk->clk = strtoul(optarg, NULL, 10);
|
opt_ref_clk->clk = strtoul(optarg, NULL, 10);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'd':
|
||||||
|
opt_data_bitrate[0] = strtoul(optarg, NULL, 10);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'l':
|
case 'l':
|
||||||
list = true;
|
list = true;
|
||||||
break;
|
break;
|
||||||
@@ -1090,6 +1102,8 @@ int main(int argc, char *argv[])
|
|||||||
data->opt_ref_clk = opt_ref_clk;
|
data->opt_ref_clk = opt_ref_clk;
|
||||||
if (opt_bitrate[0])
|
if (opt_bitrate[0])
|
||||||
data->opt_bitrates = opt_bitrate;
|
data->opt_bitrates = opt_bitrate;
|
||||||
|
if (opt_data_bitrate[0])
|
||||||
|
data->opt_data_bitrates = opt_data_bitrate;
|
||||||
if (opt_bt->prop_seg)
|
if (opt_bt->prop_seg)
|
||||||
data->opt_bt = opt_bt;
|
data->opt_bt = opt_bt;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user