Skip to main content

A1SI Engineering Services · Embedded + Mobile

Embedded firmware on the chip, mobile apps in the pocket — one stack, end-to-end.

A1SI builds both halves of every connected product — the C / C++ / Rust firmware running on the MCU or SoC and the React Native / Expo iOS + Android app the operator opens to talk to it. Same engineering team on both sides means the GATT spec on the firmware matches the BLE client on the app, the protocol the device speaks matches the parser the dashboard ships, and the bring-up debugging session works because we wrote both halves. Recent work in production includes the CVWS commercial-vehicle weighing app (live on App Store and Google Play), the EMDT emergency-medical-device tracker (in store review), and the A1SI Lutron HomeWorks Controller firmware that drops into installed Lutron lighting systems as a direct replacement for the original processor.

See the recent work
A1SI engineering workstation — a multi-monitor desk running code editors, a smartphone and tablet on the desk in front of the screens, and a populated PCB next to the keyboard. The everyday surface where firmware and mobile-app development sit side by side.

Capabilities

Both halves of the connected product, in-house.

Connected products fall apart at the seam between firmware and app — the GATT spec drifts, the protocol parser disagrees with the device, the bring-up engineer and the app engineer hand each other defects all week. A1SI runs both disciplines under one team so the seam stays tight from architecture through production.

Embedded firmware (C / C++ / Rust)

Bare-metal and RTOS firmware for Cortex-M and RISC-V targets. Signed over-the-air update partitions, factory-provisioning workflows, watchdog and brown-out recovery, RTC-aware power management. C and C++17 for the established stack; Rust for new builds that need memory-safety guarantees on the device side.

RTOS integration (FreeRTOS, Zephyr, ESP-IDF)

Zephyr 3.x on Nordic and STM32 targets, FreeRTOS on classic Cortex-M, Espressif ESP-IDF v5 on ESP32 / S2 / S3 / C3 / C6. Task partitioning, ISR discipline, priority-inversion protection, RTOS-aware GDB / OpenOCD bring-up, code-size and stack-watermark profiling on the device.

iOS native + React Native + Expo

Swift / SwiftUI for cases where native iOS depth is required (BLE central with custom peripherals, CoreBluetooth background modes, Vision / CoreML on-device inference); React Native + Expo SDK 54 for the cross-platform path the CVWS and EMDT apps ship on. TestFlight pipelines, App Store privacy nutrition labels, app review escalation.

Android native + React Native + Expo

Kotlin + Jetpack Compose for native Android depth (foreground-service BLE peripherals, USB-host accessory protocol, MediaProjection capture). React Native + Expo cross-platform path with EAS Build pipelines. Play Console internal-testing tracks, Data Safety form, policy-compliance review handling.

Hardware-to-app protocols

BLE GATT (custom characteristics + Nordic UART Service), Web Bluetooth API for browser-side control surfaces, MQTT 3.1.1 / 5.0 over TLS for cloud-to-device telemetry, Modbus RTU and TCP for industrial integrations, WebSerial for in-browser hardware bring-up. Protocol contract documented as the joint deliverable between the firmware and the app teams.

HMI + operator experience

Operator-readable maintenance surfaces (the engineering posture from our production-floor controllers — savable diagnostic transcripts, live Tx / Rx counters, one-window error reporting), Dynamic Type and accessibility-first layouts for field operators in gloves, WCAG-aware color and focus contracts, dark-mode parity, and offline-first data models for crews working outside cell coverage.

How we engage

Five steps from joint architecture to store review.

We organize every connected-product program around a five-step flow that keeps the firmware team and the app team aligned across the same artifacts — the protocol contract at step 3 is the gate the whole project hinges on.

  1. Joint architecture

    Embedded and mobile architectures designed together: data model on the device, command set, BLE / cloud transport, security model, OTA strategy. The artifact: a single architecture doc the firmware and app teams both build against.

  2. Parallel scaffolding

    Firmware skeleton (RTOS, OTA partitions, GATT server, watchdogs) and app skeleton (navigation, BLE / MQTT client, auth, state store) brought up in parallel against stub interfaces. The artifact: both halves compile, run, and exchange canned messages over the wire.

  3. Protocol contract

    The joint deliverable: a written contract for every wire format the firmware and the app exchange — GATT services, MQTT topics, JSON schemas, byte-level frame layouts. Versioned, regression-tested, and kept in one place. The artifact: a contract doc that survives every refactor on either side.

  4. Bring-up + integration

    First-article firmware on real hardware against the app on real phones. End-to-end protocol exchange, battery and thermal profiling on the device, BLE link quality on the app side, observability wiring (Sentry for the app, NVS / coredump for the firmware). The artifact: the full system exchanging real payload under realistic load.

  5. Store review + production

    TestFlight + Play Internal Testing tracks, App Store / Play Console privacy and policy compliance, factory provisioning of the production firmware, OTA channel setup, ongoing post-launch support. The artifact: an app live in both stores and firmware that ships with the device.

