영수증 프린터 시리얼 연결이 아닌 USB 연결로 인쇄하기

현재 데스크탑에 영수증 프린터를 연결해야 되는 상황이고
Serial to USB 젠더 케이블을 사용해서 세팅하고 있습니다.
SAM4S GCube-102 모델을 사용중인데
GIANT&GCUBE Tool.exe 프로그램에 보면 USB 연결로 인쇄가 되더군요.
그럼 젠더 케이블을 따로 구매하지 않고 동봉되어 있는 USB 케이블을 사용하면 되는건데
여기서 프린터 드라이브 설치를 따로 안하고 인쇄되는게 조금 신기하네요.
USB가 연결되면 장치관리자에 소프트웨어 장치 목록에서
SAM4S Gcube-102 가 표시되는걸 확인했습니다.
vid = 0x1C8A, pid = 0x3A37 로 확인되어

int vid = 0x1C8A;
int pid = 0x3A37;

  1. LibUsbDotNet 라이브러리 사용(실패)
    var finder = new UsbDeviceFinder(vid, pid);
    var usb = UsbDevice.OpenUsbDevice(finder);
    // usb 는 null;

  2. win32 winspool.Drv (실패)
    프린터 드라이버로 잡혀있는게 아니라서
    OpenPrinter(“SAM4S GCUBE-102”) 로 프린터에 연결이 안되네요.

“인쇄 관리 → 모든 드라이버” 에는 SAM4S GCUBE-102가 잡혀있지만
제어하는 방법을 모르겠네요.
혹시 해보신 분 계신가요? 도움이 필요합니다.

해당 제품을 사용해 보지는 않아 정확한 답이 될 수 는 없겠지만 USB 연결이라고 드라이버가 필요 없지는 않을 것 같아요. USB 연결을 해도 이것을 시리얼로 인식하기도 하고요 장치관리자에서 어떻게 인식되는지 혹은 관련 제품에서 USB 관련 드라이버를 제공하는지를 살펴볼 필요가 있어요.

관련 사이트에 소스코드도 제공하는 것으로 보이니 그 코드를 참고해 보시는건 어떨까요?

sam4s.co.kr/kor/asp/download.asp?v_name=&v_cate=KCA04&v_goods=111

답변 감사합니다
공홈에 메뉴얼과 샘플코드는 이미 확인한 상태였구요.
샘플코드는 윈도우용 프린터 드라이브 설치된 환경에서
테스트 가능했어요
드라이버 설치없이 device id나 usb path만 가지고
Raw data 인쇄하는게 쉽게 처리되는 부분이 아닌거
같더라구요.
어떤 장비가 됐든 usb 만 연결하면 아무설정없이
바로 인쇄되는 환경을 만들어 보고 싶었어요

그걸 가능하게 하는 게 드라이버 입니다.
영수증 프린터 표준이 있는지 모르겠지만 보통은 응용프로그램에서 플러그인 형태로 여러 기기 지원합니다.
근데 질문이 모호해서 댓글 쓰면서도 헷갈리는군요

열전사 프린터의 데이터 송수신 인터페이스를 Serial 이 아닌 Usb로 바꾸고 싶은거죠.
단, 윈도우용 드라이버를 설치하지 않는 조건이나 보니
winspool.drv를 거치지 않고 인쇄를 하고 싶은거에요.

구글링으로 비슷한 질문글을 찾아봤는데 작동하는 코드를 못찾았네요.
win api로 usb 경로에 파일을 만들어주면 된다는 힌트를 찾았지만
filepath경로가 문제인지 오류가 발생하네요.

[DllImport(“kernel32.dll”, CharSet = CharSet.Auto, SetLastError = true)]
public static extern SafeFileHandle CreateFile(
[MarshalAs(UnmanagedType.LPTStr)] string filename,
[MarshalAs(UnmanagedType.U4)] FileAccess access,
[MarshalAs(UnmanagedType.U4)] FileShare share,
IntPtr securityAttributes,
[MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,
[MarshalAs(UnmanagedType.U4)] FileAttributes flagsAndAttributes,
IntPtr templateFile);

var filepath = @“\.\USBPRINT\SAM4SGcube-102\8&324e0725&0&USB003”;

var ptr = CreateFile(filepath, FileAccess.ReadWrite, FileShare.ReadWrite, IntPtr.Zero, FileMode.Open, FileAttributes.Normal, IntPtr.Zero);

FileStream stream = new FileStream(ptr, FileAccess.Write);
// 여기서 에러 발생하네요.

아래는 SAM4S Gcube-102의 디바이스 속성입니다.

USBPRINT\SAM4SGcube-102\8&324e0725&0&USB003 장치가 구성되었습니다.

드라이버 이름: prnms013.inf
클래스 GUID: {62f9c741-b25a-46ce-b54c-9bccce08b6f2}
드라이버 날짜: 06/21/2006
드라이버 버전: 10.0.22621.1
드라이버 공급자: Microsoft
드라이버 섹션: MS_GENERICPRINT
드라이버 순위: 0xFF3000
일치하는 장치 ID: CID_MS_GENERICPRINT
순위가 높은 드라이버:
업데이트된 장치: false
부모 장치: USB\VID_1C8A&PID_3A37\0000000000002

USB는 단지 인터페이스일 뿐 USB를 이용해서 해당 디바이스가 어떤 프로토콜로 동작하는지는 그 제품에 따릅니다. 즉, 드라이버를 사용하지 않고 직접 USB로 제어하려면 그 디바이스에서 정의된 방식을 사용해야 하고요, 제품에서 관련 기능을 API로 제공하지 않거나 또는 문서로 어떻게 접근할 수 있는지 상세하게 나와있지 않고서는 제어할 도리가 없지요. 그 제품 회사에 문의해 보시는 것이 가장 빠를 것 같아요

3개의 좋아요

dimohy님 말씀대로 전적으로 제조사에서 어떻게 만들었냐의 영역입니다.
대부분의 USB장치는 드라이버 없이 구동을 고려하지 않습니다.
드라이버 설치 없이 구동되는것도 어디까지나 시스템에 기본 드라이버가 있는거죠.
USB Audio, USB Camera, USB Monitor,… 이런애들 말이죠.
물론 이런것들도 딱 기본구동만될 뿐 제품만의 고유한 기능은 드라이버를 설치해야만 구동 합니다.

결론은 제조사에 혹시 드라이버 설치 없이 기본 윈도우 드라이버로 잡힌 상태에서 구동시킬 API나 프로토콜이 있는지 물어보는것이 가장 확실합니다.

1개의 좋아요

위에서 다른분들이 답변 한거에 추가 하자면
usb로 연결하면 윈도우 프린터 및 스캐너 장치 목록으로 추가되어
인쇄하게 되면 윈도우 프린터 풀을 통해 인쇄가 되더라구요
(물론 프린터 드라이버 설치가 선행 되어야 합니다!)

개발언어가 c# 이면 System.Drawing.Printing.PrintPageEventHandler 이쪽 이용해서 프린터를 제어 하였습니다.

제가 인쇄했던 프린터는 써멀프린터 종류 였고 제조사는 빅솔론 이었습니다.

드라이버만 설치하면 문제없이 인쇄되는 상황이었고

하드웨어 추가에서 Generic Text only 드라이버 설치해서

인쇄 처리하고 있습니다.

처음 GIANT&GCUBE Tool.exe 이 프로그램 때문에 호기심이 생겼거든요.

드라이버가 설치되어 있지 않은 PC에서 USB만 연결해서 인쇄되는걸 보고…

USB 메모리스틱 처럼 디바이스 인터페이스 경로로 파일생성을 하면 그 파일을 읽어서

인쇄되는 방식 같아 보이는데 어렵더라구요.

그리고 구글링 해보면 저와 같은 질문을 했던 포스트를 몇개 찾았는데 c++로

해결 할 수 있을거 같은데 c# 밖엔 못해서 여기까지가 제 한계더라구요.

GIANT&GCUBE Tool.exe 비슷한 툴을 본거 같아서

SAM4S GCube-102 가 ESC/POS 을 사용해서 제어되는지 잘 모르겠네요…

(관련 포스팅 : C#에서 실행되는 ESC/POS with 써멀프린터)

한번 확인해보셔도 될거 같아요!