![]() |
Si4463 Radio Library for AVR and Arduino
1.0
|
#include <stdint.h>#include "Si446x_config.h"Go to the source code of this file.
Data Structures | |
| struct | si446x_info_t |
| Data structure for storing chip info from Si446x_getInfo() More... | |
Macros | |
| #define | SI446X_MAX_PACKET_LEN 128 |
| Maximum packet length. More... | |
| #define | SI446X_MAX_TX_POWER 127 |
| Maximum TX power (+20dBm/100mW) More... | |
| #define | SI446X_WUT_RUN 1 |
| Wake the microcontroller when the WUT expires. More... | |
| #define | SI446X_WUT_BATT 2 |
| Take a battery measurement when the WUT expires. More... | |
| #define | SI446X_WUT_RX 4 |
| Go into RX mode for LDC time (not supported yet!) More... | |
| #define | SI446X_GPIO_PULL_EN 0x40 |
| Pullup enable for GPIO pins. More... | |
| #define | SI446X_GPIO_PULL_DIS 0x00 |
| Pullup disable for GPIO pins. More... | |
| #define | SI446X_NIRQ_PULL_EN 0x40 |
| Pullup enable for NIRQ pin. More... | |
| #define | SI446X_NIRQ_PULL_DIS 0x00 |
| Pullup disable for NIRQ pin. More... | |
| #define | SI446X_SDO_PULL_EN 0x40 |
| Pullup enable for SDO pin. More... | |
| #define | SI446X_SDO_PULL_DIS 0x00 |
| Pullup disable for SDO pin. More... | |
| #define | SI446X_PIN_PULL_EN 0x40 |
| Pullup enable for any pin. More... | |
| #define | SI446X_PIN_PULL_DIS 0x00 |
| Pullup disable for any pin. More... | |
| #define | SI446X_GPIO_DRV_HIGH 0x00 |
| GPIO drive strength high. More... | |
| #define | SI446X_GPIO_DRV_MED_HIGH 0x20 |
| GPIO drive strength medium-high. More... | |
| #define | SI446X_GPIO_DRV_MED_LOW 0x40 |
| GPIO drive strength medium-low. More... | |
| #define | SI446X_GPIO_DRV_LOW 0x60 |
| GPIO drive strength low. More... | |
| #define | SI446X_PROP_GROUP_GLOBAL 0x00 |
| Property group global. More... | |
| #define | SI446X_PROP_GROUP_INT 0x01 |
| Property group interrupts. More... | |
| #define | SI446X_PROP_GROUP_FRR 0x02 |
| Property group fast response registers. More... | |
| #define | SI446X_PROP_GROUP_PREAMBLE 0x10 |
| Property group preamble. More... | |
| #define | SI446X_PROP_GROUP_SYNC 0x11 |
| Property group sync. More... | |
| #define | SI446X_PROP_GROUP_PKT 0x12 |
| Property group packet config. More... | |
| #define | SI446X_PROP_GROUP_MODEM 0x20 |
| Property group modem. More... | |
| #define | SI446X_PROP_GROUP_MODEM_CHFLT 0x21 |
| Property group RX coefficients. More... | |
| #define | SI446X_PROP_GROUP_PA 0x22 |
| Property group power amp. More... | |
| #define | SI446X_PROP_GROUP_SYNTH 0x23 |
| Property group synthesizer. More... | |
| #define | SI446X_PROP_GROUP_MATCH 0x30 |
| Property group address match. More... | |
| #define | SI446X_PROP_GROUP_FREQ_CONTROL 0x40 |
| Property group frequency control. More... | |
| #define | SI446X_PROP_GROUP_RX_HOP 0x50 |
| Property group RX hop. More... | |
| #define | SI446X_PROP_GROUP_PTI 0xF0 |
| Property group packet trace interface. More... | |
| #define | SI446X_CBS_SENT _BV(5+8) |
| Enable/disable packet sent callback. More... | |
| #define | SI446X_CBS_RXBEGIN _BV(0) |
| Enable/disable packet receive begin callback. More... | |
| #define | SI446X_NO_INTERRUPT() |
| Disable Si446x interrupts for code inside this block. More... | |
Functions | |
| void | Si446x_init (void) |
| Initialise, must be called before anything else! More... | |
| void | Si446x_getInfo (si446x_info_t *info) |
| Get chip info, see si446x_info_t. More... | |
| int16_t | Si446x_getRSSI (void) |
| Get the current RSSI, the chip needs to be in receive mode for this to work. More... | |
| void | Si446x_setTxPower (uint8_t pwr) |
Set the transmit power. The output power does not follow the pwr value, see the Si446x datasheet for a pretty graph. More... | |
| void | Si446x_setupCallback (uint16_t callbacks, uint8_t state) |
| Enable or disable callbacks. This is mainly to configure what events should wake the microcontroller up. More... | |
| void | Si446x_read (void *buff, uint8_t len) |
| Read received data from FIFO. More... | |
| uint8_t | Si446x_TX (void *packet, uint8_t len, uint8_t channel, si446x_state_t onTxFinish) |
| Transmit a packet. More... | |
| void | Si446x_RX (uint8_t channel) |
| Enter receive mode. More... | |
| void | Si446x_setLowBatt (uint16_t voltage) |
| Set the low battery voltage alarm. More... | |
| void | Si446x_setupWUT (uint8_t r, uint16_t m, uint8_t ldc, uint8_t config) |
| Configure the wake up timer. More... | |
| void | Si446x_disableWUT (void) |
| Disable the wake up timer. More... | |
| uint8_t | Si446x_sleep (void) |
| Enter sleep mode. More... | |
| si446x_state_t | Si446x_getState (void) |
| Get the radio status. More... | |
| uint16_t | Si446x_adc_gpio (uint8_t pin) |
| Read pin ADC value. More... | |
| uint16_t | Si446x_adc_battery (void) |
| Read supply voltage. More... | |
| float | Si446x_adc_temperature (void) |
| Read temperature. More... | |
| void | Si446x_writeGPIO (si446x_gpio_t pin, uint8_t value) |
| Configure GPIO/NIRQ/SDO pin. More... | |
| uint8_t | Si446x_readGPIO (void) |
| Read GPIO pin states. More... | |
| uint8_t | Si446x_dump (void *buff, uint8_t group) |
| Get all values of a property group. More... | |
| void | Si446x_SERVICE (void) |
| If interrupts are disabled (::SI446X_INTERRUPTS in Si446x_config.h) then this function should be called as often as possible to process any events. More... | |
| uint8_t | Si446x_irq_off (void) |
| When using interrupts use this to disable them for the Si446x. More... | |
| void | Si446x_irq_on (uint8_t origVal) |
| When using interrupts use this to re-enable them for the Si446x. More... | |
| #define SI446X_CBS_RXBEGIN _BV(0) |
Enable/disable packet receive begin callback.
| #define SI446X_CBS_SENT _BV(5+8) |
Enable/disable packet sent callback.
| #define SI446X_GPIO_DRV_HIGH 0x00 |
GPIO drive strength high.
| #define SI446X_GPIO_DRV_LOW 0x60 |
GPIO drive strength low.
| #define SI446X_GPIO_DRV_MED_HIGH 0x20 |
GPIO drive strength medium-high.
| #define SI446X_GPIO_DRV_MED_LOW 0x40 |
GPIO drive strength medium-low.
| #define SI446X_GPIO_PULL_DIS 0x00 |
Pullup disable for GPIO pins.
| #define SI446X_GPIO_PULL_EN 0x40 |
Pullup enable for GPIO pins.
| #define SI446X_MAX_PACKET_LEN 128 |
Maximum packet length.
| #define SI446X_MAX_TX_POWER 127 |
Maximum TX power (+20dBm/100mW)
| #define SI446X_NIRQ_PULL_DIS 0x00 |
Pullup disable for NIRQ pin.
| #define SI446X_NIRQ_PULL_EN 0x40 |
Pullup enable for NIRQ pin.
| #define SI446X_NO_INTERRUPT | ( | ) |
Disable Si446x interrupts for code inside this block.
When communicating with other SPI devices on the same bus as the radio then you should wrap those sections in a SI446X_NO_INTERRUPT() block, this will stop the Si446x interrupt from running and trying to use the bus at the same time. This macro is based on the code from avr/atomic.h, and wraps the Si446x_irq_off() and Si446x_irq_on() functions instead of messing with global interrupts. It is safe to return, break or continue inside an SI446X_NO_INTERRUPT() block.
Example:
Si446x_RX(63);
SI446X_NO_INTERRUPT()
{
OLED.write("blah", 2, 10); // Communicate with SPI OLED display
}
| #define SI446X_PIN_PULL_DIS 0x00 |
Pullup disable for any pin.
| #define SI446X_PIN_PULL_EN 0x40 |
Pullup enable for any pin.
| #define SI446X_PROP_GROUP_FREQ_CONTROL 0x40 |
Property group frequency control.
| #define SI446X_PROP_GROUP_FRR 0x02 |
Property group fast response registers.
| #define SI446X_PROP_GROUP_GLOBAL 0x00 |
Property group global.
| #define SI446X_PROP_GROUP_INT 0x01 |
Property group interrupts.
| #define SI446X_PROP_GROUP_MATCH 0x30 |
Property group address match.
| #define SI446X_PROP_GROUP_MODEM 0x20 |
Property group modem.
| #define SI446X_PROP_GROUP_MODEM_CHFLT 0x21 |
Property group RX coefficients.
| #define SI446X_PROP_GROUP_PA 0x22 |
Property group power amp.
| #define SI446X_PROP_GROUP_PKT 0x12 |
Property group packet config.
| #define SI446X_PROP_GROUP_PREAMBLE 0x10 |
Property group preamble.
| #define SI446X_PROP_GROUP_PTI 0xF0 |
Property group packet trace interface.
| #define SI446X_PROP_GROUP_RX_HOP 0x50 |
Property group RX hop.
| #define SI446X_PROP_GROUP_SYNC 0x11 |
Property group sync.
| #define SI446X_PROP_GROUP_SYNTH 0x23 |
Property group synthesizer.
| #define SI446X_SDO_PULL_DIS 0x00 |
Pullup disable for SDO pin.
| #define SI446X_SDO_PULL_EN 0x40 |
Pullup enable for SDO pin.
| #define SI446X_WUT_BATT 2 |
Take a battery measurement when the WUT expires.
| #define SI446X_WUT_RUN 1 |
Wake the microcontroller when the WUT expires.
| #define SI446X_WUT_RX 4 |
Go into RX mode for LDC time (not supported yet!)
| enum si446x_gpio_mode_t |
GPIO pin modes (see the Si446x API docs for what they all mean)
| enum si446x_gpio_t |
GPIOs for passing to Si446x_writeGPIO(), or for masking when reading from Si446x_readGPIO()
| Enumerator | |
|---|---|
| SI446X_GPIO0 | GPIO 1. |
| SI446X_GPIO1 | GPIO 2. |
| SI446X_GPIO2 | GPIO 3. |
| SI446X_GPIO3 | GPIO 4. |
| SI446X_NIRQ | NIRQ. |
| SI446X_SDO | SDO. |
| enum si446x_nirq_mode_t |
NIRQ pin modes (see the Si446x API docs for what they all mean)
| enum si446x_sdo_mode_t |
SDO pin modes (see the Si446x API docs for what they all mean)
| enum si446x_state_t |
Radio states, returned from Si446x_getState()
| Enumerator | |
|---|---|
| SI446X_STATE_NOCHANGE | |
| SI446X_STATE_SLEEP | This will never be returned since SPI activity will wake the radio into SI446X_STATE_SPI_ACTIVE. |
| SI446X_STATE_SPI_ACTIVE | |
| SI446X_STATE_READY | |
| SI446X_STATE_READY2 | Will return as SI446X_STATE_READY. |
| SI446X_STATE_TX_TUNE | Will return as SI446X_STATE_TX. |
| SI446X_STATE_RX_TUNE | Will return as SI446X_STATE_RX. |
| SI446X_STATE_TX | |
| SI446X_STATE_RX | |
| uint16_t Si446x_adc_battery | ( | void | ) |
Read supply voltage.
| uint16_t Si446x_adc_gpio | ( | uint8_t | pin | ) |
Read pin ADC value.
| [pin] | The GPIO pin number (0 - 3) |
| float Si446x_adc_temperature | ( | void | ) |
Read temperature.
| void Si446x_disableWUT | ( | void | ) |
Disable the wake up timer.
| uint8_t Si446x_dump | ( | void * | buff, |
| uint8_t | group | ||
| ) |
Get all values of a property group.
| [buff] | Pointer to memory to place group values, if this is NULL then nothing will be dumped, just the group size is returned |
| [group] | The group to dump |
| void Si446x_getInfo | ( | si446x_info_t * | info | ) |
Get chip info, see si446x_info_t.
| [info] | Pointer to allocated si446x_info_t struct to place data into |
| int16_t Si446x_getRSSI | ( | void | ) |
Get the current RSSI, the chip needs to be in receive mode for this to work.
| si446x_state_t Si446x_getState | ( | void | ) |
| void Si446x_init | ( | void | ) |
Initialise, must be called before anything else!
| uint8_t Si446x_irq_off | ( | void | ) |
When using interrupts use this to disable them for the Si446x.
Ideally you should wrap sensitive sections with SI446X_NO_INTERRUPT() instead, as it automatically deals with this function and Si446x_irq_on()
| void Si446x_irq_on | ( | uint8_t | origVal | ) |
When using interrupts use this to re-enable them for the Si446x.
Ideally you should wrap sensitive sections with SI446X_NO_INTERRUPT() instead, as it automatically deals with this function and Si446x_irq_off()
| [origVal] | The original interrupt status returned from Si446x_irq_off() |
| void Si446x_read | ( | void * | buff, |
| uint8_t | len | ||
| ) |
Read received data from FIFO.
| [buff] | Pointer to buffer to place data |
| [len] | Number of bytes to read, make sure not to read more bytes than what the FIFO has stored. The number of bytes that can be read is passed in the ::SI446X_CB_RXCOMPLETE() callback. |
| uint8_t Si446x_readGPIO | ( | void | ) |
Read GPIO pin states.
| void Si446x_RX | ( | uint8_t | channel | ) |
Enter receive mode.
Entering RX mode will abort any transmissions happening at the time
| [channel] | Channel to listen to (0 - 255) |
| void Si446x_SERVICE | ( | void | ) |
If interrupts are disabled (::SI446X_INTERRUPTS in Si446x_config.h) then this function should be called as often as possible to process any events.
| void Si446x_setLowBatt | ( | uint16_t | voltage | ) |
Set the low battery voltage alarm.
The ::SI44653_CB_LOWBATT() callback will be ran when the supply voltage drops below this value. The WUT must be configured with Si446x_setupWUT() to enable periodically checking the battery level.
| [voltage] | The low battery threshold in millivolts (1050 - 3050). |
| void Si446x_setTxPower | ( | uint8_t | pwr | ) |
Set the transmit power. The output power does not follow the pwr value, see the Si446x datasheet for a pretty graph.
0 = -32dBm (<1uW)
7 = 0dBm (1mW)
12 = 5dBm (3.2mW)
22 = 10dBm (10mW)
40 = 15dBm (32mW)
100 = 20dBm (100mW)
| [pwr] | A value from 0 to 127 |
| void Si446x_setupCallback | ( | uint16_t | callbacks, |
| uint8_t | state | ||
| ) |
Enable or disable callbacks. This is mainly to configure what events should wake the microcontroller up.
| [callbacks] | The callbacks to configure (multiple callbacks should be bitewise OR'd together) |
| [state] | Enable or disable the callbacks passed in callbacks parameter (1 = Enable, 0 = Disable) |
| void Si446x_setupWUT | ( | uint8_t | r, |
| uint16_t | m, | ||
| uint8_t | ldc, | ||
| uint8_t | config | ||
| ) |
Configure the wake up timer.
This function will also reset the timer.
The Wake Up Timer (WUT) can be used to periodically run a number of features:
SI446X_WUT_RUN Simply wake up the microcontroller when the WUT expires and run the ::SI446X_CB_WUT() callback.
SI446X_WUT_BATT Check battery voltage - If the battery voltage is below the threshold set by Si446x_setLowBatt() then wake up the microcontroller and run the ::SI44653_CB_LOWBATT() callback.
SI446X_WUT_RX Enter receive mode for a length of time determinded by the ldc and r parameters (NOT SUPPORTED YET! dont use this option)
For more info see the GLOBAL_WUT_M, GLOBAL_WUT_R and GLOBAL_WUT_LDC properties in the Si446x API docs.
| [r] | Exponent value for WUT and LDC (Maximum valus is 20) |
| [m] | Mantissia value for WUT |
| [ldc] | Mantissia value for LDC (NOT SUPPORTED YET, just pass 0 for now) |
| [config] | Which WUT features to enable SI446X_WUT_RUN SI446X_WUT_BATT SI446X_WUT_RX These can be bitwise OR'ed together to enable multiple features. |
| uint8_t Si446x_sleep | ( | void | ) |
Enter sleep mode.
If WUT is enabled then the radio will keep the internal 32KHz RC enabled with a current consumption of 740nA, otherwise the current consumption will be 40nA without WUT. Sleep will fail if the radio is currently transmitting.
| uint8_t Si446x_TX | ( | void * | packet, |
| uint8_t | len, | ||
| uint8_t | channel, | ||
| si446x_state_t | onTxFinish | ||
| ) |
Transmit a packet.
| [packet] | Pointer to packet data |
| [len] | Number of bytes to transmit, maximum of SI446X_MAX_PACKET_LEN |
| [channel] | Channel to transmit data on (0 - 255) |
| [onTxFinish] | What state to enter when the packet has finished transmitting. Usually SI446X_STATE_SLEEP or SI446X_STATE_RX |
| void Si446x_writeGPIO | ( | si446x_gpio_t | pin, |
| uint8_t | value | ||
| ) |
Configure GPIO/NIRQ/SDO pin.
| [pin] | The pin, this can only take a single pin (don't use bitwise OR), see si446x_gpio_t |
| [value] | The new pin mode, this can be bitwise OR'd with the SI446X_PIN_PULL_EN option, see si446x_gpio_mode_t si446x_nirq_mode_t si446x_sdo_mode_t |
1.8.13