I removed many unnecessary features from the firewall system. Now it simply permits adding to a single firewall blacklist by CAN ID: No multiple firewalls with different priorities.
The UART command line implementation hit a road block. The UART driver’s receive function uses DMA (direct memory access) and receive idle interrupts. This had a small bug: the transmit function triggered an idle interrupt after each transmission despite the idle flag not actually being set. This was fixed by trivially checking the idle flag.
The UART driver works as expected; I’ll be implementing the command line on Sunday. The DMA receive call is blocking, thus command handling must not happen in the receive task. I’ll probably update the driver receive to be non-blocking by adding a per-message synchronization rather than global synchronization, as Stan implemented with the driver transmit function last week. Alternatively, I could simply add the received commands to a queue for a processing task to handle.
There’s currently an issue with the CAN driver; once resolved I’ll run integration tests on the firewall for a sanity check.