Michael,
Regarding command options: for my latest command addition (obdii requests) I checked if we can use getopt_r(). Problems are a) it's not in the newlib included in esp-idf, and b) we also would need to change all handler signatures to allow getopt to modify the argv array. I also checked if some clever C++ getopt class is available but found none.
Another option (pun intended) would be to stick more with the original parser design with trailing positional optional parameters rather than prefix option flags. Option flags are familiar to many of us developers, but that might not be the best choice for implementation here. Now, I'll admit that the obdii command has complex options that may need to be implemented as you have done. However, let me cite one counterexample: Usage: event raise [-d<delay_ms>] <event> This could have been done like homelink: Usage: homelink <homelink> [<duration=1000ms>] The latter form would be cleaner in that you wouldn't have to type the -d prefix. Also, the tab completion that I implemented before you added the delay option is now broken, although it would not be hard to fix. I've edited in \t here where I pushed TAB: OVMS# event raise system.mo\t system.modem.down system.modem.gotip system.modem.stop OVMS# event raise system.modem.g\totip \tsystem.modem.gotip With the flexibility to have intermediate parameters now, using the validate function, it may fit reasonably to have the options handled by a subtree. -- Steve