AMRAgent·MCUAgent · 두 장치 전송 경로 — 상세 구조도
기준 커밋:
1398d109c391c4044cae26d0e9aea4d3f08d9670. 도식은 기존 구현을 설명한다. 제품 이미지 설치·실기기 성공을 증명하지 않는다.
AMR typed Binder·socket과 MCU serial·DeviceAgent HAL 경로의 분리
SVG 원본 크게 열기 · Mermaid 원본 · 모듈 분석 본문
읽는 순서와 연결 의미
행은 책임·실행 경로별 묶음이며 별도 프로세스라는 뜻은 아니다. 같은 행의 인접 연결은 화살표로, 행을 넘거나 떨어진 상자 사이 연결은 동일한 E 번호의 출력·입력 포트로 표시한다. 아래 표는 방향과 의미를 모두 풀어 쓴 것이다. 그림의 코드 파일명을 눌러 저장소로 이동하는 기능은 없으며, 아래 경로로 지정 커밋을 조회할 수 있다.
| 연결 | 출발 → 도착 | 동작 | 종류 |
|---|---|---|---|
| E01 | AMRAgent Stub → AMRCmdDispatcher | typed op | 호출·명령 |
| E02 | AMRCmdDispatcher → command 객체 | command 생성 | 호출·명령 |
| E03 | command 객체 → socket transport | send | 호출·명령 |
| E04 | RecvThread → CallbackHandler | report | 결과·이벤트 |
| E05 | CallbackHandler → DA MainService | Binder callback | 결과·이벤트 |
| E06 | MCUAgent Stub → Manager | executeMethod | 호출·명령 |
| E07 | Manager → Comm | 주기 송수신 | 호출·명령 |
구성요소별 책임과 코드 근거
| 상자 | 구성요소 | 책임·상태 | 지정 커밋의 소스 경로 |
|---|---|---|---|
| N01 | AMRAgent Stub | IAMRControl.opMapping 등 / generic sendModuleCommand=-1 | apps/AMRAgent/java/com/sk/airbot/amragent/AMRAgent.java |
| N02 | AMRCmdDispatcher | AMRCommand HandlerThread / 명령 생성·지연·반복 | apps/AMRAgent/java/com/sk/airbot/amragent/AMRCmdDispatcher.java |
| N03 | command 객체 | 주행 / 매핑 / 도킹 / OTA / protocol request 구성 | apps/AMRAgent/java/com/sk/airbot/amragent/command/ |
| N04 | socket transport | SockSender / 송신 경로 / 하위 AMR는 저장소 밖 | apps/AMRAgent/java/com/sk/airbot/amragent/util/SockSender.java |
| N05 | RecvThread | frame / timeout / 상태 해석 / position / map / battery | apps/AMRAgent/java/com/sk/airbot/amragent/RecvThread.java |
| N06 | CallbackHandler | 등록 client에 report Bundle / IAMRControlCallback | apps/AMRAgent/java/com/sk/airbot/amragent/CallbackHandler.java |
| N07 | DA MainService | reportCmd 소비 / 제품 상태 반영·상위 알림 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/main/MainService.java |
| N08 | AMRState | AMR 내부 상태 / mapping / driving / factory | apps/AMRAgent/java/com/sk/airbot/amragent/AMRState.java |
| N09 | MCUAgent Stub | IMCUControl Bundle 입구 / Manager.executeMethod | apps/MCUAgent/java/com/sk/airbot/mcuagent/MCUAgent.java |
| N10 | Manager | method/action → Protocol / Handler로 Comm 주기 실행 | apps/MCUAgent/java/com/sk/airbot/mcuagent/Manager.java |
| N11 | Comm | makeSendPackeck / read frame / SerialPort input/output | apps/MCUAgent/java/com/sk/airbot/mcuagent/comm/Comm.java |
| N12 | DA MCUComm → HAL | DeviceAgent의 별도 경로 / MCUAgent bind는 주석 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/device/item/mcu/MCUComm.java |
해석 경계와 변경 시 검토
- AMR generic Bundle 함수를 정상 명령 경로로 그리면 안 된다.
- MCUAgent→SerialPort와 DeviceAgent→IDeviceManager는 직렬 연결이 아니다.
- socket write·수신 frame·Android report·모터 물리 완료는 서로 다른 검증 단계다.