CLIEN

본문 바로가기 메뉴 바로가기 보기설정 테마설정
톺아보기 공감글
커뮤니티 커뮤니티전체 C 모두의광장 F 모두의공원 I 사진게시판 Q 아무거나질문 D 정보와자료 N 새로운소식 T 유용한사이트 P 자료실 E 강좌/사용기 L 팁과강좌 U 사용기 · 체험단사용기 W 사고팔고 J 알뜰구매 S 회원중고장터 B 직접홍보 · 보험상담실 H 클리앙홈
소모임 소모임전체 ·굴러간당 ·아이포니앙 ·주식한당 ·MaClien ·방탄소년당 ·일본산당 ·소시당 ·개발한당 ·자전거당 ·이륜차당 ·AI당 ·안드로메당 ·소셜게임한당 ·골프당 ·바다건너당 ·걸그룹당 ·곰돌이당 ·나스당 ·콘솔한당 ·가상화폐당 ·키보드당 ·클다방 ·패스오브엑자일당 ·리눅서당 ·퐁당퐁당 ·물고기당 ·전기자전거당 ·노젓는당 ·디아블로당 ·찰칵찍당 ·라즈베리파이당 ·3D메이킹 ·X세대당 ·ADHD당 ·AI그림당 ·날아간당 ·사과시계당 ·육아당 ·배드민턴당 ·야구당 ·농구당 ·블랙베리당 ·비어있당 ·FM당구당 ·블록체인당 ·보드게임당 ·활자중독당 ·볼링친당 ·캠핑간당 ·냐옹이당 ·문명하셨당 ·클래시앙 ·요리한당 ·쿠키런당 ·대구당 ·DANGER당 ·뚝딱뚝당 ·개판이당 ·동숲한당 ·날아올랑 ·e북본당 ·갖고다닌당 ·이브한당 ·패셔니앙 ·도시어부당 ·FM한당 ·맛있겠당 ·포뮬러당 ·젬워한당 ·안경쓴당 ·차턴당 ·총쏜당 ·땀흘린당 ·하스스톤한당 ·히어로즈한당 ·인스타한당 ·IoT당 ·KARA당 ·꼬들한당 ·덕질한당 ·어학당 ·가죽당 ·레고당 ·LOLien ·Mabinogien ·임시소모임 ·미드당 ·밀리터리당 ·땅판당 ·헌팅한당 ·오른당 ·영화본당 ·MTG한당 ·소리당 ·노키앙 ·적는당 ·방송한당 ·PC튜닝한당 ·그림그린당 ·소풍간당 ·심는당 ·품앱이당 ·리듬탄당 ·달린당 ·Sea마당 ·SimSim하당 ·심야식당 ·윈태블릿당 ·미끄러진당 ·축구당 ·나혼자산당 ·스타한당 ·스팀한당 ·파도탄당 ·테니스친당 ·테스트당 ·빨콩이당 ·공대시계당 ·여행을떠난당 ·터치패드당 ·트윗당 ·창업한당 ·VR당 ·시계찬당 ·WebOs당 ·위스키당 ·와인마신당 ·WOW당 ·윈폰이당
임시소모임
고객지원
  • 게시물 삭제 요청
  • 불법촬영물등 신고
  • 쪽지 신고
  • 닉네임 신고
  • 제보 및 기타 제안
© CLIEN.NET
공지[점검] 잠시후 서비스 점검을 위해 약 30분간 접속이 차단됩니다. (금일 18:15 ~ 18:45)

팁과강좌

PDA
th55 revival project - Part 2.5 (Bt Serial Console) 6

Vintage68
3,909
2026-03-19 17:17:25 수정일 : 2026-03-20 15:07:33 175.♡.4.34

안녕하세요.. 


아래 편의 고도화 버전, 추억의 소55 감성을 이어가는 (부족한) 강좌 Part 2.5 들어가 봅니다^^

https://www.clien.net/service/board/lecture/19160087


지난 편에서 맥이 클리에를 서비스 미지원 기기로 보고 상시 연결을 끊어버리는 바람에 클리에를 콘솔로 쓰는 대신,

맥에 obj-c 로 아주 작은 클러이언트를 띄워 클리에의 블루투스 동작을 모니터링 하면서 통신에 성공했었죠~ 

그래서 이번엔 이걸 양쪽 다 고도화 해봤습니다. 


즉, 아주 미니멀한 프로토콜을 심어 맥은 Console CLI로 동작하게 하고, 클리에는 맥의 요청에 응답하는 미니 서버로.. 

