From the USB PD spec, Revision 2.0, S. 6.4.4.1:
* A DFP or UFP which does not support Unstructured VDMs Shall Ignore
any Unstructured VDMs received.
From S. 6.4.4.2:
* A DFP or UFP which does not support Structured VDMs Shall Ignore any
Structured VDMs received.
Therefore, as long as we do not support any VDMs, we Shall Ignore them,
which is exactly what we're doing. We're not doing anything wrong, so I
removed the TODO comment that implied we were doing something wrong.
Now that there's a decent GUI, we can at least mention that it exists in
the README. It's good to make people aware of their options, you know?
Also, I got tired of the inline URLs, so I changed the links to be of
the footnote type. It's much nicer looking e.g. in the list of firmware
flashing programs.
PD uses odd units for voltages and currents. Power too, but we don't
work with power (yet). In the shell, we have to convert to and from
these odd units. We had been doing this in-place every time, which was
a bit crumby. Now it's done with macros in pd.h, making prettier and
more maintainable code.
The configuration interface is done, so we shouldn't have any comments
that say otherwise. Also, since the shell never exits, it's silly to
put the code that runs it in a loop.
The GUI will have a button to identify a particular PD Buddy Sink, in
case several are connected to the computer at once. The button will
cause the LED to blink quickly for a couple seconds, then go back to
normal. To allow this, I added a new LED blink mode (FAST_BLINK_SLOW)
that causes 8 fast blinks, then returns to SLOW_BLINK mode. A new
"identify" command triggers this LED mode.
The command shell is based on the ChibiOS-provided one, but modified to
not run in a new thread and generally be a bit simpler, while also
having PD Buddy branding. The storage functions work with the STM32
flash registers directly, taking over the last page of flash. A new
linker script is used to ensure that program code can't end up using
that page. The DPM has been updated to use the saved settings rather
than hardcoded ones. Now what's needed is real commands for editing the
configuration.
Added commands to edit configuration
We now have commands to load the current settings into RAM, edit the
settings in RAM, and write them back to flash. The only settings
currently supported are current and fixed voltage, because the rest of
the code doesn't support GiveBack or variable/battery PDOs yet.
Short help messages were added for each command. Nothing too exciting,
but it should be a great help for someone poking around in the PD Buddy
Sink configuration shell for the first time.
Wrote new usage information for the firmware
Now that we have a command shell, the README should indicate how to use
it.
There are still a few things that the standard says we Shall do and we
don't, but it Works For Me™. I haven't implemented anything with
regards to GiveBack support, but that doesn't matter just yet. Our
handling of VDMs isn't quite right either. Anyway, it successfully
negotiates with so-called Split PDO power supplies, which is more than I
can say about some commercial products.
Based on the RT-STM32F072-DISCOVERY demo from ChibiOS/demos/STM32. The
board definition was made with the Eclipse plugin, and is based on the
ST_STM32F072B_DISCOVERY board definition from ChibiOS/os/hal/boards.