프린터를 만드는 방법

1 week ago 9

완전히 프로그래밍 가능한 전자잉크 리더 Xteink X3에 프린터 서버를 구현해, 번거로운 파일 업로드 대신 MacBook의 인쇄 메뉴로 문서를 보내 화면에 표시하도록 함 IPP로 인쇄 기능 조회와 작업 처리를 지원하고, Bonjour로 penguin이라는 프린터를 알려 macOS에서 드라이버 없이 검색할 수 있게 만듦 300 dpi Letter 페이지는 비압축 회색조 기준 약 8.4 MB지만 기기의 RAM은 400 KB에 불과해, 페이지를 행 단위로 디코딩·축소·디더링하는 방식으로 처리함 완성된 행을 디스플레이의 기존 화면 버퍼에 직접 기록해 이미지 버퍼 RAM을 약 113 KB에서 62 KB로 줄이고, 네트워크 소켓 버퍼용 공간을 확보함 Preview에서 실제 인쇄에 성공했으며, 인쇄물은 SD 카드에 BMP로 저장해 리더에서 다시 탐색할 수 있음 Xteink X3를 macOS 프린터로 만들기 Xteink X3의 프로그래밍 가능성을 보고 구입한 뒤, CrossPoint 펌웨어에 부팅 애니메이션, 리더를 흔들어 굴리는 주사위, 샌프란시스코 네트워킹 행사에서 쓸 LinkedIn QR 코드를 추가함 콘텐츠를 넣으려면 기기의 핫스폿에 접속하고 브라우저에서 업로드 페이지를 열어야 했음 이 번거로움을 없애기 위해 MacBook의 인쇄 메뉴에서 Xteink를 선택해 전송하는 방식을 구현함 Internet Printing Protocol(IPP)은 HTTP를 통해 프린터 기능 조회, 문서 제출, 작업 상태 확인을 처리함 Get-Printer-Attributes로 지원 기능을 조회하고 Print-Job으로 인쇄할 문서를 보냄 흑백, 300 dpi, 1부, 단면 인쇄를 지원한다고 알리고, 문서 형식으로 Apple raster와 PWG raster를 받도록 함 Mac이 문서를 픽셀로 변환해 보내면 penguin이 화면 크기에 맞춰 축소함 용지는 A5와 Letter, 용지 유형은 stationery, 출력함은 face-up으로 선언함 기기의 색상에 맞춰 이름을 penguin 으로 정하고, Bonjour로 _ipp._tcp 서비스를 알림 서비스 정보에 지원 문서 형식과 인쇄 작업을 받을 주소를 포함함 macOS의 드라이버 없는 검색을 위해 _universal 하위 유형을 추가함 Arduino 래퍼가 해당 기능을 노출하지 않아 ESP-IDF의 mDNS API를 직접 호출함 400 KB RAM에서 페이지를 처리하고 저장하기 300 dp...

Read Entire Article