클리에는 화면도 고도화 해봅니다. 9줄짜리 자동 스크롤 업 되는 윈도우와, 클리에의 전매특허인 조그다이얼을 이용한 스크롤 업다운까지^^ 


이번에도 자세한 설명은 지루해 지니까 코드는 첨부하고 결과 위주로 보여드릴께요^^


1. 클리에 서버

지난 편에서 클리에가 맥과 연결 후 맥이 보낸 “Hello from Mac to TH55” 메시지 출력하고, “Hello form TH55 Server” 문자열 한 줄 보내는 것으로 통신 개통을 확인했습니다. 

그럼 이제 소통을 해봐야죠^^


(맥에서)

스크린샷 2026-03-19 오후 2.10.18.png

맥의 프로그램은 클라이언트 포지션 입니다. 원래는 대기하면서 클리에가 확인되면 자동연결하도록 했었는데, 이렇게 하니 클리에가 런처 대기중일때에도 붙고(이러면 스택에서 블루투스 연결중이라는 창이 뜨는데 그럼 클리에와 맥이 적절한 연결이 되지 않음), 특히 프로그램 실행에 들어가 포트를 열기 전에도 스택에서 먼저 연결창이 작동해 좀 꼬이면서, 맥의 자동접속시도를 죽이고 연결은 별도 명령으로 수동처리해 클리에가 준비되면 붙이도록 바꿨습니다. 한 번 띄워놓으면 클리에를 여러번 재가동 해도 훨씬 안정적으로 테스트 가능하도록 말이죠^^


(클리에에서)

IMG_9349.jpg

클리에는 서버로 동작합니다. 맥에서 간단한 명령어를 보내면 그에 맞는 응답을 하도록 설계했고, 지금은 테스트 용도로 7개 명령만 처리 되죠^^ 중요한 건, 클리에의 작동을 지난번 처럼 메시지창으로 확인하는게 하닌, 윈도우 창을 만들어 로그해 나가도록 했고, 클리에 화면이 작은 관계로 로그는 화면이 다 차면 자동으로 스크롤 업되고, 스크롤 되서 넘어간 메시지는 조그다이얼로 찾아가 볼 수 있도록 해 봤습니다. 조그를 돌려 이전메시지 라인으로 창을 올린 상태에서 맥이 뭘 또 보내면 다시 맨 마지막줄로 복귀해 화면을 연결해 표시해 주도록 인터페이스도 신경을 좀 썼고요~


동영상 대신 사진과 말로만 설명드려서 감흥이 덜하지만.. 목표했던 블루투스 터미널은 서버-클라이언트 포지션이 바뀌긴 했지만 구현 됬고, 특히 클리에의 전매특허 조그다이얼 작동을 소환해 낸 것이 이번 업그레이드의 가장 큰 성과 같습니다^^


여기에 추가로 프로토콜을 확장하고 양방향으로 교신하는, 즉 클리에도 맥에게 뭘 요청해 받아오는 방향으로 업글해 마무리 할 예정인데..  클리에 메시지 윈도우에 명령어 입력기능 정도 구현하는거 외엔 이 상태에서 크게 변화되진 않을 듯 합니다. 


자랑은 이쯤 하고, 지난번 개발환경 셋업에서 자세히 설명 드리지 않았던 프로그램 빌드 과정의 꽃, makefile에 대해 잠간 짚고 넘어가 볼께요


2. prc 빌드 과정 - makefile

첫편에서, 빌드 과정을 아래 처럼 간단하게만 설명 드렸죠..

  • m68k-palmos-gcc -c hello.c (컴파일)
  • m68k-palmos-gcc hello.o -o hello (링크)
  • build-prc -o HelloClie.prc -n "HelloClie" -t appl -c HCLW hello (패키징) 


이 과정은 make 명령을 통해 자동화 할 수 있고, 이는 makefile이라는 배치 스크립트를 통해 완성됩니다. 메이크파일은 맥의 커맨드라인(유닉스 쉘) 구조를 알아야 해서, 저도 아직 이해도가 높진 않아 개념 정도만 요약해 볼께요^^


문득 예전에 임베디드리눅스 어플을 gcc로 개발할 때, 인터넷에서 주워온 메이크파일 고쳐가며 쓴 기억이 나네요 ㅎㅎ

이걸 20여년이 지난 지금에 와서야 구조를 이해하게 되다니 ㅋ~


암튼, 메이크파일 작성 전에 환경을 파악합니다. 


