ASC(4)

명칭
asc - GI1904 베이스의 핸드 스캐너용 디바이스 드라이버

서식
device asc0 at isa? port "IO_ASC1" tty drq 3 irq 10

해설
캐릭터형 디바이스 드라이버 asc (은)는, 현재로서는, GI1904 베이스의 핸드 스캐너 (예를 들면 Trust Amiscan Grey 등)를 취급합니다. 이 디바이스 드라이버는, DMA 와 세치기를 사용합니다. 50 라인까지의 스캔 입력 데이터를 드라이버중에서 버퍼링 합니다.

이 디바이스는, 4 개(살)이 다른 해상도 (100, 200, 300, 400 닷/인치) 그리고 동작시킬 수가 있습니다. 최상정도 비트가 좌측으로 오는 단순한 비트 맵 (을)를 생성합니다. 이 드라이버는, 별도, 단순한 휴대용 비트 맵 파일 형식 pbm(5) (을)를 생성시킬 수도 있습니다. 이것에 의해, 대부분의 그래픽 패키지로, 이 스캔 결과를 용이하게 처리할 수가 있습니다.

출력 비트 맵의 폭은, 해상도의 값에 의해 정해지는 고정의 값입니다. 그러나, pbm(5) 모드의 경우, 비트 맵의 높이를 지정할 필요가 있습니다. 이것은, 드라이버가 언제 「파일의 종단」에 이를까를 알아 둘 필요가 있다 (으)로부터입니다. 디폴트에서는, 정방형의 이미지를 생성합니다. 즉, 폭과 높이가 동일하다고 여겨집니다. 이 기능에 의해, cat(1) (을)를 이용해 스캐너의 출력을 직접 pbm(5) 파일에 카피할 수가 있습니다. 이 드라이버를 raw 모드로 사용하는 경우, dd(1) 명령을 사용하는 것으로써, 이 효과와 닮은 효과를 얻을 수도 있습니다.

IOCTL
asc 에 적용 가능한 ioctl(2) 명령은 다음과 같습니다. sasc(1) 에 의해, 유저 레벨로 이러한 명령을 사용할 수가 있습니다.

ASC_GRES
    (int) 현재의 해상도를, 닷/인치 (dpi) 단위로 돌려줍니다.

ASC_GWIDTH
    (int) 현재의 비트 맵폭을 픽셀 단위로 돌려줍니다.

ASC_SHEIGHT
    (int) pbm(5) 모드의 비트 맵의 높이를 설정합니다. 실제의 곳, 이것은, 최초의 읽기 처리 이후 스캔 가능한 라인의 누적수 에 대한 제한입니다. 이 제한으로 도달하면(자), 읽기는 0 을 돌려줍니다. 그러나, 디바이스가 동작을 정지하는 것은, 오픈된 파일 기술자가 모두 클로우즈 되었을 때에 한정합니다.

ASC_GHEIGHT
    (int) 현재의 비트 맵의 높이를 돌려줍니다.

ASC_SBLEN
    (int) DMA 전송을 행할 때에 내부적으로 사용하는 버퍼의 길이를 지정합니다. 버퍼의 길이는 비트 맵의 라인수로 지정합니다. 버퍼 사이즈의 제한이 (현재로서는) 0x3000 바이트이기 (위해)때문에, 지정 가능한 라인 최대수는 라인 근처의 폭에 의해 바뀝니다. 지정한 길이가 이 제한을 넘는 경우, ENOMEM 에러가 돌려주어집니다.

ASC_GBLEN
    (int) 현재의 버퍼의 길이를 라인수단위로 돌려줍니다.

ASC_SBTIME
    (int) 버퍼 1 개(살)에의 읽어들여 완료까지의 타임 아웃을 지정합니다. 핸디 스캐너는 인간과 컴퓨터간의 인터페이스이기 (위해)때문에, 보통은, 타임 아웃치는 플랫 스캐너보다 크게 해 둘 필요가 있습니다. 디폴트는 15 초입니다. 타임 아웃에 도달하면(자), 읽기 처리는 EBUSY 에러로 실패합니다. 각 버퍼로부터 읽어내질 때 마다 타임 아웃 타이머가 새롭게 개시됩니다. 따라서, 타이머치를 줄이는 것으로, 보다 긴 이미지를 보다 빠르고 스캔 할 수 있게 되는 것은 아닙니다.

ASC_GBTIME
    (int) 현재의 버퍼 타임 아웃치를 돌려줍니다.

ASC_SBTIME (을)를 제외해, 파라미터를 변경한다 ioctl() 리퀘스트의 모든 것은, 현재 진행중의 스캔 처리에 영향을 주지 않습니다. 유저는 디바이스를 클로우즈 해, 다시 오픈해, 새로운 설정이 효력을 나타내는 듯 (으)로 할 필요가 있습니다. 결국, 디바이스의 오픈 클로우즈에 의해, 파라미터의 설정이 리셋트 되는 것은 없습니다.

같이 값을 읽어들이는 리퀘스트는, 현재 진행중의 스캔 처리로 이용되어 있는 값을 돌려주지 않습니다. 스캔 처리중에 필요한 값은, 스캔 개시시에 보존되어 ioctl() 리퀘스트에서는 액세스 할 수 없게 되어 있습니다.

그러나, ASC_SBTIME 의 값은, 현재 진행중의 스캔 처리에 즉석에서 영향을 미칩니다. 이것에 의해, 예를 들면, 유저가 스캔을 개시할 때까지는 타임 아웃에 큰 값을 설정해, 개시 후는 작은 값을 설정하는 것으로, 유저의 스캔 중지에 즉석에서 반응한다 같게 할 수 있습니다.

pbm(5) (와)과 raw 모드의 선택은, 마이나 번호에 의해 행해집니다. ioctl() 리퀘스트에서는 행할 수 없습니다. raw 모드에서는, 지정된 비트 맵의 높이는 효과를 나타내지 않습니다.

관련 파일
/dev/asc0
    raw 출력용의 디바이스 노드.
/dev/asc0d
    raw 출력용의 디바이스 노드. ASCDEBUG 옵션을 커널 설정 파일로 지정했을 경우, 디버그 메세지가 출력됩니다.
/dev/asc0p
    pbm(5) 파일 형식 출력용의 디바이스 노드.
/dev/asc0pd
    pbm(5) 파일 형식 출력용 또한 디버그 모드의 디바이스 노드.

관련 항목
sasc(1), pbm(5)

버그
ioctl 의 서포트가 아직 동작하고 있지 않습니다.

저자
asc 드라이버는, Luigi Rizzo 하지만 썼습니다.

역사
asc 드라이버가 최초로 나타난 것은 FreeBSD 2.1 입니다.