feat: CRSF/ELRS RC integration (Phase 2) #35
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "sl-firmware/crsf-elrs"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
src/main/rx/crsf.c.last_rx_ms+armedupdatedmotor_driver_update()steer_cmd with ramping/headroom already handledrssi/lqJSON fields when RC alive; web UI hidden row revealed on first packetTest plan
last_rx_msupdates,crsf_state.channelsvalidrssi/lqfields; web UI row appears🤖 Generated with Claude Code
Protocol choice: implemented from spec (CRSFforArduino needs Arduino framework; Betaflight extraction has deep scheduler dependencies). Protocol verified against Betaflight src/main/rx/crsf.c + CRSF spec. crsf.c: - UART4 PA0=TX/PA1=RX (GPIO_AF8_UART4), 420000 baud 8N1, oversampling×8 APB1=54MHz → BRR=0x101 → 418604 baud (0.33% error, within spec) - DMA1 Stream2 Channel4, circular 64-byte buffer, IDLE interrupt DMA half/complete callbacks drain buffer; IDLE fires at frame boundary - CRC8 DVB-S2 (polynomial 0xD5) validated on every frame - Parser state machine: SYNC(0xC8)→LEN→DATA with length sanity check - 11-bit channel unpack for all 16 channels from 22-byte payload - RC channels frame (0x16): unpacks 16ch, updates last_rx_ms + armed - Link stats frame (0x14): captures RSSI dBm, LQ%, SNR dB crsf.h: added rssi_dbm, link_quality, snr fields to CRSFState config.h: CRSF_ARM_THRESHOLD=1750, CRSF_STEER_MAX=400, CRSF_FAILSAFE_MS=300 main.c: - crsf_init() called after motor_driver_init() - RC failsafe: disarm if (now - last_rx_ms) > CRSF_FAILSAFE_MS, but only after RC was first seen (last_rx_ms != 0) — USB-only mode unaffected - RC arm: CH5 rising edge → safety_arm_start(); falling edge → disarm Same ARMING_HOLD_MS interlock as USB arm command - RC steer: CH1 → crsf_to_range() → ±CRSF_STEER_MAX → motor_driver steer - RSSI/LQ: appended to JSON when safety_rc_alive() ("rssi","lq" fields) ui/index.html: hidden RC RSSI row revealed on first packet with rssi/lq Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>Merge conflicts with main after PRs #31/#33/#34 landed. Please rebase on latest main and resolve conflicts in
src/main.candui/index.html.accf7fdf39tofbfde24abaFlash-tested all 5 PRs together. Builds, streams, no conflicts.