aboutsummaryrefslogtreecommitdiff
path: root/MediaTek/fmradiolibs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaTek/fmradiolibs')
-rwxr-xr-xMediaTek/fmradiolibs/Android.mk28
-rwxr-xr-xMediaTek/fmradiolibs/autofm/Android.mk34
-rwxr-xr-xMediaTek/fmradiolibs/autofm/NOTICE1
-rw-r--r--MediaTek/fmradiolibs/autofm/README17
-rw-r--r--MediaTek/fmradiolibs/autofm/autofm.c1955
-rw-r--r--MediaTek/fmradiolibs/autofm/autofm.h77
-rw-r--r--MediaTek/fmradiolibs/autofm/fm_cust_cfg.h119
-rw-r--r--MediaTek/fmradiolibs/autofm/fm_ioctl.h110
-rw-r--r--MediaTek/fmradiolibs/autofm/fm_main.h244
-rw-r--r--MediaTek/fmradiolibs/autofm/fm_rds.h242
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/Android.mk643
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/NOTICE1
-rw-r--r--MediaTek/fmradiolibs/fmnative/README21
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6620/mt6620_fm_cust.cfg14
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6626/fm_cust.cfg28
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_cust.cfg10
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_coeff.binbin1092 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_patch.binbin1028 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_coeff.bin1
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_patch.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_coeff.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_patch.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_coeff.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_patch.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_coeff.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_patch.bin0
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/fm_cust.cfg10
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_rom.binbin18438 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_coeff.binbin1092 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_patch.binbin1028 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_coeff.binbin1092 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_patch.binbin1028 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_coeff.binbin1092 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_patch.binbin1028 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_coeff.binbin1092 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_patch.binbin1028 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_coeff.binbin1092 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_patch.binbin1028 -> 0 bytes
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_cust.cfg8
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff.binbin1092 -> 0 bytes
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff_tx.binbin1092 -> 0 bytes
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch.binbin1028 -> 0 bytes
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch_tx.binbin1028 -> 0 bytes
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff.binbin1092 -> 0 bytes
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff_tx.binbin1092 -> 0 bytes
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch.binbin1028 -> 0 bytes
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch_tx.binbin1028 -> 0 bytes
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff_tx.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch_tx.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff_tx.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch_tx.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff_tx.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch.bin0
-rw-r--r--MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch_tx.bin0
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/custom/Android.mk40
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/custom/Android.mk~40
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/custom/NOTICE1
-rw-r--r--MediaTek/fmradiolibs/fmnative/custom/README20
-rw-r--r--MediaTek/fmradiolibs/fmnative/custom/custom.cpp237
-rw-r--r--MediaTek/fmradiolibs/fmnative/custom/custom.cpp~237
-rw-r--r--MediaTek/fmradiolibs/fmnative/custom/fm.h656
-rw-r--r--MediaTek/fmradiolibs/fmnative/custom/fmlib_cust.h84
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/fmr/Android.mk231
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/fmr/Android.mk~231
-rwxr-xr-xMediaTek/fmradiolibs/fmnative/fmr/NOTICE1
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/README25
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/ar1000.cpp89
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/bt_ctrl.cpp445
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/common.cpp1389
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/fm.h656
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/fmr.h341
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/fmr.h~341
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/fmr_core.cpp2176
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/fmr_err.cpp60
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/libfm_jni.cpp1245
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/mt519x.cpp342
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/mt6616.cpp113
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/mt6620.cpp142
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/mt6626.cpp117
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/mt6627.cpp131
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/mt6628.cpp130
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/mt6630.cpp120
-rw-r--r--MediaTek/fmradiolibs/fmnative/fmr/target.cpp194
88 files changed, 0 insertions, 13397 deletions
diff --git a/MediaTek/fmradiolibs/Android.mk b/MediaTek/fmradiolibs/Android.mk
deleted file mode 100755
index f23f49b..0000000
--- a/MediaTek/fmradiolibs/Android.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# Copyright (C) 2011 The Android Open-Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# WARNING: Everything listed here will be built on ALL platforms,
-# including x86, the emulator, and the SDK. Modules must be uniquely
-# named (liblights.panda), and must build everywhere, or limit themselves
-# to only building on ARM if they include assembly. Individual makefiles
-# are responsible for having their own logic, for fine-grained control.
-
-LOCAL_PATH := $(call my-dir)
-
-# if some modules are built directly from this directory (not subdirectories),
-# their rules should be written here.
-
-include $(call all-subdir-makefiles)
diff --git a/MediaTek/fmradiolibs/autofm/Android.mk b/MediaTek/fmradiolibs/autofm/Android.mk
deleted file mode 100755
index 4e9186d..0000000
--- a/MediaTek/fmradiolibs/autofm/Android.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-ifeq ($(MTK_FM_SUPPORT), yes)
-
-BUILD_FMTEST := true
-FM_TOOL_BUILD_DEAMON := false
-
-LOCAL_PATH := $(call my-dir)
-
-ifeq ($(BUILD_FMTEST), true)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- autofm.c
-
-LOCAL_STATIC_LIBRARIES :=
-
-#LOCAL_SHARED_LIBRARIES := libfm
-
-LOCAL_C_INCLUDES :=
-
-LOCAL_PRELINK_MODULE := yes
-
-LOCAL_MODULE_TAGS := eng
-
-ifeq ($(FM_TOOL_BUILD_DEAMON), true)
-LOCAL_CFLAGS := \
- -DFM_TOOL_BUILD_DEAMON
-LOCAL_MODULE := autofmd
-else
-LOCAL_MODULE := autofm
-endif
-
-include $(BUILD_EXECUTABLE)
-endif
-endif
diff --git a/MediaTek/fmradiolibs/autofm/NOTICE b/MediaTek/fmradiolibs/autofm/NOTICE
deleted file mode 100755
index 0519ecb..0000000
--- a/MediaTek/fmradiolibs/autofm/NOTICE
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/MediaTek/fmradiolibs/autofm/README b/MediaTek/fmradiolibs/autofm/README
deleted file mode 100644
index ec6fc8d..0000000
--- a/MediaTek/fmradiolibs/autofm/README
+++ /dev/null
@@ -1,17 +0,0 @@
-Debug tool autofm, including FM power on/off,
-seek, scan, tune ...and some other basic functions.
-
-WHAT IT DOES?
-=============
-Provide basic functions for debugging FM
-
-HOW IT WAS BUILT?
-==================
-'autofm' is a excutable bin file
-
-HOW TO USE IT?
-==============
-Run 'autofm' in adb shell
-
-All the source code of this library were written by MediaTek co..
-
diff --git a/MediaTek/fmradiolibs/autofm/autofm.c b/MediaTek/fmradiolibs/autofm/autofm.c
deleted file mode 100644
index a8c3198..0000000
--- a/MediaTek/fmradiolibs/autofm/autofm.c
+++ /dev/null
@@ -1,1955 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-/*
- *
- * (C) Copyright 2011
- * MediaTek <www.MediaTek.com>
- * Hongcheng Xia <Hongcheng.Xia@MediaTek.com>
- *
- */
-
-//for fm auto test and debug
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/select.h>
-#include <unistd.h>
-#include <sys/resource.h>
-
-#include "fm_main.h"
-#include "fm_rds.h"
-#include "fm_ioctl.h"
-#include "fm_cust_cfg.h"
-#include "autofm.h"
-
-static int autofm_run = 1;
-
-static int fm_open_dev(struct fm_cmd *cmd);
-static int fm_close_dev(struct fm_cmd *cmd);
-static int fm_power_up(struct fm_cmd *cmd);
-static int fm_power_up_tx(struct fm_cmd *cmd);
-static int fm_power_down(struct fm_cmd *cmd);
-static int fm_tune(struct fm_cmd *cmd);
-static int fm_tune_tx(struct fm_cmd *cmd);
-static int fm_seek(struct fm_cmd *cmd);
-static int fm_scan(struct fm_cmd *cmd);
-static int fm_jammer_scan(struct fm_cmd *cmd);
-static int fm_getcqi(struct fm_cmd *cmd);
-static int fm_getrssi(struct fm_cmd *cmd);
-static int fm_mute(struct fm_cmd *cmd);
-static int fm_unmute(struct fm_cmd *cmd);
-static int fm_scan_force_stop(struct fm_cmd *cmd);
-static int fm_setvol(struct fm_cmd *cmd);
-static int fm_getvol(struct fm_cmd *cmd);
-static int fm_over_bt(struct fm_cmd *cmd);
-static int fm_32kppm_compensation(struct fm_cmd *cmd);
-static int fm_i2s_set(struct fm_cmd *cmd);
-static int fm_rds_on_off(struct fm_cmd *cmd);
-static int fm_rds_tx(struct fm_cmd *cmd);
-static int fm_read_reg(struct fm_cmd *cmd);
-static int fm_write_reg(struct fm_cmd *cmd);
-static int fm_top_read_reg(struct fm_cmd *cmd);
-static int fm_top_write_reg(struct fm_cmd *cmd);
-static int fm_host_read_reg(struct fm_cmd *cmd);
-static int fm_host_write_reg(struct fm_cmd *cmd);
-static int fm_mod_reg(struct fm_cmd *cmd);
-static int fm_print_reg(struct fm_cmd *cmd);
-static int fm_help(struct fm_cmd *cmd);
-static int fm_bye(struct fm_cmd *cmd);
-static int fm_delay(struct fm_cmd *cmd);
-static int fm_stdsrc_set(struct fm_cmd *cmd);
-
-static struct fm_cmd g_cmd[] = {
- {"open", 0, fm_open_dev, {NULL, NULL, NULL}, "eg: open, desc: open dev/fm"},
- {"close", 0, fm_close_dev, {NULL, NULL, NULL}, "eg: close, desc: close dev/fm"},
- {"pwron", 0, fm_power_up, {NULL, NULL, NULL}, "eg: pwron, desc: power on fm rx subsystem"},
- {"txpwron", 0, fm_power_up_tx, {NULL, NULL, NULL}, "eg: txpwron, desc: power on fm tx subsystem"},
- {"pwroff", 0, fm_power_down, {NULL, NULL, NULL}, "eg: pwroff, desc: power off fm subsystem"},
- {"tune", 1, fm_tune, {NULL, NULL, NULL}, "eg: tune 876, desc: tune to a channel"},
- {"txtune", 1, fm_tune_tx, {NULL, NULL, NULL}, "eg: txtune 876, desc: tune tx to a channel"},
- {"seek", 1, fm_seek, {NULL, NULL, NULL}, "eg: seek up, desc: seek to another channel"},
- {"scan", 0, fm_scan, {NULL, NULL, NULL}, "eg: scan, desc: auto scan"},
- {"jamscan", 0, fm_jammer_scan, {NULL, NULL, NULL}, "eg: jamscan, desc: auto jammer scan"},
- {"cqi", 1, fm_getcqi, {NULL, NULL, NULL}, "eg: cqi, desc: get channel CQI"},
- {"rssi", 0, fm_getrssi, {NULL, NULL, NULL}, "eg: rssi, desc: get current channel RSSI"},
- {"mute", 0, fm_mute, {NULL, NULL, NULL}, "eg: mute, desc: mute audio"},
- {"unmute", 0, fm_unmute, {NULL, NULL, NULL}, "eg: unmute, desc: unmute audio"},
- {"sstop", 0, fm_scan_force_stop, {NULL, NULL, NULL}, "eg: sstop, desc: stop scan flow"},
- {"setvol", 1, fm_setvol, {NULL, NULL, NULL}, "eg: setvol 14, desc: set audio volume(rang:0~14)"},
- {"getvol", 0, fm_getvol, {NULL, NULL, NULL}, "eg: getvol, desc: get audio volume"},
- {"viabt", 1, fm_over_bt, {NULL, NULL, NULL}, "eg: viabt on, desc: set fm over bt on/off"},
- {"gpsrtc", 2, fm_32kppm_compensation, {NULL, NULL, NULL}, "eg: gpsrtc 10 20, desc: gps rtc setting"},
- {"seti2s", 3, fm_i2s_set, {NULL, NULL, NULL}, "eg: seti2s on slave 32k , desc: i2s setting"},
- {"rds", 1, fm_rds_on_off, {NULL, NULL, NULL}, "eg: rds on, desc: rds rx on/off"},
- {"txrds", 3, fm_rds_tx, {NULL, NULL, NULL}, "eg: txrds 0x1234 0 0 , desc: rds tx"},
- {"delay", 2, fm_delay, {NULL, NULL, NULL}, "eg: delay 100 ms, desc: delay n s/ms/us"},
- {"rd", 1, fm_read_reg, {NULL, NULL, NULL}, "eg: rd 0x62, desc: read a register"},
- //{"read", 1, fm_read_reg, {NULL, NULL, NULL}, "eg: read 0x62, desc: read a register"},
- {"wr", 2, fm_write_reg, {NULL, NULL, NULL}, "eg: wr 0x62 0xFF15, desc: write a register"},
- //{"write", 2, fm_write_reg, {NULL, NULL, NULL}, "eg: write 0x62 0xFF15, desc: write a register"},
- {"toprd", 1, fm_top_read_reg, {NULL, NULL, NULL}, "eg: toprd 0x0050, desc: read a top register"},
- {"topwr", 2, fm_top_write_reg, {NULL, NULL, NULL}, "eg: topwr 0x0050 0x00000007, desc: write top register"},
- {"hostrd", 1, fm_host_read_reg, {NULL, NULL, NULL}, "eg: hostrd 0x80103000, desc: read mcu host register"},
- {"hostwr", 2, fm_host_write_reg, {NULL, NULL, NULL}, "eg: hostwr 0x80103000 0x00000001, desc: write host register"},
- {"mod", 3, fm_mod_reg, {NULL, NULL, NULL}, "eg: mod 0x62 0xFFFE 0x0001, desc: modify a register"},
- {"modify", 3, fm_mod_reg, {NULL, NULL, NULL}, "eg: modify 0x62 0xFFFE 0x0001, desc: modify a register"},
- {"showreg", 1, fm_print_reg, {NULL, NULL, NULL}, "eg: showreg, desc: print all register"},
- {"setsrc", 2, fm_stdsrc_set, {NULL, NULL, NULL}, "eg: setsrc in /system/bin/abc.txt, desc: set stdinput"},
- {"help", 0, fm_help, {NULL, NULL, NULL}, "eg: help, desc: show help info"},
- {"bye", 0, fm_bye, {NULL, NULL, NULL}, "eg: bye, desc: exit autofm"}
-};
-
-static int g_fm_fd = -1;
-static uint16_t g_freq = 967;
-static int type = -1;
-
-static int to_upper(char *str)
-{
- int i = 0;
-
- for(i=0; i < (int)strlen(str); i++){
- if(('a' <= str[i]) && (str[i] <= 'z')){
- str[i] = str[i] - ('a' - 'A');
- }
- }
- return 0;
-}
-
-static int to_upper_n(char *str, int len)
-{
- int i = 0;
-
- for(i=0; i < len; i++){
- if(('a' <= str[i]) && (str[i] <= 'z')){
- str[i] = str[i] - ('a' - 'A');
- }
- }
- return 0;
-}
-
-#if 0
-static int check_hex_str(char *str, int len)
-{
- int i = 0;
-
- for(i=0; i < len; i++){
- if((('a' <= str[i]) && (str[i] <= 'z')) || (('A' <= str[i]) && (str[i] <= 'Z')) || (('0' <= str[i]) && (str[i] <= '9'))){
- ;
- }else{
- return -1;
- }
- }
- return 0;
-}
-#else
-static int check_hex_str(char *str, int len)
-{
- int i = 0;
-
- for(i=0; i < len; i++){
- if((('!' <= str[i]) && (str[i] <= '~'))){
- ;
- }else{
- return -1;
- }
- }
- return 0;
-}
-#endif
-
-static int check_dec_str(char *str, int len)
-{
- int i = 0;
-
- for(i=0; i < len; i++){
- if(('0' <= str[i]) && (str[i] <= '9')){
- ;
- }else{
- return -1;
- }
- }
- return 0;
-}
-
-static int ascii_to_hex_u32(char *in_ascii, uint32_t *out_hex)
-{
- int len = (int)strlen(in_ascii);
- int i = 0;
- uint32_t tmp;
-
- len = (len > 8)? 8 : len;
- if (check_hex_str(in_ascii, len))
- {
- return -1;
- }
- to_upper_n(in_ascii, len);
- *out_hex = 0;
- for (i=0; i < len; i++)
- {
- if (in_ascii[len-i-1] < 'A')
- {
- tmp = in_ascii[len-i-1];
- *out_hex |= ((tmp - '0') << (4*i));
- }
- else
- {
- tmp = in_ascii[len-i-1];
- *out_hex |= ((tmp - 'A' + 10) << (4*i));
- }
- }
- return 0;
-}
-
-static int ascii_to_hex(char *in_ascii, uint16_t *out_hex)
-{
- int len = (int)strlen(in_ascii);
- int i = 0;
- uint16_t tmp;
-
- len = (len > 4)? 4 : len;
- if(check_hex_str(in_ascii, len)){
- return -1;
- }
- to_upper_n(in_ascii, len);
- *out_hex = 0;
- for(i=0; i < len; i++){
- if(in_ascii[len-i-1] < 'A'){
- tmp = in_ascii[len-i-1];
- *out_hex |= ((tmp - '0') << (4*i));
- }else{
- tmp = in_ascii[len-i-1];
- *out_hex |= ((tmp - 'A' + 10) << (4*i));
- }
- }
- return 0;
-}
-
-static int ascii_to_dec_u32(char *in_ascii, uint32_t *out_dec)
-{
- int len = (int)strlen(in_ascii);
- int i = 0;
- int flag;
- int multi = 1;
-
- len = (len > 10)? 10 : len;
- /*if (in_ascii[0] == '-')
- {
- flag = -1;
- in_ascii += 1;
- len -= 1;
- }
- else*/
- {
- flag = 1;
- }
- if (check_dec_str(in_ascii, len))
- {
- return -1;
- }
- *out_dec = 0;
- multi = 1;
- for (i=0; i < len; i++)
- {
- *out_dec += ((in_ascii[len-i-1] - '0') * multi);
- multi *= 10;
- }
- //*out_dec *= flag;
- return 0;
-}
-
-static int ascii_to_dec(char *in_ascii, int *out_dec)
-{
- int len = (int)strlen(in_ascii);
- int i = 0;
- int flag;
- int multi = 1;
-
- len = (len > 10)? 10 : len;
- if(in_ascii[0] == '-'){
- flag = -1;
- in_ascii += 1;
- len -= 1;
- }else{
- flag = 1;
- }
- if(check_dec_str(in_ascii, len)){
- return -1;
- }
- *out_dec = 0;
- multi = 1;
- for(i=0; i < len; i++){
- *out_dec += ((in_ascii[len-i-1] - '0') * multi);
- multi *= 10;
- }
- *out_dec *= flag;
- return 0;
-}
-
-static int trim_string(char **start)
-{
- char *end = *start;
-
- /* Advance to non-space character */
- while(*(*start) == ' '){
- (*start)++;
- }
-
- /* Move to end of string */
- while(*end != '\0'){
- (end)++;
- }
-
- /* Backup to non-space character */
- do{
- end--;
- }while((end >= *start) && (*end == ' '));
-
- /* Terminate string after last non-space character */
- *(++end) = '\0';
- return (end - *start);
-}
-
-static int trim_path(char **start)
-{
- char *end = *start;
-
- while(*(*start) == ' '){
- (*start)++;
- }
-
- while(*end != '\0'){
- (end)++;
- }
-
- do{
- end--;
- }while((end >= *start) && ((*end == ' ') || (*end == '\n') || (*end == '\r')));
-
- *(++end) = '\0';
- return (end - *start);
-}
-
-static int cmd_parser(char *src, char **new_pos, char **word)
-{
- char *p = src;
- char *word_start = NULL;
-
- enum fm_cmd_parser_state state = FM_CMD_STAT_NONE;
-
- for(p = src; *p != '\0'; p++){
- switch(state){
- case FM_CMD_STAT_NONE:{
- if(!check_hex_str(p, 1)){
- //if we get show char in none state, it means a new word start
- state = FM_CMD_STAT_WORD;
- word_start = p;
- }
- break;
- }
-
- case FM_CMD_STAT_WORD:{
- if(check_hex_str(p, 1)){
- //if we get non show char in word state, it means a word complete
- *p = '\0';
- //FIX_ME
- //record word
- state = FM_CMD_STAT_NONE;
- trim_string(&word_start);
- *word = word_start;
- *new_pos = p + 1;
- //printf("%s\n", word_start);
- return 0;
- }
- break;
- }
- default:
- break;
- }
- }
- return -1;
-}
-
-static int get_cmd(char *buf, int buf_size)
-{
-#if 0
- char tmp = 0;
-
- do{
- tmp = getchar();
- *buf = tmp;
- buf++;
- buf_size--;
- }while((tmp != '\r') && (tmp != '\n') && (buf_size > 0));
-#else
- int ret;
- struct timeval tval;
- tval.tv_sec = 0;
- tval.tv_usec = 100*1000;
-
- ret = read(0, buf, buf_size);
- //sleep(1); //sleep 1s
- select(0, NULL, NULL, NULL, &tval);
-
-#endif
- return 0;
-}
-
-//fm funtion APIs
-static int fm_open_dev(struct fm_cmd *cmd)
-{
- int fd = open(FM_DEVICE_NAME, O_RDWR);
- if(fd == -1){
- printf("FAIL open %s failed\n", FM_DEVICE_NAME);
- return -1;
- }
- printf("OK\n");
- g_fm_fd = fd;
-
- return 0;
-}
-
-static int fm_close_dev(struct fm_cmd *cmd)
-{
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- if(0 != close(g_fm_fd)){
- return -1;
- }
-
- printf("OK\n");
- g_fm_fd = -1;
- return 0;
-}
-
-static int fm_power_up(struct fm_cmd *cmd)
-{
- int ret;
- struct fm_tune_parm parm;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_tune_parm));
-
- parm.band = FM_BAND_UE;
- parm.freq = 975;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.space = FM_SPACE_100K;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_POWERUP, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK\n");
-
- type = FM_RX;
- return 0;
-}
-
-static int fm_power_up_tx(struct fm_cmd *cmd)
-{
- int ret;
- struct fm_tune_parm parm;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_tune_parm));
-
- parm.band = FM_BAND_UE;
- parm.freq = 975;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.space = FM_SPACE_100K;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_POWERUP_TX, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK\n");
-
- type = FM_TX;
- return 0;
-}
-
-static int fm_power_down(struct fm_cmd *cmd)
-{
- int ret;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- ret = ioctl(g_fm_fd, FM_IOCTL_POWERDOWN, &type);
- if(ret){
- printf("FAIL:%d\n", ret);
- return -1;
- }
- printf("OK\n");
- return 0;
-}
-
-static int fm_rds_on_off(struct fm_cmd *cmd)
-{
- int ret;
- uint16_t on_off;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- if(strcmp(cmd->para[0], "on") == 0){
- on_off = 1;
- }else if(strcmp(cmd->para[0], "off") == 0){
- on_off = 0;
- }else{
- return -1;
- }
-
- ret = ioctl(g_fm_fd, FM_IOCTL_RDS_ONOFF, &on_off);
- if(ret){
- printf("FAIL:%d\n", ret);
- return -1;
- }
-
- printf("OK\n");
- return 0;
-}
-
-static int get_int_val(char *src_val, int *dst_val)
-{
- int ret = 0;
- uint32_t tmp_hex;
- int tmp_dec;
-
- //printf("%s\n", src_val);
- if(memcmp(src_val, "0x", strlen("0x")) == 0){
- src_val += strlen("0x");
- ret = ascii_to_hex_u32(src_val, &tmp_hex);
- if(!ret){
- *dst_val = (int)tmp_hex;
- return 0;
- }else{
- printf("error\n");
- return -1;
- }
- }else{
- ret = ascii_to_dec(src_val, &tmp_dec);
- if(!ret && ((0 <= tmp_dec) && (tmp_dec <= 0xFFFFFFFF))){
- *dst_val = tmp_dec;
- return 0;
- }else{
- printf("error\n");
- return -1;
- }
- }
-}
-
-static int get_u32_val(char *src_val, uint32_t *dst_val)
-{
- int ret = 0;
- uint32_t tmp_hex;
- uint32_t tmp_dec;
-
- //printf("%s\n", src_val);
- if (memcmp(src_val, "0x", strlen("0x")) == 0)
- {
- src_val += strlen("0x");
- ret = ascii_to_hex_u32(src_val, &tmp_hex);
- if (!ret)
- {
- *dst_val = tmp_hex;
- return 0;
- }
- else
- {
- printf("error\n");
- return -1;
- }
- }
- else
- {
- ret = ascii_to_dec_u32(src_val, &tmp_dec);
- if (!ret && (tmp_dec <= 0xFFFFFFFF))
- {
- *dst_val = tmp_dec;
- return 0;
- }
- else
- {
- printf("error\n");
- return -1;
- }
- }
-}
-
-static int fm_tune(struct fm_cmd *cmd)
-{
- int ret;
- int freq;
- struct fm_tune_parm parm;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_tune_parm));
-
- ret = get_int_val(cmd->para[0], &freq);
- if(ret){
- return -1;
- }
- parm.band = FM_BAND_UE;
- parm.freq = freq;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.space = FM_SPACE_100K;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_TUNE, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK:%d\n", parm.freq);
- g_freq = parm.freq;
-
- return 0;
-}
-
-static int fm_stdsrc_set(struct fm_cmd *cmd)
-{
- #define FM_STD_SHELL 0
- #define FM_STD_FILE 1
- int ret;
- int tmp;
- static int fm_stdin = 0;
- static int fm_stdout = 1;
- static int fm_stderr = 2;
- static int input = FM_STD_SHELL;
- static int output = FM_STD_SHELL;
- static int errput = FM_STD_SHELL;
-
- char *path = cmd->para[1];
-
- if(fm_stdin == 0){
- fm_stdin = dup(0);
- fm_stdout = dup(1);
- fm_stderr = dup(2);
- printf("backup, stdin:%d stdot:%d stderr:%d\n", fm_stdin, fm_stdout, fm_stderr);
- }
-
- if(strcmp(cmd->para[0], "in") == 0)
- {
- if(strcmp(cmd->para[1], "shell") == 0)
- {
- if(input == FM_STD_FILE)
- {
- dup2(fm_stdin, 0);
- input = FM_STD_SHELL;
- }
- else
- {
- ;//fm already use shell as stdin
- }
- }
- else if(path != NULL)
- {
- tmp = open(path, O_RDONLY);
- if(tmp < 0){
- printf("FAIL: open %s err\n", path);
- return -1;
- }
- ret = dup2(tmp, 0);
- if(ret < 0){
- printf("FAIL: dup %s err\n", path);
- return -1;
- }
- close(tmp);
- input = FM_STD_FILE;
- }
- else
- {
- printf("FAIL: path err\n");
- return -1;
- }
- }
- else if(strcmp(cmd->para[0], "out") == 0)
- {
- if(strcmp(cmd->para[1], "shell") == 0)
- {
- if(output == FM_STD_FILE){
- dup2(fm_stdin, 1);
- output = FM_STD_SHELL;
- }else{
- ;//fm already use shell as stdin
- }
- }
- else if(path != NULL)
- {
- tmp = open(path, O_RDWR | O_CREAT,S_IRUSR | S_IWUSR);
- if(tmp < 0){
- printf("FAIL: open %s err\n", path);
- return -1;
- }
- ret = dup2(tmp, 1);
- if(ret < 0){
- printf("FAIL: dup %s err\n", path);
- return -1;
- }
- close(tmp);
- output = FM_STD_FILE;
- }
- else
- {
- printf("FAIL: path err\n");
- return -1;
- }
- }
- else if(strcmp(cmd->para[0], "err") == 0)
- {
- if(strcmp(cmd->para[1], "shell") == 0)
- {
- if(errput == FM_STD_FILE){
- dup2(fm_stdin, 2);
- errput = FM_STD_SHELL;
- }else{
- ;//fm already use shell as stdin
- }
- }
- else if(path != NULL)
- {
- tmp = open(path, O_RDWR | O_CREAT,S_IRUSR | S_IWUSR);
- if(tmp < 0){
- printf("FAIL: open %s err\n", path);
- return -1;
- }
- ret = dup2(tmp, 2);
- if(ret < 0){
- printf("FAIL: dup %s err\n", path);
- return -1;
- }
- close(tmp);
- errput = FM_STD_FILE;
- }
- else
- {
- printf("FAIL: path err\n");
- return -1;
- }
- }
- else
- {
- return -1;
- }
-
- printf("OK:%s\n", cmd->para[0]);
-
- return 0;
-}
-
-static int fm_tune_tx(struct fm_cmd *cmd)
-{
- int ret;
- int freq;
- struct fm_tune_parm parm;
-
- if (g_fm_fd < 0)
- {
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_tune_parm));
-
- ret = get_int_val(cmd->para[0], &freq);
- if(ret){
- return -1;
- }
- parm.band = FM_BAND_UE;
- parm.freq = freq;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.space = FM_SPACE_100K;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_TUNE_TX, &parm);
- if (ret)
- {
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK:%d\n", parm.freq);
- g_freq = parm.freq;
-
- return 0;
-}
-
-static int fm_rds_tx(struct fm_cmd *cmd)
-{
- int ret;
- struct fm_rds_tx_parm parm;
- int pi;
- uint16_t ps[12] = {0x3132, 0x3334, 0x3536,
- 0x3132, 0x3334, 0x3536,
- 0x3132, 0x3334, 0x3536,
- 0x3132, 0x3334, 0x3536};
- int i;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_rds_tx_parm));
-
- ret = get_int_val(cmd->para[0], &pi);
- if(ret){
- return -1;
- }
- parm.pi = (uint16_t)pi;
- for(i = 0; i < 12; i++){
- parm.ps[i] = ps[i];
- }
- parm.other_rds_cnt = 0;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_RDS_TX, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK\n");
-
- return 0;
-}
-
-static int fm_seek(struct fm_cmd *cmd)
-{
- int ret;
- struct fm_seek_parm parm;
-
- if (g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
- bzero(&parm, sizeof(struct fm_tune_parm));
-
- if(strcmp(cmd->para[0], "up") == 0){
- parm.seekdir = FM_SEEK_UP;
- }else if(strcmp(cmd->para[0], "down") == 0){
- parm.seekdir = FM_SEEK_DOWN;
- }else{
- return -1;
- }
- parm.band = FM_BAND_UE;
- parm.freq = g_freq;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.space = FM_SPACE_100K;
- parm.seekth = FM_SEEKTH_LEVEL_DEFAULT;
- ret = ioctl(g_fm_fd, FM_IOCTL_SEEK, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK:%d\n",parm.freq);
- g_freq = parm.freq;
-
- return 0;
-}
-
-static int fm_scan(struct fm_cmd *cmd)
-{
- int ret;
- int seekdir;
- struct fm_scan_parm parm;
- uint16_t CH_Data[256], tmp_val, ch_offset, MASK_CH;
- int LOFREQ = 875;
- int i = 0, step = 0, ch_cnt = 0;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_scan_parm));
-
- parm.band = FM_BAND_UE;
- parm.space = FM_SPACE_100K;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.freq = g_freq;
- parm.ScanTBLSize = sizeof(parm.ScanTBL)/sizeof(uint16_t);
-
- ret = ioctl(g_fm_fd, FM_IOCTL_SCAN, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK\n");
- g_freq = parm.freq;
-
- //parm.ScanTBLSize will return valid scan table size.
- printf("Scan channel:");
- for(ch_offset = 0; ch_offset < parm.ScanTBLSize; ch_offset++){
- MASK_CH = 0x0001;
- tmp_val = parm.ScanTBL[ch_offset];
- for(step = 0; step < 16; step++){
- MASK_CH = 1 << step;
- if((MASK_CH & tmp_val)!=0){
- *(CH_Data + ch_cnt) = LOFREQ + (ch_offset * 16 + step) * (parm.space); //100KHz
- if(*(CH_Data + ch_cnt) <= 1080){
- printf("%d ", *(CH_Data + ch_cnt));
- ch_cnt++;
- }
- }
- }
- }
- printf("\nScan channel num:%d\n", ch_cnt);
-
- return 0;
-}
-
-static int fm_jammer_scan(struct fm_cmd *cmd)
-{
- int ret;
- int tmp;
- int seekdir;
- struct fm_scan_parm parm;
- uint16_t CH_Data[256], tmp_val, ch_offset, MASK_CH;
- int LOFREQ = 875;
- int i = 0, step = 0, ch_cnt = 0;
- struct fm_cmd cmd_tmp;
- struct fm_cqi_req cqi_req;
- struct fm_cqi *cqi = NULL;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- cmd_tmp.para[0] = "0x61";
- cmd_tmp.para[1] = "0xDFFF";
- cmd_tmp.para[2] = "0x2000";
- ret = fm_mod_reg(&cmd_tmp);
- if(ret){
- return ret;
- }
-
- bzero(&parm, sizeof(struct fm_scan_parm));
-
- parm.band = FM_BAND_UE;
- parm.space = FM_SPACE_100K;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.freq = g_freq;
- parm.ScanTBLSize = sizeof(parm.ScanTBL)/sizeof(uint16_t);
-
- ret = ioctl(g_fm_fd, FM_IOCTL_SCAN, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK\n");
- g_freq = parm.freq;
-
- //parm.ScanTBLSize will return valid scan table size.
- printf("Scan channel:");
- for(ch_offset = 0; ch_offset < parm.ScanTBLSize; ch_offset++){
- MASK_CH = 0x0001;
- tmp_val = parm.ScanTBL[ch_offset];
- for(step = 0; step < 16; step++){
- MASK_CH = 1 << step;
- if((MASK_CH & tmp_val)!=0){
- *(CH_Data + ch_cnt) = LOFREQ + (ch_offset * 16 + step) * (parm.space); //100KHz
- printf("%d ", *(CH_Data + ch_cnt));
- ch_cnt++;
- }
- }
- }
- printf("\nScan channel num:%d\n", ch_cnt);
-
- cqi_req.ch_num = (uint16_t)ch_cnt;
- cqi_req.ch_num = (cqi_req.ch_num > 255) ? 255 : cqi_req.ch_num;
- cqi_req.buf_size = cqi_req.ch_num*sizeof(struct fm_cqi);
- cqi_req.cqi_buf = malloc(cqi_req.buf_size + 1);
- if(!cqi_req.cqi_buf){
- printf("no mem\n");
- return -1;
- }
-
- ret = ioctl(g_fm_fd, FM_IOCTL_CQI_GET, &cqi_req);
- if(ret){
- free(cqi_req.cqi_buf);
- printf("FAIL:%d\n", ret);
- return -1;
- }
- cqi = (struct fm_cqi*)cqi_req.cqi_buf;
- tmp = 0;
- for(tmp = 0; tmp < cqi_req.ch_num; tmp++){
- printf("freq %d, jam_freq 0x%04x, reserve 0x%04x\n", (cqi[tmp].ch/2 + 640), cqi[tmp].rssi, cqi[tmp].reserve);
- }
- free(cqi_req.cqi_buf);
- printf("OK\n");
-
- cmd_tmp.para[0] = "0x61";
- cmd_tmp.para[1] = "0xDFFF";
- cmd_tmp.para[2] = "0x0000";
- ret = fm_mod_reg(&cmd_tmp);
- if(ret){
- return ret;
- }
-
- return 0;
-}
-
-static int fm_getcqi(struct fm_cmd *cmd)
-{
- int ret;
- int tmp;
- struct fm_cqi_req cqi_req;
- struct fm_cqi *cqi = NULL;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- ret = get_int_val(cmd->para[0], &tmp);
- if(ret){
- return -1;
- }
- cqi_req.ch_num = (uint16_t)tmp;
- cqi_req.ch_num = (cqi_req.ch_num > 255) ? 255 : cqi_req.ch_num;
- cqi_req.buf_size = cqi_req.ch_num*sizeof(struct fm_cqi);
- cqi_req.cqi_buf = malloc(cqi_req.buf_size + 1);
- if(!cqi_req.cqi_buf){
- printf("no mem\n");
- return -1;
- }
-
- ret = ioctl(g_fm_fd, FM_IOCTL_CQI_GET, &cqi_req);
- if(ret){
- free(cqi_req.cqi_buf);
- printf("FAIL:%d\n", ret);
- return -1;
- }
- cqi = (struct fm_cqi*)cqi_req.cqi_buf;
- tmp = 0;
- for(tmp = 0; tmp < cqi_req.ch_num; tmp++){
- printf("freq %d, rssi 0x%04x, reserve 0x%04x\n", cqi[tmp].ch/2 + 640, cqi[tmp].rssi, cqi[tmp].reserve);
- }
- free(cqi_req.cqi_buf);
- printf("OK\n");
-
- return 0;
-}
-
-static int fm_scan_force_stop(struct fm_cmd *cmd)
-{
- int stop_scan = 1;
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- if(lseek(g_fm_fd, 0, SEEK_END) != -1){
- printf("OK\n");
- return 0;
- }else{
- printf("FAIL\n");
- return -1;
- }
-
-}
-
-//scan test.
-static int fm_seek_all(struct fm_cmd *cmd)
-{
- int ret;
- int start_freq = 1080;
-
- struct fm_seek_parm parm;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- g_freq = start_freq;
-
- do{
- bzero(&parm, sizeof(struct fm_tune_parm));
- parm.band = FM_BAND_UE;
- parm.freq = g_freq;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.space = FM_SPACE_100K;
- parm.seekdir = FM_SEEK_UP;
- parm.seekth = FM_SEEKTH_LEVEL_DEFAULT;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_SEEK, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK:%d:%d:%d\n", ret, parm.err, parm.freq);
- g_freq = parm.freq;
- }while(parm.err == FM_SUCCESS);
-
- return 0;
-}
-
-static int fm_mute(struct fm_cmd *cmd)
-{
- int ret;
- uint32_t mute = 1;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- ret = ioctl(g_fm_fd, FM_IOCTL_MUTE, &mute);
- if(ret){
- printf("FAIL:%d\n", ret);
- return -1;
- }
-
- printf("OK\n");
- return 0;
-}
-
-static int fm_unmute(struct fm_cmd *cmd)
-{
- int ret;
- uint32_t mute = 0;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- ret = ioctl(g_fm_fd, FM_IOCTL_MUTE, &mute);
- if(ret){
- printf("FAIL:%d\n", ret);
- return -1;
- }
-
- printf("OK\n");
- return 0;
-}
-
-static int fm_setvol(struct fm_cmd *cmd)
-{
- int ret;
- uint32_t vol;
- int tmp;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- ret = get_int_val(cmd->para[0], &tmp);
- if(ret){
- return -1;
- }
- vol = (uint32_t)tmp;
- ret = ioctl(g_fm_fd, FM_IOCTL_SETVOL, &vol);
- if(ret){
- printf("FAIL:%d\n", ret);
- return -1;
- }
-
- printf("OK\n");
- return 0;
-}
-
-static int fm_getvol(struct fm_cmd *cmd)
-{
- int ret;
- uint32_t vol;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- ret = ioctl(g_fm_fd, FM_IOCTL_GETVOL, &vol);
- if(ret){
- printf("FAIL:%d\n", ret);
- return -1;
- }
- printf("OK\n");
- printf("volume:%d\n", (int)vol);
-
- return 0;
-}
-
-static int fm_getrssi(struct fm_cmd *cmd)
-{
- int ret;
- int rssi;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- ret = ioctl(g_fm_fd, FM_IOCTL_GETRSSI, &rssi);
- if(ret){
- printf("FAIL:%d\n", ret);
- return -1;
- }
- printf("OK\n");
- printf("RSSI:%d\n", rssi);
-
- return 0;
-}
-
-static int fm_32kppm_compensation(struct fm_cmd *cmd)
-{
- int ret;
- int tmp = -1;
- struct fm_gps_rtc_info rtcInfo;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&rtcInfo, sizeof(struct fm_gps_rtc_info));
- rtcInfo.ageThd = 2;
- rtcInfo.driftThd = 30;
- rtcInfo.retryCnt = 2;
- rtcInfo.tvThd.tv_sec = 10;
-
- ret = get_int_val(cmd->para[0], &tmp);
- if(ret){
- return -1;
- }
- rtcInfo.age = tmp;
-
- ret = get_int_val(cmd->para[1], &tmp);
- if(ret){
- return -1;
- }
- rtcInfo.drift = tmp;
- ret = ioctl(g_fm_fd, FM_IOCTL_GPS_RTC_DRIFT, &rtcInfo);
- if(ret){
- printf("FAIL:%d\n", ret);
- return -1;
- }
- printf("OK\n");
- return 0;
-}
-
-static int fm_i2s_set(struct fm_cmd *cmd)
-{
- int ret;
- int tmp = -1;
- static struct fm_i2s_setting i2s_cfg;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&i2s_cfg, sizeof(struct fm_i2s_setting));
- i2s_cfg.onoff = FM_I2S_ON;
- i2s_cfg.mode = FM_I2S_SLAVE;
- i2s_cfg.sample = FM_I2S_48K;
-
- if(strcmp(cmd->para[0], "on") == 0){
- i2s_cfg.onoff = FM_I2S_ON;
- }else if(strcmp(cmd->para[0], "off") == 0){
- i2s_cfg.onoff = FM_I2S_OFF;
- }else{
- return -1;
- }
-
- if(strcmp(cmd->para[1], "master") == 0){
- i2s_cfg.mode = FM_I2S_MASTER;
- }else if(strcmp(cmd->para[1], "slave") == 0){
- i2s_cfg.mode = FM_I2S_SLAVE;
- }else{
- return -1;
- }
-
- if(strcmp(cmd->para[2], "32k") == 0){
- i2s_cfg.sample = FM_I2S_32K;
- }else if(strcmp(cmd->para[2], "44k") == 0){
- i2s_cfg.mode = FM_I2S_44K;
- }else if(strcmp(cmd->para[2], "48k") == 0){
- i2s_cfg.mode = FM_I2S_48K;
- }else{
- return -1;
- }
-
- ret = ioctl(g_fm_fd, FM_IOCTL_I2S_SETTING, &i2s_cfg);
- if(ret){
- printf("FAIL:%d\n", ret);
- return -1;
- }
- printf("OK\n");
- return 0;
-}
-
-static int fm_over_bt(struct fm_cmd *cmd)
-{
- int ret;
- uint32_t viabt = -1;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- if(strcmp(cmd->para[0], "on") == 0){
- viabt = 1;
- }else if(strcmp(cmd->para[0], "off") == 0){
- viabt = 0;
- }else{
- return -1;
- }
- ret = ioctl(g_fm_fd, FM_IOCTL_OVER_BT_ENABLE, &viabt);
- if(ret){
- printf("FAIL:%d\n", ret);
- return -1;
- }
- printf("OK\n");
- return 0;
-}
-
-static int fm_read_reg(struct fm_cmd *cmd)
-{
- int ret;
- int tmp;
- struct fm_ctl_parm parm;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_ctl_parm));
-
- ret = get_int_val(cmd->para[0], &tmp);
- if(ret){
- return -1;
- }
- parm.addr = (uint8_t)tmp;
- parm.rw_flag = 1;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK: 0x%02x = 0x%04x\n", parm.addr, parm.val);
-
- return 0;
-}
-
-static int print_page(uint16_t page, int mode)
-{
- int ret;
- uint8_t addr = 0x00;
- int i = 0;
- int log_fd = -1;
- int std_out = -1;
- struct fm_ctl_parm parm;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
- if(mode == 0){
- ;//
- }else if(mode == 1){
- std_out = dup(1);
- if(std_out < 0){
- ;//dup std out error
- }
- close(1);
- log_fd = open("/data/data/fmlog", O_RDWR | O_CREAT | O_APPEND,S_IRUSR | S_IWUSR);
- if(log_fd < 0){
- ;//error
- }
- }
-
- //setup page
- printf("page %d.\n", (int)page);
- bzero(&parm, sizeof(struct fm_ctl_parm));
- parm.addr = 0x9F; //page addr
- parm.val = 0x0000; //page 0
- parm.rw_flag = 0; //write
- ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
-
-start:
- bzero(&parm, sizeof(struct fm_ctl_parm));
- parm.addr = addr;
- printf("0x%02x ", parm.addr);
- parm.rw_flag = 1;
- ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("0x%04x\n", parm.val);
- addr++;
- if(++i < 256)
- goto start;
-
- if(mode == 0){
- ;//
- }else if(mode == 1){
- close(log_fd);
- std_out = dup(std_out);
- printf("stdout [fd=%d]\n", std_out);
- }
- return 0;
-}
-
-static int fm_print_reg(struct fm_cmd *cmd)
-{
- int ret = 0;
- int tmp = -1;
-
- if(strcmp(cmd->para[0], "shell") == 0){
- tmp = 0;
- }else if(strcmp(cmd->para[0], "file") == 0){
- tmp = 1;
- }else{
- return -1;
- }
- ret = print_page(0x03, tmp);
- ret = print_page(0x02, tmp);
- ret = print_page(0x01, tmp);
- ret = print_page(0x00, tmp);
- printf("OK\n");
-
- return 0;
-}
-
-static int fm_write_reg(struct fm_cmd *cmd)
-{
- int ret;
- int tmp;
- struct fm_ctl_parm parm;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_ctl_parm));
-
- ret = get_int_val(cmd->para[0], &tmp);
- if(ret){
- return -1;
- }
- parm.addr = (uint8_t)tmp;
- ret = get_int_val(cmd->para[1], &tmp);
- if(ret){
- return -1;
- }
- parm.val = (uint16_t)tmp;
- parm.rw_flag = 0;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK: 0x%02x = 0x%04x\n", parm.addr, parm.val);
-
- return 0;
-}
-
-/*
- * fm_mod_reg
- * mod addr mask val -> mod 0x60 0xFFFE 0x0001
- */
-static int fm_mod_reg(struct fm_cmd *cmd)
-{
- int ret;
- int tmp;
- uint16_t mask;
- uint16_t val;
- struct fm_ctl_parm parm;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
- bzero(&parm, sizeof(struct fm_ctl_parm));
-
- ret = get_int_val(cmd->para[0], &tmp); //get addr
- if(ret){
- return -1;
- }
- parm.addr = (uint8_t)tmp;
- parm.rw_flag = 1;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- //printf("addr: 0x%02x\n", parm.addr);
-
- ret = get_int_val(cmd->para[1], &tmp); //get mask
- if(ret){
- return -1;
- }
- mask = (uint16_t)tmp;
- //printf("mask: 0x%04x\n", mask);
-
- ret = get_int_val(cmd->para[2], &tmp); //get bits
- if(ret){
- return -1;
- }
- val = (uint16_t)tmp;
- //printf("val: 0x%04x\n", val);
-
- parm.val = (parm.val & mask) | (val & (~mask));
- parm.rw_flag = 0;
- ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK: 0x%02x = 0x%04x\n", parm.addr, parm.val);
-
- return 0;
-}
-
-static int fm_delay(struct fm_cmd *cmd)
-{
- int ret = 0;
- int tmp;
- struct timeval tval;
-
- ret = get_int_val(cmd->para[0], &tmp);
- if(ret){
- return -1;
- }
-
- if(strcmp(cmd->para[1], "s") == 0){
- tval.tv_sec = tmp;
- tval.tv_usec = 0;
- }else if(strcmp(cmd->para[1], "ms") == 0){
- tval.tv_sec = 0;
- tval.tv_usec = tmp*1000;
- }else if(strcmp(cmd->para[1], "us") == 0){
- tval.tv_sec = 0;
- tval.tv_usec = tmp;
- }else{
- return -1;
- }
- printf("OK: %ds,%dus \n", (int)tval.tv_sec, (int)tval.tv_usec);
- select(0, NULL, NULL, NULL, &tval);
-
- return 0;
-}
-
-static int fm_help(struct fm_cmd *cmd)
-{
- int id = -1;
-
- printf("-------------------------------------------------------\n");
- printf("%s\t%s\t\t%s\n", "cmd id", "cmd name", "cmd para num");
- printf("-------------------------------------------------------\n");
- while((++id) < (int)(sizeof(g_cmd)/sizeof(g_cmd[0]))) {
- printf("%d\t%s\t\t%d\t%s\n", id, g_cmd[id].name, g_cmd[id].para_size, g_cmd[id].description);
- }
- printf("-------------------------------------------------------\n");
- printf("OK\n");
-
- return 0;
-}
-
-static int fm_bye(struct fm_cmd *cmd)
-{
- autofm_run = 0;
-
- printf("OK\n");
- return 0;
-}
-
-static enum fm_event_type get_key_type(char *key, struct fm_cmd **pcmd)
-{
- int i;
-
- for(i = 0; i < (int)(sizeof(g_cmd)/sizeof(g_cmd[0])); i++){
- if(strcmp(g_cmd[i].name, key) == 0){
- //printf("%s %d\n", g_cmd[i].name, g_cmd[i].para_size);
- *pcmd = &g_cmd[i];
- return FM_EVENT_CMD;
- }
- }
- return FM_EVENT_VAL;
-}
-
-static int daemonize(int argc, char **argv)
-{
- int ret = 0;
- int fd0, fd1, fd2;
- unsigned int i;
- pid_t pid;
- struct rlimit rl;
- struct sigaction sa;
-
- umask(0);
-
- ret = getrlimit(RLIMIT_NOFILE, &rl);
- if (ret < 0){
- return -1;
- }
-
- pid = fork();
- if (pid < 0){
- return -1;
- }else if (pid > 0){
- exit(0);
- }
-
- setsid();
-
- sa.sa_handler = SIG_IGN;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
-
- if (sigaction(SIGHUP, &sa, NULL) < 0){
- return -1;
- }
-
- pid = fork();
- if (pid < 0){
- return -1;
- }else if (pid > 0){
- exit(0);
- }
-
- chdir("/");
-
- if (rl.rlim_max == RLIM_INFINITY){
- rl.rlim_max = 1024;
- }
-
- for (i = 0; i < (unsigned int)argc; i++){
- printf("%s ", argv[i]);
- }
- printf("\n");
-
- for (i = 0; i < rl.rlim_max; i++){
- close(i);
- }
-
- open(argv[1], O_RDWR | O_CREAT);
- open(argv[2], O_RDWR | O_CREAT);
- open(argv[3], O_RDWR | O_CREAT);
-
- return 0;
-}
-
-static int fm_top_read_reg(struct fm_cmd *cmd)
-{
- int ret;
- int tmp;
- struct fm_top_rw_parm parm;
-
- if (g_fm_fd < 0)
- {
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_top_rw_parm));
-
- ret = get_int_val(cmd->para[0], &tmp);
- if(ret){
- return -1;
- }
- parm.addr = (uint16_t)tmp;
- parm.rw_flag = 1;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_TOP_RDWR, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK: 0x%04x = 0x%08x\n", parm.addr, parm.val);
-
- return 0;
-}
-
-static int fm_top_write_reg(struct fm_cmd *cmd)
-{
- int ret;
- int tmp;
- struct fm_top_rw_parm parm;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_top_rw_parm));
-
- ret = get_int_val(cmd->para[0], &tmp);
- if(ret){
- return -1;
- }
- parm.addr = (uint16_t)tmp;
- ret = get_int_val(cmd->para[1], &tmp);
- if(ret){
- return -1;
- }
- parm.val = (uint32_t)tmp;
- parm.rw_flag = 0;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_TOP_RDWR, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK: 0x%04x = 0x%08x\n", parm.addr, parm.val);
-
- return 0;
-}
-
-static int fm_host_read_reg(struct fm_cmd *cmd)
-{
- int ret;
- uint32_t tmp;
- struct fm_host_rw_parm parm;
-
- if (g_fm_fd < 0)
- {
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_host_rw_parm));
-
- ret = get_u32_val(cmd->para[0], &tmp);
- printf("tmp = 0x%08x\n", tmp);
- if (ret)
- {
- return -1;
- }
- parm.addr = tmp;
- parm.rw_flag = 1;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_HOST_RDWR, &parm);
- if (ret)
- {
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK: 0x%08x = 0x%08x\n", parm.addr, parm.val);
-
- return 0;
-}
-
-static int fm_host_write_reg(struct fm_cmd *cmd)
-{
- int ret;
- uint32_t tmp;
- struct fm_host_rw_parm parm;
-
- if(g_fm_fd < 0){
- printf("WARN fd unavailable\n");
- return -2;
- }
-
- bzero(&parm, sizeof(struct fm_host_rw_parm));
-
- ret = get_u32_val(cmd->para[0], &tmp);
- if(ret){
- return -1;
- }
- parm.addr = tmp;
- ret = get_u32_val(cmd->para[1], &tmp);
- if(ret){
- return -1;
- }
- parm.val = tmp;
- parm.rw_flag = 0;
-
- ret = ioctl(g_fm_fd, FM_IOCTL_HOST_RDWR, &parm);
- if(ret){
- printf("FAIL:%d:%d\n", ret, parm.err);
- return -1;
- }
- printf("OK: 0x%08x = 0x%08x\n", parm.addr, parm.val);
-
- return 0;
-}
-
-int main(int argc, char **argv)
-{
- int ret = 0;
- int i;
- char *buf = NULL;
-#define BUF_SIZE 1024*16
-
- buf = malloc(BUF_SIZE);
- if(!buf){
- printf("fm malloc memory failed!\n");
- return -1;
- }
-
- printf("\n%s:%s:%s\n", argv[0], __DATE__, __TIME__);
- for (i = 0; i < argc; i++){
- printf("%s ", argv[i]);
- }
- printf("\n");
-
-#ifdef FM_TOOL_BUILD_DEAMON
- daemonize(argc, argv);
-#endif
-
- while(autofm_run){
- char *p = buf;
- char *key = NULL;
- enum fm_event_type keytype;
- struct fm_cmd *cmd = NULL;
- enum fm_sta sta = FM_STA_NON;
-
- memset(buf, 0, BUF_SIZE);
- get_cmd(buf, BUF_SIZE); //get a line form input file
-
- while(cmd_parser(p, &p, &key) == 0){
- keytype = get_key_type(key, &cmd); //this function will update "cmd" pointer if need
- switch(sta){
- case FM_STA_NON:
- if(keytype == FM_EVENT_VAL){
- printf("bad format\n");
- }else if(cmd->para_size == 0){
- //printf("%s\n", cmd->name);
- cmd->handler(cmd); //yes, do cmd
- }else{
- sta = FM_STA_CMD; //cmd need one or more para
- }
- break;
-
- case FM_STA_CMD:
- if(keytype == FM_EVENT_VAL){
- cmd->para[0] = key;
- if(cmd->para_size == 1){
- //printf("%s\n", cmd->name);
- cmd->handler(cmd); //yes, do cmd
- sta = FM_STA_NON;
- }else{
- sta = FM_STA_VAL_1;
- }
- }else{
- printf("bad format\n");
- if(cmd->para_size == 0){
- //printf("%s\n", cmd->name);
- cmd->handler(cmd); //yes, do cmd
- sta = FM_STA_NON;
- }else{
- ;
- }
- }
- break;
-
- case FM_STA_VAL_1:
- if(keytype == FM_EVENT_VAL){
- cmd->para[1] = key;
- if(cmd->para_size == 2){
- //printf("%s\n", cmd->name);
- cmd->handler(cmd);
- sta = FM_STA_NON;
- }else{
- sta = FM_STA_VAL_2;
- }
- }else{
- printf("bad format\n");
- if(cmd->para_size == 0){
- //printf("%s\n", cmd->name);
- cmd->handler(cmd); //yes, do cmd
- sta = FM_STA_NON;
- }else{
- sta = FM_STA_CMD;
- }
- }
- break;
-
- case FM_STA_VAL_2:
- if(keytype == FM_EVENT_VAL){
- cmd->para[2] = key;
- //printf("%s\n", cmd->name);
- cmd->handler(cmd); //yes, do cmd
- sta = FM_STA_NON;
- }else{
- printf("bad format\n");
- if(cmd->para_size == 0){
- //printf("%s\n", cmd->name);
- cmd->handler(cmd); //yes, do cmd
- sta = FM_STA_NON;
- }else{
- sta = FM_STA_CMD;
- }
- }
- default:
- break;
- }
- }
- }
-
- return 0;
-}
-
diff --git a/MediaTek/fmradiolibs/autofm/autofm.h b/MediaTek/fmradiolibs/autofm/autofm.h
deleted file mode 100644
index ecd7d40..0000000
--- a/MediaTek/fmradiolibs/autofm/autofm.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#ifndef __AUTOFM_H__
-#define __AUTOFM_H__
-
-enum fm_cmd_parser_state
-{
- FM_CMD_STAT_NONE = 0,
- FM_CMD_STAT_WORD
-};
-
-typedef enum fm_cfg_parser_state fm_cfg_parser_state_t;
-
-#define COMMENT_CHAR '#'
-#define DELIMIT_CHAR '='
-#define isspace(a) ((a) == 0x20)
-
-
-struct fm_cmd
-{
- char *name;
- int para_size;
- int (*handler)(struct fm_cmd *cmd);
- char *para[3];
- char *description;
-};
-
-enum fm_sta
-{
- FM_STA_NON,
- FM_STA_CMD,
- FM_STA_VAL_1,
- FM_STA_VAL_2
-};
-
-enum fm_event_type
-{
- FM_EVENT_VAL, //a value string
- FM_EVENT_CMD //a cmd string, the cmd need 0 para
-};
-
-#endif //__AUTOFM_H__ \ No newline at end of file
diff --git a/MediaTek/fmradiolibs/autofm/fm_cust_cfg.h b/MediaTek/fmradiolibs/autofm/fm_cust_cfg.h
deleted file mode 100644
index 1cc1d03..0000000
--- a/MediaTek/fmradiolibs/autofm/fm_cust_cfg.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2014. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#ifndef __FM_CUST_CFG_H__
-#define __FM_CUST_CFG_H__
-
-//scan sort algorithm
-enum{
- FM_SCAN_SORT_NON = 0,
- FM_SCAN_SORT_UP,
- FM_SCAN_SORT_DOWN,
- FM_SCAN_SORT_MAX
-};
-
-//*****************************************************************************************
-//***********************************FM config for customer: start******************************
-//*****************************************************************************************
-//RX
-#define FM_RX_RSSI_TH_LONG 0xFF01 //FM radio long antenna RSSI threshold(11.375dBuV)
-#define FM_RX_RSSI_TH_SHORT 0xFEE0 //FM radio short antenna RSSI threshold(-1dBuV)
-#define FM_RX_CQI_TH 0x00E9 //FM radio Channel quality indicator threshold(0x0000~0x00FF)
-#define FM_RX_MR_TH 0x01BD //FM radio MR threshold
-#define FM_RX_SEEK_SPACE 1 //FM radio seek space,1:100KHZ; 2:200KHZ
-#define FM_RX_SCAN_CH_SIZE 40 //FM radio scan max channel size
-#define FM_RX_BAND 1 //FM radio band, 1:87.5MHz~108.0MHz; 2:76.0MHz~90.0MHz; 3:76.0MHz~108.0MHz; 4:special
-#define FM_RX_BAND_FREQ_L 875 //FM radio special band low freq(Default 87.5MHz)
-#define FM_RX_BAND_FREQ_H 1080 //FM radio special band high freq(Default 108.0MHz)
-#define FM_RX_SCAN_SORT_SELECT FM_SCAN_SORT_NON
-#define FM_RX_FAKE_CH_NUM 1
-#define FM_RX_FAKE_CH_RSSI 40
-#define FM_RX_FAKE_CH_1 1075
-#define FM_RX_FAKE_CH_2 0
-#define FM_RX_FAKE_CH_3 0
-#define FM_RX_FAKE_CH_4 0
-#define FM_RX_FAKE_CH_5 0
-#define FM_RX_DEEMPHASIS 0 //0-50us, China Mainland; 1-75us China Taiwan
-#define FM_RX_OSC_FREQ 0 //0-26MHz; 1-19MHz; 2-24MHz; 3-38.4MHz; 4-40MHz; 5-52MHz
-
-//TX
-#define FM_TX_PWR_LEVEL_MAX 120
-#define FM_TX_SCAN_HOLE_LOW 923 //92.3MHz~95.4MHz should not show to user
-#define FM_TX_SCAN_HOLE_HIGH 954 //92.3MHz~95.4MHz should not show to user
-
-
-//*****************************************************************************************
-//***********************************FM config for customer:end *******************************
-//*****************************************************************************************
-// band
-#define FM_BAND_UNKNOWN 0
-#define FM_BAND_UE 1 // US/Europe band 87.5MHz ~ 108MHz (DEFAULT)
-#define FM_BAND_JAPAN 2 // Japan band 76MHz ~ 90MHz
-#define FM_BAND_JAPANW 3 // Japan wideband 76MHZ ~ 108MHz
-#define FM_BAND_SPECIAL 4 // special band between 76MHZ and 108MHz
-#define FM_BAND_DEFAULT FM_BAND_UE
-#define FM_FREQ_MIN FM_RX_BAND_FREQ_L
-#define FM_FREQ_MAX FM_RX_BAND_FREQ_H
-#define FM_RAIDO_BAND FM_BAND_UE
-// space
-#define FM_SPACE_UNKNOWN 0
-#define FM_SPACE_100K 1
-#define FM_SPACE_200K 2
-#define FM_SPACE_DEFAULT FM_RX_SEEK_SPACE
-#define FM_SEEK_SPACE FM_RX_SEEK_SPACE
-//max scan chl num
-#define FM_MAX_CHL_SIZE FM_RX_SCAN_CH_SIZE
-// auto HiLo
-#define FM_AUTO_HILO_OFF 0
-#define FM_AUTO_HILO_ON 1
-// seek direction
-#define FM_SEEK_UP 0
-#define FM_SEEK_DOWN 1
-
-#define FM_CHIP_AR1000 0x1000
-#define FM_CHIP_MT5192 0x91
-#define FM_CHIP_MT5193 0x92
-#define FM_CHIP_MT6616 0x6616
-#define FM_CHIP_MT6626 0x6626
-#define FM_CHIP_MT6628 0x6628
-#define FM_CHIP_MT6620 0x6620
-#define FM_CHIP_UNSUPPORTED 0xffff
-
-// seek threshold
-#define FM_SEEKTH_LEVEL_DEFAULT 4
-
-#endif // __FM_CUST_CFG_H__
diff --git a/MediaTek/fmradiolibs/autofm/fm_ioctl.h b/MediaTek/fmradiolibs/autofm/fm_ioctl.h
deleted file mode 100644
index 605b765..0000000
--- a/MediaTek/fmradiolibs/autofm/fm_ioctl.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#ifndef __FM_IOCTL_H__
-#define __FM_IOCTL_H__
-#include "fm_rds.h"
-#include "fm_main.h"
-
-#define FM_IOC_MAGIC 0xf5 // FIXME: any conflict?
-
-#define FM_IOCTL_POWERUP _IOWR(FM_IOC_MAGIC, 0, struct fm_tune_parm)
-#define FM_IOCTL_POWERDOWN _IOWR(FM_IOC_MAGIC, 1, int32_t)
-#define FM_IOCTL_TUNE _IOWR(FM_IOC_MAGIC, 2, struct fm_tune_parm)
-#define FM_IOCTL_SEEK _IOWR(FM_IOC_MAGIC, 3, struct fm_seek_parm)
-#define FM_IOCTL_SETVOL _IOWR(FM_IOC_MAGIC, 4, uint32_t)
-#define FM_IOCTL_GETVOL _IOWR(FM_IOC_MAGIC, 5, uint32_t)
-#define FM_IOCTL_MUTE _IOWR(FM_IOC_MAGIC, 6, uint32_t)
-#define FM_IOCTL_GETRSSI _IOWR(FM_IOC_MAGIC, 7, int32_t)
-#define FM_IOCTL_SCAN _IOWR(FM_IOC_MAGIC, 8, struct fm_scan_parm)
-#define FM_IOCTL_STOP_SCAN _IO(FM_IOC_MAGIC, 9)
-#define FM_IOCTL_POWERUP_TX _IOWR(FM_IOC_MAGIC, 20, struct fm_tune_parm)
-#define FM_IOCTL_TUNE_TX _IOWR(FM_IOC_MAGIC, 21, struct fm_tune_parm)
-#define FM_IOCTL_RDS_TX _IOWR(FM_IOC_MAGIC, 22, struct fm_rds_tx_parm)
-
-//IOCTL and struct for test
-#define FM_IOCTL_GETCHIPID _IOWR(FM_IOC_MAGIC, 10, uint16_t)
-#define FM_IOCTL_EM_TEST _IOWR(FM_IOC_MAGIC, 11, struct fm_em_parm)
-#define FM_IOCTL_RW_REG _IOWR(FM_IOC_MAGIC, 12, struct fm_ctl_parm)
-#define FM_IOCTL_GETMONOSTERO _IOWR(FM_IOC_MAGIC, 13, uint16_t)
-#define FM_IOCTL_GETCURPAMD _IOWR(FM_IOC_MAGIC, 14, uint16_t)
-#define FM_IOCTL_GETGOODBCNT _IOWR(FM_IOC_MAGIC, 15, uint16_t)
-#define FM_IOCTL_GETBADBNT _IOWR(FM_IOC_MAGIC, 16, uint16_t)
-#define FM_IOCTL_GETBLERRATIO _IOWR(FM_IOC_MAGIC, 17, uint16_t)
-
-//IOCTL for RDS
-#define FM_IOCTL_RDS_ONOFF _IOWR(FM_IOC_MAGIC, 18, uint16_t)
-#define FM_IOCTL_RDS_SUPPORT _IOWR(FM_IOC_MAGIC, 19, int32_t)
-
-#define FM_IOCTL_RDS_SIM_DATA _IOWR(FM_IOC_MAGIC, 23, uint32_t)
-#define FM_IOCTL_IS_FM_POWERED_UP _IOWR(FM_IOC_MAGIC, 24, uint32_t)
-
-//IOCTL for FM Tx
-#define FM_IOCTL_TX_SUPPORT _IOWR(FM_IOC_MAGIC, 25, int32_t)
-#define FM_IOCTL_RDSTX_SUPPORT _IOWR(FM_IOC_MAGIC, 26, int32_t)
-#define FM_IOCTL_RDSTX_ENABLE _IOWR(FM_IOC_MAGIC, 27, int32_t)
-#define FM_IOCTL_TX_SCAN _IOWR(FM_IOC_MAGIC, 28, struct fm_tx_scan_parm)
-
-//IOCTL for FM over BT
-#define FM_IOCTL_OVER_BT_ENABLE _IOWR(FM_IOC_MAGIC, 29, int32_t)
-
-//IOCTL for FM ANTENNA SWITCH
-#define FM_IOCTL_ANA_SWITCH _IOWR(FM_IOC_MAGIC, 30, int32_t)
-#define FM_IOCTL_GETCAPARRAY _IOWR(FM_IOC_MAGIC, 31, int32_t)
-
-//IOCTL for FM compensation by GPS RTC
-#define FM_IOCTL_GPS_RTC_DRIFT _IOWR(FM_IOC_MAGIC, 32, struct fm_gps_rtc_info)
-
-//IOCTL for FM I2S Setting
-#define FM_IOCTL_I2S_SETTING _IOWR(FM_IOC_MAGIC, 33, struct fm_i2s_setting)
-
-#define FM_IOCTL_RDS_GROUPCNT _IOWR(FM_IOC_MAGIC, 34, struct rds_group_cnt_req)
-#define FM_IOCTL_RDS_GET_LOG _IOWR(FM_IOC_MAGIC, 35, struct rds_raw_data)
-
-#define FM_IOCTL_SCAN_GETRSSI _IOWR(FM_IOC_MAGIC, 36, struct fm_rssi_req)
-#define FM_IOCTL_SETMONOSTERO _IOWR(FM_IOC_MAGIC, 37, int32_t)
-
-#define FM_IOCTL_RDS_BC_RST _IOWR(FM_IOC_MAGIC, 38, int32_t)
-#define FM_IOCTL_CQI_GET _IOWR(FM_IOC_MAGIC, 39, struct fm_cqi_req)
-
-#define FM_IOCTL_TOP_RDWR _IOWR(FM_IOC_MAGIC, 43, struct fm_top_rw_parm)
-#define FM_IOCTL_HOST_RDWR _IOWR(FM_IOC_MAGIC, 44, struct fm_host_rw_parm)
-
-#define FM_IOCTL_DUMP_REG _IO(FM_IOC_MAGIC, 0xFF)
-
-#endif //__FM_IOCTL_H__
-
diff --git a/MediaTek/fmradiolibs/autofm/fm_main.h b/MediaTek/fmradiolibs/autofm/fm_main.h
deleted file mode 100644
index fdcb314..0000000
--- a/MediaTek/fmradiolibs/autofm/fm_main.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#ifndef __FM_MAIN_H__
-#define __FM_MAIN_H__
-
-#define FM_NAME "fm"
-#define FM_DEVICE_NAME "/dev/fm"
-
-#define FM_VOL_MAX 0x2B // 43 volume(0-15)
-
-#define FM_RDS_ENABLE 0x01 // 1: enable RDS, 0:disable RDS
-#define FM_RDS_DATA_READY (1 << 0)
-
-// errno
-#define FM_SUCCESS 0
-#define FM_FAILED 1
-#define FM_EPARM 2
-#define FM_BADSTATUS 3
-#define FM_TUNE_FAILED 4
-#define FM_SEEK_FAILED 5
-#define FM_BUSY 6
-#define FM_SCAN_FAILED 7
-
-struct fm_tune_parm {
- uint8_t err;
- uint8_t band;
- uint8_t space;
- uint8_t hilo;
- uint16_t freq; // IN/OUT parameter
-};
-
-struct fm_seek_parm {
- uint8_t err;
- uint8_t band;
- uint8_t space;
- uint8_t hilo;
- uint8_t seekdir;
- uint8_t seekth;
- uint16_t freq; // IN/OUT parameter
-};
-
-struct fm_scan_parm {
- uint8_t err;
- uint8_t band;
- uint8_t space;
- uint8_t hilo;
- uint16_t freq; // OUT parameter
- uint16_t ScanTBL[16]; //need no less than the chip
- uint16_t ScanTBLSize; //IN/OUT parameter
-};
-
-struct fm_cqi
-{
- uint16_t ch;
- uint16_t rssi;
- uint16_t reserve;
-};
-
-struct fm_cqi_req
-{
- uint16_t ch_num;
- int buf_size;
- char *cqi_buf;
-};
-
-struct fm_ch_rssi{
- uint16_t freq;
- uint16_t rssi;
-};
-
-struct fm_rssi_req{
- uint16_t num;
- uint16_t read_cnt;
- struct fm_ch_rssi cr[16*16];
-};
-
-struct fm_rds_tx_parm {
- uint8_t err;
- uint16_t pi;
- uint16_t ps[12]; // 4 ps
- uint16_t other_rds[87]; // 0~29 other groups
- uint8_t other_rds_cnt; // # of other group
-};
-
-typedef struct fm_rds_tx_req{
- unsigned char pty; // 0~31 integer
- unsigned char rds_rbds; // 0:RDS, 1:RBDS
- unsigned char dyn_pty; // 0:static, 1:dynamic
- unsigned short pi_code; // 2-byte hex
- unsigned char ps_buf[8]; // hex buf of PS
- unsigned char ps_len; // length of PS, must be 0 / 8"
- unsigned char af; // 0~204, 0:not used, 1~204:(87.5+0.1*af)MHz
- unsigned char ah; // Artificial head, 0:no, 1:yes
- unsigned char stereo; // 0:mono, 1:stereo
- unsigned char compress; // Audio compress, 0:no, 1:yes
- unsigned char tp; // traffic program, 0:no, 1:yes
- unsigned char ta; // traffic announcement, 0:no, 1:yes
- unsigned char speech; // 0:music, 1:speech
-}fm_rds_tx_req;
-
-#define TX_SCAN_MAX 10
-#define TX_SCAN_MIN 1
-struct fm_tx_scan_parm {
- uint8_t err;
- uint8_t band; //87.6~108MHz
- uint8_t space;
- uint8_t hilo;
- uint16_t freq; // start freq, if less than band min freq, then will use band min freq
- uint8_t scandir;
- uint16_t ScanTBL[TX_SCAN_MAX]; //need no less than the chip
- uint16_t ScanTBLSize; //IN: desired size, OUT: scan result size
-};
-
-struct fm_gps_rtc_info{
- int err; //error number, 0: success, other: err code
- int retryCnt; //GPS mnl can decide retry times
- int ageThd; //GPS 3D fix time diff threshold
- int driftThd; //GPS RTC drift threshold
- struct timeval tvThd; //time value diff threshold
- int age; //GPS 3D fix time diff
- int drift; //GPS RTC drift
- union{
- unsigned long stamp; //time stamp in jiffies
- struct timeval tv; //time stamp value in RTC
- };
- int flag; //rw flag
-};
-
-typedef enum
-{
- FM_I2S_ON = 0,
- FM_I2S_OFF
-}fm_i2s_state;
-
-typedef enum
-{
- FM_I2S_MASTER = 0,
- FM_I2S_SLAVE
-}fm_i2s_mode;
-
-typedef enum
-{
- FM_I2S_32K = 0,
- FM_I2S_44K,
- FM_I2S_48K
-}fm_i2s_sample;
-
-struct fm_i2s_setting{
- int onoff;
- int mode;
- int sample;
-};
-
-typedef enum{
- FM_RX = 0,
- FM_TX = 1
-}FM_PWR_T;
-
-enum group_idx {
- mono=0,
- stereo,
- RSSI_threshold,
- HCC_Enable,
- PAMD_threshold,
- Softmute_Enable,
- De_emphasis,
- HL_Side,
- Demod_BW,
- Dynamic_Limiter,
- Softmute_Rate,
- AFC_Enable,
- Softmute_Level,
- Analog_Volume,
- GROUP_TOTAL_NUMS
-};
-
-enum item_idx {
- Sblend_OFF=0,
- Sblend_ON,
- ITEM_TOTAL_NUMS
-};
-
-struct fm_ctl_parm {
- uint8_t err;
- uint8_t addr;
- uint16_t val;
- uint16_t rw_flag;//0:write, 1:read
-};
-struct fm_top_rw_parm {
- uint8_t err;
- uint8_t rw_flag;//0:write, 1:read
- uint16_t addr;
- uint32_t val;
-};
-struct fm_host_rw_parm {
- uint8_t err;
- uint8_t rw_flag;//0:write, 1:read
- uint32_t addr;
- uint32_t val;
-};
-
-struct fm_em_parm {
- uint16_t group_idx;
- uint16_t item_idx;
- uint32_t item_value;
-};
-
-#endif //__FM_MAIN_H__
-
diff --git a/MediaTek/fmradiolibs/autofm/fm_rds.h b/MediaTek/fmradiolibs/autofm/fm_rds.h
deleted file mode 100644
index bda2e34..0000000
--- a/MediaTek/fmradiolibs/autofm/fm_rds.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#ifndef __FM_RDS_H__
-#define __FM_RDS_H__
-
-//FM_RDS_DATA_CRC_FFOST
-#define FM_RDS_GDBK_IND_A (0x08)
-#define FM_RDS_GDBK_IND_B (0x04)
-#define FM_RDS_GDBK_IND_C (0x02)
-#define FM_RDS_GDBK_IND_D (0x01)
-#define FM_RDS_DCO_FIFO_OFST (0x01E0)
-#define FM_RDS_READ_DELAY (0x80)
-
-#define RDS_RX_BLOCK_PER_GROUP (4)
-#define RDS_RX_GROUP_SIZE (2*RDS_RX_BLOCK_PER_GROUP)
-#define MAX_RDS_RX_GROUP_CNT (12)
-#define RDS_RT_MULTI_REV_TH 16
-
-typedef struct rds_packet_t
-{
- uint16_t blkA;
- uint16_t blkB;
- uint16_t blkC;
- uint16_t blkD;
- uint16_t crc; //crc checksum
- uint16_t cbc; //correct bit cnt
-}rds_packet_t;
-
-typedef struct rds_rx_t
-{
- uint16_t sin;
- uint16_t cos;
- rds_packet_t data[MAX_RDS_RX_GROUP_CNT];
-}rds_rx_t;
-
-typedef enum rds_ps_state_machine_t
-{
- RDS_PS_START = 0,
- RDS_PS_DECISION,
- RDS_PS_GETLEN,
- RDS_PS_DISPLAY,
- RDS_PS_FINISH,
- RDS_PS_MAX
-}rds_ps_state_machine_t;
-
-typedef enum rds_rt_state_machine_t
-{
- RDS_RT_START = 0,
- RDS_RT_DECISION,
- RDS_RT_GETLEN,
- RDS_RT_DISPLAY,
- RDS_RT_FINISH,
- RDS_RT_MAX
-}rds_rt_state_machine_t;
-
-
-enum
-{
- RDS_GRP_VER_A = 0, //group version A
- RDS_GRP_VER_B
-};
-
-typedef enum rds_blk_t
-{
- RDS_BLK_A = 0,
- RDS_BLK_B,
- RDS_BLK_C,
- RDS_BLK_D,
- RDS_BLK_MAX
-}rds_blk_t;
-
-//For RDS feature, these strcutures also be defined in "fm.h"
-typedef struct rds_flag_t
-{
- uint8_t TP;
- uint8_t TA;
- uint8_t Music;
- uint8_t Stereo;
- uint8_t Artificial_Head;
- uint8_t Compressed;
- uint8_t Dynamic_PTY;
- uint8_t Text_AB;
- uint32_t flag_status;
-}rds_flag_t;
-
-typedef struct rds_ct_t
-{
- uint16_t Month;
- uint16_t Day;
- uint16_t Year;
- uint16_t Hour;
- uint16_t Minute;
- uint8_t Local_Time_offset_signbit;
- uint8_t Local_Time_offset_half_hour;
-}rds_ct_t;
-
-typedef struct rds_af_t
-{
- int16_t AF_Num;
- int16_t AF[2][25]; //100KHz
- uint8_t Addr_Cnt;
- uint8_t isMethod_A;
- uint8_t isAFNum_Get;
-}rds_af_t;
-
-typedef struct rds_ps_t
-{
- uint8_t PS[4][8];
- uint8_t Addr_Cnt;
-}rds_ps_t;
-
-typedef struct rds_rt_t
-{
- uint8_t TextData[4][64];
- uint8_t GetLength;
- uint8_t isRTDisplay;
- uint8_t TextLength;
- uint8_t isTypeA;
- uint8_t BufCnt;
- uint16_t Addr_Cnt;
-}rds_rt_t;
-
-typedef struct rds_raw_t
-{
- int dirty; //indicate if the data changed or not
- int len; //the data len form chip
- uint8_t data[146];
-}rds_raw_t;
-
-typedef struct rds_group_cnt_t
-{
- unsigned long total;
- unsigned long groupA[16]; //RDS groupA counter
- unsigned long groupB[16]; //RDS groupB counter
-}rds_group_cnt_t;
-
-typedef enum rds_group_cnt_op_t
-{
- RDS_GROUP_CNT_READ = 0,
- RDS_GROUP_CNT_WRITE,
- RDS_GROUP_CNT_RESET,
- RDS_GROUP_CNT_MAX
-}rds_group_cnt_op_t;
-
-typedef struct rds_group_cnt_req_t
-{
- int err;
- enum rds_group_cnt_op_t op;
- struct rds_group_cnt_t gc;
-}rds_group_cnt_req_t;
-
-typedef struct rds_t
-{
- struct rds_ct_t CT;
- struct rds_flag_t RDSFlag;
- uint16_t PI;
- uint8_t Switch_TP;
- uint8_t PTY;
- struct rds_af_t AF_Data;
- struct rds_af_t AFON_Data;
- uint8_t Radio_Page_Code;
- uint16_t Program_Item_Number_Code;
- uint8_t Extend_Country_Code;
- uint16_t Language_Code;
- struct rds_ps_t PS_Data;
- uint8_t PS_ON[8];
- struct rds_rt_t RT_Data;
- uint16_t event_status; //will use RDSFlag_Struct RDSFlag->flag_status to check which event, is that ok?
- struct rds_group_cnt_t gc;
-}rds_t;
-
-
-//Need care the following definition.
-//valid Rds Flag for notify
-typedef enum rds_flag_status_t
-{
- RDS_FLAG_IS_TP = 0x0001, // Program is a traffic program
- RDS_FLAG_IS_TA = 0x0002, // Program currently broadcasts a traffic ann.
- RDS_FLAG_IS_MUSIC = 0x0004, // Program currently broadcasts music
- RDS_FLAG_IS_STEREO = 0x0008, // Program is transmitted in stereo
- RDS_FLAG_IS_ARTIFICIAL_HEAD = 0x0010, // Program is an artificial head recording
- RDS_FLAG_IS_COMPRESSED = 0x0020, // Program content is compressed
- RDS_FLAG_IS_DYNAMIC_PTY = 0x0040, // Program type can change
- RDS_FLAG_TEXT_AB = 0x0080 // If this flag changes state, a new radio text string begins
-} rds_flag_status_t;
-
-typedef enum rds_event_status_t
-{
- RDS_EVENT_FLAGS = 0x0001, // One of the RDS flags has changed state
- RDS_EVENT_PI_CODE = 0x0002, // The program identification code has changed
- RDS_EVENT_PTY_CODE = 0x0004, // The program type code has changed
- RDS_EVENT_PROGRAMNAME = 0x0008, // The program name has changed
- RDS_EVENT_UTCDATETIME = 0x0010, // A new UTC date/time is available
- RDS_EVENT_LOCDATETIME = 0x0020, // A new local date/time is available
- RDS_EVENT_LAST_RADIOTEXT = 0x0040, // A radio text string was completed
- RDS_EVENT_AF = 0x0080, // Current Channel RF signal strength too weak, need do AF switch
- RDS_EVENT_AF_LIST = 0x0100, // An alternative frequency list is ready
- RDS_EVENT_AFON_LIST = 0x0200, // An alternative frequency list is ready
- RDS_EVENT_TAON = 0x0400, // Other Network traffic announcement start
- RDS_EVENT_TAON_OFF = 0x0800, // Other Network traffic announcement finished.
- RDS_EVENT_RDS = 0x2000, // RDS Interrupt had arrived durint timer period
- RDS_EVENT_NO_RDS = 0x4000, // RDS Interrupt not arrived durint timer period
- RDS_EVENT_RDS_TIMER = 0x8000 // Timer for RDS Bler Check. ---- BLER block error rate
-} rds_event_status_t;
-
-#endif //__FM_RDS_H__
-
diff --git a/MediaTek/fmradiolibs/fmnative/Android.mk b/MediaTek/fmradiolibs/fmnative/Android.mk
deleted file mode 100755
index f730a3c..0000000
--- a/MediaTek/fmradiolibs/fmnative/Android.mk
+++ /dev/null
@@ -1,643 +0,0 @@
-ifeq ($(MTK_FM_SUPPORT), yes)
-
-BUILD_FM_CFG := false
-BUILD_FM_PATCH := false
-
-FM_CFG_FILE := fm_cust.cfg
-
-LOCAL_PATH:= $(call my-dir)
-#fm custom path: mediatek/custom/common/hal/fmradio
-FM_CUSTOM_PATH := ./config
-
-# $(call config-custom-folder,custom1:hal/fmradio)
-
-############################################## MT6628 FM config: start#########################
-ifeq ($(findstring MT6628_FM,$(MTK_FM_CHIP)),MT6628_FM)
-
-BUILD_FM_CFG := true
-BUILD_FM_PATCH := true
-FM_CHIP := mt6628
-FM_ROM_FILE := mt6628_fm_rom.bin
-FM_PATCH_FILE_1 := mt6628_fm_v1_patch.bin
-FM_COEFF_FILE_1 := mt6628_fm_v1_coeff.bin
-FM_PATCH_FILE_2 := mt6628_fm_v2_patch.bin
-FM_COEFF_FILE_2 := mt6628_fm_v2_coeff.bin
-FM_PATCH_FILE_3 := mt6628_fm_v3_patch.bin
-FM_COEFF_FILE_3 := mt6628_fm_v3_coeff.bin
-FM_PATCH_FILE_4 := mt6628_fm_v4_patch.bin
-FM_COEFF_FILE_4 := mt6628_fm_v4_coeff.bin
-FM_PATCH_FILE_5 := mt6628_fm_v5_patch.bin
-FM_COEFF_FILE_5 := mt6628_fm_v5_coeff.bin
-
-
-##### INSTALL fm_cust.cfg FOR fm CONFIG #####
-
-ifeq ($(BUILD_FM_CFG), true)
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_CFG_FILE)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr
-##LOCAL_SRC_FILES := custom1/$(FM_CHIP)/$(LOCAL_MODULE)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-endif
-
-##### INSTALL fm PATCH #####
-
-ifeq ($(BUILD_FM_PATCH), true)
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_ROM_FILE)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/mt6628
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/mt6628/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-endif
-endif
-################################################### MT6628 FM config: end######################################
-
-################################################### MT6620 FM config: start#####################################
-ifeq ($(findstring MT6620_FM,$(MTK_FM_CHIP)),MT6620_FM)
-
-FM_CHIP := mt6620
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_CHIP)_$(FM_CFG_FILE)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-endif
-############################################### MT6620 FM config: end##########################################
-
-############################################### MT6627 FM config: start########################################
-ifeq ($(findstring MT6627_FM,$(MTK_FM_CHIP)),MT6627_FM)
-
-FM_CHIP := mt6627
-FM_PATCH_FILE_1 := mt6627_fm_v1_patch.bin
-FM_COEFF_FILE_1 := mt6627_fm_v1_coeff.bin
-FM_PATCH_FILE_2 := mt6627_fm_v2_patch.bin
-FM_COEFF_FILE_2 := mt6627_fm_v2_coeff.bin
-FM_PATCH_FILE_3 := mt6627_fm_v3_patch.bin
-FM_COEFF_FILE_3 := mt6627_fm_v3_coeff.bin
-FM_PATCH_FILE_4 := mt6627_fm_v4_patch.bin
-FM_COEFF_FILE_4 := mt6627_fm_v4_coeff.bin
-FM_PATCH_FILE_5 := mt6627_fm_v5_patch.bin
-FM_COEFF_FILE_5 := mt6627_fm_v5_coeff.bin
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_CHIP)_$(FM_CFG_FILE)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-endif
-##### MT6627 FM config: end#####
-
-############################################### MT6625 FM config: start########################################
-ifeq ($(findstring MT6625_FM,$(MTK_FM_CHIP)),MT6625_FM)
-
-FM_CHIP := mt6627
-FM_PATCH_FILE_1 := mt6627_fm_v1_patch.bin
-FM_COEFF_FILE_1 := mt6627_fm_v1_coeff.bin
-FM_PATCH_FILE_2 := mt6627_fm_v2_patch.bin
-FM_COEFF_FILE_2 := mt6627_fm_v2_coeff.bin
-FM_PATCH_FILE_3 := mt6627_fm_v3_patch.bin
-FM_COEFF_FILE_3 := mt6627_fm_v3_coeff.bin
-FM_PATCH_FILE_4 := mt6627_fm_v4_patch.bin
-FM_COEFF_FILE_4 := mt6627_fm_v4_coeff.bin
-FM_PATCH_FILE_5 := mt6627_fm_v5_patch.bin
-FM_COEFF_FILE_5 := mt6627_fm_v5_coeff.bin
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_CHIP)_$(FM_CFG_FILE)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-endif
-##### MT6625 FM config: end#####
-
-############################################### MT6580 FM config: start########################################
-ifeq ($(findstring MT6580_FM,$(MTK_FM_CHIP)),MT6580_FM)
-
-FM_CHIP := mt6580
-FM_PATCH_FILE_1 := mt6580_fm_v1_patch.bin
-FM_COEFF_FILE_1 := mt6580_fm_v1_coeff.bin
-FM_PATCH_FILE_2 := mt6580_fm_v2_patch.bin
-FM_COEFF_FILE_2 := mt6580_fm_v2_coeff.bin
-FM_PATCH_FILE_3 := mt6580_fm_v3_patch.bin
-FM_COEFF_FILE_3 := mt6580_fm_v3_coeff.bin
-FM_PATCH_FILE_4 := mt6580_fm_v4_patch.bin
-FM_COEFF_FILE_4 := mt6580_fm_v4_coeff.bin
-FM_PATCH_FILE_5 := mt6580_fm_v5_patch.bin
-FM_COEFF_FILE_5 := mt6580_fm_v5_coeff.bin
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_CHIP)_$(FM_CFG_FILE)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-endif
-##### MT6580 FM config: end#####
-
-############################################### MT6630 FM config: start########################################
-ifeq ($(findstring MT6630_FM,$(MTK_FM_CHIP)),MT6630_FM)
-
-FM_CHIP := mt6630
-FM_PATCH_FILE_1 := $(FM_CHIP)_fm_v1_patch.bin
-FM_COEFF_FILE_1 := $(FM_CHIP)_fm_v1_coeff.bin
-FM_PATCH_FILE_2 := $(FM_CHIP)_fm_v2_patch.bin
-FM_COEFF_FILE_2 := $(FM_CHIP)_fm_v2_coeff.bin
-FM_PATCH_FILE_3 := $(FM_CHIP)_fm_v3_patch.bin
-FM_COEFF_FILE_3 := $(FM_CHIP)_fm_v3_coeff.bin
-FM_PATCH_FILE_4 := $(FM_CHIP)_fm_v4_patch.bin
-FM_COEFF_FILE_4 := $(FM_CHIP)_fm_v4_coeff.bin
-FM_PATCH_FILE_5 := $(FM_CHIP)_fm_v5_patch.bin
-FM_COEFF_FILE_5 := $(FM_CHIP)_fm_v5_coeff.bin
-
-FM_TX_PATCH_FILE_1 := $(FM_CHIP)_fm_v1_patch_tx.bin
-FM_TX_COEFF_FILE_1 := $(FM_CHIP)_fm_v1_coeff_tx.bin
-FM_TX_PATCH_FILE_2 := $(FM_CHIP)_fm_v2_patch_tx.bin
-FM_TX_COEFF_FILE_2 := $(FM_CHIP)_fm_v2_coeff_tx.bin
-FM_TX_PATCH_FILE_3 := $(FM_CHIP)_fm_v3_patch_tx.bin
-FM_TX_COEFF_FILE_3 := $(FM_CHIP)_fm_v3_coeff_tx.bin
-FM_TX_PATCH_FILE_4 := $(FM_CHIP)_fm_v4_patch_tx.bin
-FM_TX_COEFF_FILE_4 := $(FM_CHIP)_fm_v4_coeff_tx.bin
-FM_TX_PATCH_FILE_5 := $(FM_CHIP)_fm_v5_patch_tx.bin
-FM_TX_COEFF_FILE_5 := $(FM_CHIP)_fm_v5_coeff_tx.bin
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_CHIP)_$(FM_CFG_FILE)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_TX_PATCH_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_TX_PATCH_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_TX_PATCH_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_TX_PATCH_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_PATCH_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_TX_PATCH_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_TX_COEFF_FILE_1)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_TX_COEFF_FILE_2)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_TX_COEFF_FILE_3)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_TX_COEFF_FILE_4)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_COEFF_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $(FM_TX_COEFF_FILE_5)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP)
-LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
-
-endif
-##### MT6630 FM config: end#####
-include $(call all-makefiles-under,$(LOCAL_PATH))
-
-endif
diff --git a/MediaTek/fmradiolibs/fmnative/NOTICE b/MediaTek/fmradiolibs/fmnative/NOTICE
deleted file mode 100755
index 0519ecb..0000000
--- a/MediaTek/fmradiolibs/fmnative/NOTICE
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/MediaTek/fmradiolibs/fmnative/README b/MediaTek/fmradiolibs/fmnative/README
deleted file mode 100644
index 23bd2ae..0000000
--- a/MediaTek/fmradiolibs/fmnative/README
+++ /dev/null
@@ -1,21 +0,0 @@
-Configure files and DSP patches needed by FM
-
-WHAT IT DOES?
-=============
-Configure files mtXXXX_fm_cust.cfg are used to adjust FM scan parameters
-DSP patches mtxxxx_fm_vx_coeff.bin and mtxxxx_fm_vx_patch.bin are needed by FM Modem
-
-HOW IT WAS BUILT?
-==================
-These files are put inside target /etc/firmware/mtxxxx/
-
-HOW TO USE IT?
-==============
-These files can be push out/push in directely by adb command
-
-Change items' value of the Configure files mtXXXX_fm_cust.cfg would effect FM scan performance
-
-DSP patches mtxxxx_fm_vx_coeff.bin and mtxxxx_fm_vx_patch.bin are updated by MediaTek co..
-
-All the source code of this library were written by MediaTek co..
-
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6620/mt6620_fm_cust.cfg b/MediaTek/fmradiolibs/fmnative/config/mt6620/mt6620_fm_cust.cfg
deleted file mode 100644
index af31551..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6620/mt6620_fm_cust.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[FM Radio]
-#FM RX RSSI threshold setting
-FM_RX_RSSI_TH_LONG_MT6620 = -296
-FM_RX_RSSI_TH_SHORT_MT6620 = -296
-FM_RX_DESENSE_RSSI_MT6620 = -245
-FM_RX_SMG_TH_MT6620 = 6
-#deemphasis: 0-50us, China Mainland; 1-75us China Taiwan
-FM_RX_DEEMPHASIS_MT6620 = 0
-#osc freq: 0-26MHz; 1-19MHz; 2-24MHz; 3-38.4MHz; 4-40MHz; 5-52MHz
-FM_RX_OSC_FREQ_MT6620 = 0
-[FM Transmitter]
-#FMT_SCAN_HOLE_L_MT6620 = 976
-#FMT_SCAN_HOLE_H_MT6620 = 1011
-#FMT_PWR_LVL_MAX_MT6620 = 120
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6626/fm_cust.cfg b/MediaTek/fmradiolibs/fmnative/config/mt6626/fm_cust.cfg
deleted file mode 100755
index 57fa8d3..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6626/fm_cust.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-[FM Radio]
-#FM RX RSSI threshold setting
-FMR_RSSI_TH_L = 0xFF01
-FMR_RSSI_TH_S = 0xFEE0
-FMR_CQI_TH = 0x00E9
-FMR_MR_TH = 0x01BD
-#FM RX scan channel max number
-FMR_SCAN_CH_SIZE = 40
-#no sort:0, sort up:1, sort down:2
-FMR_SCAN_SORT = 0
-FMR_SEEK_SPACE = 1
-#FM RX band
-FMR_BAND = 1
-FMR_BAND_FREQ_L = 875
-FMR_BAND_FREQ_H = 1080
-FMR_FAKE_CH = 881
-FMR_FAKE_CH = 882
-FMR_FAKE_CH = 885
-FMR_FAKE_CH = 950
-FMR_FAKE_CH_RSSI = 40
-#deemphasis: 0-50us, China Mainland; 1-75us China Taiwan
-FMR_DEEMPHASIS = 0
-#osc freq: 0-26MHz; 1-19MHz; 2-24MHz; 3-38.4MHz; 4-40MHz; 5-52MHz
-FMR_OSC_FREQ = 0
-[FM Transmitter]
-FMT_SCAN_HOLE_L = 976
-FMT_SCAN_HOLE_H = 1011
-FMT_PWR_LVL_MAX = 120
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_cust.cfg b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_cust.cfg
deleted file mode 100755
index b0d532b..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_cust.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-[FM Radio]
-#FM RX RSSI threshold setting
-FM_RX_RSSI_TH_LONG_MT6627 = -296
-FM_RX_RSSI_TH_SHORT_MT6627 = -296
-FM_RX_DESENSE_RSSI_MT6627 = -240
-FM_RX_SMG_TH_MT6627 = 16421
-#deemphasis: 0-50us, China Mainland; 1-75us China Taiwan
-FM_RX_DEEMPHASIS_MT6627 = 0
-#osc freq: 0-26MHz; 1-19MHz; 2-24MHz; 3-38.4MHz; 4-40MHz; 5-52MHz
-FM_RX_OSC_FREQ_MT6627 = 0 \ No newline at end of file
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_coeff.bin
deleted file mode 100755
index efce968..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_coeff.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_patch.bin
deleted file mode 100755
index 929b4a6..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_patch.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_coeff.bin
deleted file mode 100755
index 136d063..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_coeff.bin
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_patch.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_patch.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_coeff.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_coeff.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_patch.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_patch.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_coeff.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_coeff.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_patch.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_patch.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_coeff.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_coeff.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_patch.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_patch.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/fm_cust.cfg b/MediaTek/fmradiolibs/fmnative/config/mt6628/fm_cust.cfg
deleted file mode 100755
index 168b0a6..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/fm_cust.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-[FM Radio]
-#FM RX RSSI threshold setting
-FM_RX_RSSI_TH_LONG_MT6628 = -296
-FM_RX_RSSI_TH_SHORT_MT6628 = -296
-FM_RX_DESENSE_RSSI_MT6628 = -240
-FM_RX_SMG_TH_MT6628 = 16421
-#deemphasis: 0-50us, China Mainland; 1-75us China Taiwan
-FM_RX_DEEMPHASIS_MT6628 = 0
-#osc freq: 0-26MHz; 1-19MHz; 2-24MHz; 3-38.4MHz; 4-40MHz; 5-52MHz
-FM_RX_OSC_FREQ_MT6628 = 0 \ No newline at end of file
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_rom.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_rom.bin
deleted file mode 100755
index adebd40..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_rom.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_coeff.bin
deleted file mode 100755
index 0f9f128..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_coeff.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_patch.bin
deleted file mode 100755
index 8161c8a..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_patch.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_coeff.bin
deleted file mode 100755
index ca0c6ad..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_coeff.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_patch.bin
deleted file mode 100755
index de87a87..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_patch.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_coeff.bin
deleted file mode 100755
index 523a0e8..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_coeff.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_patch.bin
deleted file mode 100755
index d8ae935..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_patch.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_coeff.bin
deleted file mode 100755
index 523a0e8..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_coeff.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_patch.bin
deleted file mode 100755
index d8ae935..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_patch.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_coeff.bin
deleted file mode 100755
index 523a0e8..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_coeff.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_patch.bin
deleted file mode 100755
index d8ae935..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_patch.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_cust.cfg b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_cust.cfg
deleted file mode 100755
index 9784030..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_cust.cfg
+++ /dev/null
@@ -1,8 +0,0 @@
-[FM Radio]
-#FM RX RSSI threshold setting
-FM_RX_RSSI_TH_LONG_MT6630 = -296
-FM_RX_RSSI_TH_SHORT_MT6630 = -296
-FM_RX_DESENSE_RSSI_MT6630 = -258
-FM_RX_SMG_TH_MT6630 = 16421
-#deemphasis: 0-50us, China Mainland; 1-75us China Taiwan
-FM_RX_DEEMPHASIS_MT6630 = 0
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff.bin
deleted file mode 100644
index 0bf54f8..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff_tx.bin
deleted file mode 100644
index 4744b8e..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff_tx.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch.bin
deleted file mode 100644
index c1b5664..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch_tx.bin
deleted file mode 100644
index 2419651..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch_tx.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff.bin
deleted file mode 100644
index 669349d..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff_tx.bin
deleted file mode 100644
index f709909..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff_tx.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch.bin
deleted file mode 100644
index b844c26..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch_tx.bin
deleted file mode 100644
index 829f661..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch_tx.bin
+++ /dev/null
Binary files differ
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff_tx.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff_tx.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch_tx.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch_tx.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff_tx.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff_tx.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch_tx.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch_tx.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff_tx.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff_tx.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch_tx.bin
deleted file mode 100644
index e69de29..0000000
--- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch_tx.bin
+++ /dev/null
diff --git a/MediaTek/fmradiolibs/fmnative/custom/Android.mk b/MediaTek/fmradiolibs/fmnative/custom/Android.mk
deleted file mode 100755
index f5dd6a0..0000000
--- a/MediaTek/fmradiolibs/fmnative/custom/Android.mk
+++ /dev/null
@@ -1,40 +0,0 @@
-ifeq ($(MTK_FM_SUPPORT), yes)
-
-LOCAL_PATH := $(call my-dir)
-###############################################################################
-# Define MTK FM Radio Chip solution
-###############################################################################
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- custom.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
-
-LOCAL_CFLAGS+= \
- -DMT6620_FM
-ifeq ($(findstring MT6628_FM,$(MTK_FM_CHIP)),MT6628_FM)
-LOCAL_CFLAGS+= \
- -DMT6628_FM
-endif
-LOCAL_CFLAGS+= \
- -DMT6627_FM
-ifeq ($(findstring MT6625_FM,$(MTK_FM_CHIP)),MT6625_FM)
-LOCAL_CFLAGS+= \
- -DMT6627_FM
-endif
-ifeq ($(findstring MT6580_FM,$(MTK_FM_CHIP)),MT6580_FM)
-LOCAL_CFLAGS+= \
- -DMT6580_FM
-endif
-LOCAL_CFLAGS+= \
- -DMT6630_FM
-LOCAL_SHARED_LIBRARIES := libcutils
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmcust
-include $(BUILD_SHARED_LIBRARY)
-
-endif
-
diff --git a/MediaTek/fmradiolibs/fmnative/custom/Android.mk~ b/MediaTek/fmradiolibs/fmnative/custom/Android.mk~
deleted file mode 100755
index f5dd6a0..0000000
--- a/MediaTek/fmradiolibs/fmnative/custom/Android.mk~
+++ /dev/null
@@ -1,40 +0,0 @@
-ifeq ($(MTK_FM_SUPPORT), yes)
-
-LOCAL_PATH := $(call my-dir)
-###############################################################################
-# Define MTK FM Radio Chip solution
-###############################################################################
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- custom.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
-
-LOCAL_CFLAGS+= \
- -DMT6620_FM
-ifeq ($(findstring MT6628_FM,$(MTK_FM_CHIP)),MT6628_FM)
-LOCAL_CFLAGS+= \
- -DMT6628_FM
-endif
-LOCAL_CFLAGS+= \
- -DMT6627_FM
-ifeq ($(findstring MT6625_FM,$(MTK_FM_CHIP)),MT6625_FM)
-LOCAL_CFLAGS+= \
- -DMT6627_FM
-endif
-ifeq ($(findstring MT6580_FM,$(MTK_FM_CHIP)),MT6580_FM)
-LOCAL_CFLAGS+= \
- -DMT6580_FM
-endif
-LOCAL_CFLAGS+= \
- -DMT6630_FM
-LOCAL_SHARED_LIBRARIES := libcutils
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmcust
-include $(BUILD_SHARED_LIBRARY)
-
-endif
-
diff --git a/MediaTek/fmradiolibs/fmnative/custom/NOTICE b/MediaTek/fmradiolibs/fmnative/custom/NOTICE
deleted file mode 100755
index 0519ecb..0000000
--- a/MediaTek/fmradiolibs/fmnative/custom/NOTICE
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/MediaTek/fmradiolibs/fmnative/custom/README b/MediaTek/fmradiolibs/fmnative/custom/README
deleted file mode 100644
index d6d4343..0000000
--- a/MediaTek/fmradiolibs/fmnative/custom/README
+++ /dev/null
@@ -1,20 +0,0 @@
-Initial parameters needed by FM before open it
-
-WHAT IT DOES?
-=============
-Initial parameters needed by FM before open it
-
-HOW IT WAS BUILT?
-==================
-It needs the following libs from AOSP:
-1. libcutils
-
-HOW TO USE IT?
-==============
-Files in this directory is used to
-generate a library which name is 'libfmcust'
-
-The lib 'libfmcust' is loaded when system up
-
-All the source code of this library were written by MediaTek co..
-
diff --git a/MediaTek/fmradiolibs/fmnative/custom/custom.cpp b/MediaTek/fmradiolibs/fmnative/custom/custom.cpp
deleted file mode 100644
index cf91007..0000000
--- a/MediaTek/fmradiolibs/fmnative/custom/custom.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include <sys/types.h>
-#include "fm.h"
-#include "fmlib_cust.h"
-#include <cutils/properties.h>
-#include <cutils/xlog.h>
-#undef LOGV
-#define LOGV(...) XLOGV(__VA_ARGS__)
-#undef LOGD
-#define LOGD(...) XLOGD(__VA_ARGS__)
-#undef LOGI
-#define LOGI(...) XLOGI(__VA_ARGS__)
-#undef LOGW
-#define LOGW(...) XLOGW(__VA_ARGS__)
-#undef LOGE
-#define LOGE(...) XLOGE(__VA_ARGS__)
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "FMLIB_CUST"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef MTK_FM_50KHZ_SUPPORT
-#define MT6620_FM_FAKE_CHANNEL \
- { \
- {10400, -40, -1}, \
- {9100, -40, -1}, \
- {9600, -40, -1}, \
- {9220, -80, -1} \
- }
-#define MT6628_FM_FAKE_CHANNEL \
- { }
-#define MT6627_FM_FAKE_CHANNEL \
-{ \
- {9600,-107,-1},\
- {10400,-107,-1},\
- {10750,-224,-1}\
-}
-#define MT6580_FM_FAKE_CHANNEL \
-{ \
- {9600,-107,-1},\
- {10400,-107,-1},\
-}
-
-#define MT6630_FM_FAKE_CHANNEL \
-{ \
- {9600,-107,-1},\
- {10400,-107,-1}\
-}
-#else
-#define MT6620_FM_FAKE_CHANNEL \
- { \
- {1040, -40, -1}, \
- {910, -40, -1}, \
- {960, -40, -1}, \
- {922, -80, -1} \
- }
-#define MT6628_FM_FAKE_CHANNEL \
- { }
-#define MT6627_FM_FAKE_CHANNEL \
-{ \
- {960,-107,-1},\
- {1040,-107,-1},\
- {1075,-224,-1}\
-}
-#define MT6580_FM_FAKE_CHANNEL \
-{ \
- {960,-107,-1},\
- {1040,-107,-1},\
-}
-#define MT6630_FM_FAKE_CHANNEL \
-{ \
- {960,-107,-1},\
- {1040,-107,-1}\
-}
-#endif //MTK_FM_50KHZ_SUPPORT
-
-#if defined MT6620_FM
-static struct fm_fake_channel fake_ch[] = MT6620_FM_FAKE_CHANNEL;
-#elif defined MT6628_FM
-static struct fm_fake_channel fake_ch[] = MT6628_FM_FAKE_CHANNEL;
-#elif defined MT6627_FM
-static struct fm_fake_channel fake_ch[] = MT6627_FM_FAKE_CHANNEL;
-#elif defined MT6580_FM
-static struct fm_fake_channel fake_ch[] = MT6580_FM_FAKE_CHANNEL;
-#elif defined MT6630_FM
-static struct fm_fake_channel fake_ch[] = MT6630_FM_FAKE_CHANNEL;
-#endif
-
-
-static struct fm_fake_channel_t fake_ch_info = {0, 0};
-
-int CUST_get_cfg(struct CUST_cfg_ds *cfg)
-{
- char val[PROPERTY_VALUE_MAX] = {0};//[10];
- cfg->chip = FM_CHIP_UNSUPPORTED;
- if(property_get("persist.mtk.wcn.combo.chipid",val,NULL))
- {
- LOGI("WCN CHIP ID=%s\n",val);
- if(strcmp(val, "0x6628") == 0)
- {
- cfg->chip = FM_CHIP_MT6628;
- LOGI("detect 6628 chip\n");
- }
- else if(strcmp(val, "0x6620") == 0)
- {
- cfg->chip = FM_CHIP_MT6620;
- LOGI("detect 6620 chip\n");
- }
- else if ((strcmp(val, "0x6572") == 0) || (strcmp(val, "0x6582") == 0) || (strcmp(val, "0x6592") == 0) \
- || (strcmp(val, "0x8127") == 0) || (strcmp(val, "0x6752") == 0) || (strcmp(val, "0x0321") == 0) \
- || (strcmp(val, "0x0335") == 0) || (strcmp(val, "0x0337") == 0) || (strcmp(val, "0x6735") == 0) \
- || (strcmp(val, "0x8163") == 0))
- {
- cfg->chip = FM_CHIP_MT6627;
- LOGI("detect 6627 chip\n");
- }
- else if(strcmp(val, "0x6580") == 0)
- {
- cfg->chip = FM_CHIP_MT6580;
- LOGI("detect 6580 chip\n");
- }
- else if(strcmp(val, "0x6630") == 0)
- {
- cfg->chip = FM_CHIP_MT6630;
- LOGI("detect 6630 chip\n");
- }
- }
- if(cfg->chip == FM_CHIP_UNSUPPORTED)
- {
- LOGI("WCN CHIP ID fail!\n");
-#ifdef AR1000_FM
- cfg->chip = FM_CHIP_AR1000;
-#elif defined MT6616_E3_FM
- cfg->chip = FM_CHIP_MT6616;
-#elif defined MT5192_FM
- cfg->chip = FM_CHIP_MT5192;
-#elif defined MT5193_FM
- cfg->chip = FM_CHIP_MT5193;
-#elif defined MT519X_FM
- cfg->chip = FM_CHIP_MT5192;
-#elif defined MT6620_FM
- cfg->chip = FM_CHIP_MT6620;
-#elif defined MT6626_FM
- cfg->chip = FM_CHIP_MT6626;
-#elif defined MT6628_FM
- cfg->chip = FM_CHIP_MT6628;
-#elif defined MT6627_FM
- cfg->chip = FM_CHIP_MT6627;
-#elif defined MT6580_FM
- cfg->chip = FM_CHIP_MT6580;
-#elif defined MT6630_FM
- cfg->chip = FM_CHIP_MT6630;
-#else
- cfg->chip = FM_CHIP_UNSUPPORTED;
-#endif
- }
-
-
- cfg->band = FM_RAIDO_BAND; // 1, UE; 2, JAPAN; 3, JAPANW
-#ifdef MTK_FM_50KHZ_SUPPORT
- cfg->low_band = FM_FREQ_MIN * 10;
- cfg->high_band = FM_FREQ_MAX * 10;
-#else
- cfg->low_band = FM_FREQ_MIN;
- cfg->high_band = FM_FREQ_MAX;
-#endif
-#ifdef MTK_FM_50KHZ_SUPPORT
- cfg->seek_space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ
-#else
- cfg->seek_space = 1;
-#endif
-
- cfg->max_scan_num = FM_MAX_CHL_SIZE;
- cfg->seek_lev = FM_SEEKTH_LEVEL_DEFAULT;
-
- cfg->scan_sort = FM_SCAN_SORT_SELECT;
-
-#ifndef MTK_FM_SHORT_ANTENNA_SUPPORT
- cfg->short_ana_sup = false;
-#else
- cfg->short_ana_sup = true;
-#endif
-
- cfg->rssi_th_l2 = FM_CHIP_DESE_RSSI_TH;
- cfg->rssi_th_l2 = (cfg->rssi_th_l2 > -72) ? -72 : cfg->rssi_th_l2;
- cfg->rssi_th_l2 = (cfg->rssi_th_l2 < -102) ? -102 : cfg->rssi_th_l2;
-
- fake_ch_info.chan = fake_ch;
- fake_ch_info.size = sizeof(fake_ch)/sizeof(fake_ch[0]);
- cfg->fake_chan = &fake_ch_info;
- return 0;
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/MediaTek/fmradiolibs/fmnative/custom/custom.cpp~ b/MediaTek/fmradiolibs/fmnative/custom/custom.cpp~
deleted file mode 100644
index 076e968..0000000
--- a/MediaTek/fmradiolibs/fmnative/custom/custom.cpp~
+++ /dev/null
@@ -1,237 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include <sys/types.h>
-#include <linux/fm.h>
-#include "fmlib_cust.h"
-#include <cutils/properties.h>
-#include <cutils/xlog.h>
-#undef LOGV
-#define LOGV(...) XLOGV(__VA_ARGS__)
-#undef LOGD
-#define LOGD(...) XLOGD(__VA_ARGS__)
-#undef LOGI
-#define LOGI(...) XLOGI(__VA_ARGS__)
-#undef LOGW
-#define LOGW(...) XLOGW(__VA_ARGS__)
-#undef LOGE
-#define LOGE(...) XLOGE(__VA_ARGS__)
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "FMLIB_CUST"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef MTK_FM_50KHZ_SUPPORT
-#define MT6620_FM_FAKE_CHANNEL \
- { \
- {10400, -40, -1}, \
- {9100, -40, -1}, \
- {9600, -40, -1}, \
- {9220, -80, -1} \
- }
-#define MT6628_FM_FAKE_CHANNEL \
- { }
-#define MT6627_FM_FAKE_CHANNEL \
-{ \
- {9600,-107,-1},\
- {10400,-107,-1},\
- {10750,-224,-1}\
-}
-#define MT6580_FM_FAKE_CHANNEL \
-{ \
- {9600,-107,-1},\
- {10400,-107,-1},\
-}
-
-#define MT6630_FM_FAKE_CHANNEL \
-{ \
- {9600,-107,-1},\
- {10400,-107,-1}\
-}
-#else
-#define MT6620_FM_FAKE_CHANNEL \
- { \
- {1040, -40, -1}, \
- {910, -40, -1}, \
- {960, -40, -1}, \
- {922, -80, -1} \
- }
-#define MT6628_FM_FAKE_CHANNEL \
- { }
-#define MT6627_FM_FAKE_CHANNEL \
-{ \
- {960,-107,-1},\
- {1040,-107,-1},\
- {1075,-224,-1}\
-}
-#define MT6580_FM_FAKE_CHANNEL \
-{ \
- {960,-107,-1},\
- {1040,-107,-1},\
-}
-#define MT6630_FM_FAKE_CHANNEL \
-{ \
- {960,-107,-1},\
- {1040,-107,-1}\
-}
-#endif //MTK_FM_50KHZ_SUPPORT
-
-#if defined MT6620_FM
-static struct fm_fake_channel fake_ch[] = MT6620_FM_FAKE_CHANNEL;
-#elif defined MT6628_FM
-static struct fm_fake_channel fake_ch[] = MT6628_FM_FAKE_CHANNEL;
-#elif defined MT6627_FM
-static struct fm_fake_channel fake_ch[] = MT6627_FM_FAKE_CHANNEL;
-#elif defined MT6580_FM
-static struct fm_fake_channel fake_ch[] = MT6580_FM_FAKE_CHANNEL;
-#elif defined MT6630_FM
-static struct fm_fake_channel fake_ch[] = MT6630_FM_FAKE_CHANNEL;
-#endif
-
-
-static struct fm_fake_channel_t fake_ch_info = {0, 0};
-
-int CUST_get_cfg(struct CUST_cfg_ds *cfg)
-{
- char val[PROPERTY_VALUE_MAX] = {0};//[10];
- cfg->chip = FM_CHIP_UNSUPPORTED;
- if(property_get("persist.mtk.wcn.combo.chipid",val,NULL))
- {
- LOGI("WCN CHIP ID=%s\n",val);
- if(strcmp(val, "0x6628") == 0)
- {
- cfg->chip = FM_CHIP_MT6628;
- LOGI("detect 6628 chip\n");
- }
- else if(strcmp(val, "0x6620") == 0)
- {
- cfg->chip = FM_CHIP_MT6620;
- LOGI("detect 6620 chip\n");
- }
- else if ((strcmp(val, "0x6572") == 0) || (strcmp(val, "0x6582") == 0) || (strcmp(val, "0x6592") == 0) \
- || (strcmp(val, "0x8127") == 0) || (strcmp(val, "0x6752") == 0) || (strcmp(val, "0x0321") == 0) \
- || (strcmp(val, "0x0335") == 0) || (strcmp(val, "0x0337") == 0) || (strcmp(val, "0x6735") == 0) \
- || (strcmp(val, "0x8163") == 0))
- {
- cfg->chip = FM_CHIP_MT6627;
- LOGI("detect 6627 chip\n");
- }
- else if(strcmp(val, "0x6580") == 0)
- {
- cfg->chip = FM_CHIP_MT6580;
- LOGI("detect 6580 chip\n");
- }
- else if(strcmp(val, "0x6630") == 0)
- {
- cfg->chip = FM_CHIP_MT6630;
- LOGI("detect 6630 chip\n");
- }
- }
- if(cfg->chip == FM_CHIP_UNSUPPORTED)
- {
- LOGI("WCN CHIP ID fail!\n");
-#ifdef AR1000_FM
- cfg->chip = FM_CHIP_AR1000;
-#elif defined MT6616_E3_FM
- cfg->chip = FM_CHIP_MT6616;
-#elif defined MT5192_FM
- cfg->chip = FM_CHIP_MT5192;
-#elif defined MT5193_FM
- cfg->chip = FM_CHIP_MT5193;
-#elif defined MT519X_FM
- cfg->chip = FM_CHIP_MT5192;
-#elif defined MT6620_FM
- cfg->chip = FM_CHIP_MT6620;
-#elif defined MT6626_FM
- cfg->chip = FM_CHIP_MT6626;
-#elif defined MT6628_FM
- cfg->chip = FM_CHIP_MT6628;
-#elif defined MT6627_FM
- cfg->chip = FM_CHIP_MT6627;
-#elif defined MT6580_FM
- cfg->chip = FM_CHIP_MT6580;
-#elif defined MT6630_FM
- cfg->chip = FM_CHIP_MT6630;
-#else
- cfg->chip = FM_CHIP_UNSUPPORTED;
-#endif
- }
-
-
- cfg->band = FM_RAIDO_BAND; // 1, UE; 2, JAPAN; 3, JAPANW
-#ifdef MTK_FM_50KHZ_SUPPORT
- cfg->low_band = FM_FREQ_MIN * 10;
- cfg->high_band = FM_FREQ_MAX * 10;
-#else
- cfg->low_band = FM_FREQ_MIN;
- cfg->high_band = FM_FREQ_MAX;
-#endif
-#ifdef MTK_FM_50KHZ_SUPPORT
- cfg->seek_space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ
-#else
- cfg->seek_space = 1;
-#endif
-
- cfg->max_scan_num = FM_MAX_CHL_SIZE;
- cfg->seek_lev = FM_SEEKTH_LEVEL_DEFAULT;
-
- cfg->scan_sort = FM_SCAN_SORT_SELECT;
-
-#ifndef MTK_FM_SHORT_ANTENNA_SUPPORT
- cfg->short_ana_sup = false;
-#else
- cfg->short_ana_sup = true;
-#endif
-
- cfg->rssi_th_l2 = FM_CHIP_DESE_RSSI_TH;
- cfg->rssi_th_l2 = (cfg->rssi_th_l2 > -72) ? -72 : cfg->rssi_th_l2;
- cfg->rssi_th_l2 = (cfg->rssi_th_l2 < -102) ? -102 : cfg->rssi_th_l2;
-
- fake_ch_info.chan = fake_ch;
- fake_ch_info.size = sizeof(fake_ch)/sizeof(fake_ch[0]);
- cfg->fake_chan = &fake_ch_info;
- return 0;
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/MediaTek/fmradiolibs/fmnative/custom/fm.h b/MediaTek/fmradiolibs/fmnative/custom/fm.h
deleted file mode 100644
index ca232c7..0000000
--- a/MediaTek/fmradiolibs/fmnative/custom/fm.h
+++ /dev/null
@@ -1,656 +0,0 @@
-#ifndef __FM_H__
-#define __FM_H__
-
-//#define FMDEBUG
-
-#include <linux/ioctl.h>
-#include <linux/time.h>
-//fm type define
-typedef signed char fm_s8;
-typedef signed short fm_s16;
-typedef signed int fm_s32;
-typedef signed long long fm_s64;
-typedef unsigned char fm_u8;
-typedef unsigned short fm_u16;
-typedef unsigned int fm_u32;
-typedef unsigned long long fm_u64;
-typedef enum fm_bool {
- fm_false = 0,
- fm_true = 1
-} fm_bool;
-
-//scan sort algorithm
-enum{
- FM_SCAN_SORT_NON = 0,
- FM_SCAN_SORT_UP,
- FM_SCAN_SORT_DOWN,
- FM_SCAN_SORT_MAX
-};
-
-//scan methods
-enum{
- FM_SCAN_SEL_HW = 0, //select hardware scan, advantage: fast
- FM_SCAN_SEL_SW, //select software scan, advantage: more accurate
- FM_SCAN_SEL_MAX
-};
-
- //*****************************************************************************************
-//***********************************FM config for customer ***********************************
-//*****************************************************************************************
-//RX
-#define FMR_RSSI_TH_LONG 0x0301 //FM radio long antenna RSSI threshold(11.375dBuV)
-#define FMR_RSSI_TH_SHORT 0x02E0 //FM radio short antenna RSSI threshold(-1dBuV)
-#define FMR_CQI_TH 0x00E9 //FM radio Channel quality indicator threshold(0x0000~0x00FF)
-#define FMR_SEEK_SPACE 1 //FM radio seek space,1:100KHZ; 2:200KHZ
-#define FMR_SCAN_CH_SIZE 80 //FM radio scan max channel size
-#define FMR_BAND 1 //FM radio band, 1:87.5MHz~108.0MHz; 2:76.0MHz~90.0MHz; 3:76.0MHz~108.0MHz; 4:special
-#define FMR_BAND_FREQ_L 875 //FM radio special band low freq(Default 87.5MHz)
-#define FMR_BAND_FREQ_H 1080 //FM radio special band high freq(Default 108.0MHz)
-#define FM_SCAN_SORT_SELECT FM_SCAN_SORT_NON
-#define FM_SCAN_SELECT FM_SCAN_SEL_HW
-#define FM_SCAN_SOFT_MUTE_GAIN_TH 3 //soft-mute threshold when software scan, rang: 0~3, 0 means better audio quality but less channel
-#define FM_CHIP_DESE_RSSI_TH (-102) // rang: -102 ~ -72
-
-//TX
-#define FMTX_PWR_LEVEL_MAX 120 //FM transmitter power level, rang: 85db~120db, default 120db
-
-//*****************************************************************************************
-//***********************************FM config for engineer ***********************************
-//*****************************************************************************************
-//RX
-#define FMR_MR_TH 0x01BD //FM radio MR threshold
-#define ADDR_SCAN_TH 0xE0 //scan thrshold register
-#define ADDR_CQI_TH 0xE1 //scan CQI register
-
-//TX
-#define FMTX_SCAN_HOLE_LOW 923 //92.3MHz~95.4MHz should not show to user
-#define FMTX_SCAN_HOLE_HIGH 954 //92.3MHz~95.4MHz should not show to user
-//*****************************************************************************************
-
-#define FM_NAME "fm"
-#define FM_DEVICE_NAME "/dev/fm"
-
-// errno
-#define FM_SUCCESS 0
-#define FM_FAILED 1
-#define FM_EPARM 2
-#define FM_BADSTATUS 3
-#define FM_TUNE_FAILED 4
-#define FM_SEEK_FAILED 5
-#define FM_BUSY 6
-#define FM_SCAN_FAILED 7
-
-// band
-
-#define FM_BAND_UNKNOWN 0
-#define FM_BAND_UE 1 // US/Europe band 87.5MHz ~ 108MHz (DEFAULT)
-#define FM_BAND_JAPAN 2 // Japan band 76MHz ~ 90MHz
-#define FM_BAND_JAPANW 3 // Japan wideband 76MHZ ~ 108MHz
-#define FM_BAND_SPECIAL 4 // special band between 76MHZ and 108MHz
-#define FM_BAND_DEFAULT FM_BAND_UE
-
-#define FM_UE_FREQ_MIN 875
-#define FM_UE_FREQ_MAX 1080
-#define FM_JP_FREQ_MIN 760
-#define FM_JP_FREQ_MAX 1080
-#define FM_FREQ_MIN FMR_BAND_FREQ_L
-#define FM_FREQ_MAX FMR_BAND_FREQ_H
-#define FM_RAIDO_BAND FM_BAND_UE
-
-// space
-#define FM_SPACE_UNKNOWN 0
-#define FM_SPACE_100K 1
-#define FM_SPACE_200K 2
-#define FM_SPACE_50K 5
-
-#define FM_SEEK_SPACE FMR_SEEK_SPACE
-
-//max scan chl num
-#define FM_MAX_CHL_SIZE FMR_SCAN_CH_SIZE
-// auto HiLo
-#define FM_AUTO_HILO_OFF 0
-#define FM_AUTO_HILO_ON 1
-
-// seek direction
-#define FM_SEEK_UP 0
-#define FM_SEEK_DOWN 1
-
-#define FM_CHIP_AR1000 0x1000
-#define FM_CHIP_MT5192 0x91
-#define FM_CHIP_MT5193 0x92
-#define FM_CHIP_MT6616 0x6616
-#define FM_CHIP_MT6620 0x6620
-#define FM_CHIP_MT6626 0x6626
-#define FM_CHIP_MT6628 0x6628
-#define FM_CHIP_MT6627 0x6627
-#define FM_CHIP_MT6580 0x6580
-#define FM_CHIP_MT6630 0x6630
-
-#define FM_CHIP_UNSUPPORTED -1
-
-// seek threshold
-#define FM_SEEKTH_LEVEL_DEFAULT 4
-
-struct fm_tune_parm {
- uint8_t err;
- uint8_t band;
- uint8_t space;
- uint8_t hilo;
- uint16_t freq; // IN/OUT parameter
-};
-
-struct fm_seek_parm {
- uint8_t err;
- uint8_t band;
- uint8_t space;
- uint8_t hilo;
- uint8_t seekdir;
- uint8_t seekth;
- uint16_t freq; // IN/OUT parameter
-};
-
-struct fm_scan_parm {
- uint8_t err;
- uint8_t band;
- uint8_t space;
- uint8_t hilo;
- uint16_t freq; // OUT parameter
- uint16_t ScanTBL[26]; //need no less than the chip
- uint16_t ScanTBLSize; //IN/OUT parameter
-};
-
-struct fm_ch_rssi{
- uint16_t freq;
- int rssi;
-};
-
-enum fm_scan_cmd_t {
- FM_SCAN_CMD_INIT = 0,
- FM_SCAN_CMD_START,
- FM_SCAN_CMD_GET_NUM,
- FM_SCAN_CMD_GET_CH,
- FM_SCAN_CMD_GET_RSSI,
- FM_SCAN_CMD_GET_CH_RSSI,
- FM_SCAN_CMD_MAX
-};
-
-struct fm_scan_t {
- enum fm_scan_cmd_t cmd;
- int ret; // 0, success; else error code
- uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
- uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
- int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz
- int num; // valid channel number
- void *priv;
- int sr_size; // scan result buffer size in bytes
- union {
- uint16_t *ch_buf; // channel buffer
- int *rssi_buf; // rssi buffer
- struct fm_ch_rssi *ch_rssi_buf; //channel and RSSI buffer
- } sr;
-};
-
-struct fm_seek_t {
- int ret; // 0, success; else error code
- uint16_t freq;
- uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
- uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
- int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz
- int dir; // 0: up; 1: down
- int th; // seek threshold in dbm(Eg, -95dbm)
- void *priv;
-};
-
-struct fm_tune_t {
- int ret; // 0, success; else error code
- uint16_t freq;
- uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
- uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
- int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz
- void *priv;
-};
-struct fm_softmute_tune_t
-{
- fm_s32 rssi; // RSSI of current channel
- fm_u16 freq; //current frequency
- fm_bool valid; //current channel is valid(true) or not(false)
-};
-
-struct fm_rssi_req{
- uint16_t num;
- uint16_t read_cnt;
- struct fm_ch_rssi cr[26*16];
-};
-
-struct fm_hw_info{
- int chip_id; //chip ID, eg. 6620
- int eco_ver; //chip ECO version, eg. E3
- int rom_ver; //FM DSP rom code version, eg. V2
- int patch_ver; //FM DSP patch version, eg. 1.11
- int reserve;
-};
-
-struct fm_search_threshold_t
-{
- fm_s32 th_type;// 0, RSSI. 1,desense RSSI. 2,SMG.
- fm_s32 th_val; //threshold value
- fm_s32 reserve;
-};
-
-#if 1
-#define NEED_DEF_RDS 1
-#else
-#define NEED_DEF_RDS 0
-#endif
-
-#if NEED_DEF_RDS
-//For RDS feature
-typedef struct
-{
- uint8_t TP;
- uint8_t TA;
- uint8_t Music;
- uint8_t Stereo;
- uint8_t Artificial_Head;
- uint8_t Compressed;
- uint8_t Dynamic_PTY;
- uint8_t Text_AB;
- uint32_t flag_status;
-}RDSFlag_Struct;
-
-typedef struct
-{
- uint16_t Month;
- uint16_t Day;
- uint16_t Year;
- uint16_t Hour;
- uint16_t Minute;
- uint8_t Local_Time_offset_signbit;
- uint8_t Local_Time_offset_half_hour;
-}CT_Struct;
-
-typedef struct
-{
- int16_t AF_Num;
- int16_t AF[2][25]; //100KHz
- uint8_t Addr_Cnt;
- uint8_t isMethod_A;
- uint8_t isAFNum_Get;
-}AF_Info;
-
-typedef struct
-{
- uint8_t PS[4][8];
- uint8_t Addr_Cnt;
-}PS_Info;
-
-typedef struct
-{
- uint8_t TextData[4][64];
- uint8_t GetLength;
- uint8_t isRTDisplay;
- uint8_t TextLength;
- uint8_t isTypeA;
- uint8_t BufCnt;
- uint16_t Addr_Cnt;
-}RT_Info;
-
-struct rds_raw_data
-{
- int dirty; //indicate if the data changed or not
- int len; //the data len form chip
- uint8_t data[146];
-};
-
-struct rds_group_cnt
-{
- unsigned int total;
- unsigned int groupA[16]; //RDS groupA counter
- unsigned int groupB[16]; //RDS groupB counter
-};
-
-enum rds_group_cnt_opcode
-{
- RDS_GROUP_CNT_READ = 0,
- RDS_GROUP_CNT_WRITE,
- RDS_GROUP_CNT_RESET,
- RDS_GROUP_CNT_MAX
-};
-
-struct rds_group_cnt_req
-{
- int err;
- enum rds_group_cnt_opcode op;
- struct rds_group_cnt gc;
-};
-
-typedef struct
-{
- CT_Struct CT;
- RDSFlag_Struct RDSFlag;
- uint16_t PI;
- uint8_t Switch_TP;
- uint8_t PTY;
- AF_Info AF_Data;
- uint8_t Radio_Page_Code;
- uint16_t Program_Item_Number_Code;
- AF_Info AFON_Data;
- uint8_t Extend_Country_Code;
- uint16_t Language_Code;
- PS_Info PS_Data;
- uint8_t PS_ON[8];
- uint16_t event_status; //will use RDSFlag_Struct RDSFlag->flag_status to check which event, is that ok?
- RT_Info RT_Data;
- uint8_t PAD1; //padding for data aligh
- struct rds_group_cnt gc;
-} RDSData_Struct;
-
-
-//Need care the following definition.
-//valid Rds Flag for notify
-typedef enum {
- RDS_FLAG_IS_TP = 0x0001, // Program is a traffic program
- RDS_FLAG_IS_TA = 0x0002, // Program currently broadcasts a traffic ann.
- RDS_FLAG_IS_MUSIC = 0x0004, // Program currently broadcasts music
- RDS_FLAG_IS_STEREO = 0x0008, // Program is transmitted in stereo
- RDS_FLAG_IS_ARTIFICIAL_HEAD = 0x0010, // Program is an artificial head recording
- RDS_FLAG_IS_COMPRESSED = 0x0020, // Program content is compressed
- RDS_FLAG_IS_DYNAMIC_PTY = 0x0040, // Program type can change
- RDS_FLAG_TEXT_AB = 0x0080 // If this flag changes state, a new radio text string begins
-} RdsFlag;
-
-typedef enum {
- RDS_EVENT_FLAGS = 0x0001, // One of the RDS flags has changed state
- RDS_EVENT_PI_CODE = 0x0002, // The program identification code has changed
- RDS_EVENT_PTY_CODE = 0x0004, // The program type code has changed
- RDS_EVENT_PROGRAMNAME = 0x0008, // The program name has changed
- RDS_EVENT_UTCDATETIME = 0x0010, // A new UTC date/time is available
- RDS_EVENT_LOCDATETIME = 0x0020, // A new local date/time is available
- RDS_EVENT_LAST_RADIOTEXT = 0x0040, // A radio text string was completed
- RDS_EVENT_AF = 0x0080, // Current Channel RF signal strength too weak, need do AF switch
- RDS_EVENT_AF_LIST = 0x0100, // An alternative frequency list is ready
- RDS_EVENT_AFON_LIST = 0x0200, // An alternative frequency list is ready
- RDS_EVENT_TAON = 0x0400, // Other Network traffic announcement start
- RDS_EVENT_TAON_OFF = 0x0800, // Other Network traffic announcement finished.
- RDS_EVENT_RDS = 0x2000, // RDS Interrupt had arrived durint timer period
- RDS_EVENT_NO_RDS = 0x4000, // RDS Interrupt not arrived durint timer period
- RDS_EVENT_RDS_TIMER = 0x8000 // Timer for RDS Bler Check. ---- BLER block error rate
-} RdsEvent;
-#endif
-
-struct fm_rds_tx_parm {
- uint8_t err;
- uint16_t pi;
- uint16_t ps[12]; // 4 ps
- uint16_t other_rds[87]; // 0~29 other groups
- uint8_t other_rds_cnt; // # of other group
-};
-
-typedef struct fm_rds_tx_req{
- unsigned char pty; // 0~31 integer
- unsigned char rds_rbds; // 0:RDS, 1:RBDS
- unsigned char dyn_pty; // 0:static, 1:dynamic
- unsigned short pi_code; // 2-byte hex
- unsigned char ps_buf[8]; // hex buf of PS
- unsigned char ps_len; // length of PS, must be 0 / 8"
- unsigned char af; // 0~204, 0:not used, 1~204:(87.5+0.1*af)MHz
- unsigned char ah; // Artificial head, 0:no, 1:yes
- unsigned char stereo; // 0:mono, 1:stereo
- unsigned char compress; // Audio compress, 0:no, 1:yes
- unsigned char tp; // traffic program, 0:no, 1:yes
- unsigned char ta; // traffic announcement, 0:no, 1:yes
- unsigned char speech; // 0:music, 1:speech
-}fm_rds_tx_req;
-
-#define TX_SCAN_MAX 10
-#define TX_SCAN_MIN 1
-struct fm_tx_scan_parm {
- uint8_t err;
- uint8_t band; //87.6~108MHz
- uint8_t space;
- uint8_t hilo;
- uint16_t freq; // start freq, if less than band min freq, then will use band min freq
- uint8_t scandir;
- uint16_t ScanTBL[TX_SCAN_MAX]; //need no less than the chip
- uint16_t ScanTBLSize; //IN: desired size, OUT: scan result size
-};
-
-struct fm_gps_rtc_info{
- int err; //error number, 0: success, other: err code
- int retryCnt; //GPS mnl can decide retry times
- int ageThd; //GPS 3D fix time diff threshold
- int driftThd; //GPS RTC drift threshold
- struct timeval tvThd; //time value diff threshold
- int age; //GPS 3D fix time diff
- int drift; //GPS RTC drift
- union{
- unsigned long stamp; //time stamp in jiffies
- struct timeval tv; //time stamp value in RTC
- };
- int flag; //rw flag
-};
-
-typedef enum
-{
- FM_I2S_ON = 0,
- FM_I2S_OFF,
- FM_I2S_STATE_ERR
-}fm_i2s_state_e;
-
-typedef enum
-{
- FM_I2S_MASTER = 0,
- FM_I2S_SLAVE,
- FM_I2S_MODE_ERR
-}fm_i2s_mode_e;
-
-typedef enum
-{
- FM_I2S_32K = 0,
- FM_I2S_44K,
- FM_I2S_48K,
- FM_I2S_SR_ERR
-}fm_i2s_sample_e;
-
-struct fm_i2s_setting{
- int onoff;
- int mode;
- int sample;
-};
-
-typedef enum{
- FM_RX = 0,
- FM_TX = 1
-}FM_PWR_T;
-
-typedef struct fm_i2s_info
-{
- int status; /*0:FM_I2S_ON, 1:FM_I2S_OFF,2:error*/
- int mode; /*0:FM_I2S_MASTER, 1:FM_I2S_SLAVE,2:error*/
- int rate; /*0:FM_I2S_32K:32000,1:FM_I2S_44K:44100,2:FM_I2S_48K:48000,3:error*/
-} fm_i2s_info_t;
-
-typedef enum
-{
- FM_AUD_ANALOG = 0,
- FM_AUD_I2S = 1,
- FM_AUD_MRGIF = 2,
- FM_AUD_ERR
-}fm_audio_path_e;
-
-typedef enum
-{
- FM_I2S_PAD_CONN = 0, //sco fm chip: e.g.6627
- FM_I2S_PAD_IO = 1, //combo fm chip: e.g.6628
- FM_I2S_PAD_ERR
-}fm_i2s_pad_sel_e;
-
-typedef struct fm_audio_info
-{
- fm_audio_path_e aud_path;
- fm_i2s_info_t i2s_info;
- fm_i2s_pad_sel_e i2s_pad;
-} fm_audio_info_t;
-
-struct fm_cqi
-{
- int ch;
- int rssi;
- int reserve;
-};
-
-struct fm_cqi_req
-{
- uint16_t ch_num;
- int buf_size;
- char *cqi_buf;
-};
-typedef struct
-{
- int freq;
- int rssi;
-}fm_desense_check_t;
-
-typedef struct
-{
- uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
- uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
- int space; // 0x1: 50KHz, 0x2: 100Khz, 0x4: 200Khz
- int cycle; // repeat times
-}fm_full_cqi_log_t;
-
-typedef struct
-{
- int which;
- bool stat;
-}fm_status_t;
-
-// ********** ***********FM IOCTL define start *******************************
-
-#define FM_IOC_MAGIC 0xf5 // FIXME: any conflict?
-
-#define FM_IOCTL_POWERUP _IOWR(FM_IOC_MAGIC, 0, struct fm_tune_parm)
-#define FM_IOCTL_POWERDOWN _IOWR(FM_IOC_MAGIC, 1, int32_t)
-#define FM_IOCTL_TUNE _IOWR(FM_IOC_MAGIC, 2, struct fm_tune_parm)
-#define FM_IOCTL_SEEK _IOWR(FM_IOC_MAGIC, 3, struct fm_seek_parm)
-#define FM_IOCTL_SETVOL _IOWR(FM_IOC_MAGIC, 4, uint32_t)
-#define FM_IOCTL_GETVOL _IOWR(FM_IOC_MAGIC, 5, uint32_t)
-#define FM_IOCTL_MUTE _IOWR(FM_IOC_MAGIC, 6, uint32_t)
-#define FM_IOCTL_GETRSSI _IOWR(FM_IOC_MAGIC, 7, int32_t)
-#define FM_IOCTL_SCAN _IOWR(FM_IOC_MAGIC, 8, struct fm_scan_parm)
-#define FM_IOCTL_STOP_SCAN _IO(FM_IOC_MAGIC, 9)
-
-//IOCTL and struct for test
-#define FM_IOCTL_GETCHIPID _IOWR(FM_IOC_MAGIC, 10, uint16_t)
-#define FM_IOCTL_EM_TEST _IOWR(FM_IOC_MAGIC, 11, struct fm_em_parm)
-#define FM_IOCTL_RW_REG _IOWR(FM_IOC_MAGIC, 12, struct fm_ctl_parm)
-#define FM_IOCTL_GETMONOSTERO _IOWR(FM_IOC_MAGIC, 13, uint16_t)
-#define FM_IOCTL_GETCURPAMD _IOWR(FM_IOC_MAGIC, 14, uint16_t)
-#define FM_IOCTL_GETGOODBCNT _IOWR(FM_IOC_MAGIC, 15, uint16_t)
-#define FM_IOCTL_GETBADBNT _IOWR(FM_IOC_MAGIC, 16, uint16_t)
-#define FM_IOCTL_GETBLERRATIO _IOWR(FM_IOC_MAGIC, 17, uint16_t)
-
-//IOCTL for RDS
-#define FM_IOCTL_RDS_ONOFF _IOWR(FM_IOC_MAGIC, 18, uint16_t)
-#define FM_IOCTL_RDS_SUPPORT _IOWR(FM_IOC_MAGIC, 19, int32_t)
-
-#define FM_IOCTL_POWERUP_TX _IOWR(FM_IOC_MAGIC, 20, struct fm_tune_parm)
-#define FM_IOCTL_TUNE_TX _IOWR(FM_IOC_MAGIC, 21, struct fm_tune_parm)
-#define FM_IOCTL_RDS_TX _IOWR(FM_IOC_MAGIC, 22, struct fm_rds_tx_parm)
-
-#define FM_IOCTL_RDS_SIM_DATA _IOWR(FM_IOC_MAGIC, 23, uint32_t)
-#define FM_IOCTL_IS_FM_POWERED_UP _IOWR(FM_IOC_MAGIC, 24, uint32_t)
-
-//IOCTL for FM Tx
-#define FM_IOCTL_TX_SUPPORT _IOWR(FM_IOC_MAGIC, 25, int32_t)
-#define FM_IOCTL_RDSTX_SUPPORT _IOWR(FM_IOC_MAGIC, 26, int32_t)
-#define FM_IOCTL_RDSTX_ENABLE _IOWR(FM_IOC_MAGIC, 27, int32_t)
-#define FM_IOCTL_TX_SCAN _IOWR(FM_IOC_MAGIC, 28, struct fm_tx_scan_parm)
-
-//IOCTL for FM over BT
-#define FM_IOCTL_OVER_BT_ENABLE _IOWR(FM_IOC_MAGIC, 29, int32_t)
-
-//IOCTL for FM ANTENNA SWITCH
-#define FM_IOCTL_ANA_SWITCH _IOWR(FM_IOC_MAGIC, 30, int32_t)
-#define FM_IOCTL_GETCAPARRAY _IOWR(FM_IOC_MAGIC, 31, int32_t)
-
-//IOCTL for FM compensation by GPS RTC
-#define FM_IOCTL_GPS_RTC_DRIFT _IOWR(FM_IOC_MAGIC, 32, struct fm_gps_rtc_info)
-
-//IOCTL for FM I2S Setting
-#define FM_IOCTL_I2S_SETTING _IOWR(FM_IOC_MAGIC, 33, struct fm_i2s_setting)
-
-#define FM_IOCTL_RDS_GROUPCNT _IOWR(FM_IOC_MAGIC, 34, struct rds_group_cnt_req)
-#define FM_IOCTL_RDS_GET_LOG _IOWR(FM_IOC_MAGIC, 35, struct rds_raw_data)
-
-#define FM_IOCTL_SCAN_GETRSSI _IOWR(FM_IOC_MAGIC, 36, struct fm_rssi_req)
-#define FM_IOCTL_SETMONOSTERO _IOWR(FM_IOC_MAGIC, 37, int32_t)
-#define FM_IOCTL_RDS_BC_RST _IOWR(FM_IOC_MAGIC, 38, int32_t)
-#define FM_IOCTL_CQI_GET _IOWR(FM_IOC_MAGIC, 39, struct fm_cqi_req)
-#define FM_IOCTL_GET_HW_INFO _IOWR(FM_IOC_MAGIC, 40, struct fm_hw_info)
-#define FM_IOCTL_GET_I2S_INFO _IOWR(FM_IOC_MAGIC, 41, fm_i2s_info_t)
-#define FM_IOCTL_IS_DESE_CHAN _IOWR(FM_IOC_MAGIC, 42, int32_t)
-#define FM_IOCTL_TOP_RDWR _IOWR(FM_IOC_MAGIC, 43, struct fm_top_rw_parm)
-#define FM_IOCTL_HOST_RDWR _IOWR(FM_IOC_MAGIC, 44, struct fm_host_rw_parm)
-
-#define FM_IOCTL_PRE_SEARCH _IOWR(FM_IOC_MAGIC, 45,int32_t)
-#define FM_IOCTL_RESTORE_SEARCH _IOWR(FM_IOC_MAGIC, 46,int32_t)
-
-#define FM_IOCTL_SET_SEARCH_THRESHOLD _IOWR(FM_IOC_MAGIC, 47, fm_search_threshold_t)
-
-#define FM_IOCTL_GET_AUDIO_INFO _IOWR(FM_IOC_MAGIC, 48, fm_audio_info_t)
-#define FM_IOCTL_FM_SET_STATUS _IOWR(FM_IOC_MAGIC, 49, fm_status_t)
-#define FM_IOCTL_FM_GET_STATUS _IOWR(FM_IOC_MAGIC, 50, fm_status_t)
-
-#define FM_IOCTL_SCAN_NEW _IOWR(FM_IOC_MAGIC, 60, struct fm_scan_t)
-#define FM_IOCTL_SEEK_NEW _IOWR(FM_IOC_MAGIC, 61, struct fm_seek_t)
-#define FM_IOCTL_TUNE_NEW _IOWR(FM_IOC_MAGIC, 62, struct fm_tune_t)
-
-#define FM_IOCTL_SOFT_MUTE_TUNE _IOWR(FM_IOC_MAGIC, 63, struct fm_softmute_tune_t)/*for soft mute tune*/
-#define FM_IOCTL_DESENSE_CHECK _IOWR(FM_IOC_MAGIC, 64, fm_desense_check_t)
-
-//IOCTL for EM
-#define FM_IOCTL_FULL_CQI_LOG _IOWR(FM_IOC_MAGIC, 70, fm_full_cqi_log_t )
-
-#define FM_IOCTL_DUMP_REG _IO(FM_IOC_MAGIC, 0xFF)
-
-// ********** ***********FM IOCTL define end *******************************
-
-
-enum group_idx {
- mono=0,
- stereo,
- RSSI_threshold,
- HCC_Enable,
- PAMD_threshold,
- Softmute_Enable,
- De_emphasis,
- HL_Side,
- Demod_BW,
- Dynamic_Limiter,
- Softmute_Rate,
- AFC_Enable,
- Softmute_Level,
- Analog_Volume,
- GROUP_TOTAL_NUMS
-};
-
-enum item_idx {
- Sblend_OFF=0,
- Sblend_ON,
- ITEM_TOTAL_NUMS
-};
-
-struct fm_ctl_parm {
- uint8_t err;
- uint8_t addr;
- uint16_t val;
- uint16_t rw_flag;//0:write, 1:read
-};
-
-struct fm_em_parm {
- uint16_t group_idx;
- uint16_t item_idx;
- uint32_t item_value;
-};
-#endif // __FM_H__
diff --git a/MediaTek/fmradiolibs/fmnative/custom/fmlib_cust.h b/MediaTek/fmradiolibs/fmnative/custom/fmlib_cust.h
deleted file mode 100644
index 36d433b..0000000
--- a/MediaTek/fmradiolibs/fmnative/custom/fmlib_cust.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#ifndef __FMLIB_CUST_H__
-#define __FMLIB_CUST_H__
-
-struct fm_fake_channel
-{
- int freq;
- int rssi_th;
- int reserve;
-};
-
-struct fm_fake_channel_t
-{
- int size;
- struct fm_fake_channel *chan;
-};
-
-struct CUST_cfg_ds
-{
- int16_t chip;
- int32_t band;
- int32_t low_band;
- int32_t high_band;
- int32_t seek_space;
- int32_t max_scan_num;
- int32_t seek_lev;
- int32_t scan_sort;
- int32_t short_ana_sup;
- int32_t rssi_th_l2;
- struct fm_fake_channel_t *fake_chan;
-};
-
-#define FM_JNI_SCAN_SPACE_50K 5
-#define FM_JNI_SCAN_SPACE_100K 1
-#define FM_JNI_SCAN_SPACE_200K 2
-#if (defined(MT6620_FM) || defined(MT6628_FM)||defined(MT6627_FM)||defined(MT6580_FM)||defined(MT6630_FM))
-/*implement fm scan by soft mute tune
- change to 0 will scan by orginal way*/
-#define FMR_SOFT_MUTE_TUEN_SCAN 1
-#define FMR_NOISE_FLOORT_DETECT 1
-#define RSSI_TH -296
-#define FM_SEVERE_RSSI_TH -107//67dBuV
-#define FM_NOISE_FLOOR_OFFSET 10
-#else/*if new chip support, need to modify following parameters*/
-#define FMR_SOFT_MUTE_TUEN_SCAN 0
-#define FMR_NOISE_FLOORT_DETECT 0
-#endif
-#endif //__FMLIB_CUST_H__
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/Android.mk b/MediaTek/fmradiolibs/fmnative/fmr/Android.mk
deleted file mode 100755
index 56df92e..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/Android.mk
+++ /dev/null
@@ -1,231 +0,0 @@
-ifeq ($(MTK_FM_SUPPORT), yes)
-
-FM_LIB_BUILD_AR1000 := no
-FM_LIB_BUILD_MT6616 := no
-FM_LIB_BUILD_MT6620 := yes
-FM_LIB_BUILD_MT6626 := no
-FM_LIB_BUILD_MT6628 := yes
-FM_LIB_BUILD_MT519X := no
-FM_LIB_BUILD_MT6627 := yes
-FM_LIB_BUILD_MT6580 := yes
-FM_LIB_BUILD_MT6630 := yes
-
-LOCAL_PATH := $(call my-dir)
-###############################################################################
-# Define MTK FM Radio Chip solution
-###############################################################################
-
-include $(CLEAR_VARS)
-
-LOCAL_CFLAGS+= \
- -DMT6627_FM
-
-LOCAL_SRC_FILES := \
- fmr_core.cpp \
- fmr_err.cpp \
- libfm_jni.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia \
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmjni
-include $(BUILD_SHARED_LIBRARY)
-
-########################
-ifeq ($(FM_LIB_BUILD_MT6616), yes)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6616.cpp \
- common.cpp \
- bt_ctrl.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6616
-include $(BUILD_SHARED_LIBRARY)
-endif
-
-########################
-ifeq ($(FM_LIB_BUILD_MT6626), yes)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6626.cpp \
- common.cpp \
- bt_ctrl.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6626
-include $(BUILD_SHARED_LIBRARY)
-endif
-
-########################
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6620.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6620
-include $(BUILD_SHARED_LIBRARY)
-
-########################
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6628.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media \
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6628
-include $(BUILD_SHARED_LIBRARY)
-########################
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6627.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media \
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6627
-include $(BUILD_SHARED_LIBRARY)
-########################
-ifeq ($(FM_LIB_BUILD_MT6580), yes)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6580.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media \
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6580
-include $(BUILD_SHARED_LIBRARY)
-endif
-########################
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6630.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media \
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6630
-include $(BUILD_SHARED_LIBRARY)
-########################
-ifeq ($(FM_LIB_BUILD_AR1000), yes)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- ar1000.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmar1000
-include $(BUILD_SHARED_LIBRARY)
-endif
-
-########################
-ifeq ($(FM_LIB_BUILD_MT519X), yes)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt519x.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt519x
-include $(BUILD_SHARED_LIBRARY)
-endif
-
-########################
-
-endif
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/Android.mk~ b/MediaTek/fmradiolibs/fmnative/fmr/Android.mk~
deleted file mode 100755
index 56df92e..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/Android.mk~
+++ /dev/null
@@ -1,231 +0,0 @@
-ifeq ($(MTK_FM_SUPPORT), yes)
-
-FM_LIB_BUILD_AR1000 := no
-FM_LIB_BUILD_MT6616 := no
-FM_LIB_BUILD_MT6620 := yes
-FM_LIB_BUILD_MT6626 := no
-FM_LIB_BUILD_MT6628 := yes
-FM_LIB_BUILD_MT519X := no
-FM_LIB_BUILD_MT6627 := yes
-FM_LIB_BUILD_MT6580 := yes
-FM_LIB_BUILD_MT6630 := yes
-
-LOCAL_PATH := $(call my-dir)
-###############################################################################
-# Define MTK FM Radio Chip solution
-###############################################################################
-
-include $(CLEAR_VARS)
-
-LOCAL_CFLAGS+= \
- -DMT6627_FM
-
-LOCAL_SRC_FILES := \
- fmr_core.cpp \
- fmr_err.cpp \
- libfm_jni.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia \
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmjni
-include $(BUILD_SHARED_LIBRARY)
-
-########################
-ifeq ($(FM_LIB_BUILD_MT6616), yes)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6616.cpp \
- common.cpp \
- bt_ctrl.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6616
-include $(BUILD_SHARED_LIBRARY)
-endif
-
-########################
-ifeq ($(FM_LIB_BUILD_MT6626), yes)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6626.cpp \
- common.cpp \
- bt_ctrl.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6626
-include $(BUILD_SHARED_LIBRARY)
-endif
-
-########################
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6620.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6620
-include $(BUILD_SHARED_LIBRARY)
-
-########################
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6628.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media \
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6628
-include $(BUILD_SHARED_LIBRARY)
-########################
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6627.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media \
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6627
-include $(BUILD_SHARED_LIBRARY)
-########################
-ifeq ($(FM_LIB_BUILD_MT6580), yes)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6580.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media \
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6580
-include $(BUILD_SHARED_LIBRARY)
-endif
-########################
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt6630.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media \
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt6630
-include $(BUILD_SHARED_LIBRARY)
-########################
-ifeq ($(FM_LIB_BUILD_AR1000), yes)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- ar1000.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmar1000
-include $(BUILD_SHARED_LIBRARY)
-endif
-
-########################
-ifeq ($(FM_LIB_BUILD_MT519X), yes)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- mt519x.cpp \
- common.cpp
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \
- frameworks/base/include/media
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libdl \
- libmedia
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE := libfmmt519x
-include $(BUILD_SHARED_LIBRARY)
-endif
-
-########################
-
-endif
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/NOTICE b/MediaTek/fmradiolibs/fmnative/fmr/NOTICE
deleted file mode 100755
index 0519ecb..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/NOTICE
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/README b/MediaTek/fmradiolibs/fmnative/fmr/README
deleted file mode 100644
index d16ff95..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/README
+++ /dev/null
@@ -1,25 +0,0 @@
-Libraries of MTK FM feature, including FM power on/off,
-seek, scan, tune...and some other basic functions.
-
-WHAT IT DOES?
-=============
-Provide FM basic functions
-
-HOW IT WAS BUILT?
-==================
-It needs the following libs from AOSP:
-1. libcutils
-2. libdl
-
-and the following libs from MediaTek:
-1. libmedia
-
-HOW TO USE IT?
-==============
-Files in this directory is used to
-generate libraries 'libfmjni' and 'libfmmtxxxx'
-
-These libraries are loaded when system up
-
-All the source code of this library were written by MediaTek co..
-
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/ar1000.cpp b/MediaTek/fmradiolibs/fmnative/fmr/ar1000.cpp
deleted file mode 100644
index d6c83c6..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/ar1000.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "FMLIB_AR1000"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-static int AR1000_open_dev(const char *pname, int *fd)
-{
- int ret;
- ret = COM_open_dev(pname, fd);
-
- //TODO important!!!, check if it's valid FM chip, hard code here.
-
- return ret;
-}
-
-static int AR1000_ana_switch(int fd, int antenna)
-{
- return -ERR_UNSUPT_SHORTANA;
-}
-
-void AR1000_init(struct fm_cbk_tbl *cbk_tbl)
-{
- //Basic functions.
- cbk_tbl->open_dev = AR1000_open_dev;
- cbk_tbl->close_dev = COM_close_dev;
- cbk_tbl->pwr_up = COM_pwr_up;
- cbk_tbl->pwr_down = COM_pwr_down;
- cbk_tbl->seek = COM_seek;
- cbk_tbl->scan = COM_sw_scan; //hw_scan or sw_scan.
- cbk_tbl->stop_scan = COM_stop_scan;
- cbk_tbl->tune = COM_tune;
- cbk_tbl->set_mute = COM_set_mute;
- cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup;
- cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support;
- cbk_tbl->is_rdstx_support = COM_is_rdstx_support;
- cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds;
- cbk_tbl->get_chip_id = COM_get_chip_id;
- cbk_tbl->ana_switch = AR1000_ana_switch;
-
- return;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/bt_ctrl.cpp b/MediaTek/fmradiolibs/fmnative/fmr/bt_ctrl.cpp
deleted file mode 100644
index 87b6a92..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/bt_ctrl.cpp
+++ /dev/null
@@ -1,445 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#define LOG_TAG "FMJNI_BTCTRL"
-#endif
-
-#define BT_SERIAL_PORT "/dev/ttyMT2"
-
-enum{
- BT_PWR_ON,
- BT_PWR_OFF,
- BT_PWR_UNKNOWN,
- BT_PWR_MAX
-};
-//for BT host
-static int bt_host_rfkill_path_get(int *bt_id, char **state_path);
-static int bt_host_pwr_state_get(int *state);
-static int bt_host_init_uart(char *dev);
-//for MT6616 BT controller
-static int bt_mt6616_reset(int fd);
-static int bt_mt6616_nonsleepduration_set(int fd, uint32_t dwTime);
-static int bt_mt6616_alwayssleep_set(int fd);
-static void *bt_mt6616_forcesleep_thread(void *priv);
-//for MT6626 BT controller
-static int bt_mt6626_alwayssleep_set(int fd);
-static int bt_mt6626_i2s_switch_1(int fd);
-static int bt_mt6626_i2s_switch_2(int fd);
-static void *bt_mt6626_forcesleep_thread(void *priv);
-
-
-static int bt_host_rfkill_path_get(int *bt_id, char **state_path)
-{
- char path[128];
- char buf[32];
- int fd, id;
- ssize_t sz;
-
- FMR_ASSERT(bt_id);
- FMR_ASSERT(state_path);
-
- for(id = 0; id < 10 ; id++){
- snprintf(path, sizeof(path), "/sys/class/rfkill/rfkill%d/type", id);
- fd = open(path, O_RDONLY);
- if(fd < 0){
- LOGE("open(%s) failed\n", path);
- return -1;
- }
- sz = read(fd, &buf, sizeof(buf));
- close(fd);
- if(sz >= 9 && (memcmp(buf, "bluetooth", 9) == 0)){
- *bt_id = id;
- break;
- }
- }
-
- if (id == 10)
- return -1;
-
- asprintf(state_path, "/sys/class/rfkill/rfkill%d/state", *bt_id);
- return 0;
-}
-
-static int bt_host_pwr_state_get(int *state)
-{
- int sz;
- int fd = -1;
- int ret = 0;
- char sta;
- int bt_rfkill_id = -1;
- char *bt_rfkill_state_path = NULL;
-
- FMR_ASSERT(state);
-
- if(bt_rfkill_id == -1){
- ret = bt_host_rfkill_path_get(&bt_rfkill_id, &bt_rfkill_state_path);
- if(ret){
- LOGE("get bt rfkill sate path failed\n");
- return ret;
- }
- }
-
- fd = open(bt_rfkill_state_path, O_RDONLY);
- if(fd < 0){
- LOGE("open(%s) failed\n", bt_rfkill_state_path);
- return fd;
- }
- sz = read(fd, &sta, 1);
- if(sz != 1){
- LOGE("read(%s) failed", bt_rfkill_state_path);
- close(fd);
- return -1;
- }
-
- switch(sta){
- case '1':
- *state = BT_PWR_ON;
- break;
- case '0':
- *state = BT_PWR_OFF;
- break;
- default:
- LOGE("unknown bt pwr state\n");
- ret = -1;
- }
-
- free(bt_rfkill_state_path);
- close(fd);
- return ret;
-}
-
-static int bt_host_init_uart(char *dev)
-{
- struct termios ti;
- int fd, i;
-
- FMR_ASSERT(dev);
-
- fd = open(dev, O_RDWR | O_NOCTTY);
- if(fd < 0){
- LOGE("Can't open serial port\n");
- return -1;
- }
-
- tcflush(fd, TCIOFLUSH);
-
- if(tcgetattr(fd, &ti) < 0){
- LOGE("unable to get UART port setting\n");
- return -1;
- }
-
- cfmakeraw(&ti);
-
- ti.c_cflag |= CLOCAL;
- ti.c_cflag &= ~CRTSCTS;
-
- ti.c_lflag = 0;
- ti.c_cc[VTIME] = 5; /* 0.5 sec */
- ti.c_cc[VMIN] = 0;
-
- if(tcsetattr(fd, TCSANOW, &ti) < 0){
- LOGE("Can't set port settings\n");
- return -1;
- }
-
- /* Set initial baudrate */
- cfsetospeed(&ti, B115200);
- cfsetispeed(&ti, B115200);
-
- tcsetattr(fd, TCSANOW, &ti);
- tcflush(fd, TCIOFLUSH);
-
- return fd;
-}
-
-static int bt_mt6616_reset(int fd)
-{
- uint32_t dwBytesWritten = 0;
- uint32_t dwBytesTotal = 0;
- uint32_t dwCounter = 0;
- uint32_t dwBytesRead = 7;
- uint8_t pAckEvent[7];
- int sz = 0;
- uint8_t HCI_RESET[] = {0x01, 0x03, 0x0c, 0x0};
-
- sz = write(fd, HCI_RESET, sizeof(HCI_RESET));
- if(sz < 0){
- LOGE("%s can't send command\n", __func__);
- return -1;
- }
-
- while((dwBytesTotal < 7) && (dwCounter < 5)){
- dwBytesRead = read(fd, &pAckEvent[dwBytesTotal], dwBytesRead);
- dwBytesTotal += dwBytesRead;
- dwBytesRead = 7 - dwBytesTotal;
- dwCounter++;
- }
- if(dwBytesTotal < 7){
- LOGE("%s no ACK \n", __func__);
- return -1;
- }
-
- return 0;
-}
-
-static int bt_mt6616_nonsleepduration_set(int fd, uint32_t dwTime)
-{
- uint32_t dwBytesWritten = 0;
- uint32_t dwBytesTotal = 0;
- uint32_t dwCounter = 0;
- uint32_t dwBytesRead = 7;
- uint8_t pAckEvent[7];
- int sz = 0;
-
- uint32_t dwSlotNum = (dwTime<<3)/5;
- uint8_t HCI_VS_SET_SLEEP[] = {0x01, 0x7a, 0xfc, 0x07, 0x03, 0x40, 0x1f, 0x40, 0x1f, 0x00, 0x04};
-
- HCI_VS_SET_SLEEP[4] = 0x03; //3-pin lower power mode
- HCI_VS_SET_SLEEP[5] = (uint8_t)(dwSlotNum&0xFF);
- HCI_VS_SET_SLEEP[6] = (uint8_t)((dwSlotNum>>8)&0xFF);
- HCI_VS_SET_SLEEP[7] = (uint8_t)(dwSlotNum&0xFF);
- HCI_VS_SET_SLEEP[8] = (uint8_t)((dwSlotNum>>8)&0xFF);
-
- sz = write(fd, HCI_VS_SET_SLEEP, sizeof(HCI_VS_SET_SLEEP));
- if(sz < 0){
- LOGE("%s can't send command\n", __func__);
- return -1;
- }
-
- while((dwBytesTotal < 7) && (dwCounter < 5)){
- dwBytesRead = read(fd, &pAckEvent[dwBytesTotal], dwBytesRead);
- dwBytesTotal += dwBytesRead;
- dwBytesRead = 7 - dwBytesTotal;
- dwCounter++;
- }
- if(dwBytesTotal < 7){
- LOGE("%s no ACK \n", __func__);
- return -1;
- }
-
- return 0;
-}
-
-static int bt_mt6616_alwayssleep_set(int fd)
-{
- int sz = 0;
- uint8_t HCI_VS_SET_ALWAYS_SLEEP[] = {0x01, 0xD8, 0xfc, 0x0};
-
- sz = write(fd, HCI_VS_SET_ALWAYS_SLEEP, sizeof(HCI_VS_SET_ALWAYS_SLEEP));
- if(sz < 0){
- LOGE("%s can't send command\n", __func__);
- return -1;
- }
-
- return 0;
-}
-
-static void *bt_mt6616_forcesleep_thread(void *priv)
-{
- int bt_fd = bt_host_init_uart((char*)BT_SERIAL_PORT);
- if(bt_fd != -1){
- LOGD("+set bt force sleep, sleep 1\n");
- sleep(1);
- bt_mt6616_nonsleepduration_set(bt_fd, 5000);
- bt_mt6616_reset(bt_fd);
- bt_mt6616_alwayssleep_set(bt_fd);
- LOGD("-set bt force sleep\n");
- close(bt_fd);
- }
-
- pthread_exit(NULL);
- return NULL;
-}
-
-static int bt_mt6626_alwayssleep_set(int fd)
-{
- uint32_t dwBytesWritten = 0;
- uint32_t dwBytesTotal = 0;
- uint32_t dwCounter = 0;
- uint32_t dwBytesRead = 7;
- uint8_t pAckEvent[7];
- int sz = 0;
- uint8_t HCI_VS_SET_ALWAYS_SLEEP[] =
- {0x01, 0xD8, 0xFC, 0x08, 0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04, 0x01};
-
- sz = write(fd, HCI_VS_SET_ALWAYS_SLEEP, sizeof(HCI_VS_SET_ALWAYS_SLEEP));
- if(sz < 0){
- LOGE("%s can't send command\n", __func__);
- return -1;
- }
-
- while((dwBytesTotal < 7) && (dwCounter < 5)){
- dwBytesRead = read(fd, &pAckEvent[dwBytesTotal], dwBytesRead);
- dwBytesTotal += dwBytesRead;
- dwBytesRead = 7 - dwBytesTotal;
- dwCounter++;
- }
- if(dwBytesTotal < 7){
- LOGE("%s no ACK \n", __func__);
- return -1;
- }
-
- return 0;
-}
-
-static int bt_mt6626_i2s_switch_1(int fd)
-{
- uint32_t dwBytesWritten = 0;
- uint32_t dwBytesTotal = 0;
- uint32_t dwCounter = 0;
- uint32_t dwBytesRead = 7;
- uint8_t pAckEvent[7];
- int sz = 0;
- uint8_t HCI_VS_I2S_SWITCH_1[] =
- {0x01, 0xD0, 0xFC, 0x08, 0x50, 0x01, 0x05, 0x80, 0x20, 0x00, 0x00, 0x00};
-
- sz = write(fd, HCI_VS_I2S_SWITCH_1, sizeof(HCI_VS_I2S_SWITCH_1));
- if(sz < 0){
- LOGE("%s can't send command\n", __func__);
- return -1;
- }
-
- while((dwBytesTotal < 7) && (dwCounter < 5)){
- dwBytesRead = read(fd, &pAckEvent[dwBytesTotal], dwBytesRead);
- dwBytesTotal += dwBytesRead;
- dwBytesRead = 7 - dwBytesTotal;
- dwCounter++;
- }
- if(dwBytesTotal < 7){
- LOGE("%s no ACK \n", __func__);
- return -1;
- }
-
- return 0;
-}
-
-static int bt_mt6626_i2s_switch_2(int fd)
-{
- uint32_t dwBytesWritten = 0;
- uint32_t dwBytesTotal = 0;
- uint32_t dwCounter = 0;
- uint32_t dwBytesRead = 7;
- uint8_t pAckEvent[7];
- int sz = 0;
- uint8_t bt_mt6626_i2s_switch_2[] =
- {0x01, 0xD0, 0xFC, 0x08, 0x60, 0x01, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00};
-
- sz = write(fd, bt_mt6626_i2s_switch_2, sizeof(bt_mt6626_i2s_switch_2));
- if(sz < 0){
- LOGE("%s can't send command\n", __func__);
- return -1;
- }
-
- while((dwBytesTotal < 7) && (dwCounter < 5)){
- dwBytesRead = read(fd, &pAckEvent[dwBytesTotal], dwBytesRead);
- dwBytesTotal += dwBytesRead;
- dwBytesRead = 7 - dwBytesTotal;
- dwCounter++;
- }
- if(dwBytesTotal < 7){
- LOGE("%s no ACK \n", __func__);
- return -1;
- }
-
- return 0;
-}
-
-static void *bt_mt6626_forcesleep_thread(void *priv)
-{
- int bt_fd = bt_host_init_uart((char*)BT_SERIAL_PORT);
- if(bt_fd != -1){
- LOGD("+set bt force sleep, sleep 1\n");
- sleep(1);
- bt_mt6626_alwayssleep_set(bt_fd);
- bt_mt6626_i2s_switch_1(bt_fd);
- bt_mt6626_i2s_switch_2(bt_fd);
- LOGD("-set bt force sleep\n");
- close(bt_fd);
- }
-
- pthread_exit(NULL);
- return NULL;
-}
-
-/*
- * bt_set_controller_force_sleep
- * If bt host is not at power on state, we should info bt firmware to close bt HW
- * and let bt firmware enter sleep mode
- * @chip -- chip value, 0x6616/0x6626
- */
-int bt_set_controller_force_sleep(int chip)
-{
- int ret = 0;
- pthread_t bt_fsleep_thd;
- void *(*work_thread)(void*) = NULL;
- int pwr_state = BT_PWR_UNKNOWN;
-
- ret = bt_host_pwr_state_get(&pwr_state);
- if(ret){
- LOGE("get bt power state failed\n");
- return ret;
- }
-
- switch(chip){
- case FM_CHIP_MT6616:
- work_thread = bt_mt6616_forcesleep_thread;
- break;
- case FM_CHIP_MT6626:
- work_thread = bt_mt6626_forcesleep_thread;
- break;
- default:
- LOGE("unknown chip type\n");
- return -1;
- break;
- }
-
- if(BT_PWR_OFF == pwr_state){
- LOGD("set bt force sleep\n");
- ret = pthread_create(&bt_fsleep_thd, NULL, work_thread, NULL);
- if(ret){
- LOGE("create work thread failed\n");
- return ret;
- }
- pthread_join(bt_fsleep_thd, NULL);
- }
- return ret;
-}
-
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/common.cpp b/MediaTek/fmradiolibs/fmnative/fmr/common.cpp
deleted file mode 100644
index 9c0a2cd..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/common.cpp
+++ /dev/null
@@ -1,1389 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "FMLIB_COM"
-
-static int g_stopscan = 0;
-
-int COM_open_dev(const char *pname, int *fd)
-{
- int ret = 0;
- int tmp = -1;
-
- FMR_ASSERT(pname);
- FMR_ASSERT(fd);
-
- LOGI("COM_open_dev start\n");
- tmp = open(pname, O_RDWR);
- if (tmp < 0) {
- LOGE("Open %s failed, %s\n", pname, strerror(errno));
- ret = -ERR_INVALID_FD;
- }
- *fd = tmp;
- LOGI("%s, [fd=%d] [ret=%d]\n", __func__, *fd, ret);
- return ret;
-}
-
-int COM_close_dev(int fd)
-{
- int ret = 0;
-
- LOGI("COM_close_dev start\n");
- ret = close(fd);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-int COM_pwr_up(int fd, int band, int freq)
-{
- int ret = 0;
- struct fm_tune_parm parm;
-
- LOGI("%s, [freq=%d]\n", __func__, freq);
- bzero(&parm, sizeof(struct fm_tune_parm));
-
- parm.band = band;
- parm.freq = freq;
- parm.hilo = FM_AUTO_HILO_OFF;
-#ifdef MTK_FM_50KHZ_SUPPORT
- parm.space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ
-#else
- parm.space = 1;
-#endif
-
- ret = ioctl(fd, FM_IOCTL_POWERUP, &parm);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-int COM_pwr_down(int fd, int type)
-{
- int ret = 0;
- LOGI("%s, [type=%d]\n", __func__, type);
- ret = ioctl(fd, FM_IOCTL_POWERDOWN, &type);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-int COM_get_chip_id(int fd, int *chipid)
-{
- int ret = 0;
- uint16_t tmp = 0;
-
- FMR_ASSERT(chipid);
-
- ret = ioctl(fd, FM_IOCTL_GETCHIPID, &tmp);
- *chipid = (int)tmp;
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [chipid=%x] [ret=%d]\n", __func__, fd, *chipid, ret);
- return ret;
-}
-
-int COM_get_rssi(int fd, int *rssi)
-{
- int ret = 0;
-
- FMR_ASSERT(rssi);
-
- ret = ioctl(fd, FM_IOCTL_GETRSSI, rssi);
- if(ret){
- LOGE("%s, failed, [ret=%d]\n", __func__, ret);
- }
- LOGI("%s, [rssi=%d] [ret=%d]\n", __func__, *rssi, ret);
- return ret;
-}
-/*0x20: space, 0x7E:~*/
-#define ISVALID(c)((c)>=0x20 && (c)<=0x7E)
-/*change any char which out of [0x20,0x7E]to space(0x20)*/
-void COM_change_string(uint8_t *str,int len)
-{
- int i=0;
- for (i=0; i<len; i++)
- {
- if(false == ISVALID(str[i]))
- {
- str[i]= 0x20;
- }
- }
-}
-int COM_get_ps(int fd, RDSData_Struct *rds, uint8_t **ps, int *ps_len)
-{
- int ret = 0;
- char tmp_ps[9] = {0};
-
- FMR_ASSERT(rds);
- FMR_ASSERT(ps);
- FMR_ASSERT(ps_len);
-
- if (rds->event_status&RDS_EVENT_PROGRAMNAME)
- {
- LOGD("%s, Success,[event_status=%d]\n", __func__, rds->event_status);
- *ps = &rds->PS_Data.PS[3][0];
- *ps_len = sizeof(rds->PS_Data.PS[3]);
-
- COM_change_string(*ps,*ps_len);
- memcpy(tmp_ps, *ps, 8);
- LOGI("PS=%s\n", tmp_ps);
- }
- else
- {
- LOGE("%s, Failed,[event_status=%d]\n", __func__, rds->event_status);
- *ps = NULL;
- *ps_len = 0;
- ret = -ERR_RDS_NO_DATA;
- }
-
- return ret;
-}
-
-int COM_get_rt(int fd, RDSData_Struct *rds, uint8_t **rt, int *rt_len)
-{
- int ret = 0;
- char tmp_rt[65] = { 0 };
-
- FMR_ASSERT(rds);
- FMR_ASSERT(rt);
- FMR_ASSERT(rt_len);
-
- if (rds->event_status&RDS_EVENT_LAST_RADIOTEXT)
- {
- LOGD("%s, Success,[event_status=%d]\n", __func__, rds->event_status);
- *rt = &rds->RT_Data.TextData[3][0];
- *rt_len = rds->RT_Data.TextLength;
-
- COM_change_string(*rt,*rt_len);
- memcpy(tmp_rt, *rt, 64);
- LOGI("RT=%s\n", tmp_rt);
- }
- else
- {
- LOGE("%s, Failed,[event_status=%d]\n", __func__, rds->event_status);
- *rt = NULL;
- *rt_len = 0;
- ret = -ERR_RDS_NO_DATA;
- }
- return ret;
-}
-
-int COM_get_pi(int fd, RDSData_Struct *rds, uint16_t *pi)
-{
- int ret = 0;
-
- FMR_ASSERT(rds);
- FMR_ASSERT(pi);
-
- if(rds->event_status&RDS_EVENT_PI_CODE){
- LOGD("%s, Success,[event_status=%d] [PI=%d]\n", __func__, rds->event_status, rds->PI);
- *pi = rds->PI;
- }else {
- LOGI("%s, Failed, there's no pi,[event_status=%d]\n", __func__, rds->event_status);
- *pi = -1;
- ret = -ERR_RDS_NO_DATA;
- }
-
- return ret;
-}
-
-int COM_get_pty(int fd, RDSData_Struct *rds, uint8_t *pty)
-{
- int ret = 0;
-
- FMR_ASSERT(rds);
- FMR_ASSERT(pty);
-
- if(rds->event_status&RDS_EVENT_PTY_CODE){
- LOGD("%s, Success,[event_status=%d] [PTY=%d]\n", __func__, rds->event_status, rds->PTY);
- *pty = rds->PTY;
- }else{
- LOGI("%s, Success, there's no pty,[event_status=%d]\n", __func__, rds->event_status);
- *pty = -1;
- ret = -ERR_RDS_NO_DATA;
- }
-
- return ret;
-}
-
-int COM_tune(int fd, int freq, int band)
-{
- int ret = 0;
-
- struct fm_tune_parm parm;
-
- bzero(&parm, sizeof(struct fm_tune_parm));
-
- parm.band = band;
- parm.freq = freq;
- parm.hilo = FM_AUTO_HILO_OFF;
-#ifdef MTK_FM_50KHZ_SUPPORT
- parm.space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ
-#else
- parm.space = 1;
-#endif
-
- ret = ioctl(fd, FM_IOCTL_TUNE, &parm);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [freq=%d] [ret=%d]\n", __func__, fd, freq, ret);
- return ret;
-}
-
-int COM_seek(int fd, int *freq, int band, int dir, int lev)
-{
- int ret = 0;
- struct fm_seek_parm parm;
-
- bzero(&parm, sizeof(struct fm_tune_parm));
-
- parm.band = band;
- parm.freq = *freq;
- parm.hilo = FM_AUTO_HILO_OFF;
-#ifdef MTK_FM_50KHZ_SUPPORT
- parm.space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ
-#else
- parm.space = 1;
-#endif
- if (dir == 1) {
- parm.seekdir = FM_SEEK_UP;
- } else if (dir == 0) {
- parm.seekdir = FM_SEEK_DOWN;
- }
- parm.seekth = lev;
-
- ret = ioctl(fd, FM_IOCTL_SEEK, &parm);
- if (ret == 0) {
- *freq = parm.freq;
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-int COM_set_mute(int fd, int mute)
-{
- int ret = 0;
- int tmp = mute;
-
- LOGD("%s, start \n", __func__);
- ret = ioctl(fd, FM_IOCTL_MUTE, &tmp);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-int COM_is_fm_pwrup(int fd, int *pwrup)
-{
- int ret = 0;
-
- ret = ioctl(fd, FM_IOCTL_IS_FM_POWERED_UP, pwrup);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-int COM_fm_set_status(int fd, int which, bool stat)
-{
- int ret = 0;
- fm_status_t stat_parm;
-
- bzero(&stat_parm, sizeof(fm_status_t));
- stat_parm.which = which;
- stat_parm.stat = stat;
-
- ret = ioctl(fd, FM_IOCTL_FM_SET_STATUS, &stat_parm);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-int COM_fm_get_status(int fd, int which, bool *stat)
-{
- int ret = 0;
- fm_status_t stat_parm;
-
- bzero(&stat_parm, sizeof(fm_status_t));
- stat_parm.which = which;
-
- ret = ioctl(fd, FM_IOCTL_FM_GET_STATUS, &stat_parm);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
-
- *stat = stat_parm.stat;
-
- return ret;
-}
-
-/******************************************
- * Inquiry if RDS is support in driver.
- * Parameter:
- * None
- *supt Value:
- * 1: support
- * 0: NOT support
- * -1: error
- ******************************************/
-int COM_is_rdsrx_support(int fd, int *supt)
-{
- int ret = 0;
- int support = -1;
-
- if (fd < 0){
- LOGE("FM isRDSsupport fail, g_fm_fd = %d\n", fd);
- *supt = -1;
- ret = -ERR_INVALID_FD;
- return ret;
- }
-
- ret = ioctl(fd, FM_IOCTL_RDS_SUPPORT, &support);
- if (ret){
- LOGE("FM FM_IOCTL_RDS_SUPPORT fail, errno = %d\n", errno);
- //don't support
- *supt = 0;
- return ret;
- }
- LOGI("isRDSsupport Success,[support=%d]\n", support);
- *supt = support;
- return ret;
-}
-
-int COM_is_rdstx_support(int fd, int *supt)
-{
- int ret = 0;
-
- ret = ioctl(fd, FM_IOCTL_RDSTX_SUPPORT, supt);
- if (ret < 0){
- LOGE("%s: fail\n", __func__);
- //FM don't support RDS Tx
- *supt = 0;
- }
- LOGD("%s:[supt=%d] [ret=%d]\n", __func__, *supt, ret);
- return ret;
-}
-
-
-static struct fm_scan_t scan_req;
-static int scan_req_init_flag = 0;
-
-/*
- * COM_hw_scan_new
- * @fd -file descriptor
- * @ppdst - target channel buffer
- * @upper - upper band, Eg: 10800 (108.00Mhz)
- * @lower - lower band, Eg: 7600 (76.00Mhz)
- * @space - scan space, 5: 50Khz, 10: 100Khz, 20: 200Khz
- * Return channel number >= 0 if success, else error code
- */
-int COM_hw_scan_new(int fd, void **ppdst, int upper, int lower, int space, void *para)
-{
- int ret = 0;
- int tmp = 0;
-
- if (!scan_req_init_flag) {
- scan_req_init_flag = 1;
- scan_req.sr_size = 0;
- scan_req.sr.ch_rssi_buf = NULL;
- }
-
- // alloc memory for buffer
- if ((upper - lower) < space) {
- LOGE("band para err\n");
- return -1;
- }
-
- tmp = ((upper - lower) / space + 1) * sizeof(struct fm_ch_rssi*);
- if (scan_req.sr_size < tmp) {
- if (scan_req.sr.ch_rssi_buf) {
- free(scan_req.sr.ch_rssi_buf);
- scan_req.sr.ch_rssi_buf = NULL;
- }
- scan_req.sr_size = tmp;
- }
-
- if (!scan_req.sr.ch_rssi_buf) {
- scan_req.sr.ch_rssi_buf = (struct fm_ch_rssi*)malloc(scan_req.sr_size);
- if (!scan_req.sr.ch_rssi_buf) {
- LOGE("scan alloc mem failed\n");
- scan_req.sr_size = 0;
- return -2;
- }
- }
-
- // scan parameter init, start scan
- scan_req.lower = lower;
- scan_req.upper = upper;
- scan_req.space = space;
- scan_req.cmd = FM_SCAN_CMD_START;
- ret = ioctl(fd, FM_IOCTL_SCAN_NEW, &scan_req);
- if (ret < 0) {
- LOGE("scan start faild\n");
- return ret;
- }
-
- // get result channel info
- scan_req.cmd = FM_SCAN_CMD_GET_CH_RSSI;
- ret = ioctl(fd, FM_IOCTL_SCAN_NEW, &scan_req);
- if (ret < 0) {
- LOGE("scan get num faild\n");
- return ret;
- }
-
- *ppdst = (void*)scan_req.sr.ch_rssi_buf;
- return scan_req.num;
-}
-
-
-/*
- * COM_seek_new
- * @fd -file descriptor
- * @freq - start freqency of seek
- * @upper - upper band, Eg: 10800 (108.00Mhz)
- * @lower - lower band, Eg: 7600 (76.00Mhz)
- * @space - scan space, 5: 50Khz, 10: 100Khz, 20: 200Khz
- * @dir - seek direction, 0: up; 1: down
- * @rssi - seek threshold in dbm (Eg, -95dbm)
- * Return 0 if success, else error code
- */
-int COM_seek_new(int fd, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para)
-{
- int ret = 0;
- int tmp = 0;
- struct fm_seek_t seek_req;
-
- // seek parameter init, start seek
- seek_req.lower = lower;
- seek_req.upper = upper;
- seek_req.space = space;
- seek_req.freq = *freq;
- seek_req.dir = dir;
- seek_req.th = *rssi;
- ret = ioctl(fd, FM_IOCTL_SEEK_NEW, &seek_req);
- if (ret < 0) {
- LOGE("seek faild\n");
- return ret;
- }
-
- *freq = seek_req.freq;
- *rssi = seek_req.th;
- LOGD("seek, freq %d, rssi %d\n", seek_req.freq, seek_req.th);
- return ret;
-}
-
-
-/*
- * COM_tune_new
- * @fd -file descriptor
- * @freq - target freqency
- * @upper - upper band, Eg: 10800 (108.00Mhz)
- * @lower - lower band, Eg: 7600 (76.00Mhz)
- * @space - scan space, 5: 50Khz, 10: 100Khz, 20: 200Khz
- * Return 0 if success, else error code
- */
-int COM_tune_new(int fd, int freq, int upper, int lower, int space, void *para)
-{
- int ret = 0;
- int tmp = 0;
- struct fm_tune_t tune_req;
-
- // tune parameter init, start tune
- tune_req.lower = lower;
- tune_req.upper = upper;
- tune_req.space = space;
- tune_req.freq = freq;
- ret = ioctl(fd, FM_IOCTL_TUNE_NEW, &tune_req);
- if (ret < 0) {
- LOGE("tune faild\n");
- return ret;
- }
-
- LOGD("tune, freq %d\n", tune_req.freq);
- return ret;
-}
-int COM_pre_search(int fd)
-{
- fm_s32 ret = 0;
- ret = ioctl(fd, FM_IOCTL_PRE_SEARCH, 0);
- LOGD("COM_pre_search:%d\n",ret);
- return ret;
-}
-int COM_restore_search(int fd)
-{
- fm_s32 ret = 0;
- ret = ioctl(fd, FM_IOCTL_RESTORE_SEARCH, 0);
- LOGD("COM_restore_search:%d\n",ret);
- return ret;
-}
-
-/*soft mute tune function, usually for sw scan implement or CQI log tool*/
-int COM_Soft_Mute_Tune(int fd,fm_softmute_tune_t *para)
-{
- fm_s32 ret = 0;
-// fm_s32 RSSI=0, PAMD=0,MR=0, ATDC=0;
-// fm_u32 PRX=0;
-// fm_u16 softmuteGainLvl=0;
- fm_softmute_tune_t value;
-
- value.freq = para->freq;
- ret = ioctl(fd, FM_IOCTL_SOFT_MUTE_TUNE, &value);
- if (ret)
- {
- LOGE("FM soft mute tune faild:%d\n",ret);
- return ret;
- }
- #if 0
- LOGD("Raw data of soft mute tune[%d]: RSSI:[%x]PAMD:[%x]MR:[%x]ATDC:[%x]PRX:[%x]SMG:[%x]",para->freq,value.RSSI,value.PAMD,value.MR,value.ATDC,value.PRX,value.SMG);
- RSSI = ((value.RSSI & 0x03FF) >= 512) ? ((value.RSSI & 0x03FF) - 1024) : (value.RSSI & 0x03FF);
- PAMD = ((value.PAMD & 0xFF) >= 128) ? ((value.PAMD & 0x00FF) - 256) : (value.PAMD & 0x00FF);
- MR = ((value.MR & 0x01FF) >= 256) ? ((value.MR & 0x01FF) - 512) : (value.MR & 0x01FF);
- ATDC =((value.ATDC & 0x0FFF) >= 2048) ? ((value.ATDC & 0x0FFF) - 4096) : (value.ATDC & 0x0FFF);
- if(ATDC < 0)
- {
- ATDC = (~(ATDC)) - 1;//Get abs value of ATDC
- }
- PRX = (value.PRX & 0x00FF);
- softmuteGainLvl = value.SMG;
- //check if the channel is valid according to each CQIs
- if((RSSI >= RSSI_TH)
- && (PAMD <= PAMD_TH)
- && (ATDC <= ATDC_TH)
- && (MR >= MR_TH)
- && (PRX >= PRX_TH)
- && (softmuteGainLvl <= softMuteGainTH))
- {
- para->valid = fm_true;
- }
- else
- {
- para->valid = fm_false;
- }
- #endif
- para->valid = value.valid;
- para->rssi = value.rssi;
-// LOGI("soft mute tune[%d] valid[%d]: RSSI:[%d]PAMD:[%d]MR:[%d]ATDC:[%d]PRX:[%d]SMG:[%d]",para->freq,para->valid,RSSI,PAMD,MR,ATDC,PRX,softmuteGainLvl);
- return 0;
-}
-
-int COM_hw_scan(int fd, uint16_t *scan_tbl, int *max_num, int band, int sort)
-{
- struct fm_scan_parm parm;
- uint16_t tmp_val = 0;
- uint16_t ch_offset = 0;
- uint16_t MASK_CH = 0;
- int ret = 0;
- int step = 0;
- int chl_cnt = 0;
- int i, j;
- struct fm_ch_rssi tmp;
- struct fm_rssi_req rssi_req;
-
- parm.band = band;
-#ifdef MTK_FM_50KHZ_SUPPORT
- parm.space = FM_SPACE_50K;
-#else
- parm.space = FM_SPACE_100K;
-#endif
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.freq = 0;
- parm.ScanTBLSize = sizeof(parm.ScanTBL)/sizeof(uint16_t);
-
- ret = ioctl(fd, FM_IOCTL_SCAN, &parm);
- if (ret) {
- LOGE("FM scan faild\n");
- *max_num = 0;
- return ret;
- }
-
- //get scan result channel
- memset(&rssi_req, 0x0, sizeof(struct fm_rssi_req));
- for (ch_offset = 0; ch_offset < parm.ScanTBLSize; ch_offset++) {
- if(parm.ScanTBL[ch_offset] == 0)
- continue;
- for (step=0;step<16;step++) {
- if(parm.ScanTBL[ch_offset] & (1 << step)){
- tmp_val = FM_FREQ_MIN + (ch_offset*16 + step) * (parm.space);
- if (tmp_val <= FM_FREQ_MAX) {
- rssi_req.cr[chl_cnt].freq = tmp_val;
- chl_cnt++;
- }
- }
- }
- }
-
- //sort
- switch(sort){
- case FM_SCAN_SORT_NON:
- break;
- case FM_SCAN_SORT_UP:
- case FM_SCAN_SORT_DOWN:
- //get rssi per channel, mute --> fast tune --> get rssi
- rssi_req.num = chl_cnt;
- rssi_req.read_cnt = 1; //RSSI read times, we can read more than one time to ensure rssi valid
- ret = ioctl(fd, FM_IOCTL_SCAN_GETRSSI, &rssi_req);
- if(ret){
- LOGE("FM scan get rssi faild\n");
- *max_num = 0;
- return ret;
- }
- //do sort: insert sort algorithm
- for(i = 1; i < chl_cnt; i++){
- for(j = i; (j > 0) && ((FM_SCAN_SORT_DOWN == sort) ? (rssi_req.cr[j-1].rssi\
- < rssi_req.cr[j].rssi) : (rssi_req.cr[j-1].rssi > rssi_req.cr[j].rssi)); j--){
- tmp.freq = rssi_req.cr[j].freq;
- tmp.rssi = rssi_req.cr[j].rssi;
- rssi_req.cr[j].freq = rssi_req.cr[j-1].freq;
- rssi_req.cr[j].rssi = rssi_req.cr[j-1].rssi;
- rssi_req.cr[j-1].freq = tmp.freq;
- rssi_req.cr[j-1].rssi = tmp.rssi;
- }
- }
- break;
- default:
- break;
- }
- *max_num = (chl_cnt > *max_num) ? *max_num : chl_cnt;
-
- //copy to result buf
- LOGD("Channel list(%d):", chl_cnt);
- for(i = 0; i < *max_num; i++){
- scan_tbl[i] = rssi_req.cr[i].freq;
- LOGD("%d(%d dbm) ", (int)scan_tbl[i], rssi_req.cr[i].rssi);
- }
- LOGD("\n");
- return ret;
-}
-
-int COM_fastget_rssi(int fd, struct fm_rssi_req *rssi_req)
-{
- int ret = 0;
-
- FMR_ASSERT(rssi_req);
- //get rssi per channel, mute --> fast tune --> get rssi
- if(rssi_req->read_cnt <= 0){
- rssi_req->read_cnt = 1; //RSSI read times, we can read more than one time to ensure rssi valid
- }
- ret = ioctl(fd, FM_IOCTL_SCAN_GETRSSI, rssi_req);
- if(ret){
- LOGE("Fast get rssi faild\n");
- }
-
- return ret;
-}
-
-
-int COM_get_cqi(int fd, int num, char *buf, int buf_len)
-{
- int ret;
- struct fm_cqi_req cqi_req;
-
- //check buf
- num = (num > CQI_CH_NUM_MAX) ? CQI_CH_NUM_MAX : num;
- num = (num < CQI_CH_NUM_MIN) ? CQI_CH_NUM_MIN : num;
- cqi_req.ch_num = (uint16_t)num;
- cqi_req.buf_size = cqi_req.ch_num * sizeof(struct fm_cqi);
- if (!buf || (buf_len < cqi_req.buf_size)) {
- LOGE("get cqi, invalid buf\n");
- return -1;
- }
- cqi_req.cqi_buf = buf;
-
- //get cqi from driver
- ret = ioctl(fd, FM_IOCTL_CQI_GET, &cqi_req);
- if (ret < 0) {
- LOGE("get cqi, failed %d\n", ret);
- return -1;
- }
-
- return 0;
-}
-
-
-int COM_sw_scan(int fd, uint16_t *scan_tbl, int *max_num, int band, int sort)
-{
- int ret;
- int chl_cnt = 0;
- uint16_t start_freq = FM_FREQ_MIN;
- struct fm_seek_parm parm;
-
- g_stopscan = 0;
-
- do {
- bzero(&parm, sizeof(struct fm_tune_parm));
- parm.band = band;
- parm.freq = start_freq;
- parm.hilo = FM_AUTO_HILO_OFF;
-#ifdef MTK_FM_50KHZ_SUPPORT
- parm.space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ
-#else
- parm.space = 1;
-#endif
- parm.seekdir = FM_SEEK_UP;
- parm.seekth = FM_SEEKTH_LEVEL_DEFAULT;
-
- ret = ioctl(fd, FM_IOCTL_SEEK, &parm);
- if (ret != 0) {
- LOGE("FM scan faild, %s, %d\n", strerror(errno), parm.err);
- break;
- }
-
- if((parm.err == FM_SUCCESS) && (chl_cnt < *max_num) && (parm.freq > start_freq)){
- scan_tbl[chl_cnt] = parm.freq;
- chl_cnt++;
- } else {
- break;
- }
-
- start_freq = parm.freq;
- } while (g_stopscan == 0);
-
- LOGI("FM sw scan %d station found\n", chl_cnt);
- return ret;
-}
-
-int COM_stop_scan(int fd)
-{
- int ret = 0;
-
- g_stopscan = 1;
-
- return ret;
-}
-
-int COM_turn_on_off_rds(int fd, int onoff)
-{
- int ret = 0;
- uint16_t rds_on = -1;
-
- LOGD("Rdsset start\n");
- if(onoff == FMR_RDS_ON){
- rds_on = 1;
- ret = ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on);
- if (ret){
- LOGE("FM_IOCTL_RDS_ON failed\n");
- return ret;
- }
- LOGD("Rdsset Success,[rds_on=%d]\n", rds_on);
- }else{
- rds_on = 0;
- ret = ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on);
- if (ret){
- LOGE("FM_IOCTL_RDS_OFF failed\n");
- return ret;
- }
- LOGD("Rdsset Success,[rds_on=%d]\n", rds_on);
- }
- return ret;
-}
-
-int COM_read_rds_data(int fd, RDSData_Struct *rds, uint16_t *rds_status)
-{
- int ret = 0;
- uint16_t event_status;
- //char tmp_ps[9] = {0};
- //char tmp_rt[65] = { 0 };
-
- FMR_ASSERT(rds);
- FMR_ASSERT(rds_status);
-
- if(read(fd, rds, sizeof(RDSData_Struct)) == sizeof(RDSData_Struct)){
- event_status = rds->event_status;
- //memcpy(tmp_ps, &rds->PS_Data.PS[3][0], 8);
- //memcpy(tmp_rt, &rds->RT_Data.TextData[3][0], 64);
- LOGI("event_status = 0x%x\n", event_status);
- //memset(tmp_ps, 0, 9);
- //memset(tmp_rt, 0, 65);
- *rds_status = event_status;
- return ret;
- }else {
- //LOGE("readrds get no event\n");
- ret = -ERR_RDS_NO_DATA;
- }
- return ret;
-}
-
-int COM_active_af(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *ret_freq)
-{
- int ret = 0;
- int i = 0;
- struct fm_tune_parm parm;
- uint16_t rds_on = 0;
- uint16_t set_freq, sw_freq, org_freq, PAMD_Value, AF_PAMD_LBound, AF_PAMD_HBound;
- uint16_t PAMD_Level[25];
- uint16_t PAMD_DB_TBL[5] = {// 5dB, 10dB, 15dB, 20dB, 25dB,
- // 13, 17, 21, 25, 29};
- 8, 12, 15, 18, 20};
- FMR_ASSERT(rds);
- FMR_ASSERT(ret_freq);
-
- sw_freq = cur_freq; //current freq
- org_freq = cur_freq;
- parm.band = band;
- parm.freq = sw_freq;
- parm.hilo = FM_AUTO_HILO_OFF;
-#ifdef MTK_FM_50KHZ_SUPPORT
- parm.space = FM_SPACE_50K;
-#else
- parm.space = FM_SPACE_100K;
-#endif
-
-
- if(!(rds->event_status&RDS_EVENT_AF)){
- LOGE("activeAF failed\n");
- *ret_freq = 0;
- ret = -ERR_RDS_NO_DATA;
- return ret;
- }
-
- AF_PAMD_LBound = PAMD_DB_TBL[0]; //5dB
- AF_PAMD_HBound = PAMD_DB_TBL[1]; //15dB
- ioctl(fd, FM_IOCTL_GETCURPAMD, &PAMD_Value);
- LOGI("current_freq=%d,PAMD_Value=%d\n", cur_freq, PAMD_Value);
-
- if(PAMD_Value < AF_PAMD_LBound){
- rds_on = 0;
- ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on);
- //make sure rds->AF_Data.AF_Num is valid
- rds->AF_Data.AF_Num = (rds->AF_Data.AF_Num > 25)? 25 : rds->AF_Data.AF_Num;
- for(i=0; i<rds->AF_Data.AF_Num; i++){
- set_freq = rds->AF_Data.AF[1][i]; //method A or B
- if(set_freq != org_freq){
- parm.freq = set_freq;
- ioctl(fd, FM_IOCTL_TUNE, &parm);
- usleep(250*1000);
- ioctl(fd, FM_IOCTL_GETCURPAMD, &PAMD_Level[i]);
- LOGI("next_freq=%d,PAMD_Level=%d\n", parm.freq, PAMD_Level[i]);
- if(PAMD_Level[i] > PAMD_Value){
- PAMD_Value = PAMD_Level[i];
- sw_freq = set_freq;
- }
- }
- }
- LOGI("PAMD_Value=%d, sw_freq=%d\n", PAMD_Value, sw_freq);
- if((PAMD_Value > AF_PAMD_HBound)&&(sw_freq != 0)){
- parm.freq = sw_freq;
- ioctl(fd, FM_IOCTL_TUNE, &parm);
- cur_freq = parm.freq;
- }else {
- parm.freq = org_freq;
- ioctl(fd, FM_IOCTL_TUNE, &parm);
- cur_freq = parm.freq;
- }
- rds_on = 1;
- ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on);
- }else {
- LOGD("RDS_EVENT_AF old freq:%d\n", org_freq);
- }
- *ret_freq = cur_freq;
-
- return ret;
-}
-
-int COM_active_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq)
-{
- int ret = 0;
-
- FMR_ASSERT(rds);
- FMR_ASSERT(backup_freq);
- FMR_ASSERT(ret_freq);
-
- if(rds->event_status&RDS_EVENT_TAON){
- uint16_t rds_on = 0;
- struct fm_tune_parm parm;
- uint16_t PAMD_Level[25];
- uint16_t PAMD_DB_TBL[5] = {13, 17, 21, 25, 29};
- uint16_t set_freq, sw_freq, org_freq, PAMD_Value, TA_PAMD_Threshold;
- int i = 0;
-
- rds_on = 0;
- ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on);
- TA_PAMD_Threshold = PAMD_DB_TBL[2]; //15dB
- sw_freq = cur_freq;
- org_freq = cur_freq;
- *backup_freq = org_freq;
- parm.band = band;
- parm.freq = sw_freq;
- parm.hilo = FM_AUTO_HILO_OFF;
-#ifdef MTK_FM_50KHZ_SUPPORT
- parm.space = FM_SPACE_50K;
-#else
- parm.space = FM_SPACE_100K;
-#endif
-
- ioctl(fd, FM_IOCTL_GETCURPAMD, &PAMD_Value);
- //make sure rds->AF_Data.AF_Num is valid
- rds->AFON_Data.AF_Num = (rds->AFON_Data.AF_Num > 25)? 25 : rds->AFON_Data.AF_Num;
- for(i=0; i< rds->AFON_Data.AF_Num; i++){
- set_freq = rds->AFON_Data.AF[1][i];
- LOGI("set_freq=0x%02x,org_freq=0x%02x\n", set_freq, org_freq);
- if(set_freq != org_freq){
- parm.freq = sw_freq;
- ioctl(fd, FM_IOCTL_TUNE, &parm);
- ioctl(fd, FM_IOCTL_GETCURPAMD, &PAMD_Level[i]);
- if(PAMD_Level[i] > PAMD_Value){
- PAMD_Value = PAMD_Level[i];
- sw_freq = set_freq;
- }
- }
- }
-
- if((PAMD_Value > TA_PAMD_Threshold)&&(sw_freq != 0)){
- rds->Switch_TP= 1;
- parm.freq = sw_freq;
- ioctl(fd, FM_IOCTL_TUNE, &parm);
- cur_freq = parm.freq;
- }else{
- parm.freq = org_freq;
- ioctl(fd, FM_IOCTL_TUNE, &parm);
- cur_freq = parm.freq;
- }
- rds_on = 1;
- ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on);
- }
-
- *ret_freq = cur_freq;
- return ret;
-}
-
-int COM_deactive_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq)
-{
- int ret = 0;
-
- FMR_ASSERT(rds);
- FMR_ASSERT(backup_freq);
- FMR_ASSERT(ret_freq);
-
- if(rds->event_status&RDS_EVENT_TAON_OFF){
- uint16_t rds_on = 0;
- struct fm_tune_parm parm;
- parm.band = FM_RAIDO_BAND;
- parm.freq = *backup_freq;
- parm.hilo = FM_AUTO_HILO_OFF;
-#ifdef MTK_FM_50KHZ_SUPPORT
- parm.space = FM_SPACE_50K;
-#else
- parm.space = FM_SPACE_100K;
-#endif
- ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on);
-
- ioctl(fd, FM_IOCTL_TUNE, &parm);
- cur_freq = parm.freq;
- rds_on = 1;
- ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on);
- }
-
- *ret_freq = cur_freq;
- return ret;
-}
-
-int COM_is_tx_support(int fd, int *supt)
-{
- int ret = 0;
-
- ret = ioctl(fd, FM_IOCTL_TX_SUPPORT, supt);
- if (ret < 0){
- LOGE("%s:fail\n", __func__);
- *supt = -1; //error
- }
- LOGD("%s:[supt=%d] [ret=%d]\n", __func__, *supt, ret);
- return ret;
-}
-//return tx support
-int COM_tx_support(int fd, int *supt)
-{
- *supt = 1;
- LOGD("%s:\n", __func__);
- return 0;
-}
-
-int COM_tx_pwrup(int fd, int band, int freq)
-{
- int ret = 0;
- struct fm_tune_parm parm_tune;
-
- parm_tune.band = band;
- parm_tune.freq = freq;
- parm_tune.hilo = FM_AUTO_HILO_OFF;
-#ifdef MTK_FM_50KHZ_SUPPORT
- parm_tune.space = FM_SPACE_50K;
-#else
- parm_tune.space = FM_SPACE_100K;
-#endif
-
- ret = ioctl(fd, FM_IOCTL_POWERUP_TX, &parm_tune);
- if (ret){
- LOGE("%s:fail\n", __func__);
- }
- LOGD("%s:[freq=%d] [ret=%d]\n", __func__, freq, ret);
-
- return ret;
-}
-
-int COM_tx_tune(int fd, int band, int freq)
-{
- int ret = 0;
- struct fm_tune_parm parm_tune;
-
- parm_tune.band = band;
- parm_tune.freq = freq;
- parm_tune.hilo = FM_AUTO_HILO_OFF;
-#ifdef MTK_FM_50KHZ_SUPPORT
- parm_tune.space = FM_SPACE_50K;
-#else
- parm_tune.space = FM_SPACE_100K;
-#endif
-
- ret = ioctl(fd, FM_IOCTL_TUNE_TX, &parm_tune);
- if (ret){
- LOGE("%s:fail\n", __func__);
- }
- LOGD("%s:[freq=%d] [ret=%d]\n", __func__, freq, ret);
-
- return ret;
-}
-
-int COM_tx_scan(int fd, int band, int start_freq, int dir, int *num, uint16_t *tbl)
-{
- int ret = 0;
- struct fm_tx_scan_parm parm;
-
- bzero(&parm, sizeof(struct fm_tx_scan_parm));
- parm.band = band;
-#ifdef MTK_FM_50KHZ_SUPPORT
- parm.space = FM_SPACE_50K;
-#else
- parm.space = FM_SPACE_100K;
-#endif
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.freq = start_freq;
- parm.scandir = dir;
- parm.ScanTBLSize = *num;
-
- ret = ioctl(fd, FM_IOCTL_TX_SCAN, &parm);
- if(ret){
- LOGE("%s:failed, [ret=%d]\n", __func__, ret);
- *num = 0;
- }else{
- *num = parm.ScanTBLSize;
- memcpy(tbl, &parm.ScanTBL[0], parm.ScanTBLSize*sizeof(uint16_t));
- }
- LOGD("%s:[num=%d] [ret=%d]\n", __func__, parm.ScanTBLSize, ret);
- return ret;
-}
-
-int COM_rdstx_onoff(int fd, int onoff)
-{
- int ret = 0;
-
- ret = ioctl(fd, FM_IOCTL_RDSTX_ENABLE, &onoff);
- if (ret < 0){
- LOGE("%s: fail, ret = %d\n", __func__, ret);
- }
-
- LOGD("%s: [ret = %d]\n", __func__, ret);
- return ret;
-}
-
-int COM_rdstx(int fd, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt)
-{
- int ret = 0;
- struct fm_rds_tx_parm param_rds_tx;
- struct fm_rds_tx_req rds_req;
- int i = 0;
-
- bzero(&rds_req, sizeof(struct fm_rds_tx_req));
- bzero(&param_rds_tx, sizeof(struct fm_rds_tx_parm));
-
- memcpy(rds_req.ps_buf, ps, ps_len); // fill ps name
- rds_req.pi_code = pi; // fill pi
- //fill other fileds if have any
- //rds_req.af = 1000;
-
- //make pakect for Tx
- for(i = 0; i < 4; i++){
- uint16_t blk_B = 0x0;
- uint16_t blk_C = 0x0;
-
- if(rds_req.tp == 1){
- blk_B |= 0x0400; // blk_B[10] = TP
- }
- blk_B |= (rds_req.pty << 5); // blk_B[9:5] = PTY
- if(rds_req.ta == 1){
- blk_B |= 0x0010; // blk_B[4] = TA
- }
- if(rds_req.speech == 1){
- blk_B |= 0x0008; // blk_B[3] = TA
- }
- switch(i){
- case 0:
- if(rds_req.dyn_pty == 1){
- blk_B |= 0x0004; // blk_B[2] = d3 = dynamic pty
- }
- blk_B |= 0x0000; // blk_B[1:0] = 00
- break;
- case 1:
- if(rds_req.compress == 1){
- blk_B |= 0x0004; // blk_B[2] = d2 = compressed
- }
- blk_B |= 0x0001; // blk_B[1:0] = 01
- break;
- case 2:
- if(rds_req.ah == 1){
- blk_B |= 0x0004; // blk_B[2] = d1 = artificial head
- }
- blk_B |= 0x0002; // blk_B[1:0] = 10
- break;
- case 3:
- if(rds_req.stereo == 1){
- blk_B |= 0x0004; // blk_B[2] = d0 = mono/stereo
- }
- blk_B |= 0x0003; // blk_B[1:0] = 11
- break;
- }
- if(rds_req.af == 0){
- blk_C = 0xE000;
- }else{
- blk_C = 0xE100 | rds_req.af;
- }
-
- param_rds_tx.ps[i*3+0] = blk_B; // block B
- param_rds_tx.ps[i*3+1] = blk_C; // block C
- param_rds_tx.ps[i*3+2] = (rds_req.ps_buf[2*i] << 8) + rds_req.ps_buf[2*i+1];// block D
- }
- param_rds_tx.pi = rds_req.pi_code;
- param_rds_tx.other_rds_cnt = 0;
-
- /*if(rdscnt > 87)
- {
- LOGE("FM JNI: setRDSTX get a invalid rdscnt[%d]\n", rdscnt);
- rdscnt = 87;
- }
- memcpy(&param_rds_tx.other_rds[0], rds, rdscnt);
- param_rds_tx.other_rds_cnt = rdscnt;*/
-
- ret = ioctl(fd, FM_IOCTL_RDS_TX, &param_rds_tx);
- if (ret){
- LOGE("FM_IOCTL_RDS_TX failed\n");
- }
-
- return ret;
-}
-
-int COM_fm_over_bt(int fd, int onoff)
-{
- int ret = 0;
-
- ret = ioctl(fd, FM_IOCTL_OVER_BT_ENABLE, &onoff);
- if (ret < 0){
- LOGE("%s: fail, ret = %d\n", __func__, ret);
- }
-
- LOGD("%s: [ret = %d]\n", __func__, ret);
- return ret;
-}
-
-int COM_ana_switch(int fd, int antenna)
-{
- int ret = 0;
-
- ret = ioctl(fd, FM_IOCTL_ANA_SWITCH, &antenna);
- if (ret < 0){
- LOGE("%s: fail, ret = %d\n", __func__, ret);
- }
-
- LOGD("%s: [ret = %d]\n", __func__, ret);
- return ret;
-}
-
-int COM_get_badratio(int fd, int *badratio)
-{
- int ret = 0;
- uint16_t tmp = 0;
-
- ret = ioctl(fd, FM_IOCTL_GETBLERRATIO, &tmp);
- *badratio = (int)tmp;
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-
-int COM_get_stereomono(int fd, int *stemono)
-{
- int ret = 0;
- uint16_t tmp = 0;
-
- ret = ioctl(fd, FM_IOCTL_GETMONOSTERO, &tmp);
- *stemono = (int)tmp;
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-int COM_set_stereomono(int fd, int stemono)
-{
- int ret = 0;
-
- ret = ioctl(fd, FM_IOCTL_SETMONOSTERO, stemono);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-int COM_get_caparray(int fd, int *caparray)
-{
- int ret = 0;
-
- ret = ioctl(fd, FM_IOCTL_GETCAPARRAY, caparray);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-int COM_get_hw_info(int fd, struct fm_hw_info *info)
-{
- int ret = 0;
-
- ret = ioctl(fd, FM_IOCTL_GET_HW_INFO, info);
- if(ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret);
- return ret;
-}
-
-
-/* COM_is_dese_chan -- check if gived channel is a de-sense channel or not
- * @fd - fd of "dev/fm"
- * @freq - gived channel
- * return value: 0, not a dese chan; 1, a dese chan; else error NO.
- */
-int COM_is_dese_chan(int fd, int freq)
-{
- int ret = 0;
- int tmp = freq;
-
- ret = ioctl(fd, FM_IOCTL_IS_DESE_CHAN, &freq);
- if (ret < 0) {
- LOGE("%s, failed,ret=%d\n", __func__,ret);
- return ret;
- } else {
- LOGD("[fd=%d] %d --> dese=%d\n", fd, tmp, freq);
- return freq;
- }
-}
-
-
-
-/* COM_desense_check -- check if gived channel is a de-sense channel or not
- * @fd - fd of "dev/fm"
- * @freq - gived channel
- * @rssi-freq's rssi
- * return value: 0, is desense channel and rssi is less than threshold; 1, not desense channel or it is but rssi is more than threshold.
- */
-int COM_desense_check(int fd, int freq, int rssi)
-{
- int ret = 0;
- fm_desense_check_t parm;
-
- parm.freq = freq;
- parm.rssi = rssi;
- ret = ioctl(fd, FM_IOCTL_DESENSE_CHECK, &parm);
- if (ret < 0) {
- LOGE("%s, failed,ret=%d\n", __func__,ret);
- return ret;
- } else {
- LOGD("[fd=%d] %d --> dese=%d\n", fd,freq,ret);
- return ret;
- }
-}
-/*
-th_idx:
- threshold type: 0, RSSI. 1,desense RSSI. 2,SMG.
-th_val: threshold value*/
-int COM_set_search_threshold(int fd, int th_idx,int th_val)
-{
- int ret = 0;
- fm_search_threshold_t th_parm;
- th_parm.th_type = th_idx;
- th_parm.th_val = th_val;
- ret = ioctl(fd, FM_IOCTL_SET_SEARCH_THRESHOLD, &th_parm);
- if (ret < 0)
- {
- LOGE("%s, failed,ret=%d\n", __func__,ret);
- }
- return ret;
-}
-int COM_full_cqi_logger(int fd, fm_full_cqi_log_t *log_parm)
-{
- int ret = 0;
-
- ret = ioctl(fd, FM_IOCTL_FULL_CQI_LOG, log_parm);
- if (ret < 0)
- {
- LOGE("%s, failed,ret=%d\n", __func__,ret);
- }
- return ret;
-}
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/fm.h b/MediaTek/fmradiolibs/fmnative/fmr/fm.h
deleted file mode 100644
index ca232c7..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/fm.h
+++ /dev/null
@@ -1,656 +0,0 @@
-#ifndef __FM_H__
-#define __FM_H__
-
-//#define FMDEBUG
-
-#include <linux/ioctl.h>
-#include <linux/time.h>
-//fm type define
-typedef signed char fm_s8;
-typedef signed short fm_s16;
-typedef signed int fm_s32;
-typedef signed long long fm_s64;
-typedef unsigned char fm_u8;
-typedef unsigned short fm_u16;
-typedef unsigned int fm_u32;
-typedef unsigned long long fm_u64;
-typedef enum fm_bool {
- fm_false = 0,
- fm_true = 1
-} fm_bool;
-
-//scan sort algorithm
-enum{
- FM_SCAN_SORT_NON = 0,
- FM_SCAN_SORT_UP,
- FM_SCAN_SORT_DOWN,
- FM_SCAN_SORT_MAX
-};
-
-//scan methods
-enum{
- FM_SCAN_SEL_HW = 0, //select hardware scan, advantage: fast
- FM_SCAN_SEL_SW, //select software scan, advantage: more accurate
- FM_SCAN_SEL_MAX
-};
-
- //*****************************************************************************************
-//***********************************FM config for customer ***********************************
-//*****************************************************************************************
-//RX
-#define FMR_RSSI_TH_LONG 0x0301 //FM radio long antenna RSSI threshold(11.375dBuV)
-#define FMR_RSSI_TH_SHORT 0x02E0 //FM radio short antenna RSSI threshold(-1dBuV)
-#define FMR_CQI_TH 0x00E9 //FM radio Channel quality indicator threshold(0x0000~0x00FF)
-#define FMR_SEEK_SPACE 1 //FM radio seek space,1:100KHZ; 2:200KHZ
-#define FMR_SCAN_CH_SIZE 80 //FM radio scan max channel size
-#define FMR_BAND 1 //FM radio band, 1:87.5MHz~108.0MHz; 2:76.0MHz~90.0MHz; 3:76.0MHz~108.0MHz; 4:special
-#define FMR_BAND_FREQ_L 875 //FM radio special band low freq(Default 87.5MHz)
-#define FMR_BAND_FREQ_H 1080 //FM radio special band high freq(Default 108.0MHz)
-#define FM_SCAN_SORT_SELECT FM_SCAN_SORT_NON
-#define FM_SCAN_SELECT FM_SCAN_SEL_HW
-#define FM_SCAN_SOFT_MUTE_GAIN_TH 3 //soft-mute threshold when software scan, rang: 0~3, 0 means better audio quality but less channel
-#define FM_CHIP_DESE_RSSI_TH (-102) // rang: -102 ~ -72
-
-//TX
-#define FMTX_PWR_LEVEL_MAX 120 //FM transmitter power level, rang: 85db~120db, default 120db
-
-//*****************************************************************************************
-//***********************************FM config for engineer ***********************************
-//*****************************************************************************************
-//RX
-#define FMR_MR_TH 0x01BD //FM radio MR threshold
-#define ADDR_SCAN_TH 0xE0 //scan thrshold register
-#define ADDR_CQI_TH 0xE1 //scan CQI register
-
-//TX
-#define FMTX_SCAN_HOLE_LOW 923 //92.3MHz~95.4MHz should not show to user
-#define FMTX_SCAN_HOLE_HIGH 954 //92.3MHz~95.4MHz should not show to user
-//*****************************************************************************************
-
-#define FM_NAME "fm"
-#define FM_DEVICE_NAME "/dev/fm"
-
-// errno
-#define FM_SUCCESS 0
-#define FM_FAILED 1
-#define FM_EPARM 2
-#define FM_BADSTATUS 3
-#define FM_TUNE_FAILED 4
-#define FM_SEEK_FAILED 5
-#define FM_BUSY 6
-#define FM_SCAN_FAILED 7
-
-// band
-
-#define FM_BAND_UNKNOWN 0
-#define FM_BAND_UE 1 // US/Europe band 87.5MHz ~ 108MHz (DEFAULT)
-#define FM_BAND_JAPAN 2 // Japan band 76MHz ~ 90MHz
-#define FM_BAND_JAPANW 3 // Japan wideband 76MHZ ~ 108MHz
-#define FM_BAND_SPECIAL 4 // special band between 76MHZ and 108MHz
-#define FM_BAND_DEFAULT FM_BAND_UE
-
-#define FM_UE_FREQ_MIN 875
-#define FM_UE_FREQ_MAX 1080
-#define FM_JP_FREQ_MIN 760
-#define FM_JP_FREQ_MAX 1080
-#define FM_FREQ_MIN FMR_BAND_FREQ_L
-#define FM_FREQ_MAX FMR_BAND_FREQ_H
-#define FM_RAIDO_BAND FM_BAND_UE
-
-// space
-#define FM_SPACE_UNKNOWN 0
-#define FM_SPACE_100K 1
-#define FM_SPACE_200K 2
-#define FM_SPACE_50K 5
-
-#define FM_SEEK_SPACE FMR_SEEK_SPACE
-
-//max scan chl num
-#define FM_MAX_CHL_SIZE FMR_SCAN_CH_SIZE
-// auto HiLo
-#define FM_AUTO_HILO_OFF 0
-#define FM_AUTO_HILO_ON 1
-
-// seek direction
-#define FM_SEEK_UP 0
-#define FM_SEEK_DOWN 1
-
-#define FM_CHIP_AR1000 0x1000
-#define FM_CHIP_MT5192 0x91
-#define FM_CHIP_MT5193 0x92
-#define FM_CHIP_MT6616 0x6616
-#define FM_CHIP_MT6620 0x6620
-#define FM_CHIP_MT6626 0x6626
-#define FM_CHIP_MT6628 0x6628
-#define FM_CHIP_MT6627 0x6627
-#define FM_CHIP_MT6580 0x6580
-#define FM_CHIP_MT6630 0x6630
-
-#define FM_CHIP_UNSUPPORTED -1
-
-// seek threshold
-#define FM_SEEKTH_LEVEL_DEFAULT 4
-
-struct fm_tune_parm {
- uint8_t err;
- uint8_t band;
- uint8_t space;
- uint8_t hilo;
- uint16_t freq; // IN/OUT parameter
-};
-
-struct fm_seek_parm {
- uint8_t err;
- uint8_t band;
- uint8_t space;
- uint8_t hilo;
- uint8_t seekdir;
- uint8_t seekth;
- uint16_t freq; // IN/OUT parameter
-};
-
-struct fm_scan_parm {
- uint8_t err;
- uint8_t band;
- uint8_t space;
- uint8_t hilo;
- uint16_t freq; // OUT parameter
- uint16_t ScanTBL[26]; //need no less than the chip
- uint16_t ScanTBLSize; //IN/OUT parameter
-};
-
-struct fm_ch_rssi{
- uint16_t freq;
- int rssi;
-};
-
-enum fm_scan_cmd_t {
- FM_SCAN_CMD_INIT = 0,
- FM_SCAN_CMD_START,
- FM_SCAN_CMD_GET_NUM,
- FM_SCAN_CMD_GET_CH,
- FM_SCAN_CMD_GET_RSSI,
- FM_SCAN_CMD_GET_CH_RSSI,
- FM_SCAN_CMD_MAX
-};
-
-struct fm_scan_t {
- enum fm_scan_cmd_t cmd;
- int ret; // 0, success; else error code
- uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
- uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
- int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz
- int num; // valid channel number
- void *priv;
- int sr_size; // scan result buffer size in bytes
- union {
- uint16_t *ch_buf; // channel buffer
- int *rssi_buf; // rssi buffer
- struct fm_ch_rssi *ch_rssi_buf; //channel and RSSI buffer
- } sr;
-};
-
-struct fm_seek_t {
- int ret; // 0, success; else error code
- uint16_t freq;
- uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
- uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
- int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz
- int dir; // 0: up; 1: down
- int th; // seek threshold in dbm(Eg, -95dbm)
- void *priv;
-};
-
-struct fm_tune_t {
- int ret; // 0, success; else error code
- uint16_t freq;
- uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
- uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
- int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz
- void *priv;
-};
-struct fm_softmute_tune_t
-{
- fm_s32 rssi; // RSSI of current channel
- fm_u16 freq; //current frequency
- fm_bool valid; //current channel is valid(true) or not(false)
-};
-
-struct fm_rssi_req{
- uint16_t num;
- uint16_t read_cnt;
- struct fm_ch_rssi cr[26*16];
-};
-
-struct fm_hw_info{
- int chip_id; //chip ID, eg. 6620
- int eco_ver; //chip ECO version, eg. E3
- int rom_ver; //FM DSP rom code version, eg. V2
- int patch_ver; //FM DSP patch version, eg. 1.11
- int reserve;
-};
-
-struct fm_search_threshold_t
-{
- fm_s32 th_type;// 0, RSSI. 1,desense RSSI. 2,SMG.
- fm_s32 th_val; //threshold value
- fm_s32 reserve;
-};
-
-#if 1
-#define NEED_DEF_RDS 1
-#else
-#define NEED_DEF_RDS 0
-#endif
-
-#if NEED_DEF_RDS
-//For RDS feature
-typedef struct
-{
- uint8_t TP;
- uint8_t TA;
- uint8_t Music;
- uint8_t Stereo;
- uint8_t Artificial_Head;
- uint8_t Compressed;
- uint8_t Dynamic_PTY;
- uint8_t Text_AB;
- uint32_t flag_status;
-}RDSFlag_Struct;
-
-typedef struct
-{
- uint16_t Month;
- uint16_t Day;
- uint16_t Year;
- uint16_t Hour;
- uint16_t Minute;
- uint8_t Local_Time_offset_signbit;
- uint8_t Local_Time_offset_half_hour;
-}CT_Struct;
-
-typedef struct
-{
- int16_t AF_Num;
- int16_t AF[2][25]; //100KHz
- uint8_t Addr_Cnt;
- uint8_t isMethod_A;
- uint8_t isAFNum_Get;
-}AF_Info;
-
-typedef struct
-{
- uint8_t PS[4][8];
- uint8_t Addr_Cnt;
-}PS_Info;
-
-typedef struct
-{
- uint8_t TextData[4][64];
- uint8_t GetLength;
- uint8_t isRTDisplay;
- uint8_t TextLength;
- uint8_t isTypeA;
- uint8_t BufCnt;
- uint16_t Addr_Cnt;
-}RT_Info;
-
-struct rds_raw_data
-{
- int dirty; //indicate if the data changed or not
- int len; //the data len form chip
- uint8_t data[146];
-};
-
-struct rds_group_cnt
-{
- unsigned int total;
- unsigned int groupA[16]; //RDS groupA counter
- unsigned int groupB[16]; //RDS groupB counter
-};
-
-enum rds_group_cnt_opcode
-{
- RDS_GROUP_CNT_READ = 0,
- RDS_GROUP_CNT_WRITE,
- RDS_GROUP_CNT_RESET,
- RDS_GROUP_CNT_MAX
-};
-
-struct rds_group_cnt_req
-{
- int err;
- enum rds_group_cnt_opcode op;
- struct rds_group_cnt gc;
-};
-
-typedef struct
-{
- CT_Struct CT;
- RDSFlag_Struct RDSFlag;
- uint16_t PI;
- uint8_t Switch_TP;
- uint8_t PTY;
- AF_Info AF_Data;
- uint8_t Radio_Page_Code;
- uint16_t Program_Item_Number_Code;
- AF_Info AFON_Data;
- uint8_t Extend_Country_Code;
- uint16_t Language_Code;
- PS_Info PS_Data;
- uint8_t PS_ON[8];
- uint16_t event_status; //will use RDSFlag_Struct RDSFlag->flag_status to check which event, is that ok?
- RT_Info RT_Data;
- uint8_t PAD1; //padding for data aligh
- struct rds_group_cnt gc;
-} RDSData_Struct;
-
-
-//Need care the following definition.
-//valid Rds Flag for notify
-typedef enum {
- RDS_FLAG_IS_TP = 0x0001, // Program is a traffic program
- RDS_FLAG_IS_TA = 0x0002, // Program currently broadcasts a traffic ann.
- RDS_FLAG_IS_MUSIC = 0x0004, // Program currently broadcasts music
- RDS_FLAG_IS_STEREO = 0x0008, // Program is transmitted in stereo
- RDS_FLAG_IS_ARTIFICIAL_HEAD = 0x0010, // Program is an artificial head recording
- RDS_FLAG_IS_COMPRESSED = 0x0020, // Program content is compressed
- RDS_FLAG_IS_DYNAMIC_PTY = 0x0040, // Program type can change
- RDS_FLAG_TEXT_AB = 0x0080 // If this flag changes state, a new radio text string begins
-} RdsFlag;
-
-typedef enum {
- RDS_EVENT_FLAGS = 0x0001, // One of the RDS flags has changed state
- RDS_EVENT_PI_CODE = 0x0002, // The program identification code has changed
- RDS_EVENT_PTY_CODE = 0x0004, // The program type code has changed
- RDS_EVENT_PROGRAMNAME = 0x0008, // The program name has changed
- RDS_EVENT_UTCDATETIME = 0x0010, // A new UTC date/time is available
- RDS_EVENT_LOCDATETIME = 0x0020, // A new local date/time is available
- RDS_EVENT_LAST_RADIOTEXT = 0x0040, // A radio text string was completed
- RDS_EVENT_AF = 0x0080, // Current Channel RF signal strength too weak, need do AF switch
- RDS_EVENT_AF_LIST = 0x0100, // An alternative frequency list is ready
- RDS_EVENT_AFON_LIST = 0x0200, // An alternative frequency list is ready
- RDS_EVENT_TAON = 0x0400, // Other Network traffic announcement start
- RDS_EVENT_TAON_OFF = 0x0800, // Other Network traffic announcement finished.
- RDS_EVENT_RDS = 0x2000, // RDS Interrupt had arrived durint timer period
- RDS_EVENT_NO_RDS = 0x4000, // RDS Interrupt not arrived durint timer period
- RDS_EVENT_RDS_TIMER = 0x8000 // Timer for RDS Bler Check. ---- BLER block error rate
-} RdsEvent;
-#endif
-
-struct fm_rds_tx_parm {
- uint8_t err;
- uint16_t pi;
- uint16_t ps[12]; // 4 ps
- uint16_t other_rds[87]; // 0~29 other groups
- uint8_t other_rds_cnt; // # of other group
-};
-
-typedef struct fm_rds_tx_req{
- unsigned char pty; // 0~31 integer
- unsigned char rds_rbds; // 0:RDS, 1:RBDS
- unsigned char dyn_pty; // 0:static, 1:dynamic
- unsigned short pi_code; // 2-byte hex
- unsigned char ps_buf[8]; // hex buf of PS
- unsigned char ps_len; // length of PS, must be 0 / 8"
- unsigned char af; // 0~204, 0:not used, 1~204:(87.5+0.1*af)MHz
- unsigned char ah; // Artificial head, 0:no, 1:yes
- unsigned char stereo; // 0:mono, 1:stereo
- unsigned char compress; // Audio compress, 0:no, 1:yes
- unsigned char tp; // traffic program, 0:no, 1:yes
- unsigned char ta; // traffic announcement, 0:no, 1:yes
- unsigned char speech; // 0:music, 1:speech
-}fm_rds_tx_req;
-
-#define TX_SCAN_MAX 10
-#define TX_SCAN_MIN 1
-struct fm_tx_scan_parm {
- uint8_t err;
- uint8_t band; //87.6~108MHz
- uint8_t space;
- uint8_t hilo;
- uint16_t freq; // start freq, if less than band min freq, then will use band min freq
- uint8_t scandir;
- uint16_t ScanTBL[TX_SCAN_MAX]; //need no less than the chip
- uint16_t ScanTBLSize; //IN: desired size, OUT: scan result size
-};
-
-struct fm_gps_rtc_info{
- int err; //error number, 0: success, other: err code
- int retryCnt; //GPS mnl can decide retry times
- int ageThd; //GPS 3D fix time diff threshold
- int driftThd; //GPS RTC drift threshold
- struct timeval tvThd; //time value diff threshold
- int age; //GPS 3D fix time diff
- int drift; //GPS RTC drift
- union{
- unsigned long stamp; //time stamp in jiffies
- struct timeval tv; //time stamp value in RTC
- };
- int flag; //rw flag
-};
-
-typedef enum
-{
- FM_I2S_ON = 0,
- FM_I2S_OFF,
- FM_I2S_STATE_ERR
-}fm_i2s_state_e;
-
-typedef enum
-{
- FM_I2S_MASTER = 0,
- FM_I2S_SLAVE,
- FM_I2S_MODE_ERR
-}fm_i2s_mode_e;
-
-typedef enum
-{
- FM_I2S_32K = 0,
- FM_I2S_44K,
- FM_I2S_48K,
- FM_I2S_SR_ERR
-}fm_i2s_sample_e;
-
-struct fm_i2s_setting{
- int onoff;
- int mode;
- int sample;
-};
-
-typedef enum{
- FM_RX = 0,
- FM_TX = 1
-}FM_PWR_T;
-
-typedef struct fm_i2s_info
-{
- int status; /*0:FM_I2S_ON, 1:FM_I2S_OFF,2:error*/
- int mode; /*0:FM_I2S_MASTER, 1:FM_I2S_SLAVE,2:error*/
- int rate; /*0:FM_I2S_32K:32000,1:FM_I2S_44K:44100,2:FM_I2S_48K:48000,3:error*/
-} fm_i2s_info_t;
-
-typedef enum
-{
- FM_AUD_ANALOG = 0,
- FM_AUD_I2S = 1,
- FM_AUD_MRGIF = 2,
- FM_AUD_ERR
-}fm_audio_path_e;
-
-typedef enum
-{
- FM_I2S_PAD_CONN = 0, //sco fm chip: e.g.6627
- FM_I2S_PAD_IO = 1, //combo fm chip: e.g.6628
- FM_I2S_PAD_ERR
-}fm_i2s_pad_sel_e;
-
-typedef struct fm_audio_info
-{
- fm_audio_path_e aud_path;
- fm_i2s_info_t i2s_info;
- fm_i2s_pad_sel_e i2s_pad;
-} fm_audio_info_t;
-
-struct fm_cqi
-{
- int ch;
- int rssi;
- int reserve;
-};
-
-struct fm_cqi_req
-{
- uint16_t ch_num;
- int buf_size;
- char *cqi_buf;
-};
-typedef struct
-{
- int freq;
- int rssi;
-}fm_desense_check_t;
-
-typedef struct
-{
- uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
- uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
- int space; // 0x1: 50KHz, 0x2: 100Khz, 0x4: 200Khz
- int cycle; // repeat times
-}fm_full_cqi_log_t;
-
-typedef struct
-{
- int which;
- bool stat;
-}fm_status_t;
-
-// ********** ***********FM IOCTL define start *******************************
-
-#define FM_IOC_MAGIC 0xf5 // FIXME: any conflict?
-
-#define FM_IOCTL_POWERUP _IOWR(FM_IOC_MAGIC, 0, struct fm_tune_parm)
-#define FM_IOCTL_POWERDOWN _IOWR(FM_IOC_MAGIC, 1, int32_t)
-#define FM_IOCTL_TUNE _IOWR(FM_IOC_MAGIC, 2, struct fm_tune_parm)
-#define FM_IOCTL_SEEK _IOWR(FM_IOC_MAGIC, 3, struct fm_seek_parm)
-#define FM_IOCTL_SETVOL _IOWR(FM_IOC_MAGIC, 4, uint32_t)
-#define FM_IOCTL_GETVOL _IOWR(FM_IOC_MAGIC, 5, uint32_t)
-#define FM_IOCTL_MUTE _IOWR(FM_IOC_MAGIC, 6, uint32_t)
-#define FM_IOCTL_GETRSSI _IOWR(FM_IOC_MAGIC, 7, int32_t)
-#define FM_IOCTL_SCAN _IOWR(FM_IOC_MAGIC, 8, struct fm_scan_parm)
-#define FM_IOCTL_STOP_SCAN _IO(FM_IOC_MAGIC, 9)
-
-//IOCTL and struct for test
-#define FM_IOCTL_GETCHIPID _IOWR(FM_IOC_MAGIC, 10, uint16_t)
-#define FM_IOCTL_EM_TEST _IOWR(FM_IOC_MAGIC, 11, struct fm_em_parm)
-#define FM_IOCTL_RW_REG _IOWR(FM_IOC_MAGIC, 12, struct fm_ctl_parm)
-#define FM_IOCTL_GETMONOSTERO _IOWR(FM_IOC_MAGIC, 13, uint16_t)
-#define FM_IOCTL_GETCURPAMD _IOWR(FM_IOC_MAGIC, 14, uint16_t)
-#define FM_IOCTL_GETGOODBCNT _IOWR(FM_IOC_MAGIC, 15, uint16_t)
-#define FM_IOCTL_GETBADBNT _IOWR(FM_IOC_MAGIC, 16, uint16_t)
-#define FM_IOCTL_GETBLERRATIO _IOWR(FM_IOC_MAGIC, 17, uint16_t)
-
-//IOCTL for RDS
-#define FM_IOCTL_RDS_ONOFF _IOWR(FM_IOC_MAGIC, 18, uint16_t)
-#define FM_IOCTL_RDS_SUPPORT _IOWR(FM_IOC_MAGIC, 19, int32_t)
-
-#define FM_IOCTL_POWERUP_TX _IOWR(FM_IOC_MAGIC, 20, struct fm_tune_parm)
-#define FM_IOCTL_TUNE_TX _IOWR(FM_IOC_MAGIC, 21, struct fm_tune_parm)
-#define FM_IOCTL_RDS_TX _IOWR(FM_IOC_MAGIC, 22, struct fm_rds_tx_parm)
-
-#define FM_IOCTL_RDS_SIM_DATA _IOWR(FM_IOC_MAGIC, 23, uint32_t)
-#define FM_IOCTL_IS_FM_POWERED_UP _IOWR(FM_IOC_MAGIC, 24, uint32_t)
-
-//IOCTL for FM Tx
-#define FM_IOCTL_TX_SUPPORT _IOWR(FM_IOC_MAGIC, 25, int32_t)
-#define FM_IOCTL_RDSTX_SUPPORT _IOWR(FM_IOC_MAGIC, 26, int32_t)
-#define FM_IOCTL_RDSTX_ENABLE _IOWR(FM_IOC_MAGIC, 27, int32_t)
-#define FM_IOCTL_TX_SCAN _IOWR(FM_IOC_MAGIC, 28, struct fm_tx_scan_parm)
-
-//IOCTL for FM over BT
-#define FM_IOCTL_OVER_BT_ENABLE _IOWR(FM_IOC_MAGIC, 29, int32_t)
-
-//IOCTL for FM ANTENNA SWITCH
-#define FM_IOCTL_ANA_SWITCH _IOWR(FM_IOC_MAGIC, 30, int32_t)
-#define FM_IOCTL_GETCAPARRAY _IOWR(FM_IOC_MAGIC, 31, int32_t)
-
-//IOCTL for FM compensation by GPS RTC
-#define FM_IOCTL_GPS_RTC_DRIFT _IOWR(FM_IOC_MAGIC, 32, struct fm_gps_rtc_info)
-
-//IOCTL for FM I2S Setting
-#define FM_IOCTL_I2S_SETTING _IOWR(FM_IOC_MAGIC, 33, struct fm_i2s_setting)
-
-#define FM_IOCTL_RDS_GROUPCNT _IOWR(FM_IOC_MAGIC, 34, struct rds_group_cnt_req)
-#define FM_IOCTL_RDS_GET_LOG _IOWR(FM_IOC_MAGIC, 35, struct rds_raw_data)
-
-#define FM_IOCTL_SCAN_GETRSSI _IOWR(FM_IOC_MAGIC, 36, struct fm_rssi_req)
-#define FM_IOCTL_SETMONOSTERO _IOWR(FM_IOC_MAGIC, 37, int32_t)
-#define FM_IOCTL_RDS_BC_RST _IOWR(FM_IOC_MAGIC, 38, int32_t)
-#define FM_IOCTL_CQI_GET _IOWR(FM_IOC_MAGIC, 39, struct fm_cqi_req)
-#define FM_IOCTL_GET_HW_INFO _IOWR(FM_IOC_MAGIC, 40, struct fm_hw_info)
-#define FM_IOCTL_GET_I2S_INFO _IOWR(FM_IOC_MAGIC, 41, fm_i2s_info_t)
-#define FM_IOCTL_IS_DESE_CHAN _IOWR(FM_IOC_MAGIC, 42, int32_t)
-#define FM_IOCTL_TOP_RDWR _IOWR(FM_IOC_MAGIC, 43, struct fm_top_rw_parm)
-#define FM_IOCTL_HOST_RDWR _IOWR(FM_IOC_MAGIC, 44, struct fm_host_rw_parm)
-
-#define FM_IOCTL_PRE_SEARCH _IOWR(FM_IOC_MAGIC, 45,int32_t)
-#define FM_IOCTL_RESTORE_SEARCH _IOWR(FM_IOC_MAGIC, 46,int32_t)
-
-#define FM_IOCTL_SET_SEARCH_THRESHOLD _IOWR(FM_IOC_MAGIC, 47, fm_search_threshold_t)
-
-#define FM_IOCTL_GET_AUDIO_INFO _IOWR(FM_IOC_MAGIC, 48, fm_audio_info_t)
-#define FM_IOCTL_FM_SET_STATUS _IOWR(FM_IOC_MAGIC, 49, fm_status_t)
-#define FM_IOCTL_FM_GET_STATUS _IOWR(FM_IOC_MAGIC, 50, fm_status_t)
-
-#define FM_IOCTL_SCAN_NEW _IOWR(FM_IOC_MAGIC, 60, struct fm_scan_t)
-#define FM_IOCTL_SEEK_NEW _IOWR(FM_IOC_MAGIC, 61, struct fm_seek_t)
-#define FM_IOCTL_TUNE_NEW _IOWR(FM_IOC_MAGIC, 62, struct fm_tune_t)
-
-#define FM_IOCTL_SOFT_MUTE_TUNE _IOWR(FM_IOC_MAGIC, 63, struct fm_softmute_tune_t)/*for soft mute tune*/
-#define FM_IOCTL_DESENSE_CHECK _IOWR(FM_IOC_MAGIC, 64, fm_desense_check_t)
-
-//IOCTL for EM
-#define FM_IOCTL_FULL_CQI_LOG _IOWR(FM_IOC_MAGIC, 70, fm_full_cqi_log_t )
-
-#define FM_IOCTL_DUMP_REG _IO(FM_IOC_MAGIC, 0xFF)
-
-// ********** ***********FM IOCTL define end *******************************
-
-
-enum group_idx {
- mono=0,
- stereo,
- RSSI_threshold,
- HCC_Enable,
- PAMD_threshold,
- Softmute_Enable,
- De_emphasis,
- HL_Side,
- Demod_BW,
- Dynamic_Limiter,
- Softmute_Rate,
- AFC_Enable,
- Softmute_Level,
- Analog_Volume,
- GROUP_TOTAL_NUMS
-};
-
-enum item_idx {
- Sblend_OFF=0,
- Sblend_ON,
- ITEM_TOTAL_NUMS
-};
-
-struct fm_ctl_parm {
- uint8_t err;
- uint8_t addr;
- uint16_t val;
- uint16_t rw_flag;//0:write, 1:read
-};
-
-struct fm_em_parm {
- uint16_t group_idx;
- uint16_t item_idx;
- uint32_t item_value;
-};
-#endif // __FM_H__
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/fmr.h b/MediaTek/fmradiolibs/fmnative/fmr/fmr.h
deleted file mode 100644
index fa28060..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/fmr.h
+++ /dev/null
@@ -1,341 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#ifndef __FMR_H__
-#define __FMR_H__
-
-#include <jni.h>
-#include <utils/Log.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <termios.h>
-#include <pthread.h>
-#include <linux/serial.h>
-#include "fm.h"
-#include <signal.h>
-#include <errno.h>
-#include <dlfcn.h>
-#include "../custom/fmlib_cust.h"
-
-#define FM_LIB_USE_XLOG
-
-#ifdef FM_LIB_USE_XLOG
-#include <cutils/xlog.h>
-#undef LOGV
-#define LOGV(...) XLOGV(__VA_ARGS__)
-#undef LOGD
-#define LOGD(...) XLOGD(__VA_ARGS__)
-#undef LOGI
-#define LOGI(...) XLOGI(__VA_ARGS__)
-#undef LOGW
-#define LOGW(...) XLOGW(__VA_ARGS__)
-#undef LOGE
-#define LOGE(...) XLOGE(__VA_ARGS__)
-#endif
-
-#define CUST_LIB_NAME "libfmcust.so"
-#define AR1000_LIB_NAME "libfmar1000.so"
-#define MT6616_LIB_NAME "libfmmt6616.so"
-#define MT6620_LIB_NAME "libfmmt6620.so"
-#define MT6626_LIB_NAME "libfmmt6626.so"
-#define MT6628_LIB_NAME "libfmmt6628.so"
-#define MT6627_LIB_NAME "libfmmt6627.so"
-#define MT6580_LIB_NAME "libfmmt6580.so"
-#define MT6630_LIB_NAME "libfmmt6630.so"
-#define MT519X_LIB_NAME "libfmmt519x.so"
-#define FM_DEV_NAME "/dev/fm"
-
-#define FM_RDS_PS_LEN 8
-
-struct fm_cbk_tbl {
- //Basic functions.
- int (*open_dev)(const char *pname, int *fd);
- int (*close_dev)(int fd);
- int (*pwr_up)(int fd, int band, int freq);
- int (*pwr_down)(int fd, int type);
- int (*seek)(int fd, int *freq, int band, int dir, int lev);
- int (*scan)(int fd, uint16_t *tbl, int *num, int band, int sort);
- int (*scan_new)(int fd, void **ppdst, int upper, int lower, int space, void *para);
- int (*seek_new)(int fd, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para);
- int (*tune_new)(int fd, int freq, int upper, int lower, int space, void *para);
- int (*fastget_rssi)(int fd, struct fm_rssi_req *rssi_req);
- int (*get_cqi)(int fd, int num, char *buf, int buf_len);
- int (*stop_scan)(int fd);
- int (*tune)(int fd, int freq, int band);
- int (*set_mute)(int fd, int mute);
- int (*is_fm_pwrup)(int fd, int *pwrup);
- int (*fm_set_status)(int fd, int which, bool stat);
- int (*fm_get_status)(int fd, int which, bool *stat);
- int (*is_rdsrx_support)(int fd, int *supt);
- int (*is_rdstx_support)(int fd, int *supt);
- int (*turn_on_off_rds)(int fd, int onoff);
- int (*get_chip_id)(int fd, int *chipid);
- //FOR RDS RX.
- int (*read_rds_data)(int fd, RDSData_Struct *rds, uint16_t *rds_status);
- int (*get_pi)(int fd, RDSData_Struct *rds, uint16_t *pi);
- int (*get_ps)(int fd, RDSData_Struct *rds, uint8_t **ps, int *ps_len);
- int (*get_pty)(int fd, RDSData_Struct *rds, uint8_t *pty);
- int (*get_rssi)(int fd, int *rssi);
- int (*get_rt)(int fd, RDSData_Struct *rds, uint8_t **rt, int *rt_len);
- int (*active_af)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *ret_freq);
- int (*active_ta)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq);
- int (*deactive_ta)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq);
- //FOR RDS TX.
- int (*is_tx_support)(int fd, int *supt);
- int (*tx_pwrup)(int fd, int band, int freq);
- int (*tx_tune)(int fd, int band, int freq);
- int (*tx_scan)(int fd, int band, int start_freq, int dir, int *num, uint16_t *tbl);
- int (*rdstx_onoff)(int fd, int onoff);
- int (*rdstx)(int fd, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt);
- // For FM new feature
- //FM over BT
- int (*fm_over_bt)(int fd, int onoff);
- //FM long/short antenna switch
- int (*ana_switch)(int fd, int antenna);
- //For FM RX EM mode
- int (*get_badratio)(int fd, int *badratio);
- int (*get_stereomono)(int fd, int *stemono);
- int (*set_stereomono)(int fd, int stemono);
- int (*get_caparray)(int fd, int *caparray);
- int (*get_hw_info)(int fd, struct fm_hw_info *info);
- int (*is_dese_chan)(int fd, int freq);
- int (*soft_mute_tune)(int fd,fm_softmute_tune_t * para);
- int (*desense_check)(int fd,int freq,int rssi);
- int (*set_search_threshold)(int fd, int th_idx,int th_val);
- int (*full_cqi_logger)(int fd,fm_full_cqi_log_t *log_parm);
- /*New search*/
- int (*pre_search)(int fd);
- int (*restore_search)(int fd);
-};
-
-typedef int (*CUST_func_type)(struct CUST_cfg_ds *);
-typedef void (*init_func_type)(struct fm_cbk_tbl *);
-
-struct fmr_ds {
- int fd;
- int err;
- uint16_t cur_freq;
- uint16_t backup_freq;
- void *priv;
- void *custom_handler;
- struct CUST_cfg_ds cfg_data;
- struct fm_cbk_tbl tbl;
- CUST_func_type get_cfg;
- void* init_handler;
- init_func_type init_func;
- RDSData_Struct rds;
- struct fm_hw_info hw_info;
- fm_bool scan_stop;
-};
-/*#define fmr_fd (FMR_data.fd)
-#define fmr_err (FMR_data.err)
-#define fmr_chip (FMR_data.cfg_data.chip)
-#define fmr_low_band (FMR_data.cfg_data.low_band)
-#define fmr_high_band (FMR_data.cfg_data.high_band)
-#define fmr_seek_space (FMR_data.cfg_data.seek_space)
-#define fmr_max_scan_num (FMR_data.cfg_data.max_scan_num)
-#define fmr_cbk_tbl (FMR_data.tbl)
-#define fmr_cust_hdler (FMR_data.custom_handler)
-#define fmr_get_cfg (FMR_data.get_cfg)
-
-extern struct fmr_ds FMR_data;*/
-
-enum fmr_err_em {
- ERR_SUCCESS = 1000, // kernel error begin at here
- ERR_INVALID_BUF,
- ERR_INVALID_PARA,
- ERR_STP,
- ERR_GET_MUTEX,
- ERR_FW_NORES,
- ERR_RDS_CRC,
- ERR_INVALID_FD, // native error begin at here
- ERR_UNSUPPORT_CHIP,
- ERR_LD_LIB,
- ERR_FIND_CUST_FNUC,
- ERR_UNINIT,
- ERR_NO_MORE_IDX,
- ERR_RDS_NO_DATA,
- ERR_UNSUPT_SHORTANA,
- ERR_MAX
-};
-
-enum fmr_rds_onoff
-{
- FMR_RDS_ON,
- FMR_RDS_OFF,
- FMR_MAX
-};
-
-typedef enum
-{
- FM_LONG_ANA = 0,
- FM_SHORT_ANA
-}fm_antenna_type;
-
-
-#define CQI_CH_NUM_MAX 255
-#define CQI_CH_NUM_MIN 0
-
-
-/****************** Function declaration ******************/
-//fmr_err.cpp
-char *FMR_strerr();
-void FMR_seterr(int err);
-
-//fmr_core.cpp
-int FMR_init(void);
-int FMR_get_cfgs(int idx);
-int FMR_open_dev(int idx);
-int FMR_close_dev(int idx);
-int FMR_pwr_up(int idx, int freq);
-int FMR_pwr_down(int idx, int type);
-int FMR_seek(int idx, int start_freq, int dir, int *ret_freq);
-int FMR_scan(int idx, uint16_t *tbl, int *num);
-int FMR_scan_new(int idx, uint16_t *scan_tbl, int *max_cnt, int upper, int lower, int space, void *para);
-int FMR_seek_new(int idx, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para);
-int FMR_tune_new(int idx, int freq, int upper, int lower, int space, void *para);
-int FMR_stop_scan(int idx);
-int FMR_tune(int idx, int freq);
-int FMR_set_mute(int idx, int mute);
-int FMR_is_fm_pwrup(int idx, int *pwrup);
-int FM_set_status(int idx, int which, bool stat);
-int FM_get_status(int idx, int which, bool *stat);
-int FMR_is_rdsrx_support(int idx, int *supt);
-int FMR_turn_on_off_rds(int idx, int onoff);
-int FMR_get_chip_id(int idx, int *chipid);
-int FMR_read_rds_data(int idx, uint16_t *rds_status);
-int FMR_get_pi(int idx, uint16_t *pi);
-int FMR_get_ps(int idx, uint8_t **ps, int *ps_len);
-int FMR_get_pty(int idx, uint8_t *pty);
-int FMR_get_rssi(int idx, int *rssi);
-int FMR_get_rt(int idx, uint8_t **rt, int *rt_len);
-int FMR_active_af(int idx, uint16_t *ret_freq);
-int FMR_active_ta(int idx, uint16_t *ret_freq);
-int FMR_deactive_ta(int idx, uint16_t *ret_freq);
-
-int FMR_is_tx_support(int idx, int *supt);
-int FMR_is_rdstx_support(int idx, int *supt);
-int FMR_tx_pwrup(int idx, int freq);
-int FMR_tx_tune(int idx, int freq);
-int FMR_tx_scan(int idx, int start_freq, int dir, int *num, uint16_t *tbl);
-int FMR_rdstx_onoff(int idx, int onoff);
-int FMR_rdstx(int idx, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt);
-
-int FMR_fm_over_bt(int idx, int onoff);
-int FMR_ana_switch(int idx, int antenna);
-int FMR_get_badratio(int idx, int *badratio);
-int FMR_get_stereomono(int idx, int *stemono);
-int FMR_set_stereomono(int idx, int stemono);
-int FMR_get_caparray(int idx, int *caparray);
-int FMR_get_hw_info(int idx, int **info, int *info_len);
-int FMR_Pre_Search(int idx);
-int FMR_Restore_Search(int idx);
-int FMR_EMSetTH(int idx, int th_idx, int th_val);
-int FMR_EM_CQI_logger(int idx,uint16_t cycle);
-
-
-//common part
-int COM_open_dev(const char *pname, int *fd);
-int COM_close_dev(int fd);
-int COM_pwr_up(int fd, int band, int freq);
-int COM_pwr_down(int fd, int type);
-int COM_seek(int fd, int *freq, int band, int dir, int lev);
-int COM_Soft_Mute_Tune(int fd,fm_softmute_tune_t * para);
-//int COM_dese_chan_check(int fd, int freq);
-int COM_hw_scan(int fd, uint16_t *tbl, int *num, int band, int sort);
-int COM_hw_scan_new(int fd, void **ppdst, int upper, int lower, int space, void *para);
-int COM_seek_new(int fd, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para);
-int COM_tune_new(int fd, int freq, int upper, int lower, int space, void *para);
-int COM_fastget_rssi(int fd, struct fm_rssi_req *rssi_req);
-int COM_get_cqi(int fd, int num, char *buf, int buf_len);
-int COM_sw_scan(int fd, uint16_t *tbl, int *num, int band, int sort);
-int COM_stop_scan(int fd);
-int COM_tune(int fd, int freq, int band);
-int COM_set_mute(int fd, int mute);
-int COM_is_fm_pwrup(int fd, int *pwrup);
-int COM_fm_set_status(int fd, int which, bool stat);
-int COM_fm_get_status(int fd, int which, bool *stat);
-int COM_is_rdsrx_support(int fd, int *supt);
-int COM_is_rdstx_support(int fd, int *supt);
-int COM_turn_on_off_rds(int fd, int onoff);
-int COM_get_chip_id(int fd, int *chipid);
-int COM_read_rds_data(int fd, RDSData_Struct *rds, uint16_t *rds_status);
-int COM_get_pi(int fd, RDSData_Struct *rds, uint16_t *pi);
-int COM_get_ps(int fd, RDSData_Struct *rds, uint8_t **ps, int *ps_len);
-int COM_get_pty(int fd, RDSData_Struct *rds, uint8_t *pty);
-int COM_get_rssi(int fd, int *rssi);
-int COM_get_rt(int fd, RDSData_Struct *rds, uint8_t **rt, int *rt_len);
-int COM_active_af(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *ret_freq);
-int COM_active_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq);
-int COM_deactive_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq);
-
-int COM_is_tx_support(int fd, int *supt);
-int COM_tx_support(int fd, int *supt);
-int COM_tx_pwrup(int fd, int band, int freq);
-int COM_tx_tune(int fd, int band, int freq);
-int COM_tx_scan(int fd, int band, int start_freq, int dir, int *num, uint16_t *tbl);
-int COM_rdstx_onoff(int fd, int onoff);
-int COM_rdstx(int fd, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt);
-
-int COM_fm_over_bt(int fd, int onoff);
-int COM_ana_switch(int fd, int antenna);
-int COM_get_badratio(int fd, int *badratio);
-int COM_get_stereomono(int fd, int *stemono);
-int COM_set_stereomono(int fd, int stemono);
-int COM_get_caparray(int fd, int *caparray);
-int COM_get_hw_info(int fd, struct fm_hw_info *info);
-int COM_is_dese_chan(int fd, int freq);
-int COM_desense_check(int fd, int freq, int rssi);
-int COM_pre_search(int fd);
-int COM_restore_search(int fd);
-int COM_set_search_threshold(int fd, int th_idx,int th_val);
-int COM_full_cqi_logger(int fd, fm_full_cqi_log_t *log_parm);
-
-int bt_set_controller_force_sleep(int chip);
-
-#define FMR_ASSERT(a) { \
- if ((a) == NULL) { \
- LOGE("%s,invalid buf\n", __func__);\
- return -ERR_INVALID_BUF; \
- } \
- }
-#endif
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/fmr.h~ b/MediaTek/fmradiolibs/fmnative/fmr/fmr.h~
deleted file mode 100644
index 669c346..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/fmr.h~
+++ /dev/null
@@ -1,341 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#ifndef __FMR_H__
-#define __FMR_H__
-
-#include <jni.h>
-#include <utils/Log.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <termios.h>
-#include <pthread.h>
-#include <linux/serial.h>
-#include <linux/fm.h>
-#include <signal.h>
-#include <errno.h>
-#include <dlfcn.h>
-#include "../custom/fmlib_cust.h"
-
-#define FM_LIB_USE_XLOG
-
-#ifdef FM_LIB_USE_XLOG
-#include <cutils/xlog.h>
-#undef LOGV
-#define LOGV(...) XLOGV(__VA_ARGS__)
-#undef LOGD
-#define LOGD(...) XLOGD(__VA_ARGS__)
-#undef LOGI
-#define LOGI(...) XLOGI(__VA_ARGS__)
-#undef LOGW
-#define LOGW(...) XLOGW(__VA_ARGS__)
-#undef LOGE
-#define LOGE(...) XLOGE(__VA_ARGS__)
-#endif
-
-#define CUST_LIB_NAME "libfmcust.so"
-#define AR1000_LIB_NAME "libfmar1000.so"
-#define MT6616_LIB_NAME "libfmmt6616.so"
-#define MT6620_LIB_NAME "libfmmt6620.so"
-#define MT6626_LIB_NAME "libfmmt6626.so"
-#define MT6628_LIB_NAME "libfmmt6628.so"
-#define MT6627_LIB_NAME "libfmmt6627.so"
-#define MT6580_LIB_NAME "libfmmt6580.so"
-#define MT6630_LIB_NAME "libfmmt6630.so"
-#define MT519X_LIB_NAME "libfmmt519x.so"
-#define FM_DEV_NAME "/dev/fm"
-
-#define FM_RDS_PS_LEN 8
-
-struct fm_cbk_tbl {
- //Basic functions.
- int (*open_dev)(const char *pname, int *fd);
- int (*close_dev)(int fd);
- int (*pwr_up)(int fd, int band, int freq);
- int (*pwr_down)(int fd, int type);
- int (*seek)(int fd, int *freq, int band, int dir, int lev);
- int (*scan)(int fd, uint16_t *tbl, int *num, int band, int sort);
- int (*scan_new)(int fd, void **ppdst, int upper, int lower, int space, void *para);
- int (*seek_new)(int fd, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para);
- int (*tune_new)(int fd, int freq, int upper, int lower, int space, void *para);
- int (*fastget_rssi)(int fd, struct fm_rssi_req *rssi_req);
- int (*get_cqi)(int fd, int num, char *buf, int buf_len);
- int (*stop_scan)(int fd);
- int (*tune)(int fd, int freq, int band);
- int (*set_mute)(int fd, int mute);
- int (*is_fm_pwrup)(int fd, int *pwrup);
- int (*fm_set_status)(int fd, int which, bool stat);
- int (*fm_get_status)(int fd, int which, bool *stat);
- int (*is_rdsrx_support)(int fd, int *supt);
- int (*is_rdstx_support)(int fd, int *supt);
- int (*turn_on_off_rds)(int fd, int onoff);
- int (*get_chip_id)(int fd, int *chipid);
- //FOR RDS RX.
- int (*read_rds_data)(int fd, RDSData_Struct *rds, uint16_t *rds_status);
- int (*get_pi)(int fd, RDSData_Struct *rds, uint16_t *pi);
- int (*get_ps)(int fd, RDSData_Struct *rds, uint8_t **ps, int *ps_len);
- int (*get_pty)(int fd, RDSData_Struct *rds, uint8_t *pty);
- int (*get_rssi)(int fd, int *rssi);
- int (*get_rt)(int fd, RDSData_Struct *rds, uint8_t **rt, int *rt_len);
- int (*active_af)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *ret_freq);
- int (*active_ta)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq);
- int (*deactive_ta)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq);
- //FOR RDS TX.
- int (*is_tx_support)(int fd, int *supt);
- int (*tx_pwrup)(int fd, int band, int freq);
- int (*tx_tune)(int fd, int band, int freq);
- int (*tx_scan)(int fd, int band, int start_freq, int dir, int *num, uint16_t *tbl);
- int (*rdstx_onoff)(int fd, int onoff);
- int (*rdstx)(int fd, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt);
- // For FM new feature
- //FM over BT
- int (*fm_over_bt)(int fd, int onoff);
- //FM long/short antenna switch
- int (*ana_switch)(int fd, int antenna);
- //For FM RX EM mode
- int (*get_badratio)(int fd, int *badratio);
- int (*get_stereomono)(int fd, int *stemono);
- int (*set_stereomono)(int fd, int stemono);
- int (*get_caparray)(int fd, int *caparray);
- int (*get_hw_info)(int fd, struct fm_hw_info *info);
- int (*is_dese_chan)(int fd, int freq);
- int (*soft_mute_tune)(int fd,fm_softmute_tune_t * para);
- int (*desense_check)(int fd,int freq,int rssi);
- int (*set_search_threshold)(int fd, int th_idx,int th_val);
- int (*full_cqi_logger)(int fd,fm_full_cqi_log_t *log_parm);
- /*New search*/
- int (*pre_search)(int fd);
- int (*restore_search)(int fd);
-};
-
-typedef int (*CUST_func_type)(struct CUST_cfg_ds *);
-typedef void (*init_func_type)(struct fm_cbk_tbl *);
-
-struct fmr_ds {
- int fd;
- int err;
- uint16_t cur_freq;
- uint16_t backup_freq;
- void *priv;
- void *custom_handler;
- struct CUST_cfg_ds cfg_data;
- struct fm_cbk_tbl tbl;
- CUST_func_type get_cfg;
- void* init_handler;
- init_func_type init_func;
- RDSData_Struct rds;
- struct fm_hw_info hw_info;
- fm_bool scan_stop;
-};
-/*#define fmr_fd (FMR_data.fd)
-#define fmr_err (FMR_data.err)
-#define fmr_chip (FMR_data.cfg_data.chip)
-#define fmr_low_band (FMR_data.cfg_data.low_band)
-#define fmr_high_band (FMR_data.cfg_data.high_band)
-#define fmr_seek_space (FMR_data.cfg_data.seek_space)
-#define fmr_max_scan_num (FMR_data.cfg_data.max_scan_num)
-#define fmr_cbk_tbl (FMR_data.tbl)
-#define fmr_cust_hdler (FMR_data.custom_handler)
-#define fmr_get_cfg (FMR_data.get_cfg)
-
-extern struct fmr_ds FMR_data;*/
-
-enum fmr_err_em {
- ERR_SUCCESS = 1000, // kernel error begin at here
- ERR_INVALID_BUF,
- ERR_INVALID_PARA,
- ERR_STP,
- ERR_GET_MUTEX,
- ERR_FW_NORES,
- ERR_RDS_CRC,
- ERR_INVALID_FD, // native error begin at here
- ERR_UNSUPPORT_CHIP,
- ERR_LD_LIB,
- ERR_FIND_CUST_FNUC,
- ERR_UNINIT,
- ERR_NO_MORE_IDX,
- ERR_RDS_NO_DATA,
- ERR_UNSUPT_SHORTANA,
- ERR_MAX
-};
-
-enum fmr_rds_onoff
-{
- FMR_RDS_ON,
- FMR_RDS_OFF,
- FMR_MAX
-};
-
-typedef enum
-{
- FM_LONG_ANA = 0,
- FM_SHORT_ANA
-}fm_antenna_type;
-
-
-#define CQI_CH_NUM_MAX 255
-#define CQI_CH_NUM_MIN 0
-
-
-/****************** Function declaration ******************/
-//fmr_err.cpp
-char *FMR_strerr();
-void FMR_seterr(int err);
-
-//fmr_core.cpp
-int FMR_init(void);
-int FMR_get_cfgs(int idx);
-int FMR_open_dev(int idx);
-int FMR_close_dev(int idx);
-int FMR_pwr_up(int idx, int freq);
-int FMR_pwr_down(int idx, int type);
-int FMR_seek(int idx, int start_freq, int dir, int *ret_freq);
-int FMR_scan(int idx, uint16_t *tbl, int *num);
-int FMR_scan_new(int idx, uint16_t *scan_tbl, int *max_cnt, int upper, int lower, int space, void *para);
-int FMR_seek_new(int idx, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para);
-int FMR_tune_new(int idx, int freq, int upper, int lower, int space, void *para);
-int FMR_stop_scan(int idx);
-int FMR_tune(int idx, int freq);
-int FMR_set_mute(int idx, int mute);
-int FMR_is_fm_pwrup(int idx, int *pwrup);
-int FM_set_status(int idx, int which, bool stat);
-int FM_get_status(int idx, int which, bool *stat);
-int FMR_is_rdsrx_support(int idx, int *supt);
-int FMR_turn_on_off_rds(int idx, int onoff);
-int FMR_get_chip_id(int idx, int *chipid);
-int FMR_read_rds_data(int idx, uint16_t *rds_status);
-int FMR_get_pi(int idx, uint16_t *pi);
-int FMR_get_ps(int idx, uint8_t **ps, int *ps_len);
-int FMR_get_pty(int idx, uint8_t *pty);
-int FMR_get_rssi(int idx, int *rssi);
-int FMR_get_rt(int idx, uint8_t **rt, int *rt_len);
-int FMR_active_af(int idx, uint16_t *ret_freq);
-int FMR_active_ta(int idx, uint16_t *ret_freq);
-int FMR_deactive_ta(int idx, uint16_t *ret_freq);
-
-int FMR_is_tx_support(int idx, int *supt);
-int FMR_is_rdstx_support(int idx, int *supt);
-int FMR_tx_pwrup(int idx, int freq);
-int FMR_tx_tune(int idx, int freq);
-int FMR_tx_scan(int idx, int start_freq, int dir, int *num, uint16_t *tbl);
-int FMR_rdstx_onoff(int idx, int onoff);
-int FMR_rdstx(int idx, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt);
-
-int FMR_fm_over_bt(int idx, int onoff);
-int FMR_ana_switch(int idx, int antenna);
-int FMR_get_badratio(int idx, int *badratio);
-int FMR_get_stereomono(int idx, int *stemono);
-int FMR_set_stereomono(int idx, int stemono);
-int FMR_get_caparray(int idx, int *caparray);
-int FMR_get_hw_info(int idx, int **info, int *info_len);
-int FMR_Pre_Search(int idx);
-int FMR_Restore_Search(int idx);
-int FMR_EMSetTH(int idx, int th_idx, int th_val);
-int FMR_EM_CQI_logger(int idx,uint16_t cycle);
-
-
-//common part
-int COM_open_dev(const char *pname, int *fd);
-int COM_close_dev(int fd);
-int COM_pwr_up(int fd, int band, int freq);
-int COM_pwr_down(int fd, int type);
-int COM_seek(int fd, int *freq, int band, int dir, int lev);
-int COM_Soft_Mute_Tune(int fd,fm_softmute_tune_t * para);
-//int COM_dese_chan_check(int fd, int freq);
-int COM_hw_scan(int fd, uint16_t *tbl, int *num, int band, int sort);
-int COM_hw_scan_new(int fd, void **ppdst, int upper, int lower, int space, void *para);
-int COM_seek_new(int fd, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para);
-int COM_tune_new(int fd, int freq, int upper, int lower, int space, void *para);
-int COM_fastget_rssi(int fd, struct fm_rssi_req *rssi_req);
-int COM_get_cqi(int fd, int num, char *buf, int buf_len);
-int COM_sw_scan(int fd, uint16_t *tbl, int *num, int band, int sort);
-int COM_stop_scan(int fd);
-int COM_tune(int fd, int freq, int band);
-int COM_set_mute(int fd, int mute);
-int COM_is_fm_pwrup(int fd, int *pwrup);
-int COM_fm_set_status(int fd, int which, bool stat);
-int COM_fm_get_status(int fd, int which, bool *stat);
-int COM_is_rdsrx_support(int fd, int *supt);
-int COM_is_rdstx_support(int fd, int *supt);
-int COM_turn_on_off_rds(int fd, int onoff);
-int COM_get_chip_id(int fd, int *chipid);
-int COM_read_rds_data(int fd, RDSData_Struct *rds, uint16_t *rds_status);
-int COM_get_pi(int fd, RDSData_Struct *rds, uint16_t *pi);
-int COM_get_ps(int fd, RDSData_Struct *rds, uint8_t **ps, int *ps_len);
-int COM_get_pty(int fd, RDSData_Struct *rds, uint8_t *pty);
-int COM_get_rssi(int fd, int *rssi);
-int COM_get_rt(int fd, RDSData_Struct *rds, uint8_t **rt, int *rt_len);
-int COM_active_af(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *ret_freq);
-int COM_active_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq);
-int COM_deactive_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq);
-
-int COM_is_tx_support(int fd, int *supt);
-int COM_tx_support(int fd, int *supt);
-int COM_tx_pwrup(int fd, int band, int freq);
-int COM_tx_tune(int fd, int band, int freq);
-int COM_tx_scan(int fd, int band, int start_freq, int dir, int *num, uint16_t *tbl);
-int COM_rdstx_onoff(int fd, int onoff);
-int COM_rdstx(int fd, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt);
-
-int COM_fm_over_bt(int fd, int onoff);
-int COM_ana_switch(int fd, int antenna);
-int COM_get_badratio(int fd, int *badratio);
-int COM_get_stereomono(int fd, int *stemono);
-int COM_set_stereomono(int fd, int stemono);
-int COM_get_caparray(int fd, int *caparray);
-int COM_get_hw_info(int fd, struct fm_hw_info *info);
-int COM_is_dese_chan(int fd, int freq);
-int COM_desense_check(int fd, int freq, int rssi);
-int COM_pre_search(int fd);
-int COM_restore_search(int fd);
-int COM_set_search_threshold(int fd, int th_idx,int th_val);
-int COM_full_cqi_logger(int fd, fm_full_cqi_log_t *log_parm);
-
-int bt_set_controller_force_sleep(int chip);
-
-#define FMR_ASSERT(a) { \
- if ((a) == NULL) { \
- LOGE("%s,invalid buf\n", __func__);\
- return -ERR_INVALID_BUF; \
- } \
- }
-#endif
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/fmr_core.cpp b/MediaTek/fmradiolibs/fmnative/fmr/fmr_core.cpp
deleted file mode 100644
index 53bf74f..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/fmr_core.cpp
+++ /dev/null
@@ -1,2176 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-/*******************************************************************
- * FM JNI core
- * return -1 if error occured. else return needed value.
- * if return type is char *, return NULL if error occured.
- * Do NOT return value access paramater.
- *
- * FM JNI core should be independent from lower layer, that means
- * there should be no low layer dependent data struct in FM JNI core
- *
- * Naming rule: FMR_n(paramter Micro), FMR_v(functions), fmr_n(global param)
- * pfmr_n(global paramter pointer)
- *
- *******************************************************************/
-
-#include "fmr.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "FMLIB_CORE"
-
-#define FMR_MAX_IDX 1
-
-struct fmr_ds fmr_data;
-struct fmr_ds *pfmr_data[FMR_MAX_IDX] = {0};
-#define FMR_fd(idx) ((pfmr_data[idx])->fd)
-#define FMR_err(idx) ((pfmr_data[idx])->err)
-#define FMR_chip(idx) ((pfmr_data[idx])->cfg_data.chip)
-#define FMR_low_band(idx) ((pfmr_data[idx])->cfg_data.low_band)
-#define FMR_high_band(idx) ((pfmr_data[idx])->cfg_data.high_band)
-#define FMR_seek_space(idx) ((pfmr_data[idx])->cfg_data.seek_space)
-#define FMR_max_scan_num(idx) ((pfmr_data[idx])->cfg_data.max_scan_num)
-#define FMR_cbk_tbl(idx) ((pfmr_data[idx])->tbl)
-#define FMR_cust_hdler(idx) ((pfmr_data[idx])->custom_handler)
-#define FMR_get_cfg(idx) ((pfmr_data[idx])->get_cfg)
-
-int FMR_get_cfgs(int idx)
-{
- int ret = -1;
- FMR_cust_hdler(idx) = NULL;
- FMR_get_cfg(idx) = NULL;
-
- FMR_cust_hdler(idx) = dlopen(CUST_LIB_NAME, RTLD_NOW);
- if (FMR_cust_hdler(idx) == NULL) {
- LOGE("%s failed, %s\n", __FUNCTION__, dlerror());
- //FMR_seterr(ERR_LD_LIB);
- } else {
- *(void **) (&FMR_get_cfg(idx)) = dlsym(FMR_cust_hdler(idx), "CUST_get_cfg");
- if (FMR_get_cfg(idx) == NULL) {
- LOGE("%s failed, %s\n", __FUNCTION__, dlerror());
- //FMR_seterr(ERR_FIND_CUST_FNUC);
- } else {
- LOGI("Go to run cust function\n");
- (*FMR_get_cfg(idx))(&(pfmr_data[idx]->cfg_data));
- LOGI("OK\n");
- ret = 0;
- }
- //dlclose(FMR_cust_hdler(idx));
- FMR_cust_hdler(idx) = NULL;
- FMR_get_cfg(idx) = NULL;
- }
- LOGI("%s succefully. chip: 0x%x, lband: %d, hband: %d, seek_space: %d, max_scan_num: %d\n", __FUNCTION__, FMR_chip(idx), FMR_low_band(idx), FMR_high_band(idx), FMR_seek_space(idx), FMR_max_scan_num(idx));
-
- return ret;
-}
-
-int FMR_chk_cfg_data(int idx)
-{
- //TODO Need check? how to check?
- return 0;
-}
-
-static void sig_alarm(int sig)
-{
- LOGI("+++Receive sig %d\n", sig);
- return;
-}
-
-int FMR_init()
-{
- int idx;
- int ret = 0;
- //signal(4, sig_alarm);
-
- for (idx=0;idx<FMR_MAX_IDX;idx++) {
- if (pfmr_data[idx] == NULL) {
- break;
- }
- }
- LOGI("FMR idx = %d\n", idx);
- if (idx == FMR_MAX_IDX) {
- //FMR_seterr(ERR_NO_MORE_IDX);
- return -1;
- }
-
- /*The best way here is to call malloc to alloc mem for each idx,but
- I do not know where to release it, so use static global param instead*/
- pfmr_data[idx] = &fmr_data;
- memset(pfmr_data[idx], 0, sizeof(struct fmr_ds));
-
- if (FMR_get_cfgs(idx) < 0) {
- LOGI("FMR_get_cfgs failed\n");
- goto fail;
- }
-
- if (FMR_chk_cfg_data(idx) < 0) {
- LOGI("FMR_chk_cfg_data failed\n");
- goto fail;
- }
-
- switch (FMR_chip(idx)) {
- case FM_CHIP_AR1000:
- pfmr_data[idx]->init_handler = dlopen(AR1000_LIB_NAME, RTLD_NOW);
- if (pfmr_data[idx]->init_handler == NULL) {
- LOGE("%s init_handler error, %s\n", __func__, dlerror());
- //FMR_seterr(ERR_LD_LIB);
- } else{
- *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "AR1000_init");
- if (pfmr_data[idx]->init_func == NULL){
- LOGE("%s init_func error, %s\n", __func__, dlerror());
- //FMR_seterr(ERR_FIND_CUST_FNUC);
- }else{
- LOGI("Go to run init function\n");
- (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl));
- LOGI("OK\n");
- ret = 0;
- }
- }
- //AR1000_init(&FMR_cbk_tbl(idx));
- break;
- case FM_CHIP_MT6616:
- pfmr_data[idx]->init_handler = dlopen(MT6616_LIB_NAME, RTLD_NOW);
- if (pfmr_data[idx]->init_handler == NULL) {
- LOGE("%s init_handler error, %s\n", __func__, dlerror());
- //FMR_seterr(ERR_LD_LIB);
- }else{
- *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6616_init");
- if (pfmr_data[idx]->init_func == NULL){
- LOGE("%s init_func error, %s\n", __func__, dlerror());
- //FMR_seterr(ERR_FIND_CUST_FNUC);
- }else{
- LOGI("Go to run init function\n");
- (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl));
- LOGI("OK\n");
- ret = 0;
- }
- }
- //MT6616_init(&FMR_cbk_tbl(idx));
- break;
- case FM_CHIP_MT6620:
- pfmr_data[idx]->init_handler = dlopen(MT6620_LIB_NAME, RTLD_NOW);
- LOGI("mt6620[init_handler=%p]\n", pfmr_data[idx]->init_handler);
- if (pfmr_data[idx]->init_handler == NULL){
- LOGE("%s init_handler error, %s\n", __func__, dlerror());
- //FMR_seterr(ERR_LD_LIB);
- }else{
- *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6620_init");
- if (pfmr_data[idx]->init_func == NULL){
- LOGE("%s init_func error, %s\n", __func__, dlerror());
- //FMR_seterr(ERR_FIND_CUST_FNUC);
- }else{
- LOGI("Go to run 6620 init\n");
- (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl));
- LOGI("OK\n");
- ret = 0;
- }
- }
- //MT6620_init(&FMR_cbk_tbl(idx));
- break;
- case FM_CHIP_MT6626:
- pfmr_data[idx]->init_handler = dlopen(MT6626_LIB_NAME, RTLD_NOW);
- if (pfmr_data[idx]->init_handler == NULL) {
- LOGE("%s init_handler error, %s\n", __func__, dlerror());
- }else{
- *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6626_init");
- if (pfmr_data[idx]->init_func == NULL){
- LOGE("%s init_func error, %s\n", __func__, dlerror());
- }else{
- LOGI("Go to run init function\n");
- (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl));
- LOGI("OK\n");
- ret = 0;
- }
- }
- break;
- case FM_CHIP_MT6628:
- pfmr_data[idx]->init_handler = dlopen(MT6628_LIB_NAME, RTLD_NOW);
- if (pfmr_data[idx]->init_handler == NULL){
- LOGE("%s init_handler error, %s\n", __func__, dlerror());
- }else{
- *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6628_init");
- if (pfmr_data[idx]->init_func == NULL){
- LOGE("%s init_func error, %s\n", __func__, dlerror());
- }else{
- LOGI("Go to run init function\n");
- (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl));
- LOGI("OK\n");
- ret = 0;
- }
- }
- break;
- case FM_CHIP_MT6627:
- {
- pfmr_data[idx]->init_handler = dlopen(MT6627_LIB_NAME, RTLD_NOW);
- if (pfmr_data[idx]->init_handler == NULL){
- LOGE("%s init_handler error, %s\n", __func__, dlerror());
- }else{
- *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6627_init");
- if (pfmr_data[idx]->init_func == NULL){
- LOGE("%s init_func error, %s\n", __func__, dlerror());
- }else{
- LOGI("Go to run init function\n");
- (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl));
- LOGI("OK\n");
- ret = 0;
- }
- }
- break;
- }
- case FM_CHIP_MT6580:
- {
- pfmr_data[idx]->init_handler = dlopen(MT6580_LIB_NAME, RTLD_NOW);
- if (pfmr_data[idx]->init_handler == NULL){
- LOGE("%s init_handler error, %s\n", __func__, dlerror());
- }else{
- *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6580_init");
- if (pfmr_data[idx]->init_func == NULL){
- LOGE("%s init_func error, %s\n", __func__, dlerror());
- }else{
- LOGI("Go to run init function\n");
- (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl));
- LOGI("OK\n");
- ret = 0;
- }
- }
- break;
- }
- case FM_CHIP_MT6630:
- {
- pfmr_data[idx]->init_handler = dlopen(MT6630_LIB_NAME, RTLD_NOW);
- if (pfmr_data[idx]->init_handler == NULL){
- LOGE("%s init_handler error, %s\n", __func__, dlerror());
- }else{
- *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6630_init");
- if (pfmr_data[idx]->init_func == NULL){
- LOGE("%s init_func error, %s\n", __func__, dlerror());
- }else{
- LOGI("Go to run init function\n");
- (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl));
- LOGI("OK\n");
- ret = 0;
- }
- }
- break;
- }
- case FM_CHIP_MT5192:
- case FM_CHIP_MT5193:
- pfmr_data[idx]->init_handler = dlopen(MT519X_LIB_NAME, RTLD_NOW);
- if (pfmr_data[idx]->init_handler == NULL){
- LOGE("%s init_handler error, %s\n", __func__, dlerror());
- //FMR_seterr(ERR_LD_LIB);
- }else{
- *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT519X_init");
- if (pfmr_data[idx]->init_func == NULL){
- LOGE("%s init_func error, %s\n", __func__, dlerror());
- //FMR_seterr(ERR_FIND_CUST_FNUC);
- }else{
- LOGI("Go to run init function\n");
- (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl));
- LOGI("OK\n");
- ret = 0;
- }
- }
- //MT5192_init(&FMR_cbk_tbl(idx));
- break;
- default:
- //FMR_seterr(ERR_UNSUPPORT_CHIP);
- LOGI("Unsupported Chip: 0x%x", FMR_chip(idx));
- goto fail;
- }
- return idx;
-
-fail:
- pfmr_data[idx] = NULL;
-
- return -1;
-}
-
-int FMR_open_dev(int idx)
-{
- int ret = 0;
- int real_chip;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).open_dev);
-
- ret = FMR_cbk_tbl(idx).open_dev(FM_DEV_NAME, &FMR_fd(idx));
- if (ret || FMR_fd(idx) < 0) {
- LOGE("%s failed, [fd=%d]\n", __func__, FMR_fd(idx));
- return ret;
- }
-
- //Check if customer's cfg matchs driver.
- ret = FMR_get_chip_id(idx, &real_chip);
- if (FMR_chip(idx) != real_chip) {
- LOGE("%s, Chip config error. 0x%x\n", __func__, real_chip);
- ret = FMR_cbk_tbl(idx).close_dev(FMR_fd(idx));
- return ret;
- }
-
- LOGD("%s, [fd=%d] [chipid=0x%x] [ret=%d]\n", __func__, FMR_fd(idx), real_chip, ret);
- return ret;
-}
-
-int FMR_close_dev(int idx)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).close_dev);
- ret = FMR_cbk_tbl(idx).close_dev(FMR_fd(idx));
- LOGD("%s, [fd=%d] [ret=%d]\n", __func__, FMR_fd(idx), ret);
- return ret;
-}
-
-int FMR_pwr_up(int idx, int freq)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).pwr_up);
-
- LOGI("%s,[freq=%d]\n", __func__, freq);
- if (freq < fmr_data.cfg_data.low_band || freq > fmr_data.cfg_data.high_band) {
- LOGE("%s error freq: %d\n", __func__, freq);
- ret = -ERR_INVALID_PARA;
- return ret;
- }
- ret = FMR_cbk_tbl(idx).pwr_up(FMR_fd(idx), fmr_data.cfg_data.band, freq);
- if (ret) {
- LOGE("%s failed, [ret=%d]\n", __func__, ret);
- }
- fmr_data.cur_freq = freq;
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_pwr_down(int idx, int type)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).pwr_down);
- ret = FMR_cbk_tbl(idx).pwr_down(FMR_fd(idx), type);
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_get_chip_id(int idx, int *chipid)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).get_chip_id);
- FMR_ASSERT(chipid);
-
- ret = FMR_cbk_tbl(idx).get_chip_id(FMR_fd(idx), chipid);
- if (ret){
- LOGE("%s failed, %s\n", __func__, FMR_strerr());
- *chipid = -1;
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_get_rssi(int idx, int *rssi)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).get_rssi);
- FMR_ASSERT(rssi);
-
- ret = FMR_cbk_tbl(idx).get_rssi(FMR_fd(idx), rssi);
- if (ret){
- LOGE("%s failed, [ret=%d]\n", __func__, ret);
- *rssi = -1;
- }
- LOGD("%s, [rssi=%d] [ret=%d]\n", __func__, *rssi, ret);
- return ret;
-}
-
-int FMR_get_ps(int idx, uint8_t **ps, int *ps_len)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).get_ps);
- FMR_ASSERT(ps);
- FMR_ASSERT(ps_len);
- ret = FMR_cbk_tbl(idx).get_ps(FMR_fd(idx), &fmr_data.rds, ps, ps_len);
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_get_rt(int idx, uint8_t **rt, int *rt_len)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).get_rt);
- FMR_ASSERT(rt);
- FMR_ASSERT(rt_len);
-
- ret = FMR_cbk_tbl(idx).get_rt(FMR_fd(idx), &fmr_data.rds, rt, rt_len);
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_get_pi(int idx, uint16_t *pi)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).get_pi);
-
- ret = FMR_cbk_tbl(idx).get_pi(FMR_fd(idx), &fmr_data.rds, pi);
- if (ret){
- LOGE("%s failed, %s\n", __func__, FMR_strerr());
- *pi = -1;
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_get_pty(int idx, uint8_t *pty)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).get_pty);
-
- ret = FMR_cbk_tbl(idx).get_pty(FMR_fd(idx), &fmr_data.rds, pty);
- if (ret){
- *pty = -1;
- LOGI("%s failed, %s\n", __func__, FMR_strerr());
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_tune(int idx, int freq)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).tune);
-
- ret = FMR_cbk_tbl(idx).tune(FMR_fd(idx), freq, fmr_data.cfg_data.band);
- if (ret){
- LOGE("%s failed, [ret=%d]\n", __func__, ret);
- }
- fmr_data.cur_freq = freq;
- LOGD("%s, [freq=%d] [ret=%d]\n", __func__, freq, ret);
- return ret;
-}
-
-#if FMR_SOFT_MUTE_TUEN_SCAN
-/*return: fm_true: desense, fm_false: not desene channel*/
-fm_bool FMR_DensenseDetect(fm_s32 idx,fm_u16 ChannelNo,fm_s32 RSSI)
-{
- fm_u8 bDesenseCh = 0;
-
- bDesenseCh = FMR_cbk_tbl(idx).desense_check(FMR_fd(idx),ChannelNo,RSSI);
- if(bDesenseCh == 1)
- {
- return fm_true;
- }
- return fm_false;
-}
-fm_bool FMR_SevereDensense(fm_u16 ChannelNo,fm_s32 RSSI)
-{
- fm_s32 i=0,j=0;
- struct fm_fake_channel_t *chan_info = fmr_data.cfg_data.fake_chan;
-
-#ifndef MTK_FM_50KHZ_SUPPORT
- ChannelNo /= 10;
-#endif
- for(i=0; i<chan_info->size; i++)
- {
- if(ChannelNo == chan_info->chan[i].freq)
- {
- //if(RSSI < FM_SEVERE_RSSI_TH)
- if(RSSI < chan_info->chan[i].rssi_th)
- {
- LOGI(" SevereDensense[%d] RSSI[%d]\n", ChannelNo,RSSI);
- return fm_true;
- }
- else
- {
- break;
- }
- }
- }
- return fm_false;
-}
-#if (FMR_NOISE_FLOORT_DETECT==1)
-/*return TRUE:get noise floor freq*/
-fm_bool FMR_NoiseFloorDetect(fm_bool *rF,fm_s32 rssi,fm_s32 *F_rssi)
-{
- if(rF[0]==fm_true)
- {
- if(rF[1]==fm_true)
- {
- F_rssi[2]=rssi;
- rF[2]=fm_true;
- return fm_true;
- }
- else
- {
- F_rssi[1]=rssi;
- rF[1]=fm_true;
- }
- }
- else
- {
- F_rssi[0]=rssi;
- rF[0]=fm_true;
- }
- return fm_false;
-}
-#endif
-
-/*check the cur_freq->freq is valid or not
-return fm_true : need check cur_freq->valid
- fm_false: check faild, should stop seek
-*/
-static fm_bool FMR_Seek_TuneCheck(int idx,fm_softmute_tune_t *cur_freq)
-{
- int ret=0;
- if(fmr_data.scan_stop == fm_true)
- {
- ret = FMR_tune(idx,fmr_data.cur_freq);
- LOGI("seek stop!!! tune ret=%d",ret);
- return fm_false;
- }
- ret = FMR_cbk_tbl(idx).soft_mute_tune(FMR_fd(idx),cur_freq);
- if(ret)
- {
- LOGE("soft mute tune, failed:[%d]\n",ret);
- cur_freq->valid = fm_false;
- return fm_true;
- }
- if(cur_freq->valid == fm_true)/*get valid channel*/
- {
- if(FMR_DensenseDetect(idx,cur_freq->freq,cur_freq->rssi)==fm_true)
- {
- LOGI("desense channel detected:[%d] \n", cur_freq->freq);
- cur_freq->valid = fm_false;
- return fm_true;
- }
- if(FMR_SevereDensense(cur_freq->freq,cur_freq->rssi)==fm_true)
- {
- LOGI("sever desense channel detected:[%d] \n", cur_freq->freq);
- cur_freq->valid = fm_false;
- return fm_true;
- }
- LOGI("seek result freq:[%d] \n", cur_freq->freq);
- }
- return fm_true;
-}
-/*
-check more 2 freq, curfreq: current freq, seek_dir: 1,forward. 0,backword
-*/
-static int FMR_Seek_More(int idx,fm_softmute_tune_t *validfreq,fm_u8 seek_dir,fm_u8 step,fm_u16 min_freq,fm_u16 max_freq)
-{
- fm_s32 i;
- fm_softmute_tune_t cur_freq;
- cur_freq.freq = validfreq->freq;
-
- for(i=0; i<2; i++)
- {
- if(seek_dir)//forward
- {
- if(cur_freq.freq + step > max_freq)
- {
- return 0;
- }
- cur_freq.freq += step;
- }
- else//backward
- {
- if(cur_freq.freq - step < min_freq)
- {
- return 0;
- }
- cur_freq.freq -= step;
- }
- if(FMR_Seek_TuneCheck(idx,&cur_freq) == fm_true)
- {
- if(cur_freq.valid == fm_true)
- {
- if(cur_freq.rssi > validfreq->rssi)
- {
- validfreq->freq = cur_freq.freq;
- validfreq->rssi = cur_freq.rssi;
- LOGI("seek cover last by freq=%d",cur_freq.freq);
- }
- }
- }
- else
- {
- return -1;
- }
- }
- return 0;
-}
-
-/*check the a valid channel
-return -1 : seek fail
- 0: seek success
-*/
-int FMR_seek_Channel(int idx, int start_freq, int min_freq, int max_freq, int band_channel_no, int seek_space, int dir, int *ret_freq, int *rssi_tmp)
-{
- fm_s32 i, ret = 0;
- fm_softmute_tune_t cur_freq;
-
- if(dir==1)/*forward*/
- {
- for (i=((start_freq-min_freq)/seek_space+1); i<band_channel_no; i++)
- {
- cur_freq.freq = min_freq + seek_space*i;
- LOGI("i=%d, freq=%d-----1",i,cur_freq.freq);
- ret = FMR_Seek_TuneCheck(idx,&cur_freq);
- if(ret == fm_false)
- {
- return -1;
- }
- else
- {
- if(cur_freq.valid == fm_false)
- {
- continue;
- }
- else
- {
- if(FMR_Seek_More(idx,&cur_freq,dir,seek_space,min_freq,max_freq) == 0)
- {
- *ret_freq = cur_freq.freq;
- *rssi_tmp = cur_freq.rssi;
- return 0;
- }
- else
- {
- return -1;
- }
- }
- }
- }
- for (i=0; i<((start_freq-min_freq)/seek_space); i++)
- {
- cur_freq.freq = min_freq + seek_space*i;
- LOGI("i=%d, freq=%d-----2",i,cur_freq.freq);
- ret = FMR_Seek_TuneCheck(idx,&cur_freq);
- if(ret == fm_false)
- {
- return -1;
- }
- else
- {
- if(cur_freq.valid == fm_false)
- {
- continue;
- }
- else
- {
- if(FMR_Seek_More(idx,&cur_freq,dir,seek_space,min_freq,max_freq) == 0)
- {
- *ret_freq = cur_freq.freq;
- *rssi_tmp = cur_freq.rssi;
- return 0;
- }
- else
- {
- return -1;
- }
- }
- }
- }
- }
- else/*backward*/
- {
- for (i=((start_freq-min_freq)/seek_space-1); i>=0; i--)
- {
- cur_freq.freq = min_freq + seek_space*i;
- LOGI("i=%d, freq=%d-----3",i,cur_freq.freq);
- ret = FMR_Seek_TuneCheck(idx,&cur_freq);
- if(ret == fm_false)
- {
- return -1;
- }
- else
- {
- if(cur_freq.valid == fm_false)
- {
- continue;
- }
- else
- {
- if(FMR_Seek_More(idx,&cur_freq,dir,seek_space,min_freq,max_freq) == 0)
- {
- *ret_freq = cur_freq.freq;
- *rssi_tmp = cur_freq.rssi;
- return 0;
- }
- else
- {
- return -1;
- }
- }
- }
- }
- for (i=(band_channel_no-1); i>((start_freq-min_freq)/seek_space); i--)
- {
- cur_freq.freq = min_freq + seek_space*i;
- LOGI("i=%d, freq=%d-----4",i,cur_freq.freq);
- ret = FMR_Seek_TuneCheck(idx,&cur_freq);
- if(ret == fm_false)
- {
- return -1;
- }
- else
- {
- if(cur_freq.valid == fm_false)
- {
- continue;
- }
- else
- {
- if(FMR_Seek_More(idx,&cur_freq,dir,seek_space,min_freq,max_freq) == 0)
- {
- *ret_freq = cur_freq.freq;
- *rssi_tmp = cur_freq.rssi;
- return 0;
- }
- else
- {
- return -1;
- }
- }
- }
- }
- }
-
- *ret_freq = start_freq;
- return 0;
-}
-
-int FMR_seek(int idx, int start_freq, int dir, int *ret_freq)
-{
- fm_s32 ret=0,i,j;
- fm_softmute_tune_t cur_freq;
- fm_s32 band_channel_no=0;
- fm_u8 seek_space=10;
- fm_u16 min_freq,max_freq;
- int rssi;
-
- if ((start_freq < 7600) || (start_freq > 10800)) /*need replace by macro*/
- {
- LOGE("%s error start_freq: %d\n", __func__, start_freq);
- return -ERR_INVALID_PARA;
- }
-
- //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ
- if(fmr_data.cfg_data.seek_space == 5)
- {
- seek_space=5;
- }
- else if (fmr_data.cfg_data.seek_space == 2)
- {
- seek_space=20;
- }
- else
- {
- seek_space=10;
- }
- if (fmr_data.cfg_data.band == FM_BAND_JAPAN)// Japan band 76MHz ~ 90MHz
- {
- band_channel_no = (9600-7600)/seek_space + 1;
- min_freq = 7600;
- max_freq = 9600;
- }
- else if (fmr_data.cfg_data.band == FM_BAND_JAPANW)// Japan wideband 76MHZ ~ 108MHz
- {
- band_channel_no = (10800-7600)/seek_space + 1;
- min_freq = 7600;
- max_freq = 10800;
- }
- else// US/Europe band 87.5MHz ~ 108MHz (DEFAULT)
- {
- band_channel_no = (10800-8750)/seek_space + 1;
- min_freq = 8750;
- max_freq = 10800;
- }
-
- fmr_data.scan_stop = fm_false;
- LOGD("seek start freq %d band_channel_no=[%d], seek_space=%d band[%d - %d] dir=%d\n", start_freq, band_channel_no,seek_space,min_freq,max_freq,dir);
-
- ret = FMR_seek_Channel(idx, start_freq, min_freq, max_freq, band_channel_no, seek_space, dir, ret_freq, &rssi);
-
- return ret;
-}
-#else
-int FMR_seek(int idx, int start_freq, int dir, int *ret_freq)
-{
- int ret = 0;
- int freq = start_freq;
- int rssi;
- struct fm_fake_channel_t *chan_info = fmr_data.cfg_data.fake_chan;
- struct fm_fake_channel *channle = NULL;
- int j;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).seek);
- FMR_ASSERT(ret_freq);
-
- *ret_freq = 0;
-
- if ((start_freq < fmr_data.cfg_data.low_band) || (start_freq > fmr_data.cfg_data.high_band)) {
- LOGE("%s error start_freq: %d\n", __func__, start_freq);
- return -ERR_INVALID_PARA;
- }
-
-redo:
- LOGD("freq %d\n", freq);
- ret = FMR_cbk_tbl(idx).seek(FMR_fd(idx),
- &freq,
- fmr_data.cfg_data.band,
- dir,
- fmr_data.cfg_data.seek_lev);
-
- if (ret < 0) {
- //Here we just need to return the start_freq.
- *ret_freq = start_freq;
- LOGE("%s failed, %s\n", __func__, FMR_strerr());
- goto out;
- }
-
- if ((FMR_cbk_tbl(idx).is_dese_chan) && (FMR_cbk_tbl(idx).is_dese_chan(FMR_fd(idx), freq))) {
- FMR_cbk_tbl(idx).get_rssi(FMR_fd(idx), &rssi);
-
- if (rssi < fmr_data.cfg_data.rssi_th_l2) {
- // an invalid channel
- LOGW("cur rssi %d < TH_L2, delete %d \n", rssi, freq);
-
- if (dir) {
- freq++;
- freq = (freq > fmr_data.cfg_data.high_band) ? fmr_data.cfg_data.low_band : freq;
- } else {
- freq--;
- freq = (freq < fmr_data.cfg_data.low_band) ? fmr_data.cfg_data.high_band : freq;
- }
-
- FMR_cbk_tbl(idx).tune(FMR_fd(idx), freq, fmr_data.cfg_data.band);
- LOGD("restart with %d\n", freq);
- goto redo;
- }
- }
-
- if (chan_info && chan_info->chan) {
- channle = chan_info->chan;
-
- for (j = 0; j < chan_info->size; j++) {
- if (freq == channle[j].freq) {
- FMR_cbk_tbl(idx).get_rssi(FMR_fd(idx), &rssi);
-
- if (rssi < channle[j].rssi_th) {
- // an invalid channel
- LOGW("cur rssi %d < TH_L3, delete %d \n", rssi, freq);
-
- if (dir) {
- freq++;
- freq = (freq > fmr_data.cfg_data.high_band) ? fmr_data.cfg_data.low_band : freq;
- } else {
- freq--;
- freq = (freq < fmr_data.cfg_data.low_band) ? fmr_data.cfg_data.high_band : freq;
- }
-
- FMR_cbk_tbl(idx).tune(FMR_fd(idx), freq, fmr_data.cfg_data.band);
- LOGD("restart with %d\n", freq);
- goto redo;
- }
- }
- }
- *ret_freq = freq;
- fmr_data.cur_freq = freq;
- }
-
-out:
- LOGD("%s, [freq=%d] [ret=%d]\n", __func__, freq, ret);
- return ret;
-}
-#endif
-
-int FMR_set_mute(int idx, int mute)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).set_mute)
-
- if ((mute < 0) || (mute > 1)){
- LOGE("%s error param mute: %d\n", __func__, mute);
- }
-
- ret = FMR_cbk_tbl(idx).set_mute(FMR_fd(idx), mute);
- if (ret){
- LOGE("%s failed, %s\n", __func__, FMR_strerr());
- }
- LOGD("%s, [mute=%d] [ret=%d]\n", __func__, mute, ret);
- return ret;
-}
-
-int FMR_is_fm_pwrup(int idx, int *pwrup)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).is_fm_pwrup);
- FMR_ASSERT(pwrup);
-
- ret = FMR_cbk_tbl(idx).is_fm_pwrup(FMR_fd(idx), pwrup);
- if (ret){
- *pwrup = 0;
- LOGE("%s failed, %s\n", __func__, FMR_strerr());
- }
-
- LOGD("%s, [pwrup=%d] [ret=%d]\n", __func__, *pwrup, ret);
- return ret;
-}
-int FM_set_status(int idx, int which, bool stat)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).fm_set_status);
-
- ret = FMR_cbk_tbl(idx).fm_set_status(FMR_fd(idx), which, stat);
-
- if(ret){
- LOGE("%s failed, %s\n", __func__, FMR_strerr());
- }
-
- LOGD("%s, [which=%d] [stat=%d] [ret=%d]\n", __func__, which, stat, ret);
- return ret;
-}
-
-int FM_get_status(int idx, int which, bool *stat)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).fm_get_status);
-
- ret = FMR_cbk_tbl(idx).fm_get_status(FMR_fd(idx), which, stat);
-
- if(ret){
- LOGE("%s failed, %s\n", __func__, FMR_strerr());
- }
-
- LOGD("%s, [which=%d] [stat=%d] [ret=%d]\n", __func__, which, *stat, ret);
- return ret;
-}
-
-int FMR_is_rdsrx_support(int idx, int *supt)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).is_rdsrx_support);
- FMR_ASSERT(supt);
-
- ret = FMR_cbk_tbl(idx).is_rdsrx_support(FMR_fd(idx), supt);
- if (ret){
- *supt = 0;
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [supt=%d] [ret=%d]\n", __func__, *supt, ret);
- return ret;
-}
-int FMR_Pre_Search(int idx)
-{
- //avoid scan stop flag clear if stop cmd send before pre-search finish
- fmr_data.scan_stop = fm_false;
-#if FMR_SOFT_MUTE_TUEN_SCAN
- FMR_ASSERT(FMR_cbk_tbl(idx).pre_search);
- FMR_cbk_tbl(idx).pre_search(FMR_fd(idx));
- return 0;
-#else
- return 0;
-#endif
-}
-int FMR_Restore_Search(int idx)
-{
-#if FMR_SOFT_MUTE_TUEN_SCAN
- FMR_ASSERT(FMR_cbk_tbl(idx).restore_search);
- FMR_cbk_tbl(idx).restore_search(FMR_fd(idx));
- return 0;
-#else
- return 0;
-#endif
-}
-
-#if FMR_SOFT_MUTE_TUEN_SCAN
-int FMR_scan_Channels(int idx, uint16_t *scan_tbl, int *max_cnt, fm_s32 band_channel_no, fm_u16 Start_Freq, fm_u8 seek_space, fm_u8 NF_Space)
-{
- fm_s32 ret=0,Num=0,i,j;
- fm_u32 ChannelNo=0;
- fm_softmute_tune_t cur_freq;
- static struct fm_cqi SortData[CQI_CH_NUM_MAX];
- fm_bool LastExist=fm_false;
- struct fm_cqi swap;
-#if (FMR_NOISE_FLOORT_DETECT==1)
- fm_s32 Pacc=0,Nacc=0;
- fm_s32 NF=0;
- fm_bool F[3]={fm_false,fm_false,fm_false};
- fm_s32 F_Rssi[3]={0};
- fm_u8 NF_Idx=0;
-#endif
-
- memset (SortData, 0, CQI_CH_NUM_MAX*sizeof(struct fm_cqi));
- LOGI("band_channel_no=[%d], seek_space=%d, start freq=%d\n", band_channel_no,seek_space,Start_Freq);
- for(i=0; i<band_channel_no; i++)
- {
- if(fmr_data.scan_stop == fm_true)
- {
- FMR_Restore_Search(idx);
- ret = FMR_tune(idx,fmr_data.cur_freq);
- LOGI("scan stop!!! tune ret=%d",ret);
- return -1;
- }
- cur_freq.freq = Start_Freq + seek_space*i;
- ret = FMR_cbk_tbl(idx).soft_mute_tune(FMR_fd(idx),&cur_freq);
- if(ret)
- {
- LOGE("soft mute tune, failed:[%d]\n",ret);
- LastExist=fm_false;
- continue;
- }
- if(cur_freq.valid == fm_true)/*get valid channel*/
- {
-#if (FMR_NOISE_FLOORT_DETECT==1)
- memset(F,fm_false,sizeof(F));
-#endif
- if(FMR_DensenseDetect(idx,cur_freq.freq,cur_freq.rssi)==fm_true)
- {
- LOGI("desense channel detected:[%d] \n", cur_freq.freq);
- LastExist=fm_false;
- continue;
- }
- if((LastExist==fm_true)&&(Num>0)) /*neighbor channel*/
- {
- if(cur_freq.rssi>SortData[Num-1].rssi)/*save current freq and cover last channel*/
- {
- if(FMR_SevereDensense(cur_freq.freq,cur_freq.rssi)==fm_true)
- {
- LastExist=fm_false;
- continue;
- }
- SortData[Num-1].ch=cur_freq.freq;
- SortData[Num-1].rssi=cur_freq.rssi;
- SortData[Num-1].reserve = 1;
- LOGI("cover last channel \n");
- }
- else/*ignore current freq*/
- {
- LastExist=fm_false;
- continue;
- }
- }
- else/*save current*/
- {
- if(FMR_SevereDensense(cur_freq.freq,cur_freq.rssi)==fm_true)
- {
- LastExist=fm_false;
- continue;
- }
- SortData[Num].ch=cur_freq.freq;
- SortData[Num].rssi=cur_freq.rssi;
- SortData[Num].reserve = 1;
- Num++;
- LastExist=fm_true;
- LOGI("Num++:[%d] \n", Num);
- }
- }
- else
- {
-#if (FMR_NOISE_FLOORT_DETECT==1)
- if(FMR_DensenseDetect(idx,cur_freq.freq,cur_freq.rssi)==fm_false)
- {
- if(FMR_NoiseFloorDetect(F,cur_freq.rssi,F_Rssi)==fm_true)
- {
- Pacc+=F_Rssi[1];
- Nacc++;
- /*check next freq*/
- F[0]=F[1];
- F_Rssi[0]=F_Rssi[1];
- F[1]=F[2];
- F_Rssi[1]=F_Rssi[2];
- F[2]=fm_false;
- F_Rssi[2]=0;
- LOGI("FM Noise FLoor:Pacc=[%d] Nacc=[%d] \n", Pacc,Nacc);
- }
- }
- else
- {
- memset(F,fm_false,sizeof(F));
- }
-#endif
- LastExist=fm_false;
- }
-#if (FMR_NOISE_FLOORT_DETECT==1)
- if(((i%NF_Space)==0)&&(i!=0))
- {
- if(Nacc>0)
- {
- NF=Pacc/Nacc;
- }
- else
- {
- NF=RSSI_TH-FM_NOISE_FLOOR_OFFSET;
- }
- Pacc=0;
- Nacc=0;
- for(j=NF_Idx; j<Num; j++)
- {
- if(SortData[j].rssi<(NF+FM_NOISE_FLOOR_OFFSET))
- {
- LOGI("FM Noise FLoor Detected:freq=[%d] NF=[%d] \n", SortData[j].ch,NF);
- SortData[j].reserve=0;
- }
- }
- NF_Idx=j;
- LOGI("FM Noise FLoor NF_Idx[%d] \n", NF_Idx);
- }
-#endif
- }
- LOGI("get channel no.[%d] \n", Num);
- if(Num==0)/*get nothing*/
- {
- *max_cnt = 0;
- FMR_Restore_Search(idx);
- return -1;
- }
- for(i=0; i<Num; i++)//debug
- {
- LOGI("[%d]:%d \n", i,SortData[i].ch);
- }
-
- switch (fmr_data.cfg_data.scan_sort)
- {
- case FM_SCAN_SORT_UP:
- case FM_SCAN_SORT_DOWN:
- {
- LOGI("Start sort \n");
- //do sort: insert sort algorithm
- for (i = 1; i < Num; i++)
- {
- for (j = i; (j > 0) && ((FM_SCAN_SORT_DOWN == fmr_data.cfg_data.scan_sort) ? (SortData[j-1].rssi \
- < SortData[j].rssi) : (SortData[j-1].rssi > SortData[j].rssi)); j--)
- {
- memcpy(&swap,&SortData[j],sizeof(struct fm_cqi));
- memcpy(&SortData[j],&SortData[j-1],sizeof(struct fm_cqi));
- memcpy(&SortData[j-1],&swap,sizeof(struct fm_cqi));
- }
- }
- LOGI("End sort \n");
- break;
- }
- default:
- break;
- }
-
- ChannelNo = 0;
- for(i=0; i<Num; i++)
- {
- if(SortData[i].reserve == 1)
- {
-#ifndef MTK_FM_50KHZ_SUPPORT
- SortData[i].ch /= 10;
-#endif
- scan_tbl[ChannelNo]=SortData[i].ch;
- ChannelNo++;
- }
- }
- *max_cnt=ChannelNo;
-
- LOGI("return channel no.[%d] \n", ChannelNo);
- return 0;
-
-}
-
-int FMR_scan(int idx, uint16_t *scan_tbl, int *max_cnt)
-{
- fm_s32 ret=0;
- fm_s32 band_channel_no=0;
- fm_u8 seek_space=10;
- fm_u16 Start_Freq=8750;
-#if (FMR_NOISE_FLOORT_DETECT==1)
- fm_u8 NF_Space=41;
-#endif
-
- //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ
- if(fmr_data.cfg_data.seek_space == 5)
- {
- seek_space=5;
- }
- else if (fmr_data.cfg_data.seek_space == 2)
- {
- seek_space=20;
- }
- else
- {
- seek_space=10;
- }
- if (fmr_data.cfg_data.band == FM_BAND_JAPAN)// Japan band 76MHz ~ 90MHz
- {
- band_channel_no = (9600-7600)/seek_space + 1;
- Start_Freq = 7600;
-#if (FMR_NOISE_FLOORT_DETECT==1)
- NF_Space = 400/seek_space;
-#endif
- }
- else if (fmr_data.cfg_data.band == FM_BAND_JAPANW)// Japan wideband 76MHZ ~ 108MHz
- {
- band_channel_no = (10800-7600)/seek_space + 1;
- Start_Freq = 7600;
-#if (FMR_NOISE_FLOORT_DETECT==1)
- NF_Space = 640/seek_space;
-#endif
- }
- else// US/Europe band 87.5MHz ~ 108MHz (DEFAULT)
- {
- band_channel_no = (10800-8750)/seek_space + 1;
- Start_Freq = 8750;
-#if (FMR_NOISE_FLOORT_DETECT==1)
- NF_Space = 410/seek_space;
-#endif
- }
-
- ret = FMR_scan_Channels(idx, scan_tbl, max_cnt, band_channel_no, Start_Freq, seek_space, NF_Space);
-
- return ret;
-}
-#else
-int FMR_scan(int idx, uint16_t *scan_tbl, int *max_cnt)
-{
- int ret = 0;
- int i,j,k,m,n;
- int flag = 0;
- int hw_sort_en = FM_SCAN_SORT_NON;
- struct fm_rssi_req req;
- struct fm_fake_channel_t *chan_info = fmr_data.cfg_data.fake_chan;
- struct fm_fake_channel *channle = NULL;
- static char cqi_buf[CQI_CH_NUM_MAX*sizeof(struct fm_cqi)] = {0};
- struct fm_cqi swap;
- struct fm_cqi *cqi = NULL;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).scan);
-
-#ifdef MT6620
- hw_sort_en = fmr_data.cfg_data.scan_sort;
-#else
- hw_sort_en = FM_SCAN_SORT_NON;
-#endif
-
- ret = FMR_cbk_tbl(idx).scan(FMR_fd(idx), scan_tbl, max_cnt,
- fmr_data.cfg_data.band, hw_sort_en);
- if(ret){
- LOGE("%s, failed\n", __func__);
- return ret;
- }
-
- //MT6620 will use this way
- if (FMR_cbk_tbl(idx).fastget_rssi) {
- //find desense channels
- req.num = 0;
- if(chan_info && chan_info->chan){
- channle = chan_info->chan;
- for(j=0; j<chan_info->size; j++){
- for(i=0; (i<*max_cnt) && (flag==0); i++){
- if(scan_tbl[i] == channle[j].freq){
- req.cr[req.num].freq = channle[j].freq; //add to req list
- channle[j].reserve = i; //record position
- req.num++;
- flag = 1;
- }
- }
- flag = 0; //reset flag
- }
- }
-
- //read RSSI
- if (req.num > 0) {
- req.read_cnt = 1;
- ret = FMR_cbk_tbl(idx).fastget_rssi(FMR_fd(idx), &req);
- if(ret){
- LOGE("Can't get RSSI\n");
- goto way_1;
- }
-
- //Decide delete a channel or not
- j = 0;
- for(i=0; i<chan_info->size; i++){
- if(channle[i].reserve >= 0){
- if(channle[i].rssi_th > req.cr[j].rssi){
- //delete this channel from scan table
- LOGI("delete %d, RSSI %d, RSSI_TH %d\n", channle[i].freq, req.cr[j].rssi, channle[i].rssi_th);
- for(k=channle[i].reserve; k<*max_cnt; k++){
- scan_tbl[k] = scan_tbl[k+1];
- }
- (*max_cnt)--;
- }
- j++;
- }
- }
- }
- }
-
- way_1:
-
- //MT6626/28 will use this way
- if (FMR_cbk_tbl(idx).get_cqi) {
- memset (cqi_buf, 0, CQI_CH_NUM_MAX*sizeof(struct fm_cqi));
- ret = FMR_cbk_tbl(idx).get_cqi(FMR_fd(idx), *max_cnt, cqi_buf, CQI_CH_NUM_MAX*sizeof(struct fm_cqi));
- if (ret < 0) {
- LOGE("Can't get CQI\n");
- ret = 0;
- goto out;
- }
- cqi = (struct fm_cqi*)cqi_buf;
- //show result
- LOGD("before check\n");
- for (i = 0; i < *max_cnt; i++) {
-#ifndef MTK_FM_50KHZ_SUPPORT
- cqi[i].ch /= 10;
-#endif
- scan_tbl[i] = cqi[i].ch;
- LOGD("NO.%d: %d --> %d(dbm)\n", i, cqi[i].ch, cqi[i].rssi);
- }
-
- //check chip-level de-sense list
- LOGD("chip-level de-sense check\n");
- if (FMR_cbk_tbl(idx).is_dese_chan) {
- for (i = 0; i < *max_cnt; i++) {
- if ((FMR_cbk_tbl(idx).is_dese_chan(FMR_fd(idx), cqi[i].ch)) \
- && (cqi[i].rssi < fmr_data.cfg_data.rssi_th_l2)) {
- //mark for later delete
- cqi[i].reserve = 0;
- LOGD("del %d\n", (int)cqi[i].ch);
- }else{
- // mark as a valid channel
- cqi[i].reserve = 1;
- }
- }
-
- // flush invalid channels
- for (i = 0; i < *max_cnt; i++) {
- if (0 == cqi[i].reserve) {
- //delete this channel
- for (k = i; k < *max_cnt; k++) {
- memcpy(&cqi[k], &cqi[k+1], sizeof(struct fm_cqi));
- }
- (*max_cnt)--;
- }
- }
- }
-
-
- //neighbor channel check
- LOGD("neighbor channel check\n");
- m = 0;
- if (cqi[0].ch == fmr_data.cfg_data.low_band) {
- m++;
- }
-#ifdef MTK_FM_50KHZ_SUPPORT
- #define STEP_OFFEST 5
-#else
-#define STEP_OFFEST 1
-#endif
- for (i = m; i < *max_cnt; i++) {
- n = i + 1;
- if (cqi[n-1].reserve && cqi[n].reserve && ((cqi[n-1].ch + STEP_OFFEST) == cqi[n].ch)) {
- LOGD("%d:(%d) <--v.s--> %d:(%d)\n", cqi[n-1].ch, cqi[n-1].rssi, cqi[n].ch, cqi[n].rssi);
- if (cqi[n].rssi > cqi[n-1].rssi) {
- cqi[n-1].reserve = 0;
- LOGD("del %d\n", cqi[n-1].ch);
- if (((cqi[n].ch + STEP_OFFEST) < fmr_data.cfg_data.high_band) \
- && ((cqi[n].ch + STEP_OFFEST) == cqi[n+1].ch)) {
- cqi[n+1].reserve = 0;
- LOGD("del %d\n", cqi[n+1].ch);
- }
- } else {
- cqi[n].reserve = 0;
- LOGD("del %d\n", cqi[n].ch);
- }
-
- }
- }
-
- // flush invalid channels
- for (i = 0; i < *max_cnt; i++) {
- if (0 == cqi[i].reserve) {
- //delete this channel
- for (k = i; k < *max_cnt; k++) {
- memcpy(&cqi[k], &cqi[k+1], sizeof(struct fm_cqi));
- }
- (*max_cnt)--;
- }
- }
-
-
- //check phone-level de-sense list
- LOGD("phone-level de-sense check\n");
- channle = chan_info->chan;
- n = 0;
- for (i = 0; i < *max_cnt; i++) {
- for (j = n; j < chan_info->size; j++) {
- if (cqi[i].ch == channle[j].freq) {
- n++;
- if (cqi[i].rssi < channle[j].rssi_th) {
- // mark for later delete
- cqi[i].reserve = 0;
- LOGD("del %d\n", (int)cqi[i].ch);
- } else {
- cqi[i].reserve = 1;
- }
- }
- }
- }
-
- // flush invalid channels
- for (i = 0; i < *max_cnt; i++) {
- if (0 == cqi[i].reserve) {
- //delete this channel
- for (k = i; k < *max_cnt; k++) {
- memcpy(&cqi[k], &cqi[k+1], sizeof(struct fm_cqi));
- }
- (*max_cnt)--;
- }
- }
-
-
- //RSSI sort if need
- LOGD("RSSI sort way %d\n", fmr_data.cfg_data.scan_sort);
- switch (fmr_data.cfg_data.scan_sort) {
- case FM_SCAN_SORT_NON:
- break;
- case FM_SCAN_SORT_UP:
- case FM_SCAN_SORT_DOWN:
- //do sort: insert sort algorithm
- for (i = 1; i < *max_cnt; i++) {
- for (j = i; (j > 0) && ((FM_SCAN_SORT_DOWN == fmr_data.cfg_data.scan_sort) ? (cqi[j-1].rssi \
- < cqi[j].rssi) : (cqi[j-1].rssi > cqi[j].rssi)); j--) {
- swap.ch = cqi[j].ch;
- swap.rssi = cqi[j].rssi;
- cqi[j].ch = cqi[j-1].ch;
- cqi[j].rssi = cqi[j-1].rssi;
- cqi[j-1].ch = swap.ch;
- cqi[j-1].rssi = swap.rssi;
- }
- }
- break;
- default:
- break;
- }
-
- //get result
- LOGD("after check\n");
- for (i = 0; i < *max_cnt; i++) {
- scan_tbl[i] = cqi[i].ch;
- LOGD("NO.%d: %d --> %d(dbm)\n", i, cqi[i].ch, cqi[i].rssi);
- }
- }
-
- // tune to original channel if scan result num is 0
- if (0 == *max_cnt) {
- ret = FMR_cbk_tbl(idx).tune(FMR_fd(idx), fmr_data.cur_freq, fmr_data.cfg_data.band);
- if (ret < 0) {
- LOGE("scan tune failed, [ret=%d]\n", ret);
- } else {
- LOGE("scan tuned to %d, [ret=%d]\n", fmr_data.cur_freq, ret);
- }
- }
-
-out:
- LOGD("%s, [cnt=%d] [ret=%d]\n", __func__, *max_cnt, ret);
- return ret;
-}
-#endif
-
-/*
- * FMR_scan_new
- * @idx - contex index
- * @ppdst - target buffer
- * @upper - scan upper band
- * @lower - scan lower band
- * @space - scan space
- * return channel number(>=0) if success, else error code
- */
-#if FMR_SOFT_MUTE_TUEN_SCAN
-int FMR_seek_new(int idx, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para)
-{
- int ret = 0;
- int rssi_tmp = 0;
- int start_freq = *freq;
- fm_s32 band_channel_no=0;
- fm_u16 min_freq,max_freq;
-
- FMR_ASSERT(freq);
-
- if ((start_freq < lower) || (start_freq > upper)) {
- LOGE("start freq err: %d\n", start_freq);
- return -ERR_INVALID_PARA;
- }
-
- if (rssi) {
- rssi_tmp = *rssi; // rssi th
- }
-
- band_channel_no = (upper-lower)/space + 1;
- min_freq = lower;
- max_freq = upper;
-
- LOGD("seek_new start freq %d band_channel_no=[%d], seek_space=%d band[%d - %d] dir=%d\n", start_freq, band_channel_no,space,min_freq,max_freq,dir);
-
- ret = FMR_seek_Channel(idx, start_freq, min_freq, max_freq, band_channel_no, space, dir, freq, &rssi_tmp);
-
- if (ret < 0) {
- //Here we just need to return the start_freq.
- *freq = start_freq;
- LOGE("seek err, %d\n", ret);
- } else {
- fmr_data.cur_freq = *freq;
- }
-
- // return rssi to JNI if need
- if (rssi) {
- *rssi = rssi_tmp;
- }
-
- LOGD("seek_new, start %d, result %d, rssi %d, ret %d\n", start_freq, *freq, rssi_tmp, ret);
- return ret;
-}
-
-int FMR_scan_new(int idx, uint16_t *scan_tbl, int *max_cnt, int upper, int lower, int space, void *para)
-{
- fm_s32 ret=0;
- fm_s32 band_channel_no=0;
- fm_u16 Start_Freq=8750;
-#if (FMR_NOISE_FLOORT_DETECT==1)
- fm_u8 NF_Space=41;
-#endif
-
- band_channel_no = (upper-lower)/space + 1;
- Start_Freq = lower;
-#if (FMR_NOISE_FLOORT_DETECT==1)
- NF_Space = 410/space;
-#endif
-
- ret = FMR_scan_Channels(idx, scan_tbl, max_cnt, band_channel_no, Start_Freq, space, NF_Space);
-
- return 0;
-}
-
-#else
-int FMR_scan_new(int idx, void **ppdst, int upper, int lower, int space, void *para)
-{
- int ret = 0;
- struct fm_ch_rssi *ch_buf = NULL;
- struct fm_ch_rssi swap;
- int num;
- int i, j, n;
- struct fm_fake_channel_t *fake_info = fmr_data.cfg_data.fake_chan;
- struct fm_fake_channel *fake_ch = NULL;
- int flag = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).scan_new);
-
- // do scan
- ret = FMR_cbk_tbl(idx).scan_new(FMR_fd(idx), (void**)&ch_buf, upper, lower, space, para);
- if ((ret < 0) || (NULL == ch_buf)) {
- LOGE("%s, failed\n", __func__);
- return ret;
- }
-
- num = ret;
-
- //check chip-level de-sense list
- LOGD("chip-level de-sense check\n");
- if (FMR_cbk_tbl(idx).is_dese_chan) {
- for (i = 0; i < num; i++) {
- if ((FMR_cbk_tbl(idx).is_dese_chan(FMR_fd(idx), ch_buf[i].freq)) \
- && (ch_buf[i].rssi < fmr_data.cfg_data.rssi_th_l2)) {
- //mark for later delete
- LOGD("del %d\n", (int)ch_buf[i].freq);
- ch_buf[i].freq = 0;
- }
- }
- }
-
- //neighbor channel check
- LOGD("neighbor channel check\n");
- for (i = 0; i < num; i++) {
- n = i + 1;
- if (ch_buf[n-1].freq && ch_buf[n].freq && ((ch_buf[n-1].freq + space) == ch_buf[n].freq)) {
- LOGD("%d:(%d) <--v.s--> %d:(%d)\n", ch_buf[n-1].freq, ch_buf[n-1].rssi, ch_buf[n].freq, ch_buf[n].rssi);
- if (ch_buf[n].rssi > ch_buf[n-1].rssi) {
- LOGD("del %d\n", ch_buf[n-1].freq);
- ch_buf[n-1].freq = 0;
- if (((ch_buf[n].freq + space) < upper) \
- && ((ch_buf[n].freq + space) == ch_buf[n+1].freq)) {
- LOGD("del %d\n", ch_buf[n+1].freq);
- ch_buf[n+1].freq = 0;
- }
- } else {
- LOGD("del %d\n", ch_buf[n].freq);
- ch_buf[n].freq = 0;
- }
- }
- }
-
- // fake channel delete
- if (fake_info && fake_info->chan) {
- fake_ch = fake_info->chan;
-
- for (j = 0; j < fake_info->size; j++) {
- for (i = 0; (i < num) && (flag == 0); i++) {
- if (ch_buf[i].freq == fake_ch[j].freq) {
- flag = 1;
- if (ch_buf[i].rssi < fake_ch[j].rssi_th) {
- ch_buf[i].freq = 0; // mark for delete
- }
- }
- }
- flag = 0; //reset flag
- }
- }
-
- //RSSI sort if need
- LOGD("RSSI sort way %d\n", fmr_data.cfg_data.scan_sort);
- switch (fmr_data.cfg_data.scan_sort) {
- case FM_SCAN_SORT_NON:
- break;
- case FM_SCAN_SORT_UP:
- case FM_SCAN_SORT_DOWN:
- //do sort: insert sort algorithm
- for (i = 1; i < num; i++) {
- for (j = i; (j > 0) && ((FM_SCAN_SORT_DOWN == fmr_data.cfg_data.scan_sort) ? (ch_buf[j-1].rssi \
- < ch_buf[j].rssi) : (ch_buf[j-1].rssi > ch_buf[j].rssi)); j--) {
- swap.freq = ch_buf[j].freq;
- swap.rssi = ch_buf[j].rssi;
- ch_buf[j].freq = ch_buf[j-1].freq;
- ch_buf[j].rssi = ch_buf[j-1].rssi;
- ch_buf[j-1].freq = swap.freq;
- ch_buf[j-1].rssi = swap.rssi;
- }
- }
- break;
- default:
- break;
- }
-
- *ppdst = (void*)ch_buf;
- return num;
-}
-
-
-int FMR_seek_new(int idx, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para)
-{
- int ret = 0;
- int rssi_tmp = 0;
- int start_freq = *freq;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).seek_new);
- FMR_ASSERT(freq);
-
- if ((start_freq < lower) || (start_freq > upper)) {
- LOGE("start freq err: %d\n", start_freq);
- return -ERR_INVALID_PARA;
- }
-
- if (rssi) {
- rssi_tmp = *rssi; // rssi th
- }
-
- ret = FMR_cbk_tbl(idx).seek_new(FMR_fd(idx), freq, upper, lower, space, dir, &rssi_tmp, para);
- if (ret < 0) {
- //Here we just need to return the start_freq.
- *freq = start_freq;
- LOGE("seek err, %d\n", ret);
- } else {
- fmr_data.cur_freq = *freq;
- }
-
- // FIXED_ME fake channel handle
-
- // return rssi to JNI if need
- if (rssi) {
- *rssi = rssi_tmp;
- }
-
- LOGD("seek, start %d, result %d, rssi %d, ret %d\n", start_freq, *freq, rssi_tmp, ret);
- return ret;
-}
-#endif
-
-int FMR_tune_new(int idx, int freq, int upper, int lower, int space, void *para)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).tune_new);
-
- if ((freq < lower) || (freq > upper)) {
- LOGE("freq err: %d\n", freq);
- return -ERR_INVALID_PARA;
- }
-
- ret = FMR_cbk_tbl(idx).tune_new(FMR_fd(idx), freq, upper, lower, space, para);
- if (ret < 0) {
- LOGE("tune err, %d\n", ret);
- } else {
- fmr_data.cur_freq = freq;
- }
-
- LOGD("tune, freq %d, ret %d\n", freq, ret);
- return ret;
-}
-#if FMR_SOFT_MUTE_TUEN_SCAN
-int FMR_stop_scan(int idx)
-{
- fmr_data.scan_stop = fm_true;
- return 0;
-}
-#else
-int FMR_stop_scan(int idx)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).stop_scan);
-
- ret = FMR_cbk_tbl(idx).stop_scan(FMR_fd(idx));
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-#endif
-int FMR_turn_on_off_rds(int idx, int onoff)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).turn_on_off_rds)
- ret = FMR_cbk_tbl(idx).turn_on_off_rds(FMR_fd(idx), onoff);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [onoff=%d] [ret=%d]\n", __func__, onoff, ret);
- return ret;
-}
-
-int FMR_read_rds_data(int idx, uint16_t *rds_status)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).read_rds_data);
- FMR_ASSERT(rds_status);
-
- ret = FMR_cbk_tbl(idx).read_rds_data(FMR_fd(idx), &fmr_data.rds, rds_status);
- /*if (ret){
- LOGE("%s, get no event\n", __func__);
- }*/
- LOGD("%s, [status=%d] [ret=%d]\n", __func__, *rds_status, ret);
- return ret;
-}
-
-int FMR_active_af(int idx, uint16_t *ret_freq)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).active_af);
- FMR_ASSERT(ret_freq);
- ret = FMR_cbk_tbl(idx).active_af(FMR_fd(idx),
- &fmr_data.rds,
- fmr_data.cfg_data.band,
- fmr_data.cur_freq,
- ret_freq);
- if((ret == 0) && (*ret_freq != fmr_data.cur_freq)){
- fmr_data.cur_freq = *ret_freq;
- LOGI("active AF OK, new channel[freq=%d]\n", fmr_data.cur_freq);
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_active_ta(int idx, uint16_t *ret_freq)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).active_ta);
- FMR_ASSERT(ret_freq);
- ret = FMR_cbk_tbl(idx).active_ta(FMR_fd(idx),
- &fmr_data.rds,
- fmr_data.cfg_data.band,
- fmr_data.cur_freq,
- &fmr_data.backup_freq,
- ret_freq);
- if((ret == 0) && (*ret_freq != fmr_data.cur_freq)){
- fmr_data.cur_freq = *ret_freq;
- LOGI("active TA OK, new channel[freq=%d]\n", fmr_data.cur_freq);
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_deactive_ta(int idx, uint16_t *ret_freq)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).deactive_ta);
- FMR_ASSERT(ret_freq);
- ret = FMR_cbk_tbl(idx).deactive_ta(FMR_fd(idx),
- &fmr_data.rds,
- fmr_data.cfg_data.band,
- fmr_data.cur_freq,
- &fmr_data.backup_freq,
- ret_freq);
- if((ret == 0) && (*ret_freq != fmr_data.cur_freq)){
- fmr_data.cur_freq = *ret_freq;
- LOGI("deactive TA OK, new channel[freq=%d]\n", fmr_data.cur_freq);
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_is_tx_support(int idx, int *supt)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).is_tx_support);
- FMR_ASSERT(supt);
-
- ret = FMR_cbk_tbl(idx).is_tx_support(FMR_fd(idx), supt);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [supt=%d] [ret=%d]\n", __func__, *supt, ret);
- return ret;
-}
-
-int FMR_is_rdstx_support(int idx, int *supt)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).is_rdstx_support);
- FMR_ASSERT(supt);
-
- ret = FMR_cbk_tbl(idx).is_rdstx_support(FMR_fd(idx), supt);
- if (ret){
- LOGE("%s, failed\n", __func__);
- }
- LOGD("%s, [supt=%d] [ret=%d]\n", __func__, *supt, ret);
- return ret;
-}
-
-int FMR_tx_pwrup(int idx, int freq)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).tx_pwrup);
-
- LOGI("%s,[freq=%d]\n", __func__, freq);
- if (freq < fmr_data.cfg_data.low_band || freq > fmr_data.cfg_data.high_band){
- LOGE("%s error freq: %d\n", __func__, freq);
- ret = -ERR_INVALID_PARA;
- return ret;
- }
- ret = FMR_cbk_tbl(idx).tx_pwrup(FMR_fd(idx), fmr_data.cfg_data.band, freq);
- if (ret) {
- LOGE("%s failed, [ret=%d]\n", __func__, ret);
- }
- fmr_data.cur_freq = freq;
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_tx_tune(int idx, int freq)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).tx_tune);
-
- LOGI("%s,[freq=%d]\n", __func__, freq);
- if (freq < fmr_data.cfg_data.low_band || freq > fmr_data.cfg_data.high_band) {
- LOGE("%s error freq: %d\n", __func__, freq);
- ret = -ERR_INVALID_PARA;
- return ret;
- }
- ret = FMR_cbk_tbl(idx).tx_tune(FMR_fd(idx), fmr_data.cfg_data.band, freq);
- if (ret) {
- LOGE("%s failed, [ret=%d]\n", __func__, ret);
- }
- fmr_data.cur_freq = freq;
-
- LOGD("%s, [freq=%d] [ret=%d]\n", __func__, freq, ret);
- return ret;
-}
-
-int FMR_tx_scan(int idx, int start_freq, int dir, int *num, uint16_t *tbl)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).tx_scan);
- FMR_ASSERT(num);
- FMR_ASSERT(tbl);
-
- if (start_freq < fmr_data.cfg_data.low_band || start_freq > fmr_data.cfg_data.high_band) {
- LOGW("%s:error freq, [freq=%d]\n", __func__, start_freq);
- start_freq = fmr_data.cfg_data.low_band;
- }
-
- if((*num < 1) || (*num > 10)){
- LOGW("%s:error num, [ScanTBLSize=%d], use 10 as default\n", __func__, *num);
- *num = 10;
- }
-
- if(dir > 1){
- LOGW("%s:error dir, [scandir=%d], use 0(up) as default\n", __func__, dir);
- dir = 0;
- }
-
- ret = FMR_cbk_tbl(idx).tx_scan(FMR_fd(idx), fmr_data.cfg_data.band, start_freq, dir, num, tbl);
- if (ret) {
- LOGE("%s failed, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_rdstx_onoff(int idx, int onoff)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).rdstx_onoff);
-
- ret = FMR_cbk_tbl(idx).rdstx_onoff(FMR_fd(idx), onoff);
- if (ret){
- LOGE("%s failed, [ret=%d]\n", __func__, ret);
- }
-
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_rdstx(int idx, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).rdstx);
- FMR_ASSERT(ps);
- FMR_ASSERT(rds);
-
- ret = FMR_cbk_tbl(idx).rdstx(FMR_fd(idx), pi, ps, ps_len, rds, cnt);
- if (ret){
- LOGE("%s failed, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_fm_over_bt(int idx, int onoff)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).fm_over_bt);
-
- ret = FMR_cbk_tbl(idx).fm_over_bt(FMR_fd(idx), onoff);
- if (ret){
- LOGE("%s failed, [ret=%d]\n", __func__, ret);
- }
-
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_ana_switch(int idx, int antenna)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).ana_switch);
-
- if(fmr_data.cfg_data.short_ana_sup == true){
- ret = FMR_cbk_tbl(idx).ana_switch(FMR_fd(idx), antenna);
- if (ret){
- LOGE("%s failed, [ret=%d]\n", __func__, ret);
- }
- }else{
- LOGW("FM antenna switch not support!\n");
- ret = -ERR_UNSUPT_SHORTANA;
- }
-
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-
-int FMR_get_badratio(int idx, int *badratio)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).get_badratio);
- FMR_ASSERT(badratio);
-
- ret = FMR_cbk_tbl(idx).get_badratio(FMR_fd(idx), badratio);
- if (ret){
- *badratio = 0;
- LOGE("%s failed, %s\n", __func__, FMR_strerr());
- }
-
- LOGD("%s, [badratio=%d] [ret=%d]\n", __func__, *badratio, ret);
- return ret;
-}
-
-int FMR_get_stereomono(int idx, int *stemono)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).get_stereomono);
- FMR_ASSERT(stemono);
-
- ret = FMR_cbk_tbl(idx).get_stereomono(FMR_fd(idx), stemono);
- if (ret){
- *stemono = 0;
- LOGE("%s failed, %s\n", __func__, FMR_strerr());
- }
-
- LOGD("%s, [stemono=%d] [ret=%d]\n", __func__, *stemono, ret);
- return ret;
-}
-
-int FMR_set_stereomono(int idx, int stemono)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).set_stereomono);
-
- ret = FMR_cbk_tbl(idx).set_stereomono(FMR_fd(idx), stemono);
- if (ret){
- LOGE("%s failed, %s\n", __func__, FMR_strerr());
- }
-
- LOGD("%s, [stemono=%d] [ret=%d]\n", __func__, stemono, ret);
- return ret;
-}
-
-int FMR_get_caparray(int idx, int *caparray)
-{
- int ret = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).get_caparray);
- FMR_ASSERT(caparray);
-
- ret = FMR_cbk_tbl(idx).get_caparray(FMR_fd(idx), caparray);
- if (ret){
- *caparray = 0;
- LOGE("%s failed, %s\n", __func__, FMR_strerr());
- }
-
- LOGD("%s, [caparray=%d] [ret=%d]\n", __func__, *caparray, ret);
- return ret;
-}
-
-int FMR_get_hw_info(int idx, int **info, int *info_len)
-{
- int ret = 0;
- static int inited = 0;
- static int info_array[10] = {0};
-
- FMR_ASSERT(FMR_cbk_tbl(idx).get_hw_info);
- FMR_ASSERT(info);
- FMR_ASSERT(info_len);
-
- if(!inited){
- ret = FMR_cbk_tbl(idx).get_hw_info(FMR_fd(idx), &fmr_data.hw_info);
- if(ret >= 0){
- inited = 1; //get hw info success
- }
- }
-
- info_array[0] = fmr_data.hw_info.chip_id;
- info_array[1] = fmr_data.hw_info.eco_ver;
- info_array[2] = fmr_data.hw_info.rom_ver;
- info_array[3] = fmr_data.hw_info.patch_ver;
-
- *info = info_array;
- *info_len = sizeof(struct fm_hw_info)/sizeof(int);
-
- LOGD("chip:0x%08x, eco:0x%08x, rom:0x%08x, patch: 0x%08x\n", info_array[0], info_array[1], info_array[2], info_array[3]);
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret;
-}
-/*
-th_idx:
- threshold type: 0, RSSI. 1,desense RSSI. 2,SMG.
-th_val: threshold value*/
-int FMR_EMSetTH(int idx, int th_idx, int th_val)
-{
- int ret = -1;
- FMR_ASSERT(FMR_cbk_tbl(idx).set_search_threshold);
- ret=FMR_cbk_tbl(idx).set_search_threshold(FMR_fd(idx),th_idx,th_val);
-
- return ret;
-}
-
-int FMR_EM_CQI_logger(int idx,uint16_t cycle)
-{
- int ret = -1;
- fm_full_cqi_log_t log_setting;
- uint i = 0;
-
- FMR_ASSERT(FMR_cbk_tbl(idx).full_cqi_logger);
-
- //log_setting.cycle = cycle;
-#ifdef MTK_FM_50KHZ_SUPPORT
- log_setting.lower = FM_FREQ_MIN * 10;
- log_setting.upper = FM_FREQ_MAX * 10;
-#else
- log_setting.lower = FM_FREQ_MIN;
- log_setting.upper = FM_FREQ_MAX;
-#endif
- log_setting.space = 0x2;
-
- for(i = 0;i < cycle; i++)
- {
-
- log_setting.cycle = i;
- ret = FMR_cbk_tbl(idx).full_cqi_logger(FMR_fd(idx),&log_setting);
-
- LOGD("%s, [%d]\n", __func__, i);
- }
-
- //ret = FMR_cbk_tbl(idx).full_cqi_logger(FMR_fd(idx),&log_setting);
-
- return ret;
-}
-
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/fmr_err.cpp b/MediaTek/fmradiolibs/fmnative/fmr/fmr_err.cpp
deleted file mode 100644
index 3ba1875..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/fmr_err.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "FMLIB_ERR"
-
-#define FMR_ERR_BASE -0x100
-
-static int fmr_err = 0;
-static char tmp[20] = {0};
-
-char *FMR_strerr()
-{
- sprintf(tmp, "%d", fmr_err);
-
- return tmp;
-}
-
-void FMR_seterr(int err)
-{
- fmr_err = err;
-}
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/libfm_jni.cpp b/MediaTek/fmradiolibs/fmnative/fmr/libfm_jni.cpp
deleted file mode 100644
index abad2e4..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/libfm_jni.cpp
+++ /dev/null
@@ -1,1245 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include <jni.h>
-#include "fmr.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "FMLIB_JNI"
-
-static int g_idx = -1;
-extern struct fmr_ds fmr_data;
-
-jboolean openDev(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
-
- ret = FMR_open_dev(g_idx); // if success, then ret = 0; else ret < 0
-
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret?JNI_FALSE:JNI_TRUE;
-}
-
-jboolean closeDev(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
-
- ret = FMR_close_dev(g_idx);
-
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret?JNI_FALSE:JNI_TRUE;
-}
-
-jboolean powerUp(JNIEnv *env, jobject thiz, jfloat freq)
-{
- int ret = 0;
- int tmp_freq;
-
- LOGI("%s, [freq=%d]\n", __func__, (int)freq);
-#ifdef MTK_FM_50KHZ_SUPPORT
- tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755
-#else
- tmp_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875
-#endif
- ret = FMR_pwr_up(g_idx, tmp_freq);
-
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret?JNI_FALSE:JNI_TRUE;
-}
-
-jboolean powerDown(JNIEnv *env, jobject thiz, jint type)
-{
- int ret = 0;
-
- ret = FMR_pwr_down(g_idx, type);
-
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret?JNI_FALSE:JNI_TRUE;
-}
-
-jint readRssi(JNIEnv *env, jobject thiz) //jint = int
-{
- int ret = 0;
- int rssi = -1;
-
- ret = FMR_get_rssi(g_idx, &rssi);
-
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return rssi;
-}
-
-jboolean tune(JNIEnv *env, jobject thiz, jfloat freq)
-{
- int ret = 0;
- int tmp_freq;
-
-#ifdef MTK_FM_50KHZ_SUPPORT
- tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755
-#else
- tmp_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875
-#endif
- ret = FMR_tune(g_idx, tmp_freq);
-
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret?JNI_FALSE:JNI_TRUE;
-}
-
-jfloat seek(JNIEnv *env, jobject thiz, jfloat freq, jboolean isUp) //jboolean isUp;
-{
- int ret = 0;
- int tmp_freq;
- int ret_freq;
- float val;
-
-#ifdef MTK_FM_50KHZ_SUPPORT
- tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755
-#elif FMR_SOFT_MUTE_TUEN_SCAN
- tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755
- ret = FMR_set_mute(g_idx, 1);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [mute] [ret=%d]\n", __func__, ret);
-#else
- tmp_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875
-#endif
-
- ret = FMR_seek(g_idx, tmp_freq, (int)isUp, &ret_freq);
- if (ret){
- ret_freq = tmp_freq; //seek error, so use original freq
- }
-
- LOGD("%s, [freq=%d] [ret=%d]\n", __func__, ret_freq, ret);
-
-#ifdef MTK_FM_50KHZ_SUPPORT
- val = (float)ret_freq/100; //Eg, 8755 / 100 --> 87.55
-#elif FMR_SOFT_MUTE_TUEN_SCAN
- val = (float)ret_freq/100; //Eg, 8755 / 100 --> 87.55
-#else
- val = (float)ret_freq/10; //Eg, 875 / 10 --> 87.5
-#endif
- return val;
-}
-
-jshortArray autoScan(JNIEnv *env, jobject thiz)
-{
-#define FM_SCAN_CH_SIZE_MAX 200
- int ret = 0;
- jshortArray scanChlarray;
- int chl_cnt = FM_SCAN_CH_SIZE_MAX;
- uint16_t ScanTBL[FM_SCAN_CH_SIZE_MAX];
-
- LOGI("%s, [tbl=%p]\n", __func__, ScanTBL);
- FMR_Pre_Search(g_idx);
- ret = FMR_scan(g_idx, ScanTBL, &chl_cnt);
- if (ret < 0) {
- LOGE("scan failed!\n");
- scanChlarray = NULL;
- goto out;
- }
- if (chl_cnt > 0) {
- scanChlarray = env->NewShortArray(chl_cnt);
- env->SetShortArrayRegion(scanChlarray, 0, chl_cnt, (const jshort*)&ScanTBL[0]);
- } else {
- LOGE("cnt error, [cnt=%d]\n", chl_cnt);
- scanChlarray = NULL;
- }
- FMR_Restore_Search(g_idx);
-
- if(fmr_data.scan_stop == fm_true)
- {
- ret = FMR_tune(g_idx,fmr_data.cur_freq);
- LOGI("scan stop!!! tune ret=%d",ret);
- scanChlarray = NULL;
- ret = -1;
- }
-
-out:
- LOGD("%s, [cnt=%d] [ret=%d]\n", __func__, chl_cnt, ret);
- return scanChlarray;
-}
-
-
-/*
- * scannew
- * @env - davlink VM
- * @thiz - current object
- * @upper - upper band, Eg: 10800 (108.00Mhz)
- * @lower - lower band, Eg: 7600 (76.00Mhz)
- * @space - scan space, 5: 50Khz, 10: 100Khz, 20: 200Khz
- * Return channel list if success, else NULL
- */
-jshortArray scannew(JNIEnv *env, jobject thiz, jint upper, jint lower, jint space)
-{
- #define FM_SCAN_CH_SIZE_MAX 200
- int ret = 0;
- jshortArray scanChlarray;
- int chl_cnt = FM_SCAN_CH_SIZE_MAX;
- uint16_t ScanTBL[FM_SCAN_CH_SIZE_MAX];
- int i, j;
-
- LOGI("%s, [tbl=%p]\n", __func__, ScanTBL);
- FMR_Pre_Search(g_idx);
- ret = FMR_scan_new(g_idx, ScanTBL, &chl_cnt, upper, lower, space, NULL);
- if (ret < 0) {
- LOGE("scan failed!\n");
- scanChlarray = NULL;
- goto out;
- }
-
- if (chl_cnt > 0){
- scanChlarray = env->NewShortArray(chl_cnt);
- env->SetShortArrayRegion(scanChlarray, 0, chl_cnt, (const jshort*)&ScanTBL[0]);
- }
- else {
- LOGE("cnt error, [cnt=%d]\n", ret);
- scanChlarray = NULL;
- }
-
- FMR_Restore_Search(g_idx);
-
-out:
- LOGD("%s, [cnt=%d] [ret=%d]\n", __func__, chl_cnt, ret);
- return scanChlarray;
-}
-
-
-/*
- * seeknew
- * @env - davlink VM
- * @thiz - current object
- * @upper - upper band, Eg: 10800 (108.00Mhz)
- * @lower - lower band, Eg: 7600 (76.00Mhz)
- * @space - seek space, 5: 50Khz, 10: 100Khz, 20: 200Khz
- * @start - start freq, Eg, 9000 (90.00Mhz)
- * @dir - seek direction, 0: up; 1, down
- * @lev - seek rssi threshold, eg -95dbm
- * Return channel if success, else -1
- */
-jint seeknew(JNIEnv *env, jobject thiz, jint upper, jint lower, jint space, jint start, jint dir, jint lev)
-{
- int ret = 0;
- int tmp_freq = start;
- int rssi_th = lev;
-
- ret = FMR_seek_new(g_idx, &tmp_freq, upper, lower, space, dir, &rssi_th, NULL);
- if (ret < 0) {
- tmp_freq = -1;
- }
-
- LOGD("seeknew result %d, ret %d\n", tmp_freq, ret);
- return tmp_freq;
-}
-
-
-/*
- * tunenew
- * @env - davlink VM
- * @thiz - current object
- * @upper - upper band, Eg: 10800 (108.00Mhz)
- * @lower - lower band, Eg: 7600 (76.00Mhz)
- * @space - seek space, 5: 50Khz, 10: 100Khz, 20: 200Khz
- * @freq - target freq, Eg, 9000 (90.00Mhz)
- * Return JNI_TRUE if success, else JNI_FALSE
- */
-jboolean tunenew(JNIEnv *env, jobject thiz, jint upper, jint lower, jint space, jint freq)
-{
- int ret = 0;
-
- ret = FMR_tune_new(g_idx, freq, upper, lower, space, NULL);
-
- LOGD("tunenew ret %d\n", ret);
- return (ret < 0) ? JNI_FALSE : JNI_TRUE;
-}
-
-jboolean emsetth(JNIEnv *env, jobject thiz, jint index, jint value)
-{
- int ret = 0;
-
- ret = FMR_EMSetTH(g_idx, index, value);
-
- LOGD("emsetth ret %d\n", ret);
- return (ret < 0) ? JNI_FALSE : JNI_TRUE;
-}
-jshortArray emcmd(JNIEnv *env, jobject thiz, jshortArray val)
-{
- jshortArray eventarray;
- uint16_t eventtbl[20]={0};
- uint16_t* cmdtbl=NULL;
-
- cmdtbl = (uint16_t*) env->GetShortArrayElements(val, NULL);
- if(cmdtbl == NULL)
- {
- LOGE("%s:get cmdtbl error\n", __func__);
- goto out;
- }
- LOGI("EM cmd:=%x %x %x %x %x",cmdtbl[0],cmdtbl[1],cmdtbl[2],cmdtbl[3],cmdtbl[4]);
-
- if(!cmdtbl[0]) //LANT
- {
- }
- else //SANT
- {
- }
-
- switch(cmdtbl[1])
- {
- case 0x02: //CQI log tool
- {
- FMR_EM_CQI_logger(g_idx, cmdtbl[2]);
- }
- break;
- default:
- break;
- }
-
- eventarray = env->NewShortArray(20);
- env->SetShortArrayRegion(eventarray, 0, 20, (const jshort*)&eventtbl[0]);
- //LOGD("emsetth ret %d\n", ret);
-out:
- return eventarray;
-}
-
-jshort readRds(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- uint16_t status = 0;
-
- ret = FMR_read_rds_data(g_idx, &status);
-
- if(ret){
- //LOGE("%s,status = 0,[ret=%d]\n", __func__, ret);
- status = 0; //there's no event or some error happened
- }
-
- return status;
-}
-
-jshort getPI(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- uint16_t pi = 0;
-
- ret = FMR_get_pi(g_idx, &pi);
-
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- pi = -1; //there's some error happened
- }
- return pi;
-}
-
-jbyte getPTY(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- uint8_t pty = 0;
-
- ret = FMR_get_pty(g_idx, &pty);
-
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- pty = -1; //there's some error happened
- }
- return pty;
-}
-
-jbyteArray getPs(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- jbyteArray PSname;
- uint8_t *ps = NULL;
- int ps_len = 0;
-
- ret = FMR_get_ps(g_idx, &ps, &ps_len);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- return NULL;
- }
- PSname = env->NewByteArray(ps_len);
- env->SetByteArrayRegion(PSname, 0, ps_len, (const jbyte*)ps);
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return PSname;
-}
-
-jbyteArray getLrText(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- jbyteArray LastRadioText;
- uint8_t *rt = NULL;
- int rt_len = 0;
-
- ret = FMR_get_rt(g_idx, &rt, &rt_len);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- return NULL;
- }
- LastRadioText = env->NewByteArray(rt_len);
- env->SetByteArrayRegion(LastRadioText, 0, rt_len, (const jbyte*)rt);
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return LastRadioText;
-}
-
-jshort activeAf(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- jshort ret_freq = 0;
-
- ret = FMR_active_af(g_idx, (uint16_t*)&ret_freq);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- return 0;
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret_freq;
-}
-
-jshortArray getAFList(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- jshortArray AFList;
- char *af = NULL;
- int af_len = 0;
-
- //ret = FMR_get_af(g_idx, &af, &af_len); // If need, we should implemate this API
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- return NULL;
- }
- AFList = env->NewShortArray(af_len);
- env->SetShortArrayRegion(AFList, 0, af_len, (const jshort*)af);
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return AFList;
-}
-
-jshort activeTA(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- jshort ret_freq = 0;
-
- ret = FMR_active_ta(g_idx, (uint16_t*)&ret_freq);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- return 0;
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret_freq;
-}
-
-jshort deactiveTA(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- jshort ret_freq = 0;
-
- ret = FMR_deactive_ta(g_idx, (uint16_t*)&ret_freq);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- return 0;
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret_freq;
-}
-
-jint setRds(JNIEnv *env, jobject thiz, jboolean rdson)
-{
- int ret = 0;
- int onoff = -1;
-
- if(rdson == JNI_TRUE){
- onoff = FMR_RDS_ON;
- }else{
- onoff = FMR_RDS_OFF;
- }
- ret = FMR_turn_on_off_rds(g_idx, onoff);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [onoff=%d] [ret=%d]\n", __func__, onoff, ret);
- return ret?JNI_FALSE:JNI_TRUE;
-}
-
-jboolean stopScan(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
-
- ret = FMR_stop_scan(g_idx);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return ret?JNI_FALSE:JNI_TRUE;
-}
-
-jint setMute(JNIEnv *env, jobject thiz, jboolean mute)
-{
- int ret = 0;
-
- ret = FMR_set_mute(g_idx, (int)mute);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [mute=%d] [ret=%d]\n", __func__, (int)mute, ret);
- return ret?JNI_FALSE:JNI_TRUE;
-}
-
-/******************************************
- * Used to get chip ID.
- *Parameter:
- * None
- *Return value
- * 1000: chip AR1000
- * 6616: chip mt6616
- * -1: error
- ******************************************/
-jint getchipid(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- int chipid = -1;
- ret = FMR_get_chip_id(g_idx, &chipid);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [chipid=%x] [ret=%d]\n", __func__, chipid, ret);
- return chipid;
-}
-
-/******************************************
- * Inquiry if RDS is support in driver.
- * Parameter:
- * None
- *Return Value:
- * 1: support
- * 0: NOT support
- * -1: error
- ******************************************/
-jint isRdsSupport(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- int supt = -1;
-
- ret = FMR_is_rdsrx_support(g_idx, &supt);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [supt=%d] [ret=%d]\n", __func__, supt, ret);
- return supt;
-}
-
-/******************************************
- * Inquiry if FM is powered up.
- * Parameter:
- * None
- *Return Value:
- * 1: Powered up
- * 0: Did NOT powered up
- ******************************************/
-jint isFMPoweredUp(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- int pwrup = -1;
-
- ret = FMR_is_fm_pwrup(g_idx, &pwrup);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [pwrup=%d] [ret=%d]\n", __func__, pwrup, ret);
- return pwrup;
-}
-/******************************************
- * Set FM Status.
- * Parameter:
- * which
- * 0: RX power
- * 1: TX power
- * 2: TX scan
- * stat
- * JNI_TRUE: on
- * JNI_FALSE: off
- *Return Value:
- * 1: Set status fail
- * 0: Set status success
- ******************************************/
-jboolean setFmStatus(JNIEnv *env, jobject thiz, jint which, jboolean stat)
-{
- int ret = 0;
-
- ret = FM_set_status(g_idx, which, stat);
-
- if(!ret)
- {
- LOGD("%s, [object=%d], [stat=%d], [ret=%d]\n", __func__, which, stat, ret);
- }
- else
- {
- LOGD("%s, error, [object=%d] [ret=%d]\n", __func__, which, ret);
- }
-
- return ret?JNI_FALSE:JNI_TRUE;
-}
-
-/******************************************
- * Get FM Status.
- * Parameter:
- * which
- * 0: RX power
- * 1: TX power
- * 2: TX scan
- *Return Value:
- * JNI_TRUE: on
- * JNI_FALSE: off
- ******************************************/
-jboolean getFmStatus(JNIEnv *env, jobject thiz, jint which)
-{
- int ret = 0;
- bool status = 0;
-
- ret = FM_get_status(g_idx, which, &status);
-
- if(!ret)
- {
- LOGD("%s, [object=%d] [status=%d]\n", __func__, which, status);
- }
- else
- {
- LOGD("%s, error, [object=%d]\n", __func__, which);
- }
-
- return status?JNI_TRUE:JNI_FALSE;
-}
-
-/******************************************
- * Inquiry if TX is support in driver.
- * Parameter:
- * None
- *Return Value:
- * 1: support
- * 0: NOT support
- * -1: error
- ******************************************/
-jint isTXSupport(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- int support = -1;
-
- ret = FMR_is_tx_support(g_idx, &support);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [support=%d] [ret=%d]\n", __func__, support, ret);
-
- return support;
-}
-
-/******************************************
- * Start to transmit
- * Parameter:
- * freq: Which freqency to work on.
- *Return Value:
- * True: Sucess
- * False: Failed
- ******************************************/
-jboolean powerupTX(JNIEnv *env, jobject thiz, jfloat freq)
-{
- int ret = 0;
- int tmp_freq;
-
-#ifdef MTK_FM_50KHZ_SUPPORT
- tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755
-#else
- tmp_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875
-#endif
-
- LOGI("%s, [freq=%d]\n", __func__, tmp_freq);
-
- ret = FMR_tx_pwrup(g_idx, tmp_freq);
- if(ret){
- LOGE("%s, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [freq=%d] [ret=%d]\n", __func__, tmp_freq, ret);
- return ret?JNI_FALSE:JNI_TRUE;
-}
-
-/*********************************************************
-*Description: Tune FM to a desired channel in TX mode
-*
-*Date: 2010.12.01
-*
-*Parameter: freq, the freqency will be tune
-*
-*Return: TRUE, if success; FALSE, if failed
-*********************************************************/
-jboolean tuneTX(JNIEnv *env, jobject thiz, jfloat freq)
-{
- int ret = 0;
- int tmp_freq;
-
-#ifdef MTK_FM_50KHZ_SUPPORT
- tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755
-#else
- tmp_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875
-#endif
-
- LOGI("%s, [freq=%d]\n", __func__, tmp_freq);
-
- ret = FMR_tx_tune(g_idx, tmp_freq);
- if(ret){
- LOGE("%s, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [freq=%d] [ret=%d]\n", __func__, tmp_freq, ret);
- return ret?JNI_FALSE:JNI_TRUE;
-}
-
-/******************************************
- * Get useable TX frequency list.
- * Parameter:
- * freq: Start frenquency.
- * num: max number to scan
- * Return Value: TX frequency list.
- ******************************************/
-jshortArray getTXFreqList(JNIEnv *env, jobject thiz, jfloat freq, jint scandir, jint num)
-{
- int ret = 0;
- uint16_t tbl[TX_SCAN_MAX+1] = {0};
- int start_freq;
- int dir = scandir;
- int scan_num = num;
-
-#ifdef MTK_FM_50KHZ_SUPPORT
- start_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755
-#else
- start_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875
-#endif
-
- LOGI("%s, [freq=%d] [dir=%d] [num=%d]\n", __func__, start_freq, dir, scan_num);
- ret = FMR_tx_scan(g_idx, start_freq, dir, &scan_num, &tbl[0]);
- if(ret){
- LOGE("%s:failed, [ret=%d]\n", __func__, ret);
- goto err;
- }
-
- if ((scan_num > 0) && (scan_num < (TX_SCAN_MAX+1))){
- jshortArray scanChlarray ;
- int i = 0;
- scanChlarray = env->NewShortArray(scan_num);
- env->SetShortArrayRegion(scanChlarray, 0, scan_num, (const jshort*)&tbl[0]);
- LOGD("Success,[chl_cnt=%d]\n", scan_num);
- for(i = 0; i < scan_num; i++){
- LOGI("NO.%d:%d\n", i+1, tbl[i]);
- }
- return scanChlarray;
- }
-
-err:
- LOGE("%s:Failed,[chl_cnt=%d] [ret=%d]\n", __func__, scan_num, ret);
- return NULL;
-}
-
-/******************************************
- * Inquiry if RDS TX is support in driver.
- * Parameter:
- * None
- *Return Value:
- * 1: support
- * 0: NOT support
- * -1: error
- ******************************************/
-jint isRDSTXsupport(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- int support = -1;
-
- ret = FMR_is_rdstx_support(g_idx, &support);
- if(ret){
- LOGE("%s, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [support=%d] [ret=%d]\n", __func__, support, ret);
-
- return support;
-}
-
-/******************************************
- * Enable/Disable RDS TX
- * Parameter:
- * Enable:
- JNI_TRUE : To enable RDS TX
- JNI_FALSE: To disable RDS TX
- *Return Value:
- * JNI_TRUE: Success
- * JNI_FALSE: Failed
- ******************************************/
-jboolean setRDSTXEnabled(JNIEnv *env, jobject thiz, jboolean enable)
-{
- int ret = 0;
- jboolean jret = JNI_FALSE;
- int onoff = -1;
-
- if(JNI_FALSE == enable){
- onoff = 0;
- }else if(JNI_TRUE == enable){
- onoff = 1;
- }else{
- LOGE("%s:fail, para error\n", __func__);
- jret = JNI_FALSE;
- goto out;
- }
- ret = FMR_rdstx_onoff(g_idx, onoff);
- if(ret){
- jret = JNI_FALSE;
- }else{
- jret = JNI_TRUE;
- }
-out:
- LOGD("%s: [enable=%d] [ret=%d]\n", __func__, onoff, ret);
- return jret;
-}
-
-/******************************************
- * This function is used to set RDS data. The blockA is stored in parameter pi, The rest three block(B, C, D) is stored in parameter rds,
- * parameter rds can also contains many pakage.
- * Parameter:
- * pi: PI code
- * ps: PS name, make sure it's 8 bytes.
- * rds: RDS blockB, C and D
- * rdscnt: The number of pakages papameter rds contains.
- *Return Value:
- * JNI_TRUE: Success
- * JNI_FALSE: Failed
- ******************************************/
-jboolean setRDSTX(JNIEnv *env, jobject thiz, jshort pi, jcharArray ps, jshortArray rds, jint rdscnt)
-{
- int ret = 0;
- jboolean jret = JNI_TRUE;
- uint16_t rds_pi = pi;
- uint8_t *rds_ps = NULL;
- int rds_ps_len = 8;
- uint16_t *rdsdata = NULL;
- int rds_data_len = rdscnt;
-
- if(ps){
- rds_ps = (unsigned char*) env->GetCharArrayElements(ps, NULL);
- if(rds_ps == NULL){
- LOGE("%s:get ps error\n", __func__);
- jret = JNI_FALSE;
- goto out;
- }
- }else{
- LOGE("%s:NULL java array\n", __func__);
- jret = JNI_FALSE;
- goto out;
- }
-
- if(rds){
- rdsdata = (uint16_t*) env->GetShortArrayElements(rds, NULL);
- if(rdsdata == NULL){
- LOGE("%s:get rdsdata error\n", __func__);
- jret = JNI_FALSE;
- goto out;
- }
- }else{
- LOGE("%s:NULL java array\n", __func__);
- jret = JNI_FALSE;
- goto out;
- }
-
- ret = FMR_rdstx(g_idx, rds_pi, rds_ps, rds_ps_len, rdsdata, rds_data_len);
- if(ret){
- LOGE("%s:failed, [ret=%d]\n", __func__, ret);
- jret = JNI_FALSE;
- }
-
-out:
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return jret;
-}
-
-/******************************************
- * FM over BT
- * Parameter:
- * Enable:
- JNI_TRUE : To enable FM over BT
- JNI_FALSE: To disable FM over BT
- *Return Value:
- * JNI_TRUE: Success
- * JNI_FALSE: Failed
- ******************************************/
-jboolean setFMViaBTController(JNIEnv *env, jobject thiz, jboolean enable)
-{
- int ret = 0;
- int jret = JNI_FALSE;
- int onoff = -1;
-
- if(JNI_FALSE == enable){
- onoff = 0;
- }else if(JNI_TRUE == enable){
- onoff = 1;
- }else{
- LOGE("%s:fail, para error\n", __func__);
- jret = JNI_FALSE;
- goto out;
- }
- ret = FMR_fm_over_bt(g_idx, onoff);
- if(ret){
- LOGE("%s:fail\n", __func__);
- jret = JNI_FALSE;
- }else{
- jret = JNI_TRUE;
- }
-out:
- LOGD("%s: [enable=%d] [ret=%d]\n", __func__, onoff, ret);
- return jret;
-}
-
-/******************************************
- * SwitchAntenna
- * Parameter:
- * antenna:
- 0 : switch to long antenna
- 1: switch to short antenna
- *Return Value:
- * 0: Success
- * 1: Failed
- * 2: Not support
- ******************************************/
-jint switchAntenna(JNIEnv *env, jobject thiz, jint antenna)
-{
- int ret = 0;
- jint jret = 0;
- int ana = -1;
-
- if(0 == antenna){
- ana = FM_LONG_ANA;
- }else if(1 == antenna){
- ana = FM_SHORT_ANA;
- }else{
- LOGE("%s:fail, para error\n", __func__);
- jret = JNI_FALSE;
- goto out;
- }
- ret = FMR_ana_switch(g_idx, ana);
- if(ret == -ERR_UNSUPT_SHORTANA){
- LOGW("Not support switchAntenna\n");
- jret = 2;
- }else if(ret){
- LOGE("switchAntenna(), error\n");
- jret = 1;
- }else{
- jret = 0;
- }
-out:
- LOGD("%s: [antenna=%d] [ret=%d]\n", __func__, ana, ret);
- return jret;
-}
-
-/******************************************
- * Inquiry if FM is stereoMono.
- * Parameter:
- * None
- *Return Value:
- * JNI_TRUE: stereo
- * JNI_FALSE: mono
- ******************************************/
-jboolean stereoMono(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- int stemono = -1;
-
- ret = FMR_get_stereomono(g_idx, &stemono);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [stemono=%d] [ret=%d]\n", __func__, stemono, ret);
-
- return stemono?JNI_TRUE:JNI_FALSE;
-}
-
-/******************************************
- * Force set to stero/mono mode.
- * Parameter:
- * type: JNI_TRUE, mono; JNI_FALSE, stero
- *Return Value:
- * JNI_TRUE: success
- * JNI_FALSE: failed
- ******************************************/
-jboolean setStereoMono(JNIEnv *env, jobject thiz, jboolean type)
-{
- int ret = 0;
- ret = FMR_set_stereomono(g_idx, ((type == JNI_TRUE) ? 1 : 0));
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s,[ret=%d]\n", __func__, ret);
-
- return (ret==0) ? JNI_TRUE : JNI_FALSE;
-}
-
-/******************************************
- * Read cap array of short antenna.
- * Parameter:
- * None
- *Return Value:
- * CapArray
- ******************************************/
-jshort readCapArray(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- int caparray = -1;
-
- ret = FMR_get_caparray(g_idx, &caparray);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
- LOGD("%s, [caparray=%d] [ret=%d]\n", __func__, caparray, ret);
-
- return (jshort)caparray;
-}
-
-/******************************************
- * Read cap array of short antenna.
- * Parameter:
- * None
- *Return Value:
- * CapArray : 0~100
- ******************************************/
-jshort readRdsBler(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- int badratio = -1;
-
- ret = FMR_get_badratio(g_idx, &badratio);
- if(ret){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- }
-
- if(badratio > 100){
- badratio = 100;
- LOGW("badratio value error, give a max value!");
- }else if(badratio < 0){
- badratio = 0;
- LOGW("badratio value error, give a min value!");
- }
- LOGD("%s, [badratio=%d] [ret=%d]\n", __func__, badratio, ret);
-
- return (jshort)badratio;
-}
-
-jintArray getHardwareVersion(JNIEnv *env, jobject thiz)
-{
- int ret = 0;
- jintArray hw_info;
- int *info = NULL;
- int info_len = 0;
-
- ret = FMR_get_hw_info(g_idx, &info, &info_len);
- if(ret < 0){
- LOGE("%s, error, [ret=%d]\n", __func__, ret);
- return NULL;
- }
- hw_info = env->NewIntArray(info_len);
- env->SetIntArrayRegion(hw_info, 0, info_len, (const jint*)info);
- LOGD("%s, [ret=%d]\n", __func__, ret);
- return hw_info;
-}
-
-static const char *classPathNameRx = "com/mediatek/fmradio/FmRadioNative";
-static const char *classPathNameTx = "com/mediatek/FMTransmitter/FMTransmitterNative";
-
-
-static JNINativeMethod methodsRx[] = {
- {"openDev", "()Z", (void*)openDev }, //1
- {"closeDev", "()Z", (void*)closeDev }, //2
- {"powerUp", "(F)Z", (void*)powerUp }, //3
- {"powerDown", "(I)Z", (void*)powerDown }, //4
- {"tune", "(F)Z", (void*)tune }, //5
- {"seek", "(FZ)F", (void*)seek }, //6
- {"autoScan", "()[S", (void*)autoScan }, //7
- {"stopScan", "()Z", (void*)stopScan }, //8
- {"readRssi", "()I", (void*)readRssi }, //9
- {"setRds", "(Z)I", (void*)setRds }, //10
- {"readRds", "()S", (void*)readRds }, //11 will pending here for get event status
- //{"getPI", "()S", (void*)getPI }, //12
- //{"getPTY", "()B", (void*)getPTY }, //13
- {"getPs", "()[B", (void*)getPs }, //14
- {"getLrText", "()[B", (void*)getLrText}, //15
- {"activeAf", "()S", (void*)activeAf}, //16
- //{"getAFList", "()[S", (void*)getAFList }, //17 not need show actually
- //{"activeTA", "()S", (void*)activeTA}, //18
- //{"deactiveTA","()S", (void*)deactiveTA}, //19
- {"setMute", "(Z)I", (void*)setMute}, //20
- //{"getchipid", "()I", (void*)getchipid}, //21
- {"isRdsSupport", "()I", (void*)isRdsSupport}, //22
- //{"isFMPoweredUp", "()I", (void*)isFMPoweredUp}, //23
- //{"setFMViaBTController", "(Z)Z", (void*)setFMViaBTController}, //24
- {"switchAntenna", "(I)I", (void*)switchAntenna}, //25
- {"stereoMono", "()Z", (void*)stereoMono}, //26
- {"readCapArray", "()S", (void*)readCapArray}, //27
- {"readRdsBler", "()S", (void*)readRdsBler}, //28
- {"setStereoMono", "(Z)Z", (void*)setStereoMono}, //29
- {"getHardwareVersion", "()[I", (void*)getHardwareVersion}, //30
- //{"scannew", "(III)[S", (void*)scannew}, //31
- //{"seeknew", "(IIIIII)I", (void*)seeknew}, //32
- //{"tunenew", "(IIII)Z", (void*)tunenew}, //33
- {"emsetth","(II)Z",(void*)emsetth},//34
- {"emcmd","([S)[S",(void*)emcmd},//35
- {"setFmStatus", "(IZ)Z",(void*)setFmStatus},
- {"getFmStatus", "(I)Z",(void*)getFmStatus},
-};
-
-static JNINativeMethod methodsTx[] = {
- {"openDev", "()Z", (void*)openDev }, //1
- {"closeDev", "()Z", (void*)closeDev }, //2
- {"powerUp", "(F)Z", (void*)powerUp }, //3
- {"powerDown", "(I)Z", (void*)powerDown }, //4
- {"tune", "(F)Z", (void*)tune }, //5
- {"seek", "(FZ)F", (void*)seek }, //6
- {"autoScan", "()[S", (void*)autoScan }, //7
- {"stopScan", "()Z", (void*)stopScan }, //8
- //{"getrssi", "()I", (void*)getrssi }, //9
- {"setRds", "(Z)I", (void*)setRds }, //10
- {"readRds", "()S", (void*)readRds }, //11 will pending here for get event status
- //{"getPI", "()S", (void*)getPI }, //12
- //{"getPTY", "()B", (void*)getPTY }, //13
- {"getPs", "()[B", (void*)getPs }, //14
- {"getLrText", "()[B", (void*)getLrText}, //15
- {"activeAf", "()S", (void*)activeAf}, //16
- //{"getAFList", "()[S", (void*)getAFList }, //17 not need show actually
- {"activeTA", "()S", (void*)activeTA}, //18
- {"deactiveTA","()S", (void*)deactiveTA}, //19
- {"setMute", "(Z)I", (void*)setMute}, //20
- //{"getchipid", "()I", (void*)getchipid}, //21
- {"isRdsSupport", "()I", (void*)isRdsSupport}, //23
- {"isTXSupport", "()I", (void*)isTXSupport}, //24
- {"powerupTX", "(F)Z", (void*)powerupTX}, //25
- {"getTXFreqList", "(FII)[S", (void*)getTXFreqList }, //26
- {"isRDSTXSupport", "()I", (void*)isRDSTXsupport}, //27
- {"setRDSTXEnabled", "(Z)Z", (void*)setRDSTXEnabled}, //28
- {"setRDSTX", "(S[C[SI)Z", (void*)setRDSTX}, //29
- {"tuneTX", "(F)Z", (void*)tuneTX}, //30
- {"setFmStatus", "(IZ)Z",(void*)setFmStatus},
- {"getFmStatus", "(I)Z",(void*)getFmStatus},
-};
-
-
-/*
- * Register several native methods for one class.
- */
-static jint registerNativeMethods(JNIEnv* env, const char* className,
- JNINativeMethod* gMethods, int numMethods)
-{
- jclass clazz;
-
- clazz = env->FindClass(className);
- if(env->ExceptionCheck()){
- env->ExceptionDescribe();
- env->ExceptionClear();
- }
- if (clazz == NULL) {
- LOGE("Native registration unable to find class '%s'", className);
- return JNI_FALSE;
- }
- if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
- LOGE("RegisterNatives failed for '%s'", className);
- return JNI_FALSE;
- }
-
- LOGD("%s, success\n", __func__);
- return JNI_TRUE;
-}
-
-/*
- * Register native methods for all classes we know about.
- *
- * returns JNI_TRUE on success.
- */
-static jint registerNatives(JNIEnv* env)
-{
- jint ret = JNI_FALSE;
-
- if (registerNativeMethods(env, classPathNameRx,methodsRx,
- sizeof(methodsRx) / sizeof(methodsRx[0]))){
- ret = JNI_TRUE;
- }
-
- if (registerNativeMethods(env, classPathNameTx,methodsTx,
- sizeof(methodsTx) / sizeof(methodsTx[0]))){
- ret = JNI_TRUE;
- }
-
- LOGD("%s, done\n", __func__);
- return ret;
-}
-
-
-// ----------------------------------------------------------------------------
-
-/*
- * This is called by the VM when the shared library is first loaded.
- */
-
-typedef union {
- JNIEnv* env;
- void* venv;
-} UnionJNIEnvToVoid;
-
-jint JNI_OnLoad(JavaVM* vm, void* reserved)
-{
- UnionJNIEnvToVoid uenv;
- uenv.venv = NULL;
- jint result = -1;
- JNIEnv* env = NULL;
-
- LOGI("JNI_OnLoad");
-
- if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) {
- LOGE("ERROR: GetEnv failed");
- goto bail;
- }
- env = uenv.env;
-
- if (registerNatives(env) != JNI_TRUE) {
- LOGE("ERROR: registerNatives failed");
- goto bail;
- }
-
- if ((g_idx = FMR_init()) < 0) {
- goto bail;
- }
- result = JNI_VERSION_1_4;
-
-bail:
- return result;
-}
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt519x.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt519x.cpp
deleted file mode 100644
index 7416b83..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/mt519x.cpp
+++ /dev/null
@@ -1,342 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-#include <ATVCtrl.h>
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "FMLIB_519x"
-
-extern "C" {
- using namespace android;
-
- int ATVC_fm_powerup(void* parm){return ATVCtrl::ATVC_fm_powerup(parm);}
- int ATVC_fm_powerdown(void){return ATVCtrl::ATVC_fm_powerdown();}
- int ATVC_fm_getrssi(int* val){return ATVCtrl::ATVC_fm_getrssi(val);}
- int ATVC_fm_tune(void* parm){return ATVCtrl::ATVC_fm_tune(parm);}
- int ATVC_fm_seek(void* parm){return ATVCtrl::ATVC_fm_seek(parm);}
- int ATVC_fm_scan(void* parm){return ATVCtrl::ATVC_fm_scan(parm);}
- int ATVC_fm_mute(int val){return ATVCtrl::ATVC_fm_mute(val);}
- int ATVC_fm_getchipid(unsigned short int* val){return ATVCtrl::ATVC_fm_getchipid(val);}
- int ATVC_fm_isRDSsupport(int* val){return ATVCtrl::ATVC_fm_isRDSsupport(val);}
- int ATVC_fm_isFMPowerUp(int* val){return ATVCtrl::ATVC_fm_isFMPowerUp(val);}
-}
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define MT519X_VFD_MAX 10
-#define MT519X_VFD_BASE 20
-
-static int g_stopscan = 0;
-static int vfd[MT519X_VFD_MAX] = {0};
-
-int MT519X_open_dev(const char *pname, int *fd);
-int MT519X_close_dev(int fd);
-int MT519X_pwr_up(int fd, int band, int freq);
-int MT519X_pwr_down(int fd, int type);
-int MT519X_seek(int fd, int *freq, int band, int dir, int lev);
-int MT519X_sw_scan(int fd, uint16_t *scan_tbl, int *max_num, int band, int sort);
-int MT519X_scan(int fd, uint16_t *tbl, int *num);
-int MT519X_stop_scan(int fd);
-int MT519X_tune(int fd, int freq, int band);
-int MT519X_set_mute(int fd, int mute);
-int MT519X_is_fm_pwrup(int fd, int *pwrup);
-int MT519X_is_rdsrx_support(int fd, int *supt);
-int MT519X_is_rdstx_support(int fd, int *supt);
-int MT519X_turn_on_off_rds(int fd, int onoff);
-int MT519X_get_chip_id(int fd, int *chipid);
-
-
-void MT519X_init(struct fm_cbk_tbl *cbk_tbl)
-{
- //Basic functions.
- cbk_tbl->open_dev = MT519X_open_dev;
- cbk_tbl->close_dev = MT519X_close_dev;
- cbk_tbl->pwr_up = MT519X_pwr_up;
- cbk_tbl->pwr_down = MT519X_pwr_down;
- cbk_tbl->seek = MT519X_seek;
- cbk_tbl->scan = MT519X_sw_scan; //hw_scan or sw_scan.
- cbk_tbl->stop_scan = MT519X_stop_scan;
- cbk_tbl->tune = MT519X_tune;
- cbk_tbl->set_mute = MT519X_set_mute;
- cbk_tbl->is_fm_pwrup = MT519X_is_fm_pwrup;
- cbk_tbl->is_rdsrx_support = MT519X_is_rdsrx_support;
- cbk_tbl->is_rdstx_support = MT519X_is_rdstx_support;
- cbk_tbl->turn_on_off_rds = MT519X_turn_on_off_rds;
- cbk_tbl->get_chip_id = MT519X_get_chip_id;
-
- return;
-}
-
-int MT519X_open_dev(const char *pname, int *fd)
-{
- int idx;
- int ret = 0;
-
- for (idx=0;idx<MT519X_VFD_MAX;idx++) {
- if (vfd[idx] == 0) {
- vfd[idx] = 1;
- *fd = idx+MT519X_VFD_BASE;
- return ret;
- }
- }
-
- return -ERR_INVALID_FD;
-}
-
-int MT519X_close_dev(int fd)
-{
- if (vfd[fd-MT519X_VFD_BASE] == 1) {
- vfd[fd-MT519X_VFD_BASE] = 0;
- return 0;
- } else {
- return -1;
- }
-}
-
-int MT519X_pwr_up(int fd, int band, int freq)
-{
- int ret = 0;
- struct fm_tune_parm parm;
-
- bzero(&parm, sizeof(struct fm_tune_parm));
-
- parm.band = band;
- parm.freq = freq;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.space = FM_SEEK_SPACE;
-
- if(ATVC_fm_powerup(&parm))
- {
- ret = 0;
- }
- else
- {
- ret = ERR_FW_NORES;
- }
- return ret;
-}
-
-int MT519X_pwr_down(int fd, int type)
-{
- int ret = 0;
-
- if(ATVC_fm_powerdown())
- {
- ret = 0;
- }
- else
- {
- ret = ERR_FW_NORES;
- }
- return ret;
-}
-
-int MT519X_get_chip_id(int fd, int *chipid)
-{
- int ret = 0;
-
- ret = ATVC_fm_getchipid((short unsigned int *)chipid)?0:1;
- return ret;
-}
-
-int MT519X_get_rssi(int fd, int *rssi)
-{
- int ret = 0;
-
- ret = ATVC_fm_getrssi(rssi)?0:1;
- return ret;
-}
-
-int MT519X_tune(int fd, int freq, int band)
-{
- int ret = 0;
- struct fm_tune_parm parm;
-
- bzero(&parm, sizeof(struct fm_tune_parm));
-
- parm.band = band;
- parm.freq = freq;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.space = FM_SEEK_SPACE;
-
- ret = ATVC_fm_tune(&parm);
- return ret?0:1;
-}
-
-int MT519X_seek(int fd, int *freq, int band, int dir, int lev)
-{
- int ret = 0;
- struct fm_seek_parm parm;
-
- bzero(&parm, sizeof(struct fm_tune_parm));
-
- parm.band = band;
- parm.freq = *freq;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.space = FM_SEEK_SPACE;
- if (dir == 1) {
- parm.seekdir = FM_SEEK_UP;
- } else if (dir == 0) {
- parm.seekdir = FM_SEEK_DOWN;
- }
- parm.seekth = lev;
-
- ret = ATVC_fm_seek(&parm)?0:1;
- if (ret == 0) {
- *freq = parm.freq;
- }
-
- return ret;
-}
-
-int MT519X_set_mute(int fd, int mute)
-{
- int ret = 0;
-
- ret = ATVC_fm_mute(mute)?0:1;
-
- return ret;
-}
-
-int MT519X_is_fm_pwrup(int fd, int *pwrup)
-{
- int ret = 0;
-
- ret = ATVC_fm_isFMPowerUp(pwrup);
- return ret;
-}
-
-int MT519X_is_rdsrx_support(int fd, int *supt)
-{
- int ret = 0;
-
- ret = ATVC_fm_isRDSsupport(supt)?0:1;
- return ret;
-}
-
-int MT519X_is_rdstx_support(int fd, int *supt)
-{
- int ret = 0;
-
- *supt = 0;
- return ret;
-}
-
-int MT519X_sw_scan(int fd, uint16_t *scan_tbl, int *max_num, int band, int sort)
-{
- int ret = 0;
- int chl_cnt = 0;
- struct fm_seek_parm parm;
- int start_freq = FM_FREQ_MIN;
-
- g_stopscan = false;
-
- do
- {
- bzero(&parm, sizeof(struct fm_tune_parm));
- parm.band = band;
- parm.freq = start_freq;
- parm.hilo = FM_AUTO_HILO_OFF;
- parm.space = FM_SEEK_SPACE;
- parm.seekdir = FM_SEEK_UP;
- parm.seekth = FM_SEEKTH_LEVEL_DEFAULT;
-
- ret = ATVC_fm_seek(&parm)?0:1;
-
- if (ret)
- {
- LOGE("FM scan faild:%d:%d\n", ret, parm.err);
- return NULL;
- }
-
- if((parm.err == FM_SUCCESS)
- && (chl_cnt < *max_num)
- && (parm.freq > start_freq))
- {
- scan_tbl[chl_cnt] = parm.freq;
- chl_cnt++;
- LOGI("FM scan:%d:%d\n", chl_cnt, parm.freq);
- }
- else
- {
- break;
- }
- start_freq = parm.freq;
- } while (!g_stopscan);
-
- if(g_stopscan)
- {
- LOGI("FM force stop scan\n");
- g_stopscan = false;
- }
-
- *max_num = chl_cnt;
-
- if(g_stopscan)
- {
- LOGI("FM force stop scan\n");
- g_stopscan = false;
- }
-
- LOGI("FM sw scan %d station found\n", chl_cnt);
- return ret;
-}
-
-
-int MT519X_stop_scan(int fd)
-{
- int ret = 0;
-
- g_stopscan = 1;
- return ret;
-}
-
-int MT519X_turn_on_off_rds(int fd, int onoff)
-{
- return 0;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6616.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6616.cpp
deleted file mode 100644
index a41e2c8..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/mt6616.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "FMLIB_MT6616"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int MT6616_open_dev(const char *pname, int *fd)
-{
- int ret = 0;
- ret = COM_open_dev(pname, fd);
- //TODO important!!!, check if it's valid FM chip, hard code here.
-
- ret = bt_set_controller_force_sleep(FM_CHIP_MT6616);
-
- return ret;
-}
-
-int MT6616_stop_scan(int fd)
-{
- int ret = 0;
- if (fd < 0){
- LOGE("FM fd unavailable for stopscan\n");
- ret = ERR_INVALID_FD;
- goto out;
- }
-
- if(lseek(fd, 0, SEEK_END) != -1){
- LOGE("Stopscan failed\n");
- ret = -1;
- goto out;
- }
- else
- LOGD("Stopscan Success,[fd=%d]\n", fd);
-out:
- return ret;
-}
-
-void MT6616_init(struct fm_cbk_tbl *cbk_tbl)
-{
- //Basic functions.
- cbk_tbl->open_dev = MT6616_open_dev;
- cbk_tbl->close_dev = COM_close_dev;
- cbk_tbl->pwr_up = COM_pwr_up;
- cbk_tbl->pwr_down = COM_pwr_down;
- cbk_tbl->seek = COM_seek;
- cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan.
- cbk_tbl->stop_scan = MT6616_stop_scan;
- cbk_tbl->tune = COM_tune;
- cbk_tbl->set_mute = COM_set_mute;
- cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup;
- cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support;
- cbk_tbl->is_rdstx_support = COM_is_rdstx_support;
- cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds;
- cbk_tbl->get_chip_id = COM_get_chip_id;
- //For RDS RX.
- cbk_tbl->read_rds_data = COM_read_rds_data;
- cbk_tbl->get_pi = COM_get_pi;
- cbk_tbl->get_ps = COM_get_ps;
- cbk_tbl->get_pty = COM_get_pty;
- cbk_tbl->get_rssi = COM_get_rssi;
- cbk_tbl->get_rt = COM_get_rt;
- cbk_tbl->active_af = COM_active_af;
- cbk_tbl->active_ta = COM_active_ta;
- cbk_tbl->deactive_ta = COM_deactive_ta;
- return;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6620.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6620.cpp
deleted file mode 100644
index dea2bd6..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/mt6620.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "FMLIB_MT6620"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int MT6620_open_dev(const char *pname, int *fd)
-{
- int ret = 0;
- ret = COM_open_dev(pname, fd);
-
- //TODO important!!!, check if it's valid FM chip here.
-
- return ret;
-}
-
-int MT6620_stop_scan(int fd)
-{
- int ret = 0;
- if (fd < 0){
- LOGE("FM fd unavailable for stopscan\n");
- ret = ERR_INVALID_FD;
- goto out;
- }
-
- //becare for the impliment of lseek in FM driver char device driver
- if(lseek(fd, 0, SEEK_END) != 0){
- LOGE("Stopscan failed\n");
- ret = -1;
- goto out;
- }else
- LOGD("Stopscan Success,[fd=%d]\n", fd);
-out:
- return ret;
-}
-
-void MT6620_init(struct fm_cbk_tbl *cbk_tbl)
-{
- //Basic functions.
- cbk_tbl->open_dev = MT6620_open_dev;
- cbk_tbl->close_dev = COM_close_dev;
- cbk_tbl->pwr_up = COM_pwr_up;
- cbk_tbl->pwr_down = COM_pwr_down;
- cbk_tbl->seek = COM_seek;
- cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan.
- cbk_tbl->scan_new = COM_hw_scan_new;
- cbk_tbl->seek_new = COM_seek_new;
- cbk_tbl->tune_new = COM_tune_new;
- cbk_tbl->fastget_rssi = COM_fastget_rssi;
- cbk_tbl->stop_scan = MT6620_stop_scan;
- cbk_tbl->tune = COM_tune;
- cbk_tbl->set_mute = COM_set_mute;
- cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup;
- cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support;
- cbk_tbl->is_rdstx_support = COM_is_rdstx_support;
- cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds;
- cbk_tbl->get_chip_id = COM_get_chip_id;
- //For RDS RX.
- cbk_tbl->read_rds_data = COM_read_rds_data;
- cbk_tbl->get_pi = COM_get_pi;
- cbk_tbl->get_ps = COM_get_ps;
- cbk_tbl->get_pty = COM_get_pty;
- cbk_tbl->get_rssi = COM_get_rssi;
- cbk_tbl->get_rt = COM_get_rt;
- cbk_tbl->active_af = COM_active_af;
- cbk_tbl->active_ta = COM_active_ta;
- cbk_tbl->deactive_ta = COM_deactive_ta;
- //FOR RDS TX.
- //TODO RDS TX functions.
- cbk_tbl->is_tx_support = COM_tx_support;
- cbk_tbl->tx_pwrup = COM_tx_pwrup;
- cbk_tbl->rdstx_onoff = COM_rdstx_onoff;
- cbk_tbl->tx_tune = COM_tx_tune;
- cbk_tbl->tx_scan = COM_tx_scan;
- cbk_tbl->rdstx = COM_rdstx;
- //FM over BT
- cbk_tbl->fm_over_bt = COM_fm_over_bt;
- //FM short antenna
- cbk_tbl->ana_switch = COM_ana_switch;
- cbk_tbl->get_caparray = COM_get_caparray;
- //RX EM mode use
- cbk_tbl->get_badratio = COM_get_badratio;
- cbk_tbl->get_stereomono = COM_get_stereomono;
- cbk_tbl->set_stereomono = COM_set_stereomono;
- cbk_tbl->get_hw_info = COM_get_hw_info;
-
- cbk_tbl->soft_mute_tune = COM_Soft_Mute_Tune;
- cbk_tbl->is_dese_chan = COM_is_dese_chan;//COM_dese_chan_check;
- cbk_tbl->desense_check = COM_desense_check;
- cbk_tbl->pre_search = COM_pre_search;
- cbk_tbl->restore_search = COM_restore_search;
- //EM
- cbk_tbl->set_search_threshold = COM_set_search_threshold;
- return;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6626.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6626.cpp
deleted file mode 100644
index 8b5ad35..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/mt6626.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int MT6626_open_dev(const char *pname, int *fd)
-{
- int ret = 0;
- ret = COM_open_dev(pname, fd);
- //TODO important!!!, check if it's valid FM chip, hard code here.
-
- ret = bt_set_controller_force_sleep(FM_CHIP_MT6626);
-
- return ret;
-}
-
-int MT6626_stop_scan(int fd)
-{
- int ret = 0;
- if (fd < 0){
- LOGE("FM fd unavailable for stopscan\n");
- ret = ERR_INVALID_FD;
- goto out;
- }
-
- if(lseek(fd, 0, SEEK_END) != -1){
- LOGE("Stopscan failed\n");
- ret = -1;
- goto out;
- }
- else
- LOGD("Stopscan Success,[fd=%d]\n", fd);
-out:
- return ret;
-}
-
-void MT6626_init(struct fm_cbk_tbl *cbk_tbl)
-{
- //Basic functions.
- cbk_tbl->open_dev = MT6626_open_dev;
- cbk_tbl->close_dev = COM_close_dev;
- cbk_tbl->pwr_up = COM_pwr_up;
- cbk_tbl->pwr_down = COM_pwr_down;
- cbk_tbl->seek = COM_seek;
- cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan.
- cbk_tbl->scan_new = COM_hw_scan_new;
- cbk_tbl->seek_new = COM_seek_new;
- cbk_tbl->tune_new = COM_tune_new;
- cbk_tbl->stop_scan = MT6626_stop_scan;
- cbk_tbl->tune = COM_tune;
- cbk_tbl->set_mute = COM_set_mute;
- cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup;
- cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support;
- cbk_tbl->is_rdstx_support = COM_is_rdstx_support;
- cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds;
- cbk_tbl->get_chip_id = COM_get_chip_id;
- cbk_tbl->get_rssi = COM_get_rssi;
- cbk_tbl->ana_switch = COM_ana_switch;
- //For RDS RX.
- cbk_tbl->read_rds_data = COM_read_rds_data;
- cbk_tbl->get_pi = COM_get_pi;
- cbk_tbl->get_ps = COM_get_ps;
- cbk_tbl->get_pty = COM_get_pty;
- cbk_tbl->get_rt = COM_get_rt;
- cbk_tbl->active_af = COM_active_af;
- cbk_tbl->active_ta = COM_active_ta;
- cbk_tbl->deactive_ta = COM_deactive_ta;
- //RX EM mode use
- cbk_tbl->get_caparray = COM_get_caparray;
- cbk_tbl->get_badratio = COM_get_badratio;
- cbk_tbl->get_stereomono = COM_get_stereomono;
- cbk_tbl->set_stereomono = COM_set_stereomono;
- return;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6627.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6627.cpp
deleted file mode 100644
index 8af454c..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/mt6627.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int MT6627_open_dev(const char *pname, int *fd)
-{
- int ret = 0;
- ret = COM_open_dev(pname, fd);
-
- //TODO important!!!, check if it's valid FM chip here.
-
- return ret;
-}
-
-/*int MT6627_stop_scan(int fd)
-{
- int ret = 0;
- if (fd < 0){
- LOGE("FM fd unavailable for stopscan\n");
- ret = ERR_INVALID_FD;
- goto out;
- }
-
- if(lseek(fd, 0, SEEK_END) != 0){
- LOGE("Stopscan failed\n");
- ret = -1;
- goto out;
- }else
- LOGD("Stopscan Success,[fd=%d]\n", fd);
-out:
- return ret;
-}*/
-
-void MT6627_init(struct fm_cbk_tbl *cbk_tbl)
-{
- //Basic functions.
- cbk_tbl->open_dev = MT6627_open_dev;
- cbk_tbl->close_dev = COM_close_dev;
- cbk_tbl->pwr_up = COM_pwr_up;
- cbk_tbl->pwr_down = COM_pwr_down;
- //cbk_tbl->seek = COM_seek;
- //cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan.
- //cbk_tbl->scan_new = COM_hw_scan_new;
- //cbk_tbl->seek_new = COM_seek_new;
- //cbk_tbl->tune_new = COM_tune_new;
- //cbk_tbl->stop_scan = MT6627_stop_scan;
- cbk_tbl->tune = COM_tune;
- cbk_tbl->set_mute = COM_set_mute;
- cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup;
- cbk_tbl->fm_set_status = COM_fm_set_status;
- cbk_tbl->fm_get_status = COM_fm_get_status;
- cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support;
- cbk_tbl->is_rdstx_support = COM_is_rdstx_support;
- cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds;
- cbk_tbl->get_chip_id = COM_get_chip_id;
- //For RDS RX.
- cbk_tbl->read_rds_data = COM_read_rds_data;
- cbk_tbl->get_pi = COM_get_pi;
- cbk_tbl->get_ps = COM_get_ps;
- cbk_tbl->get_pty = COM_get_pty;
- cbk_tbl->get_rssi = COM_get_rssi;
- cbk_tbl->get_rt = COM_get_rt;
- cbk_tbl->active_af = COM_active_af;
- cbk_tbl->active_ta = COM_active_ta;
- cbk_tbl->deactive_ta = COM_deactive_ta;
- //FM over BT
- //cbk_tbl->fm_over_bt = COM_fm_over_bt;
- //FM short antenna
- cbk_tbl->ana_switch = COM_ana_switch;
- cbk_tbl->get_caparray = COM_get_caparray;
- //RX EM mode use
- cbk_tbl->get_badratio = COM_get_badratio;
- cbk_tbl->get_stereomono = COM_get_stereomono;
- cbk_tbl->set_stereomono = COM_set_stereomono;
- cbk_tbl->get_cqi = COM_get_cqi;
- cbk_tbl->is_dese_chan = COM_is_dese_chan;
- cbk_tbl->desense_check = COM_desense_check;
- cbk_tbl->get_hw_info = COM_get_hw_info;
- //soft mute tune
- cbk_tbl->soft_mute_tune = COM_Soft_Mute_Tune;
- cbk_tbl->pre_search = COM_pre_search;
- cbk_tbl->restore_search = COM_restore_search;
- //EM
- cbk_tbl->set_search_threshold = COM_set_search_threshold;
- cbk_tbl->full_cqi_logger = COM_full_cqi_logger;
- return;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6628.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6628.cpp
deleted file mode 100644
index 15d0a85..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/mt6628.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int MT6628_open_dev(const char *pname, int *fd)
-{
- int ret = 0;
- ret = COM_open_dev(pname, fd);
-
- //TODO important!!!, check if it's valid FM chip here.
-
- return ret;
-}
-
-int MT6628_stop_scan(int fd)
-{
- int ret = 0;
- if (fd < 0){
- LOGE("FM fd unavailable for stopscan\n");
- ret = ERR_INVALID_FD;
- goto out;
- }
-
- //becare for the impliment of lseek in FM driver char device driver
- if(lseek(fd, 0, SEEK_END) != 0){
- LOGE("Stopscan failed\n");
- ret = -1;
- goto out;
- }else
- LOGD("Stopscan Success,[fd=%d]\n", fd);
-out:
- return ret;
-}
-
-void MT6628_init(struct fm_cbk_tbl *cbk_tbl)
-{
- //Basic functions.
- cbk_tbl->open_dev = MT6628_open_dev;
- cbk_tbl->close_dev = COM_close_dev;
- cbk_tbl->pwr_up = COM_pwr_up;
- cbk_tbl->pwr_down = COM_pwr_down;
- cbk_tbl->seek = COM_seek;
- cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan.
- cbk_tbl->scan_new = COM_hw_scan_new;
- cbk_tbl->seek_new = COM_seek_new;
- cbk_tbl->tune_new = COM_tune_new;
- cbk_tbl->stop_scan = MT6628_stop_scan;
- cbk_tbl->tune = COM_tune;
- cbk_tbl->set_mute = COM_set_mute;
- cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup;
- cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support;
- cbk_tbl->is_rdstx_support = COM_is_rdstx_support;
- cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds;
- cbk_tbl->get_chip_id = COM_get_chip_id;
- //For RDS RX.
- cbk_tbl->read_rds_data = COM_read_rds_data;
- cbk_tbl->get_pi = COM_get_pi;
- cbk_tbl->get_ps = COM_get_ps;
- cbk_tbl->get_pty = COM_get_pty;
- cbk_tbl->get_rssi = COM_get_rssi;
- cbk_tbl->get_rt = COM_get_rt;
- cbk_tbl->active_af = COM_active_af;
- cbk_tbl->active_ta = COM_active_ta;
- cbk_tbl->deactive_ta = COM_deactive_ta;
- //FM over BT
- cbk_tbl->fm_over_bt = COM_fm_over_bt;
- //FM short antenna
- cbk_tbl->ana_switch = COM_ana_switch;
- cbk_tbl->get_caparray = COM_get_caparray;
- //RX EM mode use
- cbk_tbl->get_badratio = COM_get_badratio;
- cbk_tbl->get_stereomono = COM_get_stereomono;
- cbk_tbl->set_stereomono = COM_set_stereomono;
- cbk_tbl->get_cqi = COM_get_cqi;
- cbk_tbl->is_dese_chan = COM_is_dese_chan;
- cbk_tbl->desense_check = COM_desense_check;
- cbk_tbl->get_hw_info = COM_get_hw_info;
- //soft mute tune
- cbk_tbl->soft_mute_tune = COM_Soft_Mute_Tune;
- cbk_tbl->pre_search = COM_pre_search;
- cbk_tbl->restore_search = COM_restore_search;
- //EM
- cbk_tbl->set_search_threshold = COM_set_search_threshold;
- cbk_tbl->full_cqi_logger = COM_full_cqi_logger;
- return;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6630.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6630.cpp
deleted file mode 100644
index 04e9b27..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/mt6630.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int MT6630_open_dev(const char *pname, int *fd)
-{
- int ret = 0;
- ret = COM_open_dev(pname, fd);
-
- //TODO important!!!, check if it's valid FM chip here.
-
- return ret;
-}
-
-void MT6630_init(struct fm_cbk_tbl *cbk_tbl)
-{
- //Basic functions.
- cbk_tbl->open_dev = MT6630_open_dev;
- cbk_tbl->close_dev = COM_close_dev;
- cbk_tbl->pwr_up = COM_pwr_up;
- cbk_tbl->pwr_down = COM_pwr_down;
- //cbk_tbl->seek = COM_seek;
- //cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan.
- //cbk_tbl->scan_new = COM_hw_scan_new;
- //cbk_tbl->seek_new = COM_seek_new;
- //cbk_tbl->tune_new = COM_tune_new;
- cbk_tbl->tune = COM_tune;
- cbk_tbl->set_mute = COM_set_mute;
- cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup;
- cbk_tbl->fm_set_status = COM_fm_set_status;
- cbk_tbl->fm_get_status = COM_fm_get_status;
- cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support;
- cbk_tbl->is_rdstx_support = COM_is_rdstx_support;
- cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds;
- cbk_tbl->get_chip_id = COM_get_chip_id;
- //For RDS RX.
- cbk_tbl->read_rds_data = COM_read_rds_data;
- cbk_tbl->get_pi = COM_get_pi;
- cbk_tbl->get_ps = COM_get_ps;
- cbk_tbl->get_pty = COM_get_pty;
- cbk_tbl->get_rssi = COM_get_rssi;
- cbk_tbl->get_rt = COM_get_rt;
- cbk_tbl->active_af = COM_active_af;
- cbk_tbl->active_ta = COM_active_ta;
- cbk_tbl->deactive_ta = COM_deactive_ta;
- //FM over BT
- cbk_tbl->fm_over_bt = COM_fm_over_bt;
- //FM short antenna
- cbk_tbl->ana_switch = COM_ana_switch;
- cbk_tbl->get_caparray = COM_get_caparray;
- //RX EM mode use
- cbk_tbl->get_badratio = COM_get_badratio;
- cbk_tbl->get_stereomono = COM_get_stereomono;
- cbk_tbl->set_stereomono = COM_set_stereomono;
- cbk_tbl->get_cqi = COM_get_cqi;
- cbk_tbl->is_dese_chan = COM_is_dese_chan;
- cbk_tbl->desense_check = COM_desense_check;
- cbk_tbl->get_hw_info = COM_get_hw_info;
- //soft mute tune
- cbk_tbl->soft_mute_tune = COM_Soft_Mute_Tune;
- cbk_tbl->pre_search = COM_pre_search;
- cbk_tbl->restore_search = COM_restore_search;
- //EM
- cbk_tbl->set_search_threshold = COM_set_search_threshold;
- cbk_tbl->full_cqi_logger = COM_full_cqi_logger;
-
- //TX
- cbk_tbl->is_tx_support = COM_tx_support;
- cbk_tbl->tx_pwrup = COM_tx_pwrup;
- cbk_tbl->rdstx_onoff = COM_rdstx_onoff;
- cbk_tbl->tx_tune = COM_tx_tune;
- cbk_tbl->tx_scan = COM_tx_scan;
- cbk_tbl->rdstx = COM_rdstx;
-
- return;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/MediaTek/fmradiolibs/fmnative/fmr/target.cpp b/MediaTek/fmradiolibs/fmnative/fmr/target.cpp
deleted file mode 100644
index 2e65c36..0000000
--- a/MediaTek/fmradiolibs/fmnative/fmr/target.cpp
+++ /dev/null
@@ -1,194 +0,0 @@
-/* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein is
- * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
- * the prior written permission of MediaTek inc. and/or its licensors, any
- * reproduction, modification, use or disclosure of MediaTek Software, and
- * information contained herein, in whole or in part, shall be strictly
- * prohibited.
- *
- * MediaTek Inc. (C) 2010. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
- * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
- * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
- * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
- * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
- * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
- * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
- * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
- * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
- * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
- * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
- * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
- * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * The following software/firmware and/or related documentation ("MediaTek
- * Software") have been modified by MediaTek Inc. All revisions are subject to
- * any receiver's applicable license agreements with MediaTek Inc.
- */
-
-#include "fmr.h"
-
-void TGT_init(struct fm_cbk_tbl *cbk_tbl)
-{
- //Basic functions.
- cbk_table->open_dev = TGT_open_dev;
- cbk_table->close_dev = TGT_close_dev;
- cbk_table->pwr_up = TGT_pwr_up;
- cbk_table->pwr_down = TGT_pwr_down;
- cbk_table->seek = TGT_seek;
- cbk_table->scan = TGT_hw_scan; //hw_scan or sw_scan.
- cbk_table->stop_scan = TGT_stop_scan;
- cbk_table->tune = TGT_tune;
- cbk_table->set_mute = TGT_set_mute;
- cbk_table->is_fm_pwrup = TGT_is_fm_pwrup;
- cbk_table->is_rdsrx_support = TGT_is_rdsrx_support;
- cbk_table->is_rdstx_support = TGT_is_rdstx_support;
- cbk_table->turn_on_off_rds = TGT_turn_on_off_rds;
- cbk_table->get_chip_id = TGT_get_chip_id;
- //For RDS RX.
- cbk_table->read_rds_data = TGT_read_rds_data;
- cbk_table->get_pi = TGT_get_pi;
- cbk_table->get_ps = TGT_get_ps;
- cbk_table->get_pty = TGT_get_pty;
- cbk_table->get_rssi = TGT_get_rssi;
- cbk_table->get_rt = TGT_get_rt;
- cbk_table->active_af = TGT_active_af;
- cbk_table->active_ta = TGT_active_ta;
- cbk_table->deactive_ta = TGT_deactive_ta;
- //FOR RDS TX.
- //TODO RDS TX functions.
- return;
-}
-
-int TGT_open_dev(const char *pname, int *fd)
-{
- int ret = 0;;
- ret = COM_open_dev(pname, fd);
- //TODO important!!!, check if it's valid FM chip here.
-
- return ret;
-}
-
-int TGT_close_dev(int fd, int freq)
-{
- return COM_close_dev(fd, freq);
-}
-
-int TGT_pwr_up(int fd)
-{
- return COM_pwr_up(fd);
-}
-
-int TGT_pwr_down(int fd, int type)
-{
- return COM_pwr_down(fd, type);
-}
-
-int TGT_get_chip_id(int fd, int *chipid)
-{
- return COM_get_chip_id(fd, chipid);
-}
-
-int TGT_get_rssi(int fd, int *rssi)
-{
- return COM_get_rssi(fd, rssi);
-}
-
-char *TGT_get_ps(int fd)
-{
- return COM_get_ps(fd);
-}
-
-char *TGT_get_rt(int fd)
-{
- return COM_get_rt(fd);
-}
-
-int TGT_get_pi(int fd)
-{
- return COM_get_pi(fd);
-}
-
-int TGT_get_pty(int fd)
-{
- return COM_get_pty(fd);
-}
-
-int TGT_tune(int fd, int freq, int band)
-{
- return COM_tune(fd, freq, band);
-}
-
-int TGT_seek(int fd, int start_freq, int dir)
-{
- return COM_seek(fd, start_freq, dir);
-}
-
-int TGT_set_mute(int fd, int mute)
-{
- return COM_set_mute(fd, mute);
-}
-
-int TGT_is_fm_pwrup(int fd)
-{
- return COM_is_fm_pwrup(fd);
-}
-
-int TGT_is_rdsrx_support(int fd)
-{
- return COM_is_rdsrx_support(fd);
-}
-
-int TGT_is_rdstx_support(int fd)
-{
- return COM_is_rdstx_support(fd);
-}
-
-int TGT_sw_scan(int fd, uint16_t *scan_tbl, int max_cnt, int band)
-{
- return COM_sw_scan(fd, scan_tbl, max_cnt, band);
-}
-
-int TGT_hw_scan(int fd, uint16_t *scan_tbl, int max_cnt, int band)
-{
- return COM_hw_scan(fd, scan_tbl, max_cnt, band);
-}
-
-int TGT_stop_scan(int fd)
-{
- return COM_stop_scan();
-}
-
-int TGT_turn_on_off_rds(int fd, int onoff)
-{
- return COM_turn_on_off_rds(fd, onoff);
-}
-
-uint16_t TGT_read_rds_data(int fd)
-{
- return COM_read_rds_data(fd);
-}
-
-int TGT_active_af(int fd)
-{
- return COM_active_af(fd);
-}
-
-int TGT_active_ta(int fd)
-{
- return COM_active_ta(fd);
-}
-
-int TGT_deactive_ta(int fd)
-{
- return COM_deactive_ta(fd);
-} \ No newline at end of file