Smeltrix - Development Record

Smeltrix - Development Record
Smeltrix - 개발 기록

Languages: [EN] English | [KO] 한국어

Overview

소개

Development Direction

개발 방향

Smeltrix is currently being implemented based on the following design principles.

Smeltrix는 현재 다음의 설계 원칙들을 기반으로 구현 하고 있습니다.

  • Inspired by the philosophy of the JSF AV C++ standard, Smeltrix enhances both safety and performance
  • One-Way Data Flow: Ensuring structural stability by restricting data flow to a single direction.
  • Lock-Free Consistency: Maximizing multi-threaded efficiency by minimizing synchronization overhead.
  • RW-Separated: Eliminating data contention through physical memory isolation.
  • Zero-Parameter: Optimizing call stacks via direct context referencing.
  • Cache-Line Aligned: Designing memory layouts optimized for CPU cache structures.
  • Unidirectional Pipeline: Maintaining independent execution environments by decoupling modules.
  • Ownership & Borrowing via Design Isolation: Enhancing runtime stability through explicit memory authority management based on structural separation.
  • JSF AV C++ 표준의 철학을 참고하여 안전성과 성능을 강화
  • 데이터 일방통행: 데이터의 흐름을 단방향으로 제한하여 구조적 안정성 확보
  • 락-프리 일관성: 동기화 오버헤드 최소화를 통한 멀티스레드 효율 극대화
  • 읽기/쓰기 분리: 메모리 영역 격리를 통한 데이터 경합 원천 차단
  • 인자 없는 호출: 컨텍스트 직접 참조를 통한 호출 스택 최적화
  • 캐시 라인 정렬: CPU 캐시 구조에 최적화된 메모리 레이아웃 설계
  • 단방향 파이프라인: 모듈 간 결합도를 제거하여 독립적인 실행 환경 유지
  • 설계 분리를 통한 소유권 및 빌림: 명확한 메모리 권한 관리를 통해 런타임 안정성 강화

Development Status

개발 상황

[Core]

  • [In Progress 70%]* 1st Full Redesign and Refactoring
    • [Completed] UI Code Decoupling and Function Pointer Transition
  • [Pending] Custom Driver (External Definition File Structure)
  • [Pending] Launcher/Updater/Guardian-based Runtime Protection System
  • [Pending] Anti-Cheat Detection Countermeasures

[Resource Management]

  • [Pending] FPS-based TDP Control - ADLX, RyzenAdj
  • [Pending] UMPC Screen Brightness
  • [Pending] Set VRAM capacity
  • [Completed] TDP Management - RyzenAdj
  • [Completed] Windows Power Policy - Powercfg
  • [Completed] CPU Clock Control - Powercfg
  • [Completed] GPU Clock Control - RyzenAdj (Limited: Clock control release requires reboot)
  • [Completed] Charging Limit - WinRing0
  • [Completed] Fan Control - WinRing0

[Input]

  • [In Progress 30%] Virtual Controller - ViGEmBus
  • [In Progress 20%] Rear Buttons (Operation analysis completed, verified using a standalone test application)
  • [Completed] Controller - XInput
  • [Completed] Controller Hooking - Detours (Considering hidhide)
  • [Completed] Device-Specific Keys - Short/Long Press Action Support
  • [Completed] Controller Mouse Mode - XInput

[Sensor]

  • [In Progress 50%] Gyro Sensor - WinRT
  • [In Progress 70%] RGB Control - WinRing0
  • [Pending] RGB Alarm, Options: (RGB Active Only / Force Enable)
  • [Pending] LT Pressure-based Gyro Aiming Mode (Light -> Fast/Large, Deep -> Precise)
  • [Completed] Gyro UDP Server (Shared Memory Communication) Reference

[Monitoring]

  • [In Progress 90%] RTSS (Overlay) - Logic Completed, Custom Config UI Required
  • [In Progress 30%] Custom Overlay, UI - RTSS Style, Ring Style
  • [Completed] CPU Monitoring - PDH
  • [Completed] GPU Monitoring - ADLX
  • [Completed] TDP Monitoring - RyzenAdj
  • [Completed] Battery Monitoring - DeviceIoControl

[Service]

  • [Completed] Message Notification - WinRT
  • [Completed] App Profile
  • [Completed] Audio Management

