기본 I/O 주소 0x378 대신 /dev/usb/lp0을 사용하도록 병렬 소스를 수정합니다.

기본 I/O 주소 0x378 대신 /dev/usb/lp0을 사용하도록 병렬 소스를 수정합니다.

나는 Diamond Rio라는 아주 오래된 MP3 플레이어를 가지고 있습니다. 25핀 병렬 어댑터와 병렬 인터페이스를 갖추고 있습니다. 데비안 패키지 rio는 장치와 통신할 수 있는 것처럼 보입니다(https://packages.debian.org/sid/rio) 그러나 이전 기본 I/O 주소 0x278, 0x378을 사용하도록 하드코딩되어 있습니다.

전용 병렬 포트가 있는 컴퓨터가 남아 있지 않습니다. USB-병렬 어댑터를 구입했는데 장치가 /dev/usb/lp0으로 표시됩니다.

현재 존재하지 않는 하드코딩된 레지스터 주소 0x278, 0x378 대신 새로운 /dev/tty/lp0 장치와 상호 작용하도록 rio 프로그램(소스 코드 있음)을 수정하는 간단한 방법이 있습니까?

답변1

가장 쉬운 방법은틈 메우는 물건코드에서. 재정의된 함수를 가리키도록 rio.cpp의 OUTPORT정의를 변경합니다.INPORT

BASE_PORT(기본값 0x378)에 쓰는 것은 USB 에뮬레이트 장치에 쓰는 것만큼 간단합니다.

그러나 상태 포트(데이터는 한 번에 0.5바이트씩 장치에서 호스트로 수신됩니다. 자세한 내용은 rio.txt를 확인하세요)를 읽는 것은 까다로울 수 있습니다. 실제 병렬 포트 상태는 USB 어댑터에 의해 (재)해석될 수 있기 때문입니다. . 그리고 여전히 제어 포트에 액세스할 수 있는 방법을 찾아야 합니다. 어댑터는 비트 탭핑이 아닌 인쇄용으로 설계되었습니다.

또 다른 옵션은 PCI 병렬 포트 카드입니다.

또는 Arduino와 같은 다른 레이어를 추가하고 프로그램->USB->Arduino->병렬로 이동하세요. Arduino는 연결 방법에 따라 바이트만 전달하므로 Firmadata 라이브러리로 충분합니다(Arduino에서 프로그래밍할 필요 없음). 하지만 그렇지 않더라도 Arduino용으로 작성하는 프로그램은 매우 간단할 것입니다.

예전에는 Arduino용 DB25 쉴드가 있었는데, 운이 좋게도 찾을 수 있을 것입니다. 하지만 Arduino+DB25 혁신잘 작동하고 프로토타입을 만들 수 있습니다.

내 제안은 다음과 같습니다. rio의 소스 코드에 심을 추가하여 USB를 통해 Arduino와 통신한 다음 병렬 라인을 직접 읽고 쓸 수 있습니다 OUTPUT.INPORT

답변2

그러면 기본적으로 전체 통신 스택을 다시 구현해야 합니다. 특정 주소에 쓰기를 통해 IBM PC 병렬 포트 컨트롤러에서 수행되는 작업은 메모리 매핑 장치가 아닌 USB 장치의 컨트롤러에 전혀 적용되지 않습니다.

솔직히 말하면, rio 프로토콜이 코드에서 어떻게 작동하는지 이해하세요. 코드가 컨트롤러 메모리에 직접 기록되는 모든 위치를 /dev/usb/lp0을 사용하여 올바른 작업을 수행하는 코드로 바꾸는 것이 유일한 방법입니다. Linux 커널은 lp 인터페이스를 문서화하므로 그렇지 않습니다.저것ioctl어렵지만 아마도 올바른 것을 스스로 알아내야 할 것입니다.

제가 직접 사용해본 적은 없지만(필요한 적도 없습니다)자유 1284이를 더 쉽게 만들 수 있으며 선호하는 운영 체제의 패키지 관리자에서 쉽게 설치할 수 있습니다.

일반적으로 이 작업을 완료하면 다음 작업을 수행할 수 없습니다.저것기존 코드가 많이 남아 있습니다. rio.cpp를 확인하세요. 코드는 단순히 PC 하드웨어에 대해 더 이상 올바르지 않은 가정을 합니다. 그 대가로 실제로 Linux의 LP 포트 드라이버 인프라를 사용하면 동일한 프로그램이 x86 PC, Linux를 실행하는 맥북, Android 휴대폰(커널에 lp가 활성화되어 있다고 가정)에서 실행되도록 보장할 수 있지만 실제로는 이것이 사실이라고 상상할 수 있습니다. ) 및 RaspberryPi: 더 이상 IBM PC 하드웨어뿐만 아니라 Linux에서도 실행됩니다.

그만한 가치가 있나요? 아마도 그렇지 않을 것입니다. 병렬 포트 시대의 MP3 플레이어는 칩이 수용 가능한 MP3 비트 전송률도 처리할 수 없었기 때문에 소리가 형편없었습니다(64kb/s 스테레오가 "고품질"이라는 것을 상상할 수 있습니까? 소름이 돋습니다. 이러한 기능이 무엇을 할 수 있는지 가장 좋은 점은 128kb/s, 여전히 꽤 나쁜 수준입니다.) 그리고 내부 메모리의 양이 허용 가능한 품질의 오디오 관련 양을 저장할 수 없기 때문입니다. 병렬 포트를 통해 관련 양의 데이터를 전송하려는 것이 아닙니다!
그들은 아침 식사로 배터리를 먹으며 사용자 인터페이스는 매우 조잡합니다.

이제 나는 이것이 당신이 감당할 수 있는 유일한 MP3 플레이어이기 때문에 이것을 하지 않을 것이라고 거의 확신합니다. 당신은 이미 USB-LPT 어댑터를 구입했고 그것은 일반적으로 적어도 "새" MP3 플레이어만큼 비쌉니다. 플레이어 자체가 상당히 구식이라 할지라도).
그렇다면 역사적 이유나 향수를 불러일으키는 이유로 이 일을 하고 있을 수도 있는데, 제가 판단할 대상은 누구입니까?

관련 정보