BOSIO의 포인터는 USB 마우스나 PYNQ 버튼에만 묶여 있지 않습니다. 관성 추적기, 카메라 손동작 인식기, 시선 추적기 같은 별도 프로세스도 공개 입력 API로 같은 구면 포인터를 움직이고 클릭할 수 있습니다.
연결 구조
bosio_input_client.pyBosio IPC포커스·클릭·드래그입력 데몬은 영상을 그리거나 창을 소유하지 않습니다. 장치별 측정값을 구면의 방위각·고도각으로 바꾼 뒤 /tmp/bosio-wm.sock에 전달합니다. Bosio 창 관리자가 그 위치의 최상위 창을 찾고 기존 마우스·BTN2와 같은 규칙으로 이벤트를 보냅니다.
빠른 예제
from bosio_input_client import BosioInputClient
with BosioInputClient("camera-gesture") as pointer:
pointer.move_absolute(azimuth=25.0, elevation=-18.0)
pointer.click()
드래그는 버튼을 누른 뒤 포인터를 계속 옮기고 마지막에 놓습니다.
pointer.button(True)
pointer.move_relative(delta_azimuth=4.0, delta_elevation=0.0)
pointer.button(False)
입력 API
| 함수 | 기능 |
|---|---|
move_absolute(azimuth, elevation) | 포인터를 도 단위의 절대 구면 위치로 옮깁니다. |
move_relative(delta_azimuth, delta_elevation) | 현재 위치에서 각도만큼 상대 이동합니다. |
button(pressed, button="left") | 누름·놓기를 전달합니다. 누른 상태로 이동하면 드래그가 됩니다. |
click(button="left") | 한 번의 누름과 놓기를 한 요청으로 전달합니다. |
scroll(delta) | 스크롤 변화량을 전달합니다. |
state() | 포인터 위치, 맞닿은 창, 현재 버튼 상태를 읽습니다. |
좌표와 보정
API 좌표는 도 단위입니다. 방위각은 -180°..+180°에서 이어지고 고도각은 -89.5°..+89.5°로 제한됩니다. 카메라 픽셀이나 정규화 좌표를 그대로 보내지 않고, 입력 데몬에서 카메라 시야각·센서 장착 방향·중립점을 적용해 방위각과 고도각으로 바꿉니다.
그래야 Bosio는 장치 종류를 몰라도 되고, 서로 다른 센서가 같은 입력 API를 사용할 수 있습니다.
여러 입력원과 비정상 종료
각 연결은 독립된 입력원으로 구분됩니다. 여러 입력원이 같은 버튼을 눌렀다면 마지막 입력원이 놓을 때 버튼이 해제됩니다. 입력 프로세스가 버튼을 누른 채 종료되거나 소켓 연결이 끊기면 Bosio가 그 입력원에 속한 버튼을 자동으로 놓아 드래그가 계속 남지 않게 합니다.
직접 실행해 보기
python3 bosio_input_demo.py --azimuth 0 --elevation -59
python3 bosio_input_demo.py --azimuth 0 --elevation -59 --drag-degrees 12
Python 이외의 언어에서는 한 줄 JSON IPC의 input_warp, input_move, input_button, input_click, input_scroll, input_status 호출을 사용할 수 있습니다.
외부 포인터 입력 API 문서와 Python 입력 클라이언트에서 전체 내용을 볼 수 있습니다.
화면 회전·반전 상태에서 이동
위 구면 API의 방위각·고도각 의미는 그대로입니다. 화면 기준 이동이 필요하면 최신 BosioWMClient의 input_display_move(dx, dy)를 사용하세요. 각도 단위로 +x는 화면 오른쪽, +y는 아래이며 실제 적용된 출력 방향을 역변환합니다. evdev 마우스도 이 보정을 사용합니다. 회전·반전 설정과 함께 사용할 수 있습니다.