[코어]

  • [진행 70%]* 1단계 전면 재설계 및 리팩토링
    • [완료] UI 코드 분리 및 함수 포인터 전환
  • [대기] 자체 드라이버(외부 정의 파일 구조)
  • [대기] 런처/업데이터/가디언 기반 런타임 보호 시스템
  • [대기] 치트 탐지 대응

[자원관리]

  • [대기] FPS 기반 TDP 컨트롤 - ADLX, RyzenAdj
  • [대기] UMPC 화면 밝기
  • [대기] VRAM 용량 설정
  • [완료] TDP 관리 - RyzenAdj
  • [완료] Windows 전원 정책 - Powercfg
  • [완료] CPU 클럭 제어 - Powercfg
  • [완료] GPU 클럭 제어 - RyzenAdj (제한적: 클럭 제어 해제는 재부팅 필요)
  • [완료] 충전 제한 - WinRing0
  • [완료] 팬 제어 - WinRing0

[입력]

  • [진행 30%] 가상 컨트롤러 - ViGEmBus
  • [진행 20%] 후면 키 (작동 분석 완료, 단독 테스트 애플리케이션을 통해 검증 완료)
  • [완료] 컨트롤러 - XInput
  • [완료] 컨트롤러 후킹 - Detours (hidhide 고려중)
  • [완료] 기기 전용 키 - 짧게/길게 기능 지원
  • [완료] 컨트롤러 마우스 모드 - XInput

[센서]

  • [진행 50%] 자이로 센서 - WinRT
  • [진행 70%] RGB 제어 - WinRing0
  • [대기] RGB 알람, 옵션: (RGB 사용시에만 / 강제 활성화)
  • [대기] LT 압력에 따른 자이로 조준 모드 (가볍게 -> 빠름, 깊게 -> 정밀)
  • [완료] 자이로용 UDP 서버 (공유 메모리 통신) 참고자료

[모니터링]

  • [진행 90%] RTSS (오버레이) - 기능 완료, 커스텀 설정 UI 필요
  • [진행 30%] 자체 오버레이, UI - RTSS스타일, Ring 스타일
  • [완료] CPU 모니터링 - PDH
  • [완료] GPU 모니터링 - ADLX
  • [완료] TDP 모니터링 - RyzenAdj
  • [완료] 배터리 모니터링 - DeviceIoControl

[서비스]

  • [완료] 메시지 알림 - WinRT
  • [완료] 앱 프로파일
  • [완료] 오디오 관련

Development Record

개발 기록

version - 0.0.7.0-prototype

버전 - 0.0.7.0-prototype

  • Added: Flowline (Hardware Abstraction Layer)
  • Added: Dmesg (Detailed log system)
  • Added: Function Pointer-based Hybrid Timer (Supports Real-time Switching between Standard / TSC-based Modes)
  • 추가: Flowline (하드웨어 추상화 계층)
  • 추가: Dmesg (상세 로그 시스템)
  • 추가: 함수 포인터 기반 하이브리드 타이머 (표준/TSC 기반 실시간 스위칭 지원)

version - 0.0.6.0-prototype / 20,376 LOC

