fm: add support for FMStats for cherokee
Add support for FMStats app for cherokee platform.
Change-Id: Ia63a69697554ebc28a22e86d450fade6b4427a67
diff --git a/helium/radio-helium.h b/helium/radio-helium.h
index 98452d8..05fc309 100644
--- a/helium/radio-helium.h
+++ b/helium/radio-helium.h
@@ -104,38 +104,41 @@
#define FM_TX_PHY_CFG_LEN 0x10
#define FM_TX_PWR_GAIN_OFFSET 14
/**RDS CONFIG MODE**/
-#define FM_RDS_CNFG_MODE 0x0f
-#define FM_RDS_CNFG_LEN 0x10
-#define AF_RMSSI_TH_LSB_OFFSET 10
-#define AF_RMSSI_TH_MSB_OFFSET 11
-#define AF_RMSSI_SAMPLES_OFFSET 15
+#define FM_RDS_CNFG_MODE 0x0f
+#define FM_RDS_CNFG_LEN 0x10
+#define AF_RMSSI_TH_OFFSET 1
+#define AF_RMSSI_SAMPLES_OFFSET 2
/**RX CONFIG MODE**/
-#define FM_RX_CONFG_MODE 0x15
-#define FM_RX_CNFG_LEN 0x20
-#define GD_CH_RMSSI_TH_OFFSET 12
-#define MAX_GD_CH_RMSSI_TH 127
-#define SRCH_ALGO_TYPE_OFFSET 25
-#define SINRFIRSTSTAGE_OFFSET 26
-#define RMSSIFIRSTSTAGE_OFFSET 27
-#define CF0TH12_BYTE1_OFFSET 8
-#define CF0TH12_BYTE2_OFFSET 9
-#define CF0TH12_BYTE3_OFFSET 10
-#define CF0TH12_BYTE4_OFFSET 11
-#define MAX_SINR_FIRSTSTAGE 127
-#define MAX_RMSSI_FIRSTSTAGE 127
+#define FM_RX_CONFG_MODE 0x15
+#define FM_RX_CNFG_LEN 0x15
+#define GD_CH_RMSSI_TH_OFFSET 0x03
+#define MAX_GD_CH_RMSSI_TH 0x7F
+#define SRCH_ALGO_TYPE_OFFSET 0x00
+#define SINRFIRSTSTAGE_OFFSET 0x01
+#define RMSSIFIRSTSTAGE_OFFSET 0x02
+#define CF0TH12_BYTE1_OFFSET 0x03
+#define CF0TH12_BYTE2_OFFSET 0x04
+#define MAX_SINR_FIRSTSTAGE 0x7F
+#define MAX_RMSSI_FIRSTSTAGE 0x7F
#define RDS_PS0_XFR_MODE 0x01
-#define RDS_PS0_LEN 6
-#define RX_REPEATE_BYTE_OFFSET 5
-#define FM_SPUR_TBL_SIZE 240
-#define SPUR_DATA_LEN 16
-#define ENTRIES_EACH_CMD 15
-#define SPUR_DATA_INDEX 2
-#define FM_AF_LIST_MAX_SIZE 200
+#define RDS_PS0_LEN 0x06
+#define RX_REPEATE_BYTE_OFFSET 0x05
+#define FM_SPUR_TBL_SIZE 0xF0
+#define SPUR_DATA_LEN 0x10
+#define ENTRIES_EACH_CMD 0x0F
+#define SPUR_DATA_INDEX 0x02
+#define FM_AF_LIST_MAX_SIZE 0xC8
#define AF_LIST_MAX (FM_AF_LIST_MAX_SIZE / 4) /* Each AF frequency consist
- of sizeof(int) bytes */
-#define MAX_BLEND_INDEX 49
+ of sizeof(int) bytes */
+#define MAX_BLEND_INDEX 0x31
+
+#define FM_SRCH_CONFG_MODE 0x41
+#define FM_AFJUMP_CONFG_MODE 0x42
+#define FM_SRCH_CNFG_LEN 0x08
+#define FM_AFJUMP_CNFG_LEN 0x06
+
/* HCI timeouts */
-#define RADIO_HCI_TIMEOUT (10000) /* 10 seconds */
+#define RADIO_HCI_TIMEOUT (10000) /* 10 seconds */
typedef enum {
ASSOCIATE_JVM,
@@ -164,6 +167,15 @@
typedef void (*fm_ssbi_peek_cb)(char *ssbi_peek_rsp);
typedef void (*fm_ch_det_th_cb)(char *ch_det_rsp);
typedef void (*fm_ecc_evt_cb)(char *ecc_rsp);
+typedef void (*fm_sig_thr_cb) (int val, int status);
+typedef void (*fm_get_ch_det_thrs_cb) (int val, int status);
+typedef void (*fm_def_data_rd_cb) (int val, int status);
+typedef void (*fm_get_blnd_cb) (int val, int status);
+typedef void (*fm_set_ch_det_thrs_cb) (int status);
+typedef void (*fm_def_data_wrt_cb) (int status);
+typedef void (*fm_set_blnd_cb) (int status);
+typedef void (*fm_get_stn_prm_cb) (int val, int status);
+typedef void (*fm_get_stn_dbg_prm_cb) (int val, int status);
typedef struct {
size_t size;
@@ -188,6 +200,15 @@
fm_ch_det_th_cb fm_ch_det_th_rsp_cb;
fm_ecc_evt_cb ext_country_code_cb;
callback_thread_event thread_evt_cb;
+ fm_sig_thr_cb fm_get_sig_thres_cb;
+ fm_get_ch_det_thrs_cb fm_get_ch_det_thr_cb;
+ fm_def_data_rd_cb fm_def_data_read_cb;
+ fm_get_blnd_cb fm_get_blend_cb;
+ fm_set_ch_det_thrs_cb fm_set_ch_det_thr_cb;
+ fm_def_data_wrt_cb fm_def_data_write_cb;
+ fm_set_blnd_cb fm_set_blend_cb;
+ fm_get_stn_prm_cb fm_get_station_param_cb;
+ fm_get_stn_dbg_prm_cb fm_get_station_debug_param_cb;
} fm_vendor_callbacks_t;
pthread_mutex_t radio_fm_cmd;
@@ -304,11 +325,11 @@
(short) hci_opcode_pack(HCI_OGF_FM_RECV_CTRL_CMD_REQ, ocf)
#define hci_trans_ctrl_cmd_op_pack(ocf) \
(short) hci_opcode_pack(HCI_OGF_FM_TRANS_CTRL_CMD_REQ, ocf)
-#define hci_common_cmd_op_pack(ocf) \
+#define hci_common_cmd_op_pack(ocf) \
(short) hci_opcode_pack(HCI_OGF_FM_COMMON_CTRL_CMD_REQ, ocf)
-#define hci_status_param_op_pack(ocf) \
+#define hci_status_param_op_pack(ocf) \
(short) hci_opcode_pack(HCI_OGF_FM_STATUS_PARAMETERS_CMD_REQ, ocf)
-#define hci_diagnostic_cmd_op_pack(ocf) \
+#define hci_diagnostic_cmd_op_pack(ocf) \
(short) hci_opcode_pack(HCI_OGF_FM_DIAGNOSTIC_CMD_REQ, ocf)
@@ -342,15 +363,15 @@
char ch_spacing;
char rds_std;
char hlsi;
- int band_low_limit;
- int band_high_limit;
+ int band_low_limit;
+ int band_high_limit;
} ;
/* ----- HCI Command request ----- */
struct hci_fm_trans_conf_req_struct {
char emphasis;
char rds_std;
- int band_low_limit;
+ int band_low_limit;
int band_high_limit;
} ;
@@ -467,21 +488,27 @@
char sinr_samples;
char low_th;
char high_th;
-
} ;
struct hci_fm_blend_table {
- char ucBlendType;
- char ucBlendRampRateUp;
- char ucBlendDebounceNumSampleUp;
- char ucBlendDebounceIdxUp;
- char ucBlendSinrIdxSkipStep;
- char scBlendSinrHi;
- char scBlendRmssiHi;
- char ucBlendIndexHi;
- char ucBlendIndex[MAX_BLEND_INDEX];
+ char BlendType;
+ char BlendRampRateUp;
+ char BlendDebounceNumSampleUp;
+ char BlendDebounceIdxUp;
+ char BlendSinrIdxSkipStep;
+ char BlendSinrHi;
+ char BlendRmssiHi;
+ char BlendIndexHi;
+ char BlendIndex[MAX_BLEND_INDEX];
} ;
+struct hci_fm_def_data_rd {
+ char mode;
+ char length;
+ char param_len;
+ char param;
+};
+
/*HCI events*/
#define HCI_EV_TUNE_STATUS 0x01
#define HCI_EV_RDS_LOCK_STATUS 0x02
@@ -521,22 +548,22 @@
/*RT PLUS*/
#define DUMMY_CLASS 0
#define RT_PLUS_LEN_1_TAG 3
-#define RT_ERT_FLAG_BIT 5
+#define RT_ERT_FLAG_BIT 5
/*TAG1*/
-#define TAG1_MSB_OFFSET 3
-#define TAG1_MSB_MASK 7
-#define TAG1_LSB_OFFSET 5
+#define TAG1_MSB_OFFSET 3
+#define TAG1_MSB_MASK 7
+#define TAG1_LSB_OFFSET 5
#define TAG1_POS_MSB_MASK 31
#define TAG1_POS_MSB_OFFSET 1
#define TAG1_POS_LSB_OFFSET 7
-#define TAG1_LEN_OFFSET 1
+#define TAG1_LEN_OFFSET 1
#define TAG1_LEN_MASK 63
/*TAG2*/
-#define TAG2_MSB_OFFSET 5
+#define TAG2_MSB_OFFSET 5
#define TAG2_MSB_MASK 1
-#define TAG2_LSB_OFFSET 3
+#define TAG2_LSB_OFFSET 3
#define TAG2_POS_MSB_MASK 7
#define TAG2_POS_MSB_OFFSET 3
#define TAG2_POS_LSB_OFFSET 5
@@ -544,7 +571,7 @@
#define AGT_MASK 31
/*Extract 5 left most bits of lsb of 2nd block*/
-#define AGT(x) (x & AGT_MASK)
+#define AGT(x) (x & AGT_MASK)
/*16 bits of 4th block*/
#define AID(lsb, msb) ((msb << 8) | (lsb))
/*Extract 5 right most bits of msb of 2nd block*/
@@ -554,9 +581,9 @@
#define RT_PLUS_AID 0x4bd7
/*ERT*/
-#define ERT_AID 0x6552
-#define CARRIAGE_RETURN 0x000D
-#define MAX_ERT_SEGMENT 31
+#define ERT_AID 0x6552
+#define CARRIAGE_RETURN 0x000D
+#define MAX_ERT_SEGMENT 31
#define ERT_FORMAT_DIR_BIT 1
#define EXTRACT_BIT(data, bit_pos) ((data & (1 << bit_pos)) >> bit_pos)
@@ -683,8 +710,7 @@
} ;
struct hci_fm_data_rd_rsp {
- char status;
- char ret_data_len;
+ char data_len;
char data[DEFAULT_DATA_SIZE];
} ;
@@ -694,7 +720,6 @@
} ;
struct hci_fm_dbg_param_rsp {
- char status;
char blend;
char soft_mute;
char inf_blend;
@@ -704,35 +729,35 @@
char in_det_out;
} ;
-#define CLKSPURID_INDEX0 0
-#define CLKSPURID_INDEX1 5
-#define CLKSPURID_INDEX2 10
-#define CLKSPURID_INDEX3 15
-#define CLKSPURID_INDEX4 20
-#define CLKSPURID_INDEX5 25
+#define CLKSPURID_INDEX0 0
+#define CLKSPURID_INDEX1 5
+#define CLKSPURID_INDEX2 10
+#define CLKSPURID_INDEX3 15
+#define CLKSPURID_INDEX4 20
+#define CLKSPURID_INDEX5 25
-#define MAX_SPUR_FREQ_LIMIT 30
-#define CKK_SPUR 0x3B
-#define SPUR_DATA_SIZE 0x4
-#define SPUR_ENTRIES_PER_ID 0x5
+#define MAX_SPUR_FREQ_LIMIT 30
+#define CKK_SPUR 0x3B
+#define SPUR_DATA_SIZE 0x4
+#define SPUR_ENTRIES_PER_ID 0x5
#define COMPUTE_SPUR(val) ((((val) - (76000)) / (50)))
#define GET_FREQ(val, bit) ((bit == 1) ? ((val) >> 8) : ((val) & 0xFF))
#define GET_SPUR_ENTRY_LEVEL(val) ((val) / (5))
struct hci_fm_spur_data {
- int freq[MAX_SPUR_FREQ_LIMIT];
+ int freq[MAX_SPUR_FREQ_LIMIT];
char rmssi[MAX_SPUR_FREQ_LIMIT];
char enable[MAX_SPUR_FREQ_LIMIT];
} ;
/* HCI dev events */
-#define RADIO_HCI_DEV_REG 1
-#define RADIO_HCI_DEV_WRITE 2
+#define RADIO_HCI_DEV_REG 1
+#define RADIO_HCI_DEV_WRITE 2
-#define hci_req_lock(d) mutex_lock(&d->req_lock)
-#define hci_req_unlock(d) mutex_unlock(&d->req_lock)
+#define hci_req_lock(d) mutex_lock(&d->req_lock)
+#define hci_req_unlock(d) mutex_unlock(&d->req_lock)
/* FM RDS */
#define RDS_PTYPE 2
@@ -824,7 +849,7 @@
#define SRCH_MODE 0x07
#define SRCH_DIR 0x08 /* 0-up 1-down */
#define SCAN_DWELL 0x70
-#define SRCH_ON 0x80
+#define SRCH_ON 0x80
/* I/O Control */
#define IOC_HRD_MUTE 0x03
@@ -835,12 +860,12 @@
#define IOC_ANTENNA 0x01
/* RDS Control */
-#define RDS_ON 0x01
+#define RDS_ON 0x01
#define RDS_BUF_SZ 100
/* constants */
-#define RDS_BLOCKS_NUM (4)
-#define BYTES_PER_BLOCK (3)
+#define RDS_BLOCKS_NUM (4)
+#define BYTES_PER_BLOCK (3)
#define MAX_PS_LENGTH (108)
#define MAX_RT_LENGTH (64)
#define RDS_GRP_CNTR_LEN (36)
@@ -861,7 +886,7 @@
#define GET_LSB(x)((x) & 0xFF)
/* control options */
-#define CTRL_ON (1)
+#define CTRL_ON (1)
#define CTRL_OFF (0)
/*Diagnostic commands*/
@@ -885,7 +910,7 @@
#define MAX_CALIB_SIZE 75
/* Channel validity */
-#define INVALID_CHANNEL (0)
+#define INVALID_CHANNEL (0)
#define VALID_CHANNEL (1)
struct hci_fm_set_cal_req_proc {
@@ -1170,7 +1195,44 @@
struct hci_fm_ssbi_req ssbi_data_accs;
struct hci_fm_ssbi_peek ssbi_peek_reg;
struct hci_fm_ch_det_threshold ch_det_threshold;
+ struct hci_fm_data_rd_rsp def_data;
+ struct hci_fm_blend_table blend_tbl;
};
+
+#define set_bit(flag, bit_pos) ((flag) |= (1 << (bit_pos)))
+#define clear_bit(flag, bit_pos) ((flag) &= (~(1 << (bit_pos))))
+#define test_bit(flag, bit_pos) ((flag) & (1 << (bit_pos)))
+#define clear_all_bit(flag) ((flag) &= (~0xFFFFFFFF))
+#define CMD_CHDET_SINR_TH (1)
+#define CMD_CHDET_SINR_SAMPLE (2)
+#define CMD_CHDET_INTF_TH_LOW (3)
+#define CMD_CHDET_INTF_TH_HIGH (4)
+
+#define CMD_DEFRD_AF_RMSSI_TH (1)
+#define CMD_DEFRD_AF_RMSSI_SAMPLE (2)
+#define CMD_DEFRD_GD_CH_RMSSI_TH (3)
+#define CMD_DEFRD_SEARCH_ALGO (4)
+#define CMD_DEFRD_SINR_FIRST_STAGE (5)
+#define CMD_DEFRD_RMSSI_FIRST_STAGE (6)
+#define CMD_DEFRD_CF0TH12 (7)
+#define CMD_DEFRD_TUNE_POWER (8)
+#define CMD_DEFRD_REPEATCOUNT (9)
+
+#define CMD_STNPARAM_RSSI (1)
+#define CMD_STNPARAM_SINR (2)
+#define CMD_STNPARAM_INTF_DET_TH (3)
+
+#define CMD_STNDBGPARAM_BLEND (1)
+#define CMD_STNDBGPARAM_SOFTMUTE (2)
+#define CMD_STNDBGPARAM_INFBLEND (3)
+#define CMD_STNDBGPARAM_INFSOFTMUTE (4)
+#define CMD_STNDBGPARAM_PILOTPLL (5)
+#define CMD_STNDBGPARAM_IOVERC (6)
+#define CMD_STNDBGPARAM_INFDETOUT (7)
+
+#define CMD_BLENDTBL_SINR_HI (1)
+#define CMD_BLENDTBL_RMSSI_HI (2)
+
int hci_fm_disable_recv_req();
int helium_search_list(struct hci_fm_search_station_list_req *s_list);
int helium_search_rds_stations(struct hci_fm_search_rds_station_req *rds_srch);
@@ -1194,6 +1256,11 @@
int hci_ssbi_peek_reg(struct hci_fm_ssbi_peek *data);
int hci_fm_get_ch_det_th();
int set_ch_det_thresholds_req(struct hci_fm_ch_det_threshold *ch_det_th);
-
+int hci_fm_default_data_read_req(struct hci_fm_def_data_rd_req *def_data_rd);
+int hci_fm_get_blend_req();
+int hci_fm_set_blend_tbl_req(struct hci_fm_blend_table *blnd_tbl);
+int hci_fm_default_data_write_req(struct hci_fm_def_data_wr_req * data_wrt);
+int hci_fm_get_station_dbg_param_req();
+int hci_fm_get_station_cmd_param_req();
#endif /* __UAPI_RADIO_HCI_CORE_H */