BOSIO × BoAYo 개발 문서 전체 소스 ↗
핵심 시스템 · 화면 회전·반전

전체 화면 방향 설정

DTF1의 90도 단위 회전, 좌우·상하 반전과 입력 좌표를 설명합니다.

DTF1 확장은 화면 전체의 0·90·180·270° 회전과 좌우·상하 반전을 지원합니다. 두 투영코어가 만든 결과를 읽는 Output Core에서 처리하므로 창 투영과 타일 캐시는 그대로 재사용합니다.

Python API

from bosio_wm_client import BosioWMClient

with BosioWMClient("display-settings") as wm:
    wm.set_display_transform(rotation=90, flip_x=False, flip_y=False)
    wm.set_display_transform(rotation=0, flip_x=True, flip_y=False)
    wm.set_display_transform()  # 기본 방향으로 복구

시계 방향 회전을 먼저 적용하고, 그 뒤 출력 화면 축 기준으로 좌우·상하를 반전합니다. 호출마다 전체 설정을 지정하며 생략한 반전은 false입니다. 실행 중인 WM이 드라이버 잠금을 잡고 설정하므로 앱은 별도로 Overlay를 로드하지 않습니다. DTF1이 없는 이전 비트스트림에서는 오류로 거부합니다.

명령줄

SphericalWM 저장소 루트에서 실행합니다. 먼저 M=32 데몬이 실행 중이어야 합니다.

python overlays/dual_projection/run.py --script display_transform.py --rotation 90
python overlays/dual_projection/run.py --script display_transform.py --flip-x
python overlays/dual_projection/run.py --script display_transform.py --flip-y
python overlays/dual_projection/run.py --script display_transform.py --status
python overlays/dual_projection/run.py --script display_transform.py

영상 범위와 IMU

HDMI 신호는 계속 1280×720@60Hz입니다. 화면 중심과 샘플 간격을 유지하므로 90·270°에서는 논리 시야가 720×1280으로 바뀝니다. 기존 가로 화면을 압축하거나 검은 띠를 넣는 방식이 아니며, 시야 바깥으로 나가는 내용과 새로 들어오는 영역이 생깁니다.

IMU와 소프트웨어 자세 모두 같은 변환 경로를 사용합니다. 설정은 프레임 경계에서 적용되며, 정지한 IMU에서도 방향 변경에 반응합니다. 방향만 바꿀 때 추가 창 투영 작업과 장면 commit은 0건입니다. 설정은 하드웨어 리셋·재프로그래밍 전까지 유지되고 부팅 설정 파일에는 자동 저장되지 않습니다.

입력 좌표

기존 구면 포인터 API와 IMU 시선은 월드 좌표를 유지합니다. 화면 방향 기준 이동은 wm.input_display_move(dx, dy)를 사용합니다. 단위는 각도이며 +x는 오른쪽, +y는 아래입니다. WM은 현재 적용된 회전·반전을 역변환합니다. evdev 마우스도 같은 보정을 사용합니다.

레지스터와 검증

주소역할
0x48요청 모드: bits 1:0 회전 횟수, bit 2 좌우 반전, bit 3 상하 반전
0x4c프레임 경계에서 실제 적용된 모드
0x50기능 식별값 0x44544631 (DTF1)

2026-10-18 검증에서 SW 자세의 16개 조합을 실제 HDMI 캡처와 비교했고, IMU/API의 16개 조합도 통과했습니다. 추가 투영 작업·HDMI lock loss·추가 underflow는 모두 0이었습니다. RTL에서는 48개 변환 트랜잭션과 고정된 센서 패킷에서의 16개 모드를 검사했습니다.

통합 사용법과 검증 · RTL 계수 계산과 레지스터 · 캡처 원시 결과

BOSIO × BoAYo · 문서 저장소 · 구현 원본은 각 소스 저장소에서 확인하세요.