버전 - 0.0.6.0-prototype / 20,376 LOC

  • Added: Loop Task Scheduler for periodic sensor/monitoring updates
  • Added/Changed: Introduced a Pipeline Abstraction Layer between modules and UI to achieve decoupling
  • Added/Changed: UI size individual adjustment -> Unified UI scaling (Width, Height, DPI, based on 720p~8K)
  • Added/Changed: Independent audio service / Changed existing audio synchronization function to shared memory synchronization
  • Added: Quick access Ring UI (Toggle Support)
  • Added: RTSS-style Overlay
  • Added: RTSS Auto-Launch/Recovery option
  • Changed: UI-related function calls -> converted to function pointers
  • Changed: Global/scattered variables -> consolidated into app context
  • Changed: Configuration handling structure from if-else -> lambda + map 1:1 mapping
  • Changed: Switched from individual asynchronous threads to a single shared worker thread system
  • Changed: Cache-line aligned, false-sharing-aware runtime state architecture
  • Changed: Removed RGB Global Brightness Control -> Added Individual Color Alpha (Transparency) Support
  • Changed: Updated Dear ImGui to v1.92.6 WIP
  • Changed: Replaced System Modal with standard rendering and integrated into the UI dispatcher
  • Changed: Default Windows tray menu -> ImGui rendered menu
  • Changed: Modified ImGui_ImplWin32_CreateWindow
  • Changed: Message map-based localization -> context-based
  • Changed: Modified ImGui tooltip and popup malfunction in multiviewport
  • Changed: RTSS, PDH, Battery, Fan, Xbox Controller, ADLX, AppProfile class removed -> Function+Context
    Independent Loop -> Task Scheduler
  • Changed: Audio, Notification, RGB, RyzenAdj class removed -> Function+Context
  • Changed: Deprecated old EC code, rewrote functions and context from scratch
  • Changed: Old EC dependent battery, fan, and RGB functions have all been rewritten
  • Changed: Battery information changed from WMI to DeviceIoControl
  • Changed: Project Name Ayo Control -> Smeltrix(Smelt + Matrix)
  • 추가: 센서/모니터링 주기 작업을 위한 루프용 작업 스케줄러
  • 추가/변경: 모듈, UI 사이에 파이프라인 계층 추가로 결합도 제거
  • 추가/변경: UI 크기 개별 조절 -> UI 크기 통합 스케일링 (Width, Height, DPI, 720p~8K 기준)
  • 추가/변경: 독립 오디오 서비스 / 기존 오디오 동기화 기능 -> 공유 메모리 동기화로 변경
  • 추가: ImGui 멀티 뷰포트 기반 독립 윈도우 구조 적용
  • 추가: 링 UI
  • 추가: RTSS 스타일 오버레이
  • 추가: RTSS 자동 실행/복구 옵션
  • 변경: UI 관련 함수 호출 -> 함수 포인터로 변경
  • 변경: 전역/산재 변수 -> 앱 컨텍스트로 통합
  • 변경: 설정값 처리 구조 if-else -> 람다+맵 1:1 매핑
  • 변경: 개별 비동기 스레드에서 시스템 공용 워커 스레드 기반 구조로 전환
  • 변경: 캐시 라인 기반, false sharing 을 고려한 런타임 상태 메모리 구조 적용
  • 변경: RGB 전역 밝기 제어 삭제 -> 개별 색상 알파(투명도) 방식 추가
  • 변경: Dear ImGui v1.92.6 WIP 로 업데이트
  • 변경: 시스템 모달 삭제 -> 일반 랜더링 으로 변경 후 UI 디스패치 편입
  • 변경: 윈도우 트레이 메뉴 -> ImGui 렌더링 기반 메뉴
  • 변경: ImGui_ImplWin32_CreateWindow 수정
  • 변경: 메시지 맵 기반 다국어 구조 -> 컨텍스트 기반
  • 변경: 멀티뷰포트에서 ImGui 툴팁, 팝업 오작동 수정
  • 변경: RTSS, PDH, 배터리, 팬, 엑스박스 컨트롤러, ADLX, 앱프로필 클래스 제거 -> 함수+컨텍스트
    독립 실행 루프 -> 작업 스케줄러
  • 변경: 오디오, 알림, RGB, RyzenAdj 클래스 제거 -> 함수+컨텍스트
  • 변경: 기존 EC 코드 폐기, 함수+컨텍스트 새로 작성
  • 변경: 기존 EC 의존 기능 배터리, 팬, RGB 기능 재작성
  • 변경: 배터리 정보 WMI 기반 -> DeviceIoControl 기반으로 변경
  • 변경: 프로젝트명 Ayo Control -> Smeltrix(Smelt + Matrix)

Note

개발 및 분석 노트

Reasons for Redesign

  • Most core features have reached the completion stage
  • Adding the remaining features under the current structure would make future maintenance and development direction unsustainable, therefore a full architectural redesign was required

Effects of Function Pointer Optimization (Partial)

  • Rendering function calls based on conditional branching -> replaced with function pointer dispatch
  • While the impact is difficult to perceive at 60Hz, a clearly noticeable improvement in responsiveness was observed on a 240Hz monitor
  • Frame time formula: T = 1000ms (1 second) / f (refresh rate)
    • 60Hz: 16.6ms
    • 240Hz: 4.16ms
  • Change: Converted if-else and switch-based branching inside the rendering loop into function pointer dispatch in order to minimize CPU decision overhead
  • Result Analysis: Unlike 60Hz where timing margins are generous, in a 240Hz environment with extremely short frame times, this reduction in even minor latency is immediately perceived as smoother responsiveness.

