39 char name[DEVICE_NAME_LENGTH],
52 LoRa_writeRegister(lora, RegDioMapping1, 0x40);
55 LoRa_writeRegister(lora, LORA_REG_OP_MODE,
56 0x01 << LORA_REG_OP_MODE_LONG_RANGE_Pos
59 LoRa_writeRegister(lora, LORA_REG_MODEM_CONFIG1,
60 bw << LORA_REG_MODEM_CONFIG1_BW_Pos
61 | cr << LORA_REG_MODEM_CONFIG1_CR_Pos
62 | 0x00 << LORA_REG_MODEM_CONFIG1_CRC_Pos
67 LoRa_writeRegister(lora, LORA_REG_MODEM_CONFIG2, 0x94);
70 LoRa_writeRegister(lora, LORA_REG_PAYLOAD_LENGTH, LORA_MSG_LENGTH);
71 LoRa_writeRegister(lora, LORA_REG_MAX_PAYLOAD_LENGTH, LORA_MSG_LENGTH);
76 strcpy(handle.name, name);
83#ifndef DOXYGEN_PRIVATE
95 uint8_t regOpMode = LoRa_readRegister(lora, LORA_REG_OP_MODE);
98 LoRa_writeRegister(lora, LORA_REG_OP_MODE, regOpMode);
124 uint8_t currentState,
152 msg.
data[idx++] = currentState;
153 memcpy(&msg.
data[idx], lAccelData, lenAccel);
154 memcpy(&msg.
data[idx += lenAccel], hAccelData, lenAccel);
155 memcpy(&msg.
data[idx += lenAccel], gyroData, lenGyro);
156 memcpy(&msg.
data[idx += lenGyro], a.b,
sizeof(
float));
157 memcpy(&msg.
data[idx +=
sizeof(
float)], v.b,
sizeof(
float));
173 memcpy(&msg.
data[idx], latitude, 15);
174 memcpy(&msg.
data[idx += 15], longitude, 15);
175 msg.
data[idx += 15] = flags;
191 msg.
data[idx++] = state;
192 memcpy(&msg.
data[idx+lenAccelData], accelData, lenAccelData);
208 LoRa_writeRegister(lora, LORA_REG_IRQ_FLAGS, 0x08);
209 LoRa_writeRegister(lora, LORA_REG_FIFO_ADDR_PTR, 0x80);
212 for (
int i = 0; i < 32; i++) {
213 LoRa_writeRegister(lora, LORA_REG_FIFO, pointerdata[i]);
220 LoRa_writeRegister(lora, LORA_REG_IRQ_FLAGS, 0x08);
225void LoRa_writeRegister(
LoRa *lora, uint8_t address, uint8_t data) {
228 uint16_t payload = (address << 0x08) | (1 << 0x0F);
230 spi.
port->ODR &= ~spi.cs;
235uint8_t LoRa_readRegister(
LoRa *lora, uint8_t address) {
239 uint16_t payload = (address << 0x08);
240 spi.
port->ODR &= ~spi.cs;
241 response = spi.
transmit(&spi, payload);
243 return (uint8_t)response;
uint8_t id
Packet header ID.
uint8_t data[LORA_MSG_PAYLOAD_LENGTH]
Packet payload.
DeviceHandle_t LoRa_init(LoRa *lora, char name[DEVICE_NAME_LENGTH], GPIO_TypeDef *port, unsigned long cs, Bandwidth bw, SpreadingFactor sf, CodingRate cr)
Initializes the LoRa module with specified configuration parameters.
LoRa_Packet LoRa_GPSData(uint8_t id, char *latitude, char *longitude, uint8_t flags)
void _LoRa_setMode(LoRa *lora, Mode mode)
Sets the operational mode of the LoRa module.
LoRa_Packet LoRa_AVData(uint8_t id, uint8_t currentState, uint8_t *lAccelData, uint8_t *hAccelData, uint8_t lenAccel, uint8_t *gyroData, uint8_t lenGyro, float altitude, float velocity)
Constructs a LoRa packet with accelerometer and gyroscope data, altitude, and velocity for transmissi...
void LoRa_transmit(LoRa *, uint8_t *)
Transmits data using the LoRa module.
void SPI_init(SPI *, DeviceType, SPI_TypeDef *, DataFormat, GPIO_TypeDef *, unsigned long)
Initialiser for an SPI device interface.
void(* transmit)(struct LoRa *, uint8_t *)
LoRa transmit method.
SPI base
Parent SPI interface.
Struct definition for SPI interface. Provides the interface for API consumers to interact with the SP...
uint16_t(* transmit)(struct SPI *, uint16_t)
SPI transmit method.
GPIO_TypeDef * port
Pointer to GPIO port struct.
unsigned long cs
Device chip select address.