Files @ 645e46f4898d
Branch filter:

Location: windsonde/Libraries/Si446x/si446x.h - annotation

ethanzonca
Update scale for bme280 to tenths of percent, disable lps25h
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
851511077b87
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
0f04af7169be
#ifndef SI446X_H
#define SI446X_H

#include "stm32f0xx_hal.h"


// Hardware Options ///////////////////

// Timeout for blocking writes
#define SI446x_TIMEOUT 50

// Crystal/oscillator frequency
#define SI446x_VCXO_FREQ  26000000UL
#define SI446x_SPI SPI1

// GPIO assignments
#define SI446x_CS_PORT GPIOA
#define SI446x_CS_PIN GPIO_PIN_15

#define SI446x_GPIO_PORT GPIOA
#define SI446x_GPIO_PIN GPIO_PIN_10

#define SI446x_SHUTDOWN_PORT GPIOA
#define SI446x_SHUTDOWN_PIN GPIO_PIN_9

#define SI446x_MOSI_PORT GPIOB
#define SI446x_MOSI_PIN GPIO_PIN_5

#define SI446x_MISO_PORT GPIOB
#define SI446x_MISO_PIN GPIO_PIN_4

#define SI446x_SCK_PORT GPIOB
#define SI446x_SCK_PIN GPIO_PIN_3


#define SI446x_TCXO_EN_PORT GPIOA
#define SI446x_TCXO_EN_PIN GPIO_PIN_8


///////////////////////////////////////


// Registers /////////////////////////
#define SI446x_CMD_POWER_UP 0x02
#define SI446x_CMD_NOP 0x00
#define SI446x_CMD_PART_INFO 0x01
#define SI446x_CMD_FUNC_INFO 0x10
#define SI446x_CMD_SET_PROPERTY 0x11
#define SI446x_CMD_GET_PROPERTY 0x12
#define SI446x_CMD_GPIO_PIN_CFG 0x13
#define SI446x_CMD_GET_ADC_READING 0x14
#define SI446x_CMD_FIFO_INFO 0x15
#define SI446x_CMD_PACKET_INFO 0x16
#define SI446x_CMD_IRCAL 0x17
#define SI446x_CMD_PROTOCOL_CFG 0x18
#define SI446x_CMD_GET_INT_STATUS 0x20
#define SI446x_CMD_GET_PH_STATUS 0x21
#define SI446x_CMD_GET_MODEM_STATUS 0x22
#define SI446x_CMD_GET_CHIP_STATUS 0x23
#define SI446x_CMD_START_TX 0x31
#define SI446x_CMD_START_RX 0x32
#define SI446x_CMD_REQUEST_DEVICE_STATE 0x33
#define SI446x_CMD_CHANGE_STATE 0x34
#define SI446x_CMD_READ_CMD_BUFF 0x44
#define SI446x_CMD_FRR_A_READ 0x50
#define SI446x_CMD_FRR_B_READ 0x51
#define SI446x_CMD_FRR_C_READ 0x53
#define SI446x_CMD_FRR_D_READ 0x57
#define SI446x_CMD_WRITE_TX_FIFO 0x66
#define SI446x_CMD_READ_RX_FIFO 0x77
#define SI446x_CMD_RX_HOP 0x36

// GPIO pin configuration options
#define SI446x_GPIO_NOCHANGE 0
#define SI446x_GPIO_LOW 2
#define SI446x_GPIO_HIGH 3
#define SI446x_GPIO_INPUT 4
#define SI446x_GPIO_TXFIFO_LOW 35
#define SI446x_GPIO_TXENABLED 32

// GPIO pin definitions
#define SI446x_GPIO0 0
#define SI446x_GPIO1 1
#define SI446x_GPIO2 2
#define SI446x_GPIO3 3