Ring UI

  • Implemented a ring menu overlay that operates independently from the main window, has a 100% transparent background, and is positioned at the top.
  • Newly created viewports are created independently from the existing structure, so existing settings are not applied.
  • The backend code does not support alpha by default. Disable the backend function via a flag and directly control clearing.
  • I confirmed a solution by temporarily modifying the API code for testing, but I prefer not to directly modify the API.
  • Added transparency by directly controlling the window handle automatically generated by ImGui.

System Modal

  • Issue: In a multi-viewport environment, blur effect is applied globally to all viewports
  • Symptom: Even when specifying a viewport for the modal, blur effect is still applied globally
  • Solution: Switched to standard rendering, removed the modal
  • Note: Legacy code with low priority caused the issue; chose a simple and reliable alternative without investigating further

OSD Flickering Issue

  • Problem: After enabling ImGui multi-viewport, screen flickering occurs on the first frame when dynamically creating UI.
  • Symptom: During UI creation, a black screen (uninitialized back buffer) is briefly displayed only on the first frame.
  • Cause: In the ImGui Win32 backend's ImGui_ImplWin32_CreateWindow(), the window is exposed to the OS compositor immediately upon creation, while the DX11 swap chain and render target have not yet been initialized, causing the first frame to be presented in an incomplete state.
  • Solution: Modified ImGui_ImplWin32_CreateWindow() to immediately hide the window using ShowWindow(hwnd, SW_HIDE) after creation, then display it with ShowWindow(hwnd, SW_SHOWNA) once the first frame rendering is complete.
  • Explanation: The ImGui multi-viewport API does not appear to provide an official flag or callback to control the window's initial visibility timing. While clear behavior can be controlled via existing flags, window exposure timing depends on backend implementation, making direct backend modification a structural necessity.
  • Memo: During troubleshooting, an immediate transition to Vulkan was seriously considered. Because the DX11 backend lacks clearly exposed control points, a long-term migration is under evaluation.

ImGui pop-up elements malfunction

  • Issue: After enabling ImGui multi-viewport, some pop-up elements (combo boxes, tooltips, etc.) do not appear.
  • Symptom: Pop-up elements do not appear if their size exceeds the UI boundaries.
  • Cause: It appears to be an attribute disconnection between Windows DWM and ImGui Viewports. rather than a bug, it is a rendering policy mismatch.
  • Solution: Force the properties of the pop-up elements to be set to the main viewport.

Audio Service Separation

  • Problem: Some COM-based functions are not working during refactoring.
  • Symptom: The file picker, battery information, and audio volume services malfunction
  • Cause: Due to an old COM threading model issue, APARTMENTTHREADED and MULTITHREADED functions do not work.
  • Solution: The audio service was separated from the previously created Gyro server and then controlled via shared memory communication.
  • Description: It appears that Windows backward compatibility still affects the service. Even a simple file browser is experiencing issues, requiring changes to the execution threads themselves.
  • Note: Each service was planned to be separated in the future, but since the COM based function itself seemed to have potential risks, physical separation of audio was carried out first.

Project Name Change

  • The initial version was a front-end app providing simple TDP management and shortcut functions, and was sufficiently named Ayo Control.
  • As its low-level hardware control and data optimization logic deepened, it evolved far beyond the scope of a simple control app.
  • Accordingly, the name was changed to reflect its nature as a system engine and integrated platform that directly controls hardware, transcending the mere utility.

재설계 이유

  • 핵심 기능 대부분 완성 단계
  • 남은 기능을 추가할 경우 현 구조가 추후 유지보수와 개발 방향에 적합하지 않아 전면 재설계

함수 포인터 변경 효과(일부)

  • 분기 제어에 의한 랜더링 함수 호출 -> 함수 포인터 교체
  • 60Hz 에서는 체감이 어려웠지만 240Hz 모니터에서는 확실히 체감 가능한 반응 속도를 확인
  • 프레임 타임 공식: T=1000ms(1초)/f (주사율)
    • 60Hz: 16.6ms
    • 240Hz: 4.16ms
  • 변경 사항: 렌더링 루프 내의 if-else, switch 분기 제어를 함수 포인터 방식으로 전환하여 CPU 판단 오버헤드를 최소화
  • 결과 분석: 가용 시간이 넉넉한 60Hz와 달리, 프레임 타임이 극도로 짧은 240Hz 환경에서는 이 미세한 지연 시간(Latency) 단축이 매끄러운 반응 속도로 즉각 체감.

