Ryan Malloy 613611d37a Add ESP32-S2 firmware for HMC472A attenuator control
PlatformIO/Arduino firmware for WEMOS/LOLIN S2 Mini:
- 6-bit GPIO control (GPIOs 1-6) with glitch-free register writes
- REST API: /status, /set, /config, /sweep endpoints
- Web UI with PCB green theme, slider, presets, pin visualization
- NVS persistence of attenuation setting across power cycles
- Sweep mode for automated attenuation stepping
- mDNS (attenuator.local), OTA updates, watchdog
2026-02-02 21:24:29 -07:00

61 lines
1.8 KiB
C

#pragma once
#include <Arduino.h>
// --- Firmware Version ---
#define FW_VERSION "2026-02-02"
#define FW_HOSTNAME "attenuator"
// --- WiFi Credentials ---
// Override via build_flags or edit directly
#ifndef WIFI_SSID
#define WIFI_SSID "your-ssid"
#endif
#ifndef WIFI_PASS
#define WIFI_PASS "your-password"
#endif
#define WIFI_TIMEOUT_MS 15000
// --- HMC472A Control Pins (active-low) ---
// GPIOs 1-6: contiguous block in lower 32-bit register
// Enables glitch-free simultaneous writes via GPIO.out_w1ts/w1tc
static constexpr uint8_t PIN_V1 = 1; // 16 dB (MSB)
static constexpr uint8_t PIN_V2 = 2; // 8 dB
static constexpr uint8_t PIN_V3 = 3; // 4 dB
static constexpr uint8_t PIN_V4 = 4; // 2 dB
static constexpr uint8_t PIN_V5 = 5; // 1 dB
static constexpr uint8_t PIN_V6 = 6; // 0.5 dB (LSB)
static constexpr uint8_t ATTEN_PINS[6] = {PIN_V1, PIN_V2, PIN_V3, PIN_V4, PIN_V5, PIN_V6};
static constexpr float ATTEN_DB[6] = {16.0f, 8.0f, 4.0f, 2.0f, 1.0f, 0.5f};
// Bitmask covering all 6 control pins in the GPIO register
static constexpr uint32_t ATTEN_PIN_MASK = (1 << PIN_V1) | (1 << PIN_V2) | (1 << PIN_V3) |
(1 << PIN_V4) | (1 << PIN_V5) | (1 << PIN_V6);
// --- Status LED ---
static constexpr uint8_t PIN_LED = 15; // Built-in LED, active HIGH
// --- Attenuator Limits ---
static constexpr float DB_MIN = 0.0f;
static constexpr float DB_MAX = 31.5f;
static constexpr float DB_STEP = 0.5f;
static constexpr uint8_t STEP_MIN = 0;
static constexpr uint8_t STEP_MAX = 63;
// --- Sweep Defaults ---
static constexpr uint32_t SWEEP_DWELL_MS_DEFAULT = 500;
static constexpr uint32_t SWEEP_DWELL_MS_MIN = 10;
static constexpr uint32_t SWEEP_DWELL_MS_MAX = 10000;
// --- NVS ---
#define NVS_NAMESPACE "atten"
#define NVS_KEY_STEP "step"
// --- Watchdog ---
#define WDT_TIMEOUT_S 120
// --- Web Server ---
#define WEB_PORT 80