← Docs hub

DeviceAgent 내부 골격과 도메인 책임

기준: 1398d109c391c4044cae26d0e9aea4d3f08d9670. 지정 커밋의 추적 파일을 직접 확인한 정적 구조 분석이며, 현재 HEAD·후속 TaskManager·SKIX 구현을 포함하지 않는다.

이 페이지에서 D/는 apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/를 뜻한다. 클래스 수·파일 길이는 지정 커밋 기준이며, 역할 설명은 호출부와 구현을 함께 확인했다.

중심 클래스

클래스 구조상 책임 근거
DeviceAgent (573줄) Service 생명주기, IDeviceControl Stub, callback 등록, 초기화와 동료 연결 D/DeviceAgent.java:78, :132, :264, :310, :538
MainApi (4,210줄) method 문자열·Bundle 해석, 상태별 우회·차단, 도메인 실행과 조회 D/main/api/MainApi.java:150
MainCommon 주요 객체의 공통 참조 보관 D/main/MainCommon.java
MainService (642줄) AMR report 해석, IoT·Pairing·Update 연결 callback, 상태·UI·IoT 전달 D/main/MainService.java:78, :525
MainAmr / MainMcu / MainHandler AMR·MCU 처리와 Handler 기반 작업 연결 D/main/
StateManager (707줄) 주·보조 상태, blocked method, 모드 전환과 호출자 사망 처리 D/event/StateManager.java
CmdPolicyManager (1,581줄) 실행 가능 조건과 도메인 실행·중단·재개가 함께 존재 D/policy/CmdPolicyManager.java
EventManager 제품 상태에 따른 EyeLED 등의 표현 조정 D/event/EventManager.java
AppCmd 동료 앱 명령 및 호출자 callback 전달 D/app/AppCmd.java

MainApiCleaning.java는 6줄의 골격이다. 청정 책임이 이 클래스로 분리되어 있다고 볼 수 없다. 기존 설계 문서의 “270개 명령”은 산정 방식이 불명확하므로 여기서는 API 개수로 재인용하지 않는다. 원문에 method.equals( 문자열은 274회 나타나지만 중복·보조 조건까지 포함하므로 고유 API 수가 아니다.

진입 이후의 처리

  1. DeviceAgent.sendModuleCommand()가 Bundle의 method를 읽는다. 비어 있으면 반환한다.
  2. MainApi.executeMethod()가 재부팅 허용 상태, Factory·ICT·SelfTest 모드, StateManager.checkBlockedStatus()를 확인한다.
  3. 문자열 분기에서 Bundle을 해석해 청정·이동·설정·예약 등의 manager를 호출한다.
  4. 동료 callback이나 HAL callback이 상태를 갱신하고 AppCmd를 통해 PUI·IoT·LLM에 전파된다.

근거: D/DeviceAgent.java:264–283, D/main/api/MainApi.java:150–207, D/main/MainService.java.

전체 기능 패키지 지도

패키지 책임과 대표 구현
cleaning/ AirCleaningManager, BaseCleaningManager, Basic/Moving/FollowMe/AreaAICleaningManager, CleaningTransaction: 청정 방식과 이동 결합
moving/ MovingController, RobotMovementController, MovingLocationManager, AirQualityMappingController·ScanningManager: 위치·이동·공기질 탐색
map/ MapManager, MappingManager, MapUploader: 지도·구역 상태, 매핑, 업로드
device/item/amr/ AMRService와 Motor/Map/Battery/Sensor/System 등: AMR 계약을 기능별로 감쌈
device/item/mcu/ MCUComm, Protocol·Protocol_v2, MCUDataParser·Manager, 팬·필터·센서·틸트·UV·OTA 모델
device/item/soc/ Soc, SocLcd, SocLcdBrightness: SoC 화면 관련 제어
device/manager/ Battery, EyeLed, FilterBody, LCD, SocHeat, AppWatcher 등 하드웨어·운영 상태 조정
device/interface/ 하드웨어 접근 인터페이스 정의
wss/ WssManager, 이동·Vision 검증·정책·EventAsset·업로드 복구: 보안 기능 생명주기
streaming/ StreamingManager, 이벤트 Bundle 구성: 영상 세션과 수동 이동 연결
ipc/ WssControlStub, StreamingControlStub, TaskExecutor: 전용 IPC 입구와 작업 큐
schedule/ ScheduleManager, ScheduleAlarmReceiver, ScheduleInitRunner, ScheduleDao: 영속 예약과 알람
interaction/ InterScheduleManager, ActionWelcome/Wakeup/Relax, Information: 제품 상호작용
event/, policy/ 상태 전이·표현, 명령 허용 조건과 정책 실행
llm/, recognition/ LlmManager·VisionAIManager·VoiceLocationRecogManager 등 음성·시각 연계
system/, service/ SoundFlowManager와 System, DeviceControlService: 플랫폼·장치 연결
settings/, data/pref/ Settings, TempSettings, SKMPreferences, PrefsMigrator: 설정과 암호화 저장 이행
data/, db/ 위치·기기·오류·공기질 모델, CleaningReport DB
alert/, maintenance/, report/ 경보 DB, 오류 이력·부품·사용량·청정 보고
body/, calibration/ 틸팅·환영 동작, 센서·이동 보정과 알람
ota/, update/ OTAManager, UpdateManager: 업데이트 모드와 동료 연동
boot/, receiver/ BootInitManager, BootReceiver, AiModeCleanAlarmReceiver: 부팅과 자동 동작 진입
provider/, iot/ DeviceAgentProvider, IotManager: 데이터 제공과 IoT 연계
app/, main/ 공통 앱 문맥·명령·callback 정책, 중심 실행 클래스
toast/, util/ ToastBuffer, 시간·암호화·공유메모리·알람 등 보조 기능
activity/, test/ MCUTestActivity와 시뮬레이터·시험 지원
루트 State 클래스 FactoryState, ICTState, SelfTestState: 생산·검사 모드 전용 처리

각 행의 근거는 D/ 뒤에 해당 패키지 경로다. 근거 목록에 모든 상위 패키지별 파일 수를 수록했다.

상태·실행·저장은 어떻게 나뉘는가

상태는 하나의 통합 Store에만 모여 있지 않다. StateManager는 제품 모드와 차단 상태를 관리하고, 이동·배터리·지도·청정 manager는 자기 기능 상태를 관리하며, SKMPreferences와 SQLite helper들은 지속할 데이터를 따로 보관한다. MainService가 AMR report를 해석하면서 이 상태들을 갱신한다.

CmdPolicyManager는 순수한 허용 판정기만이 아니다. 실행 호출도 포함하므로 정책 변경은 실제 동작 회귀와 함께 확인해야 한다. EventManager 역시 범용 이벤트 버스로 해석하면 안 된다.

구조적 결합과 미확인 항목

확대 구조도와 연결별 근거

Connections

전체 목차 · 앱 구성 · DeviceAgent 내부 · IPC · 실행 흐름 · 플랫폼·빌드 · 근거·확인 범위

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date