링 UI

  • 메인 윈도우와 독립적으로 동작, 배경이 100% 투명하고 최상단에 위치하는 링 UI 구현
  • 새로 생성된 뷰포트는 기존 구조와 별개로 독립 생성, 기존 설정이 적용 안됨
  • 백앤드 코드는 기본적으로 알파 미지원, 플래그를 통한 백엔드 기능을 비활성화 후 직접 클리어 제어
  • 테스트를 위해 API 코드 임시 수정으로 문제 해결 확인, 하지만 API 직접 수정을 선호하지 않음
  • ImGui 가 자동 생성한 윈도우 핸들을 직접 제어하여 투명도 추가

시스템 모달

  • 문제: 멀티 뷰포트 환경에서 모든 뷰포트에 흐림 효과가 전역 적용
  • 증상: 모달에 뷰포트를 지정하여도 흐림 효과는 여전히 전역 적용
  • 해결: 일반 랜더링으로 변경, 모달 삭제
  • 설명: 레거시 코드로 우선순위가 낮은 상태에서 문제 발생, 간단하고 확실한 대안 선택으로 문제 조사 없이 바로 변경

OSD 화면 깜박임

  • 문제: ImGui 멀티 뷰포트 활성화 이후, 동적 UI 생성 시 첫 프레임에서 화면 깜박임 발생
  • 증상: UI가 생성될 때 첫 프레임에 한해 검은 화면(미초기화 백버퍼)이 순간적으로 출력됨
  • 원인: ImGui Win32 백엔드의 ImGui_ImplWin32_CreateWindow()에서 윈도우가 생성되는 즉시 OS 합성 단계에 노출되지만, 해당 시점에는 DX11 스왑체인과 렌더 타겟이 아직 초기화되지 않아 첫 프레임이 미완성 상태로 표시됨
  • 해결: ImGui_ImplWin32_CreateWindow()를 수정하여 창 생성 직후 ShowWindow(hwnd, SW_HIDE)로 숨긴 뒤, 첫 프레임 렌더 완료 시점에 ShowWindow(hwnd, SW_SHOWNA)로 표시하도록 변경
  • 설명: ImGui 멀티 뷰포트 API에는 윈도우 생성 시 표시 타이밍을 제어할 공식 플래그나 콜백이 존재하지 않는 것으로 보임. Clear 동작에 대한 제어 플래그는 제공되지만, 윈도우 노출 타이밍은 백엔드 내부 구현에 의존하므로 백엔드 코드 수정이 불가피한 구조적 한계로 보임.
  • 메모: 문제 해결 과정에서 당장 Vulkan으로의 전환을 진지하게 고려, DX11 백엔드는 내부 제어 지점이 명확하지 않아 장기적으로는 전환을 고려.

ImGui 모든 팝업 동작 요소의 일부 오작동

  • 문제: ImGui 멀티 뷰포트 활성화 이후, 팝업 동작 요소(콤보박스, 툴팁 등)의 일부가 나오지 않음
  • 증상: 팝업 요소의 크기가 UI 경계선을 넘게되면 나타나지 않음
  • 원인: Windows DWM 과 ImGui 뷰포트 사이의 속성 단절 문제로 버그가 아닌 렌더링 정책 불일치로 보임
  • 해결: 팝업 요소의 속성을 메인뷰포트로 강제 설정

오디오 서비스 분리

  • 문제: 리팩토링중 기능 일부중 COM 기반 기능들이 작동하지 않음
  • 증상: 파일 선택기, 배터리 정보, 오디오 볼륨 서비스가 작동 불가
  • 원인: 오래된 COM 쓰레드 모델 문제로 APARTMENTTHREADED, MULTITHREADED 에 따라 작동 불가
  • 해결: 이전에 만든 자이로서버 기반으로 오디오 서비스를 분리 후 공유 메모리 통신으로 조작
  • 설명: 윈도우즈의 하위 호환성이 영향을 주는것으로 보임, 파일 브라우져 조차 문제가 생겨 실행 쓰레드 자체를 변경해서 각각 적용해야 하는것으로 보임
  • 메모: 각 서비스는 차후에 분리할 예정이였지만 COM 기반 기능 자체가 잠재적 위험이 있어 보여 우선 오디오 부터 물리적 분리를 단행.

