Brings the O-RAN compliant antenna muting feature (originally introduced
on the 'new' branch) onto the latest upstream 2026.w17 tag.
Files added:
openair1/PHY/NR_TRANSPORT/nr_antenna_state.{c,h}
openair1/PHY/NR_TRANSPORT/nr_antenna_control.{c,h}
Files modified (integration hooks):
CMakeLists.txt, executables/nr-gnb.c
openair1/PHY/INIT/nr_init.c, openair1/PHY/defs_gNB.h
openair1/PHY/MODULATION/{beamforming.c,nr_modulation.h,nr_beamforming.c}
openair1/SCHED_NR/nr_ru_procedures.c
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_{primitives,dlsch,uci}.c
Conflicts resolved:
- defs_gNB.h: kept upstream's new headers + appended antenna_state.h
- nr_init.c: dropped reference to upstream-removed nr_srs_info init,
kept nr_init_antenna_state() call
- beamforming.c: upstream moved nr_beam_precoding into new file
nr_beamforming.c; nr_beam_precoding_with_muting added there with
upstream's signature (no slot param)
- nr_modulation.h: aligned _with_muting decl to upstream signature
- nr_ru_procedures.c: muting check applied around upstream's new
fft_shift in nr_feptx, and around per-port memcpy in nr_feptx_prec
- gNB_scheduler_uci.c: SINR-based MCS hint uses get_dl_nrOfLayers(NULL,
sched_ctrl, ...) since nrmac is not in scope at the call site
- mac_proto.h: get_dl_nrOfLayers signature updated to take gNB_MAC_INST*
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
124 lines
4.0 KiB
C
124 lines
4.0 KiB
C
#ifndef NR_ANTENNA_CONTROL_H
|
|
#define NR_ANTENNA_CONTROL_H
|
|
|
|
#include "nr_antenna_state.h"
|
|
#include <stdbool.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/// Default port for the test socket server (development mode only)
|
|
#define NR_ANTENNA_CONTROL_TEST_PORT 9999
|
|
|
|
/**
|
|
* @brief Antenna control backend type
|
|
*/
|
|
typedef enum {
|
|
ANTENNA_CTRL_BACKEND_NONE = 0, ///< No external control
|
|
ANTENNA_CTRL_BACKEND_MPLANE, ///< O-RAN M-Plane NETCONF (production)
|
|
ANTENNA_CTRL_BACKEND_TEST_SOCKET ///< Test socket interface (development)
|
|
} nr_antenna_ctrl_backend_t;
|
|
|
|
/**
|
|
* @brief Initialize antenna control with O-RAN M-Plane NETCONF backend
|
|
*
|
|
* This is the O-RAN compliant production interface. It connects the
|
|
* antenna state to a real NETCONF session to an O-RU.
|
|
*
|
|
* When antenna masks are changed via nr_set_tx_antenna_bitmask() or
|
|
* similar functions, the changes are automatically propagated to the
|
|
* RU via NETCONF edit-config operations.
|
|
*
|
|
* @param ant_state Pointer to the antenna state to control
|
|
* @param ru_session Active M-Plane NETCONF session (from radio/fhi_72/mplane/)
|
|
* @return true if initialization successful
|
|
*/
|
|
bool nr_antenna_control_init_mplane(nr_antenna_state_t *ant_state,
|
|
void *ru_session);
|
|
|
|
/**
|
|
* @brief Start the test socket server (development mode only)
|
|
*
|
|
* Creates a simple TCP server for testing antenna control without
|
|
* NETCONF infrastructure. This is NOT O-RAN compliant.
|
|
*
|
|
* Commands supported (for backwards compatibility):
|
|
* MUTE TX <ant_id> - Mute TX antenna
|
|
* UNMUTE TX <ant_id> - Unmute TX antenna
|
|
* MUTE RX <ant_id> - Mute RX antenna
|
|
* UNMUTE RX <ant_id> - Unmute RX antenna
|
|
* SET TX MASK <hex> - Set TX antenna bitmask
|
|
* SET RX MASK <hex> - Set RX antenna bitmask
|
|
* STATUS - Get current antenna state
|
|
* STATS - Get energy saving statistics
|
|
* RESET STATS - Reset statistics
|
|
* QUIT - Close connection
|
|
*
|
|
* @param ant_state Pointer to the antenna state to control
|
|
* @param port TCP port to listen on (use 0 for default)
|
|
* @return true if server started successfully
|
|
*
|
|
* @note This function logs a warning that it's not O-RAN compliant
|
|
*/
|
|
bool nr_antenna_control_start_test_server(nr_antenna_state_t *ant_state, int port);
|
|
|
|
/**
|
|
* @brief Legacy function - start antenna control server
|
|
*
|
|
* @deprecated Use nr_antenna_control_init_mplane() for O-RAN compliance
|
|
* or nr_antenna_control_start_test_server() for testing.
|
|
*
|
|
* This function starts the test socket server for backwards compatibility.
|
|
* It logs a deprecation warning.
|
|
*/
|
|
bool nr_antenna_control_start(nr_antenna_state_t *ant_state, int port);
|
|
|
|
/**
|
|
* @brief Stop the antenna control interface
|
|
*
|
|
* Stops the test socket server if running.
|
|
* For M-Plane backend, this disconnects from NETCONF notifications.
|
|
*/
|
|
void nr_antenna_control_stop(void);
|
|
|
|
/**
|
|
* @brief Check if antenna control is active
|
|
* @return true if control interface is running
|
|
*/
|
|
bool nr_antenna_control_is_running(void);
|
|
|
|
/**
|
|
* @brief Get current antenna control backend type
|
|
* @return Backend type currently in use
|
|
*/
|
|
nr_antenna_ctrl_backend_t nr_antenna_control_get_backend(void);
|
|
|
|
/**
|
|
* @brief Synchronize local antenna state to RU via M-Plane NETCONF
|
|
*
|
|
* Sends the current antenna bitmask configuration to the RU.
|
|
* Only applicable when using the M-Plane NETCONF backend.
|
|
*
|
|
* @param ant_state Pointer to the antenna state
|
|
* @return true if synchronization successful or not applicable
|
|
*/
|
|
bool nr_antenna_control_sync_to_ru(nr_antenna_state_t *ant_state);
|
|
|
|
/**
|
|
* @brief Synchronize RU antenna state to local via M-Plane NETCONF
|
|
*
|
|
* Reads the current antenna bitmask from the RU and updates local state.
|
|
* Only applicable when using the M-Plane NETCONF backend.
|
|
*
|
|
* @param ant_state Pointer to the antenna state
|
|
* @return true if synchronization successful or not applicable
|
|
*/
|
|
bool nr_antenna_control_sync_from_ru(nr_antenna_state_t *ant_state);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* NR_ANTENNA_CONTROL_H */
|