콘텐츠로 이동

쓰기 및 읽기

이 함수들은 플러그인에서 연결된 USB 장치와 통신하는 모든 방법입니다. 명령은 장치의 프로토콜에 따라 두 가지 읽기 및 쓰기 방식과, 핸드셰이크 명령 및 고급 기능을 위한 제어 전송으로 구분됩니다.

고급 방법(bulk_transfer, control_transfer, input_report) 및 네트워크/시리얼 통신에 대해서는 고급 통신을 참조하십시오.

이 함수는 장치의 현재 선택된 엔드포인트에서 Hid_Write 명령을 수행합니다. 대부분의 장치에서 사용하는 쓰기 함수로, 가장 일반적으로 사용되는 명령입니다.

  • 참고: 다른 형태의 쓰기는 _device.send_report_입니다. 이것은 장치에 HID 기능 보고서를 전송하는 데 사용되는 쓰기 명령입니다. 기능 면에서는 device.write()와 동일합니다.
  • 참고: 제공된 데이터 배열보다 긴 길이를 설정하면 배열 끝이 0x00으로 채워집니다.
  • 참고: 대부분의 HID 장치는 쓰기 명령 앞에 0을 패딩합니다. 데이터 배열 앞에 추가 0x00을 배치하고 길이를 하나 늘려서 수행합니다. 이 값들은 데이터 전송 중 장치에 의해 제거됩니다. 이는 주로 선택된 엔드포인트에 보고서 ID가 없을 때 발생합니다.
매개변수유형설명예시
DataArray1D 배열장치에 전송할 16진수 바이트를 포함하는 배열[0x08,0xAB,0xFF,0x37]
LengthInt전송할 총 패킷 길이를 나타내는 정수 값4

아래는 ASUS LED 컨트롤러의 패킷 생성 및 장치 전달 예시입니다.

var packet = [];
packet[0] = 0xEC; //This is the Report Id
packet[1] = 0x40; //Command
packet[2] = apply ? 0x80 | channel : channel; //Channel Number
packet[3] = start; //Led to Start on
packet[4] = count; //Led Count
packet = packet.concat(RGBData); //Array of RGB values in a [R,G,B ...] format
device.write(packet, 65); //Writing the packet to the device in 65 Bytes

이 함수는 엔드포인트 보고서 ID와 읽을 바이트 길이를 포함하는 배열을 받아 장치에서 Hid_Read를 수행합니다. 함수는 장치에서 읽은 바이트 배열을 반환합니다. 일부 장치는 버퍼 오버플로를 방지하기 위해 읽기가 필요하며, 때로는 장치에서 설정 데이터를 읽어야 합니다.

  • 참고: 다른 형태의 읽기는 _device.get_report_입니다. 장치에서 HID 기능 보고서를 가져오는 데 사용되는 읽기 명령입니다. 기능 면에서는 device.read()와 동일합니다.
매개변수유형설명예시기본값
DataArray1D 배열읽기 명령에 필요한 보고서 ID를 포함하는 배열[0x08, 0x02]
LengthInt읽을 바이트 수를 나타내는 정수 값65
TimeoutInt데이터를 반환하기 전 대기할 밀리초. 비차단 확인을 위해 0을 전달합니다.100100
반환값유형설명예시
DataArray1D 배열장치에서 읽은 모든 16진수 바이트를 포함하는 배열, 또는 타임아웃이 만료되면 빈 배열[0x08, 0x02,0x00,0x64]
  • 참고: 이 함수는 장치의 보고서 길이와 일치하는 데이터 배열을 반환합니다. 실제 읽은 바이트 수가 필요하면 device.getLastReadSize()를 사용하십시오.
  • 참고: 타임아웃이 데이터 없이 만료되면 반환값은 빈 배열이고 device.getLastReadSize()0을 반환합니다.
// Standard blocking read (100ms default timeout)
var config = device.read(packet, 65);
// Non-blocking peek — returns immediately, use getLastReadSize() to check if data arrived
var data = device.read([], 64, 0);
if(device.getLastReadSize() > 0) {
processResponse(data);
}

이 함수는 장치에 대한 마지막 read/get_report에서 읽은 바이트 수를 반환합니다.

반환값유형설명예시
BytesReadInt장치에서 읽은 바이트 수64

아래는 Glorious Model 0 마우스의 예시입니다.

function CheckPacketLength(){
var packet = [0x52]
packet = device.get_report(packet,200) //attempts to read up to 200 bytes
return device.getLastReadSize(); //Returns 186 on a successful read of the config packet
}

장치의 읽기 버퍼에 대기 중인 데이터를 지웁니다. 중요한 읽기 전에 이 함수를 호출하여 오래된 버퍼 응답이 아닌 새로운 데이터를 받도록 합니다.

  • 참고: 이 함수의 유용성은 장치와 엔드포인트에 따라 다릅니다. 장치가 플러시를 지원하지 않는 경우, device.getLastReadSize()가 0을 반환할 때까지 읽기를 반복하여 수동으로 비우십시오.
device.clearReadBuffer();
device.write(requestPacket, 64);
var response = device.read([], 64);

이 함수는 장치의 기본 플러시 메커니즘을 사용하여 장치의 읽기 버퍼를 완전히 지웁니다. 대부분의 경우 device.clearReadBuffer()를 사용하는 것이 좋습니다.

export function Initialize(){
device.flush()
if(Corsair_Get(CORSAIR_MODE) == CORSAIR_HARDWARE_MODE){
EnableSoftwareControl();
}
}

control_transfer, bulk_transfer, input_report의 전체 문서는 고급 통신을 참조하십시오.