The bench

One toolchain on the device side, one on the app side.

We pick the right tool for each half of the stack — the embedded toolchain lives in CMake / Ninja / OpenOCD / GDB, the mobile toolchain lives in Xcode / Android Studio / Metro / EAS — and a small set of cross-cutting tools (Sentry, GitHub Actions, Doppler) holds the two together.

  • ESP-IDF + Nordic Connect SDKEspressif ESP-IDF v5.x for ESP32 / S3 / C3 / C6 targets; Nordic Connect SDK (Zephyr-based) for nRF52 / nRF53 / nRF54 / nRF91. The platforms our recent CVWS BLE hub and Lutron HomeWorks Controller ship on.
  • React Native + Expo SDK 54EAS Build for managed iOS + Android pipelines, Expo Modules for native bridges, dev clients for fast on-device iteration. The cross-platform stack the CVWS and EMDT apps both ship on, with shared business logic across both targets.
  • Swift / SwiftUI + Kotlin / Jetpack ComposeNative depth where native depth is required: SwiftUI + Combine for iOS-only background BLE workflows, Kotlin Coroutines + Compose for Android foreground services, Camera2 / AVFoundation for on-device capture pipelines.
  • Unity + Google Test + Jest + DetoxUnity / Google Test / FFF on the firmware side for unit + on-target test, Jest + React Native Testing Library on the app side, Detox for end-to-end on-device flows. CI on GitHub Actions with hardware-in-the-loop runners for the embedded path.
  • Sentry + Crashlytics + on-device coredumpSentry SDK on the React Native side for crash + breadcrumb capture, Firebase Crashlytics where the customer prefers Google's stack, ESP-IDF and Zephyr coredump partitions on the device with offline crash retrieval over USB or BLE.
  • TestFlight + Play Internal Testing + signed OTATestFlight for iOS beta, Play Internal / Closed / Open Testing for Android beta, EAS Update for in-flight JS updates, signed firmware OTA (RSA-2048 / Ed25519) for the device side. Every release artifact reproducible from a tagged commit.

Recent work

Mobile apps in production. Embedded firmware in deployment.

Three programs A1SI is shipping right now — two cross-platform iOS + Android apps built on React Native + Expo SDK 54, and one ESP32 firmware that drops into an installed Lutron HomeWorks lighting system.

CVWS — Commercial Vehicle Weighing

iOS + Android · React Native + Expo SDK 54 · BLE → Modbus RTU

A1SI's real-time vehicle-weighing app for commercial fleets. The app pairs with a Laumas CLM8 load-cell transmitter over BLE, parses the CLM8's native Modbus RTU register map on-device with CRC-16 validation, captures all eight load-cell channels every weighing session, and dual-writes each timestamped record to local storage and the multi-tenant CVWS cloud. Live on the App Store and Google Play; the same React Native codebase under Expo SDK 54 runs on both platforms.

EMDT — Emergency Medical Device Tracker

iOS + Android · Expo SDK 54 · QR + photo capture · 21 CFR Part 11

A1SI's emergency-medical-device tracker for EMS agencies, fire departments, and clinical engineering teams. Field crews scan a QR code, attach a photo, and the device's full compliance history — last PM date, battery state, recall posture, MDR / CAPA workflow — is in their hand. The React Native + Expo app talks to 88 Django REST endpoints across 8 compliance apps; in App Store and Google Play review. ALCOA+ audit trail and FDA 21 CFR Part 11 e-signatures on the back-end.

A1SI Lutron HomeWorks Controller

ESP32 · ESP-IDF v5+ · StarBus RS-485 · Vareo · local REST API

A1SI's ESP32-based firmware that drops into an installed Lutron HomeWorks Interactive lighting system as a direct replacement for the original Lutron processor. Speaks both native bus protocols — StarBus RS-485 at 9 600 8N1 and Vareo 15 V 120 Hz — so every existing keypad, dimmer, and sensor in the installation keeps working untouched. Adds a modern local REST API on port 80 (Matter support in active development) so a HomeWorks installation joins Home Assistant, openHAB, Node-RED, or any Matter controller. No cloud lock-in, no original-processor remanufacture.

