#pragma once

/*
 * Nordic nRF54L15-DK (PCA10156) — Meshtastic variant
 *
 * ── GPIO voltage domains ─────────────────────────────────────────────────────
 *   P0  (gpio0 @ 0x10A000)  Main domain     3.0 V  ← usable
 *   P1  (gpio1 @ 0xd8200 )  LP domain       1.8 V  ← NOT compatible with E22
 *   P2  (gpio2 @ 0x50400 )  HP domain       3.0 V  ← usable
 *
 * The SX1262 needs VIH ≥ 0.7 × VDD = 2.31 V (VDD = 3.3 V).
 * P1 outputs only 1.8 V → chip stays in reset, BUSY never goes LOW.
 * All E22 signals are therefore on P2 (3.0 V), driven by SPIM00.
 *
 * EBYTE E22-900M30S (SX1262) wiring — J2 header, all P2:
 *
 *   E22 pin    GPIO      pin#  Notes
 *   ─────────────────────────────────────────────────────────────────────
 *   MISO    →  P2.04      36   SPIM00 data in
 *   NSS/CS  →  P2.05      37   SPI chip-select (RadioLib GPIO)
 *   DIO1    →  P2.06      38   IRQ — interrupt via gpiote30
 *   BUSY    →  P2.03      35   GPIO input
 *   NRESET  →  P2.00      32   GPIO output
 *   RXEN    →  P2.07      39   Held HIGH via ANT_SW (LNA always active)
 *   MOSI    →  P2.02      34   SPIM00 data out
 *   SCK     →  P2.01      33   SPIM00 clock
 *
 *   DIO2 → TXEN bridge required on E22 module (solder bridge / wire).
 *   DIO3 drives TCXO reference (1.8 V).
 *
 * Pin numbering convention: P0.n = n, P1.n = 16+n, P2.n = 32+n.
 *
 * Reserved / do-not-use DK pins:
 *   P0.00-P0.02  IMCU VCOM TX/RX/RTS pads (uart30 disabled; pads idle)
 *   P0.03        I2C SDA (TWIM30) — sensor bus
 *   P0.04        I2C SCL (TWIM30) — sensor bus; SW3 button on this pad,
 *                DO NOT press SW3 while I2C is active
 *   P1.00-P1.01  32 kHz crystal
 *   P1.02-P1.03  NFC antenna
 *   P1.10        LED1 (status LED — keep)
 *   P1.13        BTN0 — main user button
 *   P1.14        LED3
 *   P2.01-P2.05  SPIM00 / E22 (see above)
 *   P2.08-P2.10  Trace pins (avoid)
 */

#ifndef NRF54L15_DK
#define NRF54L15_DK
#endif

// ── SX1262 / E22-900M30S — all P2, HP domain (3.0 V) ────────────────────────
#define USE_SX1262
#define SX126X_CS 37    // P2.05 — chip-select
#define SX126X_DIO1 38  // P2.06 — IRQ (gpiote30 capable)
#define SX126X_BUSY 35  // P2.03 — BUSY
#define SX126X_RESET 32 // P2.00 — NRESET

// RXEN (P2.07) held HIGH permanently — LNA always active.
// RadioLib must NOT toggle it; ANT_SW drives it HIGH before lora.begin().
#define SX126X_ANT_SW 39 // P2.07 — RXEN driven HIGH at init

// DIO2 controls TXEN via bridge on E22 module.
// DIO3 provides 1.8 V TCXO reference.
#define SX126X_DIO2_AS_RF_SWITCH
#define SX126X_DIO3_TCXO_VOLTAGE 1.8f

// ── LEDs (active HIGH) ───────────────────────────────────────────────────────
#define PIN_LED1 26 // P1.10 — LED1 (status LED, LP domain — output only, OK)
#define PIN_LED2 41 // P2.09 — LED0 on DK (remapped; P2.07 now used for RXEN)
#define LED_STATE_ON 1

// ── Buttons (active LOW, internal pull-up) ───────────────────────────────────
// BTN1 (P1.09), BTN2 (P1.08) and BTN3 (P0.04) deleted from DTS — only BTN0
// remains. BTN3's pad (P0.04) is now I2C SCL.
#define PIN_BUTTON1 29 // P1.13 — BTN0
#define BUTTON_NEED_PULLUP

// ── I2C bus (TWIM30, HP domain, 3.0 V) ──────────────────────────────────────
// SDA=P0.03, SCL=P0.04. Pinctrl + clock-frequency live in the board overlay.
// External 4.7 kΩ pull-ups required on both lines. Meshtastic's Arduino
// TwoWire layer (src/platform/nrf54l15/Wire.cpp) resolves the device at
// compile time via DT_NODELABEL(i2c30); these PIN_WIRE_* defines are kept
// for parity with the Arduino convention used by other variants.
#define PIN_WIRE_SDA 3 // P0.03
#define PIN_WIRE_SCL 4 // P0.04
#define WIRE_INTERFACES_COUNT 1
