blob: f8266d6fb763db96cdd17b7bbab5331605637d55 [file] [log] [blame]
#ifndef _MRS_NRAS_SEARCH_H
#define _MRS_NRAS_SEARCH_H
#include "mrs_common_capability.h"
#include "mrs_common_search.h"
#include "mrs_as_struct.h"
#include "mcc_recog_train_data.h"
#ifdef UNIT_TEST
#include "mcc_recog_test_data.h"
#endif /* UNIT_TEST */
#define MRS_NRAS_MCC_RECOG_MAX_SUBBAND_NUM 64
typedef struct
{
kal_uint32 min_gscn;
kal_uint32 max_gscn;
kal_uint8 step_size;
} nr_gscn_range_struct;
typedef struct
{
kal_uint32 begin;
kal_uint32 end;
} nr_freq_range_struct;
typedef struct nras_mcc_recog_mcc_list {
kal_uint8 mcc_num;
mrs_mcc_id mcc[MCC_RECOG_NR_MAX_MCC_LEN];
} mrs_nras_mcc_recog_mcc_list_struct;
typedef struct
{
nr_freq_range_struct freq_range;
kal_int16 rssi; // qdbm = dbm * 4
} mrs_nras_subband_rssi_struct;
typedef struct
{
kal_uint16 band;
kal_uint8 subband_num; // The number of subbands to report.
mrs_nras_subband_rssi_struct subband_rssi[MRS_NRAS_MCC_RECOG_MAX_SUBBAND_NUM];
} mrs_nras_band_rssi_distribution_struct;
typedef struct
{
kal_uint16 band_num;
mrs_nras_band_rssi_distribution_struct band[MCC_RECOG_NR_BAND_NUM];
} mrs_nras_rssi_distribution_struct;
extern mrs_nras_mcc_recog_mcc_list_struct nr_mcc_list;
void mrs_get_predict_nrarfcn_table_by_band(kal_uint32 nr_band, mrs_freq_table_struct *nrarfcn_table);
kal_uint32 mrs_nras_gscn_to_nrarfcn(kal_uint32 gscn);
kal_uint16 mrs_nras_get_predict_freq_list_by_band(
MRS_SIM_INDEX sim_index,
const kal_uint32 band_list_num,
const kal_uint16 *band_list,
const NRARFCN *skip_freq_list,
const kal_uint16 skip_freq_list_num,
NRARFCN *predict_freq_list // kal_uint32 array[64]
);
kal_uint16 mrs_nras_get_predict_freq_list_by_plmn(
MRS_SIM_INDEX sim_index,
const mrs_plmn_id_list *plmn_list,
const NRARFCN *skip_freq_list,
const kal_uint16 skip_freq_list_num,
NRARFCN *predict_freq_list);
void mrs_get_predict_nrarfcn_table_by_band(kal_uint32 nr_band, mrs_freq_table_struct *nrarfcn_table);
kal_uint32 mrs_nras_gscn_to_nrarfcn(kal_uint32 gscn);
void mrs_nras_plmn_id_to_mrs_plmn_id(const plmn_id_struct *src, mrs_plmn_id *dst);
kal_uint16 mrs_nras_get_predict_freq_list_by_band(
MRS_SIM_INDEX sim_index,
const kal_uint32 band_list_num,
const kal_uint16 *band_list,
const NRARFCN *skip_freq_list,
const kal_uint16 skip_freq_list_num,
NRARFCN *predict_freq_list // kal_uint32 array[64]
);
kal_uint16 mrs_nras_get_predict_freq_list_by_plmn(
MRS_SIM_INDEX sim_index,
const mrs_plmn_id_list *plmn_list,
const NRARFCN *skip_freq_list,
const kal_uint16 skip_freq_list_num,
NRARFCN *predict_freq_list);
double mrs_nras_mcc_recog_centered_cosine_distance(const kal_int16 *data1, const kal_int16 *data2, kal_uint32 data_len);
kal_bool mrs_nras_mcc_recog_is_remarkable_band(kal_uint16 band);
mrs_nras_mcc_recog_mcc_list_struct mrs_nras_mcc_recog_get_mcc(mrs_nras_rssi_distribution_struct *rssi_distribution);
mrs_nras_mcc_recog_mcc_list_struct mrs_nras_mcc_recog_get_latest_mcc();
#ifdef UNIT_TEST
void mrs_nras_mcc_recog_regression();
#endif /* UNIT_TEST */
#endif