- check return code of enqueue_modulation_timings
- wrap all hardware access to safety critical hardware timer registers in safety_critical_ sections. These functions like the armed-ness of each PWM output to a corresponding armed state that can only be set at start or by the user
- ensure NaN in any variables doesn't cause unpredictable behavior on the safety critical PWM outputs
add back support for legacy protocol on UART
add defines in commands.h for easy selection of protocols
new protocol: use semaphores for sending and drop response after 10ms
minor typing fixes