콘텐츠로 이동

기술 아키텍처

ELRS Mobile은 단순한 웹 래퍼가 아닙니다. ExpressLRS 컴파일 및 구성 파이프라인의 네이티브 Dart 구현입니다.

통합 펌웨어 어셈블리

원격 클라우드 컴파일러에 의존하는 대신, 앱은 장치에서 로컬로 동적으로 바이너리를 빌드합니다. ESP32/ESP8285 대상에 플래싱할 때, FirmwareAssembler는 정밀한 비트 수준 수정 시퀀스를 실행합니다:

1

캐시된 firmware.zip 아카이브에서 기본 제네릭 펌웨어를 추출합니다.

2

ESP 0xE9 매직 바이트 시그니처를 찾아 기본 패딩을 제거합니다.

3

hardware.json에서 특정 대상 핀아웃 및 런타임 구성을 추출합니다.

4

Product Name (128b), Lua Name (16b), options.json (512b), hardware.json (2048b)을 바이너리 스트림에 직접 바이트 팩합니다.

5

대상 플랫폼(예: ESP8285 레거시)에서 필요한 경우 최종 페이로드를 .gz 스트림으로 압축합니다.

이 앱은 주파수 대역 간의 복잡한 차이를 정확하게 처리합니다. 900MHz/듀얼 밴드 장치의 경우, 선택한 도메인(예: FCC, EU868)을 컴파일된 JSON 페이로드에 적극적으로 주입합니다. 표준 2.4GHz 대상의 경우, 부울 플래그를 사용하여 어셈블리 중에 추출 프로세스를 표준 FCC/ 또는 유럽 LBT/ 기본 펌웨어 폴더로 자동으로 라우팅합니다.

강력한 로컬 캐싱 시스템을 통해 오프라인 플래싱이 가능합니다. 사용자가 펌웨어 관리자를 통해 릴리스를 다운로드하면, FirmwareCacheService는 ExpressLRS Artifactory에서 제네릭 firmware.zip과 장치별 hardware.zip을 직접 가져옵니다. 이 아카이브들은 장치에 로컬로 관리 및 저장되어, 현장에서 활성 인터넷 연결 없이도 즉시 어셈블리 및 플래싱이 가능하도록 합니다.


네이티브 네트워크 바인딩

모바일 운영 체제(특히 Android 및 iOS)는 인터넷 연결이 없는 Wi-Fi 연결의 우선순위를 낮추고, 대신 모바일 데이터를 통해 트래픽을 자동으로 라우팅합니다. 이는 일반 앱이 10.0.0.1�� 있는 ELRS 하드웨어에 접근하는 것을 방해합니다.

ELRS Mobile은 NativeNetworkService를 통해 이 문제를 해결합니다. 하드웨어 연결이 감지되면, 앱은 플랫폼별 MethodChannel을 호출하여 전체 Flutter 프로세스를 OS 커널 수준에서 Wi-Fi 인터페이스에 바인딩합니다. 이를 통해 모바일 데이터 상태에 관계없이 모든 HTTP 및 mDNS 트래픽이 하드웨어로 올바르게 라우팅됩니다.