Wi-Fi Transceiver#

Functions#

sl_status_t
sl_wifi_transceiver_up(sl_wifi_interface_t interface, sl_wifi_transceiver_configuration_t *config)

Start a Wi-Fi Transceiver interface.

sl_status_t
sl_wifi_transceiver_set_channel(sl_wifi_interface_t interface, sl_wifi_transceiver_set_channel_t channel)

Configure channel from the host.

sl_status_t
sl_wifi_set_transceiver_parameters(sl_wifi_interface_t interface, sl_wifi_transceiver_parameters_t *params)

This API shall be used to configure the CWmin, CWmax, and AIFSN per access category and retransmit count.

sl_status_t
sl_wifi_update_transceiver_peer_list(sl_wifi_interface_t interface, sl_wifi_transceiver_peer_update_t peer)

When new peer is added or deleted from the network, application shall call this API to update peer information to the MAC layer.

sl_status_t
sl_wifi_set_transceiver_multicast_filter(sl_wifi_interface_t interface, sl_wifi_transceiver_mcast_filter_t mcast)

This API configures the multicast MAC address to filter Rx multicast packets.

sl_status_t
sl_wifi_flush_transceiver_data(sl_wifi_interface_t interface)

This API shall flush the entire SW buffer pool.

sl_status_t
sl_wifi_send_transceiver_data(sl_wifi_interface_t interface, sl_wifi_transceiver_tx_data_control_t *control, uint8_t *payload, uint16_t payload_len)

Host shall call this API to encapsulate the data with 802.11 MAC header and send it to MAC layer.

Function Documentation#

sl_wifi_transceiver_up#

sl_status_t sl_wifi_transceiver_up (sl_wifi_interface_t interface, sl_wifi_transceiver_configuration_t *config)

Start a Wi-Fi Transceiver interface.

Parameters
[in]interface

Wi-Fi interface as identified by sl_wifi_interface_t

[in]config

Wi-Fi Transceiver configuration. See sl_wifi_transceiver_configuration_t

  • Pre-conditions:

Returns

  • sl_status_t. See Status Codes. Possible Error Codes:

    • 0x11 - SL_STATUS_NOT_INITIALIZED

    • 0x21 - SL_STATUS_SI91X_COMMAND_GIVEN_IN_INVALID_STATE

    • 0x22 - SL_STATUS_NULL_POINTER

    • 0x0B65 - SL_STATUS_TRANSCEIVER_INVALID_CHANNEL

    • 0x0B67 - SL_STATUS_TRANSCEIVER_INVALID_CONFIG

Note


Definition at line 1271 of file components/protocol/wifi/inc/sl_wifi.h

sl_wifi_transceiver_set_channel#

sl_status_t sl_wifi_transceiver_set_channel (sl_wifi_interface_t interface, sl_wifi_transceiver_set_channel_t channel)

Configure channel from the host.

Parameters
[in]interface

Wi-Fi interface as identified by sl_wifi_interface_t

[in]channel

Application shall decide the channel at which device operates and transmits frames. See sl_wifi_transceiver_set_channel_t.

Param

Description

channel

Primary channel number. Valid channels are 1-14.

band

Reserved

bandwidth

Reserved

tx_power

Reserved

  • Pre-conditions:

Returns

  • sl_status_t. See Status Codes. Possible Error Codes:

    • 0x11 - SL_STATUS_NOT_INITIALIZED

    • 0x21 - SL_STATUS_SI91X_COMMAND_GIVEN_IN_INVALID_STATE

    • 0x0B65 - SL_STATUS_TRANSCEIVER_INVALID_CHANNEL

Note

  • This API is only supported in Wi-Fi Transceiver opermode (7).

  • This is a blocking API.

Sample command usage:

// Initialize channel
sl_wifi_transceiver_set_channel_t channel = {
  .chan_info.channel = 14,
};

// Set channel
sl_wifi_transceiver_set_channel(SL_WIFI_TRANSCEIVER_INTERFACE, channel);

Definition at line 1311 of file components/protocol/wifi/inc/sl_wifi.h

sl_wifi_set_transceiver_parameters#

sl_status_t sl_wifi_set_transceiver_parameters (sl_wifi_interface_t interface, sl_wifi_transceiver_parameters_t *params)

This API shall be used to configure the CWmin, CWmax, and AIFSN per access category and retransmit count.

Parameters
[in]interface

Wi-Fi interface as identified by sl_wifi_interface_t

[in]params

Transceiver parameters as identified by sl_wifi_transceiver_parameters_t. Shall be used to set/get the contention parameters per access category and the retransmit count in MAC layer.

  • Pre-conditions:

Returns

  • sl_status_t. See Status Codes. Possible Error Codes:

    • 0x11 - SL_STATUS_NOT_INITIALIZED

    • 0x21 - SL_STATUS_SI91X_COMMAND_GIVEN_IN_INVALID_STATE

    • 0x22 - SL_STATUS_NULL_POINTER

    • 0x0B67 - SL_STATUS_TRANSCEIVER_INVALID_CONFIG

Note

  • This API is only supported in Wi-Fi Transceiver opermode (7).

  • Set is allowed only once before the first call to sl_wifi_transceiver_set_channel API.

  • This API is optional. Default configurations are used if API is not called.

  • This is a blocking API.

Sample command usage:

// Initialize parameters
sl_wifi_transceiver_parameters_t params = {
  .set = 1,
  .retransmit_count = 15,
  .cw_params[0].aifsn = 3,
};

// Set parameters
sl_wifi_set_transceiver_parameters(SL_WIFI_TRANSCEIVER_INTERFACE, &params);

Definition at line 1350 of file components/protocol/wifi/inc/sl_wifi.h

sl_wifi_update_transceiver_peer_list#

sl_status_t sl_wifi_update_transceiver_peer_list (sl_wifi_interface_t interface, sl_wifi_transceiver_peer_update_t peer)

When new peer is added or deleted from the network, application shall call this API to update peer information to the MAC layer.

Parameters
[in]interface

Wi-Fi interface as identified by sl_wifi_interface_t

[in]peer

Peer to be added/deleted in MAC layer. See sl_wifi_transceiver_peer_update_t.

Returns

  • sl_status_t. See Status Codes. Possible Error Codes:

    • 0x11 - SL_STATUS_NOT_INITIALIZED

    • 0x0B44 - SL_STATUS_WIFI_INTERFACE_NOT_UP

    • 0x0B63 - SL_STATUS_TRANSCEIVER_INVALID_MAC_ADDRESS

    • 0x0B66 - SL_STATUS_TRANSCEIVER_INVALID_DATA_RATE

    • 0x10096 - SL_STATUS_SI91X_TRANSCEIVER_PEER_DS_FEAT_DISABLED

    • 0x10097 - SL_STATUS_SI91X_TRANSCEIVER_PEER_ALREADY_EXISTS

    • 0x10098 - SL_STATUS_SI91X_TRANSCEIVER_MAX_PEER_LIMIT_REACHED

    • 0x10099 - SL_STATUS_SI91X_TRANSCEIVER_PEER_NOT_FOUND

Note

  • This API is only supported in Wi-Fi Transceiver opermode (7).

  • This is a blocking API.

  • MAC layer supports storing upto 100 peers.

  • To add peers in MAC layer, it is mandatory to enable SL_SI91X_FEAT_TRANSCEIVER_MAC_PEER_DS_SUPPORT/BIT(13) in sl_wifi_device_configuration_t feature_bit_map passed in sl_wifi_init.

Sample command usage:

// Initialize peer
sl_wifi_transceiver_peer_update_t peer;
uint8_t peer_mac[6] = {0x00, 0x23, 0xa7, 0x20, 0x21, 0x24};
memcpy(peer.peer_mac_address, peer_mac, 6);
peer.peer_supported_rate_bitmap = PEER_DS_BITMAP_DATA_RATE_48 | PEER_DS_BITMAP_DATA_RATE_54;
peer.flags                     |= BIT(0)); // Set bit 0 to add peer

// Add peer
sl_wifi_update_transceiver_peer_list(SL_WIFI_TRANSCEIVER_INTERFACE, peer);

Definition at line 1392 of file components/protocol/wifi/inc/sl_wifi.h

sl_wifi_set_transceiver_multicast_filter#

sl_status_t sl_wifi_set_transceiver_multicast_filter (sl_wifi_interface_t interface, sl_wifi_transceiver_mcast_filter_t mcast)

This API configures the multicast MAC address to filter Rx multicast packets.

Parameters
[in]interface

Wi-Fi interface as identified by sl_wifi_interface_t

[in]mcast

Multicast MAC address to be added/deleted from MAC layer for filtering. See sl_wifi_transceiver_mcast_filter_t.

Returns

  • sl_status_t. See Status Codes. Possible Error Codes:

    • 0x11 - SL_STATUS_NOT_INITIALIZED

    • 0x21 - SL_STATUS_INVALID_PARAMETER

    • 0x0B44 - SL_STATUS_WIFI_INTERFACE_NOT_UP

    • 0x0B63 - SL_STATUS_TRANSCEIVER_INVALID_MAC_ADDRESS

Note

  • This API is only supported in Wi-Fi Transceiver opermode (7).

  • This API can be called dynamically.

  • Maximum of two multicast MAC addresses can be configured for filtering.

Sample command usage:

// Initialize multicast filter address structure
sl_wifi_transceiver_mcast_filter_t mcast;
uint8_t filter_mac[6] = { 0x01, 0x00, 0x5e, 0x00, 0x01, 0x01 };
mcast.flags |= BIT(0);
mcast.num_of_mcast_addr = 1;
memcpy(mcast.mac[0], filter_mac, 6);

// Add MAC address to be filtered
sl_wifi_set_transceiver_multicast_filter(SL_WIFI_TRANSCEIVER_INTERFACE, mcast);

Definition at line 1429 of file components/protocol/wifi/inc/sl_wifi.h

sl_wifi_flush_transceiver_data#

sl_status_t sl_wifi_flush_transceiver_data (sl_wifi_interface_t interface)

This API shall flush the entire SW buffer pool.

Parameters
[in]interface

Wi-Fi interface as identified by sl_wifi_interface_t

Returns

  • sl_status_t. See Status Codes. Possible Error Codes:

    • 0x11 - SL_STATUS_NOT_INITIALIZED

    • 0x0B44 - SL_STATUS_WIFI_INTERFACE_NOT_UP

Note

  • This API is only supported in Wi-Fi Transceiver opermode (7).

  • All priority queues shall be flushed.

Sample command usage:

sl_wifi_flush_transceiver_data(SL_WIFI_TRANSCEIVER_INTERFACE);

Definition at line 1454 of file components/protocol/wifi/inc/sl_wifi.h

sl_wifi_send_transceiver_data#

sl_status_t sl_wifi_send_transceiver_data (sl_wifi_interface_t interface, sl_wifi_transceiver_tx_data_control_t *control, uint8_t *payload, uint16_t payload_len)

Host shall call this API to encapsulate the data with 802.11 MAC header and send it to MAC layer.

Parameters
[in]interface

Wi-Fi interface as identified by sl_wifi_interface_t

[in]control

API uses meta data for preparing data packet along with MAC header for sending to MAC layer. See sl_wifi_transceiver_tx_data_control_t.

[in]payload

Pointer to payload (encrypted by host) to be sent to LMAC.

[in]payload_len

Length of the payload. Valid range is 1 - 2020 bytes.

Returns

  • sl_status_t. See Status Codes. Possible Error Codes:

    • 0x11 - SL_STATUS_NOT_INITIALIZED

    • 0x0B44 - SL_STATUS_WIFI_INTERFACE_NOT_UP

    • 0x0B63 - SL_STATUS_TRANSCEIVER_INVALID_MAC_ADDRESS

    • 0x0B64 - SL_STATUS_TRANSCEIVER_INVALID_QOS_PRIORITY

    • 0x0B66 - SL_STATUS_TRANSCEIVER_INVALID_DATA_RATE

    • 0x21 - SL_STATUS_INVALID_PARAMETER

    • 0x22 - SL_STATUS_NULL_POINTER

Format of encapsulated data sent to LMAC#

Field name

Frame Control

Duration

Addr1

Addr2

Adddr3

Seq Ctrl

Addr4

QoS ctrl

Payload (LLC + Data)

Size(bytes)

2

2

6

6

6

2

6 (Optionally present)

2 (Optionally present)

Variable

Note

  • This API is only supported in Wi-Fi Transceiver opermode (7).

  • Once this functions returns, the calling API is responsible for freeing control and payload.

  • On chip MAC level encryption is not supported in transceiver mode.

  • This is not a blocking API. Callback SL_WIFI_TRANSCEIVER_TX_DATA_STATUS_CB can be registered to get the status report from firmware.

  • Only 11b/g rates shall be supported.

  • It is recommended to use basic rate for multicast/broadcast packets.

  • Sample command usage:

    // Prepare payload
    <Prepare data payload in "payload" buffer>
    <Initialize data control block @ref sl_wifi_transceiver_tx_data_control_t >
    control->ctrl_flags = BIT(0) | BIT(1) | BIT(2) | BIT(5); // Enable 4-addr MAC hdr, QoS frame, Fixed data rate, send status report for data packet
    control->priority   = 2;                                 // Voice priority queue
    control->rate       = SL_WIFI_DATA_RATE_36;
    control->token      = token;
    <Fill control addr1, addr2, addr3 and addr4(optionally) with 6 byte RA, TA, DA and SA MAC addresses respectively>
    
    // Call API to encapsulate the data with 802.11 MAC header and send it to MAC layer.
    sl_wifi_send_transceiver_data(SL_WIFI_TRANSCEIVER_INTERFACE, control, payload, payload_len);
    

Definition at line 1508 of file components/protocol/wifi/inc/sl_wifi.h