FM: Remove Ioctl base code
FR61722 make fm system code generic for all the chipset types.
CRs-Fixed: 2653082
Change-Id: I1c557ea178295a96d7f77cceb58a5d288bbd75d8
diff --git a/helium/radio-helium.h b/helium/radio-helium.h
index eb6ea9b..d3dae68 100644
--- a/helium/radio-helium.h
+++ b/helium/radio-helium.h
@@ -134,6 +134,7 @@
#define FM_AFJUMP_CONFG_MODE 0x42
#define FM_SRCH_CNFG_LEN 0x08
#define FM_AFJUMP_CNFG_LEN 0x06
+#define STD_BUF_SIZE 256
/* HCI timeouts */
#define RADIO_HCI_TIMEOUT (10000) /* 10 seconds */
@@ -513,6 +514,10 @@
#define HCI_EV_RADIO_TEXT_PLUS_TAG 0x19
#define HCI_EV_HW_ERR_EVENT 0x1A
+/*HCI event opcode for fm driver RDS support*/
+#define HCI_EV_DRIVER_RDS_EVENT 0x1B
+#define HCI_EV_E_RADIO_TEXT 0x1C
+
#define HCI_REQ_DONE 0
#define HCI_REQ_PEND 1
#define HCI_REQ_CANCELED 2
diff --git a/helium/radio_helium_hal.c b/helium/radio_helium_hal.c
index 79e69f5..e258bff 100644
--- a/helium/radio_helium_hal.c
+++ b/helium/radio_helium_hal.c
@@ -862,6 +862,50 @@
}
}
+static void hci_ev_driver_rds_event(uint8_t buff[])
+{
+ uint8_t rds_type;
+ char *rds_data = NULL;
+ rds_type = buff[0];
+
+ ALOGD("%s:%s:rds type = 0x%x", LOG_TAG, __func__, rds_type);
+ rds_data = malloc(STD_BUF_SIZE);
+ if (rds_data == NULL) {
+ ALOGE("%s:memory allocation failed\n", LOG_TAG);
+ return;
+ } else {
+ memcpy(rds_data, &buff[1],STD_BUF_SIZE);
+ }
+
+ switch (rds_type) {
+ case HCI_EV_RADIO_TEXT:
+ hal->jni_cb->rt_update_cb(rds_data);
+ break;
+
+ case HCI_EV_PROGRAM_SERVICE:
+ hal->jni_cb->ps_update_cb(rds_data);
+ break;
+
+ case HCI_EV_FM_AF_LIST:
+ hal->jni_cb->af_list_update_cb((uint16_t *)&rds_data);
+ break;
+
+ case HCI_EV_RADIO_TEXT_PLUS_TAG:
+ hal->jni_cb->rt_plus_update_cb(rds_data);
+ break;
+
+ case HCI_EV_E_RADIO_TEXT:
+ hal->jni_cb->ert_update_cb(rds_data);
+ break;
+
+ default:
+ ALOGD("%s: Unknown RDS event", __func__);
+ break;
+ }
+
+ free(rds_data);
+}
+
static void hci_ev_ert()
{
char *data = NULL;
@@ -1075,6 +1119,9 @@
case HCI_EV_EXT_COUNTRY_CODE:
hci_ev_ext_country_code(((struct fm_event_header_t *)evt_buf)->params);
break;
+ case HCI_EV_DRIVER_RDS_EVENT:
+ hci_ev_driver_rds_event(((struct fm_event_header_t *)evt_buf)->params);
+ break;
case HCI_EV_HW_ERR_EVENT:
hci_ev_hw_error();
break;