프로젝트명 변경

  • 초기 버전은 간단한 TDP 관리와 단축키 기능을 제공하는 프론트엔드 앱이였으며 Ayo Control 이라는 이름으로 충분
  • 하드웨어 로우레벨 제어와 데이터 최적화 로직이 점점 깊어지면서, 단순한 컨트롤 앱의 범위를 훨씬 넘어서는 규모로 발전
  • 이에 따라, 단순 유틸리티를 넘어 하드웨어를 직접 제어하는 시스템 엔진이자 통합 플랫폼으로서의 성격을 반영하여, 명칭을 변경

version - 0.0.5.0-prototype / 14,477 LOC

버전 - 0.0.5.0-prototype / 14,447 LOC

  • Added: Controller Hooking
  • Added: Virtual Controller
  • Added: GPU clock limit feature, enable option, and UI checkbox – SMU table entry 213
  • Added: CPU clock limit enable feature and UI checkbox
  • Added: Forced initialization before policy change in Performance Mode to prevent power policy conflicts
  • Added: Controller Mapping UI
  • Added: Simplified Chinese support
  • Changed: UI improvements
    • Added split button
    • Removed hardcoded values for all UI elements
    • dynamic resizing support to handle window width changes
    • Reorganized settings UI into table layout for consistent alignment
    • Separate theme information, manage it using JSON files
  • Changed: Hotkey handling switched from Low-Level Key Hook to WM_INPUT
  • 추가: 컨트롤러 후킹
  • 추가: 가상 컨트롤러
  • 추가: GPU 클럭 제한, 허용 기능 및 UI 체크박스 (SMU 테이블의 213번 엔트리)
  • 추가: CPU 클럭 제한 허용 기능 및 UI 체크박스
  • 추가: 전원 정책 충돌 방지를 위해 성능 모드에서 정책 변경 전 강제 초기화 기능
  • 추가: 컨트롤러 매핑 설정 UI
  • 추가: 중국어(간체) 지원
  • 변경: UI 개선
    • 분할 버튼 추가
    • 하드코딩된 UI 각 요소 삭제
    • 창 너비 변경에 대응하는 동적 크기 조정 지원
    • 일관된 정렬을 위해 설정 UI를 테이블 레이아웃으로 재구성
    • 테마 정보 분리, 테마 정보는 JSON 파일로 관리
    • 외부 폰트 추가 - Nato Sans
  • 변경: 단축키 처리 LowLevel Key hook -> WM_INPUT 기반으로 전환

Note

개발 및 분석 노트

GPU Clock Control

  • Attempt via ADLX API: Tried accessing using the GetManualGFXTuning API, but the call failed.
  • Forced Override Result: Manual override caused system freezing on UMPC devices. Function appears to be supported only on desktop-class products.
  • Solution: Replaced with forced GPU clock control using RyzenAdj.

Rear-side Button Mapping Analysis

  • Operation Verified: Tested mapping for A, B, X, Y, and D-Pad (Up/Down/Left/Right).
  • No Official Support: No official API or SDK is provided for this functionality.
  • Reflection Timing: Settings are not applied immediately and take effect only after internal state transitions.
  • Unstable Behavior Characteristics:
    • Behavior varies depending on initialization sequence, timing, and repetition count.
    • Even with identical input data, the device may ignore commands or perform a reset (opposite action), making it tricky to handle.

NPU Attempt – Failure

  • Background: The goal was to implement inverse-correlation TDP control (AutoFPS) that predicts in-game FPS drops in advance and proactively adjusts power consumption.
  • Early Signal Detection: Analysis of collected system sensor data revealed clear precursor patterns related to FPS increases and fluctuations under specific conditions.
  • Training Environment Setup: An ONNX model was created based on the collected system variables, and an AI development environment was set up using Ryzen-AI + SW and Anaconda. (If the Anaconda license agreement was not accepted prior to installation, the Ryzen-AI installation would not complete.)
  • Technical Limitations: It became evident that directly controlling and interfacing with NPU hardware from a native C++ environment is practically impossible.
  • Dependencies and Compatibility: Severe dependency and environment compatibility issues with Vitis AI, vaiml.dll, and vaip_config.json, where even minor problems result in immediate fallback to CPU or GPU execution.
  • Licensing and Investigation: Licensing constraints were acknowledged beforehand; however, this attempt was conducted for data collection purposes toward future technical 대응. In practice, NPU devices differ fundamentally from CPUs and GPUs and behave more like black boxes, rendering them incompatible with the intended application.
  • Final Action: At the current stage, it was concluded that there is no practical development or real-world utility outside of highly specific dedicated environments, leading to the complete removal of all related SDKs and AI development tools.