What we deliver

A connected product that ships both halves together.

Every program closes with the embedded artifacts (signed firmware, OTA channel, BoM-locked release tag) AND the mobile artifacts (signed app in both stores, observability dashboards, post-launch support runbook) — handed off as one coherent release, not two independent drops.

Mobile coverage
iOS 16+ · Android 12+ · React Native + Expo · native depth where needed
Embedded coverage
ESP32 / S3 / C3 / C6 · Nordic nRF52 / 53 / 54 / 91 · STM32 · RP2040
Device transport
BLE GATT · Web Bluetooth · MQTT / TLS · Modbus RTU / TCP · WebSerial
Release artifacts
Signed OTA · TestFlight + Play tracks · privacy labels · Sentry baseline

Why A1SI

Built the same way we build the production-floor controllers we ship.

One team owns both halves of the stack

The seam between firmware and app is where connected products fail. A1SI runs both sides of every program under one team so the GATT spec on the firmware matches the BLE client on the app, the protocol parser the app ships speaks the same dialect the device speaks, and the bring-up engineer can debug across the seam without throwing a defect over a wall. Same posture we've shipped under since the CVWS pairing flow first lit up.

Production-floor pedigree on both sides

A1SI has been shipping production-floor controllers and the operator software that drives them since 1992 — Ford FN-145 seat testers, the DVP2 digital multi-printer, the Spartan ActiveRide suspension controller, the GM ATEC EPROM programmer. The same engineering posture — operator-readable maintenance surfaces, savable diagnostic transcripts, openly documented interfaces — shapes every firmware and every app we touch today.

Open, vendor-neutral hand-off on both sides

Firmware ships as source and as a signed binary with the OTA channel reproducible from the git tag. Apps ship as source with both store listings handed off to the customer's developer account. No proprietary RTOS lock-in on the device side, no Expo-only lock-in on the app side; if your team needs to take the program in-house tomorrow, every artifact is portable to your toolchain.

Have a connected product to ship?

A1SI picks up connected-product programs at every stage — concept, joint architecture, parallel scaffolding, protocol contract, bring-up, store review, production OTA, post-launch support. Send the device, the use-case, or the BLE pairing flow you're stuck on; we'll come back with what we'd do next and what the engagement would look like.

"Apple", "iOS", "iPadOS", "Swift", "SwiftUI", "Xcode", "App Store", "TestFlight", "CoreBluetooth", "CoreML", and "Vision" are trademarks of Apple Inc. "Google", "Android", "Google Play", "Kotlin", "Jetpack Compose", "Firebase", and "Crashlytics" are trademarks of Google LLC. "React Native" is a trademark of Meta Platforms, Inc. "Expo" and "EAS" are trademarks of 650 Industries, Inc. "Espressif", "ESP-IDF", and "ESP32" are trademarks of Espressif Systems (Shanghai) Co., Ltd. "Nordic Semiconductor" and "nRF" are trademarks of Nordic Semiconductor ASA. "FreeRTOS" is a trademark of Amazon.com, Inc. or its affiliates. "Zephyr" is a trademark of the Linux Foundation. "Rust" is a trademark of the Rust Foundation. "STM32" is a trademark of STMicroelectronics N.V. "RP2040" is a trademark of Raspberry Pi Ltd. "Sentry" is a trademark of Functional Software, Inc. "Lutron", "HomeWorks", "HomeWorks Interactive", "StarBus", and "Vareo" are trademarks of Lutron Electronics Co., Inc. "Laumas" and "CLM8" are trademarks of Laumas Elettronica S.r.l. "Matter" and "Thread" are trademarks of the Connectivity Standards Alliance. "Modbus" is a trademark of Schneider Electric SE. "MQTT" is a registered standard from OASIS. "Home Assistant" is a trademark of the Home Assistant project. The A1SI Lutron HomeWorks Controller firmware is A1SI proprietary (© A1 Systems Integrators LLC) and is a third-party replacement processor that interoperates with installed Lutron HomeWorks Interactive systems; A1SI is not affiliated with or endorsed by Lutron Electronics Co., Inc. Descriptive editorial use only; A1SI is not affiliated with or endorsed by any other named third party.