핸들
Haply::하드웨어API::장치::핸들
Haply 핸들과 상호 작용하는 데 필요한 로직을 캡슐화합니다.
경고 핸들은 아직 개발 중인 영역이며 API가 안정적이거나 이전 버전과의 호환성이 보장되지 않습니다.
이 클래스는 장치에서 특정 이벤트가 수신될 때 호출되는 보호된 가상 메서드 중 하나를 재정의하도록 특수화되어야 합니다:
- OnReceiveHandleInfo: 디바이스 절전 해제 후 호출됩니다.
- 장치에서 새 상태 업데이트를 수신할 때 호출되는 OnReceiveHandleStatusMessage입니다.
- 장치에서 오류를 보고할 때 호출되는 OnReceiveHandleErrorResponse.
생성자의 매개변수로 핸들의 직렬 포트를 나타내는 SerialStream 클래스의 인스턴스가 필요합니다. 일단 생성되면 SendDeviceWakeup 명령은 핸들을 깨우고 최신 디바이스 상태를 검색하기 위해 RequestStatus 명령을 전송할 수 있도록 합니다. Receive 메서드는 디바이스의 응답을 처리하고 오버로드된 가상 메서드 중 하나를 트리거하는 모든 명령 메서드를 따라야 합니다.
핸들 구현은 필드에 의해 길이가 결정되는 장치 상태의 필드를 사용하여 사용자 지정할 수 있습니다. Haply Quill의 사용자 필드는 다음과 같이 정의됩니다:
- : 손잡이의 평평한 표면에 있는 버튼의 상태로, 1은 누르고 있는 상태임을 나타냅니다.
- : 배터리 잔량으로, 값이 100이면 배터리가 가득 찼음을 의미합니다.
이 클래스 내의 모든 메서드는 각각의 IO 연산이 완료되거나 에러가 발생할 때까지 차단됩니다. 핸들은 약 50Hz의 주파수로 작동합니다. 여러 장치가 동일한 스레드로 관리되는 경우 전체 처리 주파수는 모든 장치의 가장 낮은 주파수에서 제한됩니다. 따라서 동일한 스레드 내에서 핸들과 Inverse3 를 같은 스레드 내에 혼합하는 것은 권장되지 않습니다.
색인
클래스
회원
이름 | 유형 | 설명 |
---|---|---|
USER_DATA_MAX | static constexpr uint8_t | 에 포함할 수 있는 최대 바이트 수 ... |
방법
이름 | 유형 | 설명 |
---|---|---|
핸들 | (std::iostream *) | 에서 핸들 객체를 구성합니다... |
SendDeviceWakeup | void() | 추가 명령을 허용하려면 핸들을 깨우세요. |
요청 상태 | void() | 핸들에서 최신 상태를 요청합니다. |
SendHandleState | void(const uint16_t, const uint8_t, ...) | 제공된 것으로 핸들별 사용자 상태를 업데이트하세요... |
SendHandleErrorRequest | void(const uint16_t) | 핸들에서 최신 오류 정보를 요청합니다. |
수신 | int() | 핸들로부터 응답을 수신하고 처리합니다. |
GetVersegripStatus | 버세그립 상태 응답(...) |
회원
USER_DATA_MAX
static constexpr uint8_t USER_DATA_MAX = 255
Haply 핸들의 특수 구현의 사용자 필드에 포함될 수 있는 최대 바이트 수입니다.
방법
핸들
핸들(std::iostream * 스트림)
제공된 스트림에서 핸들 객체를 생성합니다.
매개변수
- 스트림 디바이스와 연결된 직렬 포트를 나타내는 스트림 객체입니다. 스트림의 수명은 Handle 객체의 수명과 일치하거나 초과해야 합니다. 이 스트림은 SerialStream 클래스를 사용하여 구성하는 것이 좋습니다.
SendDeviceWakeup
void SendDeviceWakeup()
추가 명령을 허용하려면 핸들을 깨우세요.
이 명령은 다른 명령을 전송하기 전에 장치로 보내야 합니다.
핸들 응답을 처리하기 위해 Receive 호출이 뒤따라야 하며, 이 호출은 다시 OnReceiveHandleInfo 오버로드된 메서드를 호출합니다.
요청 상태
void RequestStatus()
핸들에서 최신 상태를 요청합니다.
핸들 응답을 처리하기 위해 Receive 호출이 뒤따라야 하며, 이 호출은 다시 OnReceiveHandleStatusMessage 오버로드된 메서드를 호출합니다.
SendHandleState
void SendHandleState( const uint16_t device_id, const uint8_t user_data_length, const uint8_t * user_data)
제공된 인수를 사용하여 핸들별 사용자 상태를 업데이트합니다.
핸들 응답을 처리하기 위해 Receive 호출이 뒤따라야 하며, 이 호출은 다시 OnReceiveHandleStatusMessage 오버로드된 메서드를 호출합니다.
매개변수
-
device_id 디바이스의 아이디입니다. 이 필드는 현재 핸들에서 무시되며 0으로 안전하게 설정할 수 있습니다.
-
user_data_length user_data에서 읽을 바이트 수입니다. USER_DATA_MAX보다 작아야 합니다.
-
user_data 핸들별 상태를 업데이트하기 위해 읽고 사용할 바이트입니다. 이 바이트의 형식을 지정하는 방법은 해당 핸들의 설명서를 참조하세요.
SendHandleErrorRequest
void SendHandleErrorRequest(const uint16_t device_id)
핸들에서 최신 오류 정보를 요청합니다.
핸들 응답을 처리하기 위해 Receive 호출이 뒤따라야 하며, 이 호출은 다시 OnReceiveHandleErrorResponse 오버로드된 메서드를 호출합니다.
매개변수
- device_id 디바이스의 아이디입니다. 이 필드는 현재 핸들에서 무시되며 0으로 안전하게 설정할 수 있습니다.
수신
int Receive()
핸들로부터 응답을 수신하고 처리합니다.
다음 메서드 중 하나에 대한 호출을 따라야 하며 연결된 오버로드된 메서드를 호출합니다:
- SendDeviceWakeup -> OnReceiveHandleInfo
- 요청 상태 -> 온수신 핸들 상태 메시지
- SendHandleState -> OnReceiveHandleStatusMessage
- SendHandleErrorRequest -> OnReceiveHandleErrorResponse
디바이스에서 메시지를 수신하거나 오류가 발생할 때까지 차단합니다.
반환
작업이 성공적으로 완료되면 0을 반환합니다. 오류가 발생하면 메서드는 음수 값을 반환하고, 오류는 stderr에 출력되며 거짓을 반환할 수 있습니다.
GetVersegripStatus
버세그립상태 응답 GetVersegripStatus()