내가 사용하는 금전 등록기는 모두 RedHat Linux 시스템입니다. 이 레지스터에는 ttyS0
직렬 포트( )에 연결된 스캐너가 있습니다.
우리는 계산대에 서서 스캐너에 제품을 대는 사람이 필요한 많은 테스트를 수행했습니다. 나는 이 사람을 방정식에서 제거할 방법을 찾으려고 노력하고 있습니다.
직렬 포트의 입력을 시뮬레이션하는 쉬운 방법이 있습니까?
분명히 직렬 포트로 정보를 보내는 것은 쉽습니다.
echo [whatever] > /dev/ttyS0
하지만 제가 정말 좋아하는 것은 다음과 같이 입력할 수 있는 일종의 bash 코드입니다.
echo [barcode number] > (some code that makes the machine think the barcode number is coming from the serial port)
가능합니까?
실제로 등록할 수 있는 항목에도 제한이 있습니다. 내 컴퓨터에 새로운 유틸리티를 설치할 수 없습니다. 거기에 스크립트를 넣을 수 있지만 bash
그게 전부입니다.
답변1
ioctl을 사용하여 이 작업을 수행할 수 있습니다(루트로) TIOCSTI
. 이 기사 끝에 있는 샘플 프로그램을 참조하세요.답변. 그것을 다음과 같이 사용하십시오
echo [whatever] | ./tiocsti > /dev/ttyS0
아무것도 컴파일하지 않고 Perl에서 이 작업을 수행할 수도 있습니다. 이 사이트를 검색해 보세요.예.
또 다른 옵션은나내가 사용하고 있는 것은 하드웨어에서 수행하는 것입니다. USB->직렬 어댑터를 통해 머신을 자체에 연결하고 읽고 싶은 모든 것을 쓰거나 /dev/ttyUSBx
(또는 ) 변경되지 않은 데이터를 전달하도록 원시 데이터를 사용하면 됩니다 ./dev/serial/by-id/xx-xx-xx
/dev/ttySx
/dev/ttyUSBx
stty raw
답변2
TIOCSTI
사용할 수 있지만 오늘날에는 그다지 높이 평가되는 메커니즘이 아닙니다. 대안은 매우 간단합니다. 이것이 바로 의사 터미널의 용도입니다. 실제 직렬 터미널 대신 의사 터미널을 스캐너로 가리키고 의사 터미널의 마스터 측에서 적절한 입력을 구동하기만 하면 됩니다. 물론,expect
의사 터미널을 통해 대화형 터미널 I/O 애플리케이션을 구동할 준비가 되었습니다.
그것은 모두 expect
Fedora 패키지의 모든 것을 설치한 사람이 귀하의 컴퓨터에 패키지 중 하나를 설치하도록 선택했는지 여부에 따라 다릅니다. 물론 Perl도 마찬가지이다. 우리 응답자들은 모호한 "나체"가 실제로 무엇을 의미하는지 알 방법이 없습니다.
답변3
마침내 나는 그것을 해결할 수 있었다. 매우 감사합니다.
빈 텍스트 파일 만들기
파일을 편집하고 이 코드를 복사하여 텍스트 파일에 붙여넣으세요.
//**tiocsti.c**//
#include <unistd.h>`
#include <err.h>
int main(void)
{
char c; ssize_t r;
while((r = read(0, &c, 1)) > 0)
{
if(ioctl(1, TIOCSTI, &c))
{
err(1, "ioctl(TIOCSTI)");
}
}
if(r < 0)
err(1, "read");
return 0;
}
텍스트 파일을 다른 이름으로 저장
tiocsti.c
동일한 디렉터리에서
cc tiocsti.c -o tiocsti
터미널에서 실행하여 첫 번째 단계에서 생성한 tiocsti.c 파일을 컴파일합니다.
5. ttyS0에 대한 가짜 입력을 생성하려면 다음을 실행하십시오.
echo yadayada | ./tiocsti > /dev/ttyS0