// Property MOD_TYPE parameters
#define SI446x_MOD_TYPE_REGISTER_GROUP 0x20
#define SI446x_MOD_TYPE_REGISTER_PROP 0x00
#define SI446x_MOD_TYPE_CW    0
#define SI446x_MOD_TYPE_OOK   1
#define SI446x_MOD_TYPE_2FSK  2
#define SI446x_MOD_TYPE_2GFSK 3
#define SI446x_MOD_TYPE_4FSK  4
#define SI446x_MOD_TYPE_4GFSK 5

#define SI446x_MOD_TYPE_SOURCE_PACKETHANDLER (0<<3)
#define SI446x_MOD_TYPE_SOURCE_DIRECTMODE    (1<<3)
#define SI446x_MOD_TYPE_SOURCE_PSEUDORANDOM  (2<<3)

#define SI446x_MOD_TYPE_DIRECT_SYNCH (0<<7)
#define SI446x_MOD_TYPE_DIRECT_ASYNCH (1<<7)

#define SI446x_MOD_TYPE_DIRECT_SOURCE_GPIO0 (0<<5)
#define SI446x_MOD_TYPE_DIRECT_SOURCE_GPIO1 (1<<5)
#define SI446x_MOD_TYPE_DIRECT_SOURCE_GPIO2 (2<<5)
#define SI446x_MOD_TYPE_DIRECT_SOURCE_GPIO3 (3<<5)

// XO Tune
#define SI446x_XO_TUNE_REGISTER_GROUP 0x00
#define SI446x_XO_TUNE_REGISTER_PROP 0x00
#define SI446x_XO_TUNE_MAX 0x7F

// Modem bit mapping
#define SI446x_MODEM_MAP_GROUP 0x20
#define SI446x_MODEM_MAP_PROP 0x01

// Preamble
#define SI446x_PREAMBLE_TX_LENGTH_GROUP 0x10
#define SI446x_PREAMBLE_TX_LENGTH_PROP 0x00

// Sync
#define SI446x_SYNC_LENGTH_GROUP 0x11
#define SI446x_SYNC_LENGTH_PROP 0x00


// Power amp control DAC options
#define AD56XX_NORMAL_OPERATION 0b00000000
#define AD56XX_1K_TO_GROUND     0b01000000
#define AD56XX_100K_TO_GROUND   0b10000000
#define AD56XX_TRI_STATE        0b11000000



// Internal definitions
#define SI446x_CS SI446x_CS_PORT, SI446x_CS_PIN
#define SI446x_MOSI SI446x_MOSI_PORT, SI446x_MOSI_PIN
#define SI446x_MISO SI446x_MISO_PORT, SI446x_MISO_PIN
#define SI446x_SCK SI446x_SCK_PORT, SI446x_SCK_PIN
#define SI446x_GPIO SI446x_GPIO_PORT, SI446x_GPIO_PIN
#define SI446x_SHUTDOWN SI446x_SHUTDOWN_PORT , SI446x_SHUTDOWN_PIN


// Communication options
#define SI446x_IGNORE_ACK 0
#define SI446x_CHECK_ACK 1


// Helper macros
#define SI446x_SELECT HAL_GPIO_WritePin(SI446x_CS, GPIO_PIN_RESET)
#define SI446x_DESELECT HAL_GPIO_WritePin(SI446x_CS, GPIO_PIN_SET)

void si446x_init(void);

void si446x_reset(void);

void si446x_gpio(uint8_t gpio, uint8_t state, uint8_t doack);

void si446x_setdatarate(void);

void si446x_senddata(uint8_t* data, uint8_t len);
void si446x_sendcmd(uint8_t tx_len, uint8_t* data, uint8_t doack);


void si446x_setchannel(uint32_t frequency);

void si446x_cw_on(void);
void si446x_cw_off(void);
uint8_t si446x_tx_status(void);

SPI_HandleTypeDef* spi1_get(void);

void si446x_shutdown(void);
void si446x_wakeup(void);

#endif