Status Report 03-02 (cmackint)

This week I finished up the CAN codec. I finished implementing the augmented run length decompression algorithm and further implemented the LZSS dictionary-based compression algorithm. This reduced compression ratio to about 0.16 to 0.21, depending on the block size used. In order to minimize packet header overhead, I found that block sizes of roughly 700 are optimal. I decided to forgo the Huffman encoding implementation as it is simply a less efficient dictionary-based compression algorithm than LZSS/heatshrink.

I primarily worked on writing the design document, which unfortunately precluded my work on designing the configuration API and firewall. I will spend additional time implementing these two firmware components, as the CAN codec is tested all but integration.

Status Report 02-23 (cmackint)

This week I again worked on the CAN message compression codec. I massively refactored the code base and wrote a test framework. I implemented the trivial run length encoding algorithm and my augmented run length encoding algorithm (optional run length encoding if run length above threshold, using escape character concept from KISS link-level protocol). I’ve attached a compression comparison from my testing; the augmented run length compression is only 0.89 (838 to 749 bytes) for now. I believe Huffman encoding will improve this dramatically.

I spent the class time working with my teammates on the design presentation and fleshing out the firmware block diagram. The later was the first step of designing the CAN firewall and configuration API.

My progress is consistent with the Gantt chart, yet I am behind from the personal goal I established in last week’s status report.

Next week/tonight, I will be adding finishing touches to the augmented run length encoding (there’s a bug in the decoding), and implementing two remaining algorithms (Huffman and shrinkwrap). I’ll further design a block diagram of the firewall and config API.

Status Report 02-16 (cmackint)

This week I worked on the CAN message compression codec. I tested various development environments: vim+Makefiles, Eclipse, and CLion+CMake, ultimately choosing the later. I installed and setup the STM IDE (TrueStudio) and the CAN capturing utility (PCAN Explorer) in a virtual machine. Stan and I captured a PCAN trace from the 2018 electric car; I will be using it to test CAN message compression algorithms. I wrote code to read these PCAN messages into a CAN message datatype.

I am no longer designing the codec entirely, and then implementing it. I have decided to test various algorithms concurrently. I am on schedule with the Gantt chart, despite.

I will complete by next week several codec compression implementations: run-length encoding, Huffman encoding, and the heatshrink embedded compression library. I will provide compression ratios for each of these implementations for comparison.