# lr1121_malnus.hpp — API reference ```cpp #include "lr1121_malnus.hpp" // namespace lr1121 ``` ## Setup ```cpp lr1121::Config cfg; // all fields have sensible defaults cfg.freq_hz = lr1121::FREQ_433; // FREQ_433 / FREQ_868 / FREQ_2400 cfg.sf = 7; // spreading factor 6–12 cfg.bw = 0x04; // 0x03=62.5 kHz 0x04=125 kHz 0x05=250 kHz cfg.cr = 0x01; // 0x01=4/5 0x02=4/6 0x03=4/7 0x04=4/8 cfg.tx_dbm = 10; cfg.pa_sel = lr1121::PA_LP; // PA_LP (0–14 dBm) PA_HP (0–22 dBm) lr1121::Radio radio; if (!radio.begin(cfg)) fprintf(stderr, "init failed: %s\n", lr1121::Radio::errorString(radio.lastError())); ``` ## TX / RX ```cpp bool ok = radio.send(data, len); // blocks until TX_DONE or error // returns: true=ok false=error (check lastError) lr1121::RxInfo info; // one-shot: arm, wait timeout_ms, chip returns to standby int n = radio.receive(buf, sizeof(buf), 1000, &info); // continuous: arm once, chip stays in RX between packets radio.startListening(); for (;;) { int n = radio.receive(buf, sizeof(buf), 0, &info); // 0 = wait forever per call if (n > 0) { /* handle */ } } radio.stopListening(); // returns chip to standby // receive() returns: n>=0 bytes -1=timeout/error -2=crc error // info.rssi_dbm info.snr_db info.signal_rssi_dbm ``` ## Runtime tuning *(call between packets, chip stays in standby)* ```cpp radio.setFrequency(lr1121::FREQ_868); radio.setTxPower(20, lr1121::PA_HP); radio.setModulation(9, 0x04, 0x01); // sf, bw, cr ``` ## Diagnostics ```cpp lr1121::ChipVersion v = radio.chipVersion(); // v.hw v.type v.fw_hi v.fw_lo float vbat = radio.vbatVolts(); uint16_t errs = radio.chipErrors(); // chip-side error flags lr1121::Error e = radio.lastError(); const char *msg = lr1121::Radio::errorString(e); ``` ## Errors `Ok` `NotReady` `SpiOpen` `SpiIo` `GpioOpen` `BusyTimeout` `BadChip` `TxTimeout` `TxLbd` `RxTimeout` `RxCrc` ## Other ```cpp radio.softResetSettings(); // re-apply Config without hard reset radio.reboot(false); // reboot chip (true = stay in bootloader) radio.end(); // close SPI + GPIO fds const lr1121::Config &c = radio.config(); // current live config ```