핸들
Haply::하드웨어API::디바이스::핸들
Haply 핸들과 상호 작용하는 데 필요한 로직을 캡슐화합니다.
경고 핸들은 아직 개발 중인 영역이며 API가 안정적이거나 이전 버전과의 호환성이 보장되지 않습니다.
이 클래스는 장치에서 특정 이벤트가 수신될 때 호출되는 보호된 가상 메서드 중 하나를 재정의하도록 특수화되어야 합니다:
- OnReceiveHandleInfo: 디바이스 절전 해제 후 호출됩니다.
- 장치에서 새 상태 업데이트를 수신할 때 호출되는 OnReceiveHandleStatusMessage입니다.
- 장치에서 오류를 보고할 때 호출되는 OnReceiveHandleErrorResponse.
생성자의 매개변수로 핸들의 직렬 포트를 나타내는 SerialStream 클래스의 인스턴스가 필요합니다. 일단 생성되면 SendDeviceWakeup 명령은 핸들을 깨우고 최신 디바이스 상태를 검색하기 위해 RequestStatus 명령을 전송할 수 있도록 합니다. Receive 메서드는 디바이스의 응답을 처리하고 오버로드된 가상 메서드 중 하나를 트리거하는 모든 명령 메서드를 따라야 합니다.
핸들 구현은 필드에 의해 길이가 결정되는 장치 상태의 필드를 사용하여 사용자 지정할 수 있습니다. 하플리 퀼의 사용자 필드는 다음과 같이 정의되어 있습니다:
- : 손잡이의 평평한 표면에 있는 버튼의 상태로, 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()