[U-Boot] [RFC 2/5] CAN device test command

Wolfgang Grandegger wg at grandegger.com
Sun Nov 1 17:24:59 CET 2009


Mike Frysinger wrote:
> On Sunday 01 November 2009 06:33:34 Wolfgang Grandegger wrote:
>> +	if (op == 's') {
>> +	else if (op == 'i') {
>> +	else if (op == 'r') {
>> +	} else if (op == 'x') {
>> +	} else {
> 
> your if style here is inconsistent, but ignoring that, shouldnt this really be 
> a switch() ?  although, by only checking the first char, you allow people to 
> encode typos into their commands and not realize it until some point in the 
> future where things get stricter.  i.e. people can do `can ilovecandy ...`

Will fix.

>> +		unsigned int dev_num = 0, ibaud = 0;
>> +		struct can_dev *dev;
>> +
>> +		if (argc > 2)
>> +			dev_num = simple_strtoul (argv[2], NULL, 10);
>> +		if (argc > 3) {
>> +			ibaud = simple_strtoul (argv[3], NULL, 10);
>> +			if (ibaud > 2)
>> +				ibaud = 2;
>> +		}
>> +		dev = can_init (dev_num, ibaud);
>> +		if (!dev)
>> +			return 1;
>> +		can_dev = dev;
> 
> if i told CAN to init an unknown device, i would expect to get an error and 
> the command state to remain in said error state until i selected a proper CAN 
> device.  otherwise, a script that didnt check the can init status would 
> incorrectly operate on the previously selected can device.

can_init will already print an error message. But that might be changed.

> how do other commands work ?  am i complaining about common convention here ?
> 
>> +		printf ("Usage:\n%s\n", cmdtp->usage);
> 
> cmd_usage() ?

OK.

>> +	can, 3,	1, do_can,
>> +	"can - CAN bus commands\n",
>> +	"can status [level]\n"
>> +	"can init [dev] [baud-index]\n"
>> +	"can xmit [id] [d0] [d1] ... [d7]\n"
>> +	"can recv, abort with CTRL-C\n"
> 
> does the help really display correctly here ?  i think the "can status" line 
> will have too many "can"'s ?

I think the output was OK. But I will check later next week.

Note that this is a RFC trying to discuss the real requirements of a CAN
interface in U-Boot. I think it would also be nice to have can_xmit()
and can_recv() with a timeout parameter, e.g.:

  can_xmit(struct can_dev *dev, int timeout_us);

And maybe also a can_xmit_done() function.

Wolfgang.




More information about the U-Boot mailing list