Who: Pearl Automation
When: 2014-2016
Where: Scotts Valley, CA
Languages: C, C++, ARM assembly, Thrift, Python
Pearl’s RearVision consists of two separate embedded devices – the camera system, mounted on the car’s license plate, as well as an in-car OBD-II powered system.
Phillip was an early hire at Pearl – #12, hired right after series A closed. He was the primary developer for the camera system.
In the early stages of the company, Phillip performed initial bringup of the system and was responsible for:
- SOC Bringup
- RTOS Selection
- Setting up the build system
- Porting initial software from gcc to clang
- Software / source tree architecture
- Implementing the DFU framework to flash devices
- Creating a USB CDC shell and defining commands for various drivers
- Driver bringup for multiple devices
- SPI
- SPI-NOR
- Solar IC
- GasGauge
- USB
- EHCI (ported u-boot EHCI stack to our system)
- Cameras
- Defining factory test methods and processes
After the bringup stage, focus shifted to firmware support for the camera sub-system. Responsibilities included:
- Implementing low-level C++ functionality in the RearVision frame firmware
- Converting early libraries and drivers to C++
- Conversion of C-based USB Host stack to C++
- Ported vendor host-side Camera USB/UVC APIs from Linux to an RTOS
- Managed interfaces for client software to initiate and configure video streams.
- Worked closely with our ISP vendor to:
- Identify and prioritize requirements and issues
- Assist in debugging ISP, video, and memory issues
- Optimize ISP pipeline performance to reduce latency and improve quality over BT/Wifi
- Optimized video system memory usage
- Created a buffer pool class to re-use large buffers in camera path
- Eliminated all copies from USB->Camera path when getting new frames.
- Converting malloc()/free() calls to use smart pointers
- Debugging memory stompers
Further Reading:
PearlAuto Website