If both outputs are driven low, that sounds like electrically connecting the two outputs, which would be another way of saying dynamic braking. As I understand it, “hard brake”, which is marked as a “Brake” condition in the datasheet, is dynamic braking. A “soft brake”, which is listed as “stop” in the datasheet, is equivalent to turning off the power. In addition, I think that you mean that a “hard brake” will cause the rotation to slow until it stops by creating torque in the motor that is opposite to the direction the motor is rotating.
As I’m going through the information, it appears that there are four states: brake hard, brake soft, clockwise, and counterclockwise. To me, this indicates that setting the direction (CW/CCW) should also result in a BRAKE OFF operation with the bit for the direction being copied to old_dir. Executing BRAKE_OFF should copy the value from old_dir back to the direction bit as well as changing the brake bit. Switching to BRAKE HARD or BRAKE SOFT should change both bits but not change old_dir. This is a little different from the way the code acts now. It looks like the current code will allow some inconsistent states.
I would also like to change the code to allow the use of bluetooth. This might mean another constructor for WickedMotorShield.
You will notice the Doxygen comments. These comments make the code much more understandable.
What I would therefore like to do is to improve the fork until everyone finds it acceptable. You can then merge the fork with the original if you desire.
Having a documentation page on GitHub at https://wickeddevice.github.io would be a very useful item as it provides a way of presenting all of the material on the repository in an organized fashion.
For a number of comments that I have seen in the forum, it seems that people have a hard time finding understandable and usable documentation. Attempting to battle this problem seems a worthwhile goal and I intend to proceed on this quest.