
Hi Wolfgang,
Dear Detlev Zundel,
In message m2aacrlsen.fsf@ohwell.denx.de you wrote:
I'd say clear/set/toggle are changeable, don't see any legit return-value-usage here. For 100% backward compatibility, one could leave them as they are and use 0|1 as new actions with return 0, as proposed.
Hm... I think it would be beneficial to bee able to get information about the current settings. For "clear" and "set" the result is known, but for "toggle" it would be helpful if we returned the current port state. Eventually we should add a "test" command (or "read" ?) that returns the current setting?
In general the "current state" actually are three things:
1. Port Mode: Disabled (i.e. not connected to an external pin), Input, Output 2. Port output value 3. (Actually read-in) input value
The current commands mix these aspects, i.e. they implicitely change the port mode. Differentiating between 2 and 3 will not always be possible but is - I've seen that on e.g. an i.mx31.
So these variants: gpio clear|0 => set to output, write 0, return success gpio set|1 => set to output, write 1, return success gpio toggle => (set to output), toggle output, return success gpio input => set to input, return pin value gpio value => return current pin/latch/whatever value
I'd propose to fix the commands to be sensible now. Actually I believe that they should not be in heavy use "in the wild" and so we should take the opportunity and declare the current behaviour as buggy and fix it. Rather now than later ;)
Agreed.
Actually I would expect the "output" commands to return true when they were able to do what was requestes from them, i.e. drive the requested value to the output. I guess this cannot be done in the general case, but for a "weak output" that can be read back, this would be the most sensible thing to do.
For consistency I would prefer to have all commands return the same type of information, i. e. either an error status (like we do with all other commands - any result values would then have to be passed as environment settings), or we return the current port state (also for the "output" commands - see my comments for "toggle").
Actually I would prefer to return an error status for all cases and return "valuable information" in the environment so we can easily use it subsequently. As we do not have a back-tick operator in the shell, I believe that return codes are only useful as error codes.
Cheers Detlev