안녕하세요..
아래 편에 이어, 추억의 소55 감성을 이어가는 (부족한) 강좌 Part 2 들어가 봅니다^^
https://www.clien.net/service/board/lecture/19154234
오늘은 블루투스 깨워보기편 입니다. 그 전에 지난 편에서의 성과를 잠시 리캡해 보면,
1. 개발환경
전체구조
~/PalmDev
├─ prc-tools-remix/
│ └─ dist/ ← cross compiler
│
├─ palm-os-sdk/
│ ├─ sdk-5r3/
│ └─ sdk-5r4/
│
├─ sony-sdk-5.0/
│ └─ Incs/
│
└─ Project
├─ clie-hello/
└─ btdebug/
(소니 클리에 SDK를 하나 더 풀어 두었습니다. 클리에 특화 라이브러리 호출을 위해~)
해당 SDK는 지난편에 알려 드린 아래 링크에서 받을 수 있고, 헤더파일 외에도 도큐먼트와 몇가지 샘플이 있습니다.
https://palmdb.net/app/palm-os-sdk
위에 표시한 핵심 디렉토리 외에 포함하는 내용은 아래와 같은 구성입니다^^
sony-sdk-5.0
/home/user/PalmDev/sony-sdk-5.0/Documentation
/home/user/PalmDev/sony-sdk-5.0/Incs
/home/user/PalmDev/sony-sdk-5.0/Incs/Libraries
/home/user/PalmDev/sony-sdk-5.0/Incs/System
/home/user/PalmDev/sony-sdk-5.0/Samples
개발환경의 핵심 3종세트는 다음과 같아요~
prc-tools : PalmOS 앱, 즉 모토롤라 68k 계열 CPU용 실행파일 빌드를 위한 크로스 컴파일러 (리눅스용)
PalmOS SDK : PalmOS 앱 개발을 위한 헤더파일과 라이브러리 입니다. 가장 최근의 버전은 5r4 이지만 리눅스에서는 5r3의 호환성이 좋습니다.
Sony Clie SDK : 클리에 전용 헤더파일 (조그다이얼 등의 컨트롤용)
이 구조면 PalmOS 3.x~5.x 앱 개발 전부 가능하고, 더 자세한 내용은 GPT가 작성해 준 요약문서로 올렸습니다~
2. 블루투스 통신
먼저 제가 가지고 있는 유럽버전의 TH55의 가장 큰 장점인 블루투스를 살려보기로 하고, 계획을 세웁니다.
TH55 유럽버전(블루투스 내장)의 블투 스택으로 확인 또는 구현이 가능한 것들은 다음과 같습니다.
1️⃣ Bluetooth device discovery
2️⃣ Bluetooth name lookup
3️⃣ SPP connection
4️⃣ Serial terminal
5️⃣ GPS receiver 연결
6️⃣ Bluetooth keyboard
7️⃣ Bluetooth file transfer (OBEX)
이걸로 할 수 있는 응용 분야는,
•ESP32 Bluetooth SPP 콘솔
•Arduino HC-05 모듈 콘솔
•OBD2 Bluetooth 데이터 읽기
•GPS NMEA Raw 보기
등인데 이 중, 도전과제 1순위는 시리얼 터미널이고, 그 다음 여력이 되면 OBD2를 연결해 차량 상태 모니터링 프로그램을 짜 보는 것입니다^^
그럴려면 일단 양방향 통신부터 뚫어 봐야지요~
1) 페어링
맥북으로 개발할 거니 일단 맥과 클리에의 페어링이 필요합니다. 이건 생각보다 간단하게 되네요,, 그런데 HID(키보드, 마우스 등), 오디오장치와 달리 페어링이 유지 되지는 않습니다.
맥에서는 클리에가 장치에서 등록해 둔 이름이 아닌 PDA로 보이고, 클리에에서는 맥이 보이긴 하는데 장치명이 제대로 안나와서(언노운 디바이스), 맥에서 연결을 합니다.
맥에 뜨는 보안코드 6자리를 클리에에서 입력하면 연결이 되고, 이후에는 맥에서 클리에에 등록해 둔 장치명으로 내 기기에 표시되네요..

