Kijong Uhm, Developer in Suwon-si, Gyeonggi-do, South Korea

Kijong Uhm

Embedded Software Developer Developer

Suwon-si, Gyeonggi-do, South Korea
Toptal Member Since
September 17, 2021

Kijong has been a software engineer in embedded systems for 15+ years and a software project manager and development manager for 5+ years. He specializes in C on embedded Linux and has experience in C++, Java, and Python. Kijong has developed software for set-top boxes, automotive devices, and IoT devices.

Kijong is available for hire
Hire Kijong


C, C++, Java, Embedded Linux, Android TV, Linux Device Driver, Yocto, Linux...
C, Linux, Embedded Linux, Linux Device Driver, Networking, Embedded Software...
Hannae Technology
C, Embedded Linux, Linux, Networking, Embedded Software, Computer Networking...


Suwon-si, Gyeonggi-do, South Korea



Preferred Environment

Embedded Linux, C, C++, Android TV, Yocto, STB, Python

The most amazing...

...product I've helped develop generated $100 million in sales. I was a software developer and technical expert for the overseas co-development companies.

Work Experience

2006 - PRESENT

Senior Software Engineer

  • Developed the application software for set-top boxes on Embedded Linux and Android TV with C, C++, and Java.
  • Created the application software in the digital video recording system (DVRS) automotive device in Hyundai cars, based on Yocto.
  • Developed Linux device drivers for set-top boxes, such as video, demux, tuner, and recorder.
  • Managed the software aspects of projects from design to production.
Technologies: C, C++, Java, Embedded Linux, Android TV, Linux Device Driver, Yocto, Linux, Embedded Software, Embedded Systems, Embedded C, Embedded C++
2003 - 2006

Senior Software Engineer

  • Developed device drivers on Windows CE and Linux for an audio touchscreen and a radio receiver.
  • Designed a generalized API to access digital multimedia broadcasting (DMB),. a portable TV receiver chipsets from many vendors.
  • Developed application software, including SMS and advertisement control on a cell phone.
Technologies: C, Linux, Embedded Linux, Linux Device Driver, Networking, Embedded Software, Computer Networking, Embedded Systems, Embedded C, Windows CE
2000 - 2004

Senior Software Engineer

Hannae Technology
  • Developed software for detecting dial or digit tones with an FFT algorithm and no extra hardware power.
  • Created software to connect and manage calls between internal phones.
  • Developed an xDSL device driver and application software on RTOS.
Technologies: C, Embedded Linux, Linux, Networking, Embedded Software, Computer Networking, Real-time Operating System (RTOS), Embedded Systems, Embedded C
1998 - 2000

Software Engineer

Hanwha Information Communications
  • Developed device drivers on RTOS for the Motorola 68360 CPU.
  • Created a device driver and network application software for xDSL modems.
  • Developed application software on RTOS for a telecommunications device installed near the customer.
Technologies: C, Networking, Embedded Software, Computer Networking, Real-time Operating System (RTOS), TCP/IP, Embedded Systems, Embedded C


Android TV Set-top Box
A set-top box based on Android TV and sold to J:COM, the cable TV operator in Japan. I developed the TV framework and Android apps, including the launcher, settings, and service, to communicate with the remote control app on a smartphone.

DVB Stream Analyzer
A personal side project to make an SI parser library and analyze the DVB broadcasting signal for live and captured streams. I used the final output in client projects to analyze digital TV streams. The initial purpose was to learn and practice modern programming techniques such as Python, OOP, design patterns, unit testing, and TDD. As the project continued, I added and developed many features. The final application was a DVB stream analyzer capable of analyzing SI/PSI, building a channel list on an SQLite database, and displaying an EPG.

LinuxTV Device Driver

LinuxTV is a Linux device driver for receiving TV broadcast signals. My company was porting the set-top box SDK of Broadcom to the LinuxTV device driver structure for the first time. My job was to port a demux video and audio decoder and a recorder module. It worked well and was used for the POC project to receive Freeview, the UK terrestrial TV signal.

Series Recording for Freesat

As part of the project to make the set-top box for Freesat in the UK, I developed a series-recording function. This function receives the series information (such as Friends season four) from the TV broadcast, makes schedules to record the complete season without conflicting with the other recordings by selecting an alternative episode, and records the program as scheduled without disturbing the user experience.

The product had a low-performance CPU and limited memory, but this function required a lot of data searching and saving. The primary goals for the implementation were performance optimization and highly optimized memory management in RAM and Flash.