팜코드의 기본 헤더인 PalmOS.h는 prc-tools가 설치한 Palm SDK 디렉토리(보통 ~/prc-tools-remix/dist 이고, 여기서는 이 경로를 시스템 환경변수인 $PRCTOOLS_HOME으로 등록해 둔 상태) 안에 “가짜 헤더”로 보통 아래 경로에 있습니다.

$PRCTOOLS_HOME/usr/share/prc-tools/include


1) 헤더가 실제로 있는지 확인

ls -la "$PRCTOOLS_HOME/usr/share/prc-tools/include/PalmOS.h"

파일이 보이면, 


2) 컴파일 명령에 include 경로 직접 추가해서 컴파일 되나 확인

cd ~/clie-hello
m68k-palmos-gcc \
  -B"$PRCTOOLS_HOME/usr/lib/gcc-lib/m68k-palmos/2.95.3-kgpd/" \
  -I"$PRCTOOLS_HOME/usr/share/prc-tools/include" \
  -O2 -o hello.c
ls -la

여기서 hello.o 생기면 성공.


3) 영구적으로 편하게: Makefile 만들기

기초적인 구성으로 메이크 테스트 해 봅니다..

~/clie-hello/Makefile:

PRCTOOLS_HOME := $(HOME)/prc-tools-remix/dist
CC := $(PRCTOOLS_HOME)/usr/bin/m68k-palmos-gcc
CFLAGS := -O2 \
  -B$(PRCTOOLS_HOME)/usr/lib/gcc-lib/m68k-palmos/2.95.3-kgpd/ \
  -I$(PRCTOOLS_HOME)/usr/share/prc-tools/include

all: hello.o

hello.o: hello.c
    $(CC) $(CFLAGS) -S $< -o $@

clean:
    rm -f hello.o

makefile로 저장하고 나와서, 같은 경로에서 make 명령을 치면 오브젝트 파일인 hello.o가 생깁니다. 


이게 작동하는지 확인 되면, 클리에 리소스를 더해 실행형 파일을 만드는 makefile로 확장하는데, 참고로, 팜은 리소스 기반이라 이 확장 배치에는 리소스빌더인 pilrc를 써서 .rcp(폼, 버튼, 창 등을 지정해 둔 리소스파일)를 바이너리로 만드는 중간과정이 포함됩니다. 최종 빌드는 리소스 바이너리와 .c 메인코드의 오브젝트 파일을 결합해 .prc  실행파일로 완성됩니다. 

자세한 설명은 역시나 생략하고, 최종 메이크파일은 보면 아래와 같아요^^


APP=HelloClie
CREATOR=Helo

PRCTOOLS_HOME=/home/kkamzie/prc-tools-remix/dist
SPECS=$(PRCTOOLS_HOME)/usr/lib/gcc-lib/m68k-palmos/2.95.3-kgpd/specs
LIBGCCDIR=$(PRCTOOLS_HOME)/usr/lib/gcc-lib/m68k-palmos/2.95.3-kgpd

CC=$(PRCTOOLS_HOME)/usr/bin/m68k-palmos-gcc
CFLAGS=-O2 -Wall -specs=$(SPECS) -L$(LIBGCCDIR)

PILRC=$(PRCTOOLS_HOME)/usr/bin/pilrc
OBJRES=$(PRCTOOLS_HOME)/usr/bin/m68k-palmos-obj-res
BUILDPRC=$(PRCTOOLS_HOME)/usr/bin/build-prc

all: $(APP).prc

$(APP): $(APP).c
    $(CC) $(CFLAGS) -o $@ $<

objres: $(APP)
    $(OBJRES) $(APP)

pilrc: $(APP).rcp
    $(PILRC) -q $(APP).rcp

$(APP).prc: $(APP) objres pilrc
    $(BUILDPRC) $(APP).prc "$(APP)" $(CREATOR) *.grc t*.bin T*.bin

clean:
    rm -f $(APP) *.o *.bin *.grc *.prc *.ro core

저 clean은 make clean과 같은 방식으로 옵션을 줄 때, 기존 메이크 과정에서 생긴 중간 결과물들을 싹 지워주는 역할을 해 줍니다. 

그래서 빌드는 항상 다음과 같은 순서로 하죠~

make clean
make

에러 없이 빌드가 되면 실행파일인 .prc 가 생성 됩니다. 그 다음은 이걸 메모리스틱에 옮겨서 작동여부 확인^^


