Files
LoraIDF/main/main.c
2025-04-14 07:06:29 +02:00

215 lines
5.6 KiB
C

#include <stdio.h>
#include "sx1262.h"
#define TAG "SX1262"
const char *msg = "Testing 123 test why is this not on air";
void app_main(void)
{
sx1262_init();
sx1262_resetStats();
ESP_LOGI(TAG, "Setting standby RC");
sx1262_setStandby(SX1262_STANDBY_RC);
ESP_LOGI(TAG, "Getting version");
unsigned char versDat[16];
sx1262_readRegister(0x0320, versDat, 16);
ESP_LOGI(TAG, "Version: %s", versDat);
sx1262_status_t status = sx1262_get_status();
// Read status
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting TCXO");
sx1262_setDIO3AsTCXOCtrl(SX1262_TCXO_VOLTAGE18dV, 320);
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting Buffer base address");
sx1262_setBufferBaseAddress(0, 0);
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting packet Type");
sx1262_setPacketType(SX1262_PACKET_TYPE_LORA);
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting RXTX fallback mode");
sx1262_setRxTXFallbackMode(SX1262_FALLBACK_RC);
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting CAD params");
sx1262_setCadParams(0x03, 0x16, 0x0A, 0, 0);
status = sx1262_get_status();
ESP_LOGI(TAG, "Clearing IRQ status");
sx1262_clearIrqStatus(0x43FF);
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting Image rejection");
sx1262_calibrateImage(0xD7, 0xDB);
status = sx1262_get_status();
ESP_LOGI(TAG, "Calibrating Image rejection");
sx1262_calibrate(SX1262_CALIBRATION_ALL);
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting regulator");
sx1262_setRegulatorMode(SX1262_REGULATOR_DC_DC_LDO);
status = sx1262_get_status();
uint8_t modType;
modType = sx1262_getPacketType();
status = sx1262_get_status();
ESP_LOGI(TAG, "ModType %d", modType);
sx1262_LoRaModulationParams_t loraModParams;
loraModParams.bandwidth = SX1262_LORA_BW_125;
loraModParams.codingRate = SX1262_LORA_CR_4_5;
loraModParams.lowDataRateOpt = 1;
loraModParams.spreadingFactor = SX1262_LORA_SF7;
ESP_LOGI(TAG, "Setting modulation params");
sx1262_setLoRaModulationParams(&loraModParams);
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting Sync word");
uint8_t syncWord[2] = {0x14, 0x24};
sx1262_writeRegister(SX1262_LORA_SYNC_WORD_MSB, syncWord, 2);
status = sx1262_get_status();
uint8_t ocpBuf[1] = {SX126X_OCP_LEVEL_SX1262};
ESP_LOGI(TAG, "Setting overcurrent protection");
sx1262_writeRegister(SX126X_OCP_CONFIGURATION, ocpBuf, 1);
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting RF Switch out");
sx1262_setDIO2AsRfSwitchCtrl(1);
status = sx1262_get_status();
sx1262_LoRaPacketParams_t loraPacketParams;
loraPacketParams.preambleLength = 10;
loraPacketParams.crcType = SX1262_CRC_ON;
loraPacketParams.headerType = SX1262_HEADER_TYPE_VARIABLE;
loraPacketParams.invertIQ = SX1262_STANDARD_IQ;
loraPacketParams.payloadLength = sizeof(msg);
ESP_LOGI(TAG, "Setting packet params");
sx1262_setLoRaPacketParams(&loraPacketParams);
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting frequency");
sx1262_setFrequency(869525000);
uint8_t clampConfig[1] = {0xDE};
ESP_LOGI(TAG, "Setting TX clamp");
sx1262_writeRegister(SX126X_TX_CLAMP_CONFIG, clampConfig, 1);
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting TX power");
sx1262_configure_tx_power(0x04, 0x07, 0x01, 22, SX1262_Ramp_200U);
status = sx1262_get_status();
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting standby XOSC");
sx1262_setStandby(SX1262_STANDBY_XOSC);
status = sx1262_get_status();
sx1262_setDioIrqParams(SX1262_IRQ_ALL, SX1262_IRQ_TXDone, 0, 0);
status = sx1262_get_status();
ESP_LOGI(TAG, "Setting buffer base address");
sx1262_setBufferBaseAddress(0, 0);
status = sx1262_get_status();
ESP_LOGI(TAG, "Writing message");
sx1262_writeBuffer(0, (uint8_t *)msg, sizeof(msg));
ESP_LOGI(TAG, "Clearing IRQs");
sx1262_clearIrqStatus(SX1262_IRQ_ALL);
// sx1262_setTxContinuousWave();
status = sx1262_get_status();
ESP_LOGI(TAG, "Getting modulation type...");
modType = sx1262_getPacketType();
ESP_LOGI(TAG, "ModType %d", modType);
status = sx1262_get_status();
// ESP_LOGI(TAG, "Enabling CW...");
// sx1262_setTxContinuousWave();
// status = sx1262_get_status();
uint8_t txModulation[1] = {0x04};
ESP_LOGI(TAG, "Setting modulation thing");
sx1262_writeRegister(SX126X_TX_MODULATION, txModulation, 1);
status = sx1262_get_status();
ESP_LOGI(TAG, "Clearing IRQs");
sx1262_clearIrqStatus(SX1262_IRQ_ALL);
status = sx1262_get_status();
ESP_LOGI(TAG, "Enabling TX...");
sx1262_setMode(SX1262_TRANSMIT_MODE, 0);
status = sx1262_get_status();
ESP_LOGI(TAG, "Waiting for TX finish");
while (1)
{
if (gpio_get_level(PIN_DIO1))
{
ESP_LOGI(TAG, "Got IRQin");
uint16_t irqS = sx1262_getIrqStatus();
if (irqS & SX1262_IRQ_TXDone)
{
break;
}
}
vTaskDelay(pdMS_TO_TICKS(10));
}
// vTaskDelay(pdMS_TO_TICKS(2000));
// ESP_LOGI(TAG, "Returning back to sleep");
// sx1262_setStandby(SX1262_STANDBY_XOSC);
// status = sx1262_get_status();
ESP_LOGI(TAG, "Clearing IRQs");
sx1262_clearIrqStatus(SX1262_IRQ_TXDone);
status = sx1262_get_status();
while (1)
{
vTaskDelay(pdMS_TO_TICKS(1000));
}
// Set frequency to 868 MHz
// Set TX power to 22 dBm
// sx1262_setTxContinuousWave();
}