Review Current App and Identify Changes

Explore where FSM will fit and which threads/queues can be removed.

  • List all threads: Temp thread, BLE thread, mic thread.
  • List all message queues: temp queue, others.
  • Identify current global variables used for BLE or sensor data.
  • Decide which data belongs in FSM context (last_temperature, mic_detected).

Design FSM Context and Events

Recap on FSM Events and Designs from previous sessions.


Refactor Threads to Post Events

Make threads event producers only; remove BLE thread.

  • Temp thread: post EVENT_TEMP_READY with reading to FSM event queue.
  • BLE thread: remove entirely — BLE read handler will query FSM context directly.
  • Mic thread (if any): post EVENT_MIC_DETECTED events.
  • Ensure no threads are directly modifying global variables that now live in FSM context.

Update BLE Read Handler**

Make BLE read handler pull data from FSM context.

  • Replace reads from old globals or queues with reads from FSM context (or via getter API).
  • Ensure read handler is safe and non-blocking.
  • Verify BLE characteristic returns latest last_temperature (and mic status if needed).

Verification and Cleanup

Make sure FSM integration works as intended.

  • Start the app, connect BLE, verify temp readings are available on demand.
  • Ensure FSM states transition correctly when BLE connects/disconnects.
  • Remove old unused globals, BLE thread, and temp queue if fully replaced by FSM.
  • Optional: log FSM state transitions for debugging.

Review & Outcome:

We now have an event-driven application via FSM, with:

  • Threads as event producers
  • FSM as single source of truth for system state and sensor data
  • BLE read handler directly pulling from FSM context
  • Clean, maintainable architecture ready for future extensions.

<
Previous Post
FSM for the BLE Embedded App
>
Next Post
Sliding Window FIR filter for Audio - Designing the Filter