diff --git a/examples/proprietary_trx/CMakeLists.txt b/examples/proprietary_trx/CMakeLists.txt new file mode 100644 index 00000000..4bb7f4f3 --- /dev/null +++ b/examples/proprietary_trx/CMakeLists.txt @@ -0,0 +1,21 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.20.0) +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(propriatery_trx) + +target_include_directories(app PRIVATE + src/ + src/autogen/ + src/config/ + src/config/rail + src/config/rail/${CONFIG_BOARD} +) + +target_sources(app PRIVATE src/main.c) +target_sources(app PRIVATE src/app_gpio.c) +target_sources(app PRIVATE src/app_cli.c) +target_sources(app PRIVATE src/app_rail.c) +target_sources(app PRIVATE src/autogen/sl_rail_util_callbacks.c) +target_sources(app PRIVATE src/autogen/sl_rail_util_init.c) +target_sources(app PRIVATE src/config/rail/${CONFIG_BOARD}/rail_config.c) diff --git a/examples/proprietary_trx/README.rst b/examples/proprietary_trx/README.rst new file mode 100644 index 00000000..d14c22fd --- /dev/null +++ b/examples/proprietary_trx/README.rst @@ -0,0 +1,102 @@ +Proprietary TRX +############### + +Overview +******** + +The Proprietary TRX example demonstrates the simplest exchange of transmit and +receive operation between two nodes implemented in RAIL. + +This application can be used for setting up a simple link test, where the nodes +are listening except for the short periods where packet transmission takes +place. Also, this application can be used as a learning material. + +Requirements +************ + +This application requires part or board that support RAIL, has radio antenna +connection and has at least one LED and one button. + +Building and Running +******************** + +This sample can be built for multiple boards, in this example we will build it +for the efr32bg22_brd4184a board: + +.. code-block:: bash + + west build -p always -b efr32bg22_brd4184a + + +This example implements both the receiver (RX) and the transmitter (TX) nodes. +The implementation is therefore symmetric, as both nodes are capable of sending +and receiving messages. In this document the use of `RX node` and `TX node` are +implicit and these terms refer the devices temporary, while the denoted +operations are performed. + +Compile the project and download the application to two radio boards. + +On startup the Zephyr boot will be displayed, with additional information +about the RAIL library version. + +The devices start in the receiving state. + +Issue the `send` command on the TX node to request packet transmission: + +.. code-block:: bash + + send + > Send packet request + > Packet has been sent + +Additional logs can be viewed by the logger, which can be turned off. + +On the receiver side the following response will be printed out on packet +reception: + +.. code-block:: bash + + > Packet has been received: 0x0F, 0x16, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, + +Additional logs can be viewed by the logger, which can be turned off. + +If the reception is enabled the device will automatically switch back to RX mode +either after a successful or faulty reception or a transmission. + + +The reception can be disabled by the `receive` command. + +.. code-block:: bash + + receive 0 + > Received packets: NOK + +Receive mode can be enabled again by the same command: + +.. code-block:: bash + + receive 1 + > Received packets: OK + + +Peripherals +*********** + +Same working can be achieved by pushing button or buttons and waiting for the led +or LEDs to toggle. + +Extra settings +************** + +For changing any settings for the used radio or radio phy please re-generate the rail_config.c and rail_config.h files use Simplicity Studio's `EFR32 Radio Configurator`_. + +.. _EFR32 Radio Configurator: https://www.silabs.com/documents/public/application-notes/an1253-efr32-radio-configurator-guide-for-ssv5.pdf + +Extra Resources +*************** + +- `RAIL Tutorial Series`_: + it is advised to read through the `Studio v5 series` first to familiarize the + basics of packet transmission and reception + +.. _RAIL Tutorial Series: https://community.silabs.com/s/article/rail-tutorial-series?language=en_US diff --git a/examples/proprietary_trx/boards/efr32bg22_brd4184a.overlay b/examples/proprietary_trx/boards/efr32bg22_brd4184a.overlay new file mode 100644 index 00000000..24bc8396 --- /dev/null +++ b/examples/proprietary_trx/boards/efr32bg22_brd4184a.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 Silicon Laboratories Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&cpu0 { + cpu-power-states = <&pstate_em1>; +}; diff --git a/examples/proprietary_trx/boards/efr32bg22_brd4184b.overlay b/examples/proprietary_trx/boards/efr32bg22_brd4184b.overlay new file mode 100644 index 00000000..24bc8396 --- /dev/null +++ b/examples/proprietary_trx/boards/efr32bg22_brd4184b.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 Silicon Laboratories Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&cpu0 { + cpu-power-states = <&pstate_em1>; +}; diff --git a/examples/proprietary_trx/boards/efr32mg22_brd4182a.overlay b/examples/proprietary_trx/boards/efr32mg22_brd4182a.overlay new file mode 100644 index 00000000..24bc8396 --- /dev/null +++ b/examples/proprietary_trx/boards/efr32mg22_brd4182a.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2023 Silicon Laboratories Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&cpu0 { + cpu-power-states = <&pstate_em1>; +}; diff --git a/examples/proprietary_trx/prj.conf b/examples/proprietary_trx/prj.conf new file mode 100644 index 00000000..9eebbfdd --- /dev/null +++ b/examples/proprietary_trx/prj.conf @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: Apache-2.0 +CONFIG_GPIO=y +CONFIG_SOC_GECKO_CUSTOM_RADIO_PHY=y +CONFIG_FPU=y +CONFIG_PM=y +CONFIG_PRINTK=y +CONFIG_LOG=y +CONFIG_SHELL=y +CONFIG_EVENTS=y +CONFIG_ASSERT=y +CONFIG_BOOT_BANNER=y +CONFIG_POSIX_CLOCK=y +CONFIG_INIT_STACKS=y +CONFIG_SMF=y diff --git a/examples/proprietary_trx/prj_efr32xg24_dk2601b.conf b/examples/proprietary_trx/prj_efr32xg24_dk2601b.conf new file mode 100644 index 00000000..c4093c09 --- /dev/null +++ b/examples/proprietary_trx/prj_efr32xg24_dk2601b.conf @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: Apache-2.0 +CONFIG_GPIO=y +CONFIG_SOC_GECKO_CUSTOM_RADIO_PHY=y +CONFIG_FPU=y +CONFIG_PRINTK=y +CONFIG_LOG=y +CONFIG_SHELL=y +CONFIG_EVENTS=y +CONFIG_ASSERT=y +CONFIG_BOOT_BANNER=y +CONFIG_POSIX_CLOCK=y +CONFIG_INIT_STACKS=y +CONFIG_SMF=y diff --git a/examples/proprietary_trx/src/app_cli.c b/examples/proprietary_trx/src/app_cli.c new file mode 100644 index 00000000..8c477ec9 --- /dev/null +++ b/examples/proprietary_trx/src/app_cli.c @@ -0,0 +1,58 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +// ----------------------------------------------------------------------------- +// Includes + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "em_chip.h" +#include "app_process.h" + +// ----------------------------------------------------------------------------- +// Public Function Definitions + +/****************************************************************************** + * CLI - send: Sets a flag indicating that a packet has to be sent + *****************************************************************************/ +void cli_send_packet(const struct shell *sh, size_t argc, char **argv) +{ + shell_fprintf(sh, SHELL_NORMAL, "Send packet request\n"); + k_event_post(&s_sl_machine.smf_event, EVENT_REQUEST_SEND); +} + +/****************************************************************************** + * CLI - info message: Unique ID of the board + *****************************************************************************/ +void cli_info(const struct shell *sh, size_t argc, char **argv) +{ + shell_fprintf(sh, SHELL_NORMAL, "Info:\n"); + shell_fprintf(sh, SHELL_NORMAL, " MCU Id: 0x%llx\n", SYSTEM_GetUnique()); +} + +/****************************************************************************** + * CLI - receive: Turn on/off continues packet receiving + *****************************************************************************/ +void cli_receive_packet(const struct shell *sh, size_t argc, char **argv) +{ + uint8_t continues_receive = (uint8_t)(strtoul(argv[1], NULL, 0)); + s_sl_machine.allow_rx = (continues_receive == 0) ? false : true; + shell_fprintf(sh, SHELL_NORMAL, "Continues packet receiving is %s\n", + (continues_receive == 0) ? "OFF" : "ON"); + k_event_post(&s_sl_machine.smf_event, EVENT_CLI_RECEIVE_SETTING); +} + +SHELL_CMD_ARG_REGISTER(info, NULL, "Display unique ID of the MCU", cli_info, 1, 0); + +SHELL_CMD_ARG_REGISTER(send, NULL, "Send a packet", cli_send_packet, 1, 0); + +SHELL_CMD_ARG_REGISTER(receive, NULL, "Turn ON/OFF continues packet receiving", cli_receive_packet, + 2, 0); diff --git a/examples/proprietary_trx/src/app_gpio.c b/examples/proprietary_trx/src/app_gpio.c new file mode 100644 index 00000000..2a11fd51 --- /dev/null +++ b/examples/proprietary_trx/src/app_gpio.c @@ -0,0 +1,179 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +// ----------------------------------------------------------------------------- +// Includes + +#include +#include +#include +#include +#include +#include +#include +#include +#include "app_gpio.h" +#include "app_process.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs + +LOG_MODULE_DECLARE(trx_app_log); + +// Get button configuration from the devicetree sw0 alias. This is mandatory. +#if !DT_NODE_HAS_STATUS(DT_ALIAS(sw0), okay) +#error "Unsupported board: sw0 devicetree alias is not defined" +#endif + +// ----------------------------------------------------------------------------- +// Static Function Declarations + +// Callback function to handle button press for sending a packet +static void button_pressed(const struct device *dev, struct gpio_callback *cb, uint32_t pins); + +// Initialize given button to use button_press callback +static uint8_t init_button(struct gpio_dt_spec button); + +static uint8_t init_led(struct gpio_dt_spec led); + +// ----------------------------------------------------------------------------- +// Global Variables + +// ----------------------------------------------------------------------------- +// Static Variables + +// Get led configuration from the devicetree led0 alias. This is mandatory. +#if !DT_NODE_HAS_STATUS(DT_ALIAS(led0), okay) +#error "Unsupported board: led0 devicetree alias is not defined" +#else +static struct gpio_dt_spec led0 = GPIO_DT_SPEC_GET_OR(DT_ALIAS(led0), gpios, {0}); +#endif + +// Get led configuration from the devicetree led1 alias. This is optional. +static struct gpio_dt_spec led1 = GPIO_DT_SPEC_GET_OR(DT_ALIAS(led1), gpios, {0}); + +// ----------------------------------------------------------------------------- +// Public Function Definitions + +uint8_t app_init_gpios(void) +{ + const struct gpio_dt_spec button1 = GPIO_DT_SPEC_GET_OR(DT_ALIAS(sw1), gpios, {0}); + const struct gpio_dt_spec button0 = GPIO_DT_SPEC_GET_OR(DT_ALIAS(sw0), gpios, {0}); + + uint8_t ret = 0; + ret = init_button(button0); + if (ret) { + return ret; + } + if (DT_NODE_HAS_STATUS(DT_ALIAS(sw1), okay)) { + ret = init_button(button1); + if (ret) { + return ret; + } + } + + ret = init_led(led0); + if (ret) { + return ret; + } + if (DT_NODE_HAS_STATUS(DT_ALIAS(led1), okay)) { + ret = init_led(led1); + if (ret) { + return ret; + } + } + + return ret; +} + +void app_update_receive_led(void) +{ + int ret = 0; + ret = gpio_pin_toggle_dt(&led0); + if (ret) { + LOG_WRN("Led toggle for led0 returned with %d", ret); + } +} + +void app_update_send_led(void) +{ + int ret = 0; + if (DT_NODE_HAS_STATUS(DT_ALIAS(led1), okay)) { + ret = gpio_pin_toggle_dt(&led1); + if (ret) { + LOG_WRN("Led toggle for led1 returned with %d", ret); + } + } else { + ret = gpio_pin_toggle_dt(&led0); + if (ret) { + LOG_WRN("Led toggle for led0 returned with %d", ret); + } + } +} +// ----------------------------------------------------------------------------- +// Static Function Definitions + +static void button_pressed(const struct device *dev, struct gpio_callback *cb, uint32_t pins) +{ + k_event_post(&s_sl_machine.smf_event, EVENT_REQUEST_SEND); +} + +static uint8_t init_button(struct gpio_dt_spec button) +{ + static struct gpio_callback button_cb_data; + + int ret = 0; + if (!gpio_is_ready_dt(&button)) { + LOG_ERR("Error: button device %s is not ready", button.port->name); + return 1; + } + + ret = gpio_pin_configure_dt(&button, GPIO_INPUT); + if (ret) { + LOG_ERR("Error %d: failed to configure %s pin %d", ret, button.port->name, + button.pin); + return ret; + } + + ret = gpio_pin_interrupt_configure_dt(&button, GPIO_INT_EDGE_TO_ACTIVE); + if (ret) { + LOG_ERR("Error %d: failed to configure interrupt on %s pin %d", ret, + button.port->name, button.pin); + return ret; + } + + gpio_init_callback(&button_cb_data, button_pressed, BIT(button.pin)); + gpio_add_callback(button.port, &button_cb_data); + + return 0; +} + +static uint8_t init_led(struct gpio_dt_spec led) +{ + int ret = 0; + if (led.port && !gpio_is_ready_dt(&led)) { + LOG_ERR("LED device %s is not ready; ignoring it", led.port->name); + led.port = NULL; + return 1; + } + + if (!led.port) { + return 1; + } + + ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT); + if (ret) { + LOG_ERR("Error %d: failed to configure LED device %s pin %d", ret, led.port->name, + led.pin); + led.port = NULL; + return ret; + } + + ret = gpio_pin_set_dt(&led, 0); + if (ret) { + LOG_WRN("Led clear for led1 returned with %d", ret); + } + + return 0; +} diff --git a/examples/proprietary_trx/src/app_gpio.h b/examples/proprietary_trx/src/app_gpio.h new file mode 100644 index 00000000..6bf21945 --- /dev/null +++ b/examples/proprietary_trx/src/app_gpio.h @@ -0,0 +1,37 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef APP_GPIO_H +#define APP_GPIO_H + +// ----------------------------------------------------------------------------- +// Public Function Declarations + +/** + * @brief Initialize GPIOs for the application. + * + * Initializes the GPIOs used by the application. + * One or two buttons, one is mandatory because of sending. + * One or two leds, for showing the send, receive packets. + * + * @return uint8_t The initialization status. 0 indicates success, and non-zero + * values indicate an error. + */ +uint8_t app_init_gpios(void); + +/** + * @brief Update the receive LED status. + * + * Updates the status of the receive LED based on the application requirements. + */ +void app_update_receive_led(void); + +/** + * @brief Update the send LED status. + * + * Updates the status of the send LED based on the application requirements. + */ +void app_update_send_led(void); + +#endif /*APP_GPIO_H*/ diff --git a/examples/proprietary_trx/src/app_process.h b/examples/proprietary_trx/src/app_process.h new file mode 100644 index 00000000..1fc8e5c7 --- /dev/null +++ b/examples/proprietary_trx/src/app_process.h @@ -0,0 +1,45 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef APP_PROCESS_H +#define APP_PROCESS_H + +// ----------------------------------------------------------------------------- +// Includes + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ----------------------------------------------------------------------------- +// Macros and Typedefs + +// List of events +#define EVENT_REQUEST_SEND BIT(0) +#define EVENT_CLI_RECEIVE_SETTING BIT(1) +#define EVENT_RADIO_RECEIVED BIT(2) +#define EVENT_RADIO_SENT BIT(3) +#define EVENT_RADIO_ERROR BIT(4) + +// State machine object containing all radio flags +struct s_state_machine { + struct smf_ctx ctx; + struct k_event smf_event; + bool allow_rx; + bool packet_sent; + uint64_t error_code; +}; + +// ----------------------------------------------------------------------------- +// Global Variables + +extern struct s_state_machine s_sl_machine; + +#endif diff --git a/examples/proprietary_trx/src/app_rail.c b/examples/proprietary_trx/src/app_rail.c new file mode 100644 index 00000000..41683d22 --- /dev/null +++ b/examples/proprietary_trx/src/app_rail.c @@ -0,0 +1,288 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +// ----------------------------------------------------------------------------- +// Includes + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "rail.h" +#include "rail_types.h" +#include "pa_conversions_efr32.h" +#include "sl_rail_util_init.h" +#include "app_rail.h" +#include "app_process.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs + +LOG_MODULE_DECLARE(trx_app_log); + +#define RAIL_FIFO_SIZE 128U + +#define TX_PAYLOAD_LENGTH 16U + +#define CHANNEL 0U + +// ----------------------------------------------------------------------------- +// Static Function Declarations + +static void set_up_tx_fifo(RAIL_Handle_t rail_handle); + +static void prepare_package(RAIL_Handle_t rail_handle, uint8_t *out_data, uint16_t length); + +static uint16_t unpack_packet(uint8_t *rx_destination, + const RAIL_RxPacketInfo_t *packet_information, + uint8_t **start_of_payload); + +// Install RAIL interrupt service routines (ISRs) +static void rail_isr_installer(void); + +// ----------------------------------------------------------------------------- +// Global Variables + +// ----------------------------------------------------------------------------- +// Static Variables + +// ----------------------------------------------------------------------------- +// Public Function Definitions + +void handle_send(bool *packet_sent) +{ + // Default payload packet content + static uint8_t out_packet[TX_PAYLOAD_LENGTH] = { + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, + }; + RAIL_Handle_t rail_handle = sl_rail_util_get_handle(SL_RAIL_UTIL_HANDLE_INST0); + if (*packet_sent) { + prepare_package(rail_handle, out_packet, sizeof(out_packet)); + LOG_INF("Packet prepared"); + RAIL_StartTx(rail_handle, CHANNEL, RAIL_TX_OPTIONS_DEFAULT, NULL); + LOG_INF("Packet is being sent"); + *packet_sent = false; + } else { + LOG_WRN("Sending is in progress"); + } +} + +void handle_sent(bool *packet_sent) +{ + *packet_sent = true; + LOG_INF("Packet successfully sent"); +} + +void handle_error(uint64_t *error_code) +{ + LOG_ERR("Radio Error occurred\nEvents: %llX", *error_code); + *error_code = 0; +} + +void set_continuous_rx(bool enable_continuous_rx) +{ + RAIL_Status_t status; + RAIL_RadioState_t selected_state = RAIL_RF_STATE_IDLE; + RAIL_StateTransitions_t tx_transitions; + RAIL_StateTransitions_t rx_transitions; + RAIL_Handle_t rail_handle = sl_rail_util_get_handle(SL_RAIL_UTIL_HANDLE_INST0); + + if (enable_continuous_rx) { + selected_state = RAIL_RF_STATE_RX; + } + + tx_transitions.success = selected_state; + tx_transitions.error = selected_state; + rx_transitions.success = selected_state; + rx_transitions.error = selected_state; + + status = RAIL_SetTxTransitions(rail_handle, &tx_transitions); + if (status) { + LOG_ERR("RAIL_SetTxTransitions failed, return value: %d", status); + } else { + LOG_INF("RAIL_SetTxTransitions success"); + } + + status = RAIL_SetRxTransitions(rail_handle, &rx_transitions); + + if (status) { + LOG_ERR("RAIL_SetRxTransitions failed, return value: %d", status); + } else { + LOG_INF("RAIL_SetTxTransitions success"); + } + + if (enable_continuous_rx) { + RAIL_StartRx(rail_handle, CHANNEL, NULL); + } else { + RAIL_Idle(rail_handle, RAIL_IDLE, true); + } +} + +void handle_receive(void) +{ + RAIL_RxPacketHandle_t rx_packet_handle; + RAIL_RxPacketInfo_t packet_info; + RAIL_Status_t rail_status = RAIL_STATUS_NO_ERROR; + uint8_t *start_of_packet = NULL; + uint16_t packet_size = 0; + static __ALIGNED(RAIL_FIFO_ALIGNMENT) uint8_t rx_fifo[RAIL_FIFO_SIZE]; + RAIL_Handle_t rail_handle = sl_rail_util_get_handle(SL_RAIL_UTIL_HANDLE_INST0); + + rx_packet_handle = RAIL_GetRxPacketInfo(rail_handle, RAIL_RX_PACKET_HANDLE_OLDEST_COMPLETE, + &packet_info); + while (rx_packet_handle != RAIL_RX_PACKET_HANDLE_INVALID) { + packet_size = unpack_packet(rx_fifo, &packet_info, &start_of_packet); + rail_status = RAIL_ReleaseRxPacket(rail_handle, rx_packet_handle); + LOG_INF("RAIL_ReleaseRxPacket ready"); + if (rail_status) { + LOG_WRN("RAIL_ReleaseRxPacket() result:%d", rail_status); + } + LOG_INF("Length of packet: %d", packet_size); + LOG_HEXDUMP_INF(start_of_packet, packet_size, "Received Packet: "); + rx_packet_handle = RAIL_GetRxPacketInfo( + rail_handle, RAIL_RX_PACKET_HANDLE_OLDEST_COMPLETE, &packet_info); + } +} + +void app_rail_init(void) +{ + RAIL_Status_t status = RAIL_STATUS_NO_ERROR; + RAIL_Handle_t rail_handle; + rail_isr_installer(); + sl_rail_util_pa_init(); + sl_rail_util_init(); + + rail_handle = sl_rail_util_get_handle(SL_RAIL_UTIL_HANDLE_INST0); + set_up_tx_fifo(rail_handle); + + status = RAIL_StartRx(rail_handle, CHANNEL, NULL); + if (status) { + LOG_WRN("After initialization RAIL_StartRx() result:%d ", status); + } + + if (IS_ENABLED(CONFIG_PM)) { + status = RAIL_InitPowerManager(); + if (status) { + LOG_ERR("RAIL: failed to initialize power management, status=%d", status); + } + } +} + +/****************************************************************************** + * RAIL callback, called if a RAIL event occurs. + *****************************************************************************/ +/** + * @brief RAIL callback for handling RAIL events. + * + * RAIL event's callback, and it handles RX, TX, and calibration events. + * + * @param rail_handle RAIL handle for communication. + * @param events RAIL events that occurred. + */ +void sl_rail_util_on_event(RAIL_Handle_t rail_handle, RAIL_Events_t events) +{ + // Contains the status of RAIL Calibration + static RAIL_Status_t calibration_status = 0; + s_sl_machine.error_code = events; + // Handle Rx events + if (events & RAIL_EVENTS_RX_COMPLETION) { + if (events & RAIL_EVENT_RX_PACKET_RECEIVED) { + // Keep the packet in the radio buffer, download it later at the state + // machine + RAIL_HoldRxPacket(rail_handle); + k_event_post(&s_sl_machine.smf_event, EVENT_RADIO_RECEIVED); + } else { + k_event_post(&s_sl_machine.smf_event, EVENT_RADIO_ERROR); + } + } + // Handle Tx events + if (events & RAIL_EVENTS_TX_COMPLETION) { + if (events & RAIL_EVENT_TX_PACKET_SENT) { + k_event_post(&s_sl_machine.smf_event, EVENT_RADIO_SENT); + } else { + k_event_post(&s_sl_machine.smf_event, EVENT_RADIO_ERROR); + } + } + + // Perform all calibrations when needed + if (events & RAIL_EVENT_CAL_NEEDED) { + calibration_status = RAIL_Calibrate(rail_handle, NULL, RAIL_CAL_ALL_PENDING); + if (calibration_status) { + k_event_post(&s_sl_machine.smf_event, EVENT_RADIO_ERROR); + } + } +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions + +static void set_up_tx_fifo(RAIL_Handle_t rail_handle) +{ + uint16_t allocated_tx_fifo_size = 0; + static __ALIGNED(RAIL_FIFO_ALIGNMENT) uint8_t tx_fifo[RAIL_FIFO_SIZE]; + allocated_tx_fifo_size = RAIL_SetTxFifo(rail_handle, tx_fifo, 0, RAIL_FIFO_SIZE); + if (allocated_tx_fifo_size != RAIL_FIFO_SIZE) { + LOG_WRN("RAIL_SetTxFifo allocation failed %d instead of %d", allocated_tx_fifo_size, + RAIL_FIFO_SIZE); + } +} + +/** + * Prepares the packet for sending and load it in the RAIL TX FIFO + * + * @param rail_handle Which rail handlers should be used for the TX FIFO writing + * @param out_data The payload buffer + * @param length The length of the payload + */ +static void prepare_package(RAIL_Handle_t rail_handle, uint8_t *out_data, uint16_t length) +{ + // Check if write fifo has written all bytes + uint16_t bytes_writen_in_fifo = 0; + bytes_writen_in_fifo = RAIL_WriteTxFifo(rail_handle, out_data, length, true); + if (bytes_writen_in_fifo != length) { + LOG_WRN("RAIL_SetTxFifo allocation failed %d instead of %d", bytes_writen_in_fifo, + length); + } +} + +/** + * Helps to unpack the received packet, point to the payload and returns the length. + * + * @param rx_destination Where should the full packet be unpacked + * @param packet_information Where should all the information of the packet stored + * @param start_of_payload Pointer where the payload starts + * @return The length of the received payload + */ +static uint16_t unpack_packet(uint8_t *rx_destination, + const RAIL_RxPacketInfo_t *packet_information, + uint8_t **start_of_payload) +{ + RAIL_CopyRxPacket(rx_destination, packet_information); + *start_of_payload = rx_destination; + return ((packet_information->packetBytes > RAIL_FIFO_SIZE) + ? RAIL_FIFO_SIZE + : packet_information->packetBytes); +} + +static void rail_isr_installer(void) +{ +#ifdef CONFIG_SOC_SERIES_EFR32MG24 + IRQ_CONNECT(SYNTH_IRQn, 0, SYNTH_IRQHandler, NULL, 0); +#else + IRQ_CONNECT(RDMAILBOX_IRQn, 0, RDMAILBOX_IRQHandler, NULL, 0); +#endif + IRQ_CONNECT(RAC_SEQ_IRQn, 0, RAC_SEQ_IRQHandler, NULL, 0); + IRQ_CONNECT(RAC_RSM_IRQn, 0, RAC_RSM_IRQHandler, NULL, 0); + IRQ_CONNECT(PROTIMER_IRQn, 0, PROTIMER_IRQHandler, NULL, 0); + IRQ_CONNECT(MODEM_IRQn, 0, MODEM_IRQHandler, NULL, 0); + IRQ_CONNECT(FRC_IRQn, 0, FRC_IRQHandler, NULL, 0); + IRQ_CONNECT(BUFC_IRQn, 0, BUFC_IRQHandler, NULL, 0); + IRQ_CONNECT(AGC_IRQn, 0, AGC_IRQHandler, NULL, 0); +} diff --git a/examples/proprietary_trx/src/app_rail.h b/examples/proprietary_trx/src/app_rail.h new file mode 100644 index 00000000..f2ce785b --- /dev/null +++ b/examples/proprietary_trx/src/app_rail.h @@ -0,0 +1,62 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef APP_RAIL_H +#define APP_RAIL_H + +// ----------------------------------------------------------------------------- +// Public Function Declarations + +/** + * @brief Handle the process of sending a packet. + * + * Handles the process of sending a packet, preparing the package, + * and initiating the transmission. + * + * @param packet_sent pointer to sending flag + */ +void handle_send(bool *packet_sent); + +/** + * @brief Handle the event of a successfully sent packet. + * + * Handles the event when a packet has been successfully sent. + * + * @param packet_sent pointer to sending flag + */ +void handle_sent(bool *packet_sent); + +/** + * @brief Handle a radio error event. + * + * Handles events where a radio error has occurred. + * + * @param error_code pointer to the error events happened with RAIL + */ +void handle_error(uint64_t *error_code); + +/** + * @brief Set continuous receive mode. + * + * Sets the radio to continuous receive mode or disables it based on the provided parameter. + * + * @param enable_continuous_rx Boolean indicating whether to enable continuous receive mode. + */ +void set_continuous_rx(bool enable_continuous_rx); + +/** + * @brief Handle the process of receiving packets. + * + * Handles the process of receiving packets, including unpacking and logging. + */ +void handle_receive(void); + +/** + * @brief Initialize the RAIL communication. + * + * Initializes RAIL communication, installs ISRs, and sets up the TX FIFO. + */ +void app_rail_init(void); + +#endif /*APP_RAIL_H*/ diff --git a/examples/proprietary_trx/src/autogen/sl_rail_util_callbacks.c b/examples/proprietary_trx/src/autogen/sl_rail_util_callbacks.c new file mode 100644 index 00000000..55fc76c4 --- /dev/null +++ b/examples/proprietary_trx/src/autogen/sl_rail_util_callbacks.c @@ -0,0 +1,117 @@ + /***************************************************************************//** + * @file sl_rail_util_callbacks.c + * @brief RAIL Callbacks + * WARNING: Auto-Generated Radio Callbacks - DO NOT EDIT + * Any application code placed within this file will be discarged + * upon project regeneration. + ******************************************************************************* + * # License + * Copyright 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#include "rail.h" +#ifdef SL_CATALOG_APP_ASSERT_PRESENT +#include "app_assert.h" +#define APP_ASSERT(expr, ...) app_assert(expr,__VA_ARGS__) +#else + #define APP_ASSERT(expr, string ,rail_handle, error_code) \ + do { \ + if (!(expr)) { \ + while (1) ; \ + } \ + } while (0) +#endif +#include "sl_rail_util_callbacks_config.h" +#include "pa_conversions_efr32.h" + +// Provide weak function called by callback RAILCb_AssertFailed. +__WEAK +void sl_rail_util_on_assert_failed(RAIL_Handle_t rail_handle, + RAIL_AssertErrorCodes_t error_code) +{ + (void) rail_handle; + (void) error_code; + APP_ASSERT(false, + "rail_handle: 0x%X, error_code: %d", + rail_handle, + error_code); +} + +#if SL_RAIL_UTIL_CALLBACKS_ASSERT_FAILED_OVERRIDE +// Note: RAILCb_AssertFailed is called directly by the RAIL library when +// needed, so maintain this exact function signature. +void RAILCb_AssertFailed(RAIL_Handle_t rail_handle, + RAIL_AssertErrorCodes_t error_code) +{ + sl_rail_util_on_assert_failed(rail_handle, error_code); +} +#endif + +// Provide weak function called by callback sli_rail_util_on_rf_ready. +__WEAK +void sl_rail_util_on_rf_ready(RAIL_Handle_t rail_handle) +{ + (void) rail_handle; +} + +// Internal-only callback set up through call to RAIL_Init(). +void sli_rail_util_on_rf_ready(RAIL_Handle_t rail_handle) +{ + sl_rail_util_on_rf_ready(rail_handle); +} + +// Provide weak function called by callback +// sli_rail_util_on_channel_config_change. +__WEAK +void sl_rail_util_on_channel_config_change(RAIL_Handle_t rail_handle, + const RAIL_ChannelConfigEntry_t *entry) +{ + (void) rail_handle; + (void) entry; +} + +// Internal-only callback set up through call to RAIL_ConfigChannels(). +void sli_rail_util_on_channel_config_change(RAIL_Handle_t rail_handle, + const RAIL_ChannelConfigEntry_t *entry) +{ + sl_rail_util_pa_on_channel_config_change(rail_handle, entry); + sl_rail_util_on_channel_config_change(rail_handle, entry); +} + +// Provide weak function called by callback sli_rail_util_on_event. +__WEAK +void sl_rail_util_on_event(RAIL_Handle_t rail_handle, + RAIL_Events_t events) +{ + (void) rail_handle; + (void) events; +} + +// Internal-only callback set up through call to RAIL_Init(). +void sli_rail_util_on_event(RAIL_Handle_t rail_handle, + RAIL_Events_t events) +{ + sl_rail_util_on_event(rail_handle, events); +} diff --git a/examples/proprietary_trx/src/autogen/sl_rail_util_init.c b/examples/proprietary_trx/src/autogen/sl_rail_util_init.c new file mode 100644 index 00000000..361d7087 --- /dev/null +++ b/examples/proprietary_trx/src/autogen/sl_rail_util_init.c @@ -0,0 +1,233 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ +#include "rail.h" +#include "rail_ble.h" // for RAIL_BLE_State_t +#include "sli_rail_util_callbacks.h" // for internal-only callback signatures +#include "sl_rail_util_init.h" +#include "sl_rail_util_protocol.h" + +#if defined(SL_CATALOG_TIMING_TEST_PRESENT) && !SL_RAIL_LIB_MULTIPROTOCOL_SUPPORT +// Needed for measuring RAIL_Init() time as a part of +// detailed timing characterization. +#include "em_timer.h" +#include "em_cmu.h" +#endif + +#ifdef SL_CATALOG_APP_ASSERT_PRESENT +#include "app_assert.h" +#define APP_ASSERT(expr, ...) app_assert(expr,__VA_ARGS__) +#else +#define APP_ASSERT(expr, ...) \ + do { \ + if (!(expr)) { \ + while (1) ; \ + } \ + } while (0) +#endif + +#if 0U \ + || SL_RAIL_UTIL_INIT_RADIO_CONFIG_SUPPORT_INST0_ENABLE \ + || 0U + #include "rail_config.h" +#endif + +// Instance: inst0 +static RAIL_Handle_t sl_rail_handle_inst0 = RAIL_EFR32_HANDLE; + +#if defined(SL_CATALOG_TIMING_TEST_PRESENT) && !SL_RAIL_LIB_MULTIPROTOCOL_SUPPORT +uint32_t sli_timing_start_tick = 0U; +uint32_t sli_timing_end_tick = 0U; +static TIMER_TypeDef *timer = TIMER0; +static void setupTimingTestTimer(void) +{ + // Clock TIMER0 using the HF clock + CMU_ClockSelectSet(cmuClock_TIMER0, cmuSelect_HFXO); + CMU_ClockEnable(cmuClock_TIMER0, true); + // Use default configuration, prescaled by 8. + TIMER_Init_TypeDef timerCfg = TIMER_INIT_DEFAULT; + timerCfg.prescale = timerPrescale8; + // Enable TIMER0 to upcount + TIMER_Init(timer, &timerCfg); +} +#endif + +static void sl_rail_util_init_inst0(void) +{ +#if SL_RAIL_UTIL_INIT_INST0_ENABLE + RAIL_Status_t status; + RAIL_Config_t sl_rail_config = { + .eventsCallback = &sli_rail_util_on_event, + // Other fields are ignored nowadays + }; + (void) status; // Suppress compiler warning if status ends up unused +#ifdef SL_CATALOG_TIMING_TEST_PRESENT + setupTimingTestTimer(); + sli_timing_start_tick = timer->CNT; +#endif // SL_CATALOG_TIMING_TEST_PRESENT + sl_rail_handle_inst0 = RAIL_Init(&sl_rail_config, +#if SL_RAIL_UTIL_INIT_INIT_COMPLETE_CALLBACK_INST0_ENABLE + &sli_rail_util_on_rf_ready +#else + NULL +#endif // SL_RAIL_UTIL_INIT_INIT_COMPLETE_CALLBACK_INST0_ENABLE + ); +#ifdef SL_CATALOG_TIMING_TEST_PRESENT + sli_timing_end_tick = timer->CNT; +#endif // SL_CATALOG_TIMING_TEST_PRESENT + APP_ASSERT((NULL != sl_rail_handle_inst0), + "RAIL_Init failed, return value: NULL"); + +#if SL_RAIL_UTIL_INIT_DATA_FORMATS_INST0_ENABLE + RAIL_DataConfig_t data_config = { + .txSource = SL_RAIL_UTIL_INIT_DATA_FORMAT_INST0_TX_SOURCE, + .rxSource = SL_RAIL_UTIL_INIT_DATA_FORMAT_INST0_RX_SOURCE, + .txMethod = SL_RAIL_UTIL_INIT_DATA_FORMAT_INST0_TX_MODE, + .rxMethod = SL_RAIL_UTIL_INIT_DATA_FORMAT_INST0_RX_MODE, + }; + status = RAIL_ConfigData(sl_rail_handle_inst0, &data_config); + APP_ASSERT((RAIL_STATUS_NO_ERROR == status), + "RAIL_ConfigData failed, return value: %d", + status); +#endif // SL_RAIL_UTIL_INIT_DATA_FORMATS_INST0_ENABLE + +#if SL_RAIL_UTIL_INIT_PROTOCOLS_INST0_ENABLE + const RAIL_ChannelConfig_t *channel_config = NULL; + if (SL_RAIL_UTIL_INIT_PROTOCOL_INST0_DEFAULT + == SL_RAIL_UTIL_PROTOCOL_PROPRIETARY) { +#if SL_RAIL_UTIL_INIT_RADIO_CONFIG_SUPPORT_INST0_ENABLE + channel_config = channelConfigs[SL_RAIL_UTIL_INIT_PROTOCOL_PROPRIETARY_INST0_INDEX]; +#else // !SL_RAIL_UTIL_INIT_RADIO_CONFIG_SUPPORT_INST0_ENABLE + APP_ASSERT(false, + "SL_RAIL_UTIL_INIT_RADIO_CONFIG_SUPPORT_INST0_ENABLE must be true when (SL_RAIL_UTIL_INIT_PROTOCOL_INST0_DEFAULT == SL_RAIL_UTIL_PROTOCOL_PROPRIETARY)"); +#endif // SL_RAIL_UTIL_INIT_RADIO_CONFIG_SUPPORT_INST0_ENABLE + } + (void) RAIL_ConfigChannels(sl_rail_handle_inst0, + channel_config, + &sli_rail_util_on_channel_config_change); + status = sl_rail_util_protocol_config(sl_rail_handle_inst0, + SL_RAIL_UTIL_INIT_PROTOCOL_INST0_DEFAULT); + APP_ASSERT((RAIL_STATUS_NO_ERROR == status), + "sl_rail_util_protocol_config failed, return value: %d", + status); +#endif // SL_RAIL_UTIL_INIT_PROTOCOLS_INST0_ENABLE + +#if SL_RAIL_UTIL_INIT_CALIBRATIONS_INST0_ENABLE + status = RAIL_ConfigCal(sl_rail_handle_inst0, + 0U + | (SL_RAIL_UTIL_INIT_CALIBRATION_TEMPERATURE_NOTIFY_INST0_ENABLE + ? RAIL_CAL_TEMP : 0U) + | (SL_RAIL_UTIL_INIT_CALIBRATION_ONETIME_NOTIFY_INST0_ENABLE + ? RAIL_CAL_ONETIME : 0U)); + APP_ASSERT((RAIL_STATUS_NO_ERROR == status), + "RAIL_ConfigCal failed, return value: %d", + status); +#endif // SL_RAIL_UTIL_INIT_CALIBRATIONS_INST0_ENABLE + +#if SL_RAIL_UTIL_INIT_EVENTS_INST0_ENABLE + status = RAIL_ConfigEvents(sl_rail_handle_inst0, + RAIL_EVENTS_ALL, + SL_RAIL_UTIL_INIT_EVENT_INST0_MASK); + APP_ASSERT((RAIL_STATUS_NO_ERROR == status), + "RAIL_ConfigEvents failed, return value: %d", + status); +#endif // SL_RAIL_UTIL_INIT_EVENTS_INST0_ENABLE + +#if SL_RAIL_UTIL_INIT_TRANSITIONS_INST0_ENABLE + RAIL_StateTransitions_t tx_transitions = { + .success = SL_RAIL_UTIL_INIT_TRANSITION_INST0_TX_SUCCESS, + .error = SL_RAIL_UTIL_INIT_TRANSITION_INST0_TX_ERROR + }; + RAIL_StateTransitions_t rx_transitions = { + .success = SL_RAIL_UTIL_INIT_TRANSITION_INST0_RX_SUCCESS, + .error = SL_RAIL_UTIL_INIT_TRANSITION_INST0_RX_ERROR + }; + status = RAIL_SetTxTransitions(sl_rail_handle_inst0, + &tx_transitions); + APP_ASSERT((RAIL_STATUS_NO_ERROR == status), + "RAIL_SetTxTransitions failed, return value: %d", + status); + status = RAIL_SetRxTransitions(sl_rail_handle_inst0, + &rx_transitions); + APP_ASSERT((RAIL_STATUS_NO_ERROR == status), + "RAIL_SetRxTransitions failed, return value: %d", + status); +#endif // SL_RAIL_UTIL_INIT_TRANSITIONS_INST0_ENABLE +#else // !SL_RAIL_UTIL_INIT_INST0_ENABLE + // Eliminate compiler warnings. + (void) sl_rail_handle_inst0; +#endif // SL_RAIL_UTIL_INIT_INST0_ENABLE +} + +RAIL_Handle_t sl_rail_util_get_handle(sl_rail_util_handle_type_t handle) +{ + RAIL_Handle_t *sl_rail_handle_array[] = { + &sl_rail_handle_inst0, + }; + return *sl_rail_handle_array[handle]; +} + +#define INIT_INSTANCES (0 + 1) + +#if (INIT_INSTANCES > 1) && !SL_RAIL_LIB_MULTIPROTOCOL_SUPPORT + #error "sl_rail_util_init.c: If you are going to use more than one rail_util_init instance, you must use the Multiprotocol RAIL library." +#elif (INIT_INSTANCES > 4) + static uint64_t extraStateBuffers[INIT_INSTANCES - 4][RAIL_STATE_BUFFER_BYTES / sizeof(uint64_t)]; + static RAIL_StateBufferEntry_t extraProtos[INIT_INSTANCES - 4]; +#else + // RAIL provides enough built-in state buffers for all the instances +#endif + +void sl_rail_util_init(void) +{ +#if (INIT_INSTANCES > 2) + RAIL_Status_t status; + status = RAIL_AddStateBuffer3(RAIL_EFR32_HANDLE); + APP_ASSERT((RAIL_STATUS_NO_ERROR == status), + "RAIL_AddStateBuffer3 failed, return value: %d", + status); +#if (INIT_INSTANCES > 3) + status = RAIL_AddStateBuffer4(RAIL_EFR32_HANDLE); + APP_ASSERT((RAIL_STATUS_NO_ERROR == status), + "RAIL_AddStateBuffer4 failed, return value: %d", + status); +#endif +#if (INIT_INSTANCES > 4) + for (int i = 0; i < (INIT_INSTANCES - 4); i++) { + extraProtos[i].bufferBytes = sizeof(extraStateBuffers[0]); + extraProtos[i].buffer = extraStateBuffers[i]; + status = RAIL_AddStateBuffer(RAIL_EFR32_HANDLE, &extraProtos[i]); + APP_ASSERT((RAIL_STATUS_NO_ERROR == status), + "RAIL_AddStateBuffer(%d) failed, return value: %d", + (INIT_INSTANCES + i), status); + } +#endif +#endif + sl_rail_util_init_inst0(); +} diff --git a/examples/proprietary_trx/src/autogen/sl_rail_util_init.h b/examples/proprietary_trx/src/autogen/sl_rail_util_init.h new file mode 100644 index 00000000..5f5a971d --- /dev/null +++ b/examples/proprietary_trx/src/autogen/sl_rail_util_init.h @@ -0,0 +1,222 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef SL_RAIL_UTIL_INIT_H +#define SL_RAIL_UTIL_INIT_H + +#include "rail.h" +#include "sl_rail_util_init_inst0_config.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum sl_rail_util_handle_type{ + SL_RAIL_UTIL_HANDLE_INST0, +} sl_rail_util_handle_type_t; + +/** + * Initialize the RAIL Init Utility. + * + * @note: This function should be called during application initialization. + */ +void sl_rail_util_init(void); + +/** + * Get the RAIL handle created during initialization. + * @param[in] handle The enum name of the desired RAIL handle. + * + * @return A valid RAIL handle. If the RAIL handle hasn't been set up, the + * invalid value of \ref RAIL_EFR32_HANDLE will be returned. + */ +RAIL_Handle_t sl_rail_util_get_handle(sl_rail_util_handle_type_t handle); + +/** + * A callback available to the application, called on RAIL asserts. + * + * @param[in] rail_handle The RAIL handle associated with the assert. + * @param[in] error_code The assertion error code. + */ +void sl_rail_util_on_assert_failed(RAIL_Handle_t rail_handle, + RAIL_AssertErrorCodes_t error_code); + +/** + * A callback available to the application, called on RAIL init completion. + * + * @param[in] rail_handle The RAIL handle associated with the RAIL init + * completion notification. + */ +void sl_rail_util_on_rf_ready(RAIL_Handle_t rail_handle); + +/** + * A callback available to the application, called on a channel configuration + * change. + * + * @param[in] rail_handle The RAIL handle associated with the channel config + * change notification. + * @param[in] entry The channel configuration being changed to. + */ +void sl_rail_util_on_channel_config_change(RAIL_Handle_t rail_handle, + const RAIL_ChannelConfigEntry_t *entry); + +/** + * A callback available to the application, called on registered RAIL events. + * + * @param[in] rail_handle The RAIL handle associated with the RAIL event + * notification. + * @param[in] events The RAIL events having occurred. + */ +void sl_rail_util_on_event(RAIL_Handle_t rail_handle, + RAIL_Events_t events); + +/** + * An event mask, available to the application, specifying the radio events + * setup within the init code. + * + * @note: Because the value of this define is evaluated based on values in the + * \ref RAIL_Events_t enum, this define will only have a valid value during + * run-time. + */ +#define SL_RAIL_UTIL_INIT_EVENT_INST0_MASK (RAIL_EVENTS_NONE \ + | (SL_RAIL_UTIL_INIT_EVENT_RSSI_AVERAGE_DONE_INST0_ENABLE \ + ? RAIL_EVENT_RSSI_AVERAGE_DONE : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_ACK_TIMEOUT_INST0_ENABLE \ + ? RAIL_EVENT_RX_ACK_TIMEOUT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_FIFO_ALMOST_FULL_INST0_ENABLE \ + ? RAIL_EVENT_RX_FIFO_ALMOST_FULL : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_PACKET_RECEIVED_INST0_ENABLE \ + ? RAIL_EVENT_RX_PACKET_RECEIVED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_PREAMBLE_LOST_INST0_ENABLE \ + ? RAIL_EVENT_RX_PREAMBLE_LOST : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_PREAMBLE_DETECT_INST0_ENABLE \ + ? RAIL_EVENT_RX_PREAMBLE_DETECT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_SYNC1_DETECT_INST0_ENABLE \ + ? RAIL_EVENT_RX_SYNC1_DETECT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_SYNC2_DETECT_INST0_ENABLE \ + ? RAIL_EVENT_RX_SYNC2_DETECT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_FRAME_ERROR_INST0_ENABLE \ + ? RAIL_EVENT_RX_FRAME_ERROR : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_FIFO_FULL_INST0_ENABLE \ + ? RAIL_EVENT_RX_FIFO_FULL : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_FIFO_OVERFLOW_INST0_ENABLE \ + ? RAIL_EVENT_RX_FIFO_OVERFLOW : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_ADDRESS_FILTERED_INST0_ENABLE \ + ? RAIL_EVENT_RX_ADDRESS_FILTERED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_TIMEOUT_INST0_ENABLE \ + ? RAIL_EVENT_RX_TIMEOUT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_TX_SCHEDULED_RX_TX_STARTED_INST0_ENABLE \ + ? RAIL_EVENT_SCHEDULED_RX_STARTED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_SCHEDULED_RX_END_INST0_ENABLE \ + ? RAIL_EVENT_RX_SCHEDULED_RX_END : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_SCHEDULED_RX_MISSED_INST0_ENABLE \ + ? RAIL_EVENT_RX_SCHEDULED_RX_MISSED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_PACKET_ABORTED_INST0_ENABLE \ + ? RAIL_EVENT_RX_PACKET_ABORTED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_FILTER_PASSED_INST0_ENABLE \ + ? RAIL_EVENT_RX_FILTER_PASSED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_TIMING_LOST_INST0_ENABLE \ + ? RAIL_EVENT_RX_TIMING_LOST : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_TIMING_DETECT_INST0_ENABLE \ + ? RAIL_EVENT_RX_TIMING_DETECT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_CHANNEL_HOPPING_COMPLETE_INST0_ENABLE \ + ? RAIL_EVENT_RX_CHANNEL_HOPPING_COMPLETE : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_RX_DUTY_CYCLE_RX_END_INST0_ENABLE \ + ? RAIL_EVENT_RX_DUTY_CYCLE_RX_END : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_IEEE802154_DATA_REQUEST_COMMAND_INST0_ENABLE \ + ? RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_ZWAVE_BEAM_INST0_ENABLE \ + ? RAIL_EVENT_ZWAVE_BEAM : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_ZWAVE_LR_ACK_REQUEST_COMMAND_INST0_ENABLE \ + ? RAIL_EVENT_ZWAVE_LR_ACK_REQUEST_COMMAND : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_FIFO_ALMOST_EMPTY_INST0_ENABLE \ + ? RAIL_EVENT_TX_FIFO_ALMOST_EMPTY : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_PACKET_SENT_INST0_ENABLE \ + ? RAIL_EVENT_TX_PACKET_SENT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TXACK_PACKET_SENT_INST0_ENABLE \ + ? RAIL_EVENT_TXACK_PACKET_SENT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_ABORTED_INST0_ENABLE \ + ? RAIL_EVENT_TX_ABORTED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TXACK_ABORTED_INST0_ENABLE \ + ? RAIL_EVENT_TXACK_ABORTED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_BLOCKED_INST0_ENABLE \ + ? RAIL_EVENT_TX_BLOCKED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TXACK_BLOCKED_INST0_ENABLE \ + ? RAIL_EVENT_TXACK_BLOCKED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_UNDERFLOW_INST0_ENABLE \ + ? RAIL_EVENT_TX_UNDERFLOW : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TXACK_UNDERFLOW_INST0_ENABLE \ + ? RAIL_EVENT_TXACK_UNDERFLOW : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_CHANNEL_CLEAR_INST0_ENABLE \ + ? RAIL_EVENT_TX_CHANNEL_CLEAR : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_CHANNEL_BUSY_INST0_ENABLE \ + ? RAIL_EVENT_TX_CHANNEL_BUSY : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_CCA_RETRY_INST0_ENABLE \ + ? RAIL_EVENT_TX_CCA_RETRY : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_START_CCA_INST0_ENABLE \ + ? RAIL_EVENT_TX_START_CCA : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_STARTED_INST0_ENABLE \ + ? RAIL_EVENT_TX_STARTED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_SCHEDULED_TX_MISSED_INST0_ENABLE \ + ? RAIL_EVENT_TX_SCHEDULED_TX_MISSED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_CONFIG_UNSCHEDULED_INST0_ENABLE \ + ? RAIL_EVENT_CONFIG_UNSCHEDULED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_CONFIG_SCHEDULED_INST0_ENABLE \ + ? RAIL_EVENT_CONFIG_SCHEDULED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_SCHEDULER_STATUS_INST0_ENABLE \ + ? RAIL_EVENT_SCHEDULER_STATUS : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_CAL_NEEDED_INST0_ENABLE \ + ? RAIL_EVENT_CAL_NEEDED : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_DETECT_RSSI_THRESHOLD_INST0_ENABLE \ + ? RAIL_EVENT_DETECT_RSSI_THRESHOLD : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_THERMISTOR_DONE_INST0_ENABLE \ + ? RAIL_EVENT_THERMISTOR_DONE : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_BLOCKED_TOO_HOT_INST0_ENABLE \ + ? RAIL_EVENT_TX_BLOCKED_TOO_HOT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_TOO_HOT_INST0_ENABLE \ + ? RAIL_EVENT_TEMPERATURE_TOO_HOT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_COOL_DOWN_INST0_ENABLE \ + ? RAIL_EVENT_TEMPERATURE_COOL_DOWN : RAIL_EVENTS_NONE)) + +/** + * An inverted event mask, available to the application, specifying the radio + * events setup within the init code. + * + * @note: Because the value of this define is evaluated based on values in the + * \ref RAIL_Events_t enum, this define will only have a valid value during + * run-time. + */ +#define SL_RAIL_UTIL_INIT_EVENT_INST0_INVERSE_MASK \ + (~SL_RAIL_UTIL_INIT_EVENT_INST0_MASK) + +#ifdef __cplusplus +} +#endif + +#endif // SL_RAIL_UTIL_INIT_H diff --git a/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184a/radio_settings.radioconf b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184a/radio_settings.radioconf new file mode 100644 index 00000000..af90a4c2 --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184a/radio_settings.radioconf @@ -0,0 +1,18 @@ + + + + + + + 0 + 20 + SAME_AS_FIRST_CHANNEL + RAIL_TX_POWER_MAX + {"selectedPhy":"PHY_Datasheet_2450M_2GFSK_1Mbps_500K"} + + + {"selectedPhy":"PHY_Datasheet_2450M_2GFSK_1Mbps_500K"} + + + + \ No newline at end of file diff --git a/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184a/rail_config.c b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184a/rail_config.c new file mode 100644 index 00000000..a1ca3028 --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184a/rail_config.c @@ -0,0 +1,333 @@ +/***************************************************************************//** + * @brief RAIL Configuration + * @details + * WARNING: Auto-Generated Radio Config - DO NOT EDIT + * Radio Configurator Version: 2022.5.2 + * RAIL Adapter Version: 2.4.19 + * RAIL Compatibility: 2.x + ******************************************************************************* + * # License + * Copyright 2019 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#include "em_device.h" +#include "rail_config.h" + +uint32_t RAILCb_CalcSymbolRate(RAIL_Handle_t railHandle) +{ + (void)railHandle; + return 0U; +} + +uint32_t RAILCb_CalcBitRate(RAIL_Handle_t railHandle) +{ + (void)railHandle; + return 0U; +} + +void RAILCb_ConfigFrameTypeLength(RAIL_Handle_t railHandle, const RAIL_FrameType_t *frameType) +{ + (void)railHandle; + (void)frameType; +} + +static const uint8_t irCalConfig[] = {25, 63, 1, 6, 4, 16, 1, 0, 0, 1, 1, 6, 0, + 16, 39, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0}; + +static const int32_t timingConfig[] = {0, 0, 0}; + +static const uint8_t hfxoRetimingConfigEntries[] = { + 2, 0, 0, 0, 0x00, 0xf0, 0x49, 0x02, 6, 20, 0, 0, 0x00, 0xe0, 0x93, 0x04, 5, 56, + 0, 0, 0xa0, 0x08, 0, 0, 0, 0, 0x58, 0x09, 1, 4, 7, 6, 0x10, 0x0a, 1, 4, + 7, 7, 0xc8, 0x0a, 0, 4, 8, 7, 0x80, 0x0b, 0, 4, 8, 8, 0x38, 0x0c, 0, 4, + 9, 8, 0x61, 0x08, 0, 0, 0, 0, 0x68, 0x08, 0, 0, 0, 0, 0xc7, 0x09, 1, 4, + 4, 3, 0x2c, 0x0b, 1, 4, 4, 4, 0x92, 0x0c, 1, 4, 5, 4}; + +static RAIL_ChannelConfigEntryAttr_t channelConfigEntryAttr = { +#if RAIL_SUPPORTS_OFDM_PA + {{0xFFFFFFFFUL}, {0xFFFFFFFFUL, 0xFFFFFFFFUL}} +#else // RAIL_SUPPORTS_OFDM_PA + {0xFFFFFFFFUL}, +#endif // RAIL_SUPPORTS_OFDM_PA +}; + +static const uint32_t phyInfo[] = { + 13UL, + 0x00924924UL, // 146.28571428571428 + (uint32_t)NULL, + (uint32_t)irCalConfig, + (uint32_t)timingConfig, + 0x00000000UL, + 8000000UL, + 28000000UL, + 1000000UL, + 0x00F50101UL, + 0x02503EC5UL, + (uint32_t)NULL, + (uint32_t)hfxoRetimingConfigEntries, + (uint32_t)NULL, + 0UL, + 0UL, + 999997UL, + (uint32_t)NULL, + (uint32_t)NULL, +}; + +const uint32_t Protocol_Configuration_modemConfigBase[] = { + 0x0002400CUL, + 0x00000000UL, + /* 4010 */ 0x00004000UL, + 0x00024020UL, + 0x0000000FUL, + /* 4024 */ 0x00000000UL, + 0x00074030UL, + 0x00000000UL, + /* 4034 */ 0x00000000UL, + /* 4038 */ 0x00000000UL, + /* 403C */ 0x00000000UL, + /* 4040 */ 0x00000000UL, + /* 4044 */ 0x00004000UL, + /* 4048 */ 0x00040700UL, + 0x00014050UL, + 0x00000000UL, + 0x0002405CUL, + 0x00000000UL, + /* 4060 */ 0x00000000UL, + 0x000140A8UL, + 0x00000000UL, + 0x000440BCUL, + 0x00000000UL, + /* 40C0 */ 0x00000000UL, + /* 40C4 */ 0x00000000UL, + /* 40C8 */ 0x00000000UL, + 0x00044104UL, + 0x00004CFFUL, + /* 4108 */ 0x00000000UL, + /* 410C */ 0x00004DFFUL, + /* 4110 */ 0x00000000UL, + 0x1001C020UL, + 0x0007F800UL, + 0x3001C020UL, + 0x000802F5UL, + 0x0008C024UL, + 0x00001300UL, + /* C028 */ 0x83B380ECUL, + /* C02C */ 0x51407543UL, + /* C030 */ 0x48000FA0UL, + /* C034 */ 0x00004030UL, + /* C038 */ 0x00000000UL, + /* C03C */ 0x00000000UL, + /* C040 */ 0x0000022EUL, + 0x0004C050UL, + 0x04301151UL, + /* C054 */ 0xE6092D0EUL, + /* C058 */ 0x08070654UL, + /* C05C */ 0x0002B6D1UL, + 0x000AC064UL, + 0x1C003004UL, + /* C068 */ 0x09183040UL, + /* C06C */ 0x2079640DUL, + /* C070 */ 0x01FBFCEBUL, + /* C074 */ 0x03E8F67FUL, + /* C078 */ 0x15724BBDUL, + /* C07C */ 0x0518A311UL, + /* C080 */ 0x76543210UL, + /* C084 */ 0x00000A98UL, + /* C088 */ 0x00000000UL, + 0x01010008UL, + 0x00000744UL, + 0x01010018UL, + 0x00000000UL, + 0x01010020UL, + 0x0000A001UL, + 0x0108401CUL, + 0x00000010UL, + /* 4020 */ 0x04000000UL, + /* 4024 */ 0x0002C00FUL, + /* 4028 */ 0x00005000UL, + /* 402C */ 0x000C1000UL, + /* 4030 */ 0x03000000UL, + /* 4034 */ 0x00000000UL, + /* 4038 */ 0x00000000UL, + 0x01064058UL, + 0x00FF04C8UL, + /* 405C */ 0x00000C41UL, + /* 4060 */ 0x00000001UL, + /* 4064 */ 0x00140012UL, + /* 4068 */ 0x0000B16FUL, + /* 406C */ 0x00000000UL, + 0x01114080UL, + 0x13C00714UL, + /* 4084 */ 0x00000000UL, + /* 4088 */ 0x003B03F1UL, + /* 408C */ 0x00000000UL, + /* 4090 */ 0x00000000UL, + /* 4094 */ 0x22140A04UL, + /* 4098 */ 0x4F4A4132UL, + /* 409C */ 0x00000000UL, + /* 40A0 */ 0x00000000UL, + /* 40A4 */ 0x00000000UL, + /* 40A8 */ 0x00000000UL, + /* 40AC */ 0x00000000UL, + /* 40B0 */ 0x00000000UL, + /* 40B4 */ 0x00000000UL, + /* 40B8 */ 0x00000000UL, + /* 40BC */ 0x00000000UL, + /* 40C0 */ 0x00000000UL, + 0x010240E0UL, + 0x00000033UL, + /* 40E4 */ 0x00000000UL, + 0x010140ECUL, + 0x8C84B89BUL, + 0x010540F4UL, + 0x07830464UL, + /* 40F8 */ 0x3AC81388UL, + /* 40FC */ 0x000A209CUL, + /* 4100 */ 0x00206100UL, + /* 4104 */ 0x123556B7UL, + 0x0103410CUL, + 0x0011F778UL, + /* 4110 */ 0x29043020UL, + /* 4114 */ 0x4040BB88UL, + 0x01024124UL, + 0x00000000UL, + /* 4128 */ 0x00000000UL, + 0x010A4130UL, + 0x0C660664UL, + /* 4134 */ 0x0000010CUL, + /* 4138 */ 0x00FA53E8UL, + /* 413C */ 0x00000000UL, + /* 4140 */ 0x00000000UL, + /* 4144 */ 0x00000000UL, + /* 4148 */ 0x00000000UL, + /* 414C */ 0x00000000UL, + /* 4150 */ 0x00000000UL, + /* 4154 */ 0x00000101UL, + 0x01034168UL, + 0x07830464UL, + /* 416C */ 0x00821388UL, + /* 4170 */ 0x00000000UL, + 0x01044230UL, + 0x00000000UL, + /* 4234 */ 0x0E000000UL, + /* 4238 */ 0x00000000UL, + /* 423C */ 0x00000000UL, + 0x01024244UL, + 0x00000000UL, + /* 4248 */ 0x001F81F4UL, + 0x010C4254UL, + 0x00000000UL, + /* 4258 */ 0x003C0000UL, + /* 425C */ 0x00000000UL, + /* 4260 */ 0x00000000UL, + /* 4264 */ 0x55555555UL, + /* 4268 */ 0x00000017UL, + /* 426C */ 0x00000000UL, + /* 4270 */ 0x00000000UL, + /* 4274 */ 0x0006AAAAUL, + /* 4278 */ 0x00000000UL, + /* 427C */ 0x00000000UL, + /* 4280 */ 0x00000000UL, + 0x01018010UL, + 0x00000003UL, + 0x01028038UL, + 0x00103EC5UL, + /* 803C */ 0x00000001UL, + 0x0103809CUL, + 0x00000000UL, + /* 80A0 */ 0x00037870UL, + /* 80A4 */ 0x000000D0UL, + 0x110180A8UL, + 0x000001F0UL, + 0x310180A8UL, + 0x01CB4205UL, + 0x110180ACUL, + 0x000001F0UL, + 0x310180ACUL, + 0x00FD3E05UL, + 0x010280B0UL, + 0x02000300UL, + /* 80B4 */ 0x01000037UL, + 0x02020098UL, + 0x04000C00UL, + /* 009C */ 0x0000004CUL, + 0x020100A4UL, + 0x00000400UL, + 0x020200D0UL, + 0xAA400005UL, + /* 00D4 */ 0x00000188UL, + 0x020100E4UL, + 0x11512C6CUL, + 0x020200F4UL, + 0x00000000UL, + /* 00F8 */ 0x1108213DUL, + 0x120100FCUL, + 0x0000003FUL, + 0x320100FCUL, + 0x00045400UL, + 0x02010130UL, + 0x02510060UL, + 0x02010154UL, + 0x00003FC4UL, + 0x02010168UL, + 0x00000400UL, + 0x03014FFCUL, + (uint32_t)&phyInfo, + 0xFFFFFFFFUL, +}; + +const RAIL_ChannelConfigEntry_t Protocol_Configuration_channels[] = { + { + .phyConfigDeltaAdd = NULL, + .baseFrequency = 2450000000, + .channelSpacing = 1000000, + .physicalChannelOffset = 0, + .channelNumberStart = 0, + .channelNumberEnd = 20, + .maxPower = RAIL_TX_POWER_MAX, + .attr = &channelConfigEntryAttr, +#ifdef RADIO_CONFIG_ENABLE_CONC_PHY + .entryType = 0, +#endif +#ifdef RADIO_CONFIG_ENABLE_STACK_INFO + .stackInfo = NULL, +#endif + }, +}; + +const RAIL_ChannelConfig_t Protocol_Configuration_channelConfig = { + .phyConfigBase = Protocol_Configuration_modemConfigBase, + .phyConfigDeltaSubtract = NULL, + .configs = Protocol_Configuration_channels, + .length = 1U, + .signature = 0UL, +}; + +const RAIL_ChannelConfig_t *channelConfigs[] = {&Protocol_Configuration_channelConfig, NULL}; + +#ifdef RADIO_CONFIG_ENABLE_STACK_INFO +#endif // RADIO_CONFIG_ENABLE_STACK_INFO + +uint32_t protocolAccelerationBuffer[303]; diff --git a/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184a/rail_config.h b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184a/rail_config.h new file mode 100644 index 00000000..f8123e0a --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184a/rail_config.h @@ -0,0 +1,52 @@ +/***************************************************************************//** + * @brief RAIL Configuration + * @details + * WARNING: Auto-Generated Radio Config - DO NOT EDIT + * Radio Configurator Version: 2022.5.2 + * RAIL Adapter Version: 2.4.19 + * RAIL Compatibility: 2.x + ******************************************************************************* + * # License + * Copyright 2019 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef __RAIL_CONFIG_H__ +#define __RAIL_CONFIG_H__ + +#include +#include "rail_types.h" + +#define PROTOCOL_ACCELERATION_BUFFER protocolAccelerationBuffer +extern uint32_t protocolAccelerationBuffer[]; +#define RADIO_CONFIG_XTAL_FREQUENCY 38400000UL + +#define RAIL0_CHANNEL_GROUP_1_PHY_DATASHEET_2450M_2GFSK_1MBPS_500K +#define RAIL0_CHANNEL_GROUP_1_PROFILE_BASE +extern const RAIL_ChannelConfig_t *channelConfigs[]; + +#ifdef RADIO_CONFIG_ENABLE_STACK_INFO +#endif // RADIO_CONFIG_ENABLE_STACK_INFO + +#endif // __RAIL_CONFIG_H__ diff --git a/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184b/radio_settings.radioconf b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184b/radio_settings.radioconf new file mode 100644 index 00000000..af90a4c2 --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184b/radio_settings.radioconf @@ -0,0 +1,18 @@ + + + + + + + 0 + 20 + SAME_AS_FIRST_CHANNEL + RAIL_TX_POWER_MAX + {"selectedPhy":"PHY_Datasheet_2450M_2GFSK_1Mbps_500K"} + + + {"selectedPhy":"PHY_Datasheet_2450M_2GFSK_1Mbps_500K"} + + + + \ No newline at end of file diff --git a/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184b/rail_config.c b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184b/rail_config.c new file mode 100644 index 00000000..a1ca3028 --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184b/rail_config.c @@ -0,0 +1,333 @@ +/***************************************************************************//** + * @brief RAIL Configuration + * @details + * WARNING: Auto-Generated Radio Config - DO NOT EDIT + * Radio Configurator Version: 2022.5.2 + * RAIL Adapter Version: 2.4.19 + * RAIL Compatibility: 2.x + ******************************************************************************* + * # License + * Copyright 2019 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#include "em_device.h" +#include "rail_config.h" + +uint32_t RAILCb_CalcSymbolRate(RAIL_Handle_t railHandle) +{ + (void)railHandle; + return 0U; +} + +uint32_t RAILCb_CalcBitRate(RAIL_Handle_t railHandle) +{ + (void)railHandle; + return 0U; +} + +void RAILCb_ConfigFrameTypeLength(RAIL_Handle_t railHandle, const RAIL_FrameType_t *frameType) +{ + (void)railHandle; + (void)frameType; +} + +static const uint8_t irCalConfig[] = {25, 63, 1, 6, 4, 16, 1, 0, 0, 1, 1, 6, 0, + 16, 39, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0}; + +static const int32_t timingConfig[] = {0, 0, 0}; + +static const uint8_t hfxoRetimingConfigEntries[] = { + 2, 0, 0, 0, 0x00, 0xf0, 0x49, 0x02, 6, 20, 0, 0, 0x00, 0xe0, 0x93, 0x04, 5, 56, + 0, 0, 0xa0, 0x08, 0, 0, 0, 0, 0x58, 0x09, 1, 4, 7, 6, 0x10, 0x0a, 1, 4, + 7, 7, 0xc8, 0x0a, 0, 4, 8, 7, 0x80, 0x0b, 0, 4, 8, 8, 0x38, 0x0c, 0, 4, + 9, 8, 0x61, 0x08, 0, 0, 0, 0, 0x68, 0x08, 0, 0, 0, 0, 0xc7, 0x09, 1, 4, + 4, 3, 0x2c, 0x0b, 1, 4, 4, 4, 0x92, 0x0c, 1, 4, 5, 4}; + +static RAIL_ChannelConfigEntryAttr_t channelConfigEntryAttr = { +#if RAIL_SUPPORTS_OFDM_PA + {{0xFFFFFFFFUL}, {0xFFFFFFFFUL, 0xFFFFFFFFUL}} +#else // RAIL_SUPPORTS_OFDM_PA + {0xFFFFFFFFUL}, +#endif // RAIL_SUPPORTS_OFDM_PA +}; + +static const uint32_t phyInfo[] = { + 13UL, + 0x00924924UL, // 146.28571428571428 + (uint32_t)NULL, + (uint32_t)irCalConfig, + (uint32_t)timingConfig, + 0x00000000UL, + 8000000UL, + 28000000UL, + 1000000UL, + 0x00F50101UL, + 0x02503EC5UL, + (uint32_t)NULL, + (uint32_t)hfxoRetimingConfigEntries, + (uint32_t)NULL, + 0UL, + 0UL, + 999997UL, + (uint32_t)NULL, + (uint32_t)NULL, +}; + +const uint32_t Protocol_Configuration_modemConfigBase[] = { + 0x0002400CUL, + 0x00000000UL, + /* 4010 */ 0x00004000UL, + 0x00024020UL, + 0x0000000FUL, + /* 4024 */ 0x00000000UL, + 0x00074030UL, + 0x00000000UL, + /* 4034 */ 0x00000000UL, + /* 4038 */ 0x00000000UL, + /* 403C */ 0x00000000UL, + /* 4040 */ 0x00000000UL, + /* 4044 */ 0x00004000UL, + /* 4048 */ 0x00040700UL, + 0x00014050UL, + 0x00000000UL, + 0x0002405CUL, + 0x00000000UL, + /* 4060 */ 0x00000000UL, + 0x000140A8UL, + 0x00000000UL, + 0x000440BCUL, + 0x00000000UL, + /* 40C0 */ 0x00000000UL, + /* 40C4 */ 0x00000000UL, + /* 40C8 */ 0x00000000UL, + 0x00044104UL, + 0x00004CFFUL, + /* 4108 */ 0x00000000UL, + /* 410C */ 0x00004DFFUL, + /* 4110 */ 0x00000000UL, + 0x1001C020UL, + 0x0007F800UL, + 0x3001C020UL, + 0x000802F5UL, + 0x0008C024UL, + 0x00001300UL, + /* C028 */ 0x83B380ECUL, + /* C02C */ 0x51407543UL, + /* C030 */ 0x48000FA0UL, + /* C034 */ 0x00004030UL, + /* C038 */ 0x00000000UL, + /* C03C */ 0x00000000UL, + /* C040 */ 0x0000022EUL, + 0x0004C050UL, + 0x04301151UL, + /* C054 */ 0xE6092D0EUL, + /* C058 */ 0x08070654UL, + /* C05C */ 0x0002B6D1UL, + 0x000AC064UL, + 0x1C003004UL, + /* C068 */ 0x09183040UL, + /* C06C */ 0x2079640DUL, + /* C070 */ 0x01FBFCEBUL, + /* C074 */ 0x03E8F67FUL, + /* C078 */ 0x15724BBDUL, + /* C07C */ 0x0518A311UL, + /* C080 */ 0x76543210UL, + /* C084 */ 0x00000A98UL, + /* C088 */ 0x00000000UL, + 0x01010008UL, + 0x00000744UL, + 0x01010018UL, + 0x00000000UL, + 0x01010020UL, + 0x0000A001UL, + 0x0108401CUL, + 0x00000010UL, + /* 4020 */ 0x04000000UL, + /* 4024 */ 0x0002C00FUL, + /* 4028 */ 0x00005000UL, + /* 402C */ 0x000C1000UL, + /* 4030 */ 0x03000000UL, + /* 4034 */ 0x00000000UL, + /* 4038 */ 0x00000000UL, + 0x01064058UL, + 0x00FF04C8UL, + /* 405C */ 0x00000C41UL, + /* 4060 */ 0x00000001UL, + /* 4064 */ 0x00140012UL, + /* 4068 */ 0x0000B16FUL, + /* 406C */ 0x00000000UL, + 0x01114080UL, + 0x13C00714UL, + /* 4084 */ 0x00000000UL, + /* 4088 */ 0x003B03F1UL, + /* 408C */ 0x00000000UL, + /* 4090 */ 0x00000000UL, + /* 4094 */ 0x22140A04UL, + /* 4098 */ 0x4F4A4132UL, + /* 409C */ 0x00000000UL, + /* 40A0 */ 0x00000000UL, + /* 40A4 */ 0x00000000UL, + /* 40A8 */ 0x00000000UL, + /* 40AC */ 0x00000000UL, + /* 40B0 */ 0x00000000UL, + /* 40B4 */ 0x00000000UL, + /* 40B8 */ 0x00000000UL, + /* 40BC */ 0x00000000UL, + /* 40C0 */ 0x00000000UL, + 0x010240E0UL, + 0x00000033UL, + /* 40E4 */ 0x00000000UL, + 0x010140ECUL, + 0x8C84B89BUL, + 0x010540F4UL, + 0x07830464UL, + /* 40F8 */ 0x3AC81388UL, + /* 40FC */ 0x000A209CUL, + /* 4100 */ 0x00206100UL, + /* 4104 */ 0x123556B7UL, + 0x0103410CUL, + 0x0011F778UL, + /* 4110 */ 0x29043020UL, + /* 4114 */ 0x4040BB88UL, + 0x01024124UL, + 0x00000000UL, + /* 4128 */ 0x00000000UL, + 0x010A4130UL, + 0x0C660664UL, + /* 4134 */ 0x0000010CUL, + /* 4138 */ 0x00FA53E8UL, + /* 413C */ 0x00000000UL, + /* 4140 */ 0x00000000UL, + /* 4144 */ 0x00000000UL, + /* 4148 */ 0x00000000UL, + /* 414C */ 0x00000000UL, + /* 4150 */ 0x00000000UL, + /* 4154 */ 0x00000101UL, + 0x01034168UL, + 0x07830464UL, + /* 416C */ 0x00821388UL, + /* 4170 */ 0x00000000UL, + 0x01044230UL, + 0x00000000UL, + /* 4234 */ 0x0E000000UL, + /* 4238 */ 0x00000000UL, + /* 423C */ 0x00000000UL, + 0x01024244UL, + 0x00000000UL, + /* 4248 */ 0x001F81F4UL, + 0x010C4254UL, + 0x00000000UL, + /* 4258 */ 0x003C0000UL, + /* 425C */ 0x00000000UL, + /* 4260 */ 0x00000000UL, + /* 4264 */ 0x55555555UL, + /* 4268 */ 0x00000017UL, + /* 426C */ 0x00000000UL, + /* 4270 */ 0x00000000UL, + /* 4274 */ 0x0006AAAAUL, + /* 4278 */ 0x00000000UL, + /* 427C */ 0x00000000UL, + /* 4280 */ 0x00000000UL, + 0x01018010UL, + 0x00000003UL, + 0x01028038UL, + 0x00103EC5UL, + /* 803C */ 0x00000001UL, + 0x0103809CUL, + 0x00000000UL, + /* 80A0 */ 0x00037870UL, + /* 80A4 */ 0x000000D0UL, + 0x110180A8UL, + 0x000001F0UL, + 0x310180A8UL, + 0x01CB4205UL, + 0x110180ACUL, + 0x000001F0UL, + 0x310180ACUL, + 0x00FD3E05UL, + 0x010280B0UL, + 0x02000300UL, + /* 80B4 */ 0x01000037UL, + 0x02020098UL, + 0x04000C00UL, + /* 009C */ 0x0000004CUL, + 0x020100A4UL, + 0x00000400UL, + 0x020200D0UL, + 0xAA400005UL, + /* 00D4 */ 0x00000188UL, + 0x020100E4UL, + 0x11512C6CUL, + 0x020200F4UL, + 0x00000000UL, + /* 00F8 */ 0x1108213DUL, + 0x120100FCUL, + 0x0000003FUL, + 0x320100FCUL, + 0x00045400UL, + 0x02010130UL, + 0x02510060UL, + 0x02010154UL, + 0x00003FC4UL, + 0x02010168UL, + 0x00000400UL, + 0x03014FFCUL, + (uint32_t)&phyInfo, + 0xFFFFFFFFUL, +}; + +const RAIL_ChannelConfigEntry_t Protocol_Configuration_channels[] = { + { + .phyConfigDeltaAdd = NULL, + .baseFrequency = 2450000000, + .channelSpacing = 1000000, + .physicalChannelOffset = 0, + .channelNumberStart = 0, + .channelNumberEnd = 20, + .maxPower = RAIL_TX_POWER_MAX, + .attr = &channelConfigEntryAttr, +#ifdef RADIO_CONFIG_ENABLE_CONC_PHY + .entryType = 0, +#endif +#ifdef RADIO_CONFIG_ENABLE_STACK_INFO + .stackInfo = NULL, +#endif + }, +}; + +const RAIL_ChannelConfig_t Protocol_Configuration_channelConfig = { + .phyConfigBase = Protocol_Configuration_modemConfigBase, + .phyConfigDeltaSubtract = NULL, + .configs = Protocol_Configuration_channels, + .length = 1U, + .signature = 0UL, +}; + +const RAIL_ChannelConfig_t *channelConfigs[] = {&Protocol_Configuration_channelConfig, NULL}; + +#ifdef RADIO_CONFIG_ENABLE_STACK_INFO +#endif // RADIO_CONFIG_ENABLE_STACK_INFO + +uint32_t protocolAccelerationBuffer[303]; diff --git a/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184b/rail_config.h b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184b/rail_config.h new file mode 100644 index 00000000..f8123e0a --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32bg22_brd4184b/rail_config.h @@ -0,0 +1,52 @@ +/***************************************************************************//** + * @brief RAIL Configuration + * @details + * WARNING: Auto-Generated Radio Config - DO NOT EDIT + * Radio Configurator Version: 2022.5.2 + * RAIL Adapter Version: 2.4.19 + * RAIL Compatibility: 2.x + ******************************************************************************* + * # License + * Copyright 2019 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef __RAIL_CONFIG_H__ +#define __RAIL_CONFIG_H__ + +#include +#include "rail_types.h" + +#define PROTOCOL_ACCELERATION_BUFFER protocolAccelerationBuffer +extern uint32_t protocolAccelerationBuffer[]; +#define RADIO_CONFIG_XTAL_FREQUENCY 38400000UL + +#define RAIL0_CHANNEL_GROUP_1_PHY_DATASHEET_2450M_2GFSK_1MBPS_500K +#define RAIL0_CHANNEL_GROUP_1_PROFILE_BASE +extern const RAIL_ChannelConfig_t *channelConfigs[]; + +#ifdef RADIO_CONFIG_ENABLE_STACK_INFO +#endif // RADIO_CONFIG_ENABLE_STACK_INFO + +#endif // __RAIL_CONFIG_H__ diff --git a/examples/proprietary_trx/src/config/rail/efr32bg27_brd2602a/radio_settings.radioconf b/examples/proprietary_trx/src/config/rail/efr32bg27_brd2602a/radio_settings.radioconf new file mode 100644 index 00000000..796e5d37 --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32bg27_brd2602a/radio_settings.radioconf @@ -0,0 +1,18 @@ + + + + + + + 0 + 20 + SAME_AS_FIRST_CHANNEL + RAIL_TX_POWER_MAX + {"selectedPhy":"PHY_Datasheet_2450M_2GFSK_1Mbps_500K"} + + + {"selectedPhy":"PHY_Datasheet_2450M_2GFSK_1Mbps_500K"} + + + + \ No newline at end of file diff --git a/examples/proprietary_trx/src/config/rail/efr32bg27_brd2602a/rail_config.c b/examples/proprietary_trx/src/config/rail/efr32bg27_brd2602a/rail_config.c new file mode 100644 index 00000000..ab176c9f --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32bg27_brd2602a/rail_config.c @@ -0,0 +1,291 @@ +/***************************************************************************//** + * @brief RAIL Configuration + * @details + * WARNING: Auto-Generated Radio Config - DO NOT EDIT + * Radio Configurator Version: 2302.5.1 + * RAIL Adapter Version: 2.4.31 + * RAIL Compatibility: 2.x + ******************************************************************************* + * # License + * Copyright 2019 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ +#include "em_device.h" +#include "rail_config.h" + +uint32_t RAILCb_CalcSymbolRate(RAIL_Handle_t railHandle) +{ + (void) railHandle; + return 0U; +} + +uint32_t RAILCb_CalcBitRate(RAIL_Handle_t railHandle) +{ + (void) railHandle; + return 0U; +} + +void RAILCb_ConfigFrameTypeLength(RAIL_Handle_t railHandle, + const RAIL_FrameType_t *frameType) +{ + (void) railHandle; + (void) frameType; +} + +static const uint8_t irCalConfig[] = { + 25, 63, 1, 6, 4, 16, 1, 0, 0, 1, 1, 6, 0, 16, 39, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static const int32_t timingConfig[] = { + 0, 0, 0 +}; + +static const uint8_t hfxoRetimingConfigEntries[] = { + 2, 0, 0, 0, 0x00, 0xf0, 0x49, 0x02, 6, 20, 0, 0, 0x00, 0xe0, 0x93, 0x04, 5, 56, 0, 0, 0xa0, 0x08, 0, 0, 0, 0, 0x58, 0x09, 1, 4, 7, 6, 0x10, 0x0a, 1, 4, 7, 7, 0xc8, 0x0a, 0, 4, 8, 7, 0x80, 0x0b, 0, 4, 8, 8, 0x38, 0x0c, 0, 4, 9, 8, 0x61, 0x08, 0, 0, 0, 0, 0x68, 0x08, 0, 0, 0, 0, 0xc7, 0x09, 1, 4, 4, 3, 0x2c, 0x0b, 1, 4, 4, 4, 0x92, 0x0c, 1, 4, 5, 4 +}; + +static RAIL_ChannelConfigEntryAttr_t channelConfigEntryAttr = { +#if RAIL_SUPPORTS_OFDM_PA + { + { 0xFFFFFFFFUL }, + { 0xFFFFFFFFUL, 0xFFFFFFFFUL } + } +#else // RAIL_SUPPORTS_OFDM_PA + { 0xFFFFFFFFUL }, +#endif // RAIL_SUPPORTS_OFDM_PA +}; + +static const uint32_t phyInfo[] = { + 16UL, + 0x00924924UL, // 146.28571428571428 + (uint32_t) NULL, + (uint32_t) irCalConfig, + (uint32_t) timingConfig, + 0x00000000UL, + 8000000UL, + 28000000UL, + 1000000UL, + 0x00F40101UL, + 0x02503EC5UL, + (uint32_t) NULL, + (uint32_t) hfxoRetimingConfigEntries, + (uint32_t) NULL, + 0UL, + 0UL, + 999997UL, + (uint32_t) NULL, + (uint32_t) NULL, + (uint32_t) NULL, +}; + +const uint32_t Protocol_Configuration_modemConfigBase[] = { + 0x0002400CUL, 0x00000000UL, + /* 4010 */ 0x00004000UL, + 0x00024020UL, 0x0000000FUL, + /* 4024 */ 0x00000000UL, + 0x00074030UL, 0x00000000UL, + /* 4034 */ 0x00000000UL, + /* 4038 */ 0x00000000UL, + /* 403C */ 0x00000000UL, + /* 4040 */ 0x00000000UL, + /* 4044 */ 0x00004000UL, + /* 4048 */ 0x03040700UL, + 0x00014050UL, 0x00000000UL, + 0x0002405CUL, 0x00000000UL, + /* 4060 */ 0x00000000UL, + 0x000140A8UL, 0x00000000UL, + 0x000440BCUL, 0x00000000UL, + /* 40C0 */ 0x00000000UL, + /* 40C4 */ 0x00000000UL, + /* 40C8 */ 0x00000000UL, + 0x00044104UL, 0x00004CFFUL, + /* 4108 */ 0x00000000UL, + /* 410C */ 0x00004DFFUL, + /* 4110 */ 0x00000000UL, + 0x1001C020UL, 0x0007F800UL, + 0x3001C020UL, 0x000802F5UL, + 0x0008C024UL, 0x00001300UL, + /* C028 */ 0x83B380ECUL, + /* C02C */ 0x51407543UL, + /* C030 */ 0x48000FA0UL, + /* C034 */ 0x00004030UL, + /* C038 */ 0x00000000UL, + /* C03C */ 0x00000000UL, + /* C040 */ 0x0000022EUL, + 0x0004C050UL, 0x04301151UL, + /* C054 */ 0xE6092D0EUL, + /* C058 */ 0x08070654UL, + /* C05C */ 0x0002B6D1UL, + 0x000AC064UL, 0x1C003004UL, + /* C068 */ 0x09183040UL, + /* C06C */ 0x2079640DUL, + /* C070 */ 0x01FBFCEBUL, + /* C074 */ 0x03E8F67FUL, + /* C078 */ 0x15724BBDUL, + /* C07C */ 0x0518A311UL, + /* C080 */ 0x76543210UL, + /* C084 */ 0x00000A98UL, + /* C088 */ 0x00000000UL, + 0x01010008UL, 0x00000744UL, + 0x01010018UL, 0x00000000UL, + 0x01010020UL, 0x0000A001UL, + 0x0108401CUL, 0x00000010UL, + /* 4020 */ 0x04000000UL, + /* 4024 */ 0x0002C00FUL, + /* 4028 */ 0x00005000UL, + /* 402C */ 0x000C1000UL, + /* 4030 */ 0x03000000UL, + /* 4034 */ 0x00000000UL, + /* 4038 */ 0x00000000UL, + 0x01064058UL, 0x00FF04C8UL, + /* 405C */ 0x00000C41UL, + /* 4060 */ 0x00000001UL, + /* 4064 */ 0x00140012UL, + /* 4068 */ 0x0000B16FUL, + /* 406C */ 0x00000000UL, + 0x01114080UL, 0x13C00714UL, + /* 4084 */ 0x00000000UL, + /* 4088 */ 0x003B03F1UL, + /* 408C */ 0x00000000UL, + /* 4090 */ 0x00000000UL, + /* 4094 */ 0x22140A04UL, + /* 4098 */ 0x4F4A4132UL, + /* 409C */ 0x00000000UL, + /* 40A0 */ 0x00000000UL, + /* 40A4 */ 0x00000000UL, + /* 40A8 */ 0x00000000UL, + /* 40AC */ 0x00000000UL, + /* 40B0 */ 0x00000000UL, + /* 40B4 */ 0x00000000UL, + /* 40B8 */ 0x00000000UL, + /* 40BC */ 0x00000000UL, + /* 40C0 */ 0x00000000UL, + 0x010240E0UL, 0x00000033UL, + /* 40E4 */ 0x00000000UL, + 0x010140ECUL, 0x8C84B89BUL, + 0x010540F4UL, 0x07830464UL, + /* 40F8 */ 0x3AC81388UL, + /* 40FC */ 0x000A209CUL, + /* 4100 */ 0x00206100UL, + /* 4104 */ 0x123556B7UL, + 0x0103410CUL, 0x0011F778UL, + /* 4110 */ 0x29043020UL, + /* 4114 */ 0x4040BB88UL, + 0x01024124UL, 0x00000000UL, + /* 4128 */ 0x00000000UL, + 0x010A4130UL, 0x0C660664UL, + /* 4134 */ 0x0000010CUL, + /* 4138 */ 0x00FA53E8UL, + /* 413C */ 0x00000000UL, + /* 4140 */ 0x00000000UL, + /* 4144 */ 0x00000000UL, + /* 4148 */ 0x00000000UL, + /* 414C */ 0x00000000UL, + /* 4150 */ 0x00000000UL, + /* 4154 */ 0x00000101UL, + 0x01034168UL, 0x07830464UL, + /* 416C */ 0x00821388UL, + /* 4170 */ 0x00000000UL, + 0x01044230UL, 0x00000000UL, + /* 4234 */ 0x0E000000UL, + /* 4238 */ 0x00000000UL, + /* 423C */ 0x00000000UL, + 0x01024244UL, 0x00000000UL, + /* 4248 */ 0x001F81F4UL, + 0x010C4254UL, 0x00000000UL, + /* 4258 */ 0x003C0000UL, + /* 425C */ 0x00000000UL, + /* 4260 */ 0x00000000UL, + /* 4264 */ 0x55555555UL, + /* 4268 */ 0x00000017UL, + /* 426C */ 0x00000000UL, + /* 4270 */ 0x00000000UL, + /* 4274 */ 0x0006AAAAUL, + /* 4278 */ 0x00000000UL, + /* 427C */ 0x00000000UL, + /* 4280 */ 0x00000002UL, + 0x01018010UL, 0x00000003UL, + 0x01028038UL, 0x00103EC5UL, + /* 803C */ 0x00000001UL, + 0x0103809CUL, 0x00000000UL, + /* 80A0 */ 0x00037870UL, + /* 80A4 */ 0x000000D0UL, + 0x110180A8UL, 0x000001F0UL, + 0x310180A8UL, 0x01CB4205UL, + 0x110180ACUL, 0x000001F0UL, + 0x310180ACUL, 0x00FD3E05UL, + 0x010280B0UL, 0x02000300UL, + /* 80B4 */ 0x01000037UL, + 0x02020098UL, 0x04000C00UL, + /* 009C */ 0x0000004CUL, + 0x020100A4UL, 0x00000400UL, + 0x020200D0UL, 0xAA400005UL, + /* 00D4 */ 0x00000188UL, + 0x020100E4UL, 0x11512C6CUL, + 0x020200F4UL, 0x00000000UL, + /* 00F8 */ 0x1108233DUL, + 0x120100FCUL, 0x0000003FUL, + 0x320100FCUL, 0x00045400UL, + 0x02010130UL, 0x02510060UL, + 0x02010154UL, 0x00003FC4UL, + 0x02010168UL, 0x00000400UL, + 0x03014FFCUL, (uint32_t) &phyInfo, + 0xFFFFFFFFUL, +}; + +const RAIL_ChannelConfigEntry_t Protocol_Configuration_channels[] = { + { + .phyConfigDeltaAdd = NULL, + .baseFrequency = 2450000000, + .channelSpacing = 1000000, + .physicalChannelOffset = 0, + .channelNumberStart = 0, + .channelNumberEnd = 20, + .maxPower = RAIL_TX_POWER_MAX, + .attr = &channelConfigEntryAttr, +#ifdef RADIO_CONFIG_ENABLE_CONC_PHY + .entryType = 0, +#endif +#ifdef RADIO_CONFIG_ENABLE_STACK_INFO + .stackInfo = NULL, +#endif + .alternatePhy = NULL, + }, +}; + +const RAIL_ChannelConfig_t Protocol_Configuration_channelConfig = { + .phyConfigBase = Protocol_Configuration_modemConfigBase, + .phyConfigDeltaSubtract = NULL, + .configs = Protocol_Configuration_channels, + .length = 1U, + .signature = 0UL, + .xtalFrequencyHz = 38400000UL, +}; + +const RAIL_ChannelConfig_t *channelConfigs[] = { + &Protocol_Configuration_channelConfig, + NULL +}; + +uint32_t protocolAccelerationBuffer[303]; diff --git a/examples/proprietary_trx/src/config/rail/efr32bg27_brd2602a/rail_config.h b/examples/proprietary_trx/src/config/rail/efr32bg27_brd2602a/rail_config.h new file mode 100644 index 00000000..3b733872 --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32bg27_brd2602a/rail_config.h @@ -0,0 +1,50 @@ +/***************************************************************************//** + * @brief RAIL Configuration + * @details + * WARNING: Auto-Generated Radio Config Header - DO NOT EDIT + * Radio Configurator Version: 2302.5.1 + * RAIL Adapter Version: 2.4.31 + * RAIL Compatibility: 2.x + ******************************************************************************* + * # License + * Copyright 2019 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef __RAIL_CONFIG_H__ +#define __RAIL_CONFIG_H__ + +#include +#include "rail_types.h" + +#define PROTOCOL_ACCELERATION_BUFFER protocolAccelerationBuffer +extern uint32_t protocolAccelerationBuffer[]; + +#define RADIO_CONFIG_XTAL_FREQUENCY 38400000UL + +#define RAIL0_CHANNEL_GROUP_1_PHY_DATASHEET_2450M_2GFSK_1MBPS_500K +#define RAIL0_CHANNEL_GROUP_1_PROFILE_BASE +extern const RAIL_ChannelConfig_t *channelConfigs[]; + +#endif // __RAIL_CONFIG_H__ diff --git a/examples/proprietary_trx/src/config/rail/efr32xg24_dk2601b/radio_settings.radioconf b/examples/proprietary_trx/src/config/rail/efr32xg24_dk2601b/radio_settings.radioconf new file mode 100644 index 00000000..dfb42b02 --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32xg24_dk2601b/radio_settings.radioconf @@ -0,0 +1,18 @@ + + + + + + + 0 + 20 + SAME_AS_FIRST_CHANNEL + RAIL_TX_POWER_MAX + {"selectedPhy":"PHY_Studio_2450M_2GFSK_1Mbps_500K"} + + + {"selectedPhy":"PHY_Studio_2450M_2GFSK_1Mbps_500K"} + + + + \ No newline at end of file diff --git a/examples/proprietary_trx/src/config/rail/efr32xg24_dk2601b/rail_config.c b/examples/proprietary_trx/src/config/rail/efr32xg24_dk2601b/rail_config.c new file mode 100644 index 00000000..6ea24946 --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32xg24_dk2601b/rail_config.c @@ -0,0 +1,366 @@ +/***************************************************************************//** + * @brief RAIL Configuration + * @details + * WARNING: Auto-Generated Radio Config - DO NOT EDIT + * Radio Configurator Version: 2022.5.2 + * RAIL Adapter Version: 2.4.19 + * RAIL Compatibility: 2.x + ******************************************************************************* + * # License + * Copyright 2019 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ +#include "em_device.h" +#include "rail_config.h" + +uint32_t RAILCb_CalcSymbolRate(RAIL_Handle_t railHandle) +{ + (void) railHandle; + return 0U; +} + +uint32_t RAILCb_CalcBitRate(RAIL_Handle_t railHandle) +{ + (void) railHandle; + return 0U; +} + +void RAILCb_ConfigFrameTypeLength(RAIL_Handle_t railHandle, + const RAIL_FrameType_t *frameType) +{ + (void) railHandle; + (void) frameType; +} + +static const uint8_t irCalConfig[] = { + 25, 63, 1, 6, 4, 16, 1, 0, 0, 1, 1, 6, 0, 16, 39, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static const int32_t timingConfig[] = { + 8000, 8000, 0 +}; + +static const uint8_t hfxoRetimingConfigEntries[] = { + 2, 0, 0, 0, 0xc0, 0x17, 0x53, 0x02, 6, 20, 0, 0, 0x80, 0x2f, 0xa6, 0x04, 5, 56, 0, 0, 0xa0, 0x08, 0, 0, 0, 0, 0x58, 0x09, 1, 4, 7, 6, 0x10, 0x0a, 1, 4, 7, 7, 0xc8, 0x0a, 0, 4, 8, 7, 0x80, 0x0b, 0, 4, 8, 8, 0x38, 0x0c, 0, 4, 9, 8, 0x61, 0x08, 0, 0, 0, 0, 0x8a, 0x08, 0, 0, 0, 0, 0xc7, 0x09, 1, 4, 4, 3, 0x2c, 0x0b, 1, 4, 4, 4, 0x92, 0x0c, 1, 4, 5, 4 +}; + +static RAIL_ChannelConfigEntryAttr_t channelConfigEntryAttr = { +#if RAIL_SUPPORTS_OFDM_PA + { +#ifdef RADIO_CONFIG_ENABLE_IRCAL_MULTIPLE_RF_PATHS + { 0xFFFFFFFFUL, 0xFFFFFFFFUL, }, +#else + { 0xFFFFFFFFUL }, +#endif // RADIO_CONFIG_ENABLE_IRCAL_MULTIPLE_RF_PATHS + { 0xFFFFFFFFUL, 0xFFFFFFFFUL } + } +#else // RAIL_SUPPORTS_OFDM_PA +#ifdef RADIO_CONFIG_ENABLE_IRCAL_MULTIPLE_RF_PATHS + { 0xFFFFFFFFUL, 0xFFFFFFFFUL, }, +#else + { 0xFFFFFFFFUL }, +#endif // RADIO_CONFIG_ENABLE_IRCAL_MULTIPLE_RF_PATHS +#endif // RAIL_SUPPORTS_OFDM_PA +}; + +static const uint32_t phyInfo[] = { + 13UL, + 0x00444444UL, // 68.26666666666667 + (uint32_t) NULL, + (uint32_t) irCalConfig, + (uint32_t) timingConfig, + 0x00000000UL, + 0UL, + 36000000UL, + 1000000UL, + 0x00F80101UL, + 0x021039C3UL, + (uint32_t) NULL, + (uint32_t) hfxoRetimingConfigEntries, + (uint32_t) NULL, + 0UL, + 0UL, + 1000002UL, + (uint32_t) NULL, + (uint32_t) NULL, +}; + +const uint32_t Protocol_Configuration_modemConfigBase[] = { + 0x0002400CUL, 0x00000000UL, + /* 4010 */ 0x00004000UL, + 0x00024020UL, 0x0000000FUL, + /* 4024 */ 0x00000000UL, + 0x00074030UL, 0x00000000UL, + /* 4034 */ 0x00000000UL, + /* 4038 */ 0x00000000UL, + /* 403C */ 0x00000000UL, + /* 4040 */ 0x00000000UL, + /* 4044 */ 0x00004000UL, + /* 4048 */ 0x03000700UL, + 0x00014050UL, 0x00000000UL, + 0x0002405CUL, 0x00000000UL, + /* 4060 */ 0x00000000UL, + 0x000140A8UL, 0x00000007UL, + 0x000440BCUL, 0x00000000UL, + /* 40C0 */ 0x00000000UL, + /* 40C4 */ 0x00000000UL, + /* 40C8 */ 0x00000000UL, + 0x00044108UL, 0x00004CFFUL, + /* 410C */ 0x00000000UL, + /* 4110 */ 0x00004DFFUL, + /* 4114 */ 0x00000000UL, + 0x1001C020UL, 0x0007F800UL, + 0x3001C020UL, 0x012801FEUL, + 0x0009C024UL, 0x00001300UL, + /* C028 */ 0x03B380ECUL, + /* C02C */ 0x51407543UL, + /* C030 */ 0xF8000FA0UL, + /* C034 */ 0x00004000UL, + /* C038 */ 0x0007AAA8UL, + /* C03C */ 0x00000000UL, + /* C040 */ 0x00000000UL, + /* C044 */ 0x00000000UL, + 0x0010C054UL, 0x00302151UL, + /* C058 */ 0xE6110012UL, + /* C05C */ 0x00000036UL, + /* C060 */ 0x100F0E0AUL, + /* C064 */ 0x00000011UL, + /* C068 */ 0x0002C688UL, + /* C06C */ 0x00000520UL, + /* C070 */ 0x000010BAUL, + /* C074 */ 0x00200400UL, + /* C078 */ 0x00801804UL, + /* C07C */ 0x01203C0BUL, + /* C080 */ 0x02107C18UL, + /* C084 */ 0x06E0FC2FUL, + /* C088 */ 0x0000007FUL, + /* C08C */ 0x00000000UL, + /* C090 */ 0x00000000UL, + 0x0005C0A8UL, 0x15724BBDUL, + /* C0AC */ 0x0518A311UL, + /* C0B0 */ 0x76543210UL, + /* C0B4 */ 0x00000A98UL, + /* C0B8 */ 0x00000000UL, + 0x0004C0CCUL, 0x00000001UL, + /* C0D0 */ 0x00000000UL, + /* C0D4 */ 0x000A0001UL, + /* C0D8 */ 0x00280001UL, + 0x01010008UL, 0x00000744UL, + 0x01010018UL, 0x00000000UL, + 0x01010020UL, 0x0000A001UL, + 0x01254040UL, 0x70400000UL, + /* 4044 */ 0x00000000UL, + /* 4048 */ 0x00000010UL, + /* 404C */ 0x04000000UL, + /* 4050 */ 0x0082C00FUL, + /* 4054 */ 0x20000000UL, + /* 4058 */ 0x00000000UL, + /* 405C */ 0x03000000UL, + /* 4060 */ 0x20000000UL, + /* 4064 */ 0x00000000UL, + /* 4068 */ 0x00F804B9UL, + /* 406C */ 0x00000C40UL, + /* 4070 */ 0x00000008UL, + /* 4074 */ 0x00140012UL, + /* 4078 */ 0x0000B16FUL, + /* 407C */ 0x00000000UL, + /* 4080 */ 0x00000E7CUL, + /* 4084 */ 0x00000000UL, + /* 4088 */ 0x002A03F1UL, + /* 408C */ 0x62040000UL, + /* 4090 */ 0x00000000UL, + /* 4094 */ 0x22140A04UL, + /* 4098 */ 0x4F4A4132UL, + /* 409C */ 0x00000000UL, + /* 40A0 */ 0x00000000UL, + /* 40A4 */ 0x00000000UL, + /* 40A8 */ 0x00000000UL, + /* 40AC */ 0x00000000UL, + /* 40B0 */ 0x00000000UL, + /* 40B4 */ 0x00000000UL, + /* 40B8 */ 0x00000000UL, + /* 40BC */ 0x00000000UL, + /* 40C0 */ 0x00000000UL, + /* 40C4 */ 0x00000000UL, + /* 40C8 */ 0x00000000UL, + /* 40CC */ 0x00000000UL, + /* 40D0 */ 0x00000000UL, + 0x010140E0UL, 0x00000200UL, + 0x01024110UL, 0x00051E33UL, + /* 4114 */ 0x00000000UL, + 0x010E411CUL, 0x8C416000UL, + /* 4120 */ 0x00000000UL, + /* 4124 */ 0x078304FFUL, + /* 4128 */ 0x3AC81388UL, + /* 412C */ 0x0C6606FFUL, + /* 4130 */ 0x078304FFUL, + /* 4134 */ 0x03FF1388UL, + /* 4138 */ 0xF00A20BCUL, + /* 413C */ 0x005160EBUL, + /* 4140 */ 0x40A46503UL, + /* 4144 */ 0x55F68D00UL, + /* 4148 */ 0x42A832A4UL, + /* 414C */ 0x00403B89UL, + /* 4150 */ 0x800003C0UL, + 0x01024158UL, 0x00000000UL, + /* 415C */ 0x0000FDFFUL, + 0x010D4164UL, 0x0000010CUL, + /* 4168 */ 0x00FA53E8UL, + /* 416C */ 0x40000000UL, + /* 4170 */ 0x00000000UL, + /* 4174 */ 0x00000000UL, + /* 4178 */ 0x00000000UL, + /* 417C */ 0x00000000UL, + /* 4180 */ 0x00000000UL, + /* 4184 */ 0x00000101UL, + /* 4188 */ 0x00000000UL, + /* 418C */ 0x00000000UL, + /* 4190 */ 0x00000000UL, + /* 4194 */ 0x00000000UL, + 0x010241A4UL, 0x00000000UL, + /* 41A8 */ 0x00000000UL, + 0x010241B0UL, 0x00000000UL, + /* 41B4 */ 0xC03795E0UL, + 0x010341BCUL, 0x00000000UL, + /* 41C0 */ 0x003C0000UL, + /* 41C4 */ 0x00069069UL, + 0x010341D0UL, 0x55555555UL, + /* 41D4 */ 0x806E01E6UL, + /* 41D8 */ 0x00AA0006UL, + 0x011641E0UL, 0x00000000UL, + /* 41E4 */ 0x30DF0C02UL, + /* 41E8 */ 0x00319E2EUL, + /* 41EC */ 0x00161801UL, + /* 41F0 */ 0x0002939DUL, + /* 41F4 */ 0x0DF03A13UL, + /* 41F8 */ 0x04687FA9UL, + /* 41FC */ 0x2CE524B3UL, + /* 4200 */ 0x30DF0C02UL, + /* 4204 */ 0x00319E2EUL, + /* 4208 */ 0x00161801UL, + /* 420C */ 0x0002939DUL, + /* 4210 */ 0x0DF03A13UL, + /* 4214 */ 0x04687FA9UL, + /* 4218 */ 0x2CE524B3UL, + /* 421C */ 0x80000000UL, + /* 4220 */ 0x00000000UL, + /* 4224 */ 0x00000040UL, + /* 4228 */ 0x00000000UL, + /* 422C */ 0x40001860UL, + /* 4230 */ 0x00000000UL, + /* 4234 */ 0x00000000UL, + 0x0101423CUL, 0x00000000UL, + 0x01034244UL, 0x00000014UL, + /* 4248 */ 0x00000000UL, + /* 424C */ 0x04050008UL, + 0x01014268UL, 0x00000000UL, + 0x01024280UL, 0x00000000UL, + /* 4284 */ 0x00000081UL, + 0x01054298UL, 0x0200003FUL, + /* 429C */ 0x0000FFFFUL, + /* 42A0 */ 0x0000FFFFUL, + /* 42A4 */ 0x000003FFUL, + /* 42A8 */ 0x0000FFFFUL, + 0x010142B4UL, 0x00000000UL, + 0x010A4330UL, 0x01200040UL, + /* 4334 */ 0x000000A0UL, + /* 4338 */ 0x01005008UL, + /* 433C */ 0x1F1F1F1FUL, + /* 4340 */ 0x1B1F1F1FUL, + /* 4344 */ 0x11131518UL, + /* 4348 */ 0x0C0D0E10UL, + /* 434C */ 0x2F87C145UL, + /* 4350 */ 0x00000000UL, + /* 4354 */ 0x00000000UL, + 0x01018010UL, 0x00000003UL, + 0x01028038UL, 0x001039C3UL, + /* 803C */ 0x00000001UL, + 0x0103809CUL, 0x00000000UL, + /* 80A0 */ 0x00037870UL, + /* 80A4 */ 0x0000C0D5UL, + 0x110180A8UL, 0x000001F0UL, + 0x310180A8UL, 0x01CB4205UL, + 0x110180ACUL, 0x000001F0UL, + 0x310180ACUL, 0x008D2205UL, + 0x010280B0UL, 0x02000300UL, + /* 80B4 */ 0x01000037UL, + 0x0201009CUL, 0x04000C00UL, + 0x020300D8UL, 0xAA400005UL, + /* 00DC */ 0x00000188UL, + /* 00E0 */ 0x000000C0UL, + 0x120100ECUL, 0x00000FE0UL, + 0x320100ECUL, 0x1151200CUL, + 0x020100F0UL, 0x0000012BUL, + 0x12010110UL, 0x000FFF00UL, + 0x32010110UL, 0x31000002UL, + 0x12010150UL, 0x0001C000UL, + 0x32010150UL, 0x00A200C1UL, + 0x02010174UL, 0x019BF169UL, + 0x12010178UL, 0x001C0000UL, + 0x32010178UL, 0x1FE00410UL, + 0x12010180UL, 0x00000779UL, + 0x32010180UL, 0x00000002UL, + 0x02020184UL, 0x00000000UL, + /* 0188 */ 0x00000050UL, + 0x03014FFCUL, (uint32_t) &phyInfo, + 0xFFFFFFFFUL, +}; + +const RAIL_ChannelConfigEntry_t Protocol_Configuration_channels[] = { + { + .phyConfigDeltaAdd = NULL, + .baseFrequency = 2450000000, + .channelSpacing = 1000000, + .physicalChannelOffset = 0, + .channelNumberStart = 0, + .channelNumberEnd = 20, + .maxPower = RAIL_TX_POWER_MAX, + .attr = &channelConfigEntryAttr, +#ifdef RADIO_CONFIG_ENABLE_CONC_PHY + .entryType = 0, +#endif +#ifdef RADIO_CONFIG_ENABLE_STACK_INFO + .stackInfo = NULL, +#endif + }, +}; + +const RAIL_ChannelConfig_t Protocol_Configuration_channelConfig = { + .phyConfigBase = Protocol_Configuration_modemConfigBase, + .phyConfigDeltaSubtract = NULL, + .configs = Protocol_Configuration_channels, + .length = 1U, + .signature = 0UL, +}; + +const RAIL_ChannelConfig_t *channelConfigs[] = { + &Protocol_Configuration_channelConfig, + NULL +}; + + +#ifdef RADIO_CONFIG_ENABLE_STACK_INFO +#endif // RADIO_CONFIG_ENABLE_STACK_INFO + +uint32_t protocolAccelerationBuffer[435]; diff --git a/examples/proprietary_trx/src/config/rail/efr32xg24_dk2601b/rail_config.h b/examples/proprietary_trx/src/config/rail/efr32xg24_dk2601b/rail_config.h new file mode 100644 index 00000000..df211223 --- /dev/null +++ b/examples/proprietary_trx/src/config/rail/efr32xg24_dk2601b/rail_config.h @@ -0,0 +1,52 @@ +/***************************************************************************//** + * @brief RAIL Configuration + * @details + * WARNING: Auto-Generated Radio Config Header - DO NOT EDIT + * Radio Configurator Version: 2022.5.2 + * RAIL Adapter Version: 2.4.19 + * RAIL Compatibility: 2.x + ******************************************************************************* + * # License + * Copyright 2019 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef __RAIL_CONFIG_H__ +#define __RAIL_CONFIG_H__ + +#include +#include "rail_types.h" + +#define PROTOCOL_ACCELERATION_BUFFER protocolAccelerationBuffer +extern uint32_t protocolAccelerationBuffer[]; +#define RADIO_CONFIG_XTAL_FREQUENCY 39000000UL + +#define RAIL0_CHANNEL_GROUP_1_PHY_STUDIO_2450M_2GFSK_1MBPS_500K +#define RAIL0_CHANNEL_GROUP_1_PROFILE_BASE +extern const RAIL_ChannelConfig_t *channelConfigs[]; + +#ifdef RADIO_CONFIG_ENABLE_STACK_INFO +#endif // RADIO_CONFIG_ENABLE_STACK_INFO + +#endif // __RAIL_CONFIG_H__ diff --git a/examples/proprietary_trx/src/main.c b/examples/proprietary_trx/src/main.c new file mode 100644 index 00000000..8e111976 --- /dev/null +++ b/examples/proprietary_trx/src/main.c @@ -0,0 +1,174 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +// ----------------------------------------------------------------------------- +// Includes + +#include +#include +#include +#include +#include +#include +#include +#include +#include "rail.h" +#include "rail_types.h" +#include "pa_conversions_efr32.h" +#include "sl_rail_util_init.h" +#include "app_gpio.h" +#include "app_rail.h" +#include "app_process.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +LOG_MODULE_REGISTER(trx_app_log, LOG_LEVEL_INF); + +/* List of application states */ +enum radio_state { + INIT, + IDLE, + SEND, + SENT, + RECEIVE, + ERROR +}; + +// ----------------------------------------------------------------------------- +// Static Function Declarations + +static void init_run(void *o); +static void idle_run(void *o); +static void send_run(void *o); +static void sent_run(void *o); +static void received_run(void *o); +static void error_run(void *o); + +// ----------------------------------------------------------------------------- +// Global Variables + +// +struct s_state_machine s_sl_machine; + +// ----------------------------------------------------------------------------- +// Static Variables + +static const struct smf_state radio_states[] = { + [INIT] = SMF_CREATE_STATE(NULL, init_run, NULL), + [IDLE] = SMF_CREATE_STATE(NULL, idle_run, NULL), + [SEND] = SMF_CREATE_STATE(NULL, send_run, NULL), + [SENT] = SMF_CREATE_STATE(NULL, sent_run, NULL), + [RECEIVE] = SMF_CREATE_STATE(NULL, received_run, NULL), + [ERROR] = SMF_CREATE_STATE(NULL, error_run, NULL), + +}; + +// ----------------------------------------------------------------------------- +// Public Function Definitions + +int main(void) +{ + uint8_t ret = 0; + int32_t incoming_events = 0; + /* Initialize the event */ + k_event_init(&s_sl_machine.smf_event); + smf_set_initial(SMF_CTX(&s_sl_machine), &radio_states[INIT]); + + while (1) { + ret = smf_run_state(SMF_CTX(&s_sl_machine)); + if (ret) { + return -1; + } + + /* Block until an event is detected */ + incoming_events = + k_event_wait(&s_sl_machine.smf_event, + (EVENT_REQUEST_SEND | EVENT_RADIO_SENT | EVENT_RADIO_RECEIVED | + EVENT_CLI_RECEIVE_SETTING | EVENT_RADIO_ERROR), + false, K_FOREVER); + + if (incoming_events & EVENT_REQUEST_SEND) { + smf_set_state(SMF_CTX(&s_sl_machine), &radio_states[SEND]); + } + if (incoming_events & EVENT_RADIO_SENT) { + smf_set_state(SMF_CTX(&s_sl_machine), &radio_states[SENT]); + } + if (incoming_events & EVENT_RADIO_RECEIVED) { + smf_set_state(SMF_CTX(&s_sl_machine), &radio_states[RECEIVE]); + } + if (incoming_events & EVENT_RADIO_ERROR) { + smf_set_state(SMF_CTX(&s_sl_machine), &radio_states[ERROR]); + } + } + return 0; +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions + +static void init_run(void *o) +{ + RAIL_Version_t rail_version; + struct s_state_machine *s = o; + LOG_INF("INIT STATE"); + if (app_init_gpios()) { + LOG_ERR("LED and Button init failed!"); + } + app_rail_init(); + RAIL_GetVersion(&rail_version, 1); + printk("RAIL LIB version: %d.%d.%d\n", rail_version.major, rail_version.minor, + rail_version.rev); + printk(" HASH: %u\n", rail_version.hash); + printk("Press the button\n"); + s->packet_sent = true; + smf_set_state(SMF_CTX(s), &radio_states[IDLE]); +} + +static void idle_run(void *o) +{ + struct s_state_machine *s = o; + LOG_INF("IDLE STATE"); + if (k_event_test(&(s->smf_event), EVENT_CLI_RECEIVE_SETTING)) { + set_continuous_rx(s->allow_rx); + k_event_clear(&(s->smf_event), EVENT_CLI_RECEIVE_SETTING); + } +} + +static void send_run(void *o) +{ + struct s_state_machine *s = o; + LOG_INF("SEND STATE"); + handle_send(&(s->packet_sent)); + smf_set_state(SMF_CTX(s), &radio_states[IDLE]); + k_event_clear(&(s->smf_event), EVENT_REQUEST_SEND); +} + +static void sent_run(void *o) +{ + struct s_state_machine *s = o; + LOG_INF("SENT STATE"); + handle_sent(&(s->packet_sent)); + app_update_send_led(); + smf_set_state(SMF_CTX(s), &radio_states[IDLE]); + k_event_clear(&(s->smf_event), EVENT_RADIO_SENT); +} + +static void received_run(void *o) +{ + struct s_state_machine *s = o; + LOG_INF("RECEIVE STATE"); + handle_receive(); + app_update_receive_led(); + smf_set_state(SMF_CTX(s), &radio_states[IDLE]); + k_event_clear(&(s->smf_event), EVENT_RADIO_RECEIVED); +} + +static void error_run(void *o) +{ + struct s_state_machine *s = o; + LOG_INF("ERROR STATE"); + handle_error(&(s->error_code)); + smf_set_state(SMF_CTX(s), &radio_states[IDLE]); + k_event_clear(&(s->smf_event), EVENT_RADIO_ERROR); +}