첨부에는 확장을 좀 더(소니 sdk 경로 등을 포함)해서 지금 제가 쓰고 있는 메이크파일도 넣어 두었습니다~


(보충설명)

위의 경우는 prc-tools가 기본 SDK를 쓰고 있다는 가정 하에 작동합니다. 이게 뭔소리냐.. 

prc-tools를 설치하면 기본 sdk가 설치될 디렉토리인 /opt/palmdev 가 생성되고, 여기에 sdk 들이 있어야 합니다. 제 경우를 예를들면, 5r4와 4.0을 넣어 두었죠.. 이렇게요

kkamzie@ubuntu-vn:~/PalmDev/btdebug$ ls /opt/palmdev
sdk-4  sdk-5r4

그러면, palmdeve-prep 으로 컴파일러가 기본으로 뭘 쓸지 선택해 줄 수 있습니다. 일단 확인해 보면

kkamzie@ubuntu-vn:~/PalmDev/btdebug$ palmdev-prep
Checking SDKs in /opt/palmdev
  sdk-5r4          headers in 'include', libraries in 'lib'
  sdk-4            headers in 'include', libraries in 'lib'
When GCC is given no -palmos options, SDK '5r4' will be used by default
Writing SDK details to configuration files...
...done

디렉토리 안의 두개 sdk가 보이고 알아서 가장 최신 버전을 디폴트로 지정합니다. 그런데, 전에 코드워리어 특화인 5r4는 prc-tools와 궁합이 잘 맞지 않는다 했죠^^ 그래서 이걸 조정해 줄 때엔 makefile에서 다른 include 경로를 잡아 컴파일러에 직접 써줍니다. 그건 제가 이 게시물에 올라온 프로그램을 빌드한 실제 makefile에 아래와 같이 반영되 있어요.. 

즉 prc-tools는 5r4를 기본으로 잡고 있지만, 나는 5r3을 쓰겠다.. 여기에 더해서 sony 라이브러리도 쓸거다.. 뭐 이런식이죠^^

# PalmOS SDK selection
# default toolchain uses SDK 5r4
# but this project forces SDK 4 through custom specs
PRCTOOLS_HOME=$(HOME)/PalmDev/prc-tools-remix/dist
SPECS=$(PRCTOOLS_HOME)/usr/lib/gcc-lib/m68k-palmos/2.95.3-kgpd/specs
LIBGCCDIR=$(PRCTOOLS_HOME)/usr/lib/gcc-lib/m68k-palmos/2.95.3-kgpd

# Sony CLIE SDK
SONYSDK=$(HOME)/PalmDev/sony-sdk-5.0
SONYINC=-I$(SONYSDK)/Incs -I$(SONYSDK)/Incs/System -I$(SONYSDK)/Incs/Libraries

# BT Lib reference
BTSDK=$(HOME)/PalmDev/palm-os-sdk/sdk-5r3 <-- 기본 디렉토리 /opt/palmdev/...5r4 가 아닌 5r3 디렉토리를 참조해라
BTINC=-I$(BTSDK)/include/Extensions/Bluetooth <-- 블루투스 헤더는 위의 하위에 있는 이 디렉토리를 참조하겠다

CC=$(PRCTOOLS_HOME)/usr/bin/m68k-palmos-gcc
PILRC=$(PRCTOOLS_HOME)/usr/bin/pilrc
OBJRES=$(PRCTOOLS_HOME)/usr/bin/m68k-palmos-obj-res
BUILDPRC=$(PRCTOOLS_HOME)/usr/bin/build-prc

CFLAGS=-O2 -Wall -specs=$(SPECS) -L$(LIBGCCDIR) $(SONYINC) $(BTINC) <-- 최종 컴파일 옵션
...
$(APP): $(APP).c
    $(CC) $(CFLAGS) -o $@ $<


이건 제가 나중에 다른 컴에 다시 prc-tools를 설치하게되면 또 해멜 수 있는 부분이라, 예외적으로 설명을 추가해 두었습니다 ^^;; 왜냐면, 이게 지피티랑 씨름할 때 가장 병목인 부분이었거든요 ㅎㅎ


3. 여담

이 작업을 시작해 보니, 옛 것에 대한 향수가 몰려와 이것저것 뒤져보다가 필름을 찾았습니다. 무려 20년 가까이 서랍속에서 잠자던 Kodak Supra..참 따뜻한 색상의 마젠타 톤이 은은하게 올라오는 좋은 필름인데… 지피티한테 나 이런것두 있다고 얘기하니, 아주 신나서 삼천포로 빠지더군요.. 

그날은 프로젝트 접고 하루종일 필름과 필카 얘기로 지피티의 학습활동(?)에 일조해 줬습니다. ㅎㅎ


(보너스) 2008년 꼬꼬마 시절 딸넴을 찍어줬던 Supra 800, 찾은건 이 때 찍다 남은 2롤인데.. 이제 다 커서 운전하고 다니는데 옆에 타서 찍어줘야 겠습니다. ㅎㅎ

IMG_9148.JPG

(Nikon F3 / Zeiss Plannar 50mm / KODAK SUPRA 800 / Coolscan 5ED)


한줄요약 : 조그다이얼도 살림~


관심 있으실 분들을 위해 관련 소스코드는 아래 링크로 첨부했습니다. 

맥클라이언트 obj-c 코드 수정을 지피티가 코칭해주는 대화도 재미로 올려놨습니다~


감사합니다. 또 뵙죠~


첨부파일

Vintage68 님의 게시글 댓글
  • 주소복사
  • Facebook
  • X(Twitter)
댓글 • [6] 을 클릭하면 간단한 회원메모를 할 수 있습니다.
클리안큐
IP 114.♡.138.48
03-20 2026-03-20 06:42:38
·
2003년에 샀던 th55 추억이 새록새록 떠오르네요
Vintage68
IP 175.♡.4.34
03-20 2026-03-20 10:34:34
·
@클리안큐님 짧은 댓글이지만 추억을 공유하신 회원님들을 만날 때마다 반가울 따름입니다~
Googi
IP 222.♡.225.245
03-20 2026-03-20 10:19:59
·
와~TH55를 다시 보게 될 줄이야.
Vintage68
IP 175.♡.4.34
03-20 2026-03-20 10:33:40
·
@Googi님 가끔 클리앙에서 보여드리도록 해 보겠습니다^^
그시절그때
IP 218.♡.203.3
03-20 2026-03-20 23:10:34
·
아이 사진 너무 이쁘네요. 저도 우리 애들 어릴적 사진보면 어찌나 이쁜지. 지금과는 다르게 ㅎㅎㅎ

그나저나, 요샌 ChatGPT 말투 물씬 풍기는 글이 태반인데, 이런 정성글이라니 덕분에 감성도 채우고 갑니다.

조그다이얼....다음편도 기대하겠습니다.
Vintage68
IP 14.♡.121.10
03-21 2026-03-21 12:29:18
·
@그시절그때님 감사합니다^^ 요만했던 녀석이 이제 운전을.. ㅋ~
클리에 추억을 저만 누리기는 아깝고, 기록의 의미도 있어 조금씩 풀어보는 중입니다~
지피티가 아니면 중간에 그만두고 클리에는 다시 서랍속으로 기나긴 동면하러 갔을 거에요 ㅎㅎ
조그도 그렇지만.. 카메라, 고해상도그래픽(지금의 고해상도는 아니지만), 와이파이,, 아직 뭐 더 해볼 건 많아보여요^^
새로운 댓글이 없습니다.
이미지 최대 업로드 용량 15 MB
업로드 가능 확장자 jpg,gif,png,jpeg,webp
지나치게 큰 이미지의 크기는 조정될 수 있습니다.
목록으로
글쓰기
목록으로 댓글보기 이전글 다음글
아이디  ·  비밀번호 찾기 회원가입
이용규칙 운영알림판 운영소통 재검토요청 도움말 버그신고
개인정보처리방침 이용약관 책임의 한계와 법적고지 청소년 보호정책
©   •  CLIEN.NET
보안 강화를 위한 이메일 인증
안전한 서비스 이용을 위해 이메일 인증을 완료해 주세요. 현재 회원님은 이메일 인증이 완료되지 않은 상태입니다.
최근 급증하는 해킹 및 도용 시도로부터 계정을 보호하기 위해 인증 절차가 강화되었습니다.

  • 이메일 미인증 시 글쓰기, 댓글 작성 등 게시판 활동이 제한됩니다.
  • 이후 새로운 기기에서 로그인할 때마다 반드시 이메일 인증을 거쳐야 합니다.
  • 2단계 인증 사용 회원도 최초 1회는 반드시 인증하여야 합니다.
  • 개인정보에서도 이메일 인증을 할 수 있습니다.
지금 이메일 인증하기
등록된 이메일 주소를 확인하고 인증번호를 입력하여
인증을 완료해 주세요.