클리에에서도 신뢰장치로 맥을 지정하지만, 여전히 장치명은 “언노운 디바이스“ㅎㅎ

2) 코딩
서로간에 신뢰장치로 등록이 됬으니… 교신을 뚫어 봐야죠~
블루투스 장치들은 자신이 어떤 서비스를 할 수 있는지 광고(advertise)를 하는데, 클리에는 단말기라 서비스를 받는 입장이어서인지 이걸 안하고, 그래서 맥에서도 나의 기기에 클리에가 보이지만 페어링 이후에 연결은 끊어진 상태로 있게 됩니다. 이떄문에 테스트에 애를 좀 먹었지만.. 지피티가 결국 뚫어 냈네요^^
코딩 내용은 사실 저도 잘 이해하기 어려운 부분들이 많아 지피티가 정리한 요약본으로 대체하고 여긴 결과만 공유 드립니다.
클리에와 맥간에 비동기(ACL) 링크를 열고, 서로 양방향 통신을 했다는 게 핵심입니다~
원래는 맥 터미널의 screen 기능(시리얼 포트 같은 입출력 포트를 통해 외부 장치를 원시적인 터미널로 활용하는 기능)을 이용해 클리에를 원격 터미널로 동작시켜보려 했는데, 위에 말씀 드린 것 처럼 맥이 클리에를 서비스가 없는 기기로 보고 페어링을 유지하지를 않고있어 맥에서의 상시 포트를 할당받지 못하는 바람에 이 방법은 아쉽게도 구현이 안되었고, 대신 맥에 아주 간단한 프로그램(clang, obj-c)을 올려 클리에와 비동기 방식의 양방향 통신에는 성공했습니다.
3) 결과
클리에에서
아이콘도 급조해서 넣었습니다 ㅎㅎ 아래는 맥이 보낸 인사말^^

맥에서

이것의 의미는 클리에의 블루투스 스택(이건 이미 클리에에 올라가 있습니다)을 자유롭게 이용할 수 있게 되었다는 것이고, 이제 의도했던 터미널, OBD2 모니터 등등을 만들어 볼 수 있게 된 것이죠^^
응용 앱으로 발전이 되면 또 공유해 보겠습니다.
3. 여담
재미로 시작해 본 클리에 리바이벌 프로젝트 였지만, 사실 지피티가 없었다면 가능하지 않았을 겁니다. 일례로 이게 지금 맥에서 제대로 포트가 열리긴 하는건지 확인을 해야 하는데, 테스트 프로그램을 잠시 돌려본 30초 남짓한 시간에 맥에 들어오는 블루투스 신호를 로그해 보니 거의 1천라인에 육박하는데, 지피티는 이걸 몇 초만에 판독해 코딩 방향성을 잡아 주네요^^ 주변의 수두룩한 블투 장치들이 뿌려대는 광고 같은게 전부 다 잡히기 때문에, 이걸 실시간으로 보면서 필터링 한다는 것은 인간계의 영역이 아니죠^^
(맥로그)

로그확인방법 (맥 터미널에서)
1) 데스크탑에 로그 파일을 만듭니다.
log stream --style compact --predicate 'subsystem == "com.apple.bluetooth"' --info > ~/Desktop/bt_th55.log
2) 필요한 문자열을 검색합니다.
grep -iE -C 3 'RFCOMM|SDP|ACL' ~/Desktop/bt_th55.log
grep -i -C 5 '08:00:46:EF:53:56' ~/Desktop/bt_th55.log
참고로, 두번째 검색라인의 16진수 세트는 제 클리에의 블루투스 주소인데, 여기서 앞의 3개 08:00:46은 Sony OUI (Organizationally Unique Identifier)입니다. 즉 이것만 필터링 하면 주변에 소니 장치들이 뭐가 있는지 보이죠^^
확인을 위해 저 두개 그렙해 달라던데 그것도 너무 많아 그냥 데스크탑에 생성된 로그파일을 보냅니다 ㅋ~
30초 가량 뿌려진 거의 천줄짜리 랜덤 로그를 보더니, 몇초만에 이렇게 요약을 해 주는군요.
(지피티 요약)
응, 이 로그는 읽을 줄만 알면 엄청 좋은 로그야 ㅎㅎ
핵심만 추려보면, 이번 테스트는 거의 교과서적으로 성공한 거 맞아.
지금 로그는 이렇게 말하고 있어:
Clie가 Mac에 ACL 연결 성공 → Mac이 Clie의 SDP 요청을 받음 → Clie가 RFCOMM(Serial Port, UUID 0x1101)으로 들어옴 → Mac이 그걸 실제로 받아줌 → 다만 macOS 쪽 pseudo-serial 디바이스 생성은 실패 → 그래도 RFCOMM 연결 자체는 성공 → 몇 초 뒤 연결 종료
재밌네요 ㅎㅎ
끝으로, 결과물 두개도 소스로 같이 공유 드려봅니다.
프로젝트 진행하며 너덜너덜해 진 코드를 지피티가 말끔하게 정제(리팩토링)한 클리에용 코드와
맥에서 확인차 돌린 클라이언트용 오브젝티브C 코드(이건 지피티가 뚝딱하고 작성해 준겁니다 ㅋ~)
(클리에 코드는 리소스 파일(.rcp) 함께 올립니다.)
이제부터는 뭘 더 하려면 추가 예산이 필요해(ODB2 모듈, ESP32 킷 구입 등), 구체적인 프로젝트 방향을 본격화 하기 전에는 맥에 간단한 명령을 보내 결과를 받는 정도의 축소된 터미널 정도 만들어 볼 수 있겠네요.. 유의미한 진전이 있으면 또 찾아 오겠습니다.
CJKOS(한글화를 위한 중-일-한 폰트 및 로케일)는 안올리는걸로 ㅎㅎ
첨부 : 개발환경 세팅 가이드, 블루투스 실험 결과 요약, 소스코드(클리에용 - btDebug.c btDebug.rcp, 맥용 - bt55_client.m)
저도 클리에랑 픽쳐북 살려서 쓰기 프로젝트 구상만 하고 있었는데요. 엄청 반가운 소식이네요.
귀한 자료 잘 받아갑니다.
그나저나 Gpt가 팜os 개발환경 셋업하는 것을 어려워해서 포기했었는데 작업하신 내용을 보니 흥미진진하네요.
ㅎㅎ 그게 저도 좀 해맸지요.. 며칠 지피티를 달달 볶았습니다 ㅋ~
개발환경은 맥에서 할거니 prc-tools는 명확했는데, 맥네이티브로는 gcc 2.95 크로스컴파일러가 좀 꼬여서, 우분투 가상환경 만들어서 성공했어요.. prc-tools의 문제는 팜이 공식 지원하는 코드워리어 보다 최신 버전의 헤더파일 호환성이 떨어지는 건데, 뭐 이 시점에 최신판이 의미있는게 아니라 안정적으로 동작하는 가장 마지막 버전의 sdk인 5r3으로 갔어요~
끝이 얼마나 대단할지 모르겠지만, 지금 충분히 멋진거 같습니다.응원합니다.
아무래도 너무 오래되서 CPU 파워가 현저하게 떨어지니... 아마도 이 방식은 한계가 있어 보이네요.
굳이 중고를 들여서 써볼 만한지는 좀 애매하지만.. 가지고 있다면 살려서 이것 저것 해보면 재미있을 것 같긴합니다. ㅎㅎ
대단하십니다
클리앙을 검색해 들어왔던 그 때를 회상하는 글이었습니다.
잘읽었습니다.