Visitor Alarm Telegram Bot
A Python program using open-source packages, such as OpenCV, face_recognition, NumPy, and Telegram. It detects a face in a video from a webcam, classifies and identifies the face, counts the appearance of the person, and sends an alarm message to Telegram on the smartphone—all in real time.

2-wheel Balancing Robot
A simple robot that balances on two wheels. I built this as a side project using an Arduino MCU, Xiaomi battery, LEGO frames, and a DC motor. I achieved the vertical angle of the robot using an MPU6050 gyro sensor, noise reduction via a Kalman filter, calculation of the output to the motor via a double PID loop, and user input by TV RCU. The speed of the motor is controlled by PWM, and its velocity is sensed by a wheel encoder.

PBX and Call Simulator

A software module to detect dial or digit tones using FFT and also generate tones. Along with those functions, I implemented private branch exchange (PBX) software, which doubled the price of our product. That function was also used to verify the quality of the products in the factory by connecting two devices in a loop and exchanging calls with each other. I volunteered to develop this module when my company was developing a phone and data multiplexer over xDSL.

Reliable Multisession Transmission Protocol (RMTP)
A lightweight and reliable protocol for an alternative to TCP. The product was a system with two devices communicating long-distance over UART, which caused a high data loss. I voluntarily designed and implemented a transmission protocol—a simplified version of TCP—to run on top of UART, and it provided very stable communication.     

This protocol is:
• Similar to TCP in RTOS, which was expensive at the time.
• Extremely lightweight, with 961 lines of C code, including test code.
• Multisession, so it can be used by many threads simultaneously.
• Robust, with 100% transmission even in the environment of 5% packet loss.

IoT Device for Environmental Sensing
This was the POC project to implement IoT devices to collect environmental data, such as temperature and humidity, and deliver it to a smartphone via BLE. ESP32, which has BLE, is used for the device.

Key Details
• The device supports the BLE Environmental Sensing profile to transfer the temperature and humidity data.
• The BLE Environmental Sensing profile is verified with the public application, such as "nRF Connect for Mobile" and "BLE Scanner 4.0" running on iPhone.
• There are no sensors on the board for now, so the data is fake.
• The test app was deployed on Android smartphones to verify the scanning and collecting of data.

JavaScript API Performance Improvement

Our client complained that it takes too long in the browser on our Android set-top box to call a specific set of JavaScript APIs provided by my company.

Three companies were involved in the API calls:
• Company A—Web app in JavaScript
• Company B—Web Browser
• My Company—Database access and overall integration

This complex call path made the analysis challenging, and it took a few months to identify the bottleneck. I was in the center of the communication and had to write many test codes in JavaScript to prove the cause I identified.

The Cause
The browser had two processes, and the API made too many IPCs. But Company B insisted that they could not improve it because it's a design limitation in Chromium. I suggested a workaround solution to Company B: Make a cache for the object of the API to reduce the amount of IPC. They agreed to implement it, and the execution time was reduced to 25%.

Digital Video Recording System for Hyundai GV70 Car

A digital video recording system (DVRS) for Hyundai GV70 car to record video from LVDS camera for the front and Ethernet camera for the rear.

The software was based on Yocto. I implemented user scenarios such as managing recordings, generating alarms, GUI interface, and user profiles.

Python Tool to Compare Tag Files

My client company develops new embedded hardware generating binary files, so-called Tag File, with a predefined format. They provided the parser code of The Tag file in C++. I used SWIG to wrap the parser for Python and developed a Python tool to compare the binary files from the old and new hardware.

It has smart algorithms to help the user better understand the cause of the difference, such as automatically aligning the timestamp, detecting and counting missing items, and visualizing and emphasizing the error point.



C, Embedded C, C++, Java, Embedded C++, Bash, Bash Script, Python, JavaScript


Embedded Linux, Linux, Android TV, Arduino, Android, Bluetooth LE, Windows CE, MS-DOS


Embedded Software, DVB-T, Embedded Systems, Performance Improvement, Yocto, Linux Device Driver, Software Project Management, Computer Networking, Real-time Operating System (RTOS), TCP/IP, Performance Optimization, Memory Management, Project Coordination, Arduino IDE, Electronic Engineering, Networking, Sensor Fusion, Linux Kernel, ESP32, ESP8266, Device Drivers, Linux Kernel Drivers, Telegram Bots, Sensors & Actuators, Architecture, STB






Unit Testing


1996 - 1998

Master's Degree in Computer Networking

Hanyang Graduate School - Seoul, South Korea

1992 - 1996

Bachelor's Degree in Electronic Engineering

Hanyang University - Seoul, South Korea