Summary
Full-stack embedded developer with leadership and mentoring experience; Self-starting, independent worker; Moves easily between tools and technologies; Enjoys new challenges, learning on the job, and exploring novel problem domains; Comfortable developing on bare metal, in kernel modules, and in high-level userspace languages; Schedule-conscious; Dedicated to delivering tested, highly reliable code; Comfortable interfacing with customers; Experienced at working from home
Specialties
- Hard Real Time
- Device Drivers
- DSP
- UL
- FDA
- Test-Driven Development
- Green Field Development
- Production Test Harnesses
- LCD/LED Displays
- Code Porting
- DevOps
- Management & Leadership
- Mentoring
Languages
- C
- Python
- Java
- C#
- C++
- Perl
- Haskell
- Assembly
- TypeScript
- Lua
- Visual Basic
- LabVIEW
- HTML+CSS+Javascript
- XML
- QML
- Common Lisp
- Scheme
- Emacs Lisp
Operating Systems
- Linux
- Windows
- FreeRTOS/OpenRTOS
- μC/OS-II
Libraries/Frameworks
- Qt
- mypy
- asyncio
- python-can
- lwIP
- libusb
- Unity/CMock
- CppUTest
- Atmel Software Framework
- STM32Cube
- TI HALCoGen
- Parsec
Tools
- Clang/LLVM
- GCC
- MCC18
- ICC
- Yocto
- CMake
- Vagrant
- AWS
- Visual Studio Code
- Visual Studio
- flake8
- Mono
- Atlassian Cloud (Jira, Confluence, Bitbucket)
- Git & Github
- Bugzilla
- Mercurial
- Subversion
- WireShark
- Google Drive
- LabJack
- Oscilloscope
- Logic Analyzer
Architectures
- ARM64 (NXP i.MX8)
- ARM Cortex-A (Atmel/Microchip, NXP i.MX6), Cortex-M (Atmel/Microchip, STMicro, NXP, Renesas) & Cortex-R TI RM44
- Intel x86/x86_64
- Atmel AVR32
- Atmel AVR (ATtiny, ATmege, Xmega)
- Microchip PIC16 & PIC18
- Motorola 68K
- Intel 8051
Protocols
- CAN Bus
- ISO-TP & UDS
- USB
- CCS ISO-15118/DIN SPEC 70121
- SAE J1772
- RS-485
- Modbus
- TCP/IP
- MQTT
- OCPP
Additional Contributions
- Leadership
- Training
- Mentorship
- Scheduling
- Requirements gathering
- Schematic QC
- Unit and Production Testing
Products Developed
- EV charging solutions
- Military communications hardware
- Animated LED button decoration
- Industrial heater controller
- Windows USB data transfer software
- Pneumatic air compressor controller
- Medical imaging device
- Boiler management system
- Industrial boiler low-water cut-off switch
- Tankless water heater
- Vending machine PC interface board
- Institutional smart magnetic door lock
- Solar panel position controller
- Medical waste sterilizer/melter
- Medical equipment sanitizer
- SD card bootloader
- Self-guided tour handset charging station
- Magnetic field detector
- Windows PC production test orchestration app
- Power supply
- Infrared Spectroscope
- Pest control supersonic emitter
- IoT load simulator
- Animal testing lab equipment
- Air purification controller
- Rental locker controller
- Fragrance dispenser
Interests
- Programming Languages
- Interactive Art
- Wearable Computing
- Pyrotechnic Sequencing
- Arduino
- Electronic Music
- Server Administration
- Input Devices
Experience
Professional Firmware Services, LLC
Owner & Lead Embedded Software Engineer, 2008–2021, 2024
- Brought firmware from design to delivery for over 25 Green Field and Next Generation products for 20 companies in almost as many business sectors using C, Python, Java, and inline assembly on Linux, FreeRTOS, MicroC/OS, Atmel Software Framework, STM32Cube, and bare metal, including IoT products integrating lwIP and the AWS Python MQTT library.
- Developed firmware for diverse products including medical imaging devices, boiler management systems, tankless water heaters, vending machines, solar panel positioners, and institutional door locks.
- Provided Java and Python drivers and PC libraries leveraging java-libusb and pyserial to speed up testing and integration with user-facing software.
- Participated in all R&D phases from requirements gathering and spec design to acceptance and production testing.
- Developed to Underwriters Laboratories and Federal Drug Administration standards for code and documentation quality, enabling safety-critical devices to be brought to market for industrial and medical applications.
- Rapidly adapted to the business needs and engineering principles of clients across various industries and disciplines, interfacing with and gathering requirements from DSP, Ultrasonic, Thermal, Optical, Mechanical and other engineering departments to deliver well-understood, working, tested firmware in their sectors.
- Reviewed PCB schematics for potential issues with microcontroller interfaces and integrated peripherals, reducing costly prototyping iterations.
- Participated in sales calls, providing technical perspective and insight to support the sales team, ensuring that potential clients were confident in our deep understanding of their needs.
- Identified issues with prototype electronics using oscilloscopes, logic analyzers, and other instruments, saving electrical engineering personnel time and effort.
- Developed firmware and Windows C# PC control software to automate production hardware testing.
- Adapted to various development tools and build environments, including GCC, MPLAB/MCC18, ICC, Visual Studio, and Mono, and architectures including ARM, x86/x86_64, Atmel AVR and AVR32, Microchip PIC16 and PIC18, Motorola 68K, and Intel 8051.
- Developed and maintained build and deployment scripts for continuous integration and repeatable automated deployment in CMake, GNU Make and Maven.
- Introduced Test-Driven development methodologies for C, Java, and Python across multiple products using Unity/CMock, JUnit/Mockito and Python's unittest module, enabling more predictable development schedules and fewer defects delivered to clients.
- Developed a new Unit Test suite for C that better matched test requirement descriptions, reducing test development time and effort.
- Developed version control standards and kept clean, detailed version control history in Mercurial and Git, facilitating transparency with clients and ease of troubleshooting.
- Mentored a software engineer who was new to C, Embedded development, and Test-Driven Development, then oversaw his successful delivery of firmware for several Maintenance, Green Field, and Next Generation projects.
- Took over maintenance of firmware for several pre-existing firmware projects, successfully delivering new features and bug fixes, and in some cases bringing incomplete firmware developed by previous firms to completion and to market.
- Managed my own time and direction, working from home, successfully delivering business value to my clients and their clients.
Highlights:
- Delivered and supported a customized Yocto Linux distribution for a medical waste sterilization device; Patched bootloader with client branding; Developed Linux kernel hwmon subsystem device driver for PWM fan control; Developed Python application for business logic, providing telemetry and remote administration via cell modem to AWS IoT backend; Sheparded device through on-site Verizon certification; identified third-party connection manager causing certification test failure and provided same-day patch, allowing the product to proceed to market.
- Developed a modern, easy-to-use touchscreen UI using Qt QML & C++ for monitoring rodent vital signs, using an iterative process in communication with non-technical stakeholders.
- Developed firmware, designed interface protocol, and implemented cross-platform (Linux & Windows) Java TCP/IP and USB interface library and DSP subroutines for an infrared spectroscopy device; provided API documentation and guidance to the client's in-house PC front-end developer.
- Joined a stalled attempt to adapt a USB 1.0 medical imaging device to a USB 2.0 chipset and identified the blocking problems, allowing other phases of the project to proceed.
- Developed daemon for Embedded Linux allowing multiplexing of several vending machine protocols over a single serial link to a custom firmware I also developed, allowing client engineers to focus on business logic.
- Ported an on-demand water heater firmware from AVR to PIC18 on short notice, enabling continuous delivery of product during a component shortage.
- Added MP3 voice prompts to an automatic chocolate tempering bowl firmware running on bare metal.
- Identified issues keeping a 100+ handset USB charging and updating rack from reliably interfacing with all connected handsets.
- Tracked network address negotiation issue to an incompatibility between lwIP's DHCP client and gcc -O3 on AVR32 by capturing traffic with WireShark and examining UDP frames for differences.
- Calibrated interrupt execution timing down to the time of a single instruction, allowing firmware implementation of demanding timing loop and saving discrete component costs.
- Used domain knowledge to provide board-support packages for custom hardware.
Contract Clients:
- Innovative Electronics LLC (Jun 2008–Jun 2021)
- Sub-contracted for electrical engineering firm, developing firmware and related solutions for over 20 custom PCB projects.
- Participated in sales calls, providing technical perspective and insight to support the sales team.
- Reviewed PCB schematics for potential issues with microcontroller interfaces and integrated peripherals.
- Trained and oversaw a Junior Firmware Engineer over several projects.
- Preferred Utilities Manufacturing Corporation (Aug 2012–Mar 2020; Aug 2024&ndashDec 2024)
- Created TI Hercules ARM Cortex-R C/C++ application template with OpenRTOS OS support, integrated CppUTest unit test suite, and Visual Studio Code IDE project file, simplifying the development process for development team and speeding up time-to-market for firmware projects.
- Implemented improvements to Visual Studio Code IDE CppUTest-Test-Adapter unit test suite plugin to reduce opportunities for human error during development.
- Ported SD card bootloader in C for AVR microcontroller from ICC to GCC.
- Developed firmware for a Burner Management and Combustion Control system in C for a network of Microchip PIC186722 microcontrollers, based on a previous-generation product.
- Maintained a custom file format parser in Haskell.
- Kent Scientific Corporation (Apr 2011–Jan 2018, Jan 2024–Sep 2024)
- Led firmware effort to prepare customized Yocto Linux distribution for next-generation NXP i.MX8-based rodent heart rate and blood pressure monitor for scientific research.
- Developed a modern, easy-to-use touchscreen UI using Qt QML & C++ for monitoring rodent vital signs, using an iterative process in communication with non-technical stakeholders.
- Integrated STM32CubeMX board support code generation into CMake build scripts to remove potential sources of human error for team members developing application-level code.
- Trained senior firmware developer on Git revision control, Github code repository hosting, and pull-request process for collaboration and code review.
- Advised on design of cross-platform hardware abstraction layer for bare-metal peripheral controller firmware; implemented STM32 platform support.
- Oversaw development of board-support package for animal testing equipment on Atmel ARM SoC.
- Participated in Research and development on various embedded firmware projects.
- Gyre9 (Oct 2019–June 2021)
- Oversaw development of fragrance dispenser firmware in C for AVR ATtiny807 microcontroller.
- Led development of PID motor controller driver subsystem in C for AVR Xmega64A1U microcontroller.
- OnSite Waste Technologies (Apr 2018–June 2021)
- Developed and maintained Yocto-based Linux distro for ARM medical waste disposal device.
- Developed Python application and AWS IoT (MQTT) interface code.
- Modified and configured bootloaders for client branding.
- Ported I2C Chracter Generator LCD driver to at91bootstrap and u-boot.
- Developed HWMon linux driver.
- Oversaw development of Embedded Linux firmware upgrade solution.
- Shepharded device through Verizon IoT network certification.
- CIVCO Medical Solutions (Nov 2012–Sep 2020)
- Developed firmware for an FDA-approved automated medical equipment cleaning station in C: One AVR32 UC3B0512 master running FreeRTOS and controlling several AVR ATmega324a-based sensors and displays on an RS-485 network.
- Included capability to write formatted PDF logs to flash drive via USB host port.
- Oversaw maintenance of firmware and development of USB firmware upgrade process.
- Spectro Scientific (Sep 2013–Mar 2020)
- Developed firmware for measuring magnetic field strength in C on FreeRTOS for AVR32 UC3B064 microcontroller, storing data to an SD card, and uploading via USB CDC
- Developed firmware for an infrared spectroscopy array in C for STMicroelectronics STM32F446RE ARM SoC.
- The Drone Racing League (Apr 2018–Aug 2019)
- Developed firmware for Drone LiDAR range finder in C for STMicroelectronics STM32F446RE ARM SoC.
- Oversaw various other firmware development projects.
- Unity Scientific (Nov 2012–Nov 2018)
- Developed firmware for infrared spectroscopy device in C on FreeRTOS with lwIP-based TCP/IP and USB data streaming for AVR32 UC3C0512C microcontroller.
- Developed PC client library and DSP library in Java to collect, receive, and process data from infrared spectroscopy device.
- Oversaw development of XT power supply firmware in C for AVR ATtiny24.
- NQ Industries, Inc. (Mar 2018–Jun 2018)
- Developed firmware for touch-screen LCD air purification system controller in C for Atmel ARM SAMD21E15B SoC.
- Tiburon Lockers Inc. (Mar 2018–Apr 2018)
- Developed firmware for networked rental locker controller in C for Atmel ARM SAMA5D21E15B SoC.
- DynaLock Corporation (Sep 2011–Apr 2018)
- Developed firmware for magnetic door lock in C on FreeRTOS for Atmel AVR32 UC3B064 microcontroller.
- Included capability to commission operating parameters by scanning a QR code with a hand scanner connected to a USB host port.
- Oversaw maintenance of magnetic door lock firmware.
- Developed firmware for lower-end magnetic door lock in C for Microchip PIC18F14K50 microcontroller.
- Naval Facilities Engineering Systems Command (NAVFAC) (Aug 20)16–Sep 2016
- Developed firmware for cathodic protection rectifier in C on FreeRTOS for AVR32 UC3B0512 microcontroller.
- DeerTech (Feb 2015–Apr 2016)
- Oversaw development of firmware for sonic pest control device in C for AVR Xmega8E5 microcontroller.
- Antenna International (Jul 2013–Apr 2016)
- Developed enhanced monitoring and control firmware for USB hub/charging station in C for AVR Xmega16A4U microcontroller.
- Troubleshot and resolveed reliability and transmission speed problems with Linux-based USB 3.0 mobile handset charging rack.
- AMP (Feb 2016–Mar 2016)
- Oversaw development of firmware for power usage metering device in C for Atmel ARM SAMV71Q21 SoC.
- Windy Nation (Jan 2012–Jul 2015)
- Developed firmware for tracking solar panel position controller in C on AVR ATMega48 microcontroller.
- Oversaw maintenance of solar panel position controller firmware.
- Oversaw development of solar panel power meter and data logger firmware in C for AVR Xmega16A4U microcontroller.
- Oversaw development of GUI production programming and hardware testing utility in C# on Windows.
- Eemax, Inc. (a Rheem Company) (May 2009–Feb 2015)
- Developed control firmware and user-interface board firmware for two generations of tankless water heating systems in C for AVR ATtiny24 microcontroller.
- Ported AVR/GCC tankless water heating system control firmware to Microchip PIC16F616 microcontroller with HI-TECH C Compiler to overcome component shortage.
- Developed control firmware for third generation tankless water heating system in C for AVR32 UC3B0256 microcontroller.
- Lytron (Nov 2014–Jan 2015)
- Oversaw development of firmware for board production testing in C for Microchip PIC16F877 microcontroller and C# PC production test GUI utility.
- Vendmore Systems LLC / Quickstore 24 (Jan 2010–Mar 2013)
- Developed firmware for vending machine communication protocol multiplexer and relay control board in C for AVR ATmega1280 microcontroller.
- Developed Linux interface management daemon for multiplexer and relay control board.
- Ported multiplexer and relay control board firmware to AVR Xmega128A3U microcontroller C and inline Assembly.
- Chocovision (Jul 2012–Jan 2013)
- Ported chocolate tempering bowl firmware from AVR ATmega32A to AVR32 UC3B0512 microcontroller.
- Added MP3 voice prompt playback.
- Spectra Vista Corporation (Mar 2012–Oct 2012)
- Provided FreeRTOS-based board support package for remote sensing instrument on AVR32 UC3A3256 microcontroller.
- Standard Pneumatic Products, Inc. (Jun 2008–Oct 2012)
- Took over development of incomplete firmware for AutoDual lead/lag air compressor controller in C on Microchip PIC18F4550 microcontroller. Brought firmware to feature complete and production quality. Developed new features in response to customer feedback.
- Carlin Combustion Technology, Inc. (Nov 2010–May 2012)
- Developed UL-listed control firmware for burner management and flame safeguard system in C on FreeRTOS for Microchip PIC18F26K22 microcontroller.
- Shifted direction mid-project and ported AVR32 UC3B064 firmware to PIC18, including adapting FreeRTOS port and fixing linking and context switching bugs in FreeRTOS.
- Hydrolevel (Oct 2009–Jan 2012)
- Developed control firmware for low water cut-off system in C for Microchip PIC18F14K22.
- Shepherded firmware through UL-1998 certification process.
- Developed firmware for interacting with production test jig for self-verification at time of manufacture.
- Developed Windows C# production provisioning and testing application for installing firmware and interfacing with firmware to display test progress and results.
- NDT Systems, Inc. (Dec 2008–Sep 2011)
- Developed next-generation Windows data transfer program for a line of ultrasonic thickness gauges in C#/Visual Studio.
- MELA Sciences, Inc. (May 2009–Sep 2010)
- Joined a troubled effort to adapt a USB 1.0 medical imaging handset to the Cypress FX2 USB 2.0 chipset and identified the blocking problems, allowing other phases of the project to proceed.
- Developed additional firmware in C using the Keil development environment for the Cypress 8051 microprocessor.
- EAO Switch Corp. (Jun 2010–Jul 2010)
- Developed spinning animation sales demo for LED ring around push button in C on FreeRTOS for the AVR32 UC3B064 microcontroller.
- UpperCurve (Jun 2010)
- Developed firmware for an automated dental instrument dryer in C for the ATtiny24A microcontroller.
- Owl Cyber Defense (Feb 2009–Apr 2009)
- Research and development of USB Data Diode firmware on Atmel at90usb chipset.
- Validus DC Systems (Jan 2008–Jul 2008)
- Developed power supply monitoring and timing firmware in C for the Microchip PIC18F8527 microcontroller.
- Tuned interrupt execution timing at the level of a single machine instruction, allowing firmware implementation of demanding timing loop and saving discrete component costs.
- Innovative Electronics LLC (Jun 2008–Jun 2021)
SparkCharge
Lead Firmware Engineer, 2022–2024
- Led firmware department, growing it from a 2-member to a 5-member team composed of senior, junior, and co-op firmware engineers.
- Interfaced with leads of manufacturing, operations, and other engineering disciplines.
- Trained junior firmware engineer and CSE co-op on Python and Linux on new programming languages and OS platforms.
- Oversaw CSE co-op's education and delivery of successful production firmware features.
- Reviewed code changes of team members via Bitbucket pull requests and conducted periodic performance reviews.
- Drove selection of language (Python), OS (Yocto Linux), and hardware platform (NXP i.MX6 SoM) for Roadie V3 mobile CCS EV charger. Laid out a cross-platform development roadmap, permitting development of firmware well in advance of production hardware availability, and facilitating release on aggressive timeline with small team. Designed architecture to satisfy real-time CAN bus requirements across Linux kernel, system services, and Python application. Developed the Yocto-based embedded Linux software platform and Qt touchscreen UIs.
- Developed Linux kernel patches to work around hardware issues and improve real-time capabilities.
- Created Python script to generate WireShark protocol analyzer plugins from CAN bus protocol database files, enabling improved troubleshooting of deployed equipment.
- Designed, and oversaw development of, OCPP IoT solution for monitoring and controlling fleet of portable EV chargers.
- Configured
mypy
type checking andflake8
code style checking to improve quality of Python code across firmware department. - Adapted open-source projects to meet business requirements, and worked with maintainers to integrate changes into upstream codebases.
- mobilityhouse/ocpp (PR #680 merged)
- python-can (PR #1686 not merged)
- pep8-naming (PR #219 merged)
- cantools (PR #569 merged, PR #572 not merged due to API changes)
- wireshark-v2g (PR #43 & PR #45 merged)
- Configured and deployed Jira project management software, initially for tracking firmware work, then work for entire Engineering department.
- Developed and trained team on Git revision control policies and workflows.
- Introduced unit testing and test-driven development in C and Python to the organization; trained team on methodology and usage.
- Authored technical interview process and materials for evaluating firmware engineering candidates.
- Initiated cross-discipline troubleshooting team for rapid resolution of issues during field roll-out of beta hardware and firmware.
Principal Firmware Engineer, 2021
- Implemented new hardware support and firmware features for Roadie V2 portable EV charger battery module.
- Rapidly ported battery management firmware from NXP to Renesas ARM Cortex-M in response to component shortage, enabling on-time delivery.
- Designed and constructed low-cost firmware flashing fixtures for manufacturing department.
- Drove design of electronic circuit for module address auto-negotiation, eliminating potential source of human error in manufacturing process.
- Advised and assisted test engineering on developmeent of LabVIEW programs for PCB provisioning and testing.
- Identified issue with TLS certificate negotiation in firmware of OTS 3rd partyCCS charging protocol module during initial manufacturing run, allowing it to resume on schedule.
- Authored Confluence documentation for manufacturing department.
- Scripted firmware release to manufacture on Confluence and Google Drive, removing sources of human error.
Preferred Utilities
Embedded Software Engineer, 2005–2008
- Developed to the Underwriters Laboratory Standard for Software in Programmable Components and participated in the UL certification process to successfully bring to market a safety-critical burner management system and combustion controller.
- Automated build scripts and boilerplate code generation using Perl , reducing development time and increasing reliability.
- Promulgated and oversaw a lightweight, accurate completion date estimation method
- Implemented a programmable lead-lag boiler control extension for an in-house Functional Block Diagram language enabling moving rapidly into new markets.
- Developed low-level bare-metal device drivers, enabling team mates to focus on business requirements.
- Designed UL-validated QA test protocols to ensure safe operation of industrial controls in the field.
- Participated in research and development of industrial controls from conception, through hardware and software design and QA testing to delivery.
- Introduced, installed, configured, and developed standards of usage for Bugzilla issue tracker and Subversion version control that met UL requirements for change tracing and sped up coordination between developers and stakeholders.
- Rapidly developed a parser and transformer in Haskell with the Parsec parser generator library for an in-house parameter and metadata language with outputs to various XML and CSV formats, automating interoperability between industrial controls and PC configuration tools, and facilitating faster development of documentation. This replaced various labor-intensive and error-prone manual processes and saved countless developer-weeks in the 10+ years it has remained a part of the build process of multiple products.
- Took over development of PC configuration tool from external contractor and brought it from rough alpha to finished product.
Education
University of Rochester
1999–2003, 2012
B.A. Computer Science