10.3.1 PHY-DATA.request
This function requests a message transmission to the PHY layer. This is done by means of a specific function provided by the controller descriptor:
typedef uint8_t (*pf_send_data_t)(tx_msg_t *px_msg);
The input parameter structure is the following:
typedef struct tx_msg {
uint32_t ul_tx_time;
uint16_t us_data_len;
uint8_t uc_att_level;
enum mod_schemes uc_scheme;
uint8_t uc_disable_rx;
enum mode_types uc_mod_type;
uint8_t uc_tx_mode;
enum buffer_id uc_buffer_id;
uint8_t uc_rsvd;
uint8_t *puc_data_buf;
} tx_msg_t;
Fields of the structure:
ul_tx_time | Instant when
transmission has to start referred to the internal 1 μs PHY counter (absolute
or relative value, depending on uc_tx_mode ) |
us_data_len | Length of the data buffer in bytes |
uc_att_level | Attenuation level in dB with which the message must be transmitted [0x00: Full gain; 0x01: Full gain – 1 dB; up to 0x15: Full gain – 21 dB]. Value 0xFF is a special case used to apply zero-gain (transmit all zeros) |
uc_scheme | Modulation scheme (related constants defined below) |
uc_disable_rx | Enable or disable Carrier Detect check before transmitting [0: Enable; 1: Disable (forced transmission)] |
uc_mod_type | PRIME mode type (related constants defined below) |
uc_tx_mode | Transmission mode (related constants defined below) |
uc_buffer_id | Identifier of the buffer used for transmitting (related constants defined below) |
uc_rsvd | Reserved field for future use |
*puc_data_buf | Pointer to data buffer |
Related constants affecting above parameters:
/* ! \name TX Mode Bit Mask */
/* TX Mode: Absolute time mode */
#define TX_MODE_ABSOLUTE (0 << 0)
/* TX Mode: Relative time mode */
#define TX_MODE_RELATIVE (1 << 0)
/* TX Mode: Cancel transmission */
#define TX_MODE_CANCEL (1 << 1)
/* TX Mode: Preamble Continuous transmission */
#define TX_MODE_PREAMBLE_CONTINUOUS (1 << 2)
/* TX Mode: Symbols Continuous transmission */
#define TX_MODE_SYMBOLS_CONTINUOUS (1 << 3)
/* ! \name PRIME Mode types */
enum mode_types {
MODE_TYPE_A = 0,
MODE_TYPE_B = 2,
MODE_TYPE_BC = 3,
};
/* ! \name PRIME Buffer ID */
enum buffer_id {
TX_BUFFER_0 = 0,
TX_BUFFER_1 = 1,
};
/* ! \name Modulation schemes */
enum mod_schemes {
MOD_SCHEME_DBPSK = 0,
MOD_SCHEME_DQPSK = 1,
MOD_SCHEME_D8PSK = 2,
MOD_SCHEME_DBPSK_C = 4,
MOD_SCHEME_DQPSK_C = 5,
MOD_SCHEME_D8PSK_C = 6,
MOD_SCHEME_R_DBPSK = 12,
MOD_SCHEME_R_DQPSK = 13,
};
The function returns one of the following transmission result values.
/* TX Result values */
enum tx_result_values {
TX_RESULT_PROCESS = 0, /* Already in process (TX requested successfully) */
TX_RESULT_INV_LENGTH = 2, /* Invalid length error */
TX_RESULT_HIGH_TEMP_110 = 13, /* High temperature (>110ºC) error (only with PL460) */
TX_RESULT_NO_TX = 255, /* No transmission ongoing */
};