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

Embedded Software Developer Developer in Suwon-si, Gyeonggi-do, South Korea

Member since August 13, 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 and is currently developing software for Hyundai's digital video recording system (DVRS) device and a solution for Android TV.
Kijong is now available for hire


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


  • Embedded Systems 20 years
  • Linux 20 years
  • C 20 years
  • Embedded Linux 15 years
  • Computer Networking 7 years
  • Linux Device Driver 5 years
  • C++ 3 years
  • Android TV 2 years


Suwon-si, Gyeonggi-do, South Korea



Preferred Environment

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

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.


  • Senior Software Engineer

    2006 - PRESENT
    • 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++
  • Senior Software Engineer

    2003 - 2006
    • 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
  • Senior Software Engineer

    2000 - 2004
    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, RTOS, Embedded Systems, Embedded C
  • Software Engineer

    1998 - 2000
    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, 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 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%.


  • Languages

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

    Embedded Linux, Linux, Android TV, Arduino, Android, Bluetooth LE, Windows CE
  • Other

    Embedded Software, DVB-T, Embedded Systems, Performance Improvement, Yocto, Linux Device Driver, Software Project Management, Computer Networking, RTOS, TCP/IP, Performance Optimization, Memory Management, Project Coordination, Electronic Engineering, Networking, Sensor Fusion, Linux Kernel, ESP32, ESP8266, Device Drivers, Linux Kernel Drivers, Telegram Bots, Sensors & Actuators
  • Storage

    SQLite, JSON
  • Libraries/APIs

  • Paradigms

    Unit Testing


  • Master's Degree in Computer Networking
    1996 - 1998
    Hanyang Graduate School - Seoul, South Korea
  • Bachelor's Degree in Electronic Engineering
    1992 - 1996
    Hanyang University - Seoul, South Korea

To view more profiles

Join Toptal
Share it with others