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_timeInstant when transmission has to start referred to the internal 1 μs PHY counter (absolute or relative value, depending on uc_tx_mode)
us_data_lenLength of the data buffer in bytes
uc_att_levelAttenuation 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_schemeModulation scheme (related constants defined below)
uc_disable_rxEnable or disable Carrier Detect check before transmitting [0: Enable; 1: Disable (forced transmission)]
uc_mod_typePRIME mode type (related constants defined below)
uc_tx_modeTransmission mode (related constants defined below)
uc_buffer_idIdentifier of the buffer used for transmitting (related constants defined below)
uc_rsvdReserved field for future use
*puc_data_bufPointer 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 */
};