### 0.0.1 다중 인터페이스 지원 드라이버: Lightware SF 시리즈 펌웨어 프로토콜 파싱
현업에서 방수/방진 등급 등 신뢰성이 매우 높아 상업용 항공기에 널리 탑재되는 라이다 제품군이 Lightware 사의 SF 시리즈(SF11/C, SF45 등)이다. 이 하이엔드 하드웨어의 두드러진 특징은 단일 센서 제품군이면서도 사용자의 결선에 따라 I2C 방식과 Serial(UART) 통신 방식 모두를 자유자재로 지원한다는 점이다.
단일 모듈이 I2C와 시리얼을 모두 지원할 때, PX4 드라이버 소프트웨어(src/drivers/distance_sensor/lightware_laser)는 이를 어떻게 객체 지향적으로 처리하여 코드의 중복을 막아내는지 그 아키텍처 설계가 대단히 돋보인다.
하드웨어 버스 추상화(Hardware Bus Abstraction)
PX4의 Lightware 드라이버 코드를 보면 lightware_laser라는 핵심 로직 클래스(비즈니스 로직, Parsing, uORB 발행 담당)가 존재하며, 이 로직과 완전히 분리된 두 개의 인터페이스 래퍼(Wrapper) 층위가 병렬로 하단에 대기하고 있다 (lightware_laser_i2c.cpp, lightware_laser_serial.cpp).
- 부팅 단계 터미널에서 사용자가
lightware_laser start -X(I2C 포트 실행)를 타이핑하면, NuttX OS는I2C장치 매니저를 인스턴스화하고, 그 상단에 공통 핵심 로직을 얹는다. 반대로start -d /dev/ttyS4(시리얼 포트 실행)를 치면UART핸들을 생성하고 동일한 파서 로직을 연결해버린다. - 공용 파서 로직(Common Parser Logic): 핵심 드라이버 로직은 하단에서 올라오는 0과 1의 바이트 덩어리가 UART의
read()버퍼에서 뽑혀 왔든지 I2C의transfer()레지스터에서 읽혀 왔든지 출처에 전혀 관심을 두지 않는다. - 결과적으로 펌웨어 파싱 알고리즘은 인터페이스에 종속되지 않는 깨끗한 모듈(Byte Parser)로 탄생하였다. 문자를 읽어들이면 유효한 ASCII 데이터 패턴(예:
12.34\r\n)을strtof()라이브러리로 float 형으로 치환한 후, EKF2 방향으로 통일된 규격(distance_sensor_s)의 uORB 메시지를 던진다.
이러한 부모-자식 다형성(Polymorphism) 모델은 단순히 Lightware 센서뿐 아니라, 향후 CAN 프로토콜이나 USB 타입이 튀어나와도 핵심 비즈니스 로직(Parsing/Filtering) 코드는 건드리지 않은 채 하단 버스 래퍼(Bus Wrapper) 클래스 계층만 손쉽게 추가(Plug-in) 장착할 수 있도록 드래그프리(Drag-free) 확장성을 보장해 준다.