GPU 클럭 제어

  • ADLX API 시도: GetManualGFXTuning API로 접근했으나 호출 실패.
  • 강제 오버라이드 결과: 수동 Override 시 UMPC 시스템 프리징 발생. 데스크탑급 제품에서만 지원되는 기능으로 판단됨.
  • 해결책: RyzenAdj를 활용한 GPU 강제 클럭 조절 방식으로 대체.

후면 키(Rear-side buttons) 매핑 분석

  • 작동 확인: A, B, X, Y 및 D-Pad(상/하/좌/우) 매핑 테스트 완료.
  • 공식 지원 부재: 해당 기능에 대한 공식 API나 SDK가 전혀 제공되지 않음.
  • 반영 타이밍: 설정값이 즉시 반영되지 않고, 내부 상태 전환이 이루어진 이후에만 적용되는 특성이 있음.
  • 불안정한 동작 특성:
    • 초기화 순서, 타이밍, 반복 횟수에 따라 동작 결과가 매번 달라짐.
    • 동일한 입력 데이터라도 장치 상태에 따라 무시되거나 리셋(반대 동작)으로 처리되는 경우가 있어 까다로움.

NPU 시도 실패

  • 시도 배경: 게임 내 FPS 하락을 사전에 예측하여 전력을 선제적으로 조절하는 역상관 TDP 제어(AutoFPS) 구현 목적.
  • 전조 현상 포착: 시스템 센서 수집 정보를 분석한 결과, 특정 상황에서 FPS 상승 및 변동에 대한 명확한 전조 패턴을 확인.
  • 학습 환경 구축: 수집된 시스템 변수를 기반으로 ONNX 모델을 생성하고, Ryzen-AI+SW 및 Anaconda 기반의 AI 개발 환경 셋업. (설치전 아나콘다 사용 라이센스 수락 처리를 하지 않으면 Ryzen-AI 설치가 끝나지 않음)
  • 기술적 한계: C++ 네이티브 환경에서 NPU 하드웨어를 직접 제어하고 연동하는 기능이 실질적으로 불가능함을 체감.
  • 의존성 및 호환성: Vitis AI, vaiml.dll, vaip_config.json 의 극심한 의존성 문제 및 환경 호환성 오류 직면, 조금만 문제가 생기면 바로 CPU, GPU fallback.
  • 라이선스 및 조사: 라이선스 제약을 사전에 인지하고 있었으나, 향후 기술적 대응을 위한 데이터 수집 차원에서 접근, NPU장치는 CPU, GPU와 전혀 다르며 오히려 블랙박스에 가까워 보이며 본 사용 목적에 부합하지 않음
  • 최종 조치: 현재 시점에서는 특정 전용 환경 외에는 개발 및 실용 효용성이 없다고 판단, 관련 SDK와 AI 개발 도구 일체를 완전히 제거.

version - 0.0.4.0-prototype / 11,157 LOC

버전 - 0.0.4.0-prototype / 11,157 LOC

  • Added: CPU usage display using PDH sampling
  • Added: Vibration when mouse mode is toggled on/off
  • Added: RGB random color settings
  • Added: Profile
  • Added: In mouse mode, LT/RT trigger depth determines which function is executed
  • Added: User-configurable Fan speed by temperature range
  • Added: Show/Hide notification messages (Windows Notification Center)
  • Added: Gyro Sensor - WinRT
  • Add/Changed: Complete separation of Gyro UDP Server and Communication with sensor via Shared memory
  • Changed: Integrated TDP preset and power policy
  • Changed: Replace battery information with WMI-based data, display charge/discharge power
  • 추가: PDH 샘플링으로 CPU 사용율 표시
  • 추가: 마우스 모드 on/off 시 진동
  • 추가: RGB 무작위 색상 설정
  • 추가: 프로파일
  • 추가: 마우스 모드 시 LT/RT 트리거 깊이에 따라 각 기능 실행
  • 추가: 온도 구간별 팬 속도 사용자 설정
  • 추가: 안내 메시지 표시/끄기 (윈도우 알림센터)
  • 추가: 자이로 센서 - WinRT
  • 추가/변경: 자이로 UDP 서버 완전 분리 및 센서와 공유 메모리 통신
  • 변경: TDP프리셋, 전원 정책 통합
  • 변경: 배터리 정보를 WMI기반으로 교체, 충전/방전 전력 표시

Note

노트

Integrated the gyro feature into the main program for testing, but because implementing the Cemu UDP protocol required additional network permissions and initialization of the network stack, the feature was removed and separated into a standalone program.

자이로 기능을 본 프로그램에 통합해 테스트했지만, cemu UDP 프로토콜 구현을 위해 필요한 네트워크 권한 확대와 네트워크 스택 추가를 원하지 않아 해당 기능을 제거하고 별도 프로그램으로 분리

version - 0.0.3.0-prototype / 6,204 LOC 버전 - 0.0.3.0-prototype / 6,204 LOC

  • Added: Auto-start at Windows startup
  • Added: Automatic UI hide
  • Added: Multi-language support
  • Added: Korean support
  • Added: Theme functionality
  • Added: RGB control
  • Added: FAN control
  • Added: XBox Controller support(Xinput)
  • Added: Gamepad Mouse Mode
  • Added: RTSS support
  • Add: Long-press actions for Dedicated keys LC3, RC3, T, CB, CS, and mouse mode on/off
  • Removed: UI color setting feature
  • Changed: Removed audio volume saving feature -> Synchronize with Windows volume
  • Changed: Abstracted EC-related functions through partial refactoring
  • Changed: Battery management was previously handled with Windows events and timers, now replaced with a background monitoring service object by abstracting the entire battery functionality
  • Changed: Separated device information from the code and reworked it to allow adding information for other devices
  • Theme functionality is already structured and can be added by reading from a file, so it is planned for future addition
  • 추가: 윈도우 시작시 자동 실행
  • 추가: UI 자동 숨김
  • 추가: 다국어 지원
  • 추가: 한국어 지원
  • 추가: 테마
  • 추가: RGB 제어
  • 추가: FAN 제어
  • 추가: 엑스박스 패드 지원(Xinput)
  • 추가: 패드 마우스 모드
  • 추가: RTSS 지원
  • 추가: 전용키 LC3,RC3,T,CB,CS 에 대한 길게 누름 액션, 마우스 모드 on/off
  • 삭제: UI 색상 설정
  • 변경: 오디오 볼륨 저장 기능 삭제->윈도우 볼륨과 동기화
  • 변경: 일부 리펙토링을 통한 EC관련 기능을 추상화
  • 변경: 배터리 관리는 윈도우 이벤트와 timer 로 처리 하던 기능 전체를 추상화, 백그라운드 감시 서비스 객체로 교체
  • 변경:기기 정보를 코드에서 분리, 다른 기기 정보 추가 재작업
  • 테마 정보는 구조체 형식, 외부 추가 가능, 추후 예정

version - 0.0.2.0-prototype 2,421 LOC

버전 - 0.0.2.0-prototype / 2,421 LOC

  • Added: Wallpaper setting feature
  • Added: User interface improvements
  • Added: Slide mouse wheel operation
  • Added: Volume control and mute setting
  • Added: External monitor brightness adjustment feature
  • Added: Prevent window from escaping the Windows display area
  • Added: Ability to move to another monitor when using an external display
  • 추가: 배경화면 설정 기능
  • 추가: 사용자 인터페이스 개선
  • 추가: 슬라이드 마우스 휠 조작 추가
  • 추가: 볼륨 조절 및 무음 설정
  • 추가: 외부 모니터 밝기 조절 기능
  • 추가: 창이 윈도우 영역에서 탈출 불가능 하게 추가
  • 추가: 외부 모니터 사용시 다른 모니터로 이동 가능

version - 0.0.1.0-prototype / 1,771 LOC

버전 - 0.0.1.0-prototype / 1,771 LOC

  • Added: Unified Control Dashboard UI
  • Added: the exact TDP control
  • Added: Shortcut Key functionality
  • Added: Charging Limit feature
  • Added: Power policy setting feature
  • 추가: 통합 제어 대시보드 UI
  • 추가: TDP 관리 기능
  • 추가: 단축키 설정 기능
  • 추가: 충전 제한 기능
  • 추가: 전원 정책 설정 기능

Comments