diff --git a/MediaTek/FmRadio/Android.mk b/MediaTek/FmRadio/Android.mk
deleted file mode 100755
index 2918f01..0000000
--- a/MediaTek/FmRadio/Android.mk
+++ /dev/null
@@ -1,61 +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) 2011-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.
-
-ifeq ($(MTK_FM_SUPPORT),yes)
-ifeq ($(MTK_FM_RX_SUPPORT),yes)
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_CERTIFICATE := platform
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := FmRadio
-LOCAL_JNI_SHARED_LIBRARIES := libfmjni
-
-LOCAL_PROGUARD_ENABLED := disabled
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_STATIC_JAVA_LIBRARIES := com.mediatek.fmradio.ext
-LOCAL_SRC_FILES += bsp/com/mediatek/fmradio/ExtensionUtils.java
-
-include $(BUILD_PACKAGE)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
-
-endif
-endif
diff --git a/MediaTek/FmRadio/Android.mk~ b/MediaTek/FmRadio/Android.mk~
deleted file mode 100755
index d7c93e8..0000000
--- a/MediaTek/FmRadio/Android.mk~
+++ /dev/null
@@ -1,68 +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) 2011-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.
-
-ifeq ($(MTK_FM_SUPPORT),yes)
-ifeq ($(MTK_FM_RX_SUPPORT),yes)
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_CERTIFICATE := platform
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := FmRadio
-LOCAL_JNI_SHARED_LIBRARIES := libfmjni
-
-LOCAL_PROGUARD_ENABLED := disabled
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_JAVA_LIBRARIES += mediatek-framework
-
-ifeq ($(strip $(MTK_BSP_PACKAGE)),yes)
- LOCAL_STATIC_JAVA_LIBRARIES := com.mediatek.fmradio.ext
- LOCAL_SRC_FILES += bsp/com/mediatek/fmradio/ExtensionUtils.java
-else
- LOCAL_STATIC_JAVA_LIBRARIES := com.mediatek.fmradio.ext
- LOCAL_SRC_FILES += turnkey/com/mediatek/fmradio/ExtensionUtils.java
-endif
-
-include $(BUILD_PACKAGE)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
-
-endif
-endif
diff --git a/MediaTek/FmRadio/AndroidManifest.xml b/MediaTek/FmRadio/AndroidManifest.xml
deleted file mode 100755
index 8cc32cc..0000000
--- a/MediaTek/FmRadio/AndroidManifest.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/NOTICE b/MediaTek/FmRadio/NOTICE
deleted file mode 100644
index e69de29..0000000
diff --git a/MediaTek/FmRadio/README b/MediaTek/FmRadio/README
deleted file mode 100755
index 5ec36fe..0000000
--- a/MediaTek/FmRadio/README
+++ /dev/null
@@ -1,30 +0,0 @@
-APK of listening the FM radio programme, including listen a station, change station,
-and record a station.
-
-This library is pre-built by MediaTek internal.
-
-WHAT IT DOES?
-=============
-FmRadio.apk listen the FM radio programme.
-1. listen a FM radio station
-2. change station
-3. search stations
-4. record a station
-5. add station to favorite
-
-HOW IT WAS BUILT?
-==================
-It needs the following library from AOSP:
-1. framework.jar
-
-and the following libs from MediaTek:
-1. mediatek-framework.jar
-2. com.mediatek.fmradio.ext.jar
-3. libfmjni.so
-
-All source/dependency modules of this module are already put in
-'vendor/mediatek/libs' folder.
-
-HOW TO USE IT?
-==============
-install FmRadio.apk in mediatek platform.
diff --git a/MediaTek/FmRadio/bsp/com/mediatek/fmradio/ExtensionUtils.java b/MediaTek/FmRadio/bsp/com/mediatek/fmradio/ExtensionUtils.java
deleted file mode 100755
index 962e387..0000000
--- a/MediaTek/FmRadio/bsp/com/mediatek/fmradio/ExtensionUtils.java
+++ /dev/null
@@ -1,49 +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.
- */
-
-package com.mediatek.fmradio;
-
-import android.content.Context;
-import com.mediatek.fmradio.ext.IProjectStringExt;
-import com.mediatek.fmradio.ext.DefaultProjectStringExt;
-
-public class ExtensionUtils {
- public static IProjectStringExt getExtension(Context context) {
- return new DefaultProjectStringExt();
- }
-
-}
diff --git a/MediaTek/FmRadio/ext/Android.mk b/MediaTek/FmRadio/ext/Android.mk
deleted file mode 100755
index d5eef9f..0000000
--- a/MediaTek/FmRadio/ext/Android.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := com.mediatek.fmradio.ext
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-
diff --git a/MediaTek/FmRadio/ext/NOTICE b/MediaTek/FmRadio/ext/NOTICE
deleted file mode 100644
index e69de29..0000000
diff --git a/MediaTek/FmRadio/ext/README b/MediaTek/FmRadio/ext/README
deleted file mode 100755
index 163ce0f..0000000
--- a/MediaTek/FmRadio/ext/README
+++ /dev/null
@@ -1,25 +0,0 @@
-The FM radio plugin host side.
-
-This library is pre-built by MediaTek internal.
-
-WHAT IT DOES?
-=============
-The FM Radio plugin host is designed to change some strings
-for vendor customing. It contains:
-1. Plugin host API
-2. A default implement
-
-HOW IT WAS BUILT?
-==================
-It needs the following library from AOSP:
-No need.
-
-and the following libs from MediaTek:
-No need.
-
-All source/dependency modules of this module are already put in
-'vendor/mediatek/libs' folder.
-
-HOW TO USE IT?
-==============
-Install FmRadio.apk and plugin apk in mediatek platform.
diff --git a/MediaTek/FmRadio/ext/src/com/mediatek/fmradio/ext/DefaultProjectStringExt.java b/MediaTek/FmRadio/ext/src/com/mediatek/fmradio/ext/DefaultProjectStringExt.java
deleted file mode 100755
index 3a7dbf9..0000000
--- a/MediaTek/FmRadio/ext/src/com/mediatek/fmradio/ext/DefaultProjectStringExt.java
+++ /dev/null
@@ -1,46 +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.
- */
-
-package com.mediatek.fmradio.ext;
-
-import android.content.Context;
-public class DefaultProjectStringExt implements IProjectStringExt {
-
- public String getProjectString(Context context, int normalResId, int cmccResId) {
- return context.getString(normalResId);
- }
-}
diff --git a/MediaTek/FmRadio/ext/src/com/mediatek/fmradio/ext/IProjectStringExt.java b/MediaTek/FmRadio/ext/src/com/mediatek/fmradio/ext/IProjectStringExt.java
deleted file mode 100755
index cfcdee0..0000000
--- a/MediaTek/FmRadio/ext/src/com/mediatek/fmradio/ext/IProjectStringExt.java
+++ /dev/null
@@ -1,45 +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.
- */
-
-package com.mediatek.fmradio.ext;
-
-import android.content.Context;
-
-public interface IProjectStringExt {
-
- public String getProjectString(Context context, int normalResId, int cmccResId);
-}
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/bg_rec_infobar.9.png b/MediaTek/FmRadio/res/drawable-hdpi/bg_rec_infobar.9.png
deleted file mode 100755
index c38132d..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/bg_rec_infobar.9.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/bottom_bar.9.png b/MediaTek/FmRadio/res/drawable-hdpi/bottom_bar.9.png
deleted file mode 100755
index 4985b08..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/bottom_bar.9.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_decrease.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_decrease.png
deleted file mode 100755
index 24ef191..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_decrease.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_decrease_disable.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_decrease_disable.png
deleted file mode 100755
index f786a6f..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_decrease_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_favorite_off.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_favorite_off.png
deleted file mode 100755
index 942722e..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_favorite_off.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_favorite_on.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_favorite_on.png
deleted file mode 100755
index fecb1af..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_favorite_on.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_increase.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_increase.png
deleted file mode 100755
index 2032636..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_increase.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_increase_disable.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_increase_disable.png
deleted file mode 100755
index 811f015..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_increase_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_list.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_list.png
deleted file mode 100755
index 61a466e..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_list.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_list_disable.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_list_disable.png
deleted file mode 100755
index d05cc32..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_list_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_nextstation.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_nextstation.png
deleted file mode 100755
index a7e326a..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_nextstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_nextstation_disable.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_nextstation_disable.png
deleted file mode 100755
index ae7d400..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_nextstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_overflow.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_overflow.png
deleted file mode 100755
index 02bf8e0..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_overflow.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_overflow_disable.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_overflow_disable.png
deleted file mode 100755
index af02bf8..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_overflow_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_prevstation.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_prevstation.png
deleted file mode 100755
index 46c1afe..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_prevstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_prevstation_disable.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_prevstation_disable.png
deleted file mode 100755
index 8e5454f..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_prevstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_playback_disabled.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_playback_disabled.png
deleted file mode 100755
index 6b3a5e4..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_playback_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_playback_enabled.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_playback_enabled.png
deleted file mode 100755
index 1e4601b..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_playback_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_stop_disabled.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_stop_disabled.png
deleted file mode 100755
index 068eecb..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_stop_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_stop_enabled.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_stop_enabled.png
deleted file mode 100755
index e5a34bf..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_rec_stop_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_record_disabled.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_record_disabled.png
deleted file mode 100755
index 75d6ac1..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_record_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_record_enabled.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_record_enabled.png
deleted file mode 100755
index e674d07..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_record_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_start.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_start.png
deleted file mode 100755
index 067397a..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_start.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_start_disable.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_start_disable.png
deleted file mode 100755
index 4ce7da3..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_start_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_stop.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_stop.png
deleted file mode 100755
index 3e104c0..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_stop.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_stop_disable.png b/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_stop_disable.png
deleted file mode 100755
index 3b102e5..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/btn_fm_stop_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/fm_anim.png b/MediaTek/FmRadio/res/drawable-hdpi/fm_anim.png
deleted file mode 100755
index 2309234..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/fm_anim.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/fm_title_icon.png b/MediaTek/FmRadio/res/drawable-hdpi/fm_title_icon.png
deleted file mode 100755
index 9a69528..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/fm_title_icon.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-hdpi/ic_launcher.png b/MediaTek/FmRadio/res/drawable-hdpi/ic_launcher.png
deleted file mode 100755
index f2b54b7..0000000
Binary files a/MediaTek/FmRadio/res/drawable-hdpi/ic_launcher.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_decrease.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_decrease.png
deleted file mode 100755
index 009b4ba..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_decrease.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_decrease_disable.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_decrease_disable.png
deleted file mode 100755
index a66f36d..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_decrease_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_favorite_off.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_favorite_off.png
deleted file mode 100755
index eeab430..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_favorite_off.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_favorite_on.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_favorite_on.png
deleted file mode 100755
index 61cfb69..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_favorite_on.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_increase.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_increase.png
deleted file mode 100755
index 41941f7..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_increase.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_increase_disable.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_increase_disable.png
deleted file mode 100755
index b021ca4..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_increase_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_list.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_list.png
deleted file mode 100755
index 73fecf2..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_list.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_list_disable.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_list_disable.png
deleted file mode 100755
index 498489f..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_list_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_nextstation.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_nextstation.png
deleted file mode 100755
index c0de4ef..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_nextstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_nextstation_disable.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_nextstation_disable.png
deleted file mode 100755
index cf6dbcf..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_nextstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_overflow.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_overflow.png
deleted file mode 100755
index 5c1b6f9..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_overflow.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_overflow_disable.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_overflow_disable.png
deleted file mode 100755
index 21669ab..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_overflow_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_prevstation.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_prevstation.png
deleted file mode 100755
index d25704f..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_prevstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_prevstation_disable.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_prevstation_disable.png
deleted file mode 100755
index 84fad14..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_prevstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_playback_disabled.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_playback_disabled.png
deleted file mode 100755
index 8e74448..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_playback_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_playback_enabled.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_playback_enabled.png
deleted file mode 100755
index c1137f9..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_playback_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_stop_disabled.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_stop_disabled.png
deleted file mode 100755
index efbc115..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_stop_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_stop_enabled.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_stop_enabled.png
deleted file mode 100755
index 13e35a1..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_rec_stop_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_record_disabled.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_record_disabled.png
deleted file mode 100755
index c208f73..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_record_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_record_enabled.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_record_enabled.png
deleted file mode 100755
index 3f27dd0..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_record_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_start.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_start.png
deleted file mode 100755
index 17a20c2..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_start.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_start_disable.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_start_disable.png
deleted file mode 100755
index da098e8..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_start_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_stop.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_stop.png
deleted file mode 100755
index 2650185..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_stop.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_stop_disable.png b/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_stop_disable.png
deleted file mode 100755
index 01b9a95..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/btn_fm_stop_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/fm_anim.png b/MediaTek/FmRadio/res/drawable-ldpi/fm_anim.png
deleted file mode 100755
index 20c55ad..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/fm_anim.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/fm_title_icon.png b/MediaTek/FmRadio/res/drawable-ldpi/fm_title_icon.png
deleted file mode 100755
index 672e050..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/fm_title_icon.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldpi/ic_launcher.png b/MediaTek/FmRadio/res/drawable-ldpi/ic_launcher.png
deleted file mode 100755
index fc1da78..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldpi/ic_launcher.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_decrease.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_decrease.png
deleted file mode 100755
index 6b3ac01..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_decrease.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_decrease_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_decrease_disable.png
deleted file mode 100755
index c3c46be..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_decrease_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_increase.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_increase.png
deleted file mode 100755
index 0c67050..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_increase.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_increase_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_increase_disable.png
deleted file mode 100755
index 4d68e66..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_increase_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_list.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_list.png
deleted file mode 100755
index 6bf78a9..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_list.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_list_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_list_disable.png
deleted file mode 100755
index 0812c1b..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_list_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_nextstation.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_nextstation.png
deleted file mode 100755
index ac7d6b0..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_nextstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_nextstation_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_nextstation_disable.png
deleted file mode 100755
index c402fa1..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_nextstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_prevstation.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_prevstation.png
deleted file mode 100755
index 1b4276d..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_prevstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_prevstation_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_prevstation_disable.png
deleted file mode 100755
index 0b787c1..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_prevstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_rec_playback_disabled.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_rec_playback_disabled.png
deleted file mode 100755
index 6ecb091..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_rec_playback_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_rec_playback_enabled.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_rec_playback_enabled.png
deleted file mode 100755
index 6cb1a31..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/btn_fm_rec_playback_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/fm_anim.png b/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/fm_anim.png
deleted file mode 100755
index 44b5107..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-hdpi/fm_anim.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_decrease.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_decrease.png
deleted file mode 100755
index 65d407e..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_decrease.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_decrease_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_decrease_disable.png
deleted file mode 100755
index 880b55f..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_decrease_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_increase.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_increase.png
deleted file mode 100755
index d8cfbd3..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_increase.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_increase_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_increase_disable.png
deleted file mode 100755
index 41197c0..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_increase_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_list.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_list.png
deleted file mode 100755
index b0fc9e1..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_list.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_nextstation.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_nextstation.png
deleted file mode 100755
index 47e9a70..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_nextstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_nextstation_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_nextstation_disable.png
deleted file mode 100755
index acd9c45..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_nextstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_prevstation.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_prevstation.png
deleted file mode 100755
index 5318e4b..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_prevstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_prevstation_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_prevstation_disable.png
deleted file mode 100755
index abe6eb2..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_prevstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_rec_playback_disabled.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_rec_playback_disabled.png
deleted file mode 100755
index 14ccbeb..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_rec_playback_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_rec_playback_enabled.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_rec_playback_enabled.png
deleted file mode 100755
index 1a4aa77..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/btn_fm_rec_playback_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/fm_anim.png b/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/fm_anim.png
deleted file mode 100755
index f4a63ee..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-ldpi/fm_anim.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_decrease.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_decrease.png
deleted file mode 100755
index bcd0611..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_decrease.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_decrease_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_decrease_disable.png
deleted file mode 100755
index f75b2de..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_decrease_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_increase.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_increase.png
deleted file mode 100755
index 8c7cc8b..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_increase.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_increase_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_increase_disable.png
deleted file mode 100755
index fb5875d..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_increase_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_list.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_list.png
deleted file mode 100755
index b88d8a9..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_list.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_list_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_list_disable.png
deleted file mode 100755
index 9813971..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_list_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_nextstation.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_nextstation.png
deleted file mode 100755
index 162164c..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_nextstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_nextstation_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_nextstation_disable.png
deleted file mode 100755
index 1b95d49..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_nextstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_prevstation.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_prevstation.png
deleted file mode 100755
index 7c6e06a..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_prevstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_prevstation_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_prevstation_disable.png
deleted file mode 100755
index e9ca061..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_prevstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_rec_playback_disabled.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_rec_playback_disabled.png
deleted file mode 100755
index d1447fb..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_rec_playback_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_rec_playback_enabled.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_rec_playback_enabled.png
deleted file mode 100755
index 3d0dfef..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/btn_fm_rec_playback_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/fm_anim.png b/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/fm_anim.png
deleted file mode 100755
index 28e09d3..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-mdpi/fm_anim.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_decrease.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_decrease.png
deleted file mode 100755
index 9a44bf3..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_decrease.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_decrease_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_decrease_disable.png
deleted file mode 100755
index dbcb0cf..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_decrease_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_increase.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_increase.png
deleted file mode 100755
index 877bb86..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_increase.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_increase_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_increase_disable.png
deleted file mode 100755
index b53e3ad..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_increase_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_list.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_list.png
deleted file mode 100755
index a6313e2..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_list.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_list_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_list_disable.png
deleted file mode 100755
index 5064901..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_list_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_nextstation.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_nextstation.png
deleted file mode 100755
index a0d9bd9..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_nextstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_nextstation_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_nextstation_disable.png
deleted file mode 100755
index 5aa0d07..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_nextstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_prevstation.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_prevstation.png
deleted file mode 100755
index 2933bd4..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_prevstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_prevstation_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_prevstation_disable.png
deleted file mode 100755
index b042212..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_prevstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_rec_playback_disabled.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_rec_playback_disabled.png
deleted file mode 100755
index 27593fc..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_rec_playback_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_rec_playback_enabled.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_rec_playback_enabled.png
deleted file mode 100755
index cf165ec..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/btn_fm_rec_playback_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/fm_anim.png b/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/fm_anim.png
deleted file mode 100755
index 70791f5..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xhdpi/fm_anim.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_decrease.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_decrease.png
deleted file mode 100755
index 9a44bf3..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_decrease.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_decrease_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_decrease_disable.png
deleted file mode 100755
index dbcb0cf..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_decrease_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_increase.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_increase.png
deleted file mode 100755
index 877bb86..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_increase.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_increase_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_increase_disable.png
deleted file mode 100755
index b53e3ad..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_increase_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_list.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_list.png
deleted file mode 100755
index a6313e2..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_list.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_list_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_list_disable.png
deleted file mode 100755
index 5064901..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_list_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_nextstation.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_nextstation.png
deleted file mode 100755
index a0d9bd9..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_nextstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_nextstation_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_nextstation_disable.png
deleted file mode 100755
index 5aa0d07..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_nextstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_prevstation.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_prevstation.png
deleted file mode 100755
index 2933bd4..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_prevstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_prevstation_disable.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_prevstation_disable.png
deleted file mode 100755
index b042212..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_prevstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_rec_playback_disabled.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_rec_playback_disabled.png
deleted file mode 100755
index 27593fc..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_rec_playback_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_rec_playback_enabled.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_rec_playback_enabled.png
deleted file mode 100755
index cf165ec..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/btn_fm_rec_playback_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/fm_anim.png b/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/fm_anim.png
deleted file mode 100755
index 70791f5..0000000
Binary files a/MediaTek/FmRadio/res/drawable-ldrtl-xxhdpi/fm_anim.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-ldrtl/anim.xml b/MediaTek/FmRadio/res/drawable-ldrtl/anim.xml
deleted file mode 100755
index ea41e38..0000000
--- a/MediaTek/FmRadio/res/drawable-ldrtl/anim.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/bg_rec_infobar.9.png b/MediaTek/FmRadio/res/drawable-mdpi/bg_rec_infobar.9.png
deleted file mode 100755
index c38132d..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/bg_rec_infobar.9.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/bottom_bar.9.png b/MediaTek/FmRadio/res/drawable-mdpi/bottom_bar.9.png
deleted file mode 100755
index 4985b08..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/bottom_bar.9.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_decrease.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_decrease.png
deleted file mode 100755
index 0111567..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_decrease.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_decrease_disable.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_decrease_disable.png
deleted file mode 100755
index de3e323..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_decrease_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_favorite_off.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_favorite_off.png
deleted file mode 100755
index 05563bf..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_favorite_off.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_favorite_on.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_favorite_on.png
deleted file mode 100755
index c0c6b49..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_favorite_on.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_increase.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_increase.png
deleted file mode 100755
index 772530f..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_increase.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_increase_disable.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_increase_disable.png
deleted file mode 100755
index f362f89..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_increase_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_list.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_list.png
deleted file mode 100755
index 5eaf0ba..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_list.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_list_disable.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_list_disable.png
deleted file mode 100755
index 8fe43b4..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_list_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_nextstation.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_nextstation.png
deleted file mode 100755
index 01fbc5a..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_nextstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_nextstation_disable.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_nextstation_disable.png
deleted file mode 100755
index 997485f..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_nextstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_overflow.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_overflow.png
deleted file mode 100755
index 80e2504..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_overflow.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_overflow_disable.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_overflow_disable.png
deleted file mode 100755
index 3a7bab7..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_overflow_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_prevstation.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_prevstation.png
deleted file mode 100755
index 1fe787f..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_prevstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_prevstation_disable.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_prevstation_disable.png
deleted file mode 100755
index 71803b8..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_prevstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_playback_disabled.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_playback_disabled.png
deleted file mode 100755
index 4e1fe7f..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_playback_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_playback_enabled.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_playback_enabled.png
deleted file mode 100755
index 48ee750..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_playback_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_stop_disabled.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_stop_disabled.png
deleted file mode 100755
index b54058f..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_stop_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_stop_enabled.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_stop_enabled.png
deleted file mode 100755
index 08f8388..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_rec_stop_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_record_disabled.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_record_disabled.png
deleted file mode 100755
index 0b464d2..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_record_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_record_enabled.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_record_enabled.png
deleted file mode 100755
index 026b9d1..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_record_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_start.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_start.png
deleted file mode 100755
index ff53bb9..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_start.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_start_disable.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_start_disable.png
deleted file mode 100755
index 1bbfb9e..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_start_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_stop.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_stop.png
deleted file mode 100755
index 134807f..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_stop.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_stop_disable.png b/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_stop_disable.png
deleted file mode 100755
index f9b804a..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/btn_fm_stop_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/fm_anim.png b/MediaTek/FmRadio/res/drawable-mdpi/fm_anim.png
deleted file mode 100755
index 116af88..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/fm_anim.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/fm_title_icon.png b/MediaTek/FmRadio/res/drawable-mdpi/fm_title_icon.png
deleted file mode 100755
index 2f38c87..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/fm_title_icon.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-mdpi/ic_launcher.png b/MediaTek/FmRadio/res/drawable-mdpi/ic_launcher.png
deleted file mode 100755
index d1cb30b..0000000
Binary files a/MediaTek/FmRadio/res/drawable-mdpi/ic_launcher.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-sw1024dp-ldpi/btn_fm_favorite_off.png b/MediaTek/FmRadio/res/drawable-sw1024dp-ldpi/btn_fm_favorite_off.png
deleted file mode 100755
index 05563bf..0000000
Binary files a/MediaTek/FmRadio/res/drawable-sw1024dp-ldpi/btn_fm_favorite_off.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-sw1024dp-ldpi/btn_fm_favorite_on.png b/MediaTek/FmRadio/res/drawable-sw1024dp-ldpi/btn_fm_favorite_on.png
deleted file mode 100755
index c0c6b49..0000000
Binary files a/MediaTek/FmRadio/res/drawable-sw1024dp-ldpi/btn_fm_favorite_on.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/bg_rec_infobar.9.png b/MediaTek/FmRadio/res/drawable-xhdpi/bg_rec_infobar.9.png
deleted file mode 100755
index c38132d..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/bg_rec_infobar.9.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/bottom_bar.9.png b/MediaTek/FmRadio/res/drawable-xhdpi/bottom_bar.9.png
deleted file mode 100755
index 4985b08..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/bottom_bar.9.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_decrease.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_decrease.png
deleted file mode 100755
index 4dd4042..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_decrease.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_decrease_disable.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_decrease_disable.png
deleted file mode 100755
index 06fe97c..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_decrease_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_favorite_off.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_favorite_off.png
deleted file mode 100755
index c591cae..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_favorite_off.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_favorite_on.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_favorite_on.png
deleted file mode 100755
index 8f14270..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_favorite_on.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_increase.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_increase.png
deleted file mode 100755
index 45ce276..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_increase.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_increase_disable.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_increase_disable.png
deleted file mode 100755
index 16b948e..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_increase_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_list.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_list.png
deleted file mode 100755
index 3028829..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_list.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_list_disable.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_list_disable.png
deleted file mode 100755
index 8ce3d27..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_list_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_nextstation.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_nextstation.png
deleted file mode 100755
index 07f4c44..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_nextstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_nextstation_disable.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_nextstation_disable.png
deleted file mode 100755
index 9929646..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_nextstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_overflow.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_overflow.png
deleted file mode 100755
index 3902d93..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_overflow.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_overflow_disable.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_overflow_disable.png
deleted file mode 100755
index 9494074..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_overflow_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_prevstation.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_prevstation.png
deleted file mode 100755
index 0b38c7a..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_prevstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_prevstation_disable.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_prevstation_disable.png
deleted file mode 100755
index 7743e11..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_prevstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_playback_disabled.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_playback_disabled.png
deleted file mode 100755
index dead2bd..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_playback_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_playback_enabled.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_playback_enabled.png
deleted file mode 100755
index bb9582a..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_playback_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_stop_disabled.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_stop_disabled.png
deleted file mode 100755
index 4bef4e8..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_stop_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_stop_enabled.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_stop_enabled.png
deleted file mode 100755
index d2c6c90..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_rec_stop_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_record_disabled.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_record_disabled.png
deleted file mode 100755
index 96590b2..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_record_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_record_enabled.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_record_enabled.png
deleted file mode 100755
index 8c97fcd..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_record_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_start.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_start.png
deleted file mode 100755
index e6c0f6b..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_start.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_start_disable.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_start_disable.png
deleted file mode 100755
index 4fdda08..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_start_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_stop.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_stop.png
deleted file mode 100755
index 68135bc..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_stop.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_stop_disable.png b/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_stop_disable.png
deleted file mode 100755
index bc88941..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/btn_fm_stop_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/fm_anim.png b/MediaTek/FmRadio/res/drawable-xhdpi/fm_anim.png
deleted file mode 100755
index 420dc9c..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/fm_anim.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/fm_title_icon.png b/MediaTek/FmRadio/res/drawable-xhdpi/fm_title_icon.png
deleted file mode 100755
index a8d9f5d..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/fm_title_icon.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xhdpi/ic_launcher.png b/MediaTek/FmRadio/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100755
index c11060e..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/bg_rec_infobar.9.png b/MediaTek/FmRadio/res/drawable-xxhdpi/bg_rec_infobar.9.png
deleted file mode 100755
index c38132d..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/bg_rec_infobar.9.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/bottom_bar.9.png b/MediaTek/FmRadio/res/drawable-xxhdpi/bottom_bar.9.png
deleted file mode 100755
index 4985b08..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/bottom_bar.9.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_decrease.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_decrease.png
deleted file mode 100755
index 4dd4042..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_decrease.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_decrease_disable.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_decrease_disable.png
deleted file mode 100755
index 06fe97c..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_decrease_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_favorite_off.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_favorite_off.png
deleted file mode 100755
index c591cae..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_favorite_off.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_favorite_on.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_favorite_on.png
deleted file mode 100755
index 8f14270..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_favorite_on.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_increase.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_increase.png
deleted file mode 100755
index 45ce276..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_increase.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_increase_disable.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_increase_disable.png
deleted file mode 100755
index 16b948e..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_increase_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_list.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_list.png
deleted file mode 100755
index 3028829..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_list.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_list_disable.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_list_disable.png
deleted file mode 100755
index 8ce3d27..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_list_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_nextstation.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_nextstation.png
deleted file mode 100755
index 07f4c44..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_nextstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_nextstation_disable.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_nextstation_disable.png
deleted file mode 100755
index 9929646..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_nextstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_overflow.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_overflow.png
deleted file mode 100755
index 3902d93..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_overflow.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_overflow_disable.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_overflow_disable.png
deleted file mode 100755
index 9494074..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_overflow_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_prevstation.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_prevstation.png
deleted file mode 100755
index 0b38c7a..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_prevstation.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_prevstation_disable.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_prevstation_disable.png
deleted file mode 100755
index 7743e11..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_prevstation_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_playback_disabled.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_playback_disabled.png
deleted file mode 100755
index dead2bd..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_playback_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_playback_enabled.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_playback_enabled.png
deleted file mode 100755
index bb9582a..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_playback_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_stop_disabled.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_stop_disabled.png
deleted file mode 100755
index 4bef4e8..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_stop_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_stop_enabled.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_stop_enabled.png
deleted file mode 100755
index d2c6c90..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_rec_stop_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_record_disabled.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_record_disabled.png
deleted file mode 100755
index 96590b2..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_record_disabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_record_enabled.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_record_enabled.png
deleted file mode 100755
index 8c97fcd..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_record_enabled.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_start.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_start.png
deleted file mode 100755
index e6c0f6b..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_start.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_start_disable.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_start_disable.png
deleted file mode 100755
index 4fdda08..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_start_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_stop.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_stop.png
deleted file mode 100755
index 68135bc..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_stop.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_stop_disable.png b/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_stop_disable.png
deleted file mode 100755
index bc88941..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/btn_fm_stop_disable.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/fm_anim.png b/MediaTek/FmRadio/res/drawable-xxhdpi/fm_anim.png
deleted file mode 100755
index 420dc9c..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/fm_anim.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/fm_title_icon.png b/MediaTek/FmRadio/res/drawable-xxhdpi/fm_title_icon.png
deleted file mode 100755
index 1ba5028..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/fm_title_icon.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable-xxhdpi/ic_launcher.png b/MediaTek/FmRadio/res/drawable-xxhdpi/ic_launcher.png
deleted file mode 100755
index 964da33..0000000
Binary files a/MediaTek/FmRadio/res/drawable-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/MediaTek/FmRadio/res/drawable/anim.xml b/MediaTek/FmRadio/res/drawable/anim.xml
deleted file mode 100755
index dcd3738..0000000
--- a/MediaTek/FmRadio/res/drawable/anim.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_decrease_frequency.xml b/MediaTek/FmRadio/res/drawable/btn_fm_decrease_frequency.xml
deleted file mode 100755
index fa6f858..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_decrease_frequency.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_favorite_off_selector.xml b/MediaTek/FmRadio/res/drawable/btn_fm_favorite_off_selector.xml
deleted file mode 100755
index 0d526d4..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_favorite_off_selector.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_favorite_on_selector.xml b/MediaTek/FmRadio/res/drawable/btn_fm_favorite_on_selector.xml
deleted file mode 100755
index 08e2c5c..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_favorite_on_selector.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_increase_frequency.xml b/MediaTek/FmRadio/res/drawable/btn_fm_increase_frequency.xml
deleted file mode 100755
index d31c0cc..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_increase_frequency.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_list_selector.xml b/MediaTek/FmRadio/res/drawable/btn_fm_list_selector.xml
deleted file mode 100755
index 8fbcb87..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_list_selector.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_next.xml b/MediaTek/FmRadio/res/drawable/btn_fm_next.xml
deleted file mode 100755
index 6ecc323..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_next.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_overflow_selector.xml b/MediaTek/FmRadio/res/drawable/btn_fm_overflow_selector.xml
deleted file mode 100755
index a3c6410..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_overflow_selector.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_powerdown_selector.xml b/MediaTek/FmRadio/res/drawable/btn_fm_powerdown_selector.xml
deleted file mode 100755
index ccce13a..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_powerdown_selector.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_powerup_selector.xml b/MediaTek/FmRadio/res/drawable/btn_fm_powerup_selector.xml
deleted file mode 100755
index a81c592..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_powerup_selector.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_previous.xml b/MediaTek/FmRadio/res/drawable/btn_fm_previous.xml
deleted file mode 100755
index dc7c9b5..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_previous.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_rec_play.xml b/MediaTek/FmRadio/res/drawable/btn_fm_rec_play.xml
deleted file mode 100755
index 9bf10d8..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_rec_play.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_rec_stop.xml b/MediaTek/FmRadio/res/drawable/btn_fm_rec_stop.xml
deleted file mode 100755
index c954bee..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_rec_stop.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/drawable/btn_fm_record.xml b/MediaTek/FmRadio/res/drawable/btn_fm_record.xml
deleted file mode 100755
index ae54431..0000000
--- a/MediaTek/FmRadio/res/drawable/btn_fm_record.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/layout-ldrtl/addstation.xml b/MediaTek/FmRadio/res/layout-ldrtl/addstation.xml
deleted file mode 100755
index 78032de..0000000
--- a/MediaTek/FmRadio/res/layout-ldrtl/addstation.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/layout-ldrtl/editstation.xml b/MediaTek/FmRadio/res/layout-ldrtl/editstation.xml
deleted file mode 100755
index 3ed5acb..0000000
--- a/MediaTek/FmRadio/res/layout-ldrtl/editstation.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/layout-ldrtl/fm_recorder_dialog.xml b/MediaTek/FmRadio/res/layout-ldrtl/fm_recorder_dialog.xml
deleted file mode 100755
index 35f92f2..0000000
--- a/MediaTek/FmRadio/res/layout-ldrtl/fm_recorder_dialog.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/layout-ldrtl/main.xml b/MediaTek/FmRadio/res/layout-ldrtl/main.xml
deleted file mode 100755
index e2ea4dc..0000000
--- a/MediaTek/FmRadio/res/layout-ldrtl/main.xml
+++ /dev/null
@@ -1,243 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/layout-sw1024dp-land/main.xml b/MediaTek/FmRadio/res/layout-sw1024dp-land/main.xml
deleted file mode 100755
index b0c2449..0000000
--- a/MediaTek/FmRadio/res/layout-sw1024dp-land/main.xml
+++ /dev/null
@@ -1,270 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/layout-sw1024dp-port/main.xml b/MediaTek/FmRadio/res/layout-sw1024dp-port/main.xml
deleted file mode 100755
index b0c2449..0000000
--- a/MediaTek/FmRadio/res/layout-sw1024dp-port/main.xml
+++ /dev/null
@@ -1,270 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/layout/addstation.xml b/MediaTek/FmRadio/res/layout/addstation.xml
deleted file mode 100755
index c895051..0000000
--- a/MediaTek/FmRadio/res/layout/addstation.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/layout/editstation.xml b/MediaTek/FmRadio/res/layout/editstation.xml
deleted file mode 100755
index a08d798..0000000
--- a/MediaTek/FmRadio/res/layout/editstation.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/layout/favorite.xml b/MediaTek/FmRadio/res/layout/favorite.xml
deleted file mode 100755
index e6a0f48..0000000
--- a/MediaTek/FmRadio/res/layout/favorite.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/layout/fm_recorder_dialog.xml b/MediaTek/FmRadio/res/layout/fm_recorder_dialog.xml
deleted file mode 100755
index 6b083a0..0000000
--- a/MediaTek/FmRadio/res/layout/fm_recorder_dialog.xml
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/layout/fm_rx_em.xml b/MediaTek/FmRadio/res/layout/fm_rx_em.xml
deleted file mode 100755
index 4a4da7c..0000000
--- a/MediaTek/FmRadio/res/layout/fm_rx_em.xml
+++ /dev/null
@@ -1,789 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/layout/main.xml b/MediaTek/FmRadio/res/layout/main.xml
deleted file mode 100755
index dc2b35f..0000000
--- a/MediaTek/FmRadio/res/layout/main.xml
+++ /dev/null
@@ -1,270 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/layout/simpleadapter.xml b/MediaTek/FmRadio/res/layout/simpleadapter.xml
deleted file mode 100755
index 9c78061..0000000
--- a/MediaTek/FmRadio/res/layout/simpleadapter.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/layout/test_view.xml b/MediaTek/FmRadio/res/layout/test_view.xml
deleted file mode 100755
index c26db52..0000000
--- a/MediaTek/FmRadio/res/layout/test_view.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/res/menu/fm_action_bar.xml b/MediaTek/FmRadio/res/menu/fm_action_bar.xml
deleted file mode 100755
index 70aa2db..0000000
--- a/MediaTek/FmRadio/res/menu/fm_action_bar.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
diff --git a/MediaTek/FmRadio/res/menu/fm_menu.xml b/MediaTek/FmRadio/res/menu/fm_menu.xml
deleted file mode 100755
index 12b6015..0000000
--- a/MediaTek/FmRadio/res/menu/fm_menu.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
diff --git a/MediaTek/FmRadio/res/values-af/strings.xml b/MediaTek/FmRadio/res/values-af/strings.xml
deleted file mode 100755
index 524b44a..0000000
--- a/MediaTek/FmRadio/res/values-af/strings.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
- FM-radio
- Soek
- Ja
- Luidspreker
- Skryf oorheen
- Begin opneem...
- MHz
- Kanaallys is leeg.
- RDS-instellings
- Het beskikbare kanale uitgesoek:
- bestaan reeds
- Inprop-oorfoon
- Voeg by Gunsteling
- Te min ruimte op SD-kaart!
- Bevestig verwyder uit gunstelinge
- Neem FM op
- Oorfoon
- Klankmodus
- Hierdie kanaal is reeds in die gunstelinglys.
- Tans nie beskikbaar nie
- Suksesvol uit gunstelinge verwyder.
- Suksesvol by gunstelinge gevoeg.
- Kanaalinligting
- Kan nie die kanaal by die gunstelinglys voeg nie, want dis vol.
- Stoor
- Soek
- Alternatiewe frekwensie
- Deursoek kanale...
- Verlaat
- Meer
- Gooi weg
- Redigeer
- Kan nie beskikbare kanaal uitsoek nie.
- Te min ruimte! Wil jy die huidige opname stoor?
- Jy kan nie FM-radio begin terwyl jy in \'n oproep is nie.
- Frekwensie:
- \'n Interne fout het in opnemer voorgekom!
- Stoor opnamelêer
- Oukei
- Krag
- Verwyder uit gunstelinge
- Skakel eers FM aan!
- FM-opnemer
- Jou opname sal verlore gaan, weens SD-kaart uitgehaal!
- Is jy seker jy wil hierdie kanaal uit gunstelinge verwyder?
- Nuwe kanaal
- Kanselleer
- Werkinge
- Nee
- Kanaallys
- Ongeldige frekwensie vir huidige ligging. Geldige frekwensieomvang: 87,5-108,0
- Jou SD-kaart word vermis!
- Naam:
- Redigeer kanaal
- Vorige invoer is ongeldig; geldige waarde is 0 of 5.
- Tik lêernaam hier
- Jy kort \'n oorfoon as antenna. Prop een by jou foon in.
- \'n Interne fout het in speler voorgekom!
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-am/strings.xml b/MediaTek/FmRadio/res/values-am/strings.xml
deleted file mode 100755
index 40dd643..0000000
--- a/MediaTek/FmRadio/res/values-am/strings.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
- FM ሬዲዮ
- ፈልግ
- አዎ
- ድምጽ ማጉያ
- ደምስሰህ ጻፍ
- መቅዳት ጀምር…
- MHz
- የጣቢያዉ ዝርዝር ባዶ ነዉ፡፡
- RDS ቅንብሮች
- ያሉትን ጣበያዎች ፈልጎ ጨርሷል፡
- ከዚህ በፊት አለ
- የጆሮ ማዳመጫዉን ይሰኩ
- ወደ ተወዳጆች ጨምር
- በቂ ያልሆነ የSD ካርድ ቦታ!
- ከተወዳጆች መወገዱን ያረጋግጡ
- FMን ቅዳ
- የጆሮ ማዳመጫ
- የድምጽ ሁኔታ
- ጣቢያዉ ከዚህ በፊት በተወዳጆች ዝርዝር ዉስጥ አለ፡፡
- በአሁኑ ወቅት የለም
- በተሳካ ሁኔታ ከተወዳጆች ተወግዷል፡፡
- በተሳካ ሁኔታ ወደተወዳጆች ተጨምሯል፡፡
- የጣቢያ መረጃ
- የተወዳጆች ጣቢያ ዝርዝር ስለሞላ ጣቢያዉን ወደ ተወዳጆች ዝርዝር ማስገባት አይቻልም፡፡
- አስቀምጥ
- ፈልግ
- አማራጭ ሞገድ
- ጣቢያዎችን ፈልግ
- ዉጣ
- የበለጡ
- አስወግድ
- አርታእ
- ያሉትን ጣበያዎች መፈለግ አይቻልም፡፡
- በቂ ያልሆነ ማከማቻ! አሁን የተቀዳዉን ማስቀመጥ ይፈልጋሉ;
- በጥሪ ላይ እያሉ FMሬዲዮን ማስነሳት አይችሉም፡፡
- ሞገድ፡
- በመቅጃዉ ላይ ዉስጣዊ ስህተት ተከስቷል!
- የፍይሉን
- እሺ
- ሃይል
- ከተወዳጆች አስወግድ
- እባክዎ በመጀመሪያ FMን ያስነሱ!
- የFM መቅጃ
- SD በመወገዱ ምክንያት ቅጂዎ ይጠፋል!
- ይህንን ጣቢያ ከተወዳጆች ለማስወገድ መፈለግዎትን እርግጠኛ ነዎት?
- አዲስ ጣቢያ
- ሰርዝ
- እንቅስቃሴዎች
- አይ
- የጣቢያ ዝርዝር
- ለአሁኑ ቦታ ትክክለኛ ያልሆነ ሞገድ ነዉ፡፡ ትክክለኛ የሆነ የሞገድ መጠን ፡87.5-108.0
- SD ካርድዎ የለም!
- ስም፡
- ጣቢያን አርታእ
- የመጨረሻ ያስገቡት ግቤት ትክክል አይደለም፣ ትክክለኛዉ ከ 0 እስከ 5 መሆን አለበት፡፡
- የፋይሉን ስም እዚህ ጋር ይተይቡ
- የጆሮ ማዳመጫ እንደ አንቴና ያስፈልጎታል፡፡ እባክዎ የጆሮ ማዳመጫዉን ይሰኩ፡፡
- በማጫወቻዉ ላይ ዉስጣዊ ስህተት ተከስቷል!
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-ar/strings.xml b/MediaTek/FmRadio/res/values-ar/strings.xml
deleted file mode 100755
index d5a3c77..0000000
--- a/MediaTek/FmRadio/res/values-ar/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- راديو FM
- قائمة القنوات
- إضافة إلى المفضلات
- "بحث"
- خروج
- العمليات
- "تعديل"
- إزالة من المفضلات
- يجب أن يكون لديك سماعة أذن لهوائي. رجاء توصيل سماعة الأذن.
- توصيل سماعة الأذن
- "نعم"
- "لا"
- "موافق"
- "إلغاء"
- مسح
- مسح القنوات...
- الاسم:
- التكرار:
- تحرير القناة
- قناة جديدة
- تأكيد مسح القناة
- هل تريد بالتأكيد حذف هذه القناة؟
- تتعذر إضافة القناة إلى قائمة المفضلة نظرًا لاكتمالها.
- هذه القناة موجودة بالفعل في قائمة المفضلة.
- تمت الإزالة من المفضلات بنجاح
- تمت الإضافة إلى المفضلات بنجاح
- القنوات المتوفرة التي تم مسحها:
- تعذر البحث عن قناة متاحة.
- إعدادات نظام بيانات الراديو
- معلومات القناة
- التردد البديل
- المزيد من التطبيقات
- أس
- وضع الصوت
- "استبدال"
- ميجا هرتز
- قم بتوصيل سماعات الأذن لاستخدامها كهوائي الراديو.
-
- مسجل FM
- ستفقد التسجيلات نتيجة نزع بطاقة SD!
- بدء التسجيل…
- بطاقة SD مفقودة!
- مساحة غير كافية على بطاقة SD!
- حدث خطأ داخلي في المسجل!
- حدث خطأ داخلي في المشغل!
- يرجى تشغيل FM أولاً!
- تسجيل FM
- حفظ
- تجاهل
- اكتب اسم الملف هنا
- حفظ ملف التسجيل
- مساحة التخزين غير كافية! هل تريد حفظ التسجيل الحالي؟
- موجود بالفعل
- تردد غير صالح للموقع الحالي. نطاق التردد الصالح: 87,5-108,0.
- المُدخل الأخير غير صحيح، القيمة الصحيحة هي 0 أو 5.
- لا يمكن تشغيل راديو FM أثناء إجراء مكالمة.
- قائمة القنوات فارغة.
- "السماعة"
- سماعة رأس
- غير متاح حاليًا
- إضافة إلى القنوات مسبقة الضبط
- إزالة من القنوات مسبقة الضبط
- تأكيد الإزالة من القنوات مسبقة الضبط
- هل أنت متأكد من رغبتك في إزالة هذه القناة من القنوات مسبقة الضبط؟
- يتعذر إضافة القناة إلى قائمة القنوات مسبقة الضبط لأنها ممتلئة.
- هذه القناة موجودة بالفعل في قائمة القنوات مسبقة الضبط.
- تمت الإزالة بنجاح من القنوات مسبقة الضبط.
- تمت الإضافة بنجاح إلى القنوات مسبقة الضبط.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-bg/strings.xml b/MediaTek/FmRadio/res/values-bg/strings.xml
deleted file mode 100755
index 394ee51..0000000
--- a/MediaTek/FmRadio/res/values-bg/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- УКВ радио
- Списък канали
- Добави към предпочитани
- Търсене
- Изход
- Действия
- Редактиране
- Изтриване от предпочитани
- Като антена трябва да има слушалки. Включете слушалките.
- Включете слешалките
- "Да"
- "Не"
- ОК
- Отказ
- Търсене
- Търсене на канали…
- Име:
- Честота:
- Редактиране канал
- Нов канал
- Потвърдете изтриване от предпочитани
- Настоявате ли да изтрием този канал от предпочитаните?
- Каналът не може да се добави в списък предпочитани - списъкът е пълен.
- Каналът вече е в списък предпочитани.
- Успешно изтриване от предпочитани.
- Успешно добавяне към предпочитани.
- Търсене на достъпни канали:
- Търсенето на достъпен канал невъзможно.
- Невалидна честота за това местоположение. Допустим честотен диапазон: 87,5 - 108,0
- Последно невалидно въвеждане - разрешени стойности 0 или 5.
- Настройки RDS
- Информация за канали
- Резервна честота
- Режим саунд
- "Още"
- "степен"
- Не можете да включите УКВ радио по време на обаждане.
- Празен списък канали.
- Пренаписване
- MHz
- Включете слушалките за използване като радио антена.
- УКВ записващо у-во
- Записът ще изчезне при изваждане на SD картата!
- Начало запис…
- Липсва SD карта!
- Недостатъчно място на SD картата!
- Вътрешна грешка в записващото у-во!
- Вътрешна грешка в плеъра!
- Първо включете УКВ!
- Запис на УКВ
- "Запазване"
- Отхвърляне
- Въведете име на файл тук
- Запаметяване на записващия файл
- Недостатъчно памет! Искате ли да запаметите този запис?
- вече съществува
- Високоговорител
- Слушалки
- Недостъпен в момента
- Добави към пре-настроени канали
- Изтриване от пре-настроени канали
- Потвърдете изтриване от пре-настроени канали
- Настоявате ли да изтрием този канал от пре-настроените?
- Каналът не може да се добави в списък пре-настроени - списъкът е пълен.
- Каналът вече е в списък пре-настроени.
- Успешно изтриване от пре-настроени.
- Успешно добавяне към пре-настроени.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-bn/strings.xml b/MediaTek/FmRadio/res/values-bn/strings.xml
deleted file mode 100755
index 7c24348..0000000
--- a/MediaTek/FmRadio/res/values-bn/strings.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
- এফএম রেডিও
- চ্যানেলের তালিকা
- প্রিয়-তে যোগ করুন
- অনুসন্ধান করুন
- প্রস্থান
- অপারেশন
- সম্পাদনা করুন
- প্রিয় তালিকা থেকে সরিয়ে ফেলুন
- এন্টেনা হিসেবে আপনার ইয়ারফোন প্রয়োজন। আপনার ইয়ারফোন লাগান।
- ইয়ারফোন লাগান
- হ্যাঁ
- না
- ঠিক আছে
- বাতিল করুন
- স্ক্যান করুন
- চ্যানেল স্ক্যান করুন...
- নাম:
- ফ্রিকোয়েন্সি:
- চ্যানেল সম্পাদনা
- নতুন চ্যানেল
- চ্যানেলটি মুছে ফেলা নিশ্চিত করুন
- আপনি কি নিশ্চিতভাবেই চ্যানেলটি মুছে ফেলতে চান?
- প্রিয় তালিকায় চ্যানেলটি যুক্ত করা যাচ্ছে না কারণ তালিকা পূর্ণ।
- চ্যানেলটি প্রিয় তালিকায় আগে থেকেই বিদ্যমান।
- প্রিয় তালিকা থেকে সফলভাবে সরিয়ে ফেলা হয়েছে
- প্রিয় তালিকায় সফলভাবে যোগ করা হয়েছে
- বিদ্যমানগুলো চ্যানেল অনুসন্ধান করা হয়েছে:
- বিদ্যমান চ্যানেল অনুসন্ধান করে বের করতে পারছে না ।
- আরডিএস সেটিং
- চ্যানেলের তথ্য
- বিকল্প ফ্রিকোয়েন্সি
- আরো অ্যাপ্লিকেশন
- পাওয়ার
- সাউন্ড মোড
- ওভাররাইট করুন
- মে.হার্টস
- রেডিও এন্টেনা হিসেবে ব্যবহার করতে আপনার ইয়ারফোন লাগান।
-
-
- এফএম রেকর্ডার
- এসডি সরিয়ে ফেলার কারণে আপনার রেকর্ড করা জিনিস হারিয়ে যাবে!
- রেকর্ড করা শুরু…
- আপনার এসডি কার্ড পাওয়া যাচ্ছে না!
- এসডি কার্ডে জায়গা অপর্যাপ্ত!
- রেকর্ডারে একটি অভ্যন্তরীণ ত্রুটি ঘটেছে!
- প্লেয়ারে একটি অভ্যন্তরীণ ত্রুটি ঘটেছে!
- প্রথমে এফএম চালু করুন!
- এফএম রেকর্ড করুন
- সংরক্ষণ করুন
- বাতিল করুন
- এখানে ফাইলের নাম লিখুন
- রেকর্ড করা ফাইল সংরক্ষণ করুন
- সংরক্ষণাগার অপর্যাপ্ত! আপনি কি বর্তমানে রেকর্ড করা জিনিস সংরক্ষণ করতে চান?
- ইতিমধ্যেই বিদ্যমান
- বর্তমান অবস্থানের জন্য অকার্যকর ফ্রিকোয়েন্সি। কার্যকর ফ্রিকোয়েন্সি স্কোপ: 87.5-108.0।
- সর্বশেষ অকার্যকর ইনপুট, কার্যকর মূল্য হল ০ বা ৫।
- কলে থাকা অবস্থায় আপনি এফএম রেডিও চালু করতে পারবেন না।
- চ্যানেল তালিকা খালি।
- স্পিকার
- হেডসেট
- বর্তমানে পাওয়া যাচ্ছে না
-
- চ্যানেল প্রিসেট করতে যোগ করুন
- প্রিসেট চ্যানেল থেকে সরিয়ে ফেলুন
- প্রিসেট চ্যানেল থেকে সরানো নিশ্চিত করুন
- আপনি কি নিশ্চিত যে আপনি এই চ্যানেল প্রিসেট চ্যানেল থেকে সরিয়ে ফেলতে চান?
- প্রিসেট চ্যানেলের তালিকায় চ্যানেলটি যোগ করা যাচ্ছে না কারণ এটি পূর্ণ।
- এই চ্যানেল ইতিমধ্যে প্রিসেট চ্যানেল তালিকায় আছে।
- প্রিসেট চ্যানেল থেকে সফলভাবে সরিয়ে ফেলা হয়েছে।
- প্রিসেট চ্যানেলে সফলভাবে যোগ করা হয়েছে।
-
diff --git a/MediaTek/FmRadio/res/values-ca/strings.xml b/MediaTek/FmRadio/res/values-ca/strings.xml
deleted file mode 100755
index 3ddfd09..0000000
--- a/MediaTek/FmRadio/res/values-ca/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- Ràdio FM
- Cerca
- Sí
- Altaveu
- Sobreescriu
- Inicia l’enregistrament…
- MHz
- La llista de canals és buida.
- Configuració d’RDS
- Canals disponibles que s’han cercat:
- ja existeix
- Connecta l’auricular
- Afegeix als favorits
- Espai insuficient a la targeta SD!
- Confirma la supressió dels favorits
- Enregistra FM
- Auricular
- Mode de so
- Aquest canal ja és a la llista de favorits.
- Actualment no està disponible
- S’ha eliminat correctament dels favorits.
- S’ha afegit correctament als favorits.
- Informació del canal
- El canal no pot afegir-se a la llista de favorits perquè és plena.
- Desa-ho
- Cerca
- Freqüència alternativa
- Cerca canals...
- Surt
- Més
- Descarta
- Edita
- No es poden cercar canals disponibles.
- Emmagatzematge insuficient! Voleu desar l’enregistrament actual?
- La ràdio FM no pot iniciar-se amb una trucada en curs.
- Freqüència:
- S’ha produït un error intern a l’enregistrador!
- Desa fitxer d’enregistrament
- Accepta
- Alimentació
- Suprimeix dels favorits
- Engega primer l’FM!
- Enregistrador d’FM
- L’extracció de l’SD provocarà la pèrdua de l’enregistrament!
- Esteu segur que voleu eliminar aquest canal dels favorits?
- Canal nou
- Cancel·la
- Operacions
- No
- Llista de canals
- Freqüència no vàlida per a la ubicació actual. Interval de freqüències vàlides: 87.5-108.0
- No hi ha cap targeta SD!
- Nom:
- Edita el canal
- La darrera entrada no és vàlida, els valors vàlids són 0 o 5.
- Escriviu aquí el nom de fitxer
- Necessiteu un auricular com a antena. Endolleu l’auricular.
- S’ha produït un error intern al reproductor!
- Connecta els auriculars per utilitzar-los com a antena d’àudio.
- Afegeix als canals predeterminats
- Suprimeix dels canals predeterminats
- Confirma la supressió dels canals predeterminats
- Estàs segur que vols suprimir aquest canal dels canals predeterminats?
- No es pot afegir el canal a la llista de canals predeterminats perquè està plena.
- Aquest canal ja es troba a la llista de canals predeterminats.
- S’ha suprimit correctament dels canals predeterminats.
- S’ha afegit correctament als canals predeterminats
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-cs/strings.xml b/MediaTek/FmRadio/res/values-cs/strings.xml
deleted file mode 100755
index 9ac1ac0..0000000
--- a/MediaTek/FmRadio/res/values-cs/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- FM rádio
- Seznam kanálů
- Přidat k oblíbeným položkám
- Hledat
- Konec
- Operace
- Úpravy
- Odebrat z oblíbených položek
- Jsou zapotřebí sluchátka jako anténa. Připojte sluchátka.
- Připojit sluchátka
- Ano
- Ne
- OK
- Storno
- Vyhledat
- Prohledat kanály...
- Název:
- Frekvence:
- Upravit kanál
- Nový kanál
- Potvrdit odebrání z oblíbených
- Opravdu chcete odebrat tento kanál z oblíbených?
- Nelze přidat kanál do seznamu oblíbených, protože je plný.
- Tento kanál je již v seznamu oblíbených.
- Úspěšně odebráno z oblíbených položek.
- Úspěšně přidáno k oblíbeným položkám.
- Vyhledané dostupné kanály:
- Nelze vyhledat dostupný kanál.
- Neplatná frekvence pro aktuální umístění. Platný rozsah frekvence: 87,5-108,0.
- Nastavení RDS
- Informace o kanálu
- Náhradní frekvence
- Režim zvuku
- Další aplikace
- síla
- "Přepsat"
- MHz
- Připojte sluchátka jako rozhlasovou anténu.
-
- FM rekordér
- Váš záznam bude ztracen z důvodu vyjmutí SD!
- Spustit záznam…
- Karta SD chybí!
- Nedostatek prostoru na kartě SD!
- Došlo k vnitřní chybě rekordéru!
- Došlo k vnitřní chybě přehrávače!
- Nejdříve zapněte napájení FM!
- Záznam FM
- Uložit
- Zahodit
- Zde zadejte název souboru
- Uložit soubor se záznamem
- Nedostatek úložného prostoru. Chcete uložit aktuální záznam?
- již existuje
- Poslední neplatné zadání, platná hodnota je 0 nebo 5.
- Nelze spustit FM rádio během volání.
- Seznam kanálů je prázdný.
- "Reproduktor"
- Sluchátka s mikrofonem
- Aktuálně není k dispozici
- Přidat k předvoleným kanálům
- Odebrat z předvolených kanálů
- Potvrdit odebrání z předvolených kanálů
- Opravdu chcete odebrat tento kanál z předvolených kanálů?
- Nelze přidat kanál do seznamu předvolených kanálů, protože je plný.
- Tento kanál je již v seznamu předvolených kanálů.
- Úspěšně odebráno z předvolených kanálů.
- Úspěšně přidáno k předvoleným kanálům.
-
diff --git a/MediaTek/FmRadio/res/values-da/strings.xml b/MediaTek/FmRadio/res/values-da/strings.xml
deleted file mode 100755
index 06e5a8b..0000000
--- a/MediaTek/FmRadio/res/values-da/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM-radio
- Kanalliste
- Tilføj til favoritter
- Søg
- Forlad
- Operationer
- Rediger
- Fjern fra Favoritter
- Du skal bruge en øretelefon som antenne. Tilslut dine øretelefoner.
- Tilslut dine øretelefoner
- "Ja"
- "Nej"
- OK
- Annuller
- Søg
- Søg efter kanaler...
- Navn:
- Frekvens:
- Rediger kanal
- Ny kanal
- Bekræft at fjerne fra favoritter
- Er du sikker på, at du vil fjerne denne kanal fra favoritter?
- Kan ikke tilføje kanalen til listen med favoritter, da listen er fyldt.
- Denne kanal er allerede på listen med favoritter.
- Fjernet fra favoritter.
- Tilføjet til favoritter.
- Søgt efter tilgængelige kanaler:
- Kan ikke søge efter tilgængelig kanal.
- Ugyldigt frekvens for den aktuelle placering. Gyldigt frekvensinterval: 87,5-108,0
- Den sidste ugyldige indtastning. Gyldig værdi er 0 eller 5.
- RDS-indstillinger
- Kanaloplysninger
- Alternativ frekvens
- Lydfunktion
- "Mere"
- "tænd/sluk"
- Du kan ikke starte FM-radio, når du er i gang med et opkald.
- Kanallisten er tom.
- Overskriv
- MHz
- Tilslut dine øretelefoner for at bruge dem som radioantenne.
- FM-optager
- Din optagelse mistes, hvis du fjerner SD-kortet!
- Start optagelse...
- Dit SD-kort mangler!
- Utilstrækkelig plads på SD-kort!
- Der opstod en intern fejl i optageren!
- Der opstod en intern fejl i afspilleren!
- Tænd først for FM!
- Optag FM
- "Gem"
- Kassér
- Indtast filnavn her
- Gem optaget fil
- Utilstrækkelig lagerplads! Vil du gemme den aktuelle optagelse?
- findes allerede
- Højttaler
- Øretelefon
- Ikke tilgængelig for øjeblikket
- Tilføj til forudindstillede kanaler
- Fjern fra forudindstillede kanaler
- Bekræft at fjerne fra forudindstillede kanaler
- Er du sikker på, at du vil fjerne denne kanal fra forudindstillede kanaler?
- Kan ikke tilføje kanalen til listen med forudindstillede kanaler, da listen er fyldt.
- Denne kanal er allerede på listen med forudindstillede kanaler.
- Fjern fra forudindstillede kanaler.
- Tilføjet til forudindstillede kanaler.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-de-rAT/strings.xml b/MediaTek/FmRadio/res/values-de-rAT/strings.xml
deleted file mode 100755
index e564f4d..0000000
--- a/MediaTek/FmRadio/res/values-de-rAT/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM-Radio
- Kanalliste
- Zum Favoriten. hinzufügen
- Suchen
- Beenden
- Aktionen
- Editieren
- Aus Favoriten löschen
- Sie benötigen Kopfhörer als Antenne. Stöpseln Sie Ihren Kopfhörer ein.
- Kopfhörer einstecken
- Ja
- Nein
- OK
- Abbrechen
- Suchen
- Kanäle suchen...
- Name:
- Frequenz:
- Kanal editieren
- Neuer Kanal
- Aus Favoriten löschen bestätigen
- Wollen Sie diesen Kanal wirklich aus den Favoriten löschen?
- Kann Kanal nicht zur Favoritenliste hinzufügen, da diese voll ist.
- Der Kanal existiert bereits in der Favoritenliste.
- Erfolgreich aus den Favoriten gelöscht.
- Erfolgreich den Favoriten hinzugefügt.
- Suche aus verfügbaren Kanälen:
- Suche aus verfügbaren Kanälen nicht möglich.
- Ungültige Frequenz für momentanen Standort Gültiger Frequenzbereich: 87,5-108,0
- Letzte ungültige Eingabe, gültige Werte sind 0 oder 5.
- RDS-Einstellungen
- Kanal-Information
- Alternativfrequenz
- Sound-Modus
- Mehr
- Leistung
- Sie können, wenn Sie telefonieren, das FM-Radio nicht starten.
- Kanalliste ist leer.
- Überschreiben
- MHz
- Stöpseln Sie den Ohrhörer ein, um ihn als Antenne zu verwenden.
- FM-Recorder
- Da die SD-Karte entfernt wurde, geht die Aufnahme verloren.
- Aufnahme wird gestartet...
- Ihre SD-Karte fehlt!
- Platz auf SD-Karte reicht nicht aus!
- Interner Aufnahmefehler!
- Interner Wiedergabefehler!
- FM erst einschalten!
- FM aufnehmen
- Speichern
- Verwerfen
- Hier Dateinamen eingeben
- Aufnahmedatei speichern
- Unzureichender Speicherplatz! Do you want to save current recording?
- Existiert bereits
- Lautsprecher
- Kopfhörer
- Momentan nicht verfügbar
- Zu gespeicherten Kanälen hinzufügen
- Aus gespeicherten Kanälen löschen
- Aus gespeicherten Kanälen löschen betätigen
- Wollen Sie diesen Kanal wirklich aus den gespeicherten Kanälen löschen?
- Kann Kanal nicht zur Liste der gespeicherten Kanäle hinzufügen, da diese voll ist.
- Der Kanal existiert bereits in der Liste der gespeicherten Kanäle.
- Erfolgreich aus den gespeicherten Kanälen gelöscht.
- Erfolgreich zu den gespeicherten Kanälen hinzugefügt.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-de/strings.xml b/MediaTek/FmRadio/res/values-de/strings.xml
deleted file mode 100755
index a317db7..0000000
--- a/MediaTek/FmRadio/res/values-de/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- FM-Übertragung
- Senderliste
- Zu Favoriten hinzufügen
- Suche
- Ausgang
- Vorgänge
- Bearbeiten
- Aus Favoriten entfernen
- Sie benötigen einen Kopfhörer als Antenne. Bitte schließen Sie Ihren Kopfhörer an.
- Kopfhörer anschließen
- Ja
- Nein
- OK
- Abbrechen
- Suchen
- Kanalsuche…
- Name:
- Häufigkeit:
- Kanal bearbeiten
- Neuer Kanal
- Löschung des Senders bestätigen
- Möchten Sie diesen Sender wirklich löschen?
- Der Sender kann nicht zur Favoritenliste hinzugefügt werden, da die Liste voll ist.
- Dieser Sender befindet sich bereits in der Favoritenliste.
- Erfolgreich aus Favoriten entfernt.
- Erfolgreich zu Favoriten hinzugefügt.
- Entdeckte verfügbare Kanäle:
- Suche nach verfügbarem Kanal nicht möglich.
- RDS-Einstellungen
- Kanalinformationen
- Alternative Frequenz
- Mehr Apps
- Potenz
- Klangmodus
- "Überschreiben"
- MHz
- Kopfhörer zur Nutzung als Radioantenne anschließen.
-
- UKW-Rekorder
- Ihre Aufzeichnung geht beim Entfernen der SD-Karte verloren!
- Aufzeichnung starten…
- Ihre SD-Karte fehlt!
- Nicht genügend Platz auf der SD-Karte!
- Im Recorder ist ein interner Fehler aufgetreten!
- Im Player ist ein interner Fehler aufgetreten!
- Bitte zuerst UKW einschalten!
- UKW aufnehmen
- Speichern
- Verwerfen
- Hier Dateinamen eingeben
- Aufzeichnungsdatei speichern
- Nicht genügend Speicher! Möchten Sie die aktuelle Aufzeichnung speichern?
- Existiert bereits
- Ungültige Frequenz für aktuellen Standort. Gültiger Frequenzbereich: 87,5-108,0.
- Die letzte Eingabe war ungültig, gültiger Wert: 0 oder 5.
- Sie können das UKW-Radio während eines Telefonats nicht starten.
- Kanalliste ist leer.
- "Lautsprecher"
- Headset
- Derzeit nicht verfügbar
- Zu voreingestellten Kanälen hinzufügen
- Aus voreingestellten Kanälen entfernen
- Entfernung aus voreingestellten Kanälen bestätigen
- Möchten Sie diesen Kanal wirklich aus den voreingestellten Kanälen entfernen?
- Der Kanal kann nicht zur Liste voreingestellter Kanäle hinzugefügt werden, da diese voll ist.
- Dieser Kanal ist bereits in der Liste voreingestellter Kanäle.
- Erfolgreich aus voreingestellten Kanälen entfernt.
- Erfolgreich zu voreingestellten Kanälen hinzufügt.
-
diff --git a/MediaTek/FmRadio/res/values-el/strings.xml b/MediaTek/FmRadio/res/values-el/strings.xml
deleted file mode 100755
index 1fdf094..0000000
--- a/MediaTek/FmRadio/res/values-el/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- Ραδιόφωνο FM
- Λίστα καναλιών
- Προσθήκη στα αγαπημένα
- Αναζήτηση
- Έξοδος
- Λειτουργίες
- Επεξεργασία
- Κατάργηση από τα αγαπημένα
- Χρειάζεται ένα ακουστικό για κεραία. Συνδέστε το ακουστικό σας.
- Συνδέστε τα ακουστικά
- Ναι
- Όχι
- OK
- Άκυρο
- Σάρωση
- Σάρωση καναλιών...
- Όνομα:
- Συχνότητα:
- Επεξεργασία καναλιού
- Νέο κανάλι
- Επιβεβαίωση κατάργησης από τα αγαπημένα
- Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτό το κανάλι από τα αγαπημένα;
- Δεν είναι δυνατή η προσθήκη του καναλιού στη λίστα αγαπημένων, επειδή είναι πλήρης.
- Αυτό το κανάλι βρίσκεται ήδη στη λίστα αγαπημένων.
- Καταργήθηκε από τα αγαπημένα με επιτυχία.
- Προστέθηκε στα αγαπημένα με επιτυχία.
- Έγινε αναζήτηση διαθέσιμων καναλιών:
- Δεν είναι δυνατή η αναζήτηση διαθέσιμων καναλιών.
- Μη έγκυρη συχνότητα για την τρέχουσα τοποθεσία. Έγκυρο εύρος συχνοτήτων: 87,5-108,0.
- Ρυθμίσεις RDS
- Πληροφορίες καναλιού
- Εναλλακτική συχνότητα
- Λειτουργία ήχου
- Περισσότερες εφαρμογές
- υψωμένο στη δύναμη
- "Αντικατάσταση"
- MHz
- Συνδέστε τα ακουστικά σας που λειτουργούν ως κεραία ραδιοφώνου.
-
- Πρόγραμμα εγγραφής FM
- Η εγγραφή σας θα χαθεί λόγω αφαίρεσης της κάρτας SD!
- Έναρξη εγγραφής...
- Η κάρτα SD λείπει!
- Ανεπαρκής χώρος στην κάρτα SD!
- Παρουσιάστηκε εσωτερικό σφάλμα στο πρόγραμμα εγγραφής!
- Παρουσιάστηκε εσωτερικό σφάλμα στο πρόγραμμα αναπαραγωγής!
- Πρώτα ενεργοποιήστε τα FM!
- Εγγραφή FM
- Αποθήκευση
- Απόρριψη
- Πληκτρολογήστε εδώ το όνομα αρχείου
- Αποθήκευση αρχείου εγγραφής
- Ανεπαρκής χώρος αποθήκευσης! Θέλετε να αποθηκεύσετε την τρέχουσα εγγραφή;
- υπάρχει ήδη
- Η τελευταία μη έγκυρη εισαγωγή, οι έγκυρες τιμές είναι 0 ή 5.
- Δεν είναι δυνατή η εκκίνηση της εφαρμογής "Ραδιόφωνο FM" ενώ βρίσκεται σε εξέλιξη κλήση.
- Η λίστα καναλιών είναι κενή.
- "Ηχείο"
- Ακουστικά
- Επί του παρόντος δεν είναι διαθέσιμη
- Προσθήκη στα προκαθορισμένα κανάλια
- Κατάργηση από τα προκαθορισμένα κανάλια
- Επιβεβαίωση κατάργησης από τα προκαθορισμένα κανάλια
- Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτό το κανάλι από τα προκαθορισμένα κανάλια;
- Δεν είναι δυνατή η προσθήκη αυτού του καναλιού στη λίστα προκαθορισμένων καναλιών, επειδή είναι πλήρης.
- Αυτό το κανάλι βρίσκεται ήδη στη λίστα προκαθορισμένων καναλιών.
- Η κατάργηση από τα προκαθορισμένα κανάλια ολοκληρώθηκε με επιτυχία.
- Η προσθήκη στα προκαθορισμένα κανάλια ολοκληρώθηκε με επιτυχία.
-
diff --git a/MediaTek/FmRadio/res/values-en-rGB/strings.xml b/MediaTek/FmRadio/res/values-en-rGB/strings.xml
deleted file mode 100755
index adfec38..0000000
--- a/MediaTek/FmRadio/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM Radio
- Channel list
- Add to Favourites
- Search
- Exit
- Operations
- Edit
- Remove from favourites
- You need an earphone cable as an antenna. Please plug in your earphone.
- Plug in earphone
- "Yes"
- "No"
- OK
- Cancel
- Search
- Search channels...
- Name:
- Frequency:
- Edit Channel
- New Channel
- Confirm remove from favourites
- Are you sure you want to remove this channel from favourites?
- Cannot add channel to favourites because list is full.
- This channel is already in the favourites list.
- Successfully removed from favourites.
- Successfully added to favourites.
- Searched all available channels:
- Cannot search all available channels.
- Invalid frequency for current location. Valid frequency range: 87,5 - 108,0
- Last input invalid, valid value is 0 or 5.
- RDS settings
- Channel information
- Alternative frequency
- Sound mode
- "More"
- "Power"
- Cannot launch FM Radio with a call in progress.
- Channel list is empty.
- Overwrite
- MHz
- Plug in earphones, lead acts as radio antenna.
- FM Recorder
- Your recording will be lost if SD is removed!
- Start recording...
- Your SD card is missing!
- Insufficient space on SD card!
- Internal record error!
- Internal play error!
- Please power up FM first!
- Record FM
- "Save"
- Discard
- Type file name here
- Save recorded file
- Insufficient storage! Do you want to save current recording?
- already exists
- Speaker
- Earphone
- Currently not available
- Add to preset channels
- Remove from preset channels
- Confirm remove from preset channels
- Are you sure you want to remove this preset channel?
- Cannot add channel because preset list is full.
- This channel is already in the preset channel list.
- Successfully removed from preset channels.
- Successfully added to preset channels.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-en-rIN/strings.xml b/MediaTek/FmRadio/res/values-en-rIN/strings.xml
deleted file mode 100755
index b4d31e1..0000000
--- a/MediaTek/FmRadio/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
- FM Radio
- Search
- Yes
- Speaker
- Overwrite
- Start recording...
- MHz
- Channel list is empty.
- RDS settings
- Searched out available channels:
- already exists
- Plug in earphone
- Add to Favorite
- Insufficient SD card space!
- Confirm removal from favorites
- Record FM
- Earphone
- Sound mode
- This channel is already in favorite list.
- Currently not available
- Successfully removed from favorites.
- Successfully added to favorites.
- Channel information
- Cannot add the channel to favorite list because it is full.
- Save
- Search
- Alternative frequency
- Search channels...
- Exit
- More
- Discard
- Edit
- Cannot search available channel.
- Insufficient storage! Do you want to save current recording?
- You can not launch FM Radio when you are in call.
- Frequency:
- An internal error occured in recorder!
- Save recording file
- OK
- Power
- Remove from favorites
- Please switch on FM first!
- FM Recorder
- Your recording will be lost due to SD removal!
- Are you sure you want to remove this channel from favorites?
- New Channel
- Cancel
- Operations
- No
- Channel list
- Invalid frequency for current location. Valid frequency scope: 87.5-108.0
- Your SD card is missing!
- Name:
- Edit Channel
- The last invalid input, valid value is 0 or 5.
- Type file name here
- You need an earphone as antenna. Please plug in your earphone.
- An internal error occured in player!
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-en-rUS/strings.xml b/MediaTek/FmRadio/res/values-en-rUS/strings.xml
deleted file mode 100755
index 043c43f..0000000
--- a/MediaTek/FmRadio/res/values-en-rUS/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- FM Radio
- Channel list
- Add to Favorite
- Search
- Exit
- Operations
- Edit
- Remove from favorites
- You need an earphone as antenna. Please plug in your earphone.
- Plug in earphone
- Yes
- No
- OK
- Cancel
- Search
- Search channels...
- Name:
- Frequency:
- Edit Channel
- New Channel
- Confirm remove from favorites
- Are you sure you want to remove this channel from favorites?
- Cannot add the channel to favorite list because it is full.
- This channel is already in favorite list.
- Successfully removed from favorites.
- Successfully added to favorites.
- Searched out available channels:
- Cannot search out available channel.
- Invalid frequency for current location. Valid frequency scope: 87.5-108.0
- The last invalid input, valid value is 0 or 5.
- RDS settings
- Channel information
- Alternative frequency
- Sound mode
- More
- Power
- You can not launch FM Radio when you are in call.
- Channel list is empty.
- Speaker
- Earphone
- Overwrite
- MHz
- Plug in your earphones to use as a radio antenna.
-
- FM Recorder
- Your recording will be lost due to SD removal!
- Start recording...
- Your SD card is missing!
- Insufficient SD card space!
- An internal error occured in recorder!
- An internal error occured in player!
- Please power up FM first!
- Record FM
- Save
- Discard
- Type file name here
- Save recording file
- Insufficient storage! Do you want to save current recording?
- already exists
- Currently not available
- Add to preset channels
- Remove from preset channels
- Confirm remove from preset channels
- Are you sure you want to remove this channel from preset channels?
- Cannot add the channel to preset channel list because it is full.
- This channel is already in preset channel list.
- Successfully removed from preset channels.
- Successfully added to preset channels.
-
diff --git a/MediaTek/FmRadio/res/values-es-rUS/strings.xml b/MediaTek/FmRadio/res/values-es-rUS/strings.xml
deleted file mode 100755
index 73abb52..0000000
--- a/MediaTek/FmRadio/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- Radio FM
- Lista de canales
- Añadir a Favoritos
- Buscar
- Salir
- Operaciones
- Editar
- Eliminar desde favoritos
- Precisa un auricular como antena. Enchufe su auricular.
- Enchufe auricular
- "Sí"
- "No"
- Aceptar
- Cancelar
- Buscar
- Buscar canales...
- Nombre:
- Frecuencia:
- Editar Canal
- Nuevo Canal
- Confirmar eliminar de favoritos
- ¿Está seguro que desea eliminar este canal de favoritos?
- No puede añadir el canal a la lista de favoritos porque está llena.
- Este canal ya está en la lista de favoritos.
- Eliminado de favoritos con éxito.
- Añadido a favoritos con éxito.
- Canales disponibles buscados:
- No pueden buscarse los canales disponibles.
- Frecuencia inválida para la ubicación actual. Ámbito de frecuencia inválida: 87,5-108,0
- La última entrada inválida, el valor válido es 0 o 5.
- Configuración RDS
- Información de canal
- Frecuencia alternativa
- Modo de sonido
- "Más"
- "potencia"
- No puede lanzar la Radio FM cuando está en una llamada.
- La lista de canales está vacía.
- Sobrescribir
- MHz
- Enchufar los auriculares para utilizar como antena de radio.
- Grabadora FM
- ¡Su grabación se perderá debido a la remoción de la SD!
- Iniciar grabación...
- ¡Falta su Tarjeta SD!
- ¡Espacio de tarjeta SD insuficiente!
- ¡Ocurrió un error interno en la grabadora!
- ¡Ocurrió un error interno en la reproductora!
- ¡Inicie FM primero!
- Grabar FM
- "Guardar"
- Descartar
- Ingresar el nombre del archivo aquí
- Guardar archivo de grabación
- ¡Almacenamiento insuficiente! ¿Desea usted guardar la grabación actual?
- ya existe
- Altavoz
- Auricular
- Actualmente no disponible
- Añadir a los canales preseleccionados
- Eliminar de canales preprogramados
- Confirmar eliminar de canales preconfigurados
- ¿Está seguro que desea eliminar este canal de canales preconfigurados?
- No puede añadir el canal a la lista de canales preconfigurados porque está llena.
- Este canal ya está en la lista de favoritos preconfigurados.
- Eliminado de canales preconfigurados con éxito.
- Añadido a canales preconfigurados con éxito.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-es/strings.xml b/MediaTek/FmRadio/res/values-es/strings.xml
deleted file mode 100755
index 1722396..0000000
--- a/MediaTek/FmRadio/res/values-es/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- Transmisión FM
- Lista de canales
- Agregar a favoritos
- Búsqueda
- Salir
- Operaciones
- Editar
- Quitar de favoritos
- Necesita unos auriculares como antena. Enchufe los auriculares.
- Enchufar el auricular
- Si
- No
- Aceptar
- Cancelar
- Buscar
- Buscar canales...
- Nombre:
- Frecuencia:
- Canal editar
- Canal nuevo
- Confirmar eliminación de canal
- ¿Está seguro de que desea eliminar este canal?
- No se puede agregar el canal a la lista de favoritos porque está llena.
- Este canal ya está en la lista de favoritos.
- Se quitó de los favoritos correctamente.
- Se agregó a los favoritos correctamente.
- Canales disponibles encontrados:
- No se puede encontrar el canal disponible.
- Configurar RDS
- Información del canal
- Frecuencia alternativa
- Más aplicaciones
- potencia
- Modo de sonido
- "Sobrescribir"
- MHz
- Enchufe los auriculares para utilizarlos como antena de radio.
-
- Grabadora de FM
- ¡La grabación se perderá debido a la eliminación de la tarjeta SD!
- Iniciar grabación…
- La tarjeta SD no está presente!
- ¡Espacio en tarjeta SD insuficiente!
- ¡Error interno en la grabadora!
- ¡Error interno en el reproductor!
- ¡Active primero FM!
- Grabar FM
- Guardar
- Descartar
- Escribir aquí el nombre de archivo
- Guardar archivo de grabación
- ¡Almacenamiento insuficiente! ¿Desea guardar la grabación actual?
- Ya existe
- Frecuencia no válida para la ubicación actual. Intervalo válido de frecuencias: 87,5-108,0.
- La última entrada no es válida, un valor válido es 0 o 5.
- No puede ejecutar la radio FM durante una llamada.
- La lista de canales está vacía.
- "Altavoz"
- Auriculares
- Actualmente no disponible
- Agregar a canales predefinidos
- Quitar desde canales predefinidos
- Confirmar la eliminación desde canales predefinidos
- ¿Está seguro de que desea quitar este canal desde los canales predefinidos?
- No se puede agregar el canal a la lista de canales predefinidos porque está llena.
- Este canal ya está en la lista de canales predefinidos.
- La eliminación desde los canales predefinidos se realizó correctamente.
- La adición a los canales predefinidos se realizó correctamente.
-
diff --git a/MediaTek/FmRadio/res/values-et-rEE/strings.xml b/MediaTek/FmRadio/res/values-et-rEE/strings.xml
deleted file mode 100755
index db8035e..0000000
--- a/MediaTek/FmRadio/res/values-et-rEE/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM raadio
- Otsi
- Jah
- Kõlar
- Kirjuta üle
- Alusta salvestamist...
- MHz
- Kanalite loend on tühi.
- RDS seaded
- Otsiti välja saadaolevad kanalid:
- on juba olemas
- Ühenda kõrvaklapid
- Lisa Lemmikutesse
- SD kaardil pole piisavalt ruumi!
- Kinnita lemmikutest eemaldamine
- Salvesta FM
- Kõrvaklapid
- Helirežiim
- See kanal on juba lemmikute loendis.
- Ei ole praegu saadaval
- Lemmikutest eemaldamine õnnestus.
- Lemmikutesse lisamine õnnestus.
- Kanali teave
- Ei saa lisada kanalit lemmikute loendisse, kuna see on täis.
- Salvesta
- Otsi
- Alternatiivne sagedus
- Otsi kanaleid...
- Välju
- Veel
- Likvideeri
- Redigeeri
- Ei saa saadaolevat kanalit välja otsida.
- Pole piisavalt mälu! Kas soovid praeguse salvestuse salvestada?
- Sa ei saa käivitada FM raadiot helistamise ajal.
- Sagedus:
- Salvestil ilmnes sisetõrge!
- Salvesta salvestusfail
- OK
- Võimsus
- Eemalda lemmikutest
- Lülita kõigepealt FM sisse!
- Ühendage kõrvaklapid, et kasutada neid raadioantennina.
- FM salvesti
- Sinu salvestus läheb SD eemaldamise tõttu kaotsi!
- Kas soovid kindlasti selle kanali lemmikutest eemaldada?
- Uus kanal
- Loobu
- Toimingud
- Ei
- Kanalite loend
- Vigane sagedus praeguse asukoha jaoks. Kehtiv sagedusulatus: 87,5-108,0
- SD kaart puudub!
- Nimi:
- Redigeeri kanalit
- Viimane vigane sisestus, õige väärtus on 0 või 5.
- Sisesta faili nimi siin
- Sa vajad kõrvaklappe antenniks. Ühenda oma kõrvaklapid.
- Pleieril ilmnes sisetõrge!
- Lisa eelseatud kanalitesse
- Eemalda eelseatud kanalitest
- Kinnita eelseatud kanalitest eemaldamine
- Kas soovid kindlasti selle kanali eelseatud kanalitest eemaldada?
- Ei saa lisada kanalit eelseatud kanalite loendisse, kuna see on täis.
- See kanal on juba eelseatud kanalite loendis.
- Eelseatud kanalitest eemaldamine õnnestus.
- Eelseatud kanalitesse lisamine õnnestus.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-fa/strings.xml b/MediaTek/FmRadio/res/values-fa/strings.xml
deleted file mode 100755
index 868031a..0000000
--- a/MediaTek/FmRadio/res/values-fa/strings.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
- راديو FM
- فهرست کانال
- افزودن به علاقمندی
- جستجو
- خروج
- عمليات
- ويرايش
- حذف از موارد موردعلاقه
- شما به هدفون در نقش آنتن نیاز دارید. لطفا گوشی خود را وصل کنید.
- هدفون را وارد کنيد
- بله
- خير
- تاييد
- لغو
- اسکن
- اسکن کانال ها...
- نام:
- تکرار:
- ويرايش کانال
- کانال جديد
- تاييد حذف کانال
- آيا از حذف اين کانال مطمئن هستيد؟
- افزودن کانال به فهرست علاقمندی ممکن نيست زيرا فهرست پر است.
- اين کانال هم اکنون در فهرست علاقمندی موجود است.
- از موارد موردعلاقه حذف شد
- به موارد موردعلاقه اضافه شد
- کانالهای موجود پيدا شده:
- کانالی يافت نشد.
- تنظيمات RDS
- اطلاعات کانال
- فرکانس جايگزين
- برنامههای کاربردی بیشتر
- توان
- حالت صدا
- مگاهرتز
- گوشی ها را وصل کنید تا از آن به عنوان آنتن رادیو استفاده شود.
-
- "رونویسی"
- ضبط FM
- به دلیل خارج شدن SD، مورد ضبط شده شما از بین خواهد رفت!
- شروع ضبط…
- کارت SD شما وجود ندارد!
- کارت SD شما وجود ندارد!
- فضای کارت SD کافی نیست!
- یک خطای داخلی در ضبط کننده رخ داد!
- لطفا ابتدا FM را روشن کنید!
- ضبط FM
- ذخيره
- صرفنظر
- نام فایل را در اینجا تایپ کنید
- ذخیره فایل ضبط
- حافظه ناکافی! مایلید مورد ضبط شده فعلی را ذخیره کنید؟
- تکراری
- فرکانس مکان فعلی نامعتبر است. محدوده فرکانس معتبر: 87,5 تا 108,0.
- آخرین ورودی نامعتبر، ارزش معتبر 0 یا 5 است.
- زمانی که در حال مکالمه هستید نمی توانید رادیو FM را راه اندازی کنید.
- لیست کانال خالی است.
- "بلندگو"
- هدست
- فعلا در دسترس نیست
- افزودن به کانال های از پیش تنظیم شده
- حذف از کانال های از پیش تنظیم شده
- حذف از کانال های از پیش تنظیم شده را تایید کنید
- آیا از حذف این کانال از کانال های از پیش تنظیم شده مطمئن هستید؟
- افزودن این کانال به فهرست کانال های از پیش تنظیم شده امکان پذیر نیست زیرا این فهرست پر است.
- این کانال در فهرست کانال های از پیش تنظیم شده موجود است.
- با موفقیت از کانال های از پیش تنظیم شده حذف شد.
- با موفقیت به کانال های از پیش تنظیم شده اضافه شد.
-
-
diff --git a/MediaTek/FmRadio/res/values-fi/strings.xml b/MediaTek/FmRadio/res/values-fi/strings.xml
deleted file mode 100755
index 16d5977..0000000
--- a/MediaTek/FmRadio/res/values-fi/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM-radio
- Kanavaluettelo
- Lisää suosikkeihin
- Etsi
- Lopeta
- Toiminnot
- Muokkaa
- Poista suosikeista
- Tarvitset kuulokkeet antenniksi. Liitä kuulokkeet.
- Liitä kuuloke
- "Kyllä"
- "Ei"
- OK
- Peru
- Etsi
- Hae kanavia...
- Nimi:
- Taajuus:
- Muokkaa kanavaa
- Uusi kanava
- Vahvista poistaminen suosikeista
- Haluatko varmasti poistaa tämän kanavan suosikeista?
- Kanavaa ei voi lisätä suosikkilistaan, koska se on täynnä.
- Tämä kanava on jo suosikkilistallasi.
- Poistaminen suosikeista onnistui.
- Suosikkeihin lisääminen onnistui.
- Haetut käytettävissä olevat kanavat:
- Ei voi hakea käytettävissä olevia kanavia.
- Väärä taajuus nykyiselle sijainnille. Kelvollinen taajuusalue: 87,5-108,0
- Viimeinen virheellinen syöte, kelvollinen arvo on 0 tai 5.
- RDS-asetukset
- Kanavatiedot
- Vaihtoehtoinen taajuus
- Äänitila
- "Lisää"
- "potenssi"
- Et voi käynnistää FM-radiota kesken puhelun.
- Kanavaluettelo on tyhjä.
- Korvaa
- MHz
- Liitä korvanapit radioantennina käytettäväksi.
- FM-tallennin
- Tallennuksesi menetetään, koska SD-kortti irrotettiin!
- Käynnistä tallennus...
- SD-kortti puuttuu!
- SD-kortin tila ei riitä!
- Tallentimessa ilmeni sisäinen virhe!
- Soittimessa ilmeni sisäinen virhe!
- Käynnistä ensin FM!
- Tallenna FM
- "Tallenna"
- Hylkää
- Näppäile tiedostonimi tässä
- Tallenna tallennetiedosto
- Tallennustila ei riitä! Haluatko tallentaa nykyisen tallenteen?
- on jo olemassa
- Kaiutin
- Kuulokkeet
- Ei tällä hetkellä käytettävissä
- Lisää esiasetettuihin kanaviin
- Poista esiasetetuista kanavista
- Vahvista poistaminen esiasetetuista kanavista
- Haluatko varmasti poistaa tämän kanavan esiasetetuista kanavista?
- Kanavaa ei voi lisätä esiasetettujen kanavien luetteloon, koska se on täynnä.
- Tämä kanava on jo esiasetettujen kanavien luettelossa.
- Poistaminen esiasetetuista kanavista onnistui.
- Lisääminen esiasetettuihin kanaviin onnistui.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-fr-rCA/strings.xml b/MediaTek/FmRadio/res/values-fr-rCA/strings.xml
deleted file mode 100755
index d5fe4e3..0000000
--- a/MediaTek/FmRadio/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
- Radio FM
- Recherche
- Oui
- Haut-parleur
- Écraser
- Démarrer l\'enregistrement...
- MHz
- La liste des stations est vide.
- Paramètres RDS
- Stations disponibles recherchées :
- existe (ent) déjà
- Brancher l\'écouteur
- Ajouter aux favoris
- Espace insuffisant pour la carte SD!
- Confirmer la suppression des favoris
- Enregistrement FM
- Écouteur
- Mode son
- Cette station est déjà dans la liste des favoris.
- Actuellement non disponible
- Retiré avec succès des favoris.
- Ajouté avec succès aux favoris.
- Informations sur la station
- La station ne peut être ajoutée à la liste des favoris car celle-ci est pleine.
- Sauvegarder
- Rechercher
- Fréquence alternative
- Recherche de stations...
- Quitter
- Plus
- Supprimer
- Modifier
- Impossible de rechercher la station disponible.
- Espace de stockage insuffisant! Sauvegarder l\'enregistrement en cours?
- Impossible de démarrer la radio FM en cours d\'appel
- Fréquence :
- Une erreur interne s\'est produite dans l\'enregistreur!
- Sauvegarde du fichier d\'enregistrement
- OK
- Alimentation
- Suppression des favoris
- Veuillez allumer le FM d\'abord!
- Enregistreur FM
- Votre enregistrement sera perdu en raison de l\'enlèvement SD!
- Supprimer cette station des favoris?
- Nouvelle station
- Annuler
- Fonctionnement
- Non
- Liste des stations
- Fréquence non valide pour l\'emplacement actuel. Gamme de fréquences valides: 87.5-108.0
- Votre carte SD est introuvable!
- Nom :
- Modifier la station
- Dernière entrée non valide; la valeur valide est 0 ou 5.
- Tapez le nom de fichier ici
- Un écouteur est requis en guise d\'antenne. Veuillez brancher votre écouteur.
- Une erreur interne s\'est produite dans le lecteur!
-
diff --git a/MediaTek/FmRadio/res/values-fr/strings.xml b/MediaTek/FmRadio/res/values-fr/strings.xml
deleted file mode 100755
index 77ff4ec..0000000
--- a/MediaTek/FmRadio/res/values-fr/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- Émission FM
- Liste des chaînes
- Ajouter aux favoris
- Recherche
- Sortie
- Opérations
- Modifier
- Retirer des favoris
- "Vous avez besoin d'un casque comme antenne. Veuillez brancher votre casque d'écoute."
- Branchez l\'écouteur
- Oui
- Non
- OK
- Annuler
- Rechercher
- Balayer les chaînes…
- Nom:
- Fréquence:
- Modifier la chaîne
- Nouvelle chaîne
- Confirmer la suppression de station
- Etes-vous sûr de vouloir supprimer cette station?
- Impossible d\'ajouter la station à la liste des favoris, parce qu\'elle est pleine.
- Cette station est déjà dans la liste des favoris.
- Retrait des favoris réussi
- Ajout au favoris réussi
- Canaux disponibles trouvés :
- Impossible de chercher les canaux disponibles.
- Paramètres RDS
- Informations sur le canal
- Fréquence alternative
- Autres applications
- puissance
- Mode audio
- MHz
- Branchez vos oreillettes pour les utiliser comme antenne radio.
-
- "Remplacer"
- Enregistreur FM
- Votre enregistrement sera perdu suite au retrait de la carte SD!
- "Démarrer l'enregistrement…"
- Carte SD manquante!
- Espace insuffisant sur carte SD!
- "Une erreur interne est survenue dans l'enregistreur!"
- Une erreur interne est survenue dans le lecteur!
- "Veuillez d'abord allumer FM!"
- Enregistrer FM
- Sauvegarder
- Rejeter
- Saisissez le nom du fichier ici
- "Sauvegarder le fichier d'enregistrement"
- "Stockage insuffisant! Sauvegarder l'enregistrement en cours?"
- Existe déjà
- Fréquence invalide pour cet emplacement. Plage de fréquence valide: 87,5-108,0.
- Dernière saisie invalide, valeur valide de 0 ou 5.
- "Impossible d'activer la radio FM lorsqu'un appel est en cours."
- La liste des chaînes est vide.
- "Haut-parleur"
- "Casque d'écoute"
- Actuellement indisponible
- Ajouter aux chaînes préréglées
- Retirer des chaînes préréglées
- Confirmer le retrait des chaînes préréglées
- Confirmer le retrait de cette chaîne des chaînes préréglées?
- "Impossible d'ajouter la chaîne aux chaînes préréglées car liste pleine."
- Cette chaîne figure déjà dans la liste.
- Retrait réussi des chaînes préréglées.
- Ajout réussi aux chaînes préréglées.
-
diff --git a/MediaTek/FmRadio/res/values-hi/strings.xml b/MediaTek/FmRadio/res/values-hi/strings.xml
deleted file mode 100755
index 277fe06..0000000
--- a/MediaTek/FmRadio/res/values-hi/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- एफएम रेडियो
- चैनल सूची
- पसंदीदा में जोड़ें
- खोजें
- बाहर
- कार्य
- संपादन
- पसंदीदा से हटाएं
- आपको एंटिना के रूप में एक ईयरफ़ोन की जरूरत है। कृपया अपने ईयरफ़ोन का प्लग लगा लें।
- ईयरफोन का प्लग लगाएं
- हाँ
- नहीं
- ठीक
- रद्द
- स्कैन करें
- चैनल स्कैन करें...
- नाम
- आवृत्ति:
- चैनल संपादित करें
- नया चैनल
- डिलीट चैनल की पुष्टि करें
- क्या आप निश्चित हैं कि आप यह चैनल मिटाना चाहते हैं?
- चैनल को पसंदीदा सूची में नहीं जोड़ सकते क्योंकि यह भरी हुई है।
- यह चैनल पहले से पसंदीदा सूची में है।
- पसंदीदा से सफलतापूर्वक हटा
- पसंदीदा में सफलतापूर्वक जुड़ा
- उपलब्ध चैनल को खोजा गया:
- उपलब्ध चैनल को सर्च नहीं कर सकता।
- RDS सेटिंग
- चैनल सूचना
- वैकल्पिक फ्रीक्वेंसी
- अधिक अनुप्रयोग
- घात
- ध्वनि मोड
- "ओवरराइट करें"
- MHz
- इयरफ़ोन को रेडियो एंटीना के रूप में उपयोग करने के लिए प्लग-इन करें।
-
- FM रिकॉर्डर
- आपकी रिकॉर्डिंग SD हटाने के कारण गुम हो जाएगी!
- रिकॉर्डिंग आरंभ करें…
- आपका SD कार्ड मौजूद नहीं है!
- अपर्याप्त SD कार्ड स्थान!
- रिकॉर्डर में एक आंतरिक त्रुटि घटित हुई!
- प्लेयर में एक आंतरिक त्रुटि घटित हुई!
- कृपया पहले FM को पावर अप करें!
- FM रिकॉर्ड करें
- सहेजें
- छोड़ें
- फ़ाइल का नाम यहां टाइप करें
- रिकॉर्डिंग फ़ाइल सहेजें
- अपर्याप्त भंडारण! क्या आप वर्तमान रिकॉर्डिंग सहेजना चाहते हैं?
- पहले से ही मौजूद हैं
- वर्तमान स्थान के लिए अमान्य फ्रीक्वेंसी। मान्य फ्रीक्वेंसी विस्तार: 87.5-108.0
- अंतिम अमान्य इनपुट, मान्य मान 0 या 5 है।
- आप कॉल के दौरान FM रेडियो चालू नहीं कर सकते।
- चैनल सूची खाली है।
- "स्पीकर"
- हेडसेट
- वर्तमान में उपलब्ध नहीं है
- प्रीसेट चैनल में जोड़ें
- प्रीसेट चैनल से हटाएँ
- प्रीसेट चैनल से हटाने की पुष्टि करें
- क्या आप वाकई इस चैनल को प्रीसेट चैनल से हटाना चाहते हैं?
- चैनल को प्रीसेट चैनल सूची में नहीं जोड़ सकते क्योंकि यह भरी है।
- यह चैनल पहले से ही प्रीसेट चैनल सूची में मौजूद है।
- प्रीसेट चैनल से सफलतापूर्वक हटा।
- प्रीसेट चैनल में सफलतापूर्वक जुड़ा।
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-hr/strings.xml b/MediaTek/FmRadio/res/values-hr/strings.xml
deleted file mode 100755
index 5d65109..0000000
--- a/MediaTek/FmRadio/res/values-hr/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM radio
- Popis kanala
- Dodaj u favorite
- Pretraži
- Izlaz
- Operacije
- Uredi
- Ukloni iz favorita
- Potrebna je slušalica kao antena. Priključite slušalicu.
- Priključite slušalicu
- "Da"
- "Ne"
- U redu
- Otkaži
- Pretraži
- Pretraži kanale...
- Naziv:
- Frekvencija:
- Uredi kanal
- Novi kanal
- Potvrdi uklanjanje iz favorita
- Jeste li sigurni da želite ukloniti ovaj kanal iz favorita?
- Ne može se dodati kanal na popis favorita jer je on pun.
- Ovaj kanal već je na popisu favorita.
- Uspješno uklonjen iz favorita.
- Uspješno dodan u favorite.
- Pronađeni su dostupni kanali:
- Ne može se pronaći dostupni kanal.
- Neispravna frekvencija za trenutnu lokaciju. Ispravni raspon frekvencije: 87,5-108,0
- Posljednji neispravni unos, ispravna vrijednost je od 0 do 5.
- Postavke RDS-a
- Podaci o kanalu
- Alternativna frekvencija
- Način zvuka
- "Više"
- "snaga"
- Ne možete pokrenuti FM Radio kada ste u pozivu.
- Popis kanala je prazan.
- Presnimi
- MHz
- Priključite slušalice radi korištenja kao radijske antene.
- FM snimač
- Vaša snimka će biti izgubljena zbog uklanjanja SD kartice!
- Početak snimanja...
- Nema vaše SD kartice!
- Na SD kartici nema dovoljno mjesta!
- Na snimaču se pojavila unutarnja greška!
- U programu za reprodukciju se pojavila unutarnja greška!
- Prvo pokrenite FM!
- Snimaj FM
- "Spremi"
- Odbaci
- Ovdje unesite naziv datoteke
- Spremi datoteku sa snimkom
- Nedovoljno prostora za pohranu! Želite li spremiti trenutnu snimku?
- već postoji
- Zvučnik
- Slušalica
- Trenutno nije dostupno
- Dodaj u unaprijed zadane kanale
- Ukloni iz unaprijed zadanih kanala
- Potvrdite uklanjanje iz unaprijed zadanih kanala
- Jeste li sigurni da želite ukloniti ovaj kanal iz unaprijed zadanih kanala?
- Ne može se dodati kanal na popis unaprijed zadanih kanala jer je on pun.
- Ovaj kanal već je na popisu unaprijed zadanih kanala.
- Uspješno uklonjen iz unaprijed zadanih kanala.
- Uspješno dodan u unaprijed zadane kanale.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-hu/strings.xml b/MediaTek/FmRadio/res/values-hu/strings.xml
deleted file mode 100755
index 06f6794..0000000
--- a/MediaTek/FmRadio/res/values-hu/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- FM-rádió
- Csatornalista
- Hozzáadás a kedvencekhez
- Keresés
- Kilépés
- Műveletek
- Szerkesztés
- Eltávolítás a kedvencek közül
- Fülhallgató szükséges, ami antennaként működik. Csatlakoztassa a fülhallgatót.
- Csatlakoztassa a fülhallgatót
- Igen
- Nem
- OK
- Mégse
- Keresés
- Csatornák keresése…
- Név:
- Gyakoriság:
- Csatorna szerkesztése
- Új csatorna
- Kedvencek közüli eltávolítás megerősítése
- Biztosan el akarja távolítani ezt a csatornát a kedvencek közül?
- A csatorna nem adható a Kedvencekhez, mert megtelt a lista.
- Ez a csatorna már a Kedvencek között van.
- Sikeresen eltávolítva a kedvencek közül.
- Sikeresen hozzáadva a kedvencekhez.
- Talált csatornák az elérhetők közül:
- Nem találhatók az elérhető csatornák közül.
- Érvénytelen frekvencia az aktuális helyen. Érvényes frekvenciatartomány: 87,5-108,0.
- RDS-beállítások
- Csatornainformáció
- Alternatív frekvencia
- Hangzásmód
- További alkalmazások
- hatvány
- "Felülírás"
- MHz
- Dugja be a fülhallgatót, hogy rádióantennaként használhassa.
-
- FM-rögzítő
- A felvétel el fog veszni az SD-kártya eltávolítása miatt!
- Rögzítés indítása…
- Az SD-kártya hiányzik!
- Nincs elegendő hely az SD-kártyán!
- Belső hiba történt a rögzítőn!
- Belső hiba történt a lejátszón!
- Előbb kapcsolja be az FM-rádiót!
- FM-műsor rögzítése
- Mentés
- Elvetés
- Ide gépelje a fájlnevet
- Rögzített fájl mentése
- Nincs elegendő tárhely! Menteni akarja az aktuális felvételt?
- már létezik
- Érvénytelen bevitel. Érvényes: 0 v. 5.
- Az FM-rádió hívás közben nem indítható el.
- A csatornalista üres.
- "Hangszóró"
- Fejhallgató
- Jelenleg nem érhető el
- Hozzáadás a beállított csatornákhoz
- Törlés a beállított csatornák közül
- Beállított csatornák közüli eltávolítás megerősítése
- Biztosan el akarja távolítani ezt a csatornát a beállított csatornák közül?
- A csatorna nem adható a beállított csatornákhoz, mert megtelt a lista.
- Ez a csatorna már a beállított csatornák között van.
- Sikeresen eltávolítva a beállított csatornák közül.
- Sikeresen hozzáadva a beállított csatornákhoz.
-
diff --git a/MediaTek/FmRadio/res/values-hy-rAM/strings.xml b/MediaTek/FmRadio/res/values-hy-rAM/strings.xml
deleted file mode 100755
index 6445587..0000000
--- a/MediaTek/FmRadio/res/values-hy-rAM/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM ռադիո
- Որոնել
- Այո
- Բարձրախոս
- Վրագրել
- Սկսել ձայնագրում...
- ՄՀց
- Կապուղիների ցանկը դատարկ է:
- RDS կարգավորումներ
- Որոնված մատչելի կապուղիներ`
- արդեն գոյություն ունի
- Միացնել ականջակալ
- Ավելացնել Ընտրյալներին
- SD քարտում չկա բավարար տարածք:
- Հաստատել ընտրյալներից հեռացումը
- Ձայնագրել FM
- Ականջակալ
- Ձայնի ռեժիմ
- Այս կապուղին արդեն ընտրյալների ցանկում է:
- Այժմ մատչելի չէ
- Հաջողությամբ հեռացվեց ընտրյալներից:
- Հաջողությամբ ավելացվեց ընտրյալներին:
- Կապուղու տեղեկություններ
- Հնարավոր չէ ավելացնել կապուղին ընտրյալների ցանկին, քանի որ այն լիքն է:
- Պահել
- Որոնել
- Այլընտրական հաճախականություն
- Որոնել կապուղիներ...
- Ելնել
- Ավելին
- Ջնջել
- Խմբագրել
- Հնարավոր չէ որոնել մատչելի կապուղի:
- Ոչ բավարար պահոց: Ցանկանու՞մ եք պահել այս ձայնագրությունը:
- Չեք կարող գործարկել FM ռադիոն, քանի դեռ զանգն ընթացքի մեջ է:
- Հաճախականություն`
- Տեղի ունեցավ ձայնագրիչի ներքին սխալ:
- Պահել ձայնագրության ֆայլը
- Լավ
- Հոսանք
- Հանել ընտրյալներից
- Նախ միացրեք FM-ը:
- FM ձայնագրիչ
- Ձեր ձայնագրությունը կկորչի SD-ն հանելու պատճառով:
- Համոզվա՞ծ եք, որ ցանկանում եք հեռացնել այս կապուղին ընտրյալներից:
- Նոր կապուղի
- Չեղարկել
- Գործողություններ
- Ոչ
- Կապուղիների ցանկ
- Ներկա տեղադրության համար անհասանելի հաճախականություն: Հասանելի հաճախականության տիրույթ` 87.5-108.0
- Ձեր SD քարտն առկա չէ:
- Անվանում`
- Խմբագրել կապուղին
- Վերջին անվավեր ներմուծումը, վավեր արժեք` 0-ից 5:
- Մուտքագրել ֆայլի անվանումն այստեղ
- Անհրաժեշտ է ականջակալ` որպես ալեհավաք: Միացրեք ականջակալը:
- Տեղի ունեցավ նվագարկիչի ներքին սխալ:
- Միացրեք ականջակալները` որպես ռադիոյի ալեհավաք օգտագործելու համար:
- Հավելել նախակայված ալիքներին
- Հեռացնել նախակայված ալիքներից
- Հաստատել նախակայվածներից հեռացումը
- Դուք վստա՞հ եք, որ ցանկանում եք հեռացնել այս ալիքը նախակայված ալիքներից:
- Հնարավոր չէ հավելել ալիքը նախակայված ալիքների ցուցակին, քանի որ այն լցված է:
- Այս ալիքն արդեն գտնվում է նախակայված ալիքների ցուցակում:
- Հաջող հեռացվեց նախակայված ալիքների ցուցակից:
- Հաջող հավելվեց նախակայված ալիքների ցուցակին:
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-in/strings.xml b/MediaTek/FmRadio/res/values-in/strings.xml
deleted file mode 100755
index cb5d281..0000000
--- a/MediaTek/FmRadio/res/values-in/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- Radio FM
- Daftar saluran
- Tambahkan ke Favorit
- Cari
- Keluar
- Operasi
- Edit
- Hapus dari favorit
- Anda memerlukan earphone sebagai antena. Pasang earphone.
- Pasang earphone?
- Ya
- Tidak
- OK
- Batal
- Pindai
- Pindai saluran…
- Nama:
- Frekuensi:
- Edit Saluran
- Saluran Baru
- Konfirmasikan Penghapusan Saluran
- Anda yakin ingin menghapus saluran ini?
- Tidak dapat menambahkan saluran ke daftar favorit karena penuh.
- Saluran ini sudah ada di daftar favorit.
- Berhasil dihapus dari favorit.
- Berhasil ditambahkan ke favorit.
- Saluran tersedia yang dicari:
- Tidak dapat mencari saluran yang tersedia.
- Pengaturan RDS
- Informasi saluran
- Frekuensi alternatif
- Aplikasi Lain
- Power
- Mode Suara
- "Timpa"
- MHz
- Pasang earphone untuk digunakan sebagai antena radio.
-
- Perekam FM
- Perekaman Anda akan hilang karena penghapusan SD!
- Mulai merekam…
- Kartu SD Anda tidak ada!
- Kapasitas kartu SD tidak memadai!
- Terjadi kesalahan internal pada perekam!
- Terjadi kesalahan internal pada pemutar!
- Aktifkan FM terlebih dulu!
- Rekam FM
- Simpan
- Hapus
- Ketik nama file di sini
- Simpan file perekaman
- Kapasitas penyimpanan tidak memadai! Anda ingin menyimpan perekaman saat ini?
- Sudah ada
- Frekuensi tidak valid untuk lokasi saat ini. Rentang frekuensi yang valid: 87,5-10,0.
- Input terakhir tidak valid, nilai valid adalah 0 atau 5.
- Anda tidak dapat mengaktifkan Radio FM saat menangani panggilan.
- Daftar saluran kosong.
- "Speaker"
- Headset
- Tidak tersedia saat ini
- Tambahkan ke daftar saluran standar
- Hapus dari daftar saluran standar
- Konfirmasikan penghapusan dari daftar saluran standar
- Anda yakin ingin menghapus saluran ini dari daftar saluran standar?
- Tidak dapat menambahkan saluran ke daftar saluran standar karena sudah penuh.
- Saluran ini sudah ada dalam daftar saluran standar.
- Berhasil dihapus dari saluran standar.
- Berhasil ditambahkan ke saluran standar.
-
diff --git a/MediaTek/FmRadio/res/values-it/strings.xml b/MediaTek/FmRadio/res/values-it/strings.xml
deleted file mode 100755
index abf9952..0000000
--- a/MediaTek/FmRadio/res/values-it/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- "Radio FM"
- Elenco canali
- Aggiungi a preferiti
- Ricerca
- Exit
- Operazioni
- Modifica
- Rimuovi dai preferiti
- È necessario usare le cuffie come antenna. Collegare le cuffie.
- Collegare le cuffie
- Sì
- No
- OK
- Annulla
- Scansione
- Cerca canali...
- Nome:
- Frequenza:
- Modifica canale
- Nuovo canale
- Conferma Elimina canale
- Si è certi di volere eliminare questo canale?
- Impossibile aggiungere il canale all’elenco dei preferiti perché è pieno.
- Questo canale è già nell’elenco dei preferiti.
- Rimozione dai preferiti riuscita.
- Aggiunta ai preferiti riuscita.
- Canali disponibili ricercati:
- Impossibile ricercare i canali disponibili
- Impostazioni RDS
- Informazioni canale
- Frequenza alternativa
- Altra applicazione
- potenza
- Modalità audio
- MHz
- Collegare le cuffie da utilizzare come antenna radio.
-
- "Sostituisci"
- Registratore FM
- La registrazione andrà persa per la rimozione della scheda SD!
- Avvio registrazione…
- Scheda SD mancante!
- Spazio su scheda SD insufficiente!
- Errore interno nel registratore!
- Errore interno nel lettore!
- Prima accendere FM!
- Registra FM
- Salva
- Ignora
- Digita qui nome file
- Salva registrazione file
- Memoria insufficiente! Salvare registrazione attuale?
- Già presente
- Frequenza non valida per posizione attuale. Gamma frequenza valida: 87,5-108,0.
- Ultimo input non valido. Valore valido 0 o 5.
- Non è possibile avviare la radio FM durante una chiamata.
- L’elenco dei canali è vuoto.
- "Altoparlante"
- Cuffie
- Al momento non disponibile
- Aggiungi a canali preselezionati
- Rimuovi da canali preselezionati
- Conferma rimozione da canali preselezionati
- Rimuovere questo canale dai canali preselezionati?
- "Impossibile aggiungere il canale all'elenco dei canali preselezionati in quanto è pieno."
- "Canale già presente nell'elenco dei canali preselezionati."
- Rimozione da canali preselezionati riuscita.
- Aggiunta a canali preselezionati riuscita.
-
diff --git a/MediaTek/FmRadio/res/values-iw/strings.xml b/MediaTek/FmRadio/res/values-iw/strings.xml
deleted file mode 100755
index 5780a51..0000000
--- a/MediaTek/FmRadio/res/values-iw/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- רדיו FM
- רשימת תחנות
- הוסף למועדפים
- חיפוש
- יציאה
- פעולות
- עריכה
- הסר מהמועדפים
- אתה זקוק לאוזניות בתור אנטנה. חבר את האוזניות.
- חבר את האזניות
- כן
- לא
- אישור
- ביטול
- חיפוש
- חיפוש תחנות...
- שם:
- תדר:
- ערוך תחנה
- תחנה חדשה
- אשר הסרה מהמועדפים
- האם אתה בטוח שברצונך להסיר תחנה זו מהמועדפים?
- לא ניתן להוסיף את התחנה לרשימת המועדפים מכיוון שהיא מלאה.
- התחנה נמצאת כבר ברשימת המועדפים.
- הוסרה בהצלחה מהמועדפים.
- הוספה בהצלחה למועדפים.
- חיפש תחנות זמינות:
- לא ניתן לחפש תחנה זמינה.
- תדר לא חוקי למיקום הנוכחי. טווח התדרים החוקי: 87.5 - 108.0
- הזנה לא חוקית, ערך חוקי הוא 0 או 5.
- הגדרות RDS
- פרטי תחנה
- תדר חלופי
- מצב צליל
- עוד
- בחזקת
- "החלף"
- מגה הרץ
- הרכב את האוזניות לשימוש כאנטנת רדיו.
- מקליט FM
- ההקלטה תאבד בשל הסרת כרטיס ה-SD!
- התחל בהקלטה...
- כרטיס ה-SD חסר!
- אין מספיק מקום בכרטיס ה-SD!
- אירעה שגיאה פנימית במקליט!
- אירעה שגיאה פנימית בנגן!
- הפעל תחילה את ה-FM!
- הקלט FM
- שמור
- מחק
- הקלד שם קובץ כאן
- שמור קובץ הקלטה
- שטח אחסון לא מספיק! האם ברצונך לשמור את ההקלטה הנוכחית?
- כבר קיים
- לא ניתן להפעיל רדיו FM בעת שיחה.
- רשימת התחנות ריקה.
- "רמקול"
- אזניות
- לא זמין כעת
- הוסף לתחנות שמורות
- הסר מהתחנות השמורות
- אשר הסרה מהתחנות השמורות
- האם אתה בטוח שברצונך להסיר תחנה זו מהתחנות השמורות?
- לא ניתן להוסיף את התחנה לרשימת התחנות השמורות מכיוון שהיא מלאה.
- התחנה נמצאת כבר ברשימת התחנות השמורות.
- הוסרה בהצלחה מהתחנות השמורות.
- הוספה בהצלחה לתחנות השמורות.
-
diff --git a/MediaTek/FmRadio/res/values-ja/strings.xml b/MediaTek/FmRadio/res/values-ja/strings.xml
deleted file mode 100755
index bca98aa..0000000
--- a/MediaTek/FmRadio/res/values-ja/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FMラジオ
- 検索
- はい
- スピーカー
- 上書き
- 録音開始...
- MHz
- チャンネルリストは空です。
- RDS設定
- 利用可能なチャンネルを検索:
- すでに存在しています
- イヤホンの差し込み
- お気に入りに追加
- SDカード容量が不足しています!
- お気に入りからの削除を確認
- FMを録音
- イヤホン
- サウンドモード
- このチャンネルはすでにお気に入りリストの中にあります。
- 現在使用できません
- お気に入りから削除されました。
- お気に入りに追加されました。
- チャンネル情報
- 満杯のため、お気に入りリストにチャンネルを追加できません。
- 保存
- 検索
- 代替周波数
- チャンネルの検索...
- 終了
- 詳細
- 捨てる
- 編集
- 利用可能なチャンネルを検索できません。
- 容量が不足しています!現在の録音を保存しますか?
- 通話中にFMラジオは起動できません。
- 周波数:
- レコーダーで内部エラーが発生しました!
- 録音ファイルを保存
- OK
- 電源
- お気に入りから削除
- 最初にFMの電源を入れてください!
- FMレコーダー
- SDが取り出されたため、録音は失われます!
- お気に入りからこのチャンネルを削除してもよろしいですか?
- 新しいチャンネル
- キャンセル
- 操作
- いいえ
- チャンネルリスト
- 現在の場所では無効な周波数です。有効な周波数範囲:87.5-108.0
- SDカードがありません!
- 名前:
- チャンネルの編集
- 最後の入力は無効です。有効な値は0または5です。
- ここにファイル名を入力します
- アンテナとしてイヤホンが必要です。イヤホンを差し込んでください。
- プレイヤーで内部エラーが発生しました!
- イヤホンを差し込み、ラジオのアンテナとして使用します。
- プリセットチャンネルに追加する
- プリセットチャンネルから外す
- プリセットチャンネルからの削除を確定する
- このチャンネルをプリセットから削除しますか?
- プリセットが一杯なので、チャンネルを追加できません。
- このチャンネルは既にプリセットに登録されています。
- プリセットチャンネルから削除しました。
- プリセットチャンネルに登録しました。
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-ka-rGE/strings.xml b/MediaTek/FmRadio/res/values-ka-rGE/strings.xml
deleted file mode 100755
index 6b9e9f4..0000000
--- a/MediaTek/FmRadio/res/values-ka-rGE/strings.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
- FM რადიო
- ძებნა
- კი
- დინამიკი
- გადაწერა
- ჩაწერის დაწყება...
- მჰც
- არხების სია ცარიელია.
- RDS პარამეტრები
- ხელმისაწვდომი არხების ძებნა დასრულებულია:
- უკვე არსებობს
- ჩართეთ ყურსასმენები
- ფავორიტებში დამატება
- არასაკმარისი SD ბარათის მოცულობა!
- დაადასტურეთ წაშლა ფავორიტებიდან
- Record FM
- ყურსასმენები
- ხმის რეჟიმი
- ეს არხი უკვე ფავორიტების სიაში.
- ამჟამად არ არის ხელმისაწვდომი
- წარმატებით წაშლილია ფავორიტებიდან.
- წარმატებით დამატებულია ფავორიტებში.
- ინფორმაცია არხზე
- ახრის დამატება ფავორიტების სიაში ვერ მოხერხდა, რადგან ის სავსეა.
- დამახსოვრება
- ძებნა
- ალტერნატიული სიხშირე
- არხების ძებნა...
- გამოსვლა
- კიდევ
- გაუქმება
- რედაქტირება
- ხელმისაწვდომი არხი ვერ მოიძებნა.
- შენახვის ადგილი არასაკმარისია! გსურთ შეინახოთ მიმდინარე ჩანაწერი?
- თქვენ ვერ ჩართავთ FM რადიოს ზარის განხორციელების დროს.
- სიხშირე:
- შიდა შეცდომა ჩამწერში!
- ჩაწერილი ფაილის დამახსოვრება
- OK
- ჩართვა
- წაშლა ფავორიტებიდან
- გთხოვთ პირველ რიგში ჩართოთ FM!
- FM ჩამწერი
- თქვენი ჩანაწერი დაიკარგება SD ამოღების შემთხვევაში!
- დარწმუნებული ხართ, რომ გსურთ ამ არხის წაშლა ფავორიტებიდან?
- ახალი არხი
- გაუქმება
- ოპერაციები
- არა
- არხების სია
- არასწორი სიხშირე მიმდინარე ადგილსთვის. ძალაშია სიხშირის ფარგლებში: 87.5-108.0
- თქვენი SD ბარათი არ არის დაყენებული!
- დასახელება:
- არხის რედაქტირება
- ბოლო არასწორად შეყვანილი მნიშვნელობა, სწორი მნიშვნელობა არის 0 ან 5.
- აქრიფეთ აქ ფაილის დასახელება
- თქვენ გჭირდებათ ყურსასმენები ანტენის სახით. გთხოვთ ჩართოთ თქვენს ყურსასმენები.
- შიდა შეცდომა ფლეერში!
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-kk/strings.xml b/MediaTek/FmRadio/res/values-kk/strings.xml
deleted file mode 100755
index 1b189e5..0000000
--- a/MediaTek/FmRadio/res/values-kk/strings.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
- FM радио
- Арна тізімі
- Сүйіктілерге қосу
- Алдын ала орнатылған арналарға қосу
- Іздеу
- Шығу
- Әрекеттер
- Өңдеу
- Таңдаулылар қатарынан өшіру
- Алдын ала орнатылған арналардан жою
- Антенна ретінде құлаққап қажет. Құлаққабыңызды жалғаңыз.
- Құлаққабыңызды жалғаңыз
- Иә
- Жоқ
- OK
- Болдырмау
- Іздеу
- Арналарды іздеу...
- Атауы:
- Жиілігі:
- Арнаны өңдеу
- Жаңа арна
- Сүйіктілерден жоюды растау
- Алдын ала орнатылған арналар тізімінен жоюды растау
- Бұл арнаны сүйіктілерден жою қажет пе?
- Бұл арнаны алдын ала орнатылған арналар тізімінен жою қажет пе?
- Арнаны сүйіктілер тізіміне қосу мүмкін емес, тізім толып кетті.
- Арнаны алдын ала орнатылған арналар тізіміне қосу мүмкін емес, тізім толып кетті.
- Бұл арна бұрыннан сүйіктілер тізімінде.
- Бұл арна бұрыннан алдын ала орнатылған арналар тізімінде.
- Сүйіктілер тізімінен сәтті жойылды.
- Алдын ала орнатылған арналар тізімінен сәтті жойылды.
- Сүйіктілер тізіміне сәтті қосылды.
- Алдын ала орнатылған арналар тізіміне сәтті қосылды.
- Табылған қолжетімді арналар:
- Қолжетімді арнаны табу мүмкін емес.
- Ағымдағы орын үшін жарамсыз жиіліг. Жарамды жиілік ауқымы: 87,5-108,0
- Соңғы жарамсыз енгізілім, жарамды мән 0 немесе 5.
- RDS параметрлері
- Арна ақпараты
- Балама жиілік
- Дыбыс режимі
- Қосымша параметрлер
- Қуат
- Қоңырау кезінде FM радионы қосу мүмкін емес.
- Арналар тізімі бос.
- Қайта жазу
- МГц
- Құлаққабыңызды жалғаңыз
- FM жазу құрылғысы
- Жазба SD картасының шығарылуына байланысты жоғалады!
- Жазуды іске қосу...
- SD картасы жоқ!
- SD картасында бос орын жоқ!
- Жазу құралында ішкі қате орын алды!
- Ойнатқышта ішкі қате орын алды!
- Алдымен FM қабылдағышын қосыңыз!
- FM жазу
- Сақтау
- Жою
- Файл атауын мұнда енгізіңіз
- Жазылған файлды сақтау
- Бос орын жеткіліксіз! Ағымдағы жазуды сақтау қажет пе?
- бұрыннан бар
- Динамик
- Құлаққап
- Ағымдағы уақытта қолжетімсіз
-
diff --git a/MediaTek/FmRadio/res/values-km-rKH/strings.xml b/MediaTek/FmRadio/res/values-km-rKH/strings.xml
deleted file mode 100755
index af446c1..0000000
--- a/MediaTek/FmRadio/res/values-km-rKH/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- វិទ្យុ FM
- បញ្ជីប៉ុស្ត៍វិទ្យុ
- បន្ថែមទៅក្នុងបញ្ជីចំណូលចិត្ត
- រាវរក
- ចាកចេញ
- ប្រតិបត្តិការ
- កែសម្រួល
- លុបចេញពីបញ្ជីចំណូលចិត្ត
- អ្នកត្រូវការកាសស្តាប់ត្រចៀកធ្វើជាអង់តែន ។ សូមស៊កបញ្ចូលកាសស្តាប់ត្រចៀករបស់អ្នក ។
- ស៊កឧបករណ៍ស្តាប់ត្រចៀកចូល
- បាទ
- ទេ
- យល់ព្រម
- លើកលែង
- រាវរក
- រាវរកប៉ុស្តិ៍ ...
- ឈ្មោះ ៖
- ហ្វេ្រកង់ ៖
- កែសម្រួលប៉ុស្តិ៍
- ប៉ុស្តិ៍ថ្មី
- បញ្ជាក់ការលុបចោលពីបញ្ជីចំណូលចិត្ត
- តើប្រាកដទេថាអ្នកចង់លុបប៉ុស្តិ៍នេះចោលពីបញ្ជីចំណូលចិត្ត?
- មិនអាចបន្ថែមប៉ុស្តិ៍ទៅក្នុងបញ្ជីចំណូលចិត្ត ដោយសាវាពេញហើយ ។
- ប៉ុស្តិ៍នេះស្ថិតនៅក្នុងបញ្ជីចំណូលចិត្តរួចហើយ ។
- បានលុបចោលពីបញ្ជីចំណូលចិត្តដោយជោគជ័យ ។
- បានបន្ថែមទៅក្នុងបញ្ជីចំណូលចិត្តដោយជោគជ័យ ។
- រាវរកប៉ុស្តិ៍ផ្សេងៗដែលមាន ៖
- មិនអាចរាវរកប៉ុស្តិ៍ដែលមានបានឡើយ ។
- ហ្វ្រេកង់គ្មានសុពលភាពសម្រាប់ទីតាំងបច្ចុប្បន្ន ។ វិសាលភាពនៃហ្វ្រេកង់ដែលមានសុពលភាព ៖ 87.5-108.0
- បញ្ចូលតម្លៃដែលគ្មានសុពលភាព ។ តម្លៃដែលមានសុពលភាពគឺ 0 ឬ 5 ។
- ការសិត RDS
- ព័ត៌មានប៉ុស្តិ៍
- ហ្វ្រេកង់ផ្សេងទៀត
- ម៉ូដសម្លេង
- បន្ថែមទៀត
- ស្វ័យគុណ
- សរសេរពីលើ
- MHz
- ដោតកាសស្ដាប់អ្នកដើម្បីប្រើជាអង់តែនវិទ្យុ។
- ឧបករណ៍ថតសម្លេង FM
- ការថតសម្លេងរបស់អ្នកនឹងត្រូវបាត់បង់ ដោយសារអ្នកបានដក SD ចេញ!
- ចាប់ផ្តើមការថតសម្លេង ...
- កាត SD របស់អ្នកបានបាត់!
- កន្លែងនៅក្នុងកាត SD មិនគ្រប់គ្រាន់!
- កំហុសខាងក្នុងបានកើតឡើង នៅក្នុងឧបករណ៍ថតសម្លេង!
- កំហុសខាងក្នុងបានកើតឡើង នៅក្នុងឧបករណ៍ចាក់សម្លេង!
- សូមបើក FM ជាមុនសិន!
- ថតសម្លេង FM
- រក្សាទុក
- បោះចោល
- វាយឈ្មោះឯកសារនៅទីនេះ
- រក្សាទុកឯកសារដែលបានថត
- កន្លែងផ្ទុកមិនគ្រប់គ្រាន់! តើអ្នកចង់រក្សាទុកនូវសម្លេងដែលកំពុងថតមែនទេ?
- មានរួចហើយ
- អ្នកមិនអាចបើកវិទ្យុ FM បានទេពេលអ្នកកំពុងហៅ ។
- បញ្ជីប៉ុស្តិ៍ទទេ ។
- ឧបល័រ
- កាសស្តាប់ត្រចៀក
- បច្ចុប្បន្នមិនអាចរកបានទេ
- បន្ថែមទៅក្នុងការសិតប៉ុស្តិ៍វិទ្យុឡើងវិញ
- លុបចេញពីក្នុងការសិតប៉ុស្តិ៍វិទ្យុឡើងវិញ
- បញ្ជាក់ការលុបចោលពីក្នុងការសិតប៉ុស្តិ៍ឡើងវិញ
- តើប្រាកដទេថាអ្នកចង់លុបប៉ុស្តិ៍នេះចេញពីក្នុងការសិតប៉ុស្តិ៍ឡើងវិញ?
- មិនអាចបន្ថែមប៉ុស្តិ៍ទៅក្នុងការសិតប៉ុស្តិ៍លើងវិញ ដោយសាវាពេញហើយ ។
- ប៉ុស្តិ៍នេះស្ថិតនៅក្នុងបញ្ជីសិតប៉ុស្តិ៍ឡើងវិញរួចហើយ ។
- បានលុបចោលពីបញ្ជីសិតប៉ុស្តិ៍ឡើងវិញដោយជ០គជ័យ ។
- បានបន្ថែមទៅក្នុងបញ្ជីសិតប៉ុស្តិ៍ឡើងវិញដោយជោគជ័យ ។
-
diff --git a/MediaTek/FmRadio/res/values-ko/strings.xml b/MediaTek/FmRadio/res/values-ko/strings.xml
deleted file mode 100755
index 839ae90..0000000
--- a/MediaTek/FmRadio/res/values-ko/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM 라디오
- 채널 목록
- 즐겨찾기에 추가
- 검색
- 종료
- 작업
- 편집
- 즐겨찾기에서 제거
- 안테나로 이어폰이 필요합니다. 이어폰을 연결하십시오.
- 이어폰에 연결
- 예
- 아니요
- 확인
- 취소
- 검색
- 채널을 검색하는 중...
- 이름:
- 주파수:
- 주파수 편집
- 새 주파수
- 즐겨찾기에서 제거 확인
- 이 채널을 즐겨찾기에서 제거하시겠습니까?
- 즐겨찾기 목록이 가득 차서 채널을 추가할 수 없습니다.
- 이 채널은 이미 즐겨찾기 목록에 있습니다.
- 즐겨찾기에서 성공적으로 제거되었습니다.
- 즐겨찾기에 성공적으로 추가되었습니다.
- 검색된 사용 가능한 채널:
- 사용 가능한 채널을 검색할 수 없습니다.
- 현재 위치에 대한 잘못된 주파수. 유효한 주파수 범위: 87.5-108.0
- 잘못된 입력, 유효한 값은 0 또는 5입니다.
- RDS 설정
- 채널 정보
- 대체 주파수
- 사운드 모드
- 자세히
- 거듭제곱
- "덮어쓰기"
- MHz
- 이어폰을 연결하여 라디오 안테나로서 사용하십시오.
- FM 레코더
- SD 제거로 인해 녹음이 손실됩니다!
- 녹음 시작...
- SD 카드가 없습니다!
- SD 카드 공간이 부족합니다!
- 레코더에서 내부 오류가 발생했습니다!
- 플레이어에서 내부 오류가 발생했습니다!
- 먼저 FM 전원을 켜십시오!
- FM 녹음
- 저장
- 폐기
- 여기에 파일 이름을 입력
- 녹음 파일 저장
- 저장 공간이 부족합니다! 현재 녹음을 저장하시겠습니까?
- 이미 존재합니다
- 통화 중에는 FM 라디오를 시작할 수 없습니다.
- 채널 목록이 비어 있습니다.
- "스피커"
- 헤드폰
- 현재 사용할 수 없음
- 사전설정 채널에 추가
- 사전설정 채널에서 제거
- 사전설정 채널에서 제거 확인
- 이 채널을 사전설정 채널에서 제거하시겠습니까?
- 사전설정 채널 목록이 가득 차서 채널을 추가할 수 없습니다.
- 이 채널은 이미 사전설정 채널 목록에 있습니다.
- 사전설정 채널에서 성공적으로 제거되었습니다.
- 사전설정 채널에 성공적으로 추가되었습니다.
-
diff --git a/MediaTek/FmRadio/res/values-lo-rLA/strings.xml b/MediaTek/FmRadio/res/values-lo-rLA/strings.xml
deleted file mode 100755
index 6911328..0000000
--- a/MediaTek/FmRadio/res/values-lo-rLA/strings.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
- ວິທະຍຸ FM
- ຊອກຫາ
- ແມ່ນແລ້ວ
- ຜູ້ຢິງເວົ້າ
- ຂຽນກ່ຽວກັບການເທິງ
- ເລີ່ມຕົ້ນການບັນທຶກ…
- MHz
- ບັນຊີລາຍຊື່ຊ່ອງເປົ່າຫວ່າງ.
- ການປັບຄ່າ RDS
- ຊອກຫາຊ່ອງທາງອອກທີ່ມີຢູ່:
- ມີແລ້ວ
- ສຽບໃນໂທລະສັບຫູ
- ເພີ່ມເຖິງຄວາມຕ້ອງການ
- ຊ່ອງບັດ SD ບໍ່ພຽງພໍ!
- ຢືນຢັນອອກຈາກຄວາມຕ້ອງການ
- ການບັນທຶກການ FM
- ໂທລະສັບຫູ
- ຮູບແບບສຽງ
- ຊ່ອງທາງນີ້ແມ່ນຢູ່ໃນບັນຊີລາຍຊື່ຂອງຄວາມຕ້ອງການ.
- ປະຈຸບັນຍັງບໍ່ທັນມີ
- ການໂຍກຍ້າຍສົບຜົນສໍາເລັດຈາກຄວາມຕ້ອງການ.
- ເພີ່ມສົບຜົນສໍາເລັດກັບຄວາມຕ້ອງການ.
- ຂໍ້ມູນຂ່າວສານທາງ
- ບໍ່ສາມາດເພີ່ມຊ່ອງທາງໃນການບັນຊີຂອງທ່ານເພາະວ່າມັນເປັນອັນເຕັມທີ່.
- ຊ່ວຍປະຢັດ
- ຊອກຫາ
- ຄວາມຖີ່ຂອງການເລືອກ
- ຊ່ອງທາງການຊອກຫາ…
- ອອກໄປ
- ອ່ານຕໍ່
- ຖິ້ມ
- ດັດແກ້
- ບໍ່ສາມາດຊອກຫາຊ່ອງທາງອອກທີ່ມີຢູ່.
- ການເກັບຮັກສາບໍ່ພຽງພໍ! ທ່ານຕ້ອງການທີ່ຈະຊ່ວຍປະຢັດການບັນທຶກການປະຈຸບັນ?
- ທ່ານບໍ່ສາມາດເປີດວິທະຍຸ FM ໃນເວລາທີ່ທ່ານຢູ່ໃນການເອີ້ນ.
- ຄວາມຖີ່ຂອງການ:
- ເປັນຄວາມຜິດພາດທີ່ເກີດຂຶ້ນພາຍໃນໃນການບັນທຶກ!
- ຊ່ວຍປະຢັດໄຟລ໌ບັນທຶກ
- ຖືກແລ້ວ
- ພະລັງງານ
- ເອົາອອກຈາກຂອງ
- ກະລຸນາພະລັງງານສູງ FM ທໍາອິດ!
- ເຄື່ອງມືບັນທຶກ FM
- ການບັນທຶກຂອງທ່ານຈະໄດ້ຮັບການສູນເສຍເນື່ອງຈາກການໂຍກຍ້າຍ SD!
- ທ່ານແນ່ໃຈວ່າທ່ານຕ້ອງການທີ່ຈະເອົາຊ່ອງທາງນີ້ຈາກຂອງ?
- ໃຫມ່ຊ່ອງ
- ຍົກເລີກການ
- ການປະຕິບັດ
- ບໍ່
- ບັນຊີລາຍຊື່ຊ່ອງ
- ຄວາມຖີ່ຂອງການບໍ່ຖືກຕ້ອງສໍາລັບສະຖານທີ່ໃນປະຈຸບັນ. ຂອບເຂດຄວາມຖີ່ຂອງຄວາມຖືກຕ້ອງ: 87.5-108.0
- ບັດ SD ຂອງທ່ານໄດ້ຖືກຫາຍ!
- ຊື່ຂອງທ່ານ:
- ດັດແກ້ການຊ່ອງ
- ການປະກອບບໍ່ຖືກຕ້ອງທີ່ສຸດ, ມູນຄ່າຖືກຕ້ອງແມ່ນ 0 ຫຼື 5.
- ຊື່ໄຟລ໌ທີ່ນີ້
- ທ່ານຈໍາເປັນຕ້ອງໂທລະສັບຫູເປັນສາຍອາກາດ. ກະລຸນາສຽບໃນໂທລະສັບຫູຂອງທ່ານ.
- ເປັນຄວາມຜິດພາດພາຍໃນທີ່ເກີດຂຶ້ນໃນລະ!
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-lt/strings.xml b/MediaTek/FmRadio/res/values-lt/strings.xml
deleted file mode 100755
index 7688452..0000000
--- a/MediaTek/FmRadio/res/values-lt/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM radijas
- Kanalų sąrašas
- Pridėti prie mėgstamiausių
- Ieškoti
- Uždaryti
- Operacijos
- Redaguoti
- Pašalinti iš parankinių
- Reikia ausinių vietoj antenos. Prijunkite ausines.
- Prijungti ausines
- "Taip"
- "Ne"
- Gerai
- Atšaukti
- Ieškoti
- Ieškoma kanalų...
- Pavadinimas:
- Dažnis:
- Redaguoti kanalą
- Naujas kanalas
- Patvirtinti šalinimą iš mėgstamiausių
- Ar tikrai norite pašalinti šį kanalą iš mėgstamiausių?
- Nepavyko pridėti kanalo prie mėgstamiausių sąrašo, nes jis pilnas.
- Šis kanalas jau įtrauktas į mėgstamiausių sąrašą.
- Sėkmingai pašalintas iš mėgstamiausių.
- Sėkmingai pridėtas prie mėgstamiausių.
- Rasti esami kanalai:
- Nepavyko rasti esamo kanalo.
- Dažnis netinka esamai vietovei. Tinkamos dažnio ribos: 87,5-108,0
- Neteisinga paskutinė įvestis; teisinga vertė yra 0 arba 5.
- RDS parametrai
- Kanalo informacija
- Alternatyvus dažnis
- Garso režimas
- "Daugiau"
- "laipsnis"
- Negalima paleisti FM radijo kalbant telefonu.
- Kanalų sąrašas tuščias.
- Perrašyti
- MHz
- Prijunkite ausines, kad jos veiktų kaip radijo antena.
- FM rašytuvas
- Išėmus SD, įrašas bus prarastas!
- Pradedamas įrašymas...
- Nėra SD kortelės!
- Nepakanka vietos SD kortelėje!
- Įvyko vidinė rašytuvo klaida!
- Įvyko vidinė grotuvo klaida!
- Pirmiausiai įjunkite FM radiją!
- Įrašyti FM
- "Išsaugoti"
- Išmesti
- Įrašykite failo pavadinimą čia
- Išsaugoti įrašo failas
- Nepakanka vietos! Norite išsaugoti dabartinį įrašą?
- jau yra
- Garsiakalbis
- Ausinės
- Šiuo metu nėra
- Pridėti prie nustatytų kanalų
- Šalinti iš nustatytų kanalų
- Patvirtinti šalinimą iš nustatytų kanalų
- Ar tikrai norite pašalinti šį kanalą iš nustatytų kanalų?
- Nepavyko pridėti kanalo prie nustatytų kanalų sąrašo, nes jis pilnas.
- Šis kanalas jau įtrauktas į nustatytų kanalų sąrašą.
- Sėkmingai pašalintas iš nustatytų kanalų.
- Sėkmingai pridėtas prie nustatytų kanalų.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-lv/strings.xml b/MediaTek/FmRadio/res/values-lv/strings.xml
deleted file mode 100755
index 8356149..0000000
--- a/MediaTek/FmRadio/res/values-lv/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM radio
- Kanālu saraksts
- Pievienot izlasei
- Meklēt
- Aizvērt
- Darbības
- Rediģēt
- Noņemt no izlases
- Austiņas nepieciešamas kā antena. Pievienojiet austiņas.
- Pievienot austiņas
- "Jā"
- "Nē"
- Labi
- Atcelt
- Meklēt
- Meklē kanālus...
- Nosaukums:
- Frekvence:
- Rediģēt kanālu
- Jauns kanāls
- Apstiprināt noņemšanu no izlases
- Vai tiešām vēlaties noņemt šo kanālu no izlases?
- Nevar pievienot kanālu izlases sarakstam, jo tas ir pilns.
- Šis kanāls jau ir izlases sarakstā.
- Veiksmīgi noņemts no izlases.
- Veiksmīgi pievienots izlasei.
- Atrasti pieejamie kanāli:
- Nevar atrast pieejamos kanālus.
- Pašreizējai atrašanās vietai nederīga frekvence. Derīgu frekvenču diapazons: 87,5-108,0
- Pēdējā nederīgā ievade, derīga vērtība ir no 0 līdz 5.
- RDS iestatījumi
- Kanāla informācija
- Alternatīva frekvence
- Skaņas režīms
- "Vairāk"
- "pakāpe"
- Zvanīšanas laikā nevar palaist FM radio.
- Kanālu saraksts ir tukšs.
- Pārrakstīt
- MHz
- Pievienojiet austiņas, lai lietotu kā radio antenu.
- FM ierakstītājs
- Pēc SD kartes izņemšanas ieraksts tiks zaudēts!
- Sāk ierakstīšanu...
- Nepieciešama SD karte!
- SD kartē nepietiek vietas!
- Rakstītājā radās iekšēja kļūda!
- Atskaņotājā radās iekšēja kļūda!
- Vispirms ieslēdziet FM!
- Ierakstīt FM
- "Saglabāt"
- Atmest
- Faila nosaukumu ievadiet šeit
- Saglabāt ierakstīto failu
- Nepietiekama atmiņa! Vai vēlaties saglabāt pašreizējo ierakstu?
- jau eksistē
- Skaļrunis
- Austiņas
- Pašlaik nav pieejams
- Pievienot iepriekš iestatītiem kanāliem
- Noņemt no iepriekš iestatītiem kanāliem
- Apstiprināt noņemšanu no iepriekš iestatītiem kanāliem
- Vai tiešām vēlaties noņemt šo kanālu no iepriekš iestatītiem kanāliem?
- Nevar pievienot kanālu iepriekš iestatītu kanālu sarakstam, jo tas ir pilns.
- Šis kanāls jau ir iepriekš iestatīto kanālu sarakstā.
- Veiksmīgi noņemts no iepriekš iestatītiem kanāliem.
- Veiksmīgi pievienots iepriekš iestatītiem kanāliem.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-mn-rMN/strings.xml b/MediaTek/FmRadio/res/values-mn-rMN/strings.xml
deleted file mode 100755
index 2a17335..0000000
--- a/MediaTek/FmRadio/res/values-mn-rMN/strings.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
- FM радио
- Хайх
- Тийм
- Спикер
- Дарж бичих
- Бичлэгийг эхлэх...
- МГц
- Сувгийн жагсаалт хоосон байна.
- RDS тохиргоо
- Боломжтой сувгийг илрүүлсэн:
- аль хэдийн байна
- Чихэвчийг залгах
- Дуртай зүйлээ нэмэх
- Хангалттай бус SD картын зай!
- Дуртай зүйлээсээ хасахыг баталгаажуулах
- FM-ийг бичих
- Чихэвч
- Дууны горим
- Энэ суваг аль хэдийн дуртай зүйлийн жагсаалтад байна.
- Одоогоор боломжгүй
- Дуртай зүйлээс амжилттай хаслаа.
- Дуртай зүйлд амжилттай нэмлээ.
- Сувгийн мэдээлэл
- Дуртай зүйлийн жагсаалт дүүрсэн тул суваг нэмж чадахгүй байна.
- Хадгалах
- Хайх
- Альтернатив давтамж
- Сувгуудыг хайх...
- Гарах
- Илүү
- Хаях
- Засах
- Боломжтой сувгийг илрүүлж чадахгүй байна.
- Хангалтгүй хадгалах багтаамж! Одоогийн бичлэгийг хадгалахын хүсэж байна уу?
- Та дуудлага хийж байх үедээ FM радиог ажиллуулах боломжгүй
- Давтамж:
- Бичлэгт дотоод алдаа тохиолдлоо!
- Бичлэгийн файлыг хадгалах
- Тийм
- Хүч
- Дуртай зүйлээс хасах
- FM-ээ эхлээд асаа!
- FM бичигч
- SD-ыг чөлөөлснөөс үүдэн таны бичлэг алдагдах болно!
- Энэ сувгийг өөрийн дуртай зүйлээс устгахыг хүсэж байгаадаа итгэлтэй байна уу?
- Шинэ суваг
- Цуцлах
- Ажиллагаа
- Үгүй
- Сувгийн жагсаалт
- Одоогийн байршлын хүчингүй давтамж. Хүчинтэй давтамжийн хамрах хүрээ: 87.5-108.0
- Таны SD карт байхгүй байна!
- Нэр:
- Сувгийг засах
- Сүүлийн хүчингүй оролт, хүчинтэй утга is 0 or 5.
- Файлын нэрийг энд шивэх
- You need an earphone as antenna. Please plug in your earphone.
- Антен байдлаар ашиглах чихэвч хэрэгтэй. Чихэвчээ залгана уу.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-ms/strings.xml b/MediaTek/FmRadio/res/values-ms/strings.xml
deleted file mode 100755
index e9ba9f9..0000000
--- a/MediaTek/FmRadio/res/values-ms/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- Radio FM
- Senarai saluran
- Tambah ke Kegemaran
- Cari
- Keluar
- Operasi
- Edit
- Alih keluar daripada kegemaran
- Anda memerlukan fon telinga sebagai antena. Sila pasangkan fon telinga anda.
- Cucukkan fon telinga
- Ya
- Tidak
- OK
- Batal
- Imbas
- Imbas saluran…
- Nama:
- Kekerapan:
- Edit Saluran
- Saluran Baru
- Sahkan Padam Saluran
- Adakah anda pasti anda mahu memadam saluran ini?
- Tidak boleh menambah saluran ke senarai kegemaran kerana sudah penuh.
- Saluran ini sudah ada di dalam senarai kegemaran.
- Berjaya dialih keluar daripada kegemaran.
- Berjaya ditambah pada kegemaran.
- Cari saluran yang tersedia:
- Tidak dapat mencari saluran tersedia.
- Tetapan RDS
- Maklumat saluran
- Frekuensi alternatif
- Lebih banyak Apl
- kuasa
- Mod bunyi
- MHz
- Pasang fon telinga anda untuk digunakan sebagai antena radio.
-
- "Tulis ganti"
- Perakam FM
- Rakaman anda akan hilang disebabkan pengalihan keluar SD!
- Mula merakam…
- Kad SD anda tiada!
- Ruang kad SD tidak mencukupi!
- Ralat dalaman berlaku dalam perakam!
- Ralat dalaman berlaku dalam pemain!!
- Sila hidupkan FM terlebih dahulu!
- Rakam FM
- Simpan
- Buang
- Taipkan nama fail di sini
- Simpan fail rakaman
- Storan tidak mencukupi! Adakah anda mahu menyimpan rakaman semasa?
- Sudah wujud
- Frekuensi tidak sah untuk lokasi semasa. Skop frekuensi sah: 87.5-108.0.
- Input tidak sah terakhir, nilai sah ialah 0 atau 5.
- Anda tidak boleh melancarkan Radio FM semasa anda sedang membuat panggilan.
- Senarai saluran kosong.
- "Pembesar suara"
- Headset
- Tidak tersedia pada masa ini
- Tambahkan pada saluran dipratetap
- Alih keluar daripada saluran dipratetap
- Sahkan alih keluar daripada saluran dipratetap
- Adakah anda pasti mahu mengalih keluar saluran ini daripada saluran dipratetap?
- Tidak dapat menambah saluran pada senarai saluran dipratetap kerana ia telah penuh.
- Saluran ini sudah berada dalam senarai saluran dipratetap.
- Berjaya dialih keluar daripada saluran dipratetap.
- Berjaya ditambahkan pada saluran dipratetap.
-
diff --git a/MediaTek/FmRadio/res/values-my-rMM/strings.xml b/MediaTek/FmRadio/res/values-my-rMM/strings.xml
deleted file mode 100755
index ee751b5..0000000
--- a/MediaTek/FmRadio/res/values-my-rMM/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM ရေဒီယို
- ချန်နယ် စာရင်း
- အနှစ်သက်ဆုံးထဲသို့ ထည့်ရန်
- ရှာဖွေရန်
- ထွက်ရန်
- လုပ်ငန်းများ
- တည်းဖြတ်ရန်
- အနှစ်သက်ဆုံးထဲမှ ဖယ်ရှားရန်
- ဧရိယာတိုင်အဖြစ် နားကြပ်လိုအပ်သည်။ သင့်နားကြပ်ကြိုးတပ်ပါ။
- နားကြပ်ကို တပ်လိုက်ပါ
- မှန်
- မှား
- လုပ်မည်
- ပယ်ဖျက်
- ရှာဖွေရန်
- ချန်နယ်များကို ရှာရန်…
- အမည်-
- ကြိမ်နှုန်း-
- ချန်နယ်ကို တည်းဖြတ်ရန်
- ချန်နယ်အသစ်
- အနှစ်သက်ဆုံးများမှ ဖယ်ရှားရန် အတည်ပြုပါ
- အနှစ်သက်ဆုံးများမှ ဤချန်နယ်ကို သင်ဖယ်ရှားလိုသည်မှာ သေချာပါသလား။
- ပြည့်နေသောကြောင့် အနှစ်သက်ဆုံးစာရင်းထဲ့သို့ ချန်နယ်ကို ထပ်မထည့်နိုင်ပါ။
- ဤချန်နယ်သည် အနှစ်သက်ဆုံးစာရင်းထဲတွင် ရှိပြီးဖြစ်သည်
- အနှစ်သက်ဆုံးများမှ အောင်မြင်စွာ ဖယ်ရှားပြီးဖြစ်သည်။
- အနှစ်သက်ဆုံးများထဲသို့ အောင်မြင်စွာ ထည့်ပြီးဖြစ်သည်။
- ရနိုင်သော ချန်နယ်များကို ရှာခဲ့သည်-
- ရနိုင်သော ချန်နယ်များကို မရှာနိုင်ခဲ့ပါ-
- လက်ရှိနေရာအတွက် ကြိမ်နှုန်း မမှန်ပါ။ မှန်ကန်သော အတိုင်းအတာ- ၈၇.၅-၁၀၈.၀
- ထည့်သွင်းမှု မမှန်ကန်ပါ၊ မှန်ကန်သော တန်ဖိုးမှာ ၀ သို့မဟုတ် ၅။
- RDS ဆက်တင်များ
- ချန်နယ်အချက်အလက်များ
- အခြား ကြိမ်နှုန်း
- အသံနည်းစနစ်
- နောက်ထပ်
- ထပ်ကိန်း
- ထပ်ရေးရန်
- MHz
- ရေဒီယို အန်တီနာတစ်ခုအဖြစ် သုံးရန် သင့် နားကြပ်များကို တပ်ဆင်ပါ။
- FM အသံဖမ်းစက်
- SD ဖယ်ရှားမှုကြောင့် သင်၏ အသံဖမ်းခြင်းသည် ပျောက်ဆုံးသွားလိမ့်မည်။
- အသံဖမ်းခြင်း စတင်ရန်
- သင်၏ SD ကတ် ပျောက်နေသည်။
- SD ကတ်နေရာလွတ် မလုံလောက်ပါ။
- အသံဖမ်းစက်တွင် အတွင်းပိုင်း ပြဿနာတစ်ခု ဖြစ်သည်။
- ဖွင့်စက်တွင် အတွင်းပိုင်း ပြဿနာတစ်ခု ဖြစ်သည်။
- FM ကို ဦးစွာ ဖွင့်ပါ။
- FM ကို မှတ်တမ်းတင်ရန်
- သိမ်းရန်
- စွန့်ပစ်ရန်
- ဤနေရာတွင် ဖိုင်အမည်ကို ရေးသွင်းပါ
- အသံဖမ်းနေသောဖိုင်ကို သိမ်းရန်
- သိမ်းဆည်းနေရာ မလုံလောက်ပါ။ လက်ရှိအသံဖမ်းမှုကို သိမ်းလိုပါသလား။
- ရှိပြီးဖြစ်သည်
- သင်ဖုန်းခေါ်ဆိုနေစဉ် FM ရေဒီယိုဖွင့်၍မရပါ။
- လိုင်းစာရင်းမှာ ဗလာဖြစ်နေသည်။
- စပီကာ
- နားကြပ်
- လောလောဆယ် မရနိုင်ပါ
- ကြိုတင်သတ်မှတ်ထားသော ချန်နယ်များထဲသို့ ထည့်ရန်
- ကြိုတင်သတ်မှတ်ထားသော ချန်နယ်များထဲမှ ဖယ်ရှားရန်
- ကြိုတင်သတ်မှတ်ထားသော ချန်နယ်များမှ ဖယ်ရှားရန် အတည်ပြုပါ
- ကြိုတင်သတ်မှတ်ထားသော ချန်နယ်များမှ ဤချန်နယ်ကို သင်ဖယ်ရှားလိုသည်မှာ သေချာပါသလား။
- ပြည့်နေသောကြောင့် ကြိုတင်သတ်မှတ်ထားသော ချန်နယ်စာရင်းထဲ့သို့ ချန်နယ်ကို ထပ်မထည့်နိုင်ပါ။
- ဤချန်နယ်သည် ကြိုတင်သတ်မှတ်ထားသော ချန်နယ်စာရင်းထဲတွင် ရှိပြီးဖြစ်သည်
- ကြိုတင်သတ်မှတ်ထားသော ချန်နယ်များမှ အောင်မြင်စွာ ဖယ်ရှားပြီးဖြစ်သည်။
- ကြိုတင်သတ်မှတ်ထားသော ချန်နယ်များထဲသို့ အောင်မြင်စွာ ထည့်ပြီးဖြစ်သည်။
-
diff --git a/MediaTek/FmRadio/res/values-my-rZG/strings.xml b/MediaTek/FmRadio/res/values-my-rZG/strings.xml
deleted file mode 100755
index 0735d62..0000000
--- a/MediaTek/FmRadio/res/values-my-rZG/strings.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
- FM ေရဒီယို
- ခ်န္နယ္ စာရင္း
- အႏွစ္သက္ဆံုးထဲသို႔ ထည့္ရန္
- ႀကိဳတင္ သတ္မွတ္ထားေသာ ခ်န္နယ္မ်ားထဲသို႔ ထည့္ရန္
- ရွာေဖြပါ
- ထြက္ပါ
- လုပ္ငန္းမ်ား
- တည္းျဖတ္ပါ
- အႏွစ္သက္ဆံုးမ်ားမွ ဖယ္ရွားရန္
- ႀကိဳတင္ သတ္မွတ္ထားေသာ ခ်န္နယ္မ်ားထဲမွ ဖယ္ရွားရန္
- ဧရိယာတိုင္အျဖစ္ နားၾကပ္လိုအပ္သည္။ သင့္နားၾကပ္ ႀကိဳးတပ္ပါ။
- နားၾကပ္ကို တပ္လိုက္ပါ
- ဟုတ္ပါသည္
- မဟုတ္ပါ
- အိုေက
- မလုပ္ပါ
- ရွာေဖြပါ
- ခ်န္နယ္မ်ားကို ရွာရန္…
- အမည္-
- ႀကိမ္ႏႈန္း-
- ခ်န္နယ္ကို တည္းျဖတ္ပါ
- ခ်န္နယ္အသစ္
- အႏွစ္သက္ဆံုးမ်ားမွ ဖယ္ရွားရန္ အတည္ျပဳပါ
- ႀကိဳတင္ သတ္မွတ္ထားေသာ ခ်န္နယ္မ်ားမွ ဖယ္ရွားရန္ အတည္ျပဳပါ
- အႏွစ္သက္ဆံုးမ်ားမွ ဤခ်န္နယ္ကို သင္ဖယ္ရွားလိုသည္မွာ ေသခ်ာပါသလား။
- ႀကိဳတင္သတ္မွတ္ထားေသာ ခ်န္နယ္မ်ားမွ ဤခ်န္နယ္ကို သင္ဖယ္ရွားလိုသည္မွာ ေသခ်ာပါသလား။
- ျပည့္ေနေသာေၾကာင့္ အႏွစ္သက္ဆံုး စာရင္းထဲသို႔ ခ်န္နယ္ကို ထပ္မထည့္ႏိုင္ပါ။
- ျပည့္ေနေသာေၾကာင့္ ႀကိဳတင္ သတ္မွတ္ထားေသာ ခ်န္နယ္စာရင္းထဲ့သို႔ ခ်န္နယ္ကို ထပ္မထည့္ႏိုင္ပါ။
- ဤခ်န္နယ္သည္ အႏွစ္သက္ဆံုး စာရင္းထဲတြင္ ရွိၿပီးျဖစ္သည္။
- ဤခ်န္နယ္သည္ ႀကိဳတင္ သတ္မွတ္ထားေသာ ခ်န္နယ္စာရင္းထဲတြင္ ရွိၿပီးျဖစ္သည္။
- အႏွစ္သက္ဆံုးမ်ားမွ ေအာင္ျမင္စြာ ဖယ္ရွားၿပီးျဖစ္သည္။
- ႀကိဳတင္ သတ္မွတ္ထားေသာ ခ်န္နယ္မ်ားမွ ေအာင္ျမင္စြာ ဖယ္ရွားၿပီးျဖစ္သည္။
- အႏွစ္သက္ဆံုးမ်ားထဲသို႔ ေအာင္ျမင္စြာ ထည့္ၿပီးျဖစ္သည္။
- ႀကိဳတင္ သတ္မွတ္ထားေသာ ခ်န္နယ္မ်ားထဲသို႔ ေအာင္ျမင္စြာ ထည့္ၿပီးျဖစ္သည္။
- ရႏိုင္ေသာ ခ်န္နယ္မ်ားကို ရွာခဲ့သည္-
- ရႏိုင္ေသာ ခ်န္နယ္မ်ားကို မရွာႏိုင္ခဲ့ပါ-
- လက္ရွိေနရာအတြက္ ႀကိမ္ႏႈန္း မမွန္ပါ။ မွန္ကန္ေသာ အတိုင္းအတာ- ၈၇.၅-၁၀၈.ဝ
- ထည့္သြင္းမႈ မမွန္ကန္ပါ၊ မွန္ကန္ေသာ တန္ဖိုးမွာ ဝ သို႔မဟုတ္ ၅။
- RDS ဆက္တင္မ်ား
- ခ်န္နယ္ အခ်က္အလက္မ်ား
- အျခား ႀကိမ္ႏႈန္း
- အသံနည္းစနစ္
- ေနာက္ထပ္
- ထပ္ကိန္း
- သင္ဖုန္းေခၚဆိုေနစဥ္ FM ေရဒီယိုဖြင့္၍မရပါ။
- လိုင္းစာရင္းမွာ ဗလာျဖစ္ေနသည္။
- ထပ္ေရးရန္
- MHz
- နားၾကပ္ကို တပ္လိုက္ပါ
- FM အသံဖမ္းစက္
- SD ဖယ္ရွားမႈေၾကာင့္ သင္၏ အသံဖမ္းျခင္းသည္ ဆုံး႐ႈံးသြားလိမ့္မည္။
- အသံဖမ္းျခင္း စတင္ရန္
- သင္၏ SD ကတ္ ေပ်ာက္ေနသည္။
- SD ကတ္ေနရာလြတ္ မလံုေလာက္ပါ။
- အသံဖမ္းစက္တြင္ အတြင္းပိုင္း ျပႆနာတစ္ခု ျဖစ္သည္။
- ဖြင့္စက္တြင္ အတြင္းပိုင္း ျပႆနာတစ္ခု ျဖစ္သည္။
- FM ကို ဦးစြာ ဖြင့္ပါ။
- FM ကို မွတ္တမ္းတင္ရန္
- သိမ္းဆည္းပါ
- ျဖဳတ္ခ်ပါ
- ဤေနရာတြင္ ဖိုင္အမည္ကို ေရးသြင္းပါ
- အသံဖမ္းေနေသာဖိုင္ကို သိမ္းရန္
- သိမ္းဆည္းေနရာ မလံုေလာက္ပါ။ လက္ရွိအသံဖမ္းမႈကို သိမ္းလိုပါသလား။
- ရွိၿပီးျဖစ္သည္
- စပီကာ
- နားၾကပ္
- ေလာေလာဆယ္ မရႏိုင္ပါ
-
diff --git a/MediaTek/FmRadio/res/values-nb/strings.xml b/MediaTek/FmRadio/res/values-nb/strings.xml
deleted file mode 100755
index 7082e10..0000000
--- a/MediaTek/FmRadio/res/values-nb/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM-radio
- Kanalliste
- Legg til favoritt
- Søk
- Avslutt
- Operasjoner
- Rediger
- Fjern fra favoritter
- Du må bruke en øretelefon som antenne. Plugg inn øretelefoner.
- Plugg inn øretelefon
- "Ja"
- "Nei"
- OK
- Avbryt
- Søk
- Søk etter kanaler …
- Navn:
- Frekvens:
- Rediger kanal
- Ny kanal
- Bekreft fjerning fra favoritter
- Er du sikker på at du vil fjerne denne kanalen fra favoritter?
- Kan ikke legge til kanalen i favorittlisten, da listen er full.
- Kanalen er allerede i favorittlisten.
- Kanalen ble fjernet fra favoritter.
- Kanalen ble lagt til i favoritter.
- Fant tilgjengelige kanaler:
- Kan ikke finne tilgjengelige kanal.
- Ugyldig frekvens for gjeldende plassering. Gyldig frekvensomfang: 87,5–108,0
- Ugyldige inndata. Gyldig verdi er 0 eller 5.
- RDS-innstillinger
- Kanalinformasjon
- Alternativ frekvens
- Lydmodus
- "Mer"
- "potens"
- Du kan ikke starte FM-radio når du er i en samtale.
- Kanallisten er tom.
- Overskriv
- MHz
- Plugg inn øretelefonene for å bruke som en radioantenne.
- FM-opptaker
- Opptaket vil gå tapt på grunn av fjerning av SD!
- Start opptak …
- SD-kortet mangler!
- Utilstrekkelig plass på SD-kort!
- Det oppstod en intern feil i opptaker!
- Det oppstod en intern feil i spiller!
- Slå på FM først!
- Ta opp FM
- "Lagre"
- Forkast
- Skriv inn filnavnet her
- Lagre opptaksfil
- Utilstrekkelig plass! Vil du lagre dette opptaket?
- finnes allerede
- Hoyttaler
- Hodetelefon
- Ikke tilgjengelig for øyeblikket
- Legg til forhåndsinnstilte kanaler
- Fjern fra forhåndsinnstilte kanaler
- Bekreft fjerning fra forhåndsinnstilte kanaler
- Er du sikker på at du vil fjerne denne kontoen fra forhåndsinnstilte kanaler?
- Kan ikke legge til kanalen i liste over forhåndsinnstilte kanaler, da listen er full.
- Kanalen er allerede i listen over forhåndsinnstilte kanaler.
- Kanalen ble fjernet fra forhåndsinnstilte kanaler.
- Kanalen ble lagt til i forhåndsinnstilte kanaler.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-nl/strings.xml b/MediaTek/FmRadio/res/values-nl/strings.xml
deleted file mode 100755
index d176812..0000000
--- a/MediaTek/FmRadio/res/values-nl/strings.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
- FM-radio
- Kanalenlijst
- Toevoegen aan favorieten
- Zoeken
- Afsluiten
- Bewerkingen
- Bewerken
- Uit favorieten verwijderen
- U hebt een oortelefoon nodig als antenne. Sluit de oortelefoon aan.
- Oortelefoon aansluiten
- Ja
- Nee
- OK
- Annuleren
- Scannen
- Kanalen scannen…
- Naam:
- Frequentie:
- Kanaal bewerken
- Nieuw kanaal
- Verwijderen kanaal bevestigen
- Weet u zeker dat u dit kanaal wilt verwijderen?
- Kan het kanaal niet toevoegen aan de lijst met favorieten omdat deze vol is.
- Dit kanaal staat al in de favorietenlijst.
- Verwijderen uit favorieten geslaagd.
- Toevoegen aan favorieten geslaagd.
- Gezocht in beschikbare kanalen:
- Kan beschikbaar kanaal niet uitzoeken:
- RDS-instellingen
- Kanaalinformatie
- Alternatieve frequentie
- Meer toepassingen
- macht
- Geluidsmodus
- MHz
- Sluit de oortelefoon aan om als radio-antenne te gebruiken.
-
- "Overschrijven"
- FM-recorder
- Uw opname gaat verloren doordat de SD-kaart is verwijderd!
- Opname start…
- SD-kaart ontbreekt.
- Onvoldoende ruimte op SD-kaart!
- In de recorder is een interne fout opgetreden!
- In de speler is een interne fout opgetreden!
- Schakel eerst FM in!
- FM opnemen
- Opslaan
- Verwijderen
- Typ hier de bestandsnaam
- Opnamebestand opslaan
- Onvoldoende opslagruimte! Wilt u de huidige opname opslaan?
- bestaat al
- Ongeldige frequentie voor huidige locatie. Geldig frequentiebereik: 87,5-108,0.
- De laatste invoer is ongeldig, geldige waarde is 0 of 5.
- U kunt FM-radio niet starten terwijl u een telefoongesprek voert.
- Lijst met zenders is leeg.
- "Luidspreker"
- Kuulokkeet
- Momenteel niet beschikbaar
- Aan vooringestelde kanalen toevoegen
- Uit vooringestelde kanalen verwijderen
- Verwijderen uit vooringestelde kanalen bevestigen
- Wilt u werkelijk dit kanaal uit vooringestelde kanalen verwijderen?
- Kan het kanaal niet toevoegen aan de lijst met vooringestelde kanalen omdat deze vol is.
- Dit kanaal bevindt zich reeds in de lijst met vooringestelde kanalen.
- Uit vooringestelde kanalen verwijderd.
- Aan vooringestelde kanalen toegevoegd.
-
-
diff --git a/MediaTek/FmRadio/res/values-pl/strings.xml b/MediaTek/FmRadio/res/values-pl/strings.xml
deleted file mode 100755
index 098e1ea..0000000
--- a/MediaTek/FmRadio/res/values-pl/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- Radio FM
- Lista kanałów
- Dodaj do ulubionych
- Wyszukaj
- Zakończ
- Operacje
- Edytuj
- Usuń z ulubionych
- Potrzebna jest antena w postaci słuchawek. Podłącz słuchawki.
- Podłącz słuchawki
- "Tak"
- "Nie"
- OK
- Anuluj
- Wyszukaj
- Trwa wyszukiwanie kanałów...
- Nazwa:
- Częstotliwość:
- Edytuj kanał
- Nowy kanał
- Potwierdź usunięcie z ulubionych
- Czy na pewno chcesz usunąć ten kanał z ulubionych?
- Nie można dodać kanału do listy ulubionych, ponieważ została ona zapełniona.
- Kanał ten znajduje się już na liście ulubionych.
- Pomyślnie usunięto z ulubionych.
- Pomyślnie dodano do ulubionych.
- Wyszukano dostępne kanały:
- Nie można wyszukać dostępnych kanałów.
- Nieprawidłowa częstotliwość dla bieżącej lokalizacji. Prawidłowy zakres częstotliwości: 87,5–108,0
- Ostatni wpis jest nieprawidłowy; prawidłowa wartość to 0 lub 5.
- Ustawienia RDS
- Informacje o kanale
- Częstotliwość alternatywna
- Tryb dźwięku
- "Więcej"
- "do potęgi"
- Nie można włączyć radia FM podczas trwania rozmowy telefonicznej.
- Lista kanałów jest pusta.
- Zastąp
- MHz
- Podłącz słuchawki, aby móc ich używać jako anteny radiowej.
- Rejestrator FM
- Nagranie zostanie utracone z powodu wyjęcia karty SD!
- Trwa rozpoczynanie nagrywania...
- Brak karty SD!
- Za mało miejsca na karcie SD!
- Wystąpił błąd wewnętrzny w rejestratorze!
- Wystąpił błąd wewnętrzny w odtwarzaczu!
- Włącz najpierw tryb FM!
- Nagrywaj w paśmie FM
- "Zapisz"
- Odrzuć
- Wpisz tutaj nazwę pliku
- Zapisz plik nagrania
- Za mało miejsca w pamięci! Czy chcesz zapisać bieżące nagranie?
- już istnieje
- Głośnik
- Słuchawki
- Obecnie niedostępne
- Dodaj do ustawionych wstępnie kanałów
- Usuń z ustawionych wstępnie kanałów
- Potwierdź usunięcie z ustawionych wstępnie kanałów
- Czy na pewno chcesz usunąć ten kanał z ustawionych wstępnie kanałów?
- Nie można dodać kanału do listy ustawionych wstępnie kanałów, ponieważ została ona zapełniona.
- Kanał ten znajduje się już na liście ustawionych wstępnie kanałów.
- Pomyślnie usunięto z ustawionych wstępnie kanałów.
- Pomyślnie dodano do ustawionych wstępnie kanałów.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-pt-rPT/strings.xml b/MediaTek/FmRadio/res/values-pt-rPT/strings.xml
deleted file mode 100755
index 9c6edce..0000000
--- a/MediaTek/FmRadio/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
- Rádio FM
- Lista de canais
- Adicionar a Favorito
- Procurar
- Exit
- Operações
- Editar
- Remover dos favoritos
- É necessário utilizar os auscultadores como antena. Ligue os auscultadores.
- Plugar o fone de ouvido
- Sim
- Não
- OK
- Cancelar
- Sintonizar
- A pesquisar canais…
- Nome:
- Frequência:
- Editar Canal
- Novo Canal
- Confirmar Exclusão do Canal
- Você tem certeza que deseja excluir este canal?
- Impossível adicionar o canal à lista de favoritos porque ela está cheia.
- Esta canal já existe na lista de favoritos.
- Remoção dos favoritos efectuada com êxito.
- Adição aos favoritos efectuada com êxito.
- Procurado nos canais disponíveis:
- Impossível encontrar canal disponível.
- Config. RDS
- Info. do canal
- Freqüência alternativa
- Mais Aplicações
- expoente
- Modo de som
- MHz
- Ligue os seus auscultadores para os utilizar como antena de rádio.
-
- "Substituir"
- Gravador FM
- A sua gravação irá perder-se devido à remoção do cartão SD!
- Iniciar gravação…
- Não existe cartão SD!
- Espaço insuficiente no cartão SD!
- Ocorreu um erro interno no gravador!
- Ocorreu um erro interno no leitor!
- Ligue primeiro o rádio FM!
- Gravar FM
- Guardar
- Rejeitar
- Introduza aqui o nome do ficheiro
- Guardar ficheiro de gravação
- Espaço de armazenamento insuficiente! Deseja guardar a gravação actual?
- já existe
- Frequência inválida para local atual. Escopo de frequência válida: 87,5-108,0.
- O último valor introduzido é inválido, o valor válido é 0 ou 5.
- Não é possível utilizar o Rádio FM durante uma chamada.
- A lista de canais está vazia.
- "Altifalante"
- Auricular
- Não disponível actualmente
- Adicionar como canal predefinido
- Remover de canais predefinidos
- Confirmar remoção de canais predefinidos
- Tem certeza que deseja remover este canal dos canais predefinidos?
- Impossível adicionar o canal à lista de canais predefinidos porque está cheia.
- Este canal já está na lista de canais predefinidos.
- Removido com sucesso de canais predefinidos.
- Adicionar om sucesso de canais predefinidos.
-
-
diff --git a/MediaTek/FmRadio/res/values-pt/strings.xml b/MediaTek/FmRadio/res/values-pt/strings.xml
deleted file mode 100755
index d2fc5ef..0000000
--- a/MediaTek/FmRadio/res/values-pt/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- Transmissão FM
- Canais
- Adicionar aos Favoritos
- Pesquisar
- Sair
- Operações
- Editar
- Remover
- Você precisa de um fone de ouvido como antena. Conecte seu fone de ouvido.
- Conectar o fone de ouvido
- Sim
- Não
- OK
- Cancelar
- A procurar
- procurar canais...
- Nome:
- Frequencia:
- Editar canal
- Novo canal
- Confirmar Exclusão de Canal
- Tem certeza de que deseja excluir este canal?
- Impossível adicionar o canal para a lista de favoritos porque ela está cheia.
- Este canal já está na lista de favoritos.
- O canal é excluído da lista de favoritos.
- O canal é adicionado para lista de favoritos.
- Procurado nos canais disponíveis:
- Impossível encontrar canal disponível.
- Config. RDS
- Info. do canal
- Freqüência alternativa
- Mais Aplicativos
- potência
- Modo de som
- MHz
- Conecte seus fones de ouvido para usar como uma antena de rádio.
-
- "Substituir"
- Gravador FM
- Sua gravação será perdida devido à removação do SD!
- Iniciar gravação…
- Seu cartão SD está faltando!
- Espaço insuficiente no cartão SD!
- Um erro interno ocorreu no gravador!
- Um erro interno ocorreu no reprodutor!
- Ligue FM primeiro!
- Gravar FM
- Salvar
- Descartar
- Digite o nome do arquivo aqui
- Salvar arquivo de gravação
- Armazenamento insuficiente! Deseja salvar a gravação atual?
- Já existe
- Frequência inválida para a localização actual. Intervalo de frequências válidas: 87,5-108,0.
- A última entrada inválida, valor válido é 0 ou 5.
- Você não pode iniciar a Rádio FM quando esá er chamada.
- Lista de canal está vazia.
- "Alto-falante"
- Headset
- Atualmente indisponível
- Adicionar aos canais predefinidos
- Remover dos canais predefinidos
- Confirmar a remoção dos canais predefinidos
- Deseja realmente remover este canal dos canais predefinidos?
- Não é possível adicionar o canal à lista de canais predefinidos porque a lista está cheia.
- Este canal já se encontra na lista de canais predefinidos.
- Removido com sucesso dos canais predefinidos.
- Adicionado com sucesso aos canais predefinidos.
-
diff --git a/MediaTek/FmRadio/res/values-ro/strings.xml b/MediaTek/FmRadio/res/values-ro/strings.xml
deleted file mode 100755
index dfc986d..0000000
--- a/MediaTek/FmRadio/res/values-ro/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- Radio FM
- Listă canale
- Adăugare la Preferinţe
- Căutare
- Ieşire
- Operaţii
- Editare
- Eliminare din preferinţe
- Aveţi nevoie de căşti, acestea acţionând pe post de antenă. Conectaţi căştile.
- Conectare căşti
- Da
- Nu
- OK
- Revocare
- Scanare
- Scanare canale...
- Nume:
- Frecvenţă:
- Editare canal
- Canal nou
- Confirmare eliminare din preferinţe
- Sigur doriţi să eliminaţi acest canal din preferinţe?
- Imposibil de adăugat canalul la lista de preferinţe deoarece aceasta este plină.
- Canalul este deja în lista de preferinţe.
- Eliminarea din preferinţe a reuşit.
- Adăugarea la preferinţe a reuşit.
- Canale disponibile căutate:
- Imposibil de căutat canalul disponibil.
- Frecvenţă nevalidă pentru locaţia curentă. Interval valid de frecvenţă: 87,5-108,0
- Setări RDS
- Informaţii canal
- Frecvenţă alternativă
- Mod sunet
- Mai multe aplicaţii
- putere
- MHz
- Conectaţi căştile pentru că acestea funcţionează pe post de antenă radio.
-
- "Suprascrieţi"
- Înregistrator FM
- Înregistrarea dvs. se va pierde din cauza scoaterii cartelei SD!
- Pornire înregistrare...
- Cartela SD lipseşte!
- Spaţiu insuficient pe cartela SD!
- S-a produs o eroare internă în înregistrator!
- S-a produs o eroare internă în player!
- Mai întâi porniţi radioul FM!
- Înregistrare FM
- Salvare
- Renunţare
- Tastaţi numele de fişier aici
- Salvare fişier de înregistrare
- Spaţiu de stocare insuficient! Doriţi să salvaţi înregistrarea curentă?
- există deja
- Ultima intrare nevalidă, valoarea validă este 0 sau 5.
- Nu puteţi lansa aplicaţia de radio FM cât timp vă aflaţi într-un apel.
- Lista de canale este goală.
- "Difuzor"
- Set cu căşti
- Indisponibil în prezent
- Adăugaţi la canalele presetate
- Eliminaţi din canalele presetate
- Confirmaţi eliminarea din canalele presetate
- Sigur doriţi să eliminaţi acest canal din canalele presetate?
- Imposibil de adăugat canalul la lista de canale presetate deoarece aceasta este plină.
- Canalul este deja în lista de canale presetate.
- Eliminarea din canalele presetate a reuşit.
- Adăugarea la canalele presetate a reuşit.
-
diff --git a/MediaTek/FmRadio/res/values-ru/strings.xml b/MediaTek/FmRadio/res/values-ru/strings.xml
deleted file mode 100755
index 55d8e10..0000000
--- a/MediaTek/FmRadio/res/values-ru/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- FM-станция
- Список каналов
- Добавить в избранное
- Поиск
- Выйти
- Операции
- Изменить
- Удалить из избранного
- Вам нужен головной телефон в роли антенны. Подключите головной телефон.
- Подключите наушники
- Да
- Нет
- OK
- Отменить
- Сканирование
- Поиск каналов...
- Имя:
- Частота:
- Изменить станция
- Новая станция
- Подтвердите удаление канала
- Действительно удалить этот канал?
- Невозможно добавить канал в список избранных, поскольку список полон.
- Этот канал уже добавлен в список избранных.
- Удалено из папки избранного.
- Добавлено в избранное.
- Найденные доступные каналы:
- Не удается найти доступный канал.
- Настройки RDS
- Информация о канале
- Альтернативная частота
- Еще приложения
- в степени
- Звуковой режим
- МГц
- Подключите наушники для использования в качестве антенны.
-
- "Перезаписать"
- FM-рекордер
- Запись будет утеряна из-за извлечения SD-карты!
- Запуск записи…
- Отсутствует SD-карта!
- Недостаточно места на SD-карте!
- Внутренняя ошибка в устройстве записи!
- Внутренняя ошибка в плеере!
- Сначала включите FM-приемник!
- Записать с FM-диапазона
- Сохранить
- Аннулировать
- Введите имя файла
- Сохранить файл записи
- Недостаточно памяти! Сохранить текущую запись?
- Уже существует
- Недопустимая частота для текущего положения. Диапазон допустимых частот: 87,5-108,0.
- Последний неверный ввод, допустимое значение 0 или 5.
- Во время вызова нельзя включить FM-радио.
- Список каналов пуст.
- "Динамик"
- Наушники
- Недоступно в данный момент
- Добавить в настроенные каналы
- Удалить из настроенных каналов
- Подтвердить удаление из настроенных каналов
- Действительно удалить данный канал из настроенных каналов?
- Невозможно добавить данный канал в список настроенных каналов, так как список заполнен.
- Данный канал уже имеется в списке настроенных каналов.
- Удалено из списка настроенных каналов.
- Добавлено в список настроенных каналов.
-
diff --git a/MediaTek/FmRadio/res/values-sk/strings.xml b/MediaTek/FmRadio/res/values-sk/strings.xml
deleted file mode 100755
index 359146d..0000000
--- a/MediaTek/FmRadio/res/values-sk/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- Rádio FM
- Zoznam kanálov
- Pridať do zoznamu obľúbených kanálov
- Vyhľadať
- Ukončiť
- Operácie
- Upraviť
- Odstrániť zo zoznamu obľúbených kanálov
- Slúchadlá potrebujete ako anténu. Zapojte slúchadlá.
- Zapojte slúchadlá
- "Áno"
- "Nie"
- OK
- Zrušiť
- Vyhľadať
- Vyhľadávam kanály...
- Názov:
- Frekvencia:
- Upraviť kanál
- Nový kanál
- Potvrďte odstránenie zo zoznamu obľúbených kanálov
- Ste si istí, že chcete odstrániť tento kanál zo zoznamu obľúbených kanálov?
- Tento kanál nemožno pridať do zoznamu obľúbených kanálov, pretože je plný.
- Tento kanál je už v zozname obľúbených kanálov.
- Kanál bol úspešne odstránený zo zoznamu obľúbených kanálov.
- Kanál bol úspešne pridaný do zoznamu obľúbených kanálov.
- Vyhľadať dostupné kanály:
- Dostupné kanály nemožno vyhľadať.
- Neplatná frekvencia aktuálneho umiestnenia. Platí frekvenčný rozsah: 87,5 až 108,0
- Naposledy zadaný vstup je neplatný. Platná hodnota je 0 alebo 5.
- Nastavenia RDS
- Informácie o kanále
- Alternatívna frekvencia
- Režim zvuku
- "Viac"
- "mocnina"
- Počas hovoru nemôžete spustiť rádio FM.
- Zoznam kanálov je prázdny
- Prepísať
- MHz
- Zapojte slúchadlá a používajte ako rádiovú anténu.
- Nahrávač FM
- Keď vyberiete kartu SD, vaša nahrávka bude stratená!
- Spustiť nahrávanie...
- Chýba vaša karta SD!
- Nedostatok miesta na karte SD!
- Došlo k internej chybe v nahrávači!
- Došlo k internej chybe v prehrávači!
- Najskôr zapnite rádio FM!
- Nahrať FM
- "Uložiť"
- Vymazať
- Sem napíšte názov súboru
- Uložiť súbor s nahrávkou
- V pamäti je nedostatok miesta! Chcete uložiť aktuálnu nahrávku?
- už existuje
- reproduktor
- Slúchadlá
- Momentálne nie je k dispozícii
- Pridať do prednastavených kanálov
- Odstrániť z prednastavených kanálov
- Potvrďte odstránenie z prednastavených kanálov
- Ste si istí, že chcete odstrániť tento kanál z prednastavených kanálov?
- Tento kanál nemožno pridať do zoznamu prednastavených kanálov, pretože je plný.
- Tento kanál je už v zozname prednastavených kanálov.
- Kanál bol úspešne odstránený zo zoznamu prednastavených kanálov.
- Kanál bol úspešne pridaný do zoznamu prednastavených kanálov.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-sl/strings.xml b/MediaTek/FmRadio/res/values-sl/strings.xml
deleted file mode 100755
index 460fe51..0000000
--- a/MediaTek/FmRadio/res/values-sl/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- Radio FM
- Iskanje
- Da
- Zvočnik
- Prepiši
- Začetek snemanja ...
- MHz
- Seznam kanalov je prazen.
- Nastavitve RDS
- Najdeni razpoložljivi kanali:
- že obstaja
- Priklop slušalk
- Dodaj priljubljenim
- Na kartici SD ni dovolj prostora!
- Potrdi odstranitev iz priljubljenih
- Snemanje FM
- Slušalka
- Način zvoka
- Ta kanal je že med priljubljenimi.
- Trenutno ni na voljo
- Uspešno odstranjeno iz priljubljenih
- Uspešno dodano priljubljenim.
- Podatki o kanalu
- Kanala ni mogoče dodati na seznam priljubljenih, ker je ta poln.
- Shrani
- Išči
- Alternativna frekvenca
- Iskanje kanalov ...
- Izhod
- Več
- Zavrzi
- Uredi
- Iskanje razpoložljivih kanalov ni na voljo.
- V pomnilniku ni dovolj prostora! Ali želite shraniti trenutni posnetek?
- Radia FM ne morete zagnati, medtem ko imate klic.
- Frekvenca:
- V snemalniku je prišlo do notranje napake!
- Shrani posneto datoteko
- V redu
- Napajanje
- Odstrani iz priljubljenih
- Najprej napolnite FM!
- Snemalnik FM
- Če odstranite SD, boste posnetek izgubili!
- Ali ste prepričani, da želite ta kanal odstraniti iz priljubljenih?
- Nov kanal
- Prekliči
- Dejanja
- Ne
- Seznam kanalov
- Neveljavna frekvenca za trenutno lokacijo. Veljaven frekvenčni razpon: 87,5–108,0
- Kartica SD manjka!
- Ime:
- Urejanje kanala
- Zadnji neveljaven vnos, veljavna vrednost je 0 ali 5.
- Sem vpišite ime datoteke
- Slušalke rabite kot anteno. Priključite slušalke.
- V predvajalniku je prišlo do notranje napake!
- Priključite slušalke, da bodo služile kot antena radia.
- Dodaj med prednastavljene kanale
- Odstrani iz prednastavljenih kanalov
- Potrdi odstranitev iz prednastavljenih kanalov
- Ali ste prepričani, da želite odstraniti ta kanal iz prednastavljenih kanalov?
- Kanala ni mogoče dodati na seznam prednastavljenih kanalov, ker je seznam poln.
- Ta kanal je že na seznamu prednastavljenih kanalov.
- Uspešno odstranjeno iz prednastavljenih kanalov.
- Uspešno dodano med prednastavljene kanale.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-sr/strings.xml b/MediaTek/FmRadio/res/values-sr/strings.xml
deleted file mode 100755
index bccb8e8..0000000
--- a/MediaTek/FmRadio/res/values-sr/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM радио
- Претрага
- Да
- Звучник
- Замени
- Почни снимање...
- MHz
- Листа канала је празна.
- Подешавања RDS
- Претрага доступних канала:
- већ постоји
- Укључите слушалицу
- Листа канала
- Недовољан простор на SD картици!
- Потврди уклањање из омиљених
- Сними FM
- Слушалица
- Режим звука
- Овај канал је већ на листи омиљених.
- Тренутно није доступно
- Успешно уклоњено из омиљених.
- Успешно додато омиљеним.
- Информације о каналу
- Није могуће додати канал на листу омиљених зато што је листа пуна.
- Сачувај
- Претрага
- Алтернативна фреквенција
- Претрага канала...
- Изађи
- Још
- Одбаци
- Уреди
- Није могуће тражити доступни канал.
- Недовољна меморија! Желите ли да снимите тренутни снимак?
- За време позива покретање FM радија није могуће.
- Име:
- Дошло је до интерне грешке у снимачу!
- Сачувај датотеку снимања
- Потврди
- Напајање
- Уклони из омиљених
- Прво укључите FM!
- FM снимач
- Ваш снимак ће бити изгубљен због уклањања SD картице!
- Желите ли сигурно да уклоните овај канал из омиљених?
- Нови канали
- Откажи
- Операције
- Не
- Листа канала
- Неважећа фреквенција за тренутну локацију. Опсег важеће фреквенције: 87,5-108,0
- Ваша SD картица недостаје!
- Повезивање:
- Уреди канал
- Последњи неважећи унос, важећа вредност је 0 или 5.
- Овде укуцајте име датотеке
- Потребна вам је слушалица као антена. Укључите слушалицу.
- Дошло је до интерне грешке у плејеру!
- Укључите слушалице да бисте их користили као радио антену
- Додај унапред подешеним каналима
- Уклони из унапред подешених канала
- Потврди уклањање из унапред подешених канала
- Желите ли сигурно да уклоните овај канал из унапред подешених канала?
- Није могуће додати канал на листу унапред подешених канала зато што је листа пуна.
- Овај канал је већ на листи унапред подешених.
- Успешно уклоњено из унапред подешених канала.
- Успешно додато унапред подешеним каналима.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-sv/strings.xml b/MediaTek/FmRadio/res/values-sv/strings.xml
deleted file mode 100755
index adc6834..0000000
--- a/MediaTek/FmRadio/res/values-sv/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM-radio
- Kanallista
- Lägg till som favorit
- Sök
- Avsluta
- Användning
- Redigera
- Ta bort från favoriter
- Du behöver en hörlur som antenn. Anslut dina hörlurar.
- Anslut hörlurar
- "Ja"
- "Nej"
- OK
- Avbryt
- Sök
- Sök kanaler…
- Namn:
- Frekvens:
- Redigera kanal
- Ny kanal
- Bekräfta borttagning från favoriter
- Är du säker på att du vill ta bort den här kanalen från favoriter?
- Kan inte lägga till kanalen i favoritlistan eftersom den är full.
- Denna kanal finns redan i favoritlistan.
- Kanalen har tagits bort från favoriter.
- Kanalen har lagts till i favoriter.
- Tillgängliga kanaler efter sökning:
- Kan inte söka efter tillgängliga kanaler.
- Ogiltig frekvens för nuvarande plats. Giltigt frekvensområde: 87,5-108,0
- Senast ogitliga inmatning, aktivt värde är 0 eller 5.
- RDS-inställningar
- Kanalinformation
- Alternativ frekvens
- Ljudläge
- "Mer"
- "exponent"
- Du kan inte starta FM-radio när ett samtal pågår.
- Kanallistan är tom.
- Skriv över
- MHz
- Anslut dina hörlurar för användning som radioantenn.
- FM-inspelare
- Inspelningen kommer att tappas eftersom SD-kortet borttagning!
- Starta inspelning…
- SD-kortet saknas!
- Inte tillräckligt med ledigt utrymme på SD-kortet!
- Ett internt fel har inträffat i inspelaren!
- Ett internt fel har inträffat i spelaren!
- Starta FM först!
- Spela in FM
- "Spara"
- Kasta bort
- Ange filnamnet här
- Spara inspelad fil
- Otillräckligt utrymme! Vill du spara befintlig inspelning?
- finns redan
- Högtalare
- hörlur
- Inte tillgänglig för närvarande
- Lägg till i förinställda kanaler
- Ta bort från förinställda kanaler
- Bekräfta borttagning från förinställda kanaler
- Är du säker på att du vill ta bort den här kanalen från förinställda kanaler?
- Kan inte lägga till kanalen i listan över förinställda kanaler eftersom den är full.
- Denna kanal finns redan i listan över förinställda kanaler.
- Kanalen har tagits bort från förinställda kanaler.
- Kanalen har lagts till i förinställda kanaler.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-sw/strings.xml b/MediaTek/FmRadio/res/values-sw/strings.xml
deleted file mode 100755
index 4d5ae7a..0000000
--- a/MediaTek/FmRadio/res/values-sw/strings.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
- Redio ya FM
- Tafuta
- Ndiyo
- Spika
- Andika juu
- Anza kurekodi…
- MHz
- Orodha ya vituo iko tupu.
- Mipangilio ya RDS
- Vituo vinavyopatikana vilivyotafutwa:
- tayari ipo
- Vaa vifaa vya masikioni
- Ongeza kwa Kipendwa
- Nafasi ya kadi ya SD haitoshi!
- Thibitisha ondoa kutoka kwenye vipendwa
- Rekodi FM
- Kifaa cha masikio
- Hali ya sauti
- Kituo hiki kiko tayari katika orodha ya vipendwa.
- Haipatikani kwa sasa
- Imefanikiwa kuondolewa kwenye vipendwa.
- Imefanikiwa kuongezwa kwenye vipendwa.
- Maelezo ya kituto
- Haiwezi kuongeza kituo kwenye orodha ya vipendwa kwa sababu imejaa.
- Hifadhi
- Tafuta
- Masafa mbadala
- Tafuta vituo…
- Toka
- Zaidi
- Tupa
- Hariri
- Haiwezi kutafuta kituo kinachopatikana.
- Hifadhi haitoshi! Je, unataka kuhifadhi rekodi ya sasa?
- Huwezi kuzindua Redio ya FM unapopiga simu.
- Masafa:
- Hitilafu ya ndani imetokea katika rekoda!
- Hifadhi faili ya rekodi
- Sawa
- Nishati
- Ondoa kwenye vipendwa
- Tafadhali washa FM kwanza!
- Rekoda ya FM
- Rekodi yako itapotea kwa sababu ya uondoaji SD!
- Je, una uhakika unataka kuondoa kituo hiki kutoka kwa vipendwa?
- Kituo Kipya
- Ghairi
- Shughuli
- La
- Orodha ya vituo
- Masafa ya eneo la sasa sio sahihi. Upeo wa masafa sahihi: 87.5-108.0
- Kadi yako ya SD inakosekana!
- Jina:
- Hariri Kituo
- Ingizo la mwisho lisilo halali, thamani halali ni 0 au 5.
- Charaza jina la faili hapa
- Unahitaji kifaa cha masikio kama antena. Tafadhali chopeka kifaa chako cha masikio.
- Hitilafu ya kindani imetokea katika kichezaji!
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-th/strings.xml b/MediaTek/FmRadio/res/values-th/strings.xml
deleted file mode 100755
index 916fe97..0000000
--- a/MediaTek/FmRadio/res/values-th/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- วิทยุ FM
- รายการสถานี
- เพิ่มลงในรายการโปรด
- ค้นหา
- ออก
- การใช้งาน
- แก้ไข
- ลบออกจากรายการที่ชอบ
- คุณจำเป็นต้องมีหูฟังเพื่อใช้เป็นเสาอากาศ โปรดเสียบหูฟังของคุณ
- เสียบหูฟัง
- "ใช่"
- "ไม่"
- ตกลง
- ยกเลิก
- ค้นหา
- ค้นหาสถานี...
- ชื่อ:
- ความถี่:
- แก้ไขแชนเนล
- สถานีใหม่
- ยืนยันการลบ ช่อง
- แน่ใจหรือไม่ว่าคุณต้องการลบช่องนี้?
- ไม่สามารถเพิ่มช่องไปยังรายการโปรดได้ เนื่องจากรายการเต็ม
- ช่องนี้อยู่ในรายการโปรดอยู่แล้ว
- ลบออกจากรายการที่ชอบสำเร็จแล้ว
- เพิ่มลงในรายการที่ชอบสำเร็จแล้ว
- ค้นหาจากแชนเนลที่มี:
- ไม่สามารถค้นหาจากแชนเนลที่มี
- การตั้งค่า RDS
- ข้อมูลแชนเนล
- ความถี่ทางเลือก
- เพิ่มเติม
- เปิด/ปิด
- โหมดเสียง
- MHz
- เสียบหูฟังเพื่อใช้เป็น เสาอากาศวิทยุ
-
- "เขียนทับ"
- บันทึกเสียงวิทยุ
- การบันทึกของคุณจะหายไปเนื่องจากการถอด SD ออก!
- เริ่มบันทึกเสียง
- การ์ด SD ของคุณหายไป
- มีเนื้อที่ว่างในการ์ด SD ไม่เพียงพอ!
- เกิดความผิดพลาดภายในในตัวเครื่องบันทึก!
- เกิดความผิดพลาดภายในในตัวเครื่องเล่น!
- ขั้นแรกกรุณาเปิด FM!
- บันทึกเสียงวิทยุ
- บันทึก
- ยกเลิก
- พิมพ์ชื่อไฟล์ที่นี่
- บันทึกไฟล์อัดเสียง
- มีเนื้อที่เก็บไม่เพียงพอ! คุณต้องการบันทึกการบันทึกปัจจุบันหรือไม่
- มีอยู่แล้ว
- ความถี่ใช้ไม่ได้สำหรับที่ตั้งปัจจุบัน ช่วงความถี่ที่ใช้ได้: 87.5-108.0.
- ข้อมูลที่ป้อนล่าสุดไม่ถูกต้อง ค่าที่ถูกต้องคือ 0 หรือ 5
- คุณไม่สามารถเปิดใช้งานวิทยุเอฟเอ็มได้เมื่อคุณกำลังโทร
- รายการสถานีว่างอยู่
- "ลำโพง"
- หูฟัง
- ขณะนี้ใช้ไม่ได้
- เพิ่มลงในช่องที่ตั้งไว้
- ลบออกจากช่องที่ตั้งไว้
- ยืนยันการลบออกจากช่องที่ตั้งไว้
- คุณแน่ใจว่าต้องการลบช่องนี้ออกจากช่องที่ตั้งไว้หรือไม่
- ไม่สามารถเพิ่มช่องลงในรายการช่องที่ตั้งไว้ได้ เนื่องจากรายการเต็ม
- ช่องนี้มีอยู่ในรายการช่องที่ตั้งไว้แล้ว
- ลบออกจากช่องที่ตั้งไว้สำเร็จแล้ว
- เพิ่มลงในช่องที่ตั้งไว้สำเร็จแล้ว
-
diff --git a/MediaTek/FmRadio/res/values-tl/strings.xml b/MediaTek/FmRadio/res/values-tl/strings.xml
deleted file mode 100755
index 3509ba6..0000000
--- a/MediaTek/FmRadio/res/values-tl/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- DM Radyo
- Listahan ng channel
- Magdagdag sa Paborito
- Maghanap
- Lumabas
- Mga Operasyon
- I-edit
- Alisin mula sa mga paborito
- Kailangan mo ng earphone bilang antenna. Pakisaksak ang earphone mo.
- Isaksak ang earphone
- Oo
- Wala
- OK
- Kanselahin
- I-scan
- Hanapan ang mga channerl…
- Pangalan:
- Dalas:
- I-edit ang Channel
- Bagong Channel
- Kumpirmahin ang pag-alis mula sa mga paborito
- Sigurado ka bang nais mong alisin ang channel na ito mula sa mga paborito?
- Hindi maidagdag ang channel sa listahan ng paborito dahil puno na ito.
- Nasa listahan na ng paborito ang channel na ito.
- Tagumpay na inalis mula sa mga paborito.
- Tagumpay na naidagdag sa mga paborito.
- Hinanapan ang mga magagamit na channel.
- Hindi mahanap ang magagamit na channel.
- Hindi balidong frequency para sa kasalukuyang lokasyon. Sakop ng balidong frequency: 87.5-108.0.
- Mga RDS na setting
- Impormasyon sa channel
- Alternatibong frequency
- Mode ng tunog
- Marami Pang Apps
- power
- MHz
- I-plug ang earphones mo para gamitin bilang antenna ng radyo.
-
- "I-overwrite"
- FM na recorder
- Ang recording mo ay mawawala dahil sa pagtanggal ng SD!
- Simulan ang pag-record…
- Nawawala ang SD card mo!
- Hindi sapat na espasyo ng SD card!
- May panloob na error na naganap sa recorder!
- May panloob na error na naganap sa player!
- Paki-paganahin muna ang FM!
- I-record ang FM
- I-save
- Itapon
- I-type ang pangalan ng file dito
- I-save ang file ng recording
- Hindi sapat ang imbakan! Gusto mo bang i-save ang kasalukuyang recording?
- umiiral na
- Ang huling hindi balidong input, balidong halaga ay 0 o 5.
- Hindi mo maila-launch ang FM Radio kapag nasa tawag ka.
- Walang laman ang listahan ng channel.
- "Speaker"
- Headset
- Kasalukuyang hindi magagamit
- Idagdag sa mga naka-set anng channel
- Alisin mula sa mga naka-set nang channel
- Kumpirmahin ang pag-alis mula sa mga naka-set nang channel
- Sigurado ka bang gusto mong alisin ang channel na ito mula sa mga preset na channel?
- Hindi maidagdag ang channel sa listahan na preset dahil puno na ito.
- Nasa listahan na ng preset na channel ang channel na ito.
- Tagumpay na inalis mula sa mga naka-set nang channel.
- Tagumpay na idinagdag mula sa mga naka-set nang channel.
-
diff --git a/MediaTek/FmRadio/res/values-tr/strings.xml b/MediaTek/FmRadio/res/values-tr/strings.xml
deleted file mode 100755
index 800f5f6..0000000
--- a/MediaTek/FmRadio/res/values-tr/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- FM Radyo
- Kanal listesi
- Sık Kullanılanlara Ekle
- Ara
- Exit
- İşlemler
- Düzenle
- Sık kullanılanlardan kaldır
- Anten işlevi için bir kulaklık gerekiyor. Lütfen kulaklığınızı takın.
- Kulaklığı takın
- Evet
- Hayır
- Tamam
- İptal
- Tara
- Kanalları ara…
- Ad:
- Sıklık:
- Kanalı Düzenle
- Yeni Kanal
- Kanal Silme İşlemini Onayla
- Bu kanalı silmek istediğinizden emin misiniz?
- Sık kullanılanlar listesi dolu olduğu için listeye kanal eklenemiyor.
- Bu kanal zaten sık kullanılanlar listesinde.
- Sık kullanılanlardan başarıyla kaldır.
- Sık kullanılanlara başarıyla eklendi.
- Uygun kanallar bulundu:
- Uygun kanal bulunamıyor.
- RDS ayarları
- Kanal bilgileri
- Alternatif frekans
- Diğer Uyg
- Ses modu
- üstü
- MHz
- Radyo anteni olarak kullanmak için kulaklıklarınızı takın.
-
- "Üzerine yaz"
- FM kaydedici
- SD çıkarıldığı için kaydınız kaybolacak!
- Kayıdı başla…
- SD kartınız yok!
- Yetersiz SD kartı alanı!
- Kayıt cihazında dahili hata oluştu!
- Müzik çalarda dahili hata oluştu!
- "Lütfen ilk önce FM'i açın!"
- "FM'i kaydet"
- Kaydet
- Çıkar
- Dosya adını buraya yazın
- Kayıt dosyasını kaydet
- Yetersiz depolama alanı! Mevcut kaydı kaydetmek istiyor musunuz?
- Zaten var
- Şu anki konum için geçersiz frekans. Geçerli frekans aralığı: 87,5 - 108,0.
- "En son geçersiz giriş, geçersiz değer 0 veya 5'dir."
- "Görüşme sırasında FM Radyo'yu başlatmazsınız."
- Kanal listesi boş.
- "Hoparlör"
- Kulaklık
- Şu anda kullanılamaz
- Önceden ayarlanmış kanallara ekle
- Önceden ayarlanmış kanallardan sil
- Önceden ayarlanmış kanallardan silmeyi onayla
- Bu kanalı önceden ayarlanmış kanallar arasından silmek istediğinizden emin misiniz?
- Önceden ayarlanmış kanal listesi dolu olduğundan kanal eklenemiyor.
- Bu kanal zaten önceden ayarlanmış kanal listesinde var.
- Önceden ayarlanmış kanallardan başarıyla silindi.
- Önceden ayarlanmış kanallara başarıyla eklendi.
-
diff --git a/MediaTek/FmRadio/res/values-uk/strings.xml b/MediaTek/FmRadio/res/values-uk/strings.xml
deleted file mode 100755
index 7a8678a..0000000
--- a/MediaTek/FmRadio/res/values-uk/strings.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- FM-радіо
- Список каналів
- Додати до улюбленого
- Пошук
- Вихід
- Операції
- Редагувати
- Видалити з улюбленого
- Навушники потрібні як антена. Будь ласка, підключіть навушники.
- Увімкніть навушники
- "Так"
- "Ні"
- ОК
- Скасувати
- Пошук
- Пошук каналів...
- Назва:
- Частота:
- Редагувати канал
- Новий канал
- Підтвердити видалення з улюбленого
- Точно видалити цей канал з улюблених?
- Неможливо додати канал до списку улюблених: він повний.
- Цей канал вже у списку улюбленого.
- Успішно видалено з улюблених.
- Успішно додано до улюблених.
- Пошук доступних каналів:
- Неможливо знайти доступні канали.
- Недійсна частота для поточного розташування. Дійсний діапазон частот 87,5 - 108,0
- Недійсне останнє введення. Дійсне значення 0 або 5.
- Налаштування RDS
- Інфо канала
- Альтернативна частота
- Режим звуку
- "Більше"
- "показник ступеня"
- Неможливо запустити FM-радіо під час виклику.
- Список каналів порожній.
- Перезапис
- МГц
- Підключіть навушники для використання в якості радіоантени.
- FM-запис
- Запис буде втрачено через зняття SD!
- Почати запис...
- Відсутня карта SD!
- Недостатньо місця на карті SD.
- Внутрішня помилка диктофона!
- Внутрішня помилка програвача!
- Будь ласка, спочатку увімкніть живлення FM!
- Запис FM
- "Зберегти"
- Відхилити
- Наберіть тут назву файла
- Зберегти файл, що записується
- "Недостаньо пам'яті! Бажаєте зберегти поточний запис?"
- вже існує
- Динамік
- Навушник
- Зараз недоступний
- Додати до поточних каналів
- Видалити з поточних каналів
- Підтвердіть видалення з поточних каналів
- Точно видалити цей канал з поточних?
- Неможливо додати канал до списку поточних: він повний.
- Цей канал вже у списку поточних.
- Успішно видалено з поточних.
- Успішно додано до поточних каналів.
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values-ur/strings.xml b/MediaTek/FmRadio/res/values-ur/strings.xml
deleted file mode 100755
index 5b31f8a..0000000
--- a/MediaTek/FmRadio/res/values-ur/strings.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
- ایف ایم ریڈیو
- چینل کی فہرست
- پسند میں شامل کرنا
- تلاش کرنا
- خارج ہونا
- آپریشن
- ترمیم کرنا
- پسندیدگان سے ہٹائيں
- آپ کو انٹینا کے بطور ایک ایر فون درکار ہے۔ براہ کرم اپنا ایرفون لگائیں۔
- ائیرفون لگائیں
- ہاں
- نہیں
- ٹھیک ہے
- منسوخ کرنا
- اسکین
- چینلز اسکین کریں…
- نام:
- فریکوئنسی:
- چینل میں ترمیم کریں
- نیا چینل
- چینل حذف کرنا یقینی بنانا
- کیا آپ واقعی یہ چینل حذف کرنا چاہتے ہیں؟
- پسندیدہ فہرست میں چینل شامل نہیں ہوسکتا کیوں کہ یہ بھری ہوا ہے۔
- یہ پہلے سے ہی پسندیدہ فہرست میں موجود ہے۔
- پسندیدگان سے کامیابی کے ساتھ ہٹایا گیا۔
- پسندیدگان میں کامیابی سے شامل کیا گيا۔
- تلاش کردہ دستیاب چینلز:
- دستیبات چینل تلاش نہیں کرسکتا۔
- RDS ترتیبات
- چینل کی معلومات
- متبادل تعدد
- مزید ایپلی کیشن
- پاور
- آواز کی وضع
- اس کے اوپر تحریر کریں
- MHz
- ریڈیو انٹینا کے بطور استعمال کرنے کے لیے اپنے ایر فون لگائیں۔
-
- ایف ایم ریکارڈر
- SD ہٹانے کی وجہ سے آپ کی ریکارڈنگ ختم ہوجائے گی!
- ریکارڈ کرنا شروع کریں…
- آپ کا SD کارڈ غائب ہے!
- SD کارڈ میں جگہ کافی نہيں!
- ریکارڈر میں اندرونی غلطی واقع!
- پلئیر میں اندرونی غلطی واقع!
- برائے مہربانی پہلے FM کھولیں!
- FM ریکارڈ کریں
- محفوظ کریں
- رد کریں
- فائل کا نام یہاں لکھیں
- ریکارڈنگ کی فائل محفوظ کریں
- ذخیرہ کافی نہيں ہے! کیا آپ حالیہ ریکارڈنگ محفوظ کرنا چاہتے ہيں؟
- پہلے سے موجود ہے
- حالیہ مقام کے لئے غلط فریکوینسی۔ جائز فریکوینسی کا دائرہ کار: 87.5-108.0.
- آخری غلط اندرج، درست قدر 0 اور 5 ہے۔
- آپ کال میں رہنے کے دوران FM ریڈیو لانچ نہیں کرسکتے۔
- چینل کی فہرست خالی ہے۔
- اسپیکر
- ہیڈ سیٹ
- ابھی دستیاب نہیں ہے
- پہلے سے مرتب کردہ چینلوں میں شامل کریں
- پہلے سے مرتب کردہ چینلوں سے ہٹائيں
- پہلے سے مرتب کردہ چینلوں سے ہٹانے کی تصدیق کریں
- کیا آپ واقعی اس چینل کو پہلے سے مرتب کردہ چینلوں سے مٹانا چاہتے ہيں؟
- پہلے سے مرتب کردہ چینل کی فہرست پر ہونے کی وجہ سے چینل کو پہلے سے مرتب کردہ چینل کی فہرست میں شامل نہیں کیا جاسکتا۔
- یہ چینل پہلے ہی پہلے سے مرتب کردہ چینل کی فہرست میں موجود ہے۔
- پہلے سے مرتب کردہ چینلوں کی فہرست سے کامیابی سے ہٹایا گیا۔
- پہلے سے مرتب کردہ چینلوں میں کامیابی سے شامل کیا گيا۔
-
-
diff --git a/MediaTek/FmRadio/res/values-vi/strings.xml b/MediaTek/FmRadio/res/values-vi/strings.xml
deleted file mode 100755
index bd66447..0000000
--- a/MediaTek/FmRadio/res/values-vi/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- Đài FM
- D.sách kênh
- Thêm vào Mục y.thích
- Tìm kiếm
- Thoát
- Thao tác
- Sửa
- Xóa khỏi mục yêu thích
- Bạn cần dùng tai nghe làm ăngten. Hãy cắm tai nghe.
- Cắm tai nghe
- "Có"
- "Không"
- OK
- Hủy
- Dò
- Đang dò kênh…
- Tên:
- Tần suất:
- Sửa kênh
- Kênh mới
- Xác nhận xóa kênh
- Bạn chắc chắn muốn xóa kênh này?
- Không thể thêm kênh vào d.sách yêu thích vì đã đầy.
- Kênh này đã có trong d.sách yêu thích.
- Đã xóa thành công khỏi mục yêu thích.
- Đã thêm thành công vào mục yêu thích.
- Các kênh có sẵn đã tìm thấy:
- Không tìm thấy kênh có sẵn.
- Cài đặt RDS
- Thông tin kênh
- Tần số thay thế
- Ứng dụng khác
- lũy thừa
- C.độ âm thanh
- MHz
- Cắm tai nghe để dùng làm ăng ten đài FM.
-
- "Ghi đè"
- Máy ghi âm FM
- Bản ghi âm của bạn sẽ bị mất do tháo thẻ SD!
- Bắt đầu ghi âm…
- Thẻ SD của bạn bị thiếu!
- D.lượng thẻ SD không đủ!
- Đã xảy ra lỗi nội bộ trong máy ghi âm!
- Đã xảy ra lỗi nội bộ trong trình phát!
- Hãy bật nguồn đài FM trước!
- Ghi âm đài FM
- Lưu
- Hủy bỏ
- Nhập tên file vào đây
- Lưu file ghi âm
- Bộ nhớ không đủ! Bạn muốn lưu lại bản ghi hiện hành?
- Đã tồn tại
- Tần số không hợp lệ cho địa điểm hiện tại. Phạm vi tần số hợp lệ: 87,5-108,0.
- Nhập số cuối không hợp lệ, giá trị hợp lệ là 0 hoặc 5.
- Bạn không thể bật đài FM khi đang gọi điện.
- Danh sách kênh trống.
- "Loa"
- Tai nghe
- Hiện không có sẵn
- Thêm vào các kênh cài sẵn
- Xóa khỏi các kênh cài sẵn
- Xác nhận xóa khỏi các kênh cài sẵn
- Bạn chắn chắn muốn xóa kênh này khỏi các kênh cài sẵn?
- Không thể thêm kênh vào d.sách kênh cài sẵn vì đã đầy.
- Kênh này đã có trong d.sách kênh cài sẵn.
- Đã xóa thành công khỏi các kênh cài sẵn.
- Đã thêm thành công vào các kênh cài sẵn.
-
diff --git a/MediaTek/FmRadio/res/values-zh-rCN/strings.xml b/MediaTek/FmRadio/res/values-zh-rCN/strings.xml
deleted file mode 100755
index 97cd5d9..0000000
--- a/MediaTek/FmRadio/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- 收音机
- 频道列表
- 添加到收藏
- 搜索
- 退出
- 操作
- 编辑
- 取消收藏
- 您需要使用耳机来充当天线。请插入耳机。
- 插入耳机
- 是
- 否
- 确定
- 取消
- 搜索
- 搜索频道中…
- 名字:
- 频率:
- 编辑频道
- 新频道
- 确认取消收藏
- 您要取消收藏这个频道吗?
- 收藏栏已满,无法添加。
- 该频道已在收藏栏中。
- 已取消收藏。
- 收藏成功。
- 共找到有效频道:
- 找不到有效频道。
- 无效频段。有效频率范围:87.5-108.0。
- 最后一位输入无效,有效值为0或5。
- RDS设置
- 频道信息
- 自动切换频率
- 声音模式
- 更多
- 电源
- 通话中无法打开收音机。
- 频道列表为空。
- 扬声器
- 耳机
- "覆盖"
- 兆赫
- 耳机是收音机的天线,请插入耳机。
-
- FM录音
- 由于SD卡被移除,录音文件将丢失!
- 开始录音...
- 存储卡丢失!
- SD卡存储空间不足!
- 录音机发生内部错误!
- 播放器发生内部错误!
- 请先打开FM!
- FM录音
- 保存
- 放弃
- 在这里输入文件名称
- 保存录音文件
- 存储空间不足!是否要保存当前录音?
- 已存在
- 当前不可用
- 添加至预置频道
- 从预置频道中删除
- 确认频道删除
- 您要删除这个预置频道吗?
- 预置栏已满,无法添加。
- 该频道已在预置栏中。
- 已从预置栏中删除频道。
- 已将频道添加到预置栏。
-
diff --git a/MediaTek/FmRadio/res/values-zh-rHK/strings.xml b/MediaTek/FmRadio/res/values-zh-rHK/strings.xml
deleted file mode 100755
index 821b450..0000000
--- a/MediaTek/FmRadio/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
- FM 收音機
- 頻道清單
- 新增至我的最愛
- 新增至預設頻道
- "搜尋"
- "結束"
- 操作
- "編輯"
- 從我的最愛移除
- 從預設頻道刪除
- 你需要耳機作為天線。請插上你的耳機。
- 插入耳機
- "是"
- "否"
- "確定"
- "取消"
- "搜尋"
- 搜索頻道......
- 名字:
- 頻率:
- 編輯通道
- 新頻道
- 確認從我的最愛刪除
- 確認從預設頻道刪除
- 你確定你要從我的最愛中刪除此頻道?
- 是否確定要從預設的頻道刪除此頻道?
- 無法新增此頻道到我的最愛清單,因為它已滿。
- 無法新增此頻道到我的預設頻道清單中,因為它已滿。
- 此頻道已在我的最愛清單中。
- 此頻道已在預設的頻道清單中。
- 成功地從我的最愛中刪除。
- 成功從預設頻道中移除。
- 已成功新增到我的最愛。
- 已成功新增到預設頻道。
- 搜詢出可用的頻道:
- 無法搜詢出可用的頻道。
- 不正確頻率為當前所在的位置。有效頻率範圍: 87.5-108.0
- 最後一個無效輸入,有效的值是 0 或 5。
- RDS 的設定
- 頻道資訊
- 可替代頻率
- 聲音模式
- "更多"
- "指數"
- 撥接中,無法進行FM收音機。
- 頻道清單是空的。
- "覆寫"
- MHz
- 插入耳機當作收音機天線。
- FM 答錄機
- 因SD卡的移除,您的錄音檔將遺失 !
- 開始錄製......
- 你的 SD 已遺失 !
- SD 卡空間不足 !
- 在答錄機中出現內部錯誤 !
- 在播放機中出現內部錯誤 !
- 首先請打開FM電源 !
- 記錄FM
- "儲存"
- "捨棄"
- 在此輸入檔案名稱
- 將錄音檔保存
- 儲存空間不足 !您想保存當前錄製嗎?
- 已存在
- "揚聲器"
- 耳機
- 現在不可用
-
diff --git a/MediaTek/FmRadio/res/values-zh-rTW/strings.xml b/MediaTek/FmRadio/res/values-zh-rTW/strings.xml
deleted file mode 100755
index b9e47c6..0000000
--- a/MediaTek/FmRadio/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- 調頻廣播
- 頻道清單
- 新增到我的最愛
- 搜尋
- 結束
- 操作
- 編輯
- 從我的最愛移除
- 您需要耳機充當天線。請插入您的耳機。
- 插入耳機
- 是
- 否
- 確定
- 取消
- 搜尋
- 搜尋頻道...
- 名稱:
- 頻率:
- 編輯頻道
- 新頻道
- 確認從我的最愛移除
- 您是否確定要從我的最愛移除這個頻道?
- 由於已滿,而無法將頻道新增到我的最愛清單。
- 這個頻道已在我的最愛清單內。
- 已成功從我的最愛移除。
- 已成功新增至我的最愛。
- 找到可用頻道:
- 找不到可用頻道。
- 目前位置的頻率無效。有效頻率範圍:87.5至108.0
- 最近一次輸入無效,有效值為0或5。
- RDS設定
- 頻道資訊
- 替代頻率
- 更多應用程式
- 電源
- 音效模式
- 你在通話時,無法啟動調頻(FM)廣播。
- 頻道清單空白。
- 擴音器
- 耳機
- "覆寫"
- 兆赫
- 插入耳機當作收音機天線。
-
- 調頻(FM)錄音機
- 您的錄音將因SD記憶卡移除而遺失!
- 開始錄製…
- 您的SD記憶卡遺失中!
- SD記憶卡空間不足!
- 錄製程式發生內部錯誤!
- 播放程式發生內部錯誤!
- 請先打開FM的電源!
- 錄製 FM
- 儲存
- 捨棄
- 在這裡輸檔案名稱入
- 儲存錄製檔案
- 儲存空間不足!要儲存目前錄製的資料?
- 已經存在
- 目前不可用
- 新增到預設頻道
- 從預設頻道中移除
- 確認從預設頻道移除
- 您是否確定要從預設頻道移除這個頻道?
- 由於已滿,而無法將頻道新增到預設頻道清單。
- 這個頻道已在預設頻道清單內。
- 已成功從預設頻道移除。
- 已成功新增至預設頻道。
-
diff --git a/MediaTek/FmRadio/res/values-zu/strings.xml b/MediaTek/FmRadio/res/values-zu/strings.xml
deleted file mode 100755
index ecc4715..0000000
--- a/MediaTek/FmRadio/res/values-zu/strings.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
- Umsakazo we-FM
- Sesha
- Yebo
- Isikhulumi
- Bhala ngaphezulu
- Qala ukuqopha...
- MHz
- Uhlu lweshaneli alunalutho.
- Amasethingi e-RDS
- Hlolile amashaneli atholakalayo:
- ivele ikhona
- faka ama-earphone
- Engeza Kokuthandwayo
- Isikhala asanele kwikhadi le-SD!
- Qinisekisa ukususa kokuthandwayo
- Qopha i-FM
- I-earphone
- Imowudi yomsindo
- Leshaneli isivele ukuhlu lokuthandwayo.
- Okwamanje ayitholakali
- Isuswe ngempumelelo kokuthandwayo.
- Yongezwe ngokuyimpumelelo kokuthandwayo.
- Imniningwane yeshaneli
- Ayongezeki ishaneli kuhlu lokuthandwayo ngenxa yokuba igcwele.
- Gcina
- Sesha
- Ifrikwensi Enye
- Sesha amashaneli...
- Phuma
- Okuningi
- Khipha
- Lungisa
- Akusesheki amashaneli atholakalayo.
- Isikhala sokugcina asanele! Uyafuna ukugcina lokuqopha kwamanje?
- Ngeke ukwazi ukuphumisa umsaka we-FM uma usefonini.
- Ifrikwensi:
- Kwenzeke iphutha ngaphakathi kwisiqophi!
- Gcina ifayela yokuqopha
- KULUNGILE
- Ugesi
- Susa kokuthandwayo
- Sicela ukhanyise i-FM kuqala!
- Isiqophi se-FM
- Ukuqopha kwakho kuzolahleka ngenxa yokususwa kwe-SD!
- Unesiqiniseko sokuthi ufuna ukususa leshaneli kokuthandwayo?
- Ishanelo Entsha
- Khansela
- Imisebenzi
- Cha
- Uhlu lweshaneli
- Ifrikwensi engaqinisekisiwe yendawo yamanje. Indawo eqinisekisiwe yefrikwensi: u-87.5 – 108.0
- Ikhadi lakho le-SD lilahlekile!
- Igama:
- Lungisa ishaneli
- Okokugcina okufakiwe phakathi akuqisekiwe, inani eliqinisekisiswe u-0 noma u-5.
- Bhala igama lefayela lapha
- Udinga i-earphone njenge eriyeli. Sicela ufake i-earphone yakho.
- Kwenzeke iphutha ngaphakathi kwi-Player!
-
\ No newline at end of file
diff --git a/MediaTek/FmRadio/res/values/strings.xml b/MediaTek/FmRadio/res/values/strings.xml
deleted file mode 100755
index 0967189..0000000
--- a/MediaTek/FmRadio/res/values/strings.xml
+++ /dev/null
@@ -1,149 +0,0 @@
-
-
-
- FM Radio
- Channel list
- Add to Favorite
- Search
- Exit
- Operations
- Edit
- Remove from favorites
- You need an earphone as antenna. Please plug in your earphone.
- Plug in earphone
- Yes
- No
- OK
- Cancel
- Search
- Search channels...
- Name:
- Frequency:
- Edit Channel
- New Channel
- Confirm remove from favorites
- Are you sure you want to remove this channel from favorites?
- Cannot add the channel to favorite list because it is full.
- This channel is already in favorite list.
- Successfully removed from favorites.
- Successfully added to favorites.
- Searched out available channels:
- Cannot search out available channel.
- Invalid frequency for current location. Valid frequency scope: 87.5-108.0
- The last invalid input, valid value is 0 or 5.
- RDS settings
- Channel information
- Alternative frequency
- Sound mode
- More
- Power
- You can not launch FM Radio when you are in call.
- Channel list is empty.
- Overwrite
- MHz
- Plug in your earphones to use as a radio antenna.
-
- FM Recorder
- Your recording will be lost due to SD removal!
- Start recording...
- Your SD card is missing!
- Insufficient SD card space!
- An internal error occured in recorder!
- An internal error occured in player!
- Please power up FM first!
- Record FM
- Save
- Discard
- Type file name here
- Save recording file
- Insufficient storage! Do you want to save current recording?
- already exists
- Speaker
- Earphone
- Currently not available
- Add to preset channels
- Remove from preset channels
- Confirm remove from preset channels
- Are you sure you want to remove this channel from preset channels?
- Cannot add the channel to preset channel list because it is full.
- This channel is already in preset channel list.
- Successfully removed from preset channels.
- Successfully added to preset channels.
-
-
- Freq(MHz)
- Tune
- Antenna Type
- Short
- EarPhone
- Status
- Force Set:
- Stereo/Mono:
- Stereo
- Mono
- detecting...
- RSSI(dBm):
- detecting...
- CapArray(pF):
- detecting...
- RDS
- Ratio:
- detecting...
- PS:
- None.
- RT:
- None.
- Hardware Version
- Chip ID
- None.
- ECO Version
- None.
- Patch Version
- None.
- DSP Version
- None.
- RSSI THRESHOLD
- SMG
- Desense RSSI
- OK
- 0X
- CMD EXPAND
- CMD EXPAND RETURN VALUE
- 0
-
diff --git a/MediaTek/FmRadio/res/values/strings_test.xml b/MediaTek/FmRadio/res/values/strings_test.xml
deleted file mode 100755
index 1bdedc4..0000000
--- a/MediaTek/FmRadio/res/values/strings_test.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- 成功
- 失败
- 搜索
-
diff --git a/MediaTek/FmRadio/res/values/styles.xml b/MediaTek/FmRadio/res/values/styles.xml
deleted file mode 100755
index 34c1a83..0000000
--- a/MediaTek/FmRadio/res/values/styles.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioActivity.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioActivity.java
deleted file mode 100755
index f40619c..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioActivity.java
+++ /dev/null
@@ -1,2196 +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) 2011-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.
- */
-
-package com.mediatek.fmradio;
-
-import android.app.ActionBar;
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.content.SharedPreferences;
-import android.media.AudioManager;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.SystemClock;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
-import android.widget.ImageButton;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.PopupMenu;
-import android.widget.PopupMenu.OnDismissListener;
-import android.widget.PopupMenu.OnMenuItemClickListener;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.mediatek.fmradio.dialogs.NoAntennaDialog;
-import com.mediatek.fmradio.dialogs.SearchChannelsDialog;
-import com.mediatek.fmradio.ext.IProjectStringExt;
-
-import java.io.File;
-/* Vanzo:libing on: Thu, 15 May 2014 19:34:51 +0800
- */
-import java.io.FileReader;
-import java.io.IOException;
-import android.app.ActivityManager;
-import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener;
-import android.hardware.SensorManager;
-import android.os.SystemProperties;
-//import com.android.featureoption.FeatureOption;
-// End of Vanzo:libing
-
-/**
- * This class interact with user, provider FM basic function and FM recording
- * function
- */
-public class FmRadioActivity extends Activity implements
-/* Vanzo:libing on: Thu, 15 May 2014 19:36:32 +0800
- */
- SensorEventListener,
-// End of Vanzo:libing
- OnMenuItemClickListener, OnDismissListener,
- NoAntennaDialog.NoAntennaListener,
- SearchChannelsDialog.CancelSearchListener,
- FmRecordDialogFragment.OnRecordingDialogClickListener {
- // Logging
- private static final String TAG = "FmRx/Activity";
-
- // Dialog tags
- private static final String TAG_SEARCH = "Search";
- private static final String TAG_SAVE_RECORDINGD = "SaveRecording";
- private static final String TAG_NO_ANTENNA = "NoAntenna";
-
- // Use shared preference to store record or play time
- private static final String REFS_NAME = "FMRecord";
- private static final String START_RECORD_TIME = "startRecordTime";
- private static final String START_PLAY_TIME = "startPlayTime";
-
- // Request code
- private static final int REQUEST_CODE_FAVORITE = 1;
-
- // FM
- private static final String FM = "FM";
- // Short antenna support
- private static final boolean SHORT_ANNTENNA_SUPPORT = FmRadioUtils.isFmShortAntennaSupport();
-
- // UI views
- private TextView mTextStationName = null;
- private TextView mTextStationValue = null;
- // RDS text view
- private TextView mTextRds = null;
- // Text view display "FM"
- private TextView mTextFm = null;
- // Text View display "MHZ"
- private TextView mTextMHz = null;
- private TextView mTxtRecInfoLeft = null;
- private TextView mTxtRecInfoRight = null;
- private ImageButton mButtonDecrease = null;
- private ImageButton mButtonPrevStation = null;
- private ImageButton mButtonNextStation = null;
- private ImageButton mButtonIncrease = null;
- private ImageButton mButtonAddToFavorite = null;
- private ImageButton mButtonRecord = null;
- private ImageButton mButtonStop = null;
- private ImageButton mButtonPlayback = null;
- private Animation mAnimation = null;
- private ImageView mAnimImage = null;
-
- // Layout display recording file information
- private RelativeLayout mRLRecordInfo = null;
-
- // Menu items
- private MenuItem mMenuItemChannelList = null;
- private MenuItem mMenuItemOverflow = null;
- private MenuItem mMenuItemPower = null;
- private PopupMenu mPopupMenu = null;
-
- // State variables
- private boolean mIsServiceStarted = false;
- private boolean mIsServiceBinded = false;
- private boolean mNeedTuneto = false;
- private boolean mIsNeedDisablePower = false;
- private boolean mIsPlaying = false;
- private boolean mIsInRecordingMode = false;
- private boolean mIsNeedShowRecordDlg = false;
- private boolean mIsNeedShowNoAntennaDlg = false;
- private boolean mIsNeedShowSearchDlg = true;
- private boolean mIsActivityForeground = true;
-
- // Record variables
- private long mRecordStartTime = 0;
- private long mPlayStartTime = 0;
- private int mPrevRecorderState = FmRecorder.STATE_INVALID;
- private int mCurrentStation = FmRadioUtils.DEFAULT_STATION;
- private int mRecordState = 0;
-
- // Instance variables
- private FmRadioService mService = null;
- private Context mContext = null;
- private Toast mToast = null;
- private FragmentManager mFragmentManager = null;
- private AudioManager mAudioManager = null;
-
- // Plugin
- private IProjectStringExt mProjectStringExt = null;
-/* Vanzo:libing on: Fri, 02 Aug 2013 15:31:08 +0800
- */
- private static final String GESTURE_SWITCH_FLAG = "persist.sys.gesture_switch";
- private static final String GESTURE_FMRADIO_FLAG = "persist.sys.gesture_fmradio";
-
- // 1.first psensor value large than the GESTURE_FMRADIO_MAX_DISTANCE
- private static int GESTURE_FMRADIO_MAX_DISTANCE = 350;
- // 2.second psensor value small than the GESTURE_FMRADIO_MIN_DISTANCE
- private static int GESTURE_FMRADIO_MIN_DISTANCE = 150;
- // delay time of the gesture run hander,200 is 0.2s
- private static final int GESTURE_RUN_POST_DELAY_TIME = 200;
- private SensorManager mSensorManager;
- private Sensor mSensor = null;
- private Handler myHandler;
- private int mPrePsensor = 0;
-
- private boolean mGestureEnabled;
- private boolean mFMRadioEnabled;
- private boolean mHavePsensor = true;
- private boolean mHadGesture = false;
-// end of vanzo:libing
-/* Vanzo:lupei on: Fri, 28 Aug 2015 14:50:36 +0800
- * add default gesture distance max min value
- */
- //private String DEFAULT_GESTURE_DIST_MAX_MIN = com.android.featureoption.FeatureOption.VANZO_FEATURE_DEFAULT_GESTURE_DISTANCE_MAX_MIN_VALUE;
-// End of Vanzo:lupei
-
- // Service listener
- private FmRadioListener mFmRadioListener = new FmRadioListener() {
- @Override
- public void onCallBack(Bundle bundle) {
- int flag = bundle.getInt(FmRadioListener.CALLBACK_FLAG);
- Log.d(TAG, "call back method flag:" + flag);
-
- if (flag == FmRadioListener.MSGID_FM_EXIT) {
- mHandler.removeCallbacksAndMessages(null);
- }
-
- // remove tag message first, avoid too many same messages in queue.
- Message msg = mHandler.obtainMessage(flag);
- msg.setData(bundle);
- mHandler.removeMessages(flag);
- mHandler.sendMessage(msg);
- }
- };
-
- // Handle sdcard unmount event
- private final BroadcastReceiver mSdcardListener = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
-
- if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) {
- Log.d(TAG, "Sd card mounted");
- return;
- }
-
- // If not unmount recording sd card, do nothing;
- if (!isRecordingCardUnmount(intent)) {
- return;
- }
-
- if (Intent.ACTION_MEDIA_EJECT.equals(action)
- || Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) {
- FmRecordDialogFragment df = (FmRecordDialogFragment) mFragmentManager
- .findFragmentByTag(TAG_SAVE_RECORDINGD);
- if ((null != df && df.getShowsDialog()) || mIsNeedShowRecordDlg) {
- Log.d(TAG, "recording sd card unmounted,dismiss save dialog");
- dismissSaveRecordingDialog();
- mIsNeedShowRecordDlg = false;
- showToast(getString(R.string.toast_recording_lost_warning));
- }
- Log.d(TAG, "Sd card Eject or unmounted");
- }
- }
- };
-
- // Button click listeners on UI
- private final View.OnClickListener mButtonClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.btn_record:
- // if power up, record FM, else toast prompt user to power up
- Log.d(TAG, "btn record: CLICK!!");
- if (null == mService) {
- Log.d(TAG, "mService is null");
- return;
- }
- if (!mIsPlaying) {
- showToast(getString(R.string.toast_powerup_before_record_warning));
- return;
- }
- refreshRecordNotIdle();
- mRecordStartTime = SystemClock.elapsedRealtime();
- editSharedPreferences(START_RECORD_TIME, mRecordStartTime);
- mService.startRecordingAsync();
- mService.setModifiedRecordingName(null);
- break;
-
- case R.id.btn_stop:
- // stop record and stop play record file
- Log.d(TAG, "btn stop: CLICK!!");
- if (null == mService) {
- Log.d(TAG, "mService is null");
- return;
- }
- refreshRecordNotIdle();
- mService.stopRecordingAsync();
- mService.stopPlaybackAsync();
- break;
-
- case R.id.btn_playback:
- Log.d(TAG, "btn playback: CLICK!!");
- if (null == mService) {
- Log.d(TAG, "mService is null");
- return;
- }
- refreshRecordNotIdle();
- mPlayStartTime = SystemClock.elapsedRealtime();
- editSharedPreferences(START_PLAY_TIME, mPlayStartTime);
- mService.startPlaybackAsync();
- break;
-
- case R.id.button_add_to_favorite:
- Log.d(TAG, "onClick AddToFavorite start");
- updateFavoriteStation();
- Log.d(TAG, "onClick AddToFavorite end");
- break;
-
- case R.id.button_decrease:
- tuneToStation(FmRadioUtils.computeDecreaseStation(mCurrentStation));
- break;
-
- case R.id.button_increase:
- tuneToStation(FmRadioUtils.computeIncreaseStation(mCurrentStation));
- break;
-
- case R.id.button_prevstation:
- Log.d(TAG, "onClick PrevStation");
- // Search for the previous station.
- seekStation(mCurrentStation, false); // false: previous station
- // true: next station
- break;
-
- case R.id.button_nextstation:
- // Search for the next station.
- seekStation(mCurrentStation, true); // false: previous station
- // true: next station
- break;
-
- default:
- Log.d(TAG, "invalid view id");
- break;
- }
- }
- };
-
- /**
- * Main thread handler to update UI
- */
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- Log.d(TAG, "mHandler.handleMessage: what = " + msg.what +
- ",hashcode:" + mHandler.hashCode());
- Bundle bundle;
- switch (msg.what) {
- case FmRadioListener.MSGID_REFRESH:
- refreshTimeText();
- break;
-
- case FmRadioListener.MSGID_POWERUP_FINISHED:
- bundle = msg.getData();
- boolean isPowerup = bundle
- .getBoolean(FmRadioListener.KEY_IS_POWER_UP);
- mIsPlaying = isPowerup;
- Log.d(TAG, "updateFMState: FMRadio is powerup = " + isPowerup);
- stopAnimation();
- if (isPowerup) {
- refreshImageButton(true);
- refreshPopupMenuItem(true);
- refreshActionMenuItem(true);
- } else {
- showToast(getString(R.string.not_available));
- }
- // if not powerup success, refresh power to enable.
- refreshActionMenuPower(true);
- break;
-
- case FmRadioListener.MSGID_SWITCH_ANNTENNA:
- bundle = msg.getData();
- boolean isSwitch = bundle
- .getBoolean(FmRadioListener.KEY_IS_SWITCH_ANNTENNA);
- Log.d(TAG, "[FmRadioActivity.mHandler] swtich antenna: " + isSwitch);
- if (!isSwitch) {
- if (mIsActivityForeground) {
- dismissNoAntennaDialog();
- showNoAntennaDialog();
- } else {
- Log.d(TAG, "need show no antenna dialog after onResume:");
- mIsNeedShowNoAntennaDlg = true;
- }
- stopAnimation();
- // if not powerup success, refresh power to enable.
- refreshActionMenuPower(true);
- } else {
- mIsNeedShowNoAntennaDlg = false;
- dismissNoAntennaDialog();
- }
- break;
-
- case FmRadioListener.MSGID_POWERDOWN_FINISHED:
- bundle = msg.getData();
- boolean isPowerdown = bundle
- .getBoolean(FmRadioListener.KEY_IS_POWER_DOWN);
- mIsPlaying = !isPowerdown;
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(true);
- break;
-
- case FmRadioListener.MSGID_TUNE_FINISHED:
- bundle = msg.getData();
- boolean tuneFinish = bundle.getBoolean(FmRadioListener.KEY_IS_TUNE);
- boolean isPowerUp = bundle.getBoolean(FmRadioListener.KEY_IS_POWER_UP);
- // when power down state, tune from channel list,
- // will call back send mIsPowerup state.
- mIsPlaying = mIsPlaying ? mIsPlaying : isPowerUp;
-
- stopAnimation();
- // tune finished, should make power enable
- mIsNeedDisablePower = false;
- float frequency = bundle.getFloat(FmRadioListener.KEY_TUNE_TO_STATION);
- mCurrentStation = FmRadioUtils.computeStation(frequency);
- // After tune to station finished, refresh favorite button and
- // other button status.
- refreshStationUI(mCurrentStation);
- // tune fail,should resume button status
- if (!tuneFinish) {
- Log.d(TAG, "mHandler.tune: " + tuneFinish);
- refreshActionMenuItem(mIsPlaying);
- refreshImageButton(mIsPlaying);
- refreshPopupMenuItem(mIsPlaying);
- refreshActionMenuPower(true);
- return;
- }
- refreshImageButton(true);
- refreshActionMenuItem(true);
- refreshPopupMenuItem(true);
- refreshActionMenuPower(true);
- break;
-
- case FmRadioListener.MSGID_SCAN_FINISHED:
- bundle = msg.getData();
- // cancel scan happen
- boolean isScan = bundle.getBoolean(FmRadioListener.KEY_IS_SCAN);
- int tuneToStation = bundle.getInt(FmRadioListener.KEY_TUNE_TO_STATION);
- int searchedNum = bundle.getInt(FmRadioListener.KEY_STATION_NUM);
- refreshActionMenuItem(mIsPlaying);
- refreshImageButton(mIsPlaying);
- refreshPopupMenuItem(mIsPlaying);
- // ebable action menu power items
- refreshActionMenuPower(true);
-
- if (!isScan) {
- dismissSearchDialog();
- Log.d(TAG, "mHandler.scan canceled. not enter to channel list.");
- return;
- }
-
- mCurrentStation = tuneToStation;
- // After tune to station finished, refresh favorite button and
- // other button status.
- refreshStationUI(mCurrentStation);
- dismissSearchDialog();
-
- if (searchedNum == 0) {
- showToast(getString(R.string.toast_cannot_search));
- return;
- }
-
- enterChannelList();
- // Show toast to tell user how many stations have been searched
- showToast(getString(R.string.toast_channel_searched) + " " +
- String.valueOf(searchedNum));
- break;
-
- case FmRadioListener.MSGID_FM_EXIT:
- finish();
- break;
-
- case FmRadioListener.LISTEN_RDSSTATION_CHANGED:
- bundle = msg.getData();
- int rdsStation = bundle.getInt(FmRadioListener.KEY_RDS_STATION);
- refreshStationUI(rdsStation);
- break;
-
- case FmRadioListener.LISTEN_PS_CHANGED:
- case FmRadioListener.LISTEN_RT_CHANGED:
- bundle = msg.getData();
- String text = "";
- String psString = bundle.getString(FmRadioListener.KEY_PS_INFO);
- String rtString = bundle.getString(FmRadioListener.KEY_RT_INFO);
- if ((null != psString) && (psString.length() > 0)) {
- text += psString;
- }
- if ((null != rtString) && (rtString.length() > 0)) {
- if (text.length() > 0) {
- text += " ";
- }
- text += rtString;
- }
- showRds(text);
- break;
-
- case FmRadioListener.LISTEN_RECORDSTATE_CHANGED:
- bundle = msg.getData();
- int recorderState = bundle
- .getInt(FmRadioListener.KEY_RECORDING_STATE);
- Log.d(TAG, "FmRadioActivity.mHandler: recorderState = "
- + recorderState);
- updateRecordingState(recorderState);
- break;
-
- case FmRadioListener.LISTEN_RECORDERROR:
- bundle = msg.getData();
- int errorState = bundle
- .getInt(FmRadioListener.KEY_RECORDING_ERROR_TYPE);
- updateRecorderError(errorState);
- break;
-
- case FmRadioListener.LISTEN_RECORDMODE_CHANGED:
- bundle = msg.getData();
- boolean isInRecordingMode = bundle
- .getBoolean(FmRadioListener.KEY_IS_RECORDING_MODE);
- exitRecordingMode(isInRecordingMode);
- break;
-
- case FmRadioListener.LISTEN_SPEAKER_MODE_CHANGED:
- bundle = msg.getData();
- boolean isSpeakerMode = bundle
- .getBoolean(FmRadioListener.KEY_IS_SPEAKER_MODE);
- if (null != mPopupMenu) {
- Menu menu = mPopupMenu.getMenu();
- menu.findItem(R.id.fm_sound_mode).setTitle(isSpeakerMode ?
- R.string.optmenu_earphone : R.string.optmenu_speaker);
- refreshSoundModeVisiable();
- }
- break;
-
- default:
- Log.d(TAG, "invalid message");
- break;
- }
- Log.d(TAG, "handleMessage");
- }
- };
-
- // When call bind service, it will call service connect. register call back
- // listener and initial device
- private final ServiceConnection mServiceConnection = new ServiceConnection() {
-
- /**
- * called by system when bind service
- *
- * @param className component name
- * @param service service binder
- */
- @Override
- public void onServiceConnected(ComponentName className, IBinder service) {
- Log.d(TAG, "FmRadioActivity.onServiceConnected start");
- mService = ((FmRadioService.ServiceBinder) service).getService();
- if (null == mService) {
- Log.e(TAG, "ServiceConnection: Error: can't get Service");
- finish();
- return;
- }
-
- mService.registerFmRadioListener(mFmRadioListener);
- if (!mService.isServiceInited()) {
- Log.d(TAG, "ServiceConnection: FM service is not init");
- mService.initService(mCurrentStation);
- powerUpFm();
- } else {
- Log.d(TAG, "ServiceConnection: FM service is already init");
- if (mService.isDeviceOpen()) {
-
- // ALPS01768123 Need to power up for this case
- // Without earphone->Start FM->Click Home->Plug in earphone->Enter FM
- // -> Power Menu will be power down status and disabled
- // ALPS01811383 Cannot power up when in call, because cannot get AudioFocus
- if (!mService.isPowerUp() && mService.isModeNormal()) {
- Log.d(TAG, "Need to power up auto for this case");
- powerUpFm();
- } else if (!mService.isPowerUp() && !mService.isModeNormal()) {
- // if onStop() has been called before resuming this activity during
- // phone call, need check whether show no-antenna dialog.
- if (!mIsNeedShowNoAntennaDlg && !mService.isAntennaAvailable()
- && !FmRadioUtils.isFmShortAntennaSupport()) {
- Log.w(TAG, "Need to show no antenna dialog for plug out earphone in onPause state");
- dismissNoAntennaDialog();
- showNoAntennaDialog();
- }
- }
-
- // tunetostation during changing language,we need to tune
- // again when service bind success
- if (mNeedTuneto) {
- tuneToStation(mCurrentStation);
- mNeedTuneto = false;
- }
- updateCurrentStation();
- boolean isPlaying = mService.isPowerUp();
- // back key destroy activity, mIsPlaying will be the default
- // false.
- // but it may be true. so the power button will be in wrong
- // state.
- mIsPlaying = isPlaying;
- updateMenuStatus();
- updateDialogStatus();
-
- // check whether set play back button enable
- if (!isRecordFileExist()) {
- mButtonPlayback.setEnabled(false);
- }
- updateRds();
- restoreRecorderState();
- } else {
- // Normal case will not come here
- // Need to exit FM for this case
- Log.e(TAG, "ServiceConnection: service is exiting while start FM again");
- exitService();
- finish();
- }
- }
- Log.d(TAG, "FmRadioActivity.onServiceConnected end");
- }
-
- /**
- * When unbind service will call this method
- *
- * @param className The component name
- */
- @Override
- public void onServiceDisconnected(ComponentName className) {
- Log.d(TAG, "FmRadioActivity.onServiceDisconnected");
- }
- };
-
- /**
- * Update FM recording state with given state from FM service
- *
- * @param recorderState The recorder state
- */
- private void updateRecordingState(int recorderState) {
- mRecordState = recorderState;
- refreshRecordingStatus(recorderState);
-
- switch (recorderState) {
- case FmRecorder.STATE_RECORDING:
- showToast(getString(R.string.toast_start_recording));
- Log.d(TAG, "updateRecordingState:startRecording");
- mHandler.sendEmptyMessage(FmRadioListener.MSGID_REFRESH);
- break;
-
- case FmRecorder.STATE_PLAYBACK:
- mHandler.sendEmptyMessage(FmRadioListener.MSGID_REFRESH);
- break;
-
- case FmRecorder.STATE_IDLE:
- Log.d(TAG, "updateRecordingState:remove message");
- mHandler.removeMessages(FmRadioListener.MSGID_REFRESH);
- break;
-
- default:
- mHandler.removeMessages(FmRadioListener.MSGID_REFRESH);
- break;
- }
- }
-
- /**
- * Update FM recorder error with given error from FM service
- *
- * @param errorType The record error type
- */
- private void updateRecorderError(int errorType) {
- Log.d(TAG, "updateRecorderError.errorType: " + errorType);
- String showString = null;
- // In FMRecorder.startRecording() error occurs,then we should set
- // mButtonRecord enable, because we set mButtonRecord disable ago
- refreshRecordIdle();
- switch (errorType) {
- case FmRecorder.ERROR_SDCARD_NOT_PRESENT:
- showString = getString(R.string.toast_sdcard_missing);
- break;
-
- case FmRecorder.ERROR_SDCARD_INSUFFICIENT_SPACE:
- showString = getString(R.string.toast_sdcard_insufficient_space);
- break;
-
- case FmRecorder.ERROR_RECORDER_INTERNAL:
- showString = getString(R.string.toast_recorder_internal_error);
- break;
-
- case FmRecorder.ERROR_PLAYER_INTERNAL:
- showString = getString(R.string.toast_player_internal_error);
- break;
-
- case FmRadioListener.NOT_AUDIO_FOCUS:
- showString = getString(R.string.not_available);
- if (isRecordFileExist()) {
- refreshPlaybackIdle(true);
- }
- break;
- case FmRecorder.ERROR_RECORDER_INVALID_STATE:
- showString = getString(R.string.toast_powerup_before_record_warning);
- break;
- default:
- Log.d(TAG, "invalid recorder error");
- break;
- }
-
- showToast(showString);
- }
-
- /**
- * Update FM recorder mode with given mode from FM service
- *
- * @param isInRecordingMode The current mode, true if current is in
- * recording mode
- */
- private void exitRecordingMode(boolean isInRecordingMode) {
- refreshImageButton(mIsPlaying);
- refreshActionMenuItem(mIsPlaying);
- refreshPopupMenuItem(mIsPlaying);
- refreshActionMenuPower(true);
- if (!isInRecordingMode) {
- // Service has already set recording mode to false, need to modify
- // UI here
- mIsInRecordingMode = false;
- switchRecordLayout(isInRecordingMode);
- }
- }
-
- /**
- * Format the given time to be string by hour:minute:second
- *
- * @param time The time to be formated
- *
- * @return string The formated time
- */
- private String getTimeString(int time) {
- final int oneHour = 3600;
- int hour = time / oneHour;
- final int minuteSecond = 60;
- int minute = (time / minuteSecond) % minuteSecond;
- int second = time % minuteSecond;
- String timeString = null;
-
- if (hour > 0) {
- final String timeFormatLong = "%02d:%02d:%02d";
- timeString = String.format(timeFormatLong, hour, minute, second);
- } else {
- final String timeFormatShort = "%02d:%02d";
- timeString = String.format(timeFormatShort, minute, second);
- }
-
- return timeString;
- }
-
- /**
- * Update the favorite UI state
- */
- private void updateFavoriteStation() {
- String showString = null;
- // Judge the current output and switch between the devices.
- if (FmRadioStation.isFavoriteStation(mContext, mCurrentStation)) {
- // Need to delete this favorite channel.
- String stationName = FmRadioStation.getStationName(mContext,
- mCurrentStation, FmRadioStation.STATION_TYPE_FAVORITE);
- FmRadioStation.updateStationToDb(mContext, stationName,
- FmRadioStation.STATION_TYPE_SEARCHED, mCurrentStation);
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_off_selector);
- mTextStationName.setText("");
- showString = mProjectStringExt.getProjectString(mContext,
- R.string.toast_channel_deleted, R.string.toast_channel_deleted1);
- } else {
- // Add the station to favorite
- String stationName = FmRadioStation.getStationName(mContext,
- mCurrentStation, FmRadioStation.STATION_TYPE_SEARCHED);
- if (FmRadioStation.isStationExist(mContext, mCurrentStation,
- FmRadioStation.STATION_TYPE_SEARCHED)) {
- FmRadioStation.updateStationToDb(mContext, stationName,
- FmRadioStation.STATION_TYPE_FAVORITE,
- mCurrentStation);
- } else {
- FmRadioStation.insertStationToDb(mContext, stationName,
- mCurrentStation, FmRadioStation.STATION_TYPE_FAVORITE);
- }
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_on_selector);
- mTextStationName.setText(stationName);
- showString = mProjectStringExt.getProjectString(mContext,
- R.string.toast_channel_added, R.string.toast_channel_added1);
- }
- showToast(showString);
- }
-
- /**
- * Edit value which saved in shared preference
- *
- * @param key The preferences editor key
- * @param time The preferences editor value
- */
- private void editSharedPreferences(String key, long time) {
- SharedPreferences sharedPreferences = getSharedPreferences(REFS_NAME, 0);
- SharedPreferences.Editor editor = sharedPreferences.edit();
- editor.putLong(key, time);
- editor.commit();
- }
-
- /**
- * Called when the activity is first created, initial variables
- *
- * @param savedInstanceState The saved bundle in onSaveInstanceState
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-/* Vanzo:libing on: Thu, 15 May 2014 18:13:02 +0800
- * add for gesture
- */
- Log.d(TAG, "FMRadio onCreate initPsensorManager()");
- if (isFmRadioGestureSupport()) {
- initPsensorManager();
- }
-// End of Vanzo:libing
- Log.i(TAG, "FmRadioActivity.onCreate start");
- // Bind the activity to FM audio stream.
- setVolumeControlStream(AudioManager.STREAM_MUSIC);
- setContentView(R.layout.main);
- mFragmentManager = getFragmentManager();
- mContext = getApplicationContext();
-
- FmRadioStation.initFmDatabase(mContext);
- mProjectStringExt = ExtensionUtils.getExtension(mContext);
- initUiComponent();
- registerButtonClickListener();
- registerSdcardReceiver();
- mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- Log.d(TAG, "FmRadioActivity.onCreate end");
- }
-/* Vanzo:libing on: Thu, 15 May 2014 18:14:21 +0800
- * add for gesture
- */
- public void initPsensorManager() {
- return;
- /*File file = new File("/sys/bus/platform/drivers/als_ps/ps");
- if (!file.exists()) {
- mHavePsensor = false;
- }
- // has no psensor return
- if (mHavePsensor == false) {
- Log.w(TAG, "initPsensorManager() has no psensor !!!");
- return;
- }
- mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
-*/
-/* Vanzo:lupei on: Fri, 28 Aug 2015 14:51:36 +0800
- * add default gesture distance max min value
- */
- /*android.util.Log.d(TAG, "DEFAULT_GESTURE_DIST_MAX_MIN = "+DEFAULT_GESTURE_DIST_MAX_MIN);
- if (!("".equals(DEFAULT_GESTURE_DIST_MAX_MIN))) {
- String[] value = DEFAULT_GESTURE_DIST_MAX_MIN.split(",");
- if (value[0]!= "" && value[1] != "") {
- GESTURE_FMRADIO_MAX_DISTANCE = Integer.parseInt(value[0]);
- GESTURE_FMRADIO_MIN_DISTANCE = Integer.parseInt(value[1]);
- }
- }*/
-// End of Vanzo:lupei
-
- }
-
- public Runnable myRunnable = new Runnable() {
- @Override
- public void run() {
- File file = new File("/sys/bus/platform/drivers/als_ps/ps");
- if (!file.exists()) {
- file = new File("/sys/bus/platform/drivers/als_ps_cm3628/ps");
- }
- if (file.exists()) {
- String pSensorValues2 = readFile(file);
- if (pSensorValues2.trim().contains("-")) {
- return;
- }
- if (pSensorValues2.trim().contains("0x")) {
- mPrePsensor = Integer.parseInt(pSensorValues2.trim().substring(2), 16);
- } else {
- mPrePsensor = Integer.parseInt(pSensorValues2.trim());
- }
- android.util.Log.d(TAG, "fmradio isGestureOpen " + isGestureOpen());
- if (isGestureOpen() && isTopActivity()) {
- if (mPrePsensor > GESTURE_FMRADIO_MAX_DISTANCE) {
- mHadGesture = true;
- } else if (mHadGesture && mPrePsensor < GESTURE_FMRADIO_MIN_DISTANCE) {
- mHadGesture = false;
- seekStation(mCurrentStation, true); // false: previous station
- }
- }
- }
- myHandler.postDelayed(myRunnable, GESTURE_RUN_POST_DELAY_TIME);
- }
- };
-
- private boolean isTopActivity() {
- ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
- ComponentName cn = am.getRunningTasks(2).get(0).topActivity;
- String topClassName = cn.getClassName();
- String myClassName = FmRadioActivity.this.getComponentName().getClassName();
-
- return topClassName.equalsIgnoreCase(myClassName);
- }
-
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
-
- private static String readFile(File fn) {
- FileReader f;
- int len;
-
- f = null;
- try {
- f = new FileReader(fn);
- String s = "";
- char[] cbuf = new char[200];
- while ((len = f.read(cbuf, 0, cbuf.length)) >= 0) {
- s += String.valueOf(cbuf, 0, len);
- }
- return s;
- } catch (IOException ex) {
- return "0";
- } finally {
- if (f != null) {
- try {
- f.close();
- } catch (IOException ex) {
- return "0";
- }
- }
- }
- }
-
- public void onSensorChanged(SensorEvent event) {
- }
-
- private boolean isGestureOpen() {
- mGestureEnabled = SystemProperties.getInt(GESTURE_SWITCH_FLAG , 0) == 1 ? true : false;
- mFMRadioEnabled = SystemProperties.getInt(GESTURE_FMRADIO_FLAG , 0) == 1 ? true : false;
-
- return mGestureEnabled && mFMRadioEnabled;
- }
-
- private void stopPsensor() {
- mSensorManager.unregisterListener(this);
- if (myHandler != null) {
- myHandler.removeCallbacks(myRunnable);
- }
- }
-
- private void resumePsensor() {
- mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
- mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
-
- myHandler = new Handler();
- myHandler.post(myRunnable);
- }
-
- public static boolean isFmRadioGestureSupport() {
- boolean enable = false; //FeatureOption.VANZO_FEATURE_FM_RADIO_GESTURE;
- android.util.Log.i(TAG, "isFmRadioGestureSupport enable = " + enable);
- return enable;
- }
-// End of Vanzo:libing
- /**
- * Go to channel list activity
- */
- private void enterChannelList() {
- Log.d(TAG, "enterChannelList");
- if (mService != null) {
- // AMS change the design for background start
- // activity. need check app is background in app code
- if (mIsActivityForeground) {
- Intent intent = new Intent();
- intent.setClass(FmRadioActivity.this, FmRadioFavorite.class);
- startActivityForResult(intent, REQUEST_CODE_FAVORITE);
- } else {
- Log.d(TAG, "enterChannelList. activity is background, not enter channel list.");
- }
- }
- }
-
- /**
- * Refresh the favorite button with the given station, if the station is
- * favorite station, show favorite icon, else show non-favorite icon.
- *
- * @param station The station frequency
- */
- private void refreshStationUI(int station) {
- // Change the station frequency displayed.
- mTextStationValue.setText(FmRadioUtils.formatStation(station));
- // Show or hide the favorite icon
- if (FmRadioStation.isFavoriteStation(mContext, station)) {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_on_selector);
- mTextStationName.setText(FmRadioStation.getStationName(mContext,
- station, FmRadioStation.STATION_TYPE_FAVORITE));
- } else {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_off_selector);
- mTextStationName.setText("");
- }
- }
-
- @SuppressWarnings("deprecation")
- private void restoreConfiguration() {
- // after configuration change, need to reduction else the UI is abnormal
- if (null != getLastNonConfigurationInstance()) {
- Log.d(TAG,
- "Configration changes,activity restart,need to reset UI!");
- Bundle bundle = (Bundle) getLastNonConfigurationInstance();
- if (null == bundle) {
- return;
- }
- mPrevRecorderState = bundle.getInt("mPrevRecorderState");
- mRecordState = bundle.getInt("mRecordState");
- mIsNeedShowRecordDlg = bundle.getBoolean("mIsFreshRecordingStatus");
- // mIsNeedShowNoAntennaDlg = bundle.getBoolean("mIsNeedShowNoAntennaDlg");
- mIsNeedShowSearchDlg = bundle.getBoolean("mIsNeedShowSearchDlg");
- // we doesn't get it from service because the service may be
- // null because not bind
- mIsInRecordingMode = bundle.getBoolean("isInRecordingMode");
- mIsPlaying = bundle.getBoolean("mIsPlaying");
- Log.d(TAG, "bundle = " + bundle);
- }
- }
-
- /**
- * Start and bind service, reduction variable values if configuration
- * changed
- */
- @Override
- public void onStart() {
- super.onStart();
- FmRadioService.setActivityIsOnStop(false);
- Log.d(TAG, "FmRadioActivity.onStart start");
- // Should start FM service first.
- if (null == startService(new Intent(FmRadioActivity.this,
- FmRadioService.class))) {
- Log.e(TAG, "Error: Cannot start FM service");
- return;
- }
-
- mIsServiceStarted = true;
- mIsServiceBinded = bindService(new Intent(FmRadioActivity.this,
- FmRadioService.class), mServiceConnection,
- Context.BIND_AUTO_CREATE);
-
- if (!mIsServiceBinded) {
- Log.e(TAG, "Error: Cannot bind FM service");
- finish();
- return;
- }
- restoreConfiguration();
- Log.d(TAG, "FmRadioActivity.onStart end");
- }
-
- /**
- * Refresh UI, when stop search, dismiss search dialog, pop up recording
- * dialog if FM stopped when recording in background
- */
- @Override
- public void onResume() {
- super.onResume();
-/* Vanzo:libing on: Thu, 15 May 2014 18:17:38 +0800
- * add for gesture
- */
- Log.d(TAG, "FMRadio onResume isGestureOpen = " + isGestureOpen());
- if (isFmRadioGestureSupport() && isGestureOpen()) {
- resumePsensor();
- }
-// End of Vanzo:libing
- Log.d(TAG, "FmRadioActivity.onResume start");
- mIsActivityForeground = true;
- if (null == mService) {
- Log.d(TAG, "service has not bind finished");
- mIsNeedShowNoAntennaDlg = false;
- return;
- }
- updateMenuStatus();
- updateDialogStatus();
- if (!isRecordFileExist()) {
- mButtonPlayback.setEnabled(false);
- }
- checkNoAntennaDialogInOnResume();
- Log.d(TAG, "FmRadioActivity.onResume end");
- }
-
- /**
- * In call and plug out earphone(in onPause state), need to show no antenna dialog but
- * use mIsNeedShowNoAntennaDlg to save the state, because there is no where to show this dialog after onResume() for this case
- */
- private void checkNoAntennaDialogInOnResume() {
- if (mIsNeedShowNoAntennaDlg && mService != null && !mService.isAntennaAvailable()
- && !FmRadioUtils.isFmShortAntennaSupport()) {
- Log.w(TAG, "Need to show no antenna dialog for plug out earphone in onPause state");
- dismissNoAntennaDialog();
- showNoAntennaDialog();
- }
- }
-
- /**
- * When activity is paused call this method, indicate activity enter
- * background if press exit, power down FM
- */
- @Override
- public void onPause() {
- Log.d(TAG, "start FmRadioActivity.onPause");
- mIsActivityForeground = false;
- /**
- * Should dismiss before call onSaveInstance, or it will resume
- * automatic
- */
- mIsNeedShowSearchDlg = true;
- dismissSearchDialog();
-
- /**
- * should dismiss before call onSaveInstance, or it will resume
- * automatic.
- */
- FmRecordDialogFragment df = (FmRecordDialogFragment) mFragmentManager
- .findFragmentByTag(TAG_SAVE_RECORDINGD);
- if (null != df && df.getShowsDialog()) {
- Log.d(TAG, "onPause.dismissSaveRecordingDialog()");
- if (mService != null) {
- mService.setModifiedRecordingName(df.getRecordingNameToSave());
- }
- dismissSaveRecordingDialog();
- mIsNeedShowRecordDlg = true;
- }
-
- // Need to dismiss avoid AMS popup this dialog again for power up will show this dialog
- if (dismissNoAntennaDialog()) {
- mIsNeedShowNoAntennaDlg = true;
- }
-
- Log.d(TAG, "end FmRadioActivity.onPause");
- super.onPause();
- }
-
- /**
- * Called when activity enter stopped state, unbind service, if exit
- * pressed, stop service
- */
- @Override
- public void onStop() {
- FmRadioService.setActivityIsOnStop(true);
- Log.d(TAG, "start FmRadioActivity.onStop");
- if (mIsServiceBinded) {
- unbindService(mServiceConnection);
- mIsServiceBinded = false;
- }
- mIsNeedShowNoAntennaDlg = false;
- Log.d(TAG, "end FmRadioActivity.onStop");
- super.onStop();
-/* Vanzo:libing on: Thu, 15 May 2014 18:15:55 +0800
- * add for gesture
- */
- Log.d(TAG, "FMRadio onStop stopPsensor()");
- if (isFmRadioGestureSupport()) {
- stopPsensor();
- }
-// End of Vanzo:libing
- }
-
- /**
- * W activity destroy, unregister broadcast receiver and remove handler
- * message
- */
- @Override
- public void onDestroy() {
- Log.d(TAG, "start FmRadioActivity.onDestroy");
- unregisterSdcardReceiver();
- // need to call this function because if doesn't do this,after
- // configuration change will have many instance and recording time
- // or playing time will not refresh
- // Remove all the handle message
- mHandler.removeCallbacksAndMessages(null);
- if (mService != null) {
- mService.unregisterFmRadioListener(mFmRadioListener);
- }
- mFmRadioListener = null;
- if (null != mPopupMenu) {
- mPopupMenu.dismiss();
- mPopupMenu = null;
- }
- Log.d(TAG, "end FmRadioActivity.onDestroy");
- super.onDestroy();
- }
-
- /**
- * Create options menu
- *
- * @param menu The option menu
- *
- * @return true or false indicate need to handle other menu item
- */
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- Log.d(TAG, "start FmRadioActivity.onCreateOptionsMenu");
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.fm_action_bar, menu);
- mMenuItemChannelList = menu.findItem(R.id.fm_channel_list);
- mMenuItemOverflow = menu.findItem(R.id.fm_menu);
- mMenuItemPower = menu.findItem(R.id.fm_power);
- Log.d(TAG, "end FmRadioActivity.onCreateOptionsMenu");
- return true;
- }
-
- /**
- * Prepare options menu
- *
- * @param menu The option menu
- *
- * @return true or false indicate need to handle other menu item
- */
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- Log.d(TAG, "start FmRadioActivity.onPrepareOptionsMenu");
- mMenuItemChannelList.setVisible(!mIsInRecordingMode);
- mMenuItemOverflow.setVisible(!mIsInRecordingMode);
- mMenuItemPower.setVisible(!mIsInRecordingMode);
- if (null == mService) {
- Log.d(TAG, "mService is null");
- return !mIsInRecordingMode;
- }
-
- boolean isPlaying = mService.isPowerUp();
- boolean isMakePowerdown = mService.isMakePowerDown();
- boolean isSeeking = mService.isSeeking();
- boolean isScan = mService.isScanning();
- // if fm power down by other app, should enable power menu, make it to
- // powerup.
- refreshActionMenuItem((isSeeking || isScan) ? false : isPlaying);
- refreshActionMenuPower((isScan || isSeeking)
- ? false
- : (isPlaying || (isMakePowerdown && !mIsNeedDisablePower)));
-
- // check whether show animation
- if (isSeeking) {
- Log.d(TAG, "onPrepareOptionsMenu: it is seeking");
- startAnimation();
- }
-
- Log.d(TAG, "end FmRadioActivity.onPrepareOptionsMenu");
- return !mIsInRecordingMode;
- }
-
- /**
- * Handle event when option item selected
- *
- * @param item The clicked item
- *
- * @return true or false indicate need to handle other menu item or not
- */
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- Log.d(TAG, "start FmRadioActivity.onOptionsItemSelected");
- switch (item.getItemId()) {
- case android.R.id.home:
- onBackPressed();
- break;
-
- case R.id.fm_channel_list:
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- // Show favorite activity.
- enterChannelList();
- break;
-
- case R.id.fm_power:
- Log.d(TAG, "click fm_power menu");
- if (mIsPlaying) {
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- exitService();
- break;
- }
- powerUpFm();
- break;
-
- case R.id.fm_menu:
- item.setEnabled(false);
-
- mPopupMenu = new PopupMenu(mContext, findViewById(R.id.fm_menu));
- Menu menu = mPopupMenu.getMenu();
- mPopupMenu.getMenuInflater().inflate(R.menu.fm_menu, menu);
- mPopupMenu.setOnMenuItemClickListener(this);
- mPopupMenu.setOnDismissListener(this);
-
- boolean isPlaying = mService.isPowerUp();
- if (isPlaying) {
- menu.findItem(R.id.fm_record).setEnabled(true);
- menu.findItem(R.id.fm_sound_mode).setEnabled(!mService.isBtConnected());
- menu.findItem(R.id.fm_sound_mode).setTitle(
- mService.isSpeakerUsed() ? R.string.optmenu_earphone
- : R.string.optmenu_speaker);
- menu.findItem(R.id.fm_search).setEnabled(true);
- }
- refreshSoundModeVisiable();
- mPopupMenu.show();
- break;
-
- default:
- Log.e(TAG, "Error: Invalid options menu item.");
- break;
- }
- Log.d(TAG, "end FmRadioActivity.onOptionsItemSelected");
- return super.onOptionsItemSelected(item);
- }
-
- /**
- * Check whether antenna is available
- *
- * @return true or false indicate antenna available or not
- */
- private boolean isAntennaAvailable() {
- return mAudioManager.isWiredHeadsetOn();
- }
-
- /**
- * When on activity result, tune to station which is from channel list
- *
- * @param requestCode The request code
- * @param resultCode The result code
- * @param data The intent from channel list
- */
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (RESULT_OK == resultCode) {
- if (REQUEST_CODE_FAVORITE != requestCode) {
- Log.e(TAG, "Error: Invalid requestcode.");
- return;
- }
- int iStation = data.getIntExtra(
- FmRadioFavorite.ACTIVITY_RESULT, mCurrentStation);
- // Tune to this station.
- mCurrentStation = iStation;
- // if tune from channel list, we should disable power menu,
- // especially for
- // power down state
- mIsNeedDisablePower = true;
- Log.d(TAG, "onActivityForReult:" + mIsNeedDisablePower);
- if (null == mService) {
- Log.d(TAG, "activity.onActivityResult mService is null");
- mNeedTuneto = true;
- return;
- }
- tuneToStation(iStation);
- return;
- }
-
- if (FmRadioStation.isFavoriteStation(mContext, mCurrentStation)) {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_on_selector);
- mTextStationName.setText(FmRadioStation.getStationName(
- mContext, mCurrentStation,
- FmRadioStation.STATION_TYPE_FAVORITE));
- } else {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_off_selector);
- mTextStationName.setText("");
- }
-
- // Do not handle other result.
- Log.v(TAG, "The activity for requestcode " + requestCode
- + " does not return any data.");
- }
-
- /**
- * Start animation
- */
- private void startAnimation() {
- mAnimImage.setAnimation(mAnimation);
- mAnimImage.setVisibility(View.VISIBLE);
- Log.d(TAG, "FmRadioActivity.startAnimation end");
- }
-
- /**
- * Stop animation
- */
- private void stopAnimation() {
- mAnimImage.setVisibility(View.INVISIBLE);
- mAnimImage.setAnimation(null);
- }
-
- /**
- * Restore recorder state from shared preference
- */
- private void restoreRecorderState() {
- // here should do some recorder related.
- mIsInRecordingMode = mService.getRecordingMode();
- mRecordState = mService.getRecorderState();
- RelativeLayout recInfoBar = (RelativeLayout) findViewById(R.id.rl_recinfo);
- // if recording or play backing state, should send message trigger
- // refresh.
- if ((FmRecorder.STATE_RECORDING == mRecordState)
- || (FmRecorder.STATE_PLAYBACK == mRecordState)) {
- SharedPreferences sharedPreferences = getSharedPreferences(REFS_NAME, 0);
- mRecordStartTime = sharedPreferences.getLong(START_RECORD_TIME, 0);
- mPlayStartTime = sharedPreferences.getLong(START_PLAY_TIME, 0);
- recInfoBar.setVisibility(View.VISIBLE);
- Log.d(TAG, "&&&sendemptyMessage:mRecoderStart:" + mRecordStartTime);
- mHandler.sendEmptyMessage(FmRadioListener.MSGID_REFRESH);
- } else {
- recInfoBar.setVisibility(View.GONE);
- }
- // if remove from app list, it will make recorder ui confused.
- switchRecordLayout(mIsInRecordingMode);
- changeRecordingMode(mIsInRecordingMode);
- if (mIsInRecordingMode) {
- refreshRecordingStatus(FmRecorder.STATE_INVALID);
- }
- }
-
- /**
- * Power up FM
- */
- private void powerUpFm() {
- Log.v(TAG, "start powerUpFm");
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- startAnimation();
- mService.powerUpAsync(FmRadioUtils.computeFrequency(mCurrentStation));
- Log.v(TAG, "end powerUpFm");
- }
-
- private void setSpeakerPhoneOn(boolean isSpeaker) {
- if (isSpeaker) {
- Log.v(TAG, "UseSpeaker");
- mService.setSpeakerPhoneOn(true);
- } else {
- Log.v(TAG, "UseEarphone");
- mService.setSpeakerPhoneOn(false);
- }
- if (null != mPopupMenu) {
- Menu menu = mPopupMenu.getMenu();
- menu.findItem(R.id.fm_sound_mode).setTitle(mService.isSpeakerUsed() ?
- R.string.optmenu_earphone : R.string.optmenu_speaker);
- }
- }
-
- /**
- * Tune to a station
- *
- * @param station The tune station
- */
- private void tuneToStation(final int station) {
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- mService.tuneStationAsync(FmRadioUtils.computeFrequency(station));
- if (!mIsPlaying) {
- startAnimation();
- }
- }
-
- /**
- * Seek station according current frequency and direction
- *
- * @param station The seek start station
- * @param direction The seek direction
- */
- private void seekStation(final int station, boolean direction) {
- // If the seek AsyncTask has been executed and not canceled, cancel it
- // before start new.
- startAnimation();
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- mService.seekStationAsync(FmRadioUtils.computeFrequency(station),
- direction);
- }
-
- private void refreshImageButton(boolean enabled) {
- mButtonDecrease.setEnabled(enabled);
- mButtonPrevStation.setEnabled(enabled);
- mButtonNextStation.setEnabled(enabled);
- mButtonIncrease.setEnabled(enabled);
- }
-
- // Refresh action menu except power menu
- private void refreshActionMenuItem(boolean enabled) {
- // action menu
- if (null != mMenuItemChannelList) {
- // if power down by other app, should disable channelist list, over
- // menu
- mMenuItemChannelList.setEnabled(enabled);
- mMenuItemOverflow.setEnabled(enabled);
- }
- }
-
- // Refresh action menu only power menu
- private void refreshActionMenuPower(boolean enabled) {
- Log.d(TAG, "refreshActionMenuPower enabled:" + enabled + ", mIsPlaying:" + mIsPlaying);
- // action menu
- if (null != mMenuItemChannelList) {
- // if fm power down by other app, should enable this button to
- // powerup.
- mMenuItemPower.setEnabled(enabled);
- mMenuItemPower.setIcon(mIsPlaying ? R.drawable.btn_fm_powerup_selector
- : R.drawable.btn_fm_powerdown_selector);
- }
- }
-
- private void refreshPopupMenuItem(boolean enabled) {
- if (null != mPopupMenu) {
- Menu menu = mPopupMenu.getMenu();
- menu.findItem(R.id.fm_record).setEnabled(enabled);
- menu.findItem(R.id.fm_search).setEnabled(enabled);
- menu.findItem(R.id.fm_sound_mode).setEnabled(enabled && !mService.isBtConnected());
- refreshSoundModeVisiable();
- }
- }
-
- private void refreshSoundModeVisiable() {
- if (null != mPopupMenu) {
- Menu menu = mPopupMenu.getMenu();
- // Need hide only short antenna support and not plug in earphone
- boolean hideSoundMode = SHORT_ANNTENNA_SUPPORT && !mService.isAntennaAvailable();
- boolean showSoundMode = !hideSoundMode;
- menu.findItem(R.id.fm_sound_mode).setVisible(showSoundMode);
- }
- }
-
- private void refreshRecordNotIdle() {
- mButtonRecord.setEnabled(false);
- mButtonPlayback.setEnabled(false);
- mButtonStop.setEnabled(false);
- }
-
- private void refreshRecordIdle() {
- mButtonRecord.setEnabled(true);
- mButtonPlayback.setEnabled(false);
- mButtonStop.setEnabled(false);
- }
-
- private void refreshPlaybackIdle(boolean btnPlayBack) {
- mButtonRecord.setEnabled(true);
- mButtonPlayback.setEnabled(btnPlayBack);
- mButtonStop.setEnabled(false);
- }
-
- private void refreshRecording() {
- mButtonRecord.setEnabled(false);
- mButtonPlayback.setEnabled(false);
- mButtonStop.setEnabled(true);
- }
-
- private void refreshPlaybacking() {
- mButtonRecord.setEnabled(false);
- mButtonPlayback.setEnabled(false);
- mButtonStop.setEnabled(true);
- }
-
- /**
- * Called when back pressed
- */
- @Override
- public void onBackPressed() {
- Log.d(TAG, "begin FmRadioActivity.onBackPressed");
-
- if (mIsInRecordingMode) {
- changeRecordingMode(false);
- if (null == mService) {
- Log.d(TAG, "mService is null");
- return;
- }
- // no need consider power down and other situation
- boolean isPlaying = mService.isPowerUp();
- refreshImageButton(isPlaying);
- refreshPopupMenuItem(isPlaying);
- refreshActionMenuItem(isPlaying);
- refreshActionMenuPower(true);
- if (mService != null && !mService.isAntennaAvailable()
- && !FmRadioUtils.isFmShortAntennaSupport()) {
- Log.w(TAG, "Need to show no antenna dialog for plug out earphone in onPause state");
- dismissNoAntennaDialog();
- showNoAntennaDialog();
- }
- return;
- }
-
- // exit fm, disable all button
- if (!mIsPlaying && (null != mService) && !mService.isPowerUping()) {
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- exitService();
- return;
- }
-
- super.onBackPressed();
- Log.d(TAG, "end FmRadioActivity.onBackPressed");
- }
-
- private void showToast(CharSequence text) {
- if (null == mToast) {
- mToast = Toast.makeText(mContext, text, Toast.LENGTH_SHORT);
- }
- mToast.setText(text);
- mToast.show();
- Log.v(TAG, "FmRadioActivity.showToast: toast = " + text);
- }
-
- private void showRds(String text) {
- mTextRds.setText(text);
- mTextRds.setSelected(true);
- Log.v(TAG, "FmRadioActivity.showRds: RDS = " + text);
- }
-
- /**
- * Change recording mode
- *
- * @param recordingMode The current recording mode
- */
- private void changeRecordingMode(boolean recordingMode) {
- Log.d(TAG, "changeRecordingMode: " + recordingMode);
- if (mIsInRecordingMode == recordingMode) {
- Log.e(TAG, "FM already " + (recordingMode ? "in" : "NOT in")
- + "recording mode!");
- return;
- }
- mIsInRecordingMode = recordingMode;
- mService.setRecordingModeAsync(recordingMode);
- switchRecordLayout(recordingMode);
- }
-
- /**
- * Switch to record layout, if in recorder mode.
- *
- * @param recordingMode true in recorder mode, false not in recorder mode
- */
- private void switchRecordLayout(boolean recordingMode) {
- ActionBar actionBar = getActionBar();
- invalidateOptionsMenu();
-
- // Set the action bar on the right to be up navigation
- actionBar.setDisplayHomeAsUpEnabled(recordingMode);
- actionBar.setHomeButtonEnabled(recordingMode);
- actionBar.setTitle(recordingMode ? R.string.fm_recorder_name
- : R.string.app_name);
-
- LinearLayout recBar = (LinearLayout) findViewById(R.id.bottom_bar_recorder);
- LinearLayout bottomBar = (LinearLayout) findViewById(R.id.bottom_bar);
-
- bottomBar.setVisibility(recordingMode ? View.GONE : View.VISIBLE);
- recBar.setVisibility(recordingMode ? View.VISIBLE : View.GONE);
- mButtonAddToFavorite.setVisibility(recordingMode ? View.GONE
- : View.VISIBLE);
- }
-
- /**
- * Update recording UI according record state
- *
- * @param stateOverride The recording state
- */
- private void refreshRecordingStatus(int stateOverride) {
- int recorderState = FmRecorder.STATE_INVALID;
-
- recorderState = (stateOverride == FmRecorder.STATE_INVALID ? mService
- .getRecorderState() : stateOverride);
-
- Log.d(TAG, "refreshRecordingStatus: state=" + recorderState);
- switch (recorderState) {
- case FmRecorder.STATE_IDLE:
- long recordTime = mService.getRecordTime();
- if (recordTime > 0) {
- if (isRecordFileExist()) {
- mButtonPlayback.setEnabled(true);
- }
-
- if (FmRecorder.STATE_RECORDING == mPrevRecorderState) {
- Log.d(TAG, "need show recorder dialog.mPrevRecorderState:" +
- mPrevRecorderState);
- if (mIsActivityForeground) {
- showSaveRecordingDialog();
- } else {
- mIsNeedShowRecordDlg = true;
- }
- }
- } else {
- mButtonPlayback.setEnabled(false);
- }
-
- refreshPlaybackIdle((recordTime > 0) && isRecordFileExist());
- mRLRecordInfo.setVisibility(View.GONE);
- break;
-
- case FmRecorder.STATE_RECORDING:
- mTxtRecInfoLeft.setText("");
- mTxtRecInfoRight.setText("");
- mTxtRecInfoLeft.setSelected(false);
- refreshRecording();
- mRLRecordInfo.setVisibility(View.VISIBLE);
- break;
-
- case FmRecorder.STATE_PLAYBACK:
- String recordingName = mService.getRecordingName();
- if (null == recordingName) {
- recordingName = "";
- }
- mTxtRecInfoLeft.setText(recordingName);
- mTxtRecInfoRight.setText("");
- mTxtRecInfoLeft.setSelected(true);
- refreshPlaybacking();
- mRLRecordInfo.setVisibility(View.VISIBLE);
- break;
-
- case FmRecorder.STATE_INVALID:
- refreshRecordIdle();
- mRLRecordInfo.setVisibility(View.GONE);
- break;
-
- default:
- Log.d(TAG, "invalid record status");
- break;
- }
- mPrevRecorderState = recorderState;
- Log.d(TAG, "refreshRecordingStatus.mPrevRecorderState:" + mPrevRecorderState);
- }
-
- /**
- * Check whether FM recording temporary file exist
- *
- * @return true if FM recording temporary file exist, false not exist FM
- * recording temporary file
- */
- private boolean isRecordFileExist() {
- String fileName = null;
- fileName = mService.getRecordingNameWithPath();
- // if recording file is delete by user, play button disabled
- File recordingFileToSave = new File(fileName + FmRecorder.RECORDING_FILE_EXTENSION);
- return recordingFileToSave.exists();
- }
-
- /**
- * use onRetainNonConfigurationInstance because after configuration change,
- * activity will destroy and create need use this function to save some
- * important variables
- */
- @Override
- public Object onRetainNonConfigurationInstance() {
- final int size = 5;
- Bundle bundle = new Bundle(size);
- bundle.putBoolean("isInRecordingMode", mIsInRecordingMode);
- bundle.putInt("mPrevRecorderState", mPrevRecorderState);
- bundle.putBoolean("mIsFreshRecordingStatus", mIsNeedShowRecordDlg);
- //bundle.putBoolean("mIsNeedShowNoAntennaDlg", mIsNeedShowNoAntennaDlg);
- bundle.putBoolean("mIsNeedShowSearchDlg", mIsNeedShowSearchDlg);
- bundle.putInt("mRecordState", mRecordState);
- bundle.putBoolean("mIsPlaying", mIsPlaying);
- Log.d(TAG, "onRetainNonConfigurationInstance() bundle:" + bundle);
- return bundle;
- }
-
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- Log.d(TAG, "onSaveInstanceState");
- super.onSaveInstanceState(outState);
- }
-
- /**
- * Handle event about pop up menu clicked
- *
- * @param item The pop up menu item
- *
- * @return true or false indicate need to handle other menu item or not
- */
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- Log.d(TAG, "onMenuItemClick:" + item.getItemId());
- switch (item.getItemId()) {
- case R.id.fm_search:
- // Don't show search dialog when activity is background
- if (!mIsActivityForeground) {
- Log.w(TAG, "click searh menu in background, don't show search dialog");
- return false;
- }
- mIsNeedShowSearchDlg = true;
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- showSearchDialog();
- FmRadioStation.cleanSearchedStations(mContext);
- mService.startScanAsync();
- break;
-
- case R.id.fm_sound_mode:
- setSpeakerPhoneOn(!mService.isSpeakerUsed());
- break;
-
- case R.id.fm_record:
- changeRecordingMode(true);
- refreshRecordingStatus(FmRecorder.STATE_INVALID);
- break;
-
- default:
- Log.d(TAG, "invalid menu item");
- break;
- }
- return false;
- }
-
- /**
- * Called when PopUp menu dismissed
- *
- * @param PopUp The menu which dismiss
- */
- @Override
- public void onDismiss(PopupMenu menu) {
- Log.d(TAG, "popmenu dismiss listener:" + menu);
- invalidateOptionsMenu();
- }
-
- /**
- * Exit FM service
- */
- private void exitService() {
- Log.i(TAG, "exitService");
- if (mIsServiceBinded) {
- unbindService(mServiceConnection);
- mIsServiceBinded = false;
- }
-
- if (mIsServiceStarted) {
- boolean isSuccess = stopService(new Intent(
- FmRadioActivity.this, FmRadioService.class));
- if (!isSuccess) {
- Log.e(TAG, "Error: Cannot stop the FM service.");
- }
- mIsServiceStarted = false;
- }
- }
-
- /**
- * Show no antenna dialog
- */
- public void showNoAntennaDialog() {
- NoAntennaDialog newFragment = NoAntennaDialog.newInstance();
- newFragment.show(mFragmentManager, TAG_NO_ANTENNA);
- mFragmentManager.executePendingTransactions();
- }
-
- /**
- * Show save recording dialog
- *
- * @param name The recording file name
- */
- public void showSaveRecordingDialog() {
- String sdcard = FmRadioService.getRecordingSdcard();
- String defaultName = mService.getRecordingName();
- String recordingName = mService.getModifiedRecordingName();
- FmRecordDialogFragment newFragment =
- new FmRecordDialogFragment(sdcard, defaultName, recordingName);
- newFragment.show(mFragmentManager, TAG_SAVE_RECORDINGD);
- mFragmentManager.executePendingTransactions();
- }
-
- /**
- * Show search dialog
- */
- private void showSearchDialog() {
- SearchChannelsDialog newFragment = SearchChannelsDialog.newInstance();
- newFragment.show(mFragmentManager, TAG_SEARCH);
- mFragmentManager.executePendingTransactions();
- }
-
- /**
- * Dismiss search dialog
- */
- private void dismissSearchDialog() {
- SearchChannelsDialog newFragment = (SearchChannelsDialog) mFragmentManager
- .findFragmentByTag(TAG_SEARCH);
- if (null != newFragment) {
- newFragment.dismissAllowingStateLoss();
- }
- }
-
- /**
- * Dismiss save recording dialog
- */
- private void dismissSaveRecordingDialog() {
- FragmentTransaction ft = mFragmentManager.beginTransaction();
- Fragment fragment = mFragmentManager.findFragmentByTag(TAG_SAVE_RECORDINGD);
- if (null != fragment) {
- ft.remove(fragment);
- ft.commitAllowingStateLoss();
- }
- }
-
- /**
- * Check whether recording card is unmounted
- *
- * @param intent The intent about sdcard
- *
- * @return true or false indicate recording card unmount or not
- */
- private boolean isRecordingCardUnmount(Intent intent) {
- String sdcard = FmRadioService.getRecordingSdcard();
- String unmountSDCard = intent.getData().toString();
- Log.d(TAG, "unmount sd card file path: " + unmountSDCard);
- return unmountSDCard.equalsIgnoreCase("file://" + sdcard) ? true
- : false;
- }
-
- /**
- * Dismiss no antenna dialog
- */
- private boolean dismissNoAntennaDialog() {
- NoAntennaDialog newFragment = (NoAntennaDialog) mFragmentManager
- .findFragmentByTag(TAG_NO_ANTENNA);
- if (null != newFragment) {
- newFragment.dismissAllowingStateLoss();
- return true;
- }
- return false;
- }
-
- /**
- * Cancel search progress
- */
- public void cancelSearch() {
- Log.d(TAG, "FmRadioActivity.cancelSearch");
- mService.stopScan();
- }
-
- /**
- * No antenna continue to operate
- */
- @Override
- public void noAntennaContinue() {
- // We let user use the app if no antenna.
- // But we do not automatically start FM.
- Log.d(TAG, " noAntennaContinue.onClick ok to continue");
- if (isAntennaAvailable()) {
- powerUpFm();
- } else {
- Log.d(TAG, "noAntennaContinue.earphone is not ready");
- mService.switchAntennaAsync(1);
- }
- }
-
- /**
- * No antenna cancel to operate
- */
- @Override
- public void noAntennaCancel() {
- Log.d(TAG, " onClick Negative");
- if (mService != null && !mService.isInLockTaskMode()) {
- exitService();
- } else {
- Log.d(TAG, "No need exit Service and Activity cause current is lock mode");
- }
- }
-
- /**
- * Recording dialog click
- *
- * @param recordingName The new recording name
- */
- @Override
- public void onRecordingDialogClick(String recordingName) {
- mService.saveRecordingAsync(recordingName);
- mService.setModifiedRecordingName(null);
- }
-
- /**
- * Update rds information
- */
- private void updateRds() {
- if (mIsPlaying) {
- Bundle bundle = new Bundle(2);
- bundle.putString(FmRadioListener.KEY_PS_INFO, mService.getPS());
- bundle.putString(FmRadioListener.KEY_RT_INFO, mService.getLRText());
- Message msg = mHandler
- .obtainMessage(FmRadioListener.LISTEN_PS_CHANGED);
- msg.setData(bundle);
- mHandler.sendMessage(msg);
- }
- }
-
- /**
- * Update current station according service station
- */
- private void updateCurrentStation() {
- // get the frequency from service, set frequency in activity, UI,
- // database
- // same as the frequency in service
- int freq = mService.getFrequency();
- if (FmRadioUtils.isValidStation(freq)) {
- if (mCurrentStation != freq) {
- Log.d(TAG, "frequency in service isn't same as in database");
- mCurrentStation = freq;
- FmRadioStation.setCurrentStation(mContext, mCurrentStation);
- refreshStationUI(mCurrentStation);
- }
- }
- }
-
- /**
- * Update button status, and dialog status
- */
- private void updateDialogStatus() {
- Log.d(TAG, "updateDialogStatus.mIsNeedShowSearchDlg:" + mIsNeedShowSearchDlg);
- boolean isScan = mService.isScanning();
- // check whether show search dialog, because it may be dismissed
- // onSaveInstance
- if (isScan && mIsNeedShowSearchDlg) {
- Log.d(TAG, "updateDialogStatus: show search dialog. isScan is " + isScan);
- mIsNeedShowSearchDlg = false;
- showSearchDialog();
- }
-
- // check whether show recorder dialog, when activity is foreground
- if (mIsNeedShowRecordDlg) {
- Log.d(TAG, "updateDialogStatus.resume recordDlg.mPrevRecorderState:" +
- mPrevRecorderState);
- showSaveRecordingDialog();
- mIsNeedShowRecordDlg = false;
- }
-
- /*
- // check whether show no antenna dialog, when activity is foreground
- if (mIsNeedShowNoAntennaDlg) {
- Log.d(TAG, "updateDialogStatus.resume noAntennaDlg:");
- showNoAntennaDialog();
- refreshActionMenuPower(true);
- mIsNeedShowNoAntennaDlg = false;
- }
- */
- }
-
- /**
- * Update menu status, and animation
- */
- private void updateMenuStatus() {
- boolean isPlaying = mService.isPowerUp();
- boolean isPoweruping = mService.isPowerUping();
- boolean isSeeking = mService.isSeeking();
- boolean isScan = mService.isScanning();
- boolean isMakePowerdown = mService.isMakePowerDown();
- Log.d(TAG, "updateMenuStatus.isSeeking:" + isSeeking);
- boolean fmStatus = (isScan || isSeeking || isPoweruping);
- // when seeking, all button should disabled,
- // else should update as origin status
- refreshImageButton(fmStatus ? false : isPlaying);
- refreshPopupMenuItem(fmStatus ? false : isPlaying);
- refreshActionMenuItem(fmStatus ? false : isPlaying);
- // if fm power down by other app, should enable power button
- // to powerup.
- Log.d(TAG, "updateMenuStatus.mIsNeedDisablePower: " + mIsNeedDisablePower);
- refreshActionMenuPower(fmStatus ? false :
- (isPlaying || (isMakePowerdown && !mIsNeedDisablePower)));
-
- // check whether show animation
- if (isSeeking || isPoweruping) {
- Log.d(TAG, "updateMenuStatus. it is seeking or poweruping");
- startAnimation();
- }
- }
-
- private void initUiComponent() {
- Log.i(TAG, "initUIComponent");
- mTextRds = (TextView) findViewById(R.id.text_rds);
- mTextRds.setText("");
- mTextFm = (TextView) findViewById(R.id.text_fm);
- mTextFm.setText(FM);
- mTextMHz = (TextView) findViewById(R.id.text_mhz);
- mTextMHz.setText(R.string.fm_unit);
-
- mTextStationValue = (TextView) findViewById(R.id.station_value);
- mTxtRecInfoLeft = (TextView) findViewById(R.id.txtRecInfoLeft);
- mTxtRecInfoRight = (TextView) findViewById(R.id.txtRecInfoRight);
- mRLRecordInfo = (RelativeLayout) findViewById(R.id.rl_recinfo);
- mButtonRecord = (ImageButton) findViewById(R.id.btn_record);
- mButtonStop = (ImageButton) findViewById(R.id.btn_stop);
- mButtonPlayback = (ImageButton) findViewById(R.id.btn_playback);
- mButtonAddToFavorite = (ImageButton) findViewById(R.id.button_add_to_favorite);
- mTextStationName = (TextView) findViewById(R.id.station_name);
- mButtonDecrease = (ImageButton) findViewById(R.id.button_decrease);
- mButtonIncrease = (ImageButton) findViewById(R.id.button_increase);
- mButtonPrevStation = (ImageButton) findViewById(R.id.button_prevstation);
- mButtonNextStation = (ImageButton) findViewById(R.id.button_nextstation);
-
- // initial mPopupMenu
- mPopupMenu = new PopupMenu(mContext, findViewById(R.id.fm_menu));
- Menu menu = mPopupMenu.getMenu();
- mPopupMenu.getMenuInflater().inflate(R.menu.fm_menu, menu);
-
- // put favorite button here since it might be used very early in
- // changing recording mode
- mCurrentStation = FmRadioStation.getCurrentStation(mContext);
- boolean isFavoriteStation = FmRadioStation.isFavoriteStation(mContext,
- mCurrentStation);
- // If the current station is in favorite, set its icon to favorite icon;
- // else, set to none favorite icon.
- if (isFavoriteStation) {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_on_selector);
- mTextStationName.setText(FmRadioStation.getStationName(mContext,
- mCurrentStation, FmRadioStation.STATION_TYPE_FAVORITE));
- } else {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_off_selector);
- }
-
- mTextStationValue.setText(FmRadioUtils.formatStation(mCurrentStation));
- mAnimation = (Animation) AnimationUtils.loadAnimation(this,
- R.drawable.anim);
- mAnimImage = (ImageView) findViewById(R.id.iv_anim);
- mAnimImage.setVisibility(View.INVISIBLE);
- }
-
- private void registerButtonClickListener() {
- mButtonRecord.setOnClickListener(mButtonClickListener);
- mButtonStop.setOnClickListener(mButtonClickListener);
- mButtonPlayback.setOnClickListener(mButtonClickListener);
- mButtonAddToFavorite.setOnClickListener(mButtonClickListener);
- mButtonDecrease.setOnClickListener(mButtonClickListener);
- mButtonIncrease.setOnClickListener(mButtonClickListener);
- mButtonPrevStation.setOnClickListener(mButtonClickListener);
- mButtonNextStation.setOnClickListener(mButtonClickListener);
- }
-
- private void registerSdcardReceiver() {
- IntentFilter iFilter = new IntentFilter();
- iFilter.addAction(Intent.ACTION_MEDIA_EJECT);
- iFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
- iFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
- iFilter.addDataScheme("file");
- registerReceiver(mSdcardListener, iFilter);
- }
-
- private void unregisterSdcardReceiver() {
- unregisterReceiver(mSdcardListener);
- }
-
- private void refreshTimeText() {
- Log.d(TAG, "refreshTimeText:mRecordState:" + mRecordState);
- if (!mIsInRecordingMode) {
- Log.d(TAG, "refreshTimeText:mIsInRecordingMode:" + mIsInRecordingMode);
- if (mRecordState == FmRecorder.STATE_RECORDING) {
- mService.stopRecordingAsync();
- } else if (mRecordState == FmRecorder.STATE_PLAYBACK) {
- mService.stopPlaybackAsync();
- }
- return;
- }
-
- final int oneSecond = 1000;
- switch (mRecordState) {
- case FmRecorder.STATE_RECORDING:
- int recordTime = (int) ((SystemClock.elapsedRealtime() - mRecordStartTime) /
- oneSecond);
- mTxtRecInfoLeft.setText(getTimeString(recordTime));
- Log.d(TAG, "Recording time = " + mTxtRecInfoLeft.getText());
- String recordingSdcard = FmRadioService.getRecordingSdcard();
- if (!FmRadioUtils.hasEnoughSpace(recordingSdcard)) {
- // recordTime 1s to avoid start() then quickly stop() native exception
- if (recordTime > 1) {
- // Insufficient storage
- mService.stopRecordingAsync();
- }
- }
- break;
-
- case FmRecorder.STATE_PLAYBACK:
- int playTime = (int) ((SystemClock.elapsedRealtime() - mPlayStartTime) / oneSecond);
- mTxtRecInfoRight.setText(getTimeString(playTime));
- Log.d(TAG, "Playing time = " + mTxtRecInfoRight.getText());
- break;
-
- default:
- break;
- }
- mHandler.sendEmptyMessageDelayed(FmRadioListener.MSGID_REFRESH, oneSecond);
- }
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioActivity.java~ b/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioActivity.java~
deleted file mode 100755
index 37ddfdd..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioActivity.java~
+++ /dev/null
@@ -1,2196 +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) 2011-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.
- */
-
-package com.mediatek.fmradio;
-
-import android.app.ActionBar;
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.content.SharedPreferences;
-import android.media.AudioManager;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.SystemClock;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
-import android.widget.ImageButton;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.PopupMenu;
-import android.widget.PopupMenu.OnDismissListener;
-import android.widget.PopupMenu.OnMenuItemClickListener;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.mediatek.fmradio.dialogs.NoAntennaDialog;
-import com.mediatek.fmradio.dialogs.SearchChannelsDialog;
-import com.mediatek.fmradio.ext.IProjectStringExt;
-
-import java.io.File;
-/* Vanzo:libing on: Thu, 15 May 2014 19:34:51 +0800
- */
-import java.io.FileReader;
-import java.io.IOException;
-import android.app.ActivityManager;
-import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener;
-import android.hardware.SensorManager;
-import android.os.SystemProperties;
-//import com.android.featureoption.FeatureOption;
-// End of Vanzo:libing
-
-/**
- * This class interact with user, provider FM basic function and FM recording
- * function
- */
-public class FmRadioActivity extends Activity implements
-/* Vanzo:libing on: Thu, 15 May 2014 19:36:32 +0800
- */
- SensorEventListener,
-// End of Vanzo:libing
- OnMenuItemClickListener, OnDismissListener,
- NoAntennaDialog.NoAntennaListener,
- SearchChannelsDialog.CancelSearchListener,
- FmRecordDialogFragment.OnRecordingDialogClickListener {
- // Logging
- private static final String TAG = "FmRx/Activity";
-
- // Dialog tags
- private static final String TAG_SEARCH = "Search";
- private static final String TAG_SAVE_RECORDINGD = "SaveRecording";
- private static final String TAG_NO_ANTENNA = "NoAntenna";
-
- // Use shared preference to store record or play time
- private static final String REFS_NAME = "FMRecord";
- private static final String START_RECORD_TIME = "startRecordTime";
- private static final String START_PLAY_TIME = "startPlayTime";
-
- // Request code
- private static final int REQUEST_CODE_FAVORITE = 1;
-
- // FM
- private static final String FM = "FM";
- // Short antenna support
- private static final boolean SHORT_ANNTENNA_SUPPORT = FmRadioUtils.isFmShortAntennaSupport();
-
- // UI views
- private TextView mTextStationName = null;
- private TextView mTextStationValue = null;
- // RDS text view
- private TextView mTextRds = null;
- // Text view display "FM"
- private TextView mTextFm = null;
- // Text View display "MHZ"
- private TextView mTextMHz = null;
- private TextView mTxtRecInfoLeft = null;
- private TextView mTxtRecInfoRight = null;
- private ImageButton mButtonDecrease = null;
- private ImageButton mButtonPrevStation = null;
- private ImageButton mButtonNextStation = null;
- private ImageButton mButtonIncrease = null;
- private ImageButton mButtonAddToFavorite = null;
- private ImageButton mButtonRecord = null;
- private ImageButton mButtonStop = null;
- private ImageButton mButtonPlayback = null;
- private Animation mAnimation = null;
- private ImageView mAnimImage = null;
-
- // Layout display recording file information
- private RelativeLayout mRLRecordInfo = null;
-
- // Menu items
- private MenuItem mMenuItemChannelList = null;
- private MenuItem mMenuItemOverflow = null;
- private MenuItem mMenuItemPower = null;
- private PopupMenu mPopupMenu = null;
-
- // State variables
- private boolean mIsServiceStarted = false;
- private boolean mIsServiceBinded = false;
- private boolean mNeedTuneto = false;
- private boolean mIsNeedDisablePower = false;
- private boolean mIsPlaying = false;
- private boolean mIsInRecordingMode = false;
- private boolean mIsNeedShowRecordDlg = false;
- private boolean mIsNeedShowNoAntennaDlg = false;
- private boolean mIsNeedShowSearchDlg = true;
- private boolean mIsActivityForeground = true;
-
- // Record variables
- private long mRecordStartTime = 0;
- private long mPlayStartTime = 0;
- private int mPrevRecorderState = FmRecorder.STATE_INVALID;
- private int mCurrentStation = FmRadioUtils.DEFAULT_STATION;
- private int mRecordState = 0;
-
- // Instance variables
- private FmRadioService mService = null;
- private Context mContext = null;
- private Toast mToast = null;
- private FragmentManager mFragmentManager = null;
- private AudioManager mAudioManager = null;
-
- // Plugin
- private IProjectStringExt mProjectStringExt = null;
-/* Vanzo:libing on: Fri, 02 Aug 2013 15:31:08 +0800
- */
- private static final String GESTURE_SWITCH_FLAG = "persist.sys.gesture_switch";
- private static final String GESTURE_FMRADIO_FLAG = "persist.sys.gesture_fmradio";
-
- // 1.first psensor value large than the GESTURE_FMRADIO_MAX_DISTANCE
- private static int GESTURE_FMRADIO_MAX_DISTANCE = 350;
- // 2.second psensor value small than the GESTURE_FMRADIO_MIN_DISTANCE
- private static int GESTURE_FMRADIO_MIN_DISTANCE = 150;
- // delay time of the gesture run hander,200 is 0.2s
- private static final int GESTURE_RUN_POST_DELAY_TIME = 200;
- private SensorManager mSensorManager;
- private Sensor mSensor = null;
- private Handler myHandler;
- private int mPrePsensor = 0;
-
- private boolean mGestureEnabled;
- private boolean mFMRadioEnabled;
- private boolean mHavePsensor = true;
- private boolean mHadGesture = false;
-// end of vanzo:libing
-/* Vanzo:lupei on: Fri, 28 Aug 2015 14:50:36 +0800
- * add default gesture distance max min value
- */
- //private String DEFAULT_GESTURE_DIST_MAX_MIN = com.android.featureoption.FeatureOption.VANZO_FEATURE_DEFAULT_GESTURE_DISTANCE_MAX_MIN_VALUE;
-// End of Vanzo:lupei
-
- // Service listener
- private FmRadioListener mFmRadioListener = new FmRadioListener() {
- @Override
- public void onCallBack(Bundle bundle) {
- int flag = bundle.getInt(FmRadioListener.CALLBACK_FLAG);
- Log.d(TAG, "call back method flag:" + flag);
-
- if (flag == FmRadioListener.MSGID_FM_EXIT) {
- mHandler.removeCallbacksAndMessages(null);
- }
-
- // remove tag message first, avoid too many same messages in queue.
- Message msg = mHandler.obtainMessage(flag);
- msg.setData(bundle);
- mHandler.removeMessages(flag);
- mHandler.sendMessage(msg);
- }
- };
-
- // Handle sdcard unmount event
- private final BroadcastReceiver mSdcardListener = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
-
- if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) {
- Log.d(TAG, "Sd card mounted");
- return;
- }
-
- // If not unmount recording sd card, do nothing;
- if (!isRecordingCardUnmount(intent)) {
- return;
- }
-
- if (Intent.ACTION_MEDIA_EJECT.equals(action)
- || Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) {
- FmRecordDialogFragment df = (FmRecordDialogFragment) mFragmentManager
- .findFragmentByTag(TAG_SAVE_RECORDINGD);
- if ((null != df && df.getShowsDialog()) || mIsNeedShowRecordDlg) {
- Log.d(TAG, "recording sd card unmounted,dismiss save dialog");
- dismissSaveRecordingDialog();
- mIsNeedShowRecordDlg = false;
- showToast(getString(R.string.toast_recording_lost_warning));
- }
- Log.d(TAG, "Sd card Eject or unmounted");
- }
- }
- };
-
- // Button click listeners on UI
- private final View.OnClickListener mButtonClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.btn_record:
- // if power up, record FM, else toast prompt user to power up
- Log.d(TAG, "btn record: CLICK!!");
- if (null == mService) {
- Log.d(TAG, "mService is null");
- return;
- }
- if (!mIsPlaying) {
- showToast(getString(R.string.toast_powerup_before_record_warning));
- return;
- }
- refreshRecordNotIdle();
- mRecordStartTime = SystemClock.elapsedRealtime();
- editSharedPreferences(START_RECORD_TIME, mRecordStartTime);
- mService.startRecordingAsync();
- mService.setModifiedRecordingName(null);
- break;
-
- case R.id.btn_stop:
- // stop record and stop play record file
- Log.d(TAG, "btn stop: CLICK!!");
- if (null == mService) {
- Log.d(TAG, "mService is null");
- return;
- }
- refreshRecordNotIdle();
- mService.stopRecordingAsync();
- mService.stopPlaybackAsync();
- break;
-
- case R.id.btn_playback:
- Log.d(TAG, "btn playback: CLICK!!");
- if (null == mService) {
- Log.d(TAG, "mService is null");
- return;
- }
- refreshRecordNotIdle();
- mPlayStartTime = SystemClock.elapsedRealtime();
- editSharedPreferences(START_PLAY_TIME, mPlayStartTime);
- mService.startPlaybackAsync();
- break;
-
- case R.id.button_add_to_favorite:
- Log.d(TAG, "onClick AddToFavorite start");
- updateFavoriteStation();
- Log.d(TAG, "onClick AddToFavorite end");
- break;
-
- case R.id.button_decrease:
- tuneToStation(FmRadioUtils.computeDecreaseStation(mCurrentStation));
- break;
-
- case R.id.button_increase:
- tuneToStation(FmRadioUtils.computeIncreaseStation(mCurrentStation));
- break;
-
- case R.id.button_prevstation:
- Log.d(TAG, "onClick PrevStation");
- // Search for the previous station.
- seekStation(mCurrentStation, false); // false: previous station
- // true: next station
- break;
-
- case R.id.button_nextstation:
- // Search for the next station.
- seekStation(mCurrentStation, true); // false: previous station
- // true: next station
- break;
-
- default:
- Log.d(TAG, "invalid view id");
- break;
- }
- }
- };
-
- /**
- * Main thread handler to update UI
- */
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- Log.d(TAG, "mHandler.handleMessage: what = " + msg.what +
- ",hashcode:" + mHandler.hashCode());
- Bundle bundle;
- switch (msg.what) {
- case FmRadioListener.MSGID_REFRESH:
- refreshTimeText();
- break;
-
- case FmRadioListener.MSGID_POWERUP_FINISHED:
- bundle = msg.getData();
- boolean isPowerup = bundle
- .getBoolean(FmRadioListener.KEY_IS_POWER_UP);
- mIsPlaying = isPowerup;
- Log.d(TAG, "updateFMState: FMRadio is powerup = " + isPowerup);
- stopAnimation();
- if (isPowerup) {
- refreshImageButton(true);
- refreshPopupMenuItem(true);
- refreshActionMenuItem(true);
- } else {
- showToast(getString(R.string.not_available));
- }
- // if not powerup success, refresh power to enable.
- refreshActionMenuPower(true);
- break;
-
- case FmRadioListener.MSGID_SWITCH_ANNTENNA:
- bundle = msg.getData();
- boolean isSwitch = bundle
- .getBoolean(FmRadioListener.KEY_IS_SWITCH_ANNTENNA);
- Log.d(TAG, "[FmRadioActivity.mHandler] swtich antenna: " + isSwitch);
- if (!isSwitch) {
- if (mIsActivityForeground) {
- dismissNoAntennaDialog();
- showNoAntennaDialog();
- } else {
- Log.d(TAG, "need show no antenna dialog after onResume:");
- mIsNeedShowNoAntennaDlg = true;
- }
- stopAnimation();
- // if not powerup success, refresh power to enable.
- refreshActionMenuPower(true);
- } else {
- mIsNeedShowNoAntennaDlg = false;
- dismissNoAntennaDialog();
- }
- break;
-
- case FmRadioListener.MSGID_POWERDOWN_FINISHED:
- bundle = msg.getData();
- boolean isPowerdown = bundle
- .getBoolean(FmRadioListener.KEY_IS_POWER_DOWN);
- mIsPlaying = !isPowerdown;
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(true);
- break;
-
- case FmRadioListener.MSGID_TUNE_FINISHED:
- bundle = msg.getData();
- boolean tuneFinish = bundle.getBoolean(FmRadioListener.KEY_IS_TUNE);
- boolean isPowerUp = bundle.getBoolean(FmRadioListener.KEY_IS_POWER_UP);
- // when power down state, tune from channel list,
- // will call back send mIsPowerup state.
- mIsPlaying = mIsPlaying ? mIsPlaying : isPowerUp;
-
- stopAnimation();
- // tune finished, should make power enable
- mIsNeedDisablePower = false;
- float frequency = bundle.getFloat(FmRadioListener.KEY_TUNE_TO_STATION);
- mCurrentStation = FmRadioUtils.computeStation(frequency);
- // After tune to station finished, refresh favorite button and
- // other button status.
- refreshStationUI(mCurrentStation);
- // tune fail,should resume button status
- if (!tuneFinish) {
- Log.d(TAG, "mHandler.tune: " + tuneFinish);
- refreshActionMenuItem(mIsPlaying);
- refreshImageButton(mIsPlaying);
- refreshPopupMenuItem(mIsPlaying);
- refreshActionMenuPower(true);
- return;
- }
- refreshImageButton(true);
- refreshActionMenuItem(true);
- refreshPopupMenuItem(true);
- refreshActionMenuPower(true);
- break;
-
- case FmRadioListener.MSGID_SCAN_FINISHED:
- bundle = msg.getData();
- // cancel scan happen
- boolean isScan = bundle.getBoolean(FmRadioListener.KEY_IS_SCAN);
- int tuneToStation = bundle.getInt(FmRadioListener.KEY_TUNE_TO_STATION);
- int searchedNum = bundle.getInt(FmRadioListener.KEY_STATION_NUM);
- refreshActionMenuItem(mIsPlaying);
- refreshImageButton(mIsPlaying);
- refreshPopupMenuItem(mIsPlaying);
- // ebable action menu power items
- refreshActionMenuPower(true);
-
- if (!isScan) {
- dismissSearchDialog();
- Log.d(TAG, "mHandler.scan canceled. not enter to channel list.");
- return;
- }
-
- mCurrentStation = tuneToStation;
- // After tune to station finished, refresh favorite button and
- // other button status.
- refreshStationUI(mCurrentStation);
- dismissSearchDialog();
-
- if (searchedNum == 0) {
- showToast(getString(R.string.toast_cannot_search));
- return;
- }
-
- enterChannelList();
- // Show toast to tell user how many stations have been searched
- showToast(getString(R.string.toast_channel_searched) + " " +
- String.valueOf(searchedNum));
- break;
-
- case FmRadioListener.MSGID_FM_EXIT:
- finish();
- break;
-
- case FmRadioListener.LISTEN_RDSSTATION_CHANGED:
- bundle = msg.getData();
- int rdsStation = bundle.getInt(FmRadioListener.KEY_RDS_STATION);
- refreshStationUI(rdsStation);
- break;
-
- case FmRadioListener.LISTEN_PS_CHANGED:
- case FmRadioListener.LISTEN_RT_CHANGED:
- bundle = msg.getData();
- String text = "";
- String psString = bundle.getString(FmRadioListener.KEY_PS_INFO);
- String rtString = bundle.getString(FmRadioListener.KEY_RT_INFO);
- if ((null != psString) && (psString.length() > 0)) {
- text += psString;
- }
- if ((null != rtString) && (rtString.length() > 0)) {
- if (text.length() > 0) {
- text += " ";
- }
- text += rtString;
- }
- showRds(text);
- break;
-
- case FmRadioListener.LISTEN_RECORDSTATE_CHANGED:
- bundle = msg.getData();
- int recorderState = bundle
- .getInt(FmRadioListener.KEY_RECORDING_STATE);
- Log.d(TAG, "FmRadioActivity.mHandler: recorderState = "
- + recorderState);
- updateRecordingState(recorderState);
- break;
-
- case FmRadioListener.LISTEN_RECORDERROR:
- bundle = msg.getData();
- int errorState = bundle
- .getInt(FmRadioListener.KEY_RECORDING_ERROR_TYPE);
- updateRecorderError(errorState);
- break;
-
- case FmRadioListener.LISTEN_RECORDMODE_CHANGED:
- bundle = msg.getData();
- boolean isInRecordingMode = bundle
- .getBoolean(FmRadioListener.KEY_IS_RECORDING_MODE);
- exitRecordingMode(isInRecordingMode);
- break;
-
- case FmRadioListener.LISTEN_SPEAKER_MODE_CHANGED:
- bundle = msg.getData();
- boolean isSpeakerMode = bundle
- .getBoolean(FmRadioListener.KEY_IS_SPEAKER_MODE);
- if (null != mPopupMenu) {
- Menu menu = mPopupMenu.getMenu();
- menu.findItem(R.id.fm_sound_mode).setTitle(isSpeakerMode ?
- R.string.optmenu_earphone : R.string.optmenu_speaker);
- refreshSoundModeVisiable();
- }
- break;
-
- default:
- Log.d(TAG, "invalid message");
- break;
- }
- Log.d(TAG, "handleMessage");
- }
- };
-
- // When call bind service, it will call service connect. register call back
- // listener and initial device
- private final ServiceConnection mServiceConnection = new ServiceConnection() {
-
- /**
- * called by system when bind service
- *
- * @param className component name
- * @param service service binder
- */
- @Override
- public void onServiceConnected(ComponentName className, IBinder service) {
- Log.d(TAG, "FmRadioActivity.onServiceConnected start");
- mService = ((FmRadioService.ServiceBinder) service).getService();
- if (null == mService) {
- Log.e(TAG, "ServiceConnection: Error: can't get Service");
- finish();
- return;
- }
-
- mService.registerFmRadioListener(mFmRadioListener);
- if (!mService.isServiceInited()) {
- Log.d(TAG, "ServiceConnection: FM service is not init");
- mService.initService(mCurrentStation);
- powerUpFm();
- } else {
- Log.d(TAG, "ServiceConnection: FM service is already init");
- if (mService.isDeviceOpen()) {
-
- // ALPS01768123 Need to power up for this case
- // Without earphone->Start FM->Click Home->Plug in earphone->Enter FM
- // -> Power Menu will be power down status and disabled
- // ALPS01811383 Cannot power up when in call, because cannot get AudioFocus
- if (!mService.isPowerUp() && mService.isModeNormal()) {
- Log.d(TAG, "Need to power up auto for this case");
- powerUpFm();
- } else if (!mService.isPowerUp() && !mService.isModeNormal()) {
- // if onStop() has been called before resuming this activity during
- // phone call, need check whether show no-antenna dialog.
- if (!mIsNeedShowNoAntennaDlg && !mService.isAntennaAvailable()
- && !FmRadioUtils.isFmShortAntennaSupport()) {
- Log.w(TAG, "Need to show no antenna dialog for plug out earphone in onPause state");
- dismissNoAntennaDialog();
- showNoAntennaDialog();
- }
- }
-
- // tunetostation during changing language,we need to tune
- // again when service bind success
- if (mNeedTuneto) {
- tuneToStation(mCurrentStation);
- mNeedTuneto = false;
- }
- updateCurrentStation();
- boolean isPlaying = mService.isPowerUp();
- // back key destroy activity, mIsPlaying will be the default
- // false.
- // but it may be true. so the power button will be in wrong
- // state.
- mIsPlaying = isPlaying;
- updateMenuStatus();
- updateDialogStatus();
-
- // check whether set play back button enable
- if (!isRecordFileExist()) {
- mButtonPlayback.setEnabled(false);
- }
- updateRds();
- restoreRecorderState();
- } else {
- // Normal case will not come here
- // Need to exit FM for this case
- Log.e(TAG, "ServiceConnection: service is exiting while start FM again");
- exitService();
- finish();
- }
- }
- Log.d(TAG, "FmRadioActivity.onServiceConnected end");
- }
-
- /**
- * When unbind service will call this method
- *
- * @param className The component name
- */
- @Override
- public void onServiceDisconnected(ComponentName className) {
- Log.d(TAG, "FmRadioActivity.onServiceDisconnected");
- }
- };
-
- /**
- * Update FM recording state with given state from FM service
- *
- * @param recorderState The recorder state
- */
- private void updateRecordingState(int recorderState) {
- mRecordState = recorderState;
- refreshRecordingStatus(recorderState);
-
- switch (recorderState) {
- case FmRecorder.STATE_RECORDING:
- showToast(getString(R.string.toast_start_recording));
- Log.d(TAG, "updateRecordingState:startRecording");
- mHandler.sendEmptyMessage(FmRadioListener.MSGID_REFRESH);
- break;
-
- case FmRecorder.STATE_PLAYBACK:
- mHandler.sendEmptyMessage(FmRadioListener.MSGID_REFRESH);
- break;
-
- case FmRecorder.STATE_IDLE:
- Log.d(TAG, "updateRecordingState:remove message");
- mHandler.removeMessages(FmRadioListener.MSGID_REFRESH);
- break;
-
- default:
- mHandler.removeMessages(FmRadioListener.MSGID_REFRESH);
- break;
- }
- }
-
- /**
- * Update FM recorder error with given error from FM service
- *
- * @param errorType The record error type
- */
- private void updateRecorderError(int errorType) {
- Log.d(TAG, "updateRecorderError.errorType: " + errorType);
- String showString = null;
- // In FMRecorder.startRecording() error occurs,then we should set
- // mButtonRecord enable, because we set mButtonRecord disable ago
- refreshRecordIdle();
- switch (errorType) {
- case FmRecorder.ERROR_SDCARD_NOT_PRESENT:
- showString = getString(R.string.toast_sdcard_missing);
- break;
-
- case FmRecorder.ERROR_SDCARD_INSUFFICIENT_SPACE:
- showString = getString(R.string.toast_sdcard_insufficient_space);
- break;
-
- case FmRecorder.ERROR_RECORDER_INTERNAL:
- showString = getString(R.string.toast_recorder_internal_error);
- break;
-
- case FmRecorder.ERROR_PLAYER_INTERNAL:
- showString = getString(R.string.toast_player_internal_error);
- break;
-
- case FmRadioListener.NOT_AUDIO_FOCUS:
- showString = getString(R.string.not_available);
- if (isRecordFileExist()) {
- refreshPlaybackIdle(true);
- }
- break;
- case FmRecorder.ERROR_RECORDER_INVALID_STATE:
- showString = getString(R.string.toast_powerup_before_record_warning);
- break;
- default:
- Log.d(TAG, "invalid recorder error");
- break;
- }
-
- showToast(showString);
- }
-
- /**
- * Update FM recorder mode with given mode from FM service
- *
- * @param isInRecordingMode The current mode, true if current is in
- * recording mode
- */
- private void exitRecordingMode(boolean isInRecordingMode) {
- refreshImageButton(mIsPlaying);
- refreshActionMenuItem(mIsPlaying);
- refreshPopupMenuItem(mIsPlaying);
- refreshActionMenuPower(true);
- if (!isInRecordingMode) {
- // Service has already set recording mode to false, need to modify
- // UI here
- mIsInRecordingMode = false;
- switchRecordLayout(isInRecordingMode);
- }
- }
-
- /**
- * Format the given time to be string by hour:minute:second
- *
- * @param time The time to be formated
- *
- * @return string The formated time
- */
- private String getTimeString(int time) {
- final int oneHour = 3600;
- int hour = time / oneHour;
- final int minuteSecond = 60;
- int minute = (time / minuteSecond) % minuteSecond;
- int second = time % minuteSecond;
- String timeString = null;
-
- if (hour > 0) {
- final String timeFormatLong = "%02d:%02d:%02d";
- timeString = String.format(timeFormatLong, hour, minute, second);
- } else {
- final String timeFormatShort = "%02d:%02d";
- timeString = String.format(timeFormatShort, minute, second);
- }
-
- return timeString;
- }
-
- /**
- * Update the favorite UI state
- */
- private void updateFavoriteStation() {
- String showString = null;
- // Judge the current output and switch between the devices.
- if (FmRadioStation.isFavoriteStation(mContext, mCurrentStation)) {
- // Need to delete this favorite channel.
- String stationName = FmRadioStation.getStationName(mContext,
- mCurrentStation, FmRadioStation.STATION_TYPE_FAVORITE);
- FmRadioStation.updateStationToDb(mContext, stationName,
- FmRadioStation.STATION_TYPE_SEARCHED, mCurrentStation);
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_off_selector);
- mTextStationName.setText("");
- showString = mProjectStringExt.getProjectString(mContext,
- R.string.toast_channel_deleted, R.string.toast_channel_deleted1);
- } else {
- // Add the station to favorite
- String stationName = FmRadioStation.getStationName(mContext,
- mCurrentStation, FmRadioStation.STATION_TYPE_SEARCHED);
- if (FmRadioStation.isStationExist(mContext, mCurrentStation,
- FmRadioStation.STATION_TYPE_SEARCHED)) {
- FmRadioStation.updateStationToDb(mContext, stationName,
- FmRadioStation.STATION_TYPE_FAVORITE,
- mCurrentStation);
- } else {
- FmRadioStation.insertStationToDb(mContext, stationName,
- mCurrentStation, FmRadioStation.STATION_TYPE_FAVORITE);
- }
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_on_selector);
- mTextStationName.setText(stationName);
- showString = mProjectStringExt.getProjectString(mContext,
- R.string.toast_channel_added, R.string.toast_channel_added1);
- }
- showToast(showString);
- }
-
- /**
- * Edit value which saved in shared preference
- *
- * @param key The preferences editor key
- * @param time The preferences editor value
- */
- private void editSharedPreferences(String key, long time) {
- SharedPreferences sharedPreferences = getSharedPreferences(REFS_NAME, 0);
- SharedPreferences.Editor editor = sharedPreferences.edit();
- editor.putLong(key, time);
- editor.commit();
- }
-
- /**
- * Called when the activity is first created, initial variables
- *
- * @param savedInstanceState The saved bundle in onSaveInstanceState
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-/* Vanzo:libing on: Thu, 15 May 2014 18:13:02 +0800
- * add for gesture
- */
- Log.d(TAG, "FMRadio onCreate initPsensorManager()");
- if (isFmRadioGestureSupport()) {
- initPsensorManager();
- }
-// End of Vanzo:libing
- Log.i(TAG, "FmRadioActivity.onCreate start");
- // Bind the activity to FM audio stream.
- setVolumeControlStream(AudioManager.STREAM_MUSIC);
- setContentView(R.layout.main);
- mFragmentManager = getFragmentManager();
- mContext = getApplicationContext();
-
- FmRadioStation.initFmDatabase(mContext);
- mProjectStringExt = ExtensionUtils.getExtension(mContext);
- initUiComponent();
- registerButtonClickListener();
- registerSdcardReceiver();
- mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- Log.d(TAG, "FmRadioActivity.onCreate end");
- }
-/* Vanzo:libing on: Thu, 15 May 2014 18:14:21 +0800
- * add for gesture
- */
- public void initPsensorManager() {
- return;
- /*File file = new File("/sys/bus/platform/drivers/als_ps/ps");
- if (!file.exists()) {
- mHavePsensor = false;
- }
- // has no psensor return
- if (mHavePsensor == false) {
- Log.w(TAG, "initPsensorManager() has no psensor !!!");
- return;
- }
- mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
-*/
-/* Vanzo:lupei on: Fri, 28 Aug 2015 14:51:36 +0800
- * add default gesture distance max min value
- */
- /*android.util.Log.d(TAG, "DEFAULT_GESTURE_DIST_MAX_MIN = "+DEFAULT_GESTURE_DIST_MAX_MIN);
- if (!("".equals(DEFAULT_GESTURE_DIST_MAX_MIN))) {
- String[] value = DEFAULT_GESTURE_DIST_MAX_MIN.split(",");
- if (value[0]!= "" && value[1] != "") {
- GESTURE_FMRADIO_MAX_DISTANCE = Integer.parseInt(value[0]);
- GESTURE_FMRADIO_MIN_DISTANCE = Integer.parseInt(value[1]);
- }
- }*/
-// End of Vanzo:lupei
-
- }
-
- public Runnable myRunnable = new Runnable() {
- @Override
- public void run() {
- File file = new File("/sys/bus/platform/drivers/als_ps/ps");
- if (!file.exists()) {
- file = new File("/sys/bus/platform/drivers/als_ps_cm3628/ps");
- }
- if (file.exists()) {
- String pSensorValues2 = readFile(file);
- if (pSensorValues2.trim().contains("-")) {
- return;
- }
- if (pSensorValues2.trim().contains("0x")) {
- mPrePsensor = Integer.parseInt(pSensorValues2.trim().substring(2), 16);
- } else {
- mPrePsensor = Integer.parseInt(pSensorValues2.trim());
- }
- android.util.Log.d(TAG, "fmradio isGestureOpen " + isGestureOpen());
- if (isGestureOpen() && isTopActivity()) {
- if (mPrePsensor > GESTURE_FMRADIO_MAX_DISTANCE) {
- mHadGesture = true;
- } else if (mHadGesture && mPrePsensor < GESTURE_FMRADIO_MIN_DISTANCE) {
- mHadGesture = false;
- seekStation(mCurrentStation, true); // false: previous station
- }
- }
- }
- myHandler.postDelayed(myRunnable, GESTURE_RUN_POST_DELAY_TIME);
- }
- };
-
- private boolean isTopActivity() {
- ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
- ComponentName cn = am.getRunningTasks(2).get(0).topActivity;
- String topClassName = cn.getClassName();
- String myClassName = FmRadioActivity.this.getComponentName().getClassName();
-
- return topClassName.equalsIgnoreCase(myClassName);
- }
-
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
-
- private static String readFile(File fn) {
- FileReader f;
- int len;
-
- f = null;
- try {
- f = new FileReader(fn);
- String s = "";
- char[] cbuf = new char[200];
- while ((len = f.read(cbuf, 0, cbuf.length)) >= 0) {
- s += String.valueOf(cbuf, 0, len);
- }
- return s;
- } catch (IOException ex) {
- return "0";
- } finally {
- if (f != null) {
- try {
- f.close();
- } catch (IOException ex) {
- return "0";
- }
- }
- }
- }
-
- public void onSensorChanged(SensorEvent event) {
- }
-
- private boolean isGestureOpen() {
- mGestureEnabled = SystemProperties.getInt(GESTURE_SWITCH_FLAG , 0) == 1 ? true : false;
- mFMRadioEnabled = SystemProperties.getInt(GESTURE_FMRADIO_FLAG , 0) == 1 ? true : false;
-
- return mGestureEnabled && mFMRadioEnabled;
- }
-
- private void stopPsensor() {
- mSensorManager.unregisterListener(this);
- if (myHandler != null) {
- myHandler.removeCallbacks(myRunnable);
- }
- }
-
- private void resumePsensor() {
- mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
- mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
-
- myHandler = new Handler();
- myHandler.post(myRunnable);
- }
-
- public static boolean isFmRadioGestureSupport() {
- boolean enable = FeatureOption.VANZO_FEATURE_FM_RADIO_GESTURE;
- android.util.Log.i(TAG, "isFmRadioGestureSupport enable = " + enable);
- return enable;
- }
-// End of Vanzo:libing
- /**
- * Go to channel list activity
- */
- private void enterChannelList() {
- Log.d(TAG, "enterChannelList");
- if (mService != null) {
- // AMS change the design for background start
- // activity. need check app is background in app code
- if (mIsActivityForeground) {
- Intent intent = new Intent();
- intent.setClass(FmRadioActivity.this, FmRadioFavorite.class);
- startActivityForResult(intent, REQUEST_CODE_FAVORITE);
- } else {
- Log.d(TAG, "enterChannelList. activity is background, not enter channel list.");
- }
- }
- }
-
- /**
- * Refresh the favorite button with the given station, if the station is
- * favorite station, show favorite icon, else show non-favorite icon.
- *
- * @param station The station frequency
- */
- private void refreshStationUI(int station) {
- // Change the station frequency displayed.
- mTextStationValue.setText(FmRadioUtils.formatStation(station));
- // Show or hide the favorite icon
- if (FmRadioStation.isFavoriteStation(mContext, station)) {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_on_selector);
- mTextStationName.setText(FmRadioStation.getStationName(mContext,
- station, FmRadioStation.STATION_TYPE_FAVORITE));
- } else {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_off_selector);
- mTextStationName.setText("");
- }
- }
-
- @SuppressWarnings("deprecation")
- private void restoreConfiguration() {
- // after configuration change, need to reduction else the UI is abnormal
- if (null != getLastNonConfigurationInstance()) {
- Log.d(TAG,
- "Configration changes,activity restart,need to reset UI!");
- Bundle bundle = (Bundle) getLastNonConfigurationInstance();
- if (null == bundle) {
- return;
- }
- mPrevRecorderState = bundle.getInt("mPrevRecorderState");
- mRecordState = bundle.getInt("mRecordState");
- mIsNeedShowRecordDlg = bundle.getBoolean("mIsFreshRecordingStatus");
- // mIsNeedShowNoAntennaDlg = bundle.getBoolean("mIsNeedShowNoAntennaDlg");
- mIsNeedShowSearchDlg = bundle.getBoolean("mIsNeedShowSearchDlg");
- // we doesn't get it from service because the service may be
- // null because not bind
- mIsInRecordingMode = bundle.getBoolean("isInRecordingMode");
- mIsPlaying = bundle.getBoolean("mIsPlaying");
- Log.d(TAG, "bundle = " + bundle);
- }
- }
-
- /**
- * Start and bind service, reduction variable values if configuration
- * changed
- */
- @Override
- public void onStart() {
- super.onStart();
- FmRadioService.setActivityIsOnStop(false);
- Log.d(TAG, "FmRadioActivity.onStart start");
- // Should start FM service first.
- if (null == startService(new Intent(FmRadioActivity.this,
- FmRadioService.class))) {
- Log.e(TAG, "Error: Cannot start FM service");
- return;
- }
-
- mIsServiceStarted = true;
- mIsServiceBinded = bindService(new Intent(FmRadioActivity.this,
- FmRadioService.class), mServiceConnection,
- Context.BIND_AUTO_CREATE);
-
- if (!mIsServiceBinded) {
- Log.e(TAG, "Error: Cannot bind FM service");
- finish();
- return;
- }
- restoreConfiguration();
- Log.d(TAG, "FmRadioActivity.onStart end");
- }
-
- /**
- * Refresh UI, when stop search, dismiss search dialog, pop up recording
- * dialog if FM stopped when recording in background
- */
- @Override
- public void onResume() {
- super.onResume();
-/* Vanzo:libing on: Thu, 15 May 2014 18:17:38 +0800
- * add for gesture
- */
- Log.d(TAG, "FMRadio onResume isGestureOpen = " + isGestureOpen());
- if (isFmRadioGestureSupport() && isGestureOpen()) {
- resumePsensor();
- }
-// End of Vanzo:libing
- Log.d(TAG, "FmRadioActivity.onResume start");
- mIsActivityForeground = true;
- if (null == mService) {
- Log.d(TAG, "service has not bind finished");
- mIsNeedShowNoAntennaDlg = false;
- return;
- }
- updateMenuStatus();
- updateDialogStatus();
- if (!isRecordFileExist()) {
- mButtonPlayback.setEnabled(false);
- }
- checkNoAntennaDialogInOnResume();
- Log.d(TAG, "FmRadioActivity.onResume end");
- }
-
- /**
- * In call and plug out earphone(in onPause state), need to show no antenna dialog but
- * use mIsNeedShowNoAntennaDlg to save the state, because there is no where to show this dialog after onResume() for this case
- */
- private void checkNoAntennaDialogInOnResume() {
- if (mIsNeedShowNoAntennaDlg && mService != null && !mService.isAntennaAvailable()
- && !FmRadioUtils.isFmShortAntennaSupport()) {
- Log.w(TAG, "Need to show no antenna dialog for plug out earphone in onPause state");
- dismissNoAntennaDialog();
- showNoAntennaDialog();
- }
- }
-
- /**
- * When activity is paused call this method, indicate activity enter
- * background if press exit, power down FM
- */
- @Override
- public void onPause() {
- Log.d(TAG, "start FmRadioActivity.onPause");
- mIsActivityForeground = false;
- /**
- * Should dismiss before call onSaveInstance, or it will resume
- * automatic
- */
- mIsNeedShowSearchDlg = true;
- dismissSearchDialog();
-
- /**
- * should dismiss before call onSaveInstance, or it will resume
- * automatic.
- */
- FmRecordDialogFragment df = (FmRecordDialogFragment) mFragmentManager
- .findFragmentByTag(TAG_SAVE_RECORDINGD);
- if (null != df && df.getShowsDialog()) {
- Log.d(TAG, "onPause.dismissSaveRecordingDialog()");
- if (mService != null) {
- mService.setModifiedRecordingName(df.getRecordingNameToSave());
- }
- dismissSaveRecordingDialog();
- mIsNeedShowRecordDlg = true;
- }
-
- // Need to dismiss avoid AMS popup this dialog again for power up will show this dialog
- if (dismissNoAntennaDialog()) {
- mIsNeedShowNoAntennaDlg = true;
- }
-
- Log.d(TAG, "end FmRadioActivity.onPause");
- super.onPause();
- }
-
- /**
- * Called when activity enter stopped state, unbind service, if exit
- * pressed, stop service
- */
- @Override
- public void onStop() {
- FmRadioService.setActivityIsOnStop(true);
- Log.d(TAG, "start FmRadioActivity.onStop");
- if (mIsServiceBinded) {
- unbindService(mServiceConnection);
- mIsServiceBinded = false;
- }
- mIsNeedShowNoAntennaDlg = false;
- Log.d(TAG, "end FmRadioActivity.onStop");
- super.onStop();
-/* Vanzo:libing on: Thu, 15 May 2014 18:15:55 +0800
- * add for gesture
- */
- Log.d(TAG, "FMRadio onStop stopPsensor()");
- if (isFmRadioGestureSupport()) {
- stopPsensor();
- }
-// End of Vanzo:libing
- }
-
- /**
- * W activity destroy, unregister broadcast receiver and remove handler
- * message
- */
- @Override
- public void onDestroy() {
- Log.d(TAG, "start FmRadioActivity.onDestroy");
- unregisterSdcardReceiver();
- // need to call this function because if doesn't do this,after
- // configuration change will have many instance and recording time
- // or playing time will not refresh
- // Remove all the handle message
- mHandler.removeCallbacksAndMessages(null);
- if (mService != null) {
- mService.unregisterFmRadioListener(mFmRadioListener);
- }
- mFmRadioListener = null;
- if (null != mPopupMenu) {
- mPopupMenu.dismiss();
- mPopupMenu = null;
- }
- Log.d(TAG, "end FmRadioActivity.onDestroy");
- super.onDestroy();
- }
-
- /**
- * Create options menu
- *
- * @param menu The option menu
- *
- * @return true or false indicate need to handle other menu item
- */
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- Log.d(TAG, "start FmRadioActivity.onCreateOptionsMenu");
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.fm_action_bar, menu);
- mMenuItemChannelList = menu.findItem(R.id.fm_channel_list);
- mMenuItemOverflow = menu.findItem(R.id.fm_menu);
- mMenuItemPower = menu.findItem(R.id.fm_power);
- Log.d(TAG, "end FmRadioActivity.onCreateOptionsMenu");
- return true;
- }
-
- /**
- * Prepare options menu
- *
- * @param menu The option menu
- *
- * @return true or false indicate need to handle other menu item
- */
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- Log.d(TAG, "start FmRadioActivity.onPrepareOptionsMenu");
- mMenuItemChannelList.setVisible(!mIsInRecordingMode);
- mMenuItemOverflow.setVisible(!mIsInRecordingMode);
- mMenuItemPower.setVisible(!mIsInRecordingMode);
- if (null == mService) {
- Log.d(TAG, "mService is null");
- return !mIsInRecordingMode;
- }
-
- boolean isPlaying = mService.isPowerUp();
- boolean isMakePowerdown = mService.isMakePowerDown();
- boolean isSeeking = mService.isSeeking();
- boolean isScan = mService.isScanning();
- // if fm power down by other app, should enable power menu, make it to
- // powerup.
- refreshActionMenuItem((isSeeking || isScan) ? false : isPlaying);
- refreshActionMenuPower((isScan || isSeeking)
- ? false
- : (isPlaying || (isMakePowerdown && !mIsNeedDisablePower)));
-
- // check whether show animation
- if (isSeeking) {
- Log.d(TAG, "onPrepareOptionsMenu: it is seeking");
- startAnimation();
- }
-
- Log.d(TAG, "end FmRadioActivity.onPrepareOptionsMenu");
- return !mIsInRecordingMode;
- }
-
- /**
- * Handle event when option item selected
- *
- * @param item The clicked item
- *
- * @return true or false indicate need to handle other menu item or not
- */
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- Log.d(TAG, "start FmRadioActivity.onOptionsItemSelected");
- switch (item.getItemId()) {
- case android.R.id.home:
- onBackPressed();
- break;
-
- case R.id.fm_channel_list:
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- // Show favorite activity.
- enterChannelList();
- break;
-
- case R.id.fm_power:
- Log.d(TAG, "click fm_power menu");
- if (mIsPlaying) {
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- exitService();
- break;
- }
- powerUpFm();
- break;
-
- case R.id.fm_menu:
- item.setEnabled(false);
-
- mPopupMenu = new PopupMenu(mContext, findViewById(R.id.fm_menu));
- Menu menu = mPopupMenu.getMenu();
- mPopupMenu.getMenuInflater().inflate(R.menu.fm_menu, menu);
- mPopupMenu.setOnMenuItemClickListener(this);
- mPopupMenu.setOnDismissListener(this);
-
- boolean isPlaying = mService.isPowerUp();
- if (isPlaying) {
- menu.findItem(R.id.fm_record).setEnabled(true);
- menu.findItem(R.id.fm_sound_mode).setEnabled(!mService.isBtConnected());
- menu.findItem(R.id.fm_sound_mode).setTitle(
- mService.isSpeakerUsed() ? R.string.optmenu_earphone
- : R.string.optmenu_speaker);
- menu.findItem(R.id.fm_search).setEnabled(true);
- }
- refreshSoundModeVisiable();
- mPopupMenu.show();
- break;
-
- default:
- Log.e(TAG, "Error: Invalid options menu item.");
- break;
- }
- Log.d(TAG, "end FmRadioActivity.onOptionsItemSelected");
- return super.onOptionsItemSelected(item);
- }
-
- /**
- * Check whether antenna is available
- *
- * @return true or false indicate antenna available or not
- */
- private boolean isAntennaAvailable() {
- return mAudioManager.isWiredHeadsetOn();
- }
-
- /**
- * When on activity result, tune to station which is from channel list
- *
- * @param requestCode The request code
- * @param resultCode The result code
- * @param data The intent from channel list
- */
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (RESULT_OK == resultCode) {
- if (REQUEST_CODE_FAVORITE != requestCode) {
- Log.e(TAG, "Error: Invalid requestcode.");
- return;
- }
- int iStation = data.getIntExtra(
- FmRadioFavorite.ACTIVITY_RESULT, mCurrentStation);
- // Tune to this station.
- mCurrentStation = iStation;
- // if tune from channel list, we should disable power menu,
- // especially for
- // power down state
- mIsNeedDisablePower = true;
- Log.d(TAG, "onActivityForReult:" + mIsNeedDisablePower);
- if (null == mService) {
- Log.d(TAG, "activity.onActivityResult mService is null");
- mNeedTuneto = true;
- return;
- }
- tuneToStation(iStation);
- return;
- }
-
- if (FmRadioStation.isFavoriteStation(mContext, mCurrentStation)) {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_on_selector);
- mTextStationName.setText(FmRadioStation.getStationName(
- mContext, mCurrentStation,
- FmRadioStation.STATION_TYPE_FAVORITE));
- } else {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_off_selector);
- mTextStationName.setText("");
- }
-
- // Do not handle other result.
- Log.v(TAG, "The activity for requestcode " + requestCode
- + " does not return any data.");
- }
-
- /**
- * Start animation
- */
- private void startAnimation() {
- mAnimImage.setAnimation(mAnimation);
- mAnimImage.setVisibility(View.VISIBLE);
- Log.d(TAG, "FmRadioActivity.startAnimation end");
- }
-
- /**
- * Stop animation
- */
- private void stopAnimation() {
- mAnimImage.setVisibility(View.INVISIBLE);
- mAnimImage.setAnimation(null);
- }
-
- /**
- * Restore recorder state from shared preference
- */
- private void restoreRecorderState() {
- // here should do some recorder related.
- mIsInRecordingMode = mService.getRecordingMode();
- mRecordState = mService.getRecorderState();
- RelativeLayout recInfoBar = (RelativeLayout) findViewById(R.id.rl_recinfo);
- // if recording or play backing state, should send message trigger
- // refresh.
- if ((FmRecorder.STATE_RECORDING == mRecordState)
- || (FmRecorder.STATE_PLAYBACK == mRecordState)) {
- SharedPreferences sharedPreferences = getSharedPreferences(REFS_NAME, 0);
- mRecordStartTime = sharedPreferences.getLong(START_RECORD_TIME, 0);
- mPlayStartTime = sharedPreferences.getLong(START_PLAY_TIME, 0);
- recInfoBar.setVisibility(View.VISIBLE);
- Log.d(TAG, "&&&sendemptyMessage:mRecoderStart:" + mRecordStartTime);
- mHandler.sendEmptyMessage(FmRadioListener.MSGID_REFRESH);
- } else {
- recInfoBar.setVisibility(View.GONE);
- }
- // if remove from app list, it will make recorder ui confused.
- switchRecordLayout(mIsInRecordingMode);
- changeRecordingMode(mIsInRecordingMode);
- if (mIsInRecordingMode) {
- refreshRecordingStatus(FmRecorder.STATE_INVALID);
- }
- }
-
- /**
- * Power up FM
- */
- private void powerUpFm() {
- Log.v(TAG, "start powerUpFm");
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- startAnimation();
- mService.powerUpAsync(FmRadioUtils.computeFrequency(mCurrentStation));
- Log.v(TAG, "end powerUpFm");
- }
-
- private void setSpeakerPhoneOn(boolean isSpeaker) {
- if (isSpeaker) {
- Log.v(TAG, "UseSpeaker");
- mService.setSpeakerPhoneOn(true);
- } else {
- Log.v(TAG, "UseEarphone");
- mService.setSpeakerPhoneOn(false);
- }
- if (null != mPopupMenu) {
- Menu menu = mPopupMenu.getMenu();
- menu.findItem(R.id.fm_sound_mode).setTitle(mService.isSpeakerUsed() ?
- R.string.optmenu_earphone : R.string.optmenu_speaker);
- }
- }
-
- /**
- * Tune to a station
- *
- * @param station The tune station
- */
- private void tuneToStation(final int station) {
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- mService.tuneStationAsync(FmRadioUtils.computeFrequency(station));
- if (!mIsPlaying) {
- startAnimation();
- }
- }
-
- /**
- * Seek station according current frequency and direction
- *
- * @param station The seek start station
- * @param direction The seek direction
- */
- private void seekStation(final int station, boolean direction) {
- // If the seek AsyncTask has been executed and not canceled, cancel it
- // before start new.
- startAnimation();
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- mService.seekStationAsync(FmRadioUtils.computeFrequency(station),
- direction);
- }
-
- private void refreshImageButton(boolean enabled) {
- mButtonDecrease.setEnabled(enabled);
- mButtonPrevStation.setEnabled(enabled);
- mButtonNextStation.setEnabled(enabled);
- mButtonIncrease.setEnabled(enabled);
- }
-
- // Refresh action menu except power menu
- private void refreshActionMenuItem(boolean enabled) {
- // action menu
- if (null != mMenuItemChannelList) {
- // if power down by other app, should disable channelist list, over
- // menu
- mMenuItemChannelList.setEnabled(enabled);
- mMenuItemOverflow.setEnabled(enabled);
- }
- }
-
- // Refresh action menu only power menu
- private void refreshActionMenuPower(boolean enabled) {
- Log.d(TAG, "refreshActionMenuPower enabled:" + enabled + ", mIsPlaying:" + mIsPlaying);
- // action menu
- if (null != mMenuItemChannelList) {
- // if fm power down by other app, should enable this button to
- // powerup.
- mMenuItemPower.setEnabled(enabled);
- mMenuItemPower.setIcon(mIsPlaying ? R.drawable.btn_fm_powerup_selector
- : R.drawable.btn_fm_powerdown_selector);
- }
- }
-
- private void refreshPopupMenuItem(boolean enabled) {
- if (null != mPopupMenu) {
- Menu menu = mPopupMenu.getMenu();
- menu.findItem(R.id.fm_record).setEnabled(enabled);
- menu.findItem(R.id.fm_search).setEnabled(enabled);
- menu.findItem(R.id.fm_sound_mode).setEnabled(enabled && !mService.isBtConnected());
- refreshSoundModeVisiable();
- }
- }
-
- private void refreshSoundModeVisiable() {
- if (null != mPopupMenu) {
- Menu menu = mPopupMenu.getMenu();
- // Need hide only short antenna support and not plug in earphone
- boolean hideSoundMode = SHORT_ANNTENNA_SUPPORT && !mService.isAntennaAvailable();
- boolean showSoundMode = !hideSoundMode;
- menu.findItem(R.id.fm_sound_mode).setVisible(showSoundMode);
- }
- }
-
- private void refreshRecordNotIdle() {
- mButtonRecord.setEnabled(false);
- mButtonPlayback.setEnabled(false);
- mButtonStop.setEnabled(false);
- }
-
- private void refreshRecordIdle() {
- mButtonRecord.setEnabled(true);
- mButtonPlayback.setEnabled(false);
- mButtonStop.setEnabled(false);
- }
-
- private void refreshPlaybackIdle(boolean btnPlayBack) {
- mButtonRecord.setEnabled(true);
- mButtonPlayback.setEnabled(btnPlayBack);
- mButtonStop.setEnabled(false);
- }
-
- private void refreshRecording() {
- mButtonRecord.setEnabled(false);
- mButtonPlayback.setEnabled(false);
- mButtonStop.setEnabled(true);
- }
-
- private void refreshPlaybacking() {
- mButtonRecord.setEnabled(false);
- mButtonPlayback.setEnabled(false);
- mButtonStop.setEnabled(true);
- }
-
- /**
- * Called when back pressed
- */
- @Override
- public void onBackPressed() {
- Log.d(TAG, "begin FmRadioActivity.onBackPressed");
-
- if (mIsInRecordingMode) {
- changeRecordingMode(false);
- if (null == mService) {
- Log.d(TAG, "mService is null");
- return;
- }
- // no need consider power down and other situation
- boolean isPlaying = mService.isPowerUp();
- refreshImageButton(isPlaying);
- refreshPopupMenuItem(isPlaying);
- refreshActionMenuItem(isPlaying);
- refreshActionMenuPower(true);
- if (mService != null && !mService.isAntennaAvailable()
- && !FmRadioUtils.isFmShortAntennaSupport()) {
- Log.w(TAG, "Need to show no antenna dialog for plug out earphone in onPause state");
- dismissNoAntennaDialog();
- showNoAntennaDialog();
- }
- return;
- }
-
- // exit fm, disable all button
- if (!mIsPlaying && (null != mService) && !mService.isPowerUping()) {
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- exitService();
- return;
- }
-
- super.onBackPressed();
- Log.d(TAG, "end FmRadioActivity.onBackPressed");
- }
-
- private void showToast(CharSequence text) {
- if (null == mToast) {
- mToast = Toast.makeText(mContext, text, Toast.LENGTH_SHORT);
- }
- mToast.setText(text);
- mToast.show();
- Log.v(TAG, "FmRadioActivity.showToast: toast = " + text);
- }
-
- private void showRds(String text) {
- mTextRds.setText(text);
- mTextRds.setSelected(true);
- Log.v(TAG, "FmRadioActivity.showRds: RDS = " + text);
- }
-
- /**
- * Change recording mode
- *
- * @param recordingMode The current recording mode
- */
- private void changeRecordingMode(boolean recordingMode) {
- Log.d(TAG, "changeRecordingMode: " + recordingMode);
- if (mIsInRecordingMode == recordingMode) {
- Log.e(TAG, "FM already " + (recordingMode ? "in" : "NOT in")
- + "recording mode!");
- return;
- }
- mIsInRecordingMode = recordingMode;
- mService.setRecordingModeAsync(recordingMode);
- switchRecordLayout(recordingMode);
- }
-
- /**
- * Switch to record layout, if in recorder mode.
- *
- * @param recordingMode true in recorder mode, false not in recorder mode
- */
- private void switchRecordLayout(boolean recordingMode) {
- ActionBar actionBar = getActionBar();
- invalidateOptionsMenu();
-
- // Set the action bar on the right to be up navigation
- actionBar.setDisplayHomeAsUpEnabled(recordingMode);
- actionBar.setHomeButtonEnabled(recordingMode);
- actionBar.setTitle(recordingMode ? R.string.fm_recorder_name
- : R.string.app_name);
-
- LinearLayout recBar = (LinearLayout) findViewById(R.id.bottom_bar_recorder);
- LinearLayout bottomBar = (LinearLayout) findViewById(R.id.bottom_bar);
-
- bottomBar.setVisibility(recordingMode ? View.GONE : View.VISIBLE);
- recBar.setVisibility(recordingMode ? View.VISIBLE : View.GONE);
- mButtonAddToFavorite.setVisibility(recordingMode ? View.GONE
- : View.VISIBLE);
- }
-
- /**
- * Update recording UI according record state
- *
- * @param stateOverride The recording state
- */
- private void refreshRecordingStatus(int stateOverride) {
- int recorderState = FmRecorder.STATE_INVALID;
-
- recorderState = (stateOverride == FmRecorder.STATE_INVALID ? mService
- .getRecorderState() : stateOverride);
-
- Log.d(TAG, "refreshRecordingStatus: state=" + recorderState);
- switch (recorderState) {
- case FmRecorder.STATE_IDLE:
- long recordTime = mService.getRecordTime();
- if (recordTime > 0) {
- if (isRecordFileExist()) {
- mButtonPlayback.setEnabled(true);
- }
-
- if (FmRecorder.STATE_RECORDING == mPrevRecorderState) {
- Log.d(TAG, "need show recorder dialog.mPrevRecorderState:" +
- mPrevRecorderState);
- if (mIsActivityForeground) {
- showSaveRecordingDialog();
- } else {
- mIsNeedShowRecordDlg = true;
- }
- }
- } else {
- mButtonPlayback.setEnabled(false);
- }
-
- refreshPlaybackIdle((recordTime > 0) && isRecordFileExist());
- mRLRecordInfo.setVisibility(View.GONE);
- break;
-
- case FmRecorder.STATE_RECORDING:
- mTxtRecInfoLeft.setText("");
- mTxtRecInfoRight.setText("");
- mTxtRecInfoLeft.setSelected(false);
- refreshRecording();
- mRLRecordInfo.setVisibility(View.VISIBLE);
- break;
-
- case FmRecorder.STATE_PLAYBACK:
- String recordingName = mService.getRecordingName();
- if (null == recordingName) {
- recordingName = "";
- }
- mTxtRecInfoLeft.setText(recordingName);
- mTxtRecInfoRight.setText("");
- mTxtRecInfoLeft.setSelected(true);
- refreshPlaybacking();
- mRLRecordInfo.setVisibility(View.VISIBLE);
- break;
-
- case FmRecorder.STATE_INVALID:
- refreshRecordIdle();
- mRLRecordInfo.setVisibility(View.GONE);
- break;
-
- default:
- Log.d(TAG, "invalid record status");
- break;
- }
- mPrevRecorderState = recorderState;
- Log.d(TAG, "refreshRecordingStatus.mPrevRecorderState:" + mPrevRecorderState);
- }
-
- /**
- * Check whether FM recording temporary file exist
- *
- * @return true if FM recording temporary file exist, false not exist FM
- * recording temporary file
- */
- private boolean isRecordFileExist() {
- String fileName = null;
- fileName = mService.getRecordingNameWithPath();
- // if recording file is delete by user, play button disabled
- File recordingFileToSave = new File(fileName + FmRecorder.RECORDING_FILE_EXTENSION);
- return recordingFileToSave.exists();
- }
-
- /**
- * use onRetainNonConfigurationInstance because after configuration change,
- * activity will destroy and create need use this function to save some
- * important variables
- */
- @Override
- public Object onRetainNonConfigurationInstance() {
- final int size = 5;
- Bundle bundle = new Bundle(size);
- bundle.putBoolean("isInRecordingMode", mIsInRecordingMode);
- bundle.putInt("mPrevRecorderState", mPrevRecorderState);
- bundle.putBoolean("mIsFreshRecordingStatus", mIsNeedShowRecordDlg);
- //bundle.putBoolean("mIsNeedShowNoAntennaDlg", mIsNeedShowNoAntennaDlg);
- bundle.putBoolean("mIsNeedShowSearchDlg", mIsNeedShowSearchDlg);
- bundle.putInt("mRecordState", mRecordState);
- bundle.putBoolean("mIsPlaying", mIsPlaying);
- Log.d(TAG, "onRetainNonConfigurationInstance() bundle:" + bundle);
- return bundle;
- }
-
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- Log.d(TAG, "onSaveInstanceState");
- super.onSaveInstanceState(outState);
- }
-
- /**
- * Handle event about pop up menu clicked
- *
- * @param item The pop up menu item
- *
- * @return true or false indicate need to handle other menu item or not
- */
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- Log.d(TAG, "onMenuItemClick:" + item.getItemId());
- switch (item.getItemId()) {
- case R.id.fm_search:
- // Don't show search dialog when activity is background
- if (!mIsActivityForeground) {
- Log.w(TAG, "click searh menu in background, don't show search dialog");
- return false;
- }
- mIsNeedShowSearchDlg = true;
- refreshImageButton(false);
- refreshActionMenuItem(false);
- refreshPopupMenuItem(false);
- refreshActionMenuPower(false);
- showSearchDialog();
- FmRadioStation.cleanSearchedStations(mContext);
- mService.startScanAsync();
- break;
-
- case R.id.fm_sound_mode:
- setSpeakerPhoneOn(!mService.isSpeakerUsed());
- break;
-
- case R.id.fm_record:
- changeRecordingMode(true);
- refreshRecordingStatus(FmRecorder.STATE_INVALID);
- break;
-
- default:
- Log.d(TAG, "invalid menu item");
- break;
- }
- return false;
- }
-
- /**
- * Called when PopUp menu dismissed
- *
- * @param PopUp The menu which dismiss
- */
- @Override
- public void onDismiss(PopupMenu menu) {
- Log.d(TAG, "popmenu dismiss listener:" + menu);
- invalidateOptionsMenu();
- }
-
- /**
- * Exit FM service
- */
- private void exitService() {
- Log.i(TAG, "exitService");
- if (mIsServiceBinded) {
- unbindService(mServiceConnection);
- mIsServiceBinded = false;
- }
-
- if (mIsServiceStarted) {
- boolean isSuccess = stopService(new Intent(
- FmRadioActivity.this, FmRadioService.class));
- if (!isSuccess) {
- Log.e(TAG, "Error: Cannot stop the FM service.");
- }
- mIsServiceStarted = false;
- }
- }
-
- /**
- * Show no antenna dialog
- */
- public void showNoAntennaDialog() {
- NoAntennaDialog newFragment = NoAntennaDialog.newInstance();
- newFragment.show(mFragmentManager, TAG_NO_ANTENNA);
- mFragmentManager.executePendingTransactions();
- }
-
- /**
- * Show save recording dialog
- *
- * @param name The recording file name
- */
- public void showSaveRecordingDialog() {
- String sdcard = FmRadioService.getRecordingSdcard();
- String defaultName = mService.getRecordingName();
- String recordingName = mService.getModifiedRecordingName();
- FmRecordDialogFragment newFragment =
- new FmRecordDialogFragment(sdcard, defaultName, recordingName);
- newFragment.show(mFragmentManager, TAG_SAVE_RECORDINGD);
- mFragmentManager.executePendingTransactions();
- }
-
- /**
- * Show search dialog
- */
- private void showSearchDialog() {
- SearchChannelsDialog newFragment = SearchChannelsDialog.newInstance();
- newFragment.show(mFragmentManager, TAG_SEARCH);
- mFragmentManager.executePendingTransactions();
- }
-
- /**
- * Dismiss search dialog
- */
- private void dismissSearchDialog() {
- SearchChannelsDialog newFragment = (SearchChannelsDialog) mFragmentManager
- .findFragmentByTag(TAG_SEARCH);
- if (null != newFragment) {
- newFragment.dismissAllowingStateLoss();
- }
- }
-
- /**
- * Dismiss save recording dialog
- */
- private void dismissSaveRecordingDialog() {
- FragmentTransaction ft = mFragmentManager.beginTransaction();
- Fragment fragment = mFragmentManager.findFragmentByTag(TAG_SAVE_RECORDINGD);
- if (null != fragment) {
- ft.remove(fragment);
- ft.commitAllowingStateLoss();
- }
- }
-
- /**
- * Check whether recording card is unmounted
- *
- * @param intent The intent about sdcard
- *
- * @return true or false indicate recording card unmount or not
- */
- private boolean isRecordingCardUnmount(Intent intent) {
- String sdcard = FmRadioService.getRecordingSdcard();
- String unmountSDCard = intent.getData().toString();
- Log.d(TAG, "unmount sd card file path: " + unmountSDCard);
- return unmountSDCard.equalsIgnoreCase("file://" + sdcard) ? true
- : false;
- }
-
- /**
- * Dismiss no antenna dialog
- */
- private boolean dismissNoAntennaDialog() {
- NoAntennaDialog newFragment = (NoAntennaDialog) mFragmentManager
- .findFragmentByTag(TAG_NO_ANTENNA);
- if (null != newFragment) {
- newFragment.dismissAllowingStateLoss();
- return true;
- }
- return false;
- }
-
- /**
- * Cancel search progress
- */
- public void cancelSearch() {
- Log.d(TAG, "FmRadioActivity.cancelSearch");
- mService.stopScan();
- }
-
- /**
- * No antenna continue to operate
- */
- @Override
- public void noAntennaContinue() {
- // We let user use the app if no antenna.
- // But we do not automatically start FM.
- Log.d(TAG, " noAntennaContinue.onClick ok to continue");
- if (isAntennaAvailable()) {
- powerUpFm();
- } else {
- Log.d(TAG, "noAntennaContinue.earphone is not ready");
- mService.switchAntennaAsync(1);
- }
- }
-
- /**
- * No antenna cancel to operate
- */
- @Override
- public void noAntennaCancel() {
- Log.d(TAG, " onClick Negative");
- if (mService != null && !mService.isInLockTaskMode()) {
- exitService();
- } else {
- Log.d(TAG, "No need exit Service and Activity cause current is lock mode");
- }
- }
-
- /**
- * Recording dialog click
- *
- * @param recordingName The new recording name
- */
- @Override
- public void onRecordingDialogClick(String recordingName) {
- mService.saveRecordingAsync(recordingName);
- mService.setModifiedRecordingName(null);
- }
-
- /**
- * Update rds information
- */
- private void updateRds() {
- if (mIsPlaying) {
- Bundle bundle = new Bundle(2);
- bundle.putString(FmRadioListener.KEY_PS_INFO, mService.getPS());
- bundle.putString(FmRadioListener.KEY_RT_INFO, mService.getLRText());
- Message msg = mHandler
- .obtainMessage(FmRadioListener.LISTEN_PS_CHANGED);
- msg.setData(bundle);
- mHandler.sendMessage(msg);
- }
- }
-
- /**
- * Update current station according service station
- */
- private void updateCurrentStation() {
- // get the frequency from service, set frequency in activity, UI,
- // database
- // same as the frequency in service
- int freq = mService.getFrequency();
- if (FmRadioUtils.isValidStation(freq)) {
- if (mCurrentStation != freq) {
- Log.d(TAG, "frequency in service isn't same as in database");
- mCurrentStation = freq;
- FmRadioStation.setCurrentStation(mContext, mCurrentStation);
- refreshStationUI(mCurrentStation);
- }
- }
- }
-
- /**
- * Update button status, and dialog status
- */
- private void updateDialogStatus() {
- Log.d(TAG, "updateDialogStatus.mIsNeedShowSearchDlg:" + mIsNeedShowSearchDlg);
- boolean isScan = mService.isScanning();
- // check whether show search dialog, because it may be dismissed
- // onSaveInstance
- if (isScan && mIsNeedShowSearchDlg) {
- Log.d(TAG, "updateDialogStatus: show search dialog. isScan is " + isScan);
- mIsNeedShowSearchDlg = false;
- showSearchDialog();
- }
-
- // check whether show recorder dialog, when activity is foreground
- if (mIsNeedShowRecordDlg) {
- Log.d(TAG, "updateDialogStatus.resume recordDlg.mPrevRecorderState:" +
- mPrevRecorderState);
- showSaveRecordingDialog();
- mIsNeedShowRecordDlg = false;
- }
-
- /*
- // check whether show no antenna dialog, when activity is foreground
- if (mIsNeedShowNoAntennaDlg) {
- Log.d(TAG, "updateDialogStatus.resume noAntennaDlg:");
- showNoAntennaDialog();
- refreshActionMenuPower(true);
- mIsNeedShowNoAntennaDlg = false;
- }
- */
- }
-
- /**
- * Update menu status, and animation
- */
- private void updateMenuStatus() {
- boolean isPlaying = mService.isPowerUp();
- boolean isPoweruping = mService.isPowerUping();
- boolean isSeeking = mService.isSeeking();
- boolean isScan = mService.isScanning();
- boolean isMakePowerdown = mService.isMakePowerDown();
- Log.d(TAG, "updateMenuStatus.isSeeking:" + isSeeking);
- boolean fmStatus = (isScan || isSeeking || isPoweruping);
- // when seeking, all button should disabled,
- // else should update as origin status
- refreshImageButton(fmStatus ? false : isPlaying);
- refreshPopupMenuItem(fmStatus ? false : isPlaying);
- refreshActionMenuItem(fmStatus ? false : isPlaying);
- // if fm power down by other app, should enable power button
- // to powerup.
- Log.d(TAG, "updateMenuStatus.mIsNeedDisablePower: " + mIsNeedDisablePower);
- refreshActionMenuPower(fmStatus ? false :
- (isPlaying || (isMakePowerdown && !mIsNeedDisablePower)));
-
- // check whether show animation
- if (isSeeking || isPoweruping) {
- Log.d(TAG, "updateMenuStatus. it is seeking or poweruping");
- startAnimation();
- }
- }
-
- private void initUiComponent() {
- Log.i(TAG, "initUIComponent");
- mTextRds = (TextView) findViewById(R.id.text_rds);
- mTextRds.setText("");
- mTextFm = (TextView) findViewById(R.id.text_fm);
- mTextFm.setText(FM);
- mTextMHz = (TextView) findViewById(R.id.text_mhz);
- mTextMHz.setText(R.string.fm_unit);
-
- mTextStationValue = (TextView) findViewById(R.id.station_value);
- mTxtRecInfoLeft = (TextView) findViewById(R.id.txtRecInfoLeft);
- mTxtRecInfoRight = (TextView) findViewById(R.id.txtRecInfoRight);
- mRLRecordInfo = (RelativeLayout) findViewById(R.id.rl_recinfo);
- mButtonRecord = (ImageButton) findViewById(R.id.btn_record);
- mButtonStop = (ImageButton) findViewById(R.id.btn_stop);
- mButtonPlayback = (ImageButton) findViewById(R.id.btn_playback);
- mButtonAddToFavorite = (ImageButton) findViewById(R.id.button_add_to_favorite);
- mTextStationName = (TextView) findViewById(R.id.station_name);
- mButtonDecrease = (ImageButton) findViewById(R.id.button_decrease);
- mButtonIncrease = (ImageButton) findViewById(R.id.button_increase);
- mButtonPrevStation = (ImageButton) findViewById(R.id.button_prevstation);
- mButtonNextStation = (ImageButton) findViewById(R.id.button_nextstation);
-
- // initial mPopupMenu
- mPopupMenu = new PopupMenu(mContext, findViewById(R.id.fm_menu));
- Menu menu = mPopupMenu.getMenu();
- mPopupMenu.getMenuInflater().inflate(R.menu.fm_menu, menu);
-
- // put favorite button here since it might be used very early in
- // changing recording mode
- mCurrentStation = FmRadioStation.getCurrentStation(mContext);
- boolean isFavoriteStation = FmRadioStation.isFavoriteStation(mContext,
- mCurrentStation);
- // If the current station is in favorite, set its icon to favorite icon;
- // else, set to none favorite icon.
- if (isFavoriteStation) {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_on_selector);
- mTextStationName.setText(FmRadioStation.getStationName(mContext,
- mCurrentStation, FmRadioStation.STATION_TYPE_FAVORITE));
- } else {
- mButtonAddToFavorite
- .setImageResource(R.drawable.btn_fm_favorite_off_selector);
- }
-
- mTextStationValue.setText(FmRadioUtils.formatStation(mCurrentStation));
- mAnimation = (Animation) AnimationUtils.loadAnimation(this,
- R.drawable.anim);
- mAnimImage = (ImageView) findViewById(R.id.iv_anim);
- mAnimImage.setVisibility(View.INVISIBLE);
- }
-
- private void registerButtonClickListener() {
- mButtonRecord.setOnClickListener(mButtonClickListener);
- mButtonStop.setOnClickListener(mButtonClickListener);
- mButtonPlayback.setOnClickListener(mButtonClickListener);
- mButtonAddToFavorite.setOnClickListener(mButtonClickListener);
- mButtonDecrease.setOnClickListener(mButtonClickListener);
- mButtonIncrease.setOnClickListener(mButtonClickListener);
- mButtonPrevStation.setOnClickListener(mButtonClickListener);
- mButtonNextStation.setOnClickListener(mButtonClickListener);
- }
-
- private void registerSdcardReceiver() {
- IntentFilter iFilter = new IntentFilter();
- iFilter.addAction(Intent.ACTION_MEDIA_EJECT);
- iFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
- iFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
- iFilter.addDataScheme("file");
- registerReceiver(mSdcardListener, iFilter);
- }
-
- private void unregisterSdcardReceiver() {
- unregisterReceiver(mSdcardListener);
- }
-
- private void refreshTimeText() {
- Log.d(TAG, "refreshTimeText:mRecordState:" + mRecordState);
- if (!mIsInRecordingMode) {
- Log.d(TAG, "refreshTimeText:mIsInRecordingMode:" + mIsInRecordingMode);
- if (mRecordState == FmRecorder.STATE_RECORDING) {
- mService.stopRecordingAsync();
- } else if (mRecordState == FmRecorder.STATE_PLAYBACK) {
- mService.stopPlaybackAsync();
- }
- return;
- }
-
- final int oneSecond = 1000;
- switch (mRecordState) {
- case FmRecorder.STATE_RECORDING:
- int recordTime = (int) ((SystemClock.elapsedRealtime() - mRecordStartTime) /
- oneSecond);
- mTxtRecInfoLeft.setText(getTimeString(recordTime));
- Log.d(TAG, "Recording time = " + mTxtRecInfoLeft.getText());
- String recordingSdcard = FmRadioService.getRecordingSdcard();
- if (!FmRadioUtils.hasEnoughSpace(recordingSdcard)) {
- // recordTime 1s to avoid start() then quickly stop() native exception
- if (recordTime > 1) {
- // Insufficient storage
- mService.stopRecordingAsync();
- }
- }
- break;
-
- case FmRecorder.STATE_PLAYBACK:
- int playTime = (int) ((SystemClock.elapsedRealtime() - mPlayStartTime) / oneSecond);
- mTxtRecInfoRight.setText(getTimeString(playTime));
- Log.d(TAG, "Playing time = " + mTxtRecInfoRight.getText());
- break;
-
- default:
- break;
- }
- mHandler.sendEmptyMessageDelayed(FmRadioListener.MSGID_REFRESH, oneSecond);
- }
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioContentProvider.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioContentProvider.java
deleted file mode 100755
index 5397e9b..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioContentProvider.java
+++ /dev/null
@@ -1,297 +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) 2011-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.
- */
-
-package com.mediatek.fmradio;
-
-import android.content.ContentProvider;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.UriMatcher;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.database.sqlite.SQLiteQueryBuilder;
-import android.net.Uri;
-import android.text.TextUtils;
-import android.util.Log;
-
-/**
- * This class provider interface to operator FM database table StationList
- */
-public class FmRadioContentProvider extends ContentProvider {
- private static final String TAG = "FmRx/Provider";
-
- // database instance use to operate the database
- private SQLiteDatabase mSqlDb = null;
- // database helper use to get database instance
- private DatabaseHelper mDbHelper = null;
- // database name
- private static final String DATABASE_NAME = "FmRadio.db";
- // database version
- private static final int DATABASE_VERSION = 1;
- // table name
- private static final String TABLE_NAME = "StationList";
-
- // URI match code
- private static final int STATION_FREQ = 1;
- // URI match code
- private static final int STATION_FREQ_ID = 2;
- // use to match URI
- private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
-
- // match URI with station frequency or station frequency id
- static {
- URI_MATCHER.addURI(FmRadioStation.AUTHORITY, FmRadioStation.STATION, STATION_FREQ);
- URI_MATCHER.addURI(FmRadioStation.AUTHORITY, FmRadioStation.STATION + "/#",
- STATION_FREQ_ID);
- }
-
- /**
- * Helper to operate database
- */
- private static class DatabaseHelper extends SQLiteOpenHelper {
-
- /**
- * initial database name and database version
- *
- * @param context application context
- */
- DatabaseHelper(Context context) {
- super(context, DATABASE_NAME, null, DATABASE_VERSION);
- }
-
- /**
- * Create database table
- *
- * @param db The database
- */
- @Override
- public void onCreate(SQLiteDatabase db) {
- // Create the table
- Log.d(TAG, "DatabaseHelper.onCreate");
- db.execSQL(
- "Create table "
- + TABLE_NAME
- + "("
- + FmRadioStation.Station._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
- + FmRadioStation.Station.COLUMN_STATION_NAME + " TEXT,"
- + FmRadioStation.Station.COLUMN_STATION_FREQ + " INTEGER,"
- + FmRadioStation.Station.COLUMN_STATION_TYPE + " INTEGER"
- + ");"
- );
- }
-
- /**
- * Upgrade database
- *
- * @param db database
- * @param oldVersion The old database version
- * @param newVersion The new database version
- */
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- Log.i(TAG, "Upgrading database from version " + oldVersion + " to "
- + newVersion + ", which will destroy all old data");
- db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
- onCreate(db);
- }
- }
-
- /**
- * Delete database table rows with condition
- *
- * @param uri The uri to delete
- * @param selection The where cause to apply, if null will delete all rows
- * @param selectionArgs The select value
- *
- * @return The rows number has be deleted
- */
- @Override
- public int delete(Uri uri, String selection, String[] selectionArgs) {
- Log.d(TAG, "FmRadioContentProvider.delete");
- int rows = 0;
- mSqlDb = mDbHelper.getWritableDatabase();
- switch (URI_MATCHER.match(uri)) {
- case STATION_FREQ:
- rows = mSqlDb.delete(TABLE_NAME, selection, selectionArgs);
- getContext().getContentResolver().notifyChange(uri, null);
- break;
-
- case STATION_FREQ_ID:
- String stationID = uri.getPathSegments().get(1);
- rows = mSqlDb.delete(TABLE_NAME,
- FmRadioStation.Station._ID
- + "="
- + stationID
- + (TextUtils.isEmpty(selection) ? "" : " AND (" + selection + ")"),
- selectionArgs);
- getContext().getContentResolver().notifyChange(uri, null);
- break;
-
- default:
- Log.e(TAG, "Error: Unkown URI to delete: " + uri);
- break;
- }
- return rows;
- }
-
- /**
- * Insert values to database with uri
- *
- * @param uri The insert uri
- * @param values The insert values
- *
- * @return The uri after inserted
- */
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- Log.d(TAG, "FmRadioContentProvider.insert");
- Uri rowUri = null;
- mSqlDb = mDbHelper.getWritableDatabase();
- ContentValues v = new ContentValues(values);
- // Do not insert invalid values.
- if (!v.containsKey(FmRadioStation.Station.COLUMN_STATION_NAME)
- || !v.containsKey(FmRadioStation.Station.COLUMN_STATION_FREQ)
- || !v.containsKey(FmRadioStation.Station.COLUMN_STATION_TYPE)) {
- Log.e(TAG, "Error: Invalid values.");
- return rowUri;
- }
-
- long rowId = mSqlDb.insert(TABLE_NAME, null, v);
- if (rowId <= 0) {
- Log.e(TAG, "Error: Failed to insert row into " + uri);
- }
- rowUri = ContentUris.appendId(FmRadioStation.Station.CONTENT_URI.buildUpon(), rowId)
- .build();
- getContext().getContentResolver().notifyChange(rowUri, null);
- return rowUri;
- }
-
- /**
- * Create database helper
- *
- * @return true if create database helper success
- */
- @Override
- public boolean onCreate() {
- mDbHelper = new DatabaseHelper(getContext());
- return (null == mDbHelper) ? false : true;
- }
-
- /**
- * Query the database with current settings and add information
- *
- * @param uri The database uri
- * @param projection The columns need to query
- * @param selection The where clause
- * @param selectionArgs The where value
- * @param sortOrder The column to sort
- *
- * @return The query result cursor
- */
- @Override
- public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
- String sortOrder) {
- SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
- SQLiteDatabase db = mDbHelper.getReadableDatabase();
- qb.setTables(TABLE_NAME);
-
- int match = URI_MATCHER.match(uri);
-
- if (STATION_FREQ_ID == match) {
- qb.appendWhere("_id = " + uri.getPathSegments().get(1));
- }
-
- Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder);
- if (null != c) {
- c.setNotificationUri(getContext().getContentResolver(), uri);
- }
- return c;
- }
-
- /**
- * Update the database content use content values with current settings and
- * add information
- *
- * @param uri The database uri
- * @param values The values need to update
- * @param selection The where clause
- * @param selectionArgs The where value
- *
- * @return The row numbers have changed
- */
- @Override
- public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
- Log.d(TAG, "FmRadioContentProvider.update");
- int rows = 0;
- mSqlDb = mDbHelper.getWritableDatabase();
- switch (URI_MATCHER.match(uri)) {
- case STATION_FREQ:
- rows = mSqlDb.update(TABLE_NAME, values, selection, selectionArgs);
- getContext().getContentResolver().notifyChange(uri, null);
- break;
- case STATION_FREQ_ID:
- String stationID = uri.getPathSegments().get(1);
- rows = mSqlDb.update(TABLE_NAME,
- values,
- FmRadioStation.Station._ID
- + "="
- + stationID
- + (TextUtils.isEmpty(selection) ? "" : " AND (" + selection + ")"),
- selectionArgs);
- getContext().getContentResolver().notifyChange(uri, null);
- break;
- default:
- Log.e(TAG, "Error: Unkown URI to update: " + uri);
- break;
- }
- return rows;
- }
-
- /**
- * Get uri type
- *
- * @param uri The the uri
- *
- * @return The type
- */
- @Override
- public String getType(Uri uri) {
- return null;
- }
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioEmActivity.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioEmActivity.java
deleted file mode 100755
index 51fd3dc..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioEmActivity.java
+++ /dev/null
@@ -1,1049 +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.
- */
-
-package com.mediatek.fmradio;
-
-import android.app.Activity;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.media.AudioManager;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.RadioButton;
-import android.widget.RadioGroup;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import java.util.Arrays;
-
-/**
- * This class is used to provide engineer mode function for hardware test
- *
- */
-public class FmRadioEmActivity extends Activity {
- public static final String TAG = "FmRx/EM";
-
- private static final String TYPE_MSGID = "MSGID";
- private static final String RDS_BLER_STRING = "RDS_BLER_STRING";
- private static final String RDS_RSSI_STRING = "RDS_RSSI_STRING";
- private static final String RDS_STEREMONO_STRING = "RDS_STEREMONO_STRING";
- private static final String RDS_CAPARRAY_STRING = "RDS_CAPARRAY_STRING";
-
- private static final int MSGID_OK = 1;
- private static final int MSGID_UPDATE_RDS = 2;
- private static final int MSGID_UPDATE_CURRENT_STATION = 3;
-
- private static final int MSGID_TICK_EVENT = 6;
- private static final int MSGID_INIT_OK = 7;
- private static final int MSGID_POWERUP = 8;
- private static final int MSGID_TUNE_FNISHED = 9;
-
- private boolean mIsServiceStarted = false;
- private boolean mIsServiceBinded = false;
- private FmRadioService mService = null;
-
- private boolean mIsPlaying = false; // When start, the radio is not playing.
-
- // Record whether we are destroying.
- private boolean mIsDestroying = false;
- private boolean mIsTickEventExit = false;
-
- // Strings shown in RDS text view.
- private String mPSString = "";
- private String mLRTextString = "";
-
- private TextView mTextStereoMono = null;
- private TextView mTextRssi = null;
- private TextView mTextCapArray = null;
- private TextView mTextRdsBler = null;
- private TextView mTextRdsPS = null;
- private TextView mTextRdsRT = null;
- private TextView mTextChipID = null;
- private TextView mTextECOVersion = null;
- private TextView mTextPatchVersion = null;
- private TextView mTextDSPVersion = null;
- private TextView mTextCMDReturn0 = null;
- private TextView mTextCMDReturn1 = null;
- private TextView mTextCMDReturn2 = null;
- private TextView mTextCMDReturn3 = null;
- private TextView mTextCMDReturn4 = null;
- private EditText mEditFreq = null;
-
- private EditText mEditRssiThreshold = null;
- private EditText mEditMuteGain = null;
- private EditText mEditDesenseRssi = null;
- private EditText mEditCMD0 = null;
- private EditText mEditCMD1 = null;
- private EditText mEditCMD2 = null;
- private EditText mEditCMD3 = null;
- private EditText mEditCMD4 = null;
- private EditText mEditCMD5 = null;
- private EditText mEditCMD6 = null;
- private EditText mEditCMD7 = null;
- private EditText mEditCMD8 = null;
- private EditText mEditCMD9 = null;
- private EditText mEditCMD10 = null;
- private EditText mEditCMD11 = null;
- private EditText mEditCMD12 = null;
- private EditText mEditCMD13 = null;
- private EditText mEditCMD14 = null;
- private EditText mEditCMD15 = null;
- private EditText mEditCMD16 = null;
- private EditText mEditCMD17 = null;
- private EditText mEditCMD18 = null;
- private EditText mEditCMD19 = null;
- private Button mButtonRssiThreshold = null;
- private Button mButtonMuteGain = null;
- private Button mButtonDesenseRssi = null;
- private Button mButtonCMD = null;
- private Button mButtonTune = null;
- private RadioButton mRdAntennaS = null;
- private RadioButton mRdAntennaL = null;
- private RadioGroup mRgAntenna = null;
- private RadioButton mRdStereo = null;
- private RadioButton mRdMono = null;
- private Context mContext = null;
- private Thread mTickEventThread = null;
-
- // Can not use float to record the station. Because there will be inaccuracy when increase/decrease 0.1
- private int mCurrentStation = FmRadioUtils.DEFAULT_STATION;
- private AudioManager mAudioManager = null;
- private HeadsetConnectionReceiver mHeadsetConnectionReceiver = null;
-
- /**
- * use to show update antenna UI
- *
- */
- private class HeadsetConnectionReceiver extends BroadcastReceiver {
- public void onReceive(Context context, Intent intent) {
- if (intent.getIntExtra("state", 0) == 0) { // unpluged
- if (mIsPlaying) {
- mRgAntenna.check(R.id.FMR_Antenna_short);
- }
- } else if (intent.getIntExtra("state", 0) == 1) { // pluged
- if (mIsPlaying) {
- mRgAntenna.check(R.id.FMR_Antenna_long);
- }
- }
-
- }
- };
-
- /**
- * click listener
- */
- private View.OnClickListener mButtonClickListener = new View.OnClickListener() {
- /**
- * handle click event
- * @param v clicked view
- */
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.FMR_Antenna_short:
- switchAntenna(1);
- break;
- case R.id.FMR_Antenna_long:
- switchAntenna(0);
- break;
- case R.id.FMR_Stereomono_stereo:
-// if (!setStereoMono(false)) {
-// Toast.makeText(mContext, "Set Stereo Mono failed.", Toast.LENGTH_SHORT).show();
-// }
- setStereoMono(false);
- break;
- case R.id.FMR_Stereomono_mono:
-// if (!setStereoMono(true)) {
-// Toast.makeText(mContext, "Set Stereo Mono failed.", Toast.LENGTH_SHORT).show();
-// }
- setStereoMono(true);
- break;
- case R.id.FMR_Freq_tune:
- String s = mEditFreq.getText().toString();
- float freq = 0;
- try {
- freq = Float.valueOf(s);
-
- // If input not between 87.5 to 108.0
- int station = FmRadioUtils.computeStation(freq);
- if (!FmRadioUtils.isValidStation(station)) {
- Toast.makeText(FmRadioEmActivity.this, "Please input 87.5 ~ 108.0.", Toast.LENGTH_SHORT).show();
- mEditFreq.setText(FmRadioUtils.formatStation(mCurrentStation));
- return;
- }
- } catch (NumberFormatException e) {
- Toast.makeText(FmRadioEmActivity.this, "bad float format.", Toast.LENGTH_SHORT).show();
- mEditFreq.setText(FmRadioUtils.formatStation(mCurrentStation));
- return;
- }
-
-
- // disable button before it finished tune.
- mButtonTune.setEnabled(false);
- tuneToStation(FmRadioUtils.computeStation(freq));
- break;
- case R.id.FMR_EM_RSSI_THRESHOLD_OK:
- String rssi = mEditRssiThreshold.getText().toString();
- int rssi_edit = 0;
- try {
- rssi_edit = Integer.valueOf(rssi);
- } catch (NumberFormatException e) {
- Log.e(TAG, "click rssi threshold button:" + e);
- Toast.makeText(FmRadioEmActivity.this, "bad format.", Toast.LENGTH_SHORT).show();
- mEditFreq.setText("0");
- return;
- }
- mButtonRssiThreshold.setEnabled(false);
- boolean isRssiOk = mService.setEmth(0, rssi_edit);
- mButtonRssiThreshold.setEnabled(true);
- if (isRssiOk) {
- Toast.makeText(FmRadioEmActivity.this, "Rssi Threshold set OK.", Toast.LENGTH_SHORT).show();
- } else {
- Toast.makeText(FmRadioEmActivity.this, "Rssi Threshold set fail.", Toast.LENGTH_SHORT).show();
- }
- break;
- case R.id.FMR_EM_DESENSE_RSSI_OK:
- String deRssi = mEditDesenseRssi.getText().toString();
- int deRssi_edit = 0;
- try {
- deRssi_edit = Integer.valueOf(deRssi);
- } catch (NumberFormatException e) {
- Log.e(TAG, "click desense rssi button:" + e);
- Toast.makeText(FmRadioEmActivity.this, "bad format.", Toast.LENGTH_SHORT).show();
- mEditDesenseRssi.setText("0");
- return;
- }
- mButtonDesenseRssi.setEnabled(false);
- boolean isDeRssiOk = mService.setEmth(1, deRssi_edit);
- mButtonDesenseRssi.setEnabled(true);
- if (isDeRssiOk) {
- Toast.makeText(FmRadioEmActivity.this, "Desense Rssi Threshold set OK.", Toast.LENGTH_SHORT).show();
- } else {
- Toast.makeText(FmRadioEmActivity.this, "Desense Rssi Threshold set fail.", Toast.LENGTH_SHORT).show();
- }
- break;
- case R.id.FMR_EM_MUTE_GAIN_OK:
- String mutegain = mEditMuteGain.getText().toString();
- int mutegain_edit = 0;
- try {
- mutegain_edit = Integer.valueOf(mutegain);
- } catch (NumberFormatException e) {
- Log.e(TAG, "click mute gain button:" + e);
- Toast.makeText(FmRadioEmActivity.this, "bad format.", Toast.LENGTH_SHORT).show();
- mEditMuteGain.setText("0");
- return;
- }
- mButtonMuteGain.setEnabled(false);
- boolean isMuteOk = mService.setEmth(2, mutegain_edit);
- mButtonMuteGain.setEnabled(true);
- if (isMuteOk) {
- Toast.makeText(FmRadioEmActivity.this, "Software mute gain set OK.", Toast.LENGTH_SHORT).show();
- } else {
- Toast.makeText(FmRadioEmActivity.this, "Software mute gain set fail.", Toast.LENGTH_SHORT).show();
- }
- break;
- case R.id.FMR_EM_CMD_OK:
- String cmd0 = mEditCMD0.getText().toString();
- String cmd1 = mEditCMD1.getText().toString();
- String cmd2 = mEditCMD2.getText().toString();
- String cmd3 = mEditCMD3.getText().toString();
- String cmd4 = mEditCMD4.getText().toString();
- String cmd5 = mEditCMD5.getText().toString();
- String cmd6 = mEditCMD6.getText().toString();
- String cmd7 = mEditCMD7.getText().toString();
- String cmd8 = mEditCMD8.getText().toString();
- String cmd9 = mEditCMD9.getText().toString();
- String cmd10 = mEditCMD10.getText().toString();
- String cmd11 = mEditCMD11.getText().toString();
- String cmd12 = mEditCMD12.getText().toString();
- String cmd13 = mEditCMD13.getText().toString();
- String cmd14 = mEditCMD14.getText().toString();
- String cmd15 = mEditCMD15.getText().toString();
- String cmd16 = mEditCMD16.getText().toString();
- String cmd17 = mEditCMD17.getText().toString();
- String cmd18 = mEditCMD18.getText().toString();
- String cmd19 = mEditCMD19.getText().toString();
- short[] cmdArray = new short[20];
- try {
- cmdArray = new short[] {
- Short.valueOf(cmd0),
- Short.valueOf(cmd1),
- Short.valueOf(cmd2),
- Short.valueOf(cmd3),
- Short.valueOf(cmd4),
- Short.valueOf(cmd5),
- Short.valueOf(cmd6),
- Short.valueOf(cmd7),
- Short.valueOf(cmd8),
- Short.valueOf(cmd9),
- Short.valueOf(cmd10),
- Short.valueOf(cmd11),
- Short.valueOf(cmd12),
- Short.valueOf(cmd13),
- Short.valueOf(cmd14),
- Short.valueOf(cmd15),
- Short.valueOf(cmd16),
- Short.valueOf(cmd17),
- Short.valueOf(cmd18),
- Short.valueOf(cmd19)};
- } catch (Exception e) {
- Log.e(TAG, "click cmd button:" + e);
- Toast.makeText(FmRadioEmActivity.this, "bad format.", Toast.LENGTH_SHORT).show();
- return;
- }
- short[] cmds = mService.emcmd(cmdArray);
-
- if (cmds == null) {
- Toast.makeText(FmRadioEmActivity.this, "cmd execute fail.", Toast.LENGTH_SHORT).show();
- Log.d(TAG, "cmd expand execute fail");
- return;
- }
- int size = cmds.length;
- int count = 0;
- String[] values = new String[]{"","","","",""};
- int line = -1;
- while (count < size) {
- if (count%4 == 0) {
- line += 1;
- }
- values[line] += ("0X" + cmds[count]);
- ++count;
- }
- mTextCMDReturn0.setText(values[0]);
- mTextCMDReturn1.setText(values[1]);
- mTextCMDReturn2.setText(values[2]);
- mTextCMDReturn3.setText(values[3]);
- mTextCMDReturn4.setText(values[4]);
- break;
- default :
- Log.d(TAG, "invalid view id");
- }
- }
- };
-
- /**
- * FM Radio listener
- */
- private FmRadioListener mFmRadioListener = new FmRadioListener() {
-
- /**
- * call back method from service
- */
- public void onCallBack(Bundle bundle) {
- Message msg = mHandler.obtainMessage(bundle.getInt(FmRadioListener.CALLBACK_FLAG));
- msg.setData(bundle);
- mHandler.sendMessage(msg);
- }
- };
-
- /**
- * Called when the activity is first created.
- */
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.d(TAG, "begin FMRadioEMActivity.onCreate");
- // Bind the activity to FM audio stream.
- setVolumeControlStream(AudioManager.STREAM_MUSIC);
- setContentView(R.layout.fm_rx_em);
- // Init FM database
- mContext = getApplicationContext();
- FmRadioStation.initFmDatabase(mContext);
-
- mTextStereoMono = (TextView) findViewById(R.id.FMR_Status_Stereomono);
- mTextRssi = (TextView) findViewById(R.id.FMR_Status_RSSI);
- mTextCapArray = (TextView) findViewById(R.id.FMR_Status_Caparray);
- mTextRdsBler = (TextView) findViewById(R.id.FMR_RDS_Ratio);
- mTextRdsPS = (TextView) findViewById(R.id.FMR_RDS_PS);
- mTextRdsRT = (TextView) findViewById(R.id.FMR_RDS_RT);
- mTextChipID = (TextView) findViewById(R.id.FMR_Chip_ID);
- mTextECOVersion = (TextView) findViewById(R.id.FMR_ECO_Version);
- mTextPatchVersion = (TextView) findViewById(R.id.FMR_Patch_Version);
- mTextDSPVersion = (TextView) findViewById(R.id.FMR_DSP_Version);
- mTextCMDReturn0 = (TextView) findViewById(R.id.FMR_EM_CMD_RETURN0);
- mTextCMDReturn1 = (TextView) findViewById(R.id.FMR_EM_CMD_RETURN1);
- mTextCMDReturn2 = (TextView) findViewById(R.id.FMR_EM_CMD_RETURN2);
- mTextCMDReturn3 = (TextView) findViewById(R.id.FMR_EM_CMD_RETURN3);
- mTextCMDReturn4 = (TextView) findViewById(R.id.FMR_EM_CMD_RETURN4);
- mEditFreq = (EditText) findViewById(R.id.FMR_Freq_edit);
- mEditRssiThreshold = (EditText) findViewById(R.id.FMR_EM_RSSI_THRESHOLD_edit);
- mEditMuteGain = (EditText) findViewById(R.id.FMR_EM_MUTE_GAIN_edit);
- mEditDesenseRssi = (EditText) findViewById(R.id.FMR_EM_DESENSE_RSSI_edit);
- mEditCMD0 = (EditText) findViewById(R.id.FMR_EM_CMD_edit0);
- mEditCMD1 = (EditText) findViewById(R.id.FMR_EM_CMD_edit1);
- mEditCMD2 = (EditText) findViewById(R.id.FMR_EM_CMD_edit2);
- mEditCMD3 = (EditText) findViewById(R.id.FMR_EM_CMD_edit3);
- mEditCMD4 = (EditText) findViewById(R.id.FMR_EM_CMD_edit4);
- mEditCMD5 = (EditText) findViewById(R.id.FMR_EM_CMD_edit5);
- mEditCMD6 = (EditText) findViewById(R.id.FMR_EM_CMD_edit6);
- mEditCMD7 = (EditText) findViewById(R.id.FMR_EM_CMD_edit7);
- mEditCMD8 = (EditText) findViewById(R.id.FMR_EM_CMD_edit8);
- mEditCMD9 = (EditText) findViewById(R.id.FMR_EM_CMD_edit9);
- mEditCMD10 = (EditText) findViewById(R.id.FMR_EM_CMD_edit10);
- mEditCMD11 = (EditText) findViewById(R.id.FMR_EM_CMD_edit11);
- mEditCMD12 = (EditText) findViewById(R.id.FMR_EM_CMD_edit12);
- mEditCMD13 = (EditText) findViewById(R.id.FMR_EM_CMD_edit13);
- mEditCMD14 = (EditText) findViewById(R.id.FMR_EM_CMD_edit14);
- mEditCMD15 = (EditText) findViewById(R.id.FMR_EM_CMD_edit15);
- mEditCMD16 = (EditText) findViewById(R.id.FMR_EM_CMD_edit16);
- mEditCMD17 = (EditText) findViewById(R.id.FMR_EM_CMD_edit17);
- mEditCMD18 = (EditText) findViewById(R.id.FMR_EM_CMD_edit18);
- mEditCMD19 = (EditText) findViewById(R.id.FMR_EM_CMD_edit19);
-
- mButtonRssiThreshold = (Button) findViewById(R.id.FMR_EM_RSSI_THRESHOLD_OK);
- mButtonMuteGain = (Button) findViewById(R.id.FMR_EM_MUTE_GAIN_OK);
- mButtonDesenseRssi = (Button) findViewById(R.id.FMR_EM_DESENSE_RSSI_OK);
- mButtonCMD = (Button) findViewById(R.id.FMR_EM_CMD_OK);
-
- mButtonTune = (Button) findViewById(R.id.FMR_Freq_tune);
- mRdAntennaS = (RadioButton) findViewById(R.id.FMR_Antenna_short);
- mRdAntennaL = (RadioButton) findViewById(R.id.FMR_Antenna_long);
- mRgAntenna = (RadioGroup) findViewById(R.id.FMR_Antenna_type);
- mRdStereo = (RadioButton) findViewById(R.id.FMR_Stereomono_stereo);
- mRdMono = (RadioButton) findViewById(R.id.FMR_Stereomono_mono);
-
- mRdAntennaS.setOnClickListener(mButtonClickListener);
- mRdAntennaL.setOnClickListener(mButtonClickListener);
- mRdStereo.setOnClickListener(mButtonClickListener);
- mRdMono.setOnClickListener(mButtonClickListener);
- mButtonTune.setOnClickListener(mButtonClickListener);
-
- mButtonRssiThreshold.setOnClickListener(mButtonClickListener);
- mButtonMuteGain.setOnClickListener(mButtonClickListener);
- mButtonDesenseRssi.setOnClickListener(mButtonClickListener);
- mButtonCMD.setOnClickListener(mButtonClickListener);
-
- // Should start FM service first.
-// ComponentName cn = startService(new Intent(FMRadioEMActivity.this, FmRadioService.class));
-// if (null == cn) {
-// Log.e(TAG, "Error: Cannot start FM service");
-// } else {
-// Log.d(TAG, "Start FM service successfully.");
-// mIsServiceStarted = true;
- /*mIsServiceBinded = bindService(new Intent(FMRadioEMActivity.this, FmRadioService.class), mServiceConnection,
- Context.BIND_AUTO_CREATE);
-// }
- if (!mIsServiceBinded) {
- Log.e(TAG, "Error: Cannot bind FM service");
- finish();
- return;
- } else {
- Log.d(TAG, "Bind FM service successfully.");
- }*/
-
-
- IntentFilter filterHeadset = new IntentFilter();
- filterHeadset.addAction(Intent.ACTION_HEADSET_PLUG);
- mHeadsetConnectionReceiver = new HeadsetConnectionReceiver();
- Log.d(TAG, "Register HeadsetConnectionReceiver");
- registerReceiver(mHeadsetConnectionReceiver, filterHeadset);
-
- // Get all the views and set their actions.
- mCurrentStation = FmRadioStation.getCurrentStation(mContext);
- mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
- refreshTextStatus(mIsPlaying);
- Log.d(TAG, "end FMRadioEMActivity.onCreate");
- }
-
- /**
- * called when bind service
- */
- private ServiceConnection mServiceConnection = new ServiceConnection() {
-
- /**
- * called when bind service
- * @param className service name
- * @param service service
- */
- public void onServiceConnected(ComponentName className, IBinder service) {
- Log.d(TAG, "begin FMRadioEMActivity.onServiceConnected");
- mService = ((FmRadioService.ServiceBinder)service).getService();
- if (null == mService) {
- Log.e(TAG, "Error: null interface");
- finish();
- return;
- }
-
- mService.registerFmRadioListener(mFmRadioListener);
- if (!isServiceInited()) {
- Log.d(TAG, "FM service is not init.");
- initService(mCurrentStation);
- refreshTextStatus(false);
- // InitialThread thread = new InitialThread();
- // thread.start();
- // mService.openDeviceAsync();
- Log.d(TAG, "onService connect.mCurrentStation: " + mCurrentStation);
- mService.powerUpAsync(FmRadioUtils.computeFrequency(mCurrentStation));
-
- } else {
- Log.d(TAG, "FM service is already init.");
- if (isDeviceOpen()) {
- // Get the current frequency in service and save it into
- // database.
- int iFreq = getFrequency();
- if (FmRadioUtils.isValidStation(iFreq)) {
- if (mCurrentStation != iFreq) {
- Log.d(TAG, "The frequency in FM service is not same as in database.");
- mCurrentStation = iFreq;
- // Save the current station frequency into data
- // base.
- FmRadioStation.setCurrentStation(mContext, mCurrentStation);
- } else {
- Log.d(TAG, "The frequency in FM service is same as in database.");
- }
- } else {
- Log.e(TAG, "Error: invalid frequency in service.");
- }
-
- mIsPlaying = isPowerUp();
-
- if (mIsPlaying) {
- Log.d(TAG, "FM is already power up.");
- refreshTextStatus(true);
- }
-
- if (mIsPlaying) {
- // Update the RDS text view.
- mPSString = getPS();
- mLRTextString = getLRText();
- mHandler.sendEmptyMessage(MSGID_UPDATE_RDS);
- }
-
- } else {
- // This is theoretically never happen.
- Log.e(TAG, "Error: FM device is not open");
- }
- mHandler.sendEmptyMessage(MSGID_INIT_OK);
- }
- Log.d(TAG, "<<< FMRadioEMActivity.onServiceConnected");
- }
-
- public void onServiceDisconnected(ComponentName className) {
- Log.d(TAG, ">>> FMRadioEMActivity.onServiceDisconnected");
- mService = null;
- Log.d(TAG, "<<< FMRadioEMActivity.onServiceDisconnected");
- }
- };
- private Handler mHandler = new Handler() {
- public void handleMessage(Message msg) {
- Log.d(TAG, ">>> handleMessage what: " + msg.what);
- if (mIsDestroying) {
- Log.d(TAG, "Warning: app is being destroyed.");
- Log.d(TAG, "<<< handleMessage");
- return;
- }
- Bundle bundle;
- switch (msg.what) {
- case MSGID_INIT_OK:
- mTextChipID.setText(getChipId());
- mTextECOVersion.setText(getEcoVersion());
- mTextPatchVersion.setText(getPatchVersion());
- mTextDSPVersion.setText(getDspVersion());
- break;
- case MSGID_TICK_EVENT:
- bundle = msg.getData();
- mTextRdsBler.setText(bundle.getString(RDS_BLER_STRING));
- mTextRssi.setText(bundle.getString(RDS_RSSI_STRING));
- mTextStereoMono.setText(bundle.getString(RDS_STEREMONO_STRING));
- mTextCapArray.setText(bundle.getString(RDS_CAPARRAY_STRING));
- break;
-
- case FmRadioListener.MSGID_POWERUP_FINISHED:
- if (isSpeakerUsed()) {
-// switchAntenna(0);
- mRgAntenna.check(R.id.FMR_Antenna_short);
- } else {
-// switchAntenna(1);
- mRgAntenna.check(R.id.FMR_Antenna_long);
- }
- bundle = msg.getData();
- mIsPlaying = bundle.getBoolean(FmRadioListener.KEY_IS_POWER_UP);
- mHandler.sendEmptyMessage(MSGID_INIT_OK);
- refreshTextStatus(true);
- break;
-
- case FmRadioListener.MSGID_SWITCH_ANNTENNA:
- bundle = msg.getData();
- boolean isSwitch = bundle.getBoolean(FmRadioListener.KEY_IS_SWITCH_ANNTENNA);
- if (isSwitch) {
-// mService.powerUpAsync(FmRadioUtils.computeFrequency(mCurrentStation));
- Log.d(TAG, "mHandler. switch anntenna ok");
- }
- break;
- case FmRadioListener.MSGID_TUNE_FINISHED:
- bundle = msg.getData();
- float frequency = bundle.getFloat(FmRadioListener.KEY_TUNE_TO_STATION);
- mCurrentStation = FmRadioUtils.computeStation(frequency);
- // Save the current station frequency into data base.
-// FmRadioStation.setCurrentStation(mContext, mCurrentStation);
- refreshTextStatus(true);
- break;
-
- case FmRadioListener.LISTEN_PS_CHANGED:
- case FmRadioListener.LISTEN_RT_CHANGED:
- bundle = msg.getData();
- mPSString = bundle.getString(FmRadioListener.KEY_PS_INFO);
- mLRTextString = bundle.getString(FmRadioListener.KEY_RT_INFO);
- showRDS();
- break;
- case FmRadioListener.LISTEN_RDSSTATION_CHANGED:
- bundle = msg.getData();
- mCurrentStation = bundle.getInt(FmRadioListener.KEY_RDS_STATION);
- break;
- default:
- Log.d(TAG, "invalid view id");
- }
- Log.d(TAG, "<<< handleMessage");
- }
-
- };
-
- private String formatCapArray(int raw) {
- final float[] pF = { 0.166f, 0.332f, 0.664f, 1.33f, 2.66f, 5.31f, 10.6f, 18.6f };
-
- float sum = 0.0f;
- for (int i = 0; i < pF.length; i++) {
- final int base = 6;
- sum += (((raw >> (base + i)) & 0x1) == 1 ? pF[i] : 0.0);
- }
- return String.format("%.2f", sum);
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- mIsServiceBinded = bindService(new Intent(FmRadioEmActivity.this, FmRadioService.class), mServiceConnection,
- Context.BIND_AUTO_CREATE);
-// }
- if (!mIsServiceBinded) {
- Log.e(TAG, "Error: Cannot bind FM service");
- finish();
- return;
- } else {
- Log.d(TAG, "Bind FM service successfully.");
- }
- }
- /**
- * called when activity resume
- */
- public void onResume() {
- super.onResume();
- /*final int oneSecond = 1000;
- mHandler.sendEmptyMessageDelayed(MSGID_TICK_EVENT, oneSecond);*/
- readTickEvent();
- }
-
- /**
- * called when activity pause
- */
- public void onPause() {
- mHandler.removeMessages(MSGID_TICK_EVENT);
- stopTickEventThread();
- super.onPause();
- }
-
- @Override
- protected void onStop() {
- Log.d(TAG, "start FMRadioActivity.onStop");
- if (mIsServiceBinded) {
- unbindService(mServiceConnection);
- mIsServiceBinded = false;
- }
- Log.d(TAG, "end FMRadioActivity.onStop");
- super.onStop();
- }
-
- /**
- * called when activity destroy
- */
- public void onDestroy() {
- Log.d(TAG, ">>> FMRadioEMActivity.onDestroy");
- mIsDestroying = true;
- mHandler.removeCallbacks(null);
- if (null != mHeadsetConnectionReceiver) {
- Log.d(TAG, "Unregister headset broadcast receiver.");
- unregisterReceiver(mHeadsetConnectionReceiver);
- mHeadsetConnectionReceiver = null;
- }
- // Should powerdown FM.
- if (mIsPlaying) {
- Log.d(TAG, "FM is Playing. So stop it.");
-// powerDown();
- mService.powerDownAsync();
- mIsPlaying = false;
- }
- if (null != mService) {
- mService.unregisterFmRadioListener(mFmRadioListener);
- }
- mService = null;
- mFmRadioListener = null;
-
-
- Log.d(TAG, "<<< FMRadioEMActivity.onDestroy");
- super.onDestroy();
- }
-
- private boolean isAntennaAvailable() {
- return mAudioManager.isWiredHeadsetOn();
- }
-
- private void tuneToStation(final int iStation) {
- mService.tuneStationAsync(FmRadioUtils.computeFrequency(iStation));
- }
-
-
- private void refreshTextStatus(boolean on) {
- if (!on) {
- mTextStereoMono.setText("X");
- mTextRssi.setText("X");
- mTextCapArray.setText("X");
- mTextRdsBler.setText("X");
- mTextRdsPS.setText("X");
- mTextRdsRT.setText("X");
- mEditFreq.setText(FmRadioUtils.formatStation(mCurrentStation));
- mRgAntenna.clearCheck();
- mButtonTune.setEnabled(false);
- } else {
- mButtonTune.setEnabled(true);
- }
- }
-
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- }
-
- /*private int rdsset(boolean rdson) {
- return mIsRDSSupported ? setRDS(rdson) : -1;
- }*/
-
- private void showRDS() {
- Log.v(TAG, "FMRadioEMActivity.showRDS PS : " + mPSString + "RT :" + mLRTextString);
- mTextRdsPS.setText(mPSString);
- mTextRdsRT.setText(mLRTextString);
- }
-
- /**
- * get chip id
- * @return chip id
- */
- public String getChipId() {
- int[] hardwareVersion = getHardwareVersion();
- int chipId = 0;
- if (null != hardwareVersion) {
- chipId = hardwareVersion[0];
- }
- return getStringValue(chipId);
- }
-
- /**
- * get ECO version
- * @return ECO version
- */
- public String getEcoVersion() {
- int[] hardwareVersion = getHardwareVersion();
- int ecoVersion = 0;
- if (null != hardwareVersion) {
- ecoVersion = hardwareVersion[1];
- }
- return "E" + getStringValue(ecoVersion);
- }
-
- /**
- * get patch version
- * @return patch version
- */
- public String getPatchVersion() {
- int[] hardwareVersion = getHardwareVersion();
- int patchVersion = 0;
- if (null != hardwareVersion) {
- final int patchVersionPosition = 3;
- patchVersion = hardwareVersion[patchVersionPosition];
- }
- String patchStr = getStringValue(patchVersion);
- float patch = 0;
- if (null != patchStr) {
- try {
- final int hundred = 100;
- patch = Float.parseFloat(patchStr) / hundred;
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- }
- return Float.toString(patch);
- }
-
- /**
- * get DSP version
- * @return DSP version
- */
- public String getDspVersion() {
- int[] hardwareVersion = getHardwareVersion();
- int dspVersion = 0;
- if (null != hardwareVersion) {
- dspVersion = hardwareVersion[2];
- }
- return "V" + getStringValue(dspVersion);
- }
-
- private boolean isDeviceOpen() {
- if (null != mService) {
- return mService.isDeviceOpen();
- }
- return false;
- }
-
- private boolean isPowerUp() {
- boolean bRet = false;
- if (null != mService) {
- return mService.isPowerUp();
- }
- return false;
- }
-
- private String getPS() {
- if (null != mService) {
- return mService.getPS();
- }
- return null;
- }
-
- private String getLRText() {
- if (null != mService) {
- return mService.getLRText();
- }
- return null;
- }
-
- private boolean isRdsSupported() {
- if (null != mService) {
- return mService.isRdsSupported();
- }
- return false;
- }
-
- private boolean isSpeakerUsed() {
- if (null != mService) {
- return mService.isSpeakerUsed();
- }
- return true;
- }
-
- private void initService(int iCurrentStation) {
- if (null != mService) {
- mService.initService(iCurrentStation);
- }
- }
-
- private boolean isServiceInited() {
- if (null != mService) {
- return mService.isServiceInited();
- }
- return false;
- }
-
- private int getFrequency() {
- if (null != mService) {
- return mService.getFrequency();
- }
- return 0;
- }
-
- /**
- * read cap array
- * @return cap array
- */
- public int readCapArray() {
- if (null != mService) {
- return mService.getCapArray();
- }
- return 0;
- }
-
- /**
- * get rssi value
- * @return rssi value
- */
- public int readRssi() {
- if (null != mService) {
- return mService.getRssi();
- }
- return 0;
- }
-
- /**
- * get stereo or mono
- * @return true is stereo, false mono
- */
- public boolean getStereoMono() {
- if (null != mService) {
- return mService.getStereoMono();
- }
- return false;
- }
-
- /**
- * set stereo or mono
- * @param isMono mono or not
- * @return whether success
- */
- public void setStereoMono(boolean isMono) {
-// if (null != mService) {
-// return mService.setStereoMono(isMono);
-// }
-// return false;
- mService.setStereoMono(isMono);
- }
-
- /**
- * switch antenna
- *
- * @param antenna
- * antenna (0, long antenna, 1 short antenna)
- * @return (0, success; 1 failed; 2 not support)
- */
- public void switchAntenna(int type) {
- /*if (null != mService) {
- return mService.switchAntenna(type);
- }
- return 2;*/
- mService.switchAntennaAsync(type);
- }
-
- /**
- * read rds bler
- *
- * @return rds bler value
- */
- public int readRdsBler() {
- if (null != mService) {
- return mService.getRdsBler();
- }
- return 0;
- }
-
- /**
- * get hardware version
- * @return hardware version information array(0, ChipId; 1, EcoVersion; 2, PatchVersion; 3,
- * DSPVersion)
- */
- public int[] getHardwareVersion() {
- int[] hardwareVersion = null;
- if (null != mService) {
- hardwareVersion = mService.getHardwareVersion();
- }
- Log.v(TAG, "getHardwareversion: " + Arrays.toString(hardwareVersion));
- return hardwareVersion;
- }
-
- /**
- * get actual version string
- * @param convertData version data
- * @return actual version string
- */
- public String getStringValue(int convertData) {
- StringBuilder temp = new StringBuilder();
- int quotient = convertData;
- int remainder = 0;
- while (quotient > 0) {
- final int hexadecimal = 16;
- remainder = quotient % hexadecimal;
- quotient = quotient / hexadecimal;
- temp = temp.append(remainder);
- }
- return temp.reverse().toString();
- }
-
- public void readTickEvent() {
- final int interval = 1000;
-
- if (null != mTickEventThread) {
- return;
- }
- mTickEventThread = new Thread() {
- public void run() {
- Log.d(TAG, ">>> tick envent Thread run()");
- while (true) {
- if (mIsTickEventExit) {
- break;
- }
-
- if (isDeviceOpen()) {
- Bundle bundle = new Bundle(3);
- bundle.putString(RDS_BLER_STRING, String.format("%d%%", readRdsBler()));
- bundle.putString(RDS_RSSI_STRING, String.format("%d", readRssi()));
- bundle.putString(RDS_STEREMONO_STRING, getStereoMono() ? "Stereo" : "Mono");
- String capStr = "N/A";
- if (!mRdAntennaL.isChecked()) {
- capStr = formatCapArray(readCapArray());
- }
- bundle.putString(RDS_CAPARRAY_STRING, capStr);
- Message msg = mHandler.obtainMessage(MSGID_TICK_EVENT);
- msg.setData(bundle);
- mHandler.sendMessage(msg);
- }
- // Do not handle other events.
- // Sleep 500ms to reduce inquiry frequency
- try {
- final int hundredMillisecond = 1000;
- Thread.sleep(hundredMillisecond);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- Log.d(TAG, "get tick information");
- }
- Log.d(TAG, "<<< tick envent Thread run()");
- }
- };
- Log.d(TAG, "Start tick event Thread.");
- mTickEventThread.start();
- }
-
- private void stopTickEventThread() {
- Log.d(TAG, ">>> stopTickEventThread");
- if (null != mTickEventThread) {
- mIsTickEventExit = true;
- mTickEventThread = null;
- }
- Log.d(TAG, "<<< stopTickEventThread");
- }
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioFavorite.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioFavorite.java
deleted file mode 100755
index 2ad6807..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioFavorite.java
+++ /dev/null
@@ -1,533 +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) 2011-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.
- */
-
-package com.mediatek.fmradio;
-
-import android.app.ActionBar;
-import android.app.Activity;
-import android.app.Dialog;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.Intent;
-import android.content.Loader;
-import android.database.Cursor;
-import android.media.AudioManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.util.Log;
-import android.view.ContextMenu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.widget.AdapterView;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.ListView;
-import android.widget.SimpleCursorAdapter;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.mediatek.fmradio.FmRadioService.OnExitListener;
-import com.mediatek.fmradio.dialogs.AddFavoriteDialog;
-import com.mediatek.fmradio.dialogs.DeleteFavoriteDialog;
-import com.mediatek.fmradio.dialogs.EditFavoriteDialog;
-import com.mediatek.fmradio.ext.IProjectStringExt;
-
-/**
- * This class interact with user, provider edit channel information, such as add
- * to favorite, edit favorite, delete from favorite
- */
-public class FmRadioFavorite extends Activity implements LoaderCallbacks,
- AddFavoriteDialog.AddFavoriteListener, EditFavoriteDialog.EditFavoriteListener,
- DeleteFavoriteDialog.DeleteFavoriteListener {
- // Logging
- private static final String TAG = "FmRx/Favorite";
-
- private static final String ADD_FAVORITE = "AddFavorite";
- private static final String EDIT_FAVORITE = "EditFavorite";
- private static final String DELETE_FAVORITE = "DeleteFavorite";
-
- public static final String ACTIVITY_RESULT = "ACTIVITY_RESULT";
-
- private static final int CONTMENU_ID_EDIT = 1; // content menu id edit
- private static final int CONTMENU_ID_DELETE = 2; // content menu id delete
- private static final int CONTMENU_ID_ADD = 3; // content menu id add
-
- private static final String FAVORITE_NAME = "FAVORITE_NAME";
- private static final String FAVORITE_FREQ = "FAVORITE_FREQ";
-
- private ListView mLvFavorites = null; // list view
- private ChannelListAdapter mAdapter = null; // adapter use to update UI
- private String mDlgStationName = null; // Record the long clicked station name
- private int mDlgStationFreq = 0; // Record the long clicked station frequency
- private Context mContext = null; // application context
- private OnExitListener mExitListener = null;
-
- // Plugin
- private IProjectStringExt mProjectStringExt = null;
-
- /**
- * on create
- *
- * @param savedInstanceState The save instance state
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.d(TAG, "begin FmRadioFavorite.onCreate");
- // Bind the activity to FM audio stream.
- setVolumeControlStream(AudioManager.STREAM_MUSIC);
- getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
- setContentView(R.layout.favorite);
- // display action bar and navigation button
- ActionBar actionBar = getActionBar();
- actionBar.setTitle(R.string.favorite_manager);
- actionBar.setDisplayHomeAsUpEnabled(true);
- mContext = getApplicationContext();
- if (savedInstanceState != null) {
- mDlgStationName = savedInstanceState.getString(FAVORITE_NAME);
- mDlgStationFreq = savedInstanceState.getInt(FAVORITE_FREQ);
- }
-
- mProjectStringExt = ExtensionUtils.getExtension(mContext);
-
- mAdapter = new ChannelListAdapter(
- this,
- R.layout.simpleadapter,
- null,
- new String[] {
- FmRadioStation.Station.COLUMN_STATION_TYPE,
- FmRadioStation.Station.COLUMN_STATION_FREQ,
- FmRadioStation.Station.COLUMN_STATION_NAME
- },
- new int[] {
- R.id.lv_station_type, R.id.lv_station_freq, R.id.lv_station_name
- });
- mLvFavorites = (ListView) findViewById(R.id.station_list);
- TextView emptyView = (TextView) findViewById(R.id.empty);
- mLvFavorites.setEmptyView(emptyView);
- mLvFavorites.setAdapter(mAdapter); // set adapter
- getLoaderManager().initLoader(0, null, this); // initial loader
-
- mLvFavorites.setOnItemClickListener(
- new AdapterView.OnItemClickListener() {
- /**
- * Click list item will finish activity and pass value to
- * other activity
- *
- * @param parent adapter view
- * @param view item view
- * @param position current position
- * @param id current id
- */
- @Override
- public void onItemClick(AdapterView> parent, View view, int position,
- long id) {
- // Set the selected frequency to main UI and finish the
- // favorite manager.
- TextView textView = (TextView) view.findViewById(R.id.lv_station_freq);
- float frequency = 0;
- try {
- frequency = Float.parseFloat(textView.getText().toString());
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- Intent intentResult = new Intent();
- intentResult.putExtra(ACTIVITY_RESULT, FmRadioUtils
- .computeStation(frequency));
- setResult(RESULT_OK, intentResult);
- finish();
- }
- }
- );
-
- mLvFavorites.setOnCreateContextMenuListener(
- /**
- * create context menu
- *
- * @param menu context menu
- * @param view context menu view
- * @param menuInfo context menu information
- */
- new View.OnCreateContextMenuListener() {
- @Override
- public void onCreateContextMenu(ContextMenu menu, View view,
- ContextMenu.ContextMenuInfo menuInfo) {
- menu.setHeaderTitle(R.string.contmenu_title);
- Cursor cursor = mAdapter.getCursor();
- int pos = ((AdapterView.AdapterContextMenuInfo) menuInfo).position;
- cursor.moveToPosition(pos);
- int stationType = cursor.getInt(
- cursor.getColumnIndex(FmRadioStation.Station.COLUMN_STATION_TYPE));
- if (FmRadioStation.STATION_TYPE_SEARCHED == stationType) {
- // Searched station.
- menu.add(0, CONTMENU_ID_ADD, 0, mProjectStringExt.getProjectString(mContext,
- R.string.add_to_favorite, R.string.add_to_favorite1));
- } else {
- // Favorite station.
- menu.add(0, CONTMENU_ID_EDIT, 0, R.string.contmenu_item_edit);
- menu.add(0, CONTMENU_ID_DELETE, 0, mProjectStringExt.getProjectString(mContext,
- R.string.contmenu_item_delete, R.string.contmenu_item_delete1));
- }
- }
- }
- );
-
- // Finish favorite when exit FM
- mExitListener = new FmRadioService.OnExitListener() {
- @Override
- public void onExit() {
- Log.d(TAG, "onExit()");
- Handler mainHandler = new Handler(Looper.getMainLooper());
- mainHandler.post(new Runnable() {
- @Override
- public void run() {
- FmRadioFavorite.this.finish();
- }
- });
- }
- };
- FmRadioService.registerExitListener(mExitListener);
- Log.d(TAG, "end FmRadioFavorite.onCreate");
- }
-
- /**
- * Handle the event when context menu selected
- *
- * @param item selected menu item
- *
- * @return whether need to handle other context item
- */
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- // get list view position
- int position = ((AdapterView.AdapterContextMenuInfo) item.getMenuInfo()).position;
- // get item view
- View itemView = mLvFavorites.getAdapter().getView(position, null, mLvFavorites);
- // get station frequency and station name of item view
- TextView stationFreqView = (TextView) itemView.findViewById(R.id.lv_station_freq);
- TextView stationNameView = (TextView) itemView.findViewById(R.id.lv_station_name);
- mDlgStationFreq = FmRadioUtils.computeStation(
- Float.parseFloat(stationFreqView.getText().toString()));
- mDlgStationName = stationNameView.getText().toString();
-
- switch (item.getItemId()) {
- case CONTMENU_ID_ADD:
- // show add favorite dialog
- showAddFavoriteDialog();
- break;
-
- case CONTMENU_ID_EDIT:
- // show edit favorite dialog
- showEditFavoriteDialog();
- break;
-
- case CONTMENU_ID_DELETE:
- // show delete favorite dialog
- showDeleteFavoriteDialog();
- break;
-
- default:
- Log.d(TAG, "invalid menu item");
- break;
- }
- return false;
- }
-
- /**
- * When menu is selected
- *
- * @param item The selected menu item
- *
- * @return true to consume it, false to can handle other
- */
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == android.R.id.home) {
- super.onBackPressed();
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-
- /**
- * Create cursor loader to initial list view
- *
- * @param id The id whose loader will be created
- * @param args Any arguments specified by caller
- *
- * @return cursor The loader according query result
- */
- @Override
- public Loader onCreateLoader(int id, Bundle args) {
- Uri uri = FmRadioStation.Station.CONTENT_URI;
- String select = FmRadioStation.Station.COLUMN_STATION_TYPE + " IN (?, ?)";
- String order = FmRadioStation.Station.COLUMN_STATION_TYPE + "," +
- FmRadioStation.Station.COLUMN_STATION_FREQ;
- CursorLoader cursorLoader = new CursorLoader(
- this,
- uri,
- FmRadioStation.COLUMNS,
- select,
- new String[] {
- String.valueOf(FmRadioStation.STATION_TYPE_FAVORITE),
- String.valueOf(FmRadioStation.STATION_TYPE_SEARCHED)
- },
- order);
- return cursorLoader;
- }
-
- /**
- * Swap adapter cursor when load finished
- *
- * @param loader The cursor loader
- * @param data The new cursor
- */
- @Override
- public void onLoadFinished(Loader loader, Cursor data) {
- mAdapter.swapCursor(data);
- }
-
- /**
- * Set adapter as null when loader reset
- *
- * @param loader The cursor loader
- */
- @Override
- public void onLoaderReset(Loader loader) {
- mAdapter.swapCursor(null);
- }
-
- /**
- * This class use associate cursor with adapter item view
- */
- static class ChannelListAdapter extends SimpleCursorAdapter {
- public ChannelListAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
- super(context, layout, c, from, to);
- }
-
- /**
- * This class use to manage view
- */
- static class ViewHolder {
- ImageView mStationTypeView;
- TextView mStationFreqView;
- TextView mStationNameView;
- }
-
- /**
- * Create item view
- *
- * @param context The context
- * @param cursor The cursor
- * @param parent The list view group
- */
- @Override
- public View newView(Context context, Cursor cursor, ViewGroup parent) {
- View view = super.newView(context, cursor, parent);
- ViewHolder viewHolder = new ViewHolder();
- viewHolder.mStationTypeView = (ImageView) view.findViewById(R.id.lv_station_type);
- viewHolder.mStationFreqView = (TextView) view.findViewById(R.id.lv_station_freq);
- viewHolder.mStationNameView = (TextView) view.findViewById(R.id.lv_station_name);
- view.setTag(viewHolder);
- return view;
- }
-
- /**
- * Bind cursor data to list view
- *
- * @param view The item view
- * @param context The The context
- * @param cursor The cursor
- */
- @Override
- public void bindView(View view, Context context, Cursor cursor) {
- ViewHolder viewHolder = (ViewHolder) view.getTag();
- int stationType = cursor.getInt(
- cursor.getColumnIndex(FmRadioStation.Station.COLUMN_STATION_TYPE));
- int stationFreq = cursor.getInt(
- cursor.getColumnIndex(FmRadioStation.Station.COLUMN_STATION_FREQ));
- String stationName = cursor.getString(
- cursor.getColumnIndex(FmRadioStation.Station.COLUMN_STATION_NAME));
- if (FmRadioStation.STATION_TYPE_FAVORITE == stationType) {
- viewHolder.mStationTypeView.setImageResource(R.drawable.btn_fm_favorite_on);
- } else {
- viewHolder.mStationTypeView.setImageResource(0);
- }
- viewHolder.mStationFreqView.setText(FmRadioUtils.formatStation(stationFreq));
- viewHolder.mStationNameView.setText(stationName);
- }
- }
-
- private void showAddFavoriteDialog() {
- AddFavoriteDialog fragment = AddFavoriteDialog.newInstance(mDlgStationName,
- mDlgStationFreq);
- fragment.show(getFragmentManager(), ADD_FAVORITE);
-
- }
-
- private void showEditFavoriteDialog() {
- EditFavoriteDialog newFragment = EditFavoriteDialog.newInstance(mDlgStationName,
- mDlgStationFreq);
- newFragment.show(getFragmentManager(), EDIT_FAVORITE);
- }
-
- private void showDeleteFavoriteDialog() {
- DeleteFavoriteDialog newFragment = DeleteFavoriteDialog.newInstance();
- newFragment.show(getFragmentManager(), DELETE_FAVORITE);
- }
-
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- outState.putString(FAVORITE_NAME, mDlgStationName);
- outState.putInt(FAVORITE_FREQ, mDlgStationFreq);
- super.onSaveInstanceState(outState);
- }
-
- /**
- * Add searched station as favorite station
- */
- public void addFavorite() {
- AddFavoriteDialog dialogFragment =
- ((AddFavoriteDialog) getFragmentManager().findFragmentByTag(ADD_FAVORITE));
- if (null == dialogFragment) {
- return;
- }
-
- Dialog dialog = dialogFragment.getDialog();
- if (null == dialog) {
- return;
- }
-
- EditText editText = (EditText) dialog.findViewById(R.id.dlg_add_station_name_text);
- if (null == editText) {
- return;
- }
-
- String newName = editText.getText().toString().trim();
- // if user not input String, use previous displayed station name
- // if not have previous displayed station name, use default station name
- if (0 != newName.length()) {
- mDlgStationName = newName;
- }
- // update the station name and station type in database
- // according the frequency
- FmRadioStation.updateStationToDb(mContext, mDlgStationName,
- FmRadioStation.STATION_TYPE_FAVORITE, mDlgStationFreq);
- mAdapter.notifyDataSetChanged();
- }
-
- /**
- * Edit favorite station frequency and station name
- */
- public void editFavorite() {
- EditFavoriteDialog dialogFragment =
- (EditFavoriteDialog) getFragmentManager().findFragmentByTag(EDIT_FAVORITE);
- if (null == dialogFragment) {
- return;
- }
- Dialog dialog = dialogFragment.getDialog();
- if (null == dialog) {
- return;
- }
-
- EditText nameEditText = (EditText) dialog.findViewById(R.id.dlg_edit_station_name_text);
- EditText frequencyEditText =
- (EditText) dialog.findViewById(R.id.dlg_edit_station_freq_text);
- if ((null == nameEditText) || (null == frequencyEditText)) {
- return;
- }
- String newName = nameEditText.getText().toString().trim();
- String newStationFreqStr = frequencyEditText.getText().toString().trim();
- // if user not input String, use previous displayed station name
- // if not have previous displayed station name, use default station name
- if (0 != newName.length()) {
- mDlgStationName = newName;
- }
-
- float newStationFreq = 0;
- try {
- newStationFreq = Float.parseFloat(newStationFreqStr);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
-
- int newStation = FmRadioUtils.computeStation(newStationFreq);
- if (FmRadioUtils.isValidStation(newStation)) {
- // if station is exist in channel list delete it
- // ignore current station, because current station not display in
- // listview
- if (FmRadioStation.isStationExist(mContext, newStation,
- FmRadioStation.STATION_TYPE_FAVORITE) && (newStation != mDlgStationFreq)) {
- FmRadioStation.deleteStationInDb(mContext, newStation,
- FmRadioStation.STATION_TYPE_FAVORITE);
- } else if (FmRadioStation.isStationExist(mContext, newStation,
- FmRadioStation.STATION_TYPE_SEARCHED)) {
- FmRadioStation.deleteStationInDb(mContext, newStation,
- FmRadioStation.STATION_TYPE_SEARCHED);
- }
- FmRadioStation.updateStationToDb(mContext, mDlgStationName, mDlgStationFreq,
- newStation,
- FmRadioStation.STATION_TYPE_FAVORITE);
- mAdapter.notifyDataSetChanged();
- } else {
- Toast.makeText(getApplicationContext(), R.string.toast_invalid_frequency,
- Toast.LENGTH_SHORT).show();
- }
- }
-
- /**
- * Delete favorite from favorite channel list, make it as searched station
- */
- public void deleteFavorite() {
- // update the station type from favorite to searched.
- FmRadioStation.updateStationToDb(mContext, mDlgStationName,
- FmRadioStation.STATION_TYPE_SEARCHED, mDlgStationFreq);
- mAdapter.notifyDataSetChanged();
- }
-
- @Override
- protected void onDestroy() {
- Log.d(TAG, "onDestory()");
- FmRadioService.unregisterExitListener(mExitListener);
- super.onDestroy();
- }
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioListener.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioListener.java
deleted file mode 100755
index 1250fc6..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioListener.java
+++ /dev/null
@@ -1,140 +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) 2011-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.
- */
-
-package com.mediatek.fmradio;
-
-import android.os.Bundle;
-
-/**
- * Activity connect FMRadio service should implements this interface to update
- * ui or status
- */
-public interface FmRadioListener {
- /**
- * directly call back from service to activity
- */
- // FM RDS station changed
- int LISTEN_RDSSTATION_CHANGED = 0x00100010;
-
- // FM PS information changed
- int LISTEN_PS_CHANGED = 0x00100011;
-
- // FM RT information changed
- int LISTEN_RT_CHANGED = 0x00100100;
-
- // FM Record state changed
- int LISTEN_RECORDSTATE_CHANGED = 0x00100101; // 1048833
-
- // FM record error occur
- int LISTEN_RECORDERROR = 0x00100110; // 1048848
-
- // FM record mode change
- int LISTEN_RECORDMODE_CHANGED = 0x00100111; // 4018849
-
- // FM Record state changed
- int LISTEN_SPEAKER_MODE_CHANGED = 0x00101000; // 1052672
-
- // Bundle keys
- String SWITCH_ANNTENNA_VALUE = "switch_anntenna_value";
- String CALLBACK_FLAG = "callback_flag";
- String KEY_IS_POWER_UP = "key_is_power_up";
- String KEY_IS_POWER_DOWN = "key_is_power_down";
- String KEY_IS_SWITCH_ANNTENNA = "key_is_switch_anntenna";
- String KEY_IS_TUNE = "key_is_tune";
- String KEY_TUNE_TO_STATION = "key_tune_to_station";
- String KEY_IS_SEEK = "key_is_seek";
- String KEY_SEEK_TO_STATION = "key_seek_to_station";
- String KEY_IS_SCAN = "key_is_scan";
- String KEY_RDS_STATION = "key_rds_station";
- String KEY_PS_INFO = "key_ps_info";
- String KEY_RT_INFO = "key_rt_info";
- String KEY_STATION_NUM = "key_station_num";
-
- // Audio focus related
- String KEY_AUDIOFOCUS_CHANGED = "key_audiofocus_changed";
-
- // Recording
- String KEY_RECORDING_STATE = "key_is_recording_state";
- String KEY_RECORDING_ERROR_TYPE = "key_recording_error_type";
- String KEY_IS_RECORDING_MODE = "key_is_recording_mode";
-
- // For change speaker/earphone mode
- String KEY_IS_SPEAKER_MODE = "key_is_speaker_mode";
-
- /**
- * handle message: call back from service to activity
- */
- // Message to handle
- int MSGID_UPDATE_RDS = 1;
- int MSGID_UPDATE_CURRENT_STATION = 2;
- int MSGID_ANTENNA_UNAVAILABE = 3;
- int MSGID_SWITCH_ANNTENNA = 4;
- int MSGID_SET_RDS_FINISHED = 5;
- int MSGID_SET_CHANNEL_FINISHED = 6;
- int MSGID_SET_MUTE_FINISHED = 7;
- // Fm main
- int MSGID_POWERUP_FINISHED = 9;
- int MSGID_POWERDOWN_FINISHED = 10;
- int MSGID_FM_EXIT = 11;
- int MSGID_SCAN_CANCELED = 12;
- int MSGID_SCAN_FINISHED = 13;
- int MSGID_AUDIOFOCUS_FAILED = 14;
- int MSGID_TUNE_FINISHED = 15;
- int MSGID_SEEK_FINISHED = 16;
- int MSGID_ACTIVE_AF_FINISHED = 18;
- // Recording
- int MSGID_RECORD_STATE_CHANGED = 19;
- int MSGID_RECORD_ERROR = 20;
- int MSGID_RECORD_MODE_CHANED = 21;
- int MSGID_STARTRECORDING_FINISHED = 22;
- int MSGID_STOPRECORDING_FINISHED = 23;
- int MSGID_STARTPLAYBACK_FINISHED = 24;
- int MSGID_STOPPLAYBACK_FINISHED = 25;
- int MSGID_SAVERECORDING_FINISHED = 26;
- // Audio focus related
- int MSGID_AUDIOFOCUS_CHANGED = 30;
-
- int NOT_AUDIO_FOCUS = 33;
-
- // For refresh time
- int MSGID_REFRESH = 101;
-
- /**
- * Call back method to activity from service
- */
- void onCallBack(Bundle bundle);
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioNative.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioNative.java
deleted file mode 100755
index 8f86268..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioNative.java
+++ /dev/null
@@ -1,253 +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) 2011-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.
- */
-
-package com.mediatek.fmradio;
-
-/**
- * This class define FM native interface, will description FM native interface
- */
-public class FmRadioNative {
- static {
- System.loadLibrary("fmjni");
- }
-
- /**
- * Open FM device, call before power up
- *
- * @return (true,success; false, failed)
- */
- static native boolean openDev();
-
- /**
- * Close FM device, call after power down
- *
- * @return (true, success; false, failed)
- */
- static native boolean closeDev();
-
- /**
- * power up FM with frequency use long antenna
- *
- * @param frequency frequency(50KHZ, 87.55; 100KHZ, 87.5)
- *
- * @return (true, success; false, failed)
- */
- static native boolean powerUp(float frequency);
-
- /**
- * Power down FM
- *
- * @param type (0, FMRadio; 1, FMTransimitter)
- *
- * @return (true, success; false, failed)
- */
- static native boolean powerDown(int type);
-
- /**
- * tune to frequency
- *
- * @param frequency frequency(50KHZ, 87.55; 100KHZ, 87.5)
- *
- * @return (true, success; false, failed)
- */
- static native boolean tune(float frequency);
-
- /**
- * seek with frequency in direction
- *
- * @param frequency frequency(50KHZ, 87.55; 100KHZ, 87.5)
- * @param isUp (true, next channel; false previous channel)
- *
- * @return frequency(float)
- */
- static native float seek(float frequency, boolean isUp);
-
- /**
- * Auto scan(from 87.50-108.00)
- *
- * @return The scan channel array(short)
- */
- static native short[] autoScan();
-
- /**
- * Stop scan, also can stop seek, other native when scan should call stop
- * scan first, else will execute wait auto scan finish
- *
- * @return (true, can stop scan process; false, can't stop scan process)
- */
- static native boolean stopScan();
-
- /**
- * Open or close rds fuction
- *
- * @param rdson The rdson (true, open; false, close)
- *
- * @return rdsset
- */
- static native int setRds(boolean rdson);
-
- /**
- * Read rds events
- *
- * @return rds event type
- */
- static native short readRds();
-
- /**
- * Get program service(program name)
- *
- * @return The program name
- */
- static native byte[] getPs();
-
- /**
- * Get radio text, RDS standard not support Chinese character
- *
- * @return The radio text(byte)
- */
- static native byte[] getLrText();
-
- /**
- *Active alternative frequencies
- *
- * @return The frequency(float)
- */
- static native short activeAf();
-
- /**
- * Mute or unmute FM voice
- *
- * @param mute (true, mute; false, unmute)
- *
- * @return (true, success; false, failed)
- */
- static native int setMute(boolean mute);
-
- /**
- * Inquiry if RDS is support in driver
- *
- * @return (1, support; 0, NOT support; -1, error)
- */
- static native int isRdsSupport();
-
- /**
- * Switch antenna
- *
- * @param antenna antenna (0, long antenna, 1 short antenna)
- *
- * @return (0, success; 1 failed; 2 not support)
- */
- static native int switchAntenna(int antenna);
-
- /**
- * Set Fm status to tell native RX or TX is on
- * @param which 0 is RX, 1 is TX
- * @param on true is on
- * @return
- */
- static native boolean setFmStatus(int which, boolean on);
-
- /**
- * Get the native Fm status
- * @param which 0 is RX ON, 1 is TX ON, 2 is TX Scaning
- * @return true if dothing
- */
- static native boolean getFmStatus(int which);
-
- // FM EM start
- /**
- * get rssi from hardware(use for engineer mode)
- *
- * @return rssi value
- */
- static native int readRssi();
-
- /**
- * Inquiry if fm stereo mono(true, stereo; false mono)
- *
- * @return (true, stereo; false, mono)
- */
- static native boolean stereoMono();
-
- /**
- * Force set to stero/mono mode
- *
- * @param isMono
- * (true, mono; false, stereo)
- * @return (true, success; false, failed)
- */
- static native boolean setStereoMono(boolean isMono);
-
- /**
- * Read cap array of short antenna
- *
- * @return cap array value
- */
- static native short readCapArray();
-
- /**
- * read rds bler
- *
- * @return rds bler value
- */
- static native short readRdsBler();
-
- /**
- * send variables to native, and get some variables return.
- * @param val send to native
- * @return get value from native
- */
- static native short[] emcmd(short[] val);
-
- /**
- * set RSSI, desense RSSI, mute gain soft
- * @param index flag which will execute
- * (0:rssi threshold,1:desense rssi threshold,2: SGM threshold)
- * @param value send to native
- * @return execute ok or not
- */
- static native boolean emsetth(int index, int value);
-
- /**
- * get hardware version
- *
- * @return hardware version information array(0, ChipId; 1, EcoVersion; 2, PatchVersion; 3,
- * DSPVersion)
- */
- static native int[] getHardwareVersion();
- // FM EM end
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioService.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioService.java
deleted file mode 100755
index 08fb221..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioService.java
+++ /dev/null
@@ -1,2802 +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) 2011-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.
- */
-
-package com.mediatek.fmradio;
-
-import android.app.ActivityManager;
-import android.app.ActivityManager.RunningAppProcessInfo;
-import android.app.Notification;
-import android.app.PendingIntent;
-import android.app.Service;
-import android.bluetooth.BluetoothA2dp;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothProfile;
-import android.content.BroadcastReceiver;
-import android.content.ContentProviderOperation;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.OperationApplicationException;
-import android.content.res.Configuration;
-import android.media.AudioManager;
-import android.media.AudioManager.OnAudioFocusChangeListener;
-import android.media.AudioSystem;
-import android.media.MediaPlayer;
-import android.net.Uri;
-import android.os.Binder;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
-import android.os.PowerManager;
-import android.os.PowerManager.WakeLock;
-import android.os.RemoteException;
-import android.util.Log;
-
-import com.mediatek.fmradio.FmRadioStation.Station;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-/* Vanzo:tanglei on: Sat, 14 Mar 2015 11:51:16 +0800
- */
-//import com.android.featureoption.FeatureOption;
-// End of Vanzo:tanglei
-
-/**
- * Background service to control FM or do background tasks.
- */
-public class FmRadioService extends Service implements FmRecorder.OnRecorderStateChangedListener {
- // Logging
- private static final String TAG = "FmRx/Service";
-
- // Broadcast messages from clients to FM service.
- public static final String ACTION_TOFMSERVICE_POWERDOWN
- = "com.mediatek.FMRadio.FMRadioService.ACTION_TOFMSERVICE_POWERDOWN";
- // Broadcast messages to FM Tx service.
- public static final String ACTION_TOFMTXSERVICE_POWERDOWN
- = "com.mediatek.FMTransmitter.FMTransmitterService.ACTION_TOFMTXSERVICE_POWERDOWN";
- // Broadcast messages to mATV service.
- public static final String ACTION_TOATVSERVICE_POWERDOWN
- = "com.mediatek.app.mtv.ACTION_REQUEST_SHUTDOWN";
- // Broadcast messages to music service.
- public static final String ACTION_TOMUSICSERVICE_POWERDOWN
- = "com.android.music.musicservicecommand.pause";
- // Broadcast messages from mATV service.
- public static final String ACTION_FROMATVSERVICE_POWERUP = "com.mediatek.app.mtv.POWER_ON";
-
- // Broadcast messages from other sounder APP to FM service
- private static final String SOUND_POWER_DOWN_MSG = "com.android.music.musicservicecommand";
- private static final String CMDPAUSE = "pause";
-
- // HandlerThread Keys
- private static final String FM_FREQUENCY = "frequency";
- private static final String OPTION = "option";
- private static final String RECODING_FILE_NAME = "name";
-
- // RDS events
- // PS
- private static final int RDS_EVENT_PROGRAMNAME = 0x0008;
- // RT
- private static final int RDS_EVENT_LAST_RADIOTEXT = 0x0040;
- // AF
- private static final int RDS_EVENT_AF = 0x0080;
-
- // Headset
- private static final int HEADSET_PLUG_IN = 1;
- // Short antenna support
- private static final boolean SHORT_ANNTENNA_SUPPORT = FmRadioUtils.isFmShortAntennaSupport();
-
- // Notification id
- private static final int NOTIFICATION_ID = 1;
-
- // Set audio policy for FM
- // should check AUDIO_POLICY_FORCE_FOR_MEDIA in audio_policy.h
- private static final int FOR_PROPRIETARY = 1;
- // Forced Use value
- private int mForcedUseForMedia;
-
- // TX and RX interaction
- private static final int CURRENT_RX_ON = 0;
- private static final int CURRENT_TX_ON = 1;
- private static final int CURRENT_TX_SCAN = 2;
-
- // FM recorder
- FmRecorder mFmRecorder = null;
- private BroadcastReceiver mSdcardListener = null;
- private int mRecordState = FmRecorder.STATE_INVALID;
- private int mRecorderErrorType = -1;
- // If eject record sdcard, should set Value false to not record.
- // Key is sdcard path(like "/storage/sdcard0"), V is to enable record or
- // not.
- private HashMap mSdcardStateMap = new HashMap();
- // The show name in save dialog but saved in service
- // If modify the save title it will be not null, otherwise it will be null
- private String mModifiedRecordingName = null;
- // record the listener list, will notify all listener in list
- private ArrayList mRecords = new ArrayList();
- // record FM whether in recording mode
- private boolean mIsInRecordingMode = false;
- // record sd card path when start recording
- private static String sRecordingSdcard = FmRadioUtils.getDefaultStoragePath();
-
- // RDS
- // PS String
- private String mPSString = "";
- // RT String
- private String mLRTextString = "";
- // PS RT
- private boolean mIsPSRTEnabled = false;
- // AF
- private boolean mIsAFEnabled = false;
- // RDS thread use to receive the information send by station
- private Thread mRdsThread = null;
- // record whether RDS thread exit
- private boolean mIsRdsThreadExit = false;
-
- // State variables
- // Record whether FM is in native scan state
- private boolean mIsNativeScanning = false;
- // Record whether FM is in scan thread
- private boolean mIsScanning = false;
- // Record whether FM is in seeking state
- private boolean mIsNativeSeeking = false;
- // Record whether FM is in native seek
- private boolean mIsSeeking = false;
- // Record whether searching progress is canceled
- private boolean mIsStopScanCalled = false;
- // Record whether is speaker used
- private boolean mIsSpeakerUsed = false;
- // Record whether device is open
- private boolean mIsDeviceOpen = false;
- // Record whether FM is power up
- private boolean mIsPowerUp = false;
- // Record whether is power uping, if so, should judge in activity back key.
- private boolean mIsPowerUping = false;
- // Record whether service is init
- private boolean mIsServiceInited = false;
- // Fm power down by loss audio focus,should make power down menu item can
- // click
- private boolean mIsMakePowerDown = false;
-
- // Instance variables
- private Context mContext = null;
- private AudioManager mAudioManager = null;
- private ActivityManager mActivityManager = null;
- private MediaPlayer mFmPlayer = null;
- private WakeLock mWakeLock = null;
- // Audio focus is held or not
- private boolean mIsAudioFocusHeld = false;
- // Focus transient lost
- private boolean mPausedByTransientLossOfFocus = false;
- private int mCurrentStation = FmRadioUtils.DEFAULT_STATION;
- // Headset plug state (0:long antenna plug in, 1:long antenna plug out)
- private int mValueHeadSetPlug = 1;
- // For bind service
- private final IBinder mBinder = new ServiceBinder();
- // Broadcast to receive the external event
- private FmServiceBroadcastReceiver mBroadcastReceiver = null;
- // Async handler
- private FmRadioServiceHandler mFmServiceHandler;
- // Lock for lose audio focus and receive SOUND_POWER_DOWN_MSG
- // at the same time
- // while recording call stop recording not finished(status is still
- // RECORDING), but
- // SOUND_POWER_DOWN_MSG will exitFm(), if it is RECORDING will discard the
- // record.
- // 1. lose audio focus -> stop recording(lock) -> set to IDLE and show save
- // dialog
- // 2. exitFm() -> check the record status, discard it if it is recording
- // status(lock)
- // Add this lock the exitFm() while stopRecording()
- private Object mStopRecordingLock = new Object();
- // The listener for exit, should finish favorite when exit FM
- private static OnExitListener sExitListener = null;
- // Record FmRadioActivity state
- private static boolean sActivityIsOnStop = false;
-
- @Override
- public IBinder onBind(Intent intent) {
- Log.d(TAG, "FmRadioService.onBind: " + intent);
- return mBinder;
- }
-
- /**
- * class use to return service instance
- */
- public class ServiceBinder extends Binder {
- /**
- * get FM service instance
- *
- * @return service instance
- */
- FmRadioService getService() {
- return FmRadioService.this;
- }
- }
-
- /**
- * Broadcast monitor external event, Other app want FM stop, Phone shut
- * down, screen state, headset state
- */
- private class FmServiceBroadcastReceiver extends BroadcastReceiver {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.d(TAG, ">>> FmRadioService.onReceive");
- String action = intent.getAction();
- String command = intent.getStringExtra("command");
- Log.d(TAG, "Action/Command: " + action + " / " + command);
- // other app want FM stop, stop FM
- if (ACTION_TOFMSERVICE_POWERDOWN.equals(action)
- || ACTION_FROMATVSERVICE_POWERUP.equals(action)
- || (SOUND_POWER_DOWN_MSG.equals(action) && CMDPAUSE.equals(command))) {
- // need remove all messages, make power down will be execute
- mFmServiceHandler.removeCallbacksAndMessages(null);
-
- Log.d(TAG, "onReceive.SOUND_POWER_DOWN_MSG. exit FM");
- exitFm();
- stopSelf();
- // phone shut down, so exit FM
- } else if (Intent.ACTION_SHUTDOWN.equals(action)) {
- /**
- * here exitFm, system will send broadcast, system will shut
- * down, so fm does not need call back to activity
- */
- mFmServiceHandler.removeCallbacksAndMessages(null);
- exitFm();
- // screen on, if FM play, open rds
- } else if (Intent.ACTION_SCREEN_ON.equals(action)) {
-
- setRdsAsync(true);
- // screen off, if FM play, close rds
- } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
- setRdsAsync(false);
- // switch antenna when headset plug in or plug out
- } else if (Intent.ACTION_HEADSET_PLUG.equals(action)) {
- // switch antenna should not impact audio focus status
- mValueHeadSetPlug = (intent.getIntExtra("state", -1) == HEADSET_PLUG_IN) ? 0 : 1;
- switchAntennaAsync(mValueHeadSetPlug);
-
- if (SHORT_ANNTENNA_SUPPORT) {
- boolean isSwitch = (switchAntenna(mValueHeadSetPlug) == 0) ? true : false;
- Log.d(TAG, "onReceive.switch anntenna:isWitch:" + isSwitch);
-
- // Plug out->Speaker Mode; Plug in->Earphone Mode
- boolean plugInEarphone = (0 == mValueHeadSetPlug);
- // Need check to switch to earphone mode for audio will
- // change to AudioSystem.FORCE_NONE
- if (plugInEarphone) {
- mForcedUseForMedia = AudioSystem.FORCE_NONE;
- mIsSpeakerUsed = false;
- }
- //setSpeakerPhoneOn(!plugInEarphone);
- // Notify UI change to earphone mode, false means not speaker mode
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.LISTEN_SPEAKER_MODE_CHANGED);
- bundle.putBoolean(FmRadioListener.KEY_IS_SPEAKER_MODE, !plugInEarphone);
- notifyActivityStateChanged(bundle);
-
- powerUpAutoIfNeed();
- } else {
- // Avoid Service is killed,and receive headset plug in
- // broadcast again
- if (!mIsServiceInited) {
- Log.d(TAG, "onReceive.switch anntenna:service is not init");
- powerUpAutoIfNeed();
- return;
- }
- /*
- * If ear phone insert and activity is
- * foreground. power up FM automatic
- */
- if ((0 == mValueHeadSetPlug) && isActivityForeground()) {
- Log.d(TAG, "onReceive.switch anntenna:need auto power up");
- powerUpAsync(FmRadioUtils.computeFrequency(mCurrentStation));
- } else if (1 == mValueHeadSetPlug) {
- Log.d(TAG, "plug out earphone, need to stop fm");
- // ALPS01687760 Avoid sound from speaker after plug out earphone when recording
- // plug out earphone will power down or exit, need to mute first anyway
- setMute(true);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SCAN_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SEEK_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_TUNE_FINISHED);
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_POWERDOWN_FINISHED);
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_POWERUP_FINISHED);
- stopFmFocusLoss(AudioManager.AUDIOFOCUS_LOSS);
-
- // Need check to switch to earphone mode for audio will
- // change to AudioSystem.FORCE_NONE
- setSpeakerPhoneOn(false);
-
- // Notify UI change to earphone mode, false means not speaker mode
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.LISTEN_SPEAKER_MODE_CHANGED);
- bundle.putBoolean(FmRadioListener.KEY_IS_SPEAKER_MODE, false);
- notifyActivityStateChanged(bundle);
- }
- }
-
- } else if (BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED.equals(action)) {
- int connectState = intent.getIntExtra(BluetoothA2dp.EXTRA_STATE, 0);
- Log.d(TAG, "ACTION_CONNECTION_STATE_CHANGED: connectState=" + connectState + ", ispowerup="
- + mIsPowerUp);
- handleBtConnectState(connectState);
-/* Vanzo:tanglei on: Fri, 13 Mar 2015 21:26:14 +0800
- * earphone key action
- */
- } //else if (FeatureOption.VANZO_FEATURE_EARPHONE_KEY_ACTION && "com.mediatek.FMRadio.FMRadioService.NEXT_STATION".equals(action)) {
- //seekStationAsync(FmRadioUtils.computeFrequency(mCurrentStation), true);
-// End of Vanzo:tanglei
- //}
- else {
- Log.w(TAG, "Error: undefined action.");
- }
- Log.d(TAG, "<<< FmRadioService.onReceive");
- }
- }
-
- /**
- * ALPS01756692 No sound after click FM app and power key
- * Need to power up auto for two cases:
- * case 1: Launcher click FM app, then quickly click Power key to lock phone.
- * case 2: Launcher click FM app, then quickly click Home key.
- * Because power up action is in FmRadioActivity.onServiceConnected(), these two cases
- * will not callback onServiceConnected() cause FmRadioActivity.onStop() has called unbind()
- */
- private void powerUpAutoIfNeed() {
- if ((0 == mValueHeadSetPlug)) {
- if (!mIsPowerUping && !mIsPowerUp && sActivityIsOnStop) {
- Log.w(TAG, "Power up for start app then quick click power/home");
- int iCurrentStation = FmRadioStation.getCurrentStation(mContext);
- powerUpAsync(FmRadioUtils.computeFrequency(iCurrentStation));
- }
- }
- }
-
- /**
- * handle FM over BT connect state
- *
- * @param connectState
- * FM over BT connect state
- */
- private void handleBtConnectState(int connectState) {
- if (!mIsPowerUp) {
- return;
- }
-
- switch (connectState) {
- case BluetoothA2dp.STATE_CONNECTED:
- //case BluetoothA2dp.STATE_PLAYING:
- //case BluetoothA2dp.STATE_CONNECTING:
- Log.d(TAG, "handleBtConnectState bt connected");
- changeToEarphoneMode();
- break;
- case BluetoothA2dp.STATE_DISCONNECTED:
- //case BluetoothA2dp.STATE_DISCONNECTING:
- Log.d(TAG, "handleBtConnectState bt disconnected");
- changeToEarphoneMode();
- break;
- default:
- Log.d(TAG, "invalid fm over bt connect state");
- break;
- }
-
-
- }
-
- private void changeToEarphoneMode() {
- setSpeakerPhoneOn(false);
- // Notify UI change to earphone mode, false means not speaker mode
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.LISTEN_SPEAKER_MODE_CHANGED);
- // Always set to earphone mode when bt is connected or disconnected
- bundle.putBoolean(FmRadioListener.KEY_IS_SPEAKER_MODE, false);
- notifyActivityStateChanged(bundle);
- }
-
- /**
- * Check if BT is connected
- * @return true if current is playing with BT earphone
- */
- public boolean isBtConnected() {
- BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
- Log.d(TAG, "isBtConnected headset:"
- + btAdapter.getProfileConnectionState(BluetoothProfile.HEADSET)
- + ", a2dp:" + btAdapter.getProfileConnectionState(BluetoothProfile.A2DP));
- int a2dpState = btAdapter.getProfileConnectionState(BluetoothProfile.HEADSET);
- return (BluetoothProfile.STATE_CONNECTED == a2dpState
- || BluetoothProfile.STATE_CONNECTING == a2dpState);
- }
-
- /**
- * Handle sdcard mount/unmount event. 1. Update the sdcard state map 2. If
- * the recording sdcard is unmounted, need to stop and notify
- */
- private class SdcardListener extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- // If eject record sdcard, should set this false to not
- // record.
- updateSdcardStateMap(intent);
-
- if (mFmRecorder == null) {
- Log.w(TAG, "SD receiver: FMRecorder is not present!!");
- return;
- }
-
- String action = intent.getAction();
- if (Intent.ACTION_MEDIA_EJECT.equals(action) ||
- Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) {
- // If not unmount recording sd card, do nothing;
- if (isRecordingCardUnmount(intent)) {
- Log.v(TAG, "MEDIA_EJECT");
- if (mFmRecorder.getState() == FmRecorder.STATE_RECORDING) {
- Log.d(TAG, "old state is recording");
- onRecorderError(FmRecorder.ERROR_SDCARD_NOT_PRESENT);
- mFmRecorder.discardRecording();
- } else {
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.LISTEN_RECORDSTATE_CHANGED);
- bundle.putInt(FmRadioListener.KEY_RECORDING_STATE,
- FmRecorder.STATE_IDLE);
- notifyActivityStateChanged(bundle);
- }
- }
- return;
- }
- }
- }
-
- /**
- * whether antenna available
- *
- * @return true, antenna available; false, antenna not available
- */
- public boolean isAntennaAvailable() {
- return mAudioManager.isWiredHeadsetOn();
- }
-
- /**
- * Set FM audio from speaker or not
- *
- * @param isSpeaker true if set FM audio from speaker
- */
- public void setSpeakerPhoneOn(boolean isSpeaker) {
- Log.d(TAG, ">>> FmRadioService.useSpeaker: " + isSpeaker);
- mForcedUseForMedia = isSpeaker ? AudioSystem.FORCE_SPEAKER : AudioSystem.FORCE_NONE;
- AudioSystem.setForceUse(FOR_PROPRIETARY, mForcedUseForMedia);
- mIsSpeakerUsed = isSpeaker;
- Log.d(TAG, "<<< FmRadioService.useSpeaker");
- }
-
- private boolean isSpeakerPhoneOn() {
- return (mForcedUseForMedia == AudioSystem.FORCE_SPEAKER);
- }
-
- /**
- * open FM device, should be call before power up
- *
- * @return true if FM device open, false FM device not open
- */
- private boolean openDevice() {
- Log.d(TAG, ">>> FmRadioService.openDevice");
- if (!mIsDeviceOpen) {
- mIsDeviceOpen = FmRadioNative.openDev();
- }
- Log.d(TAG, "<<< FmRadioService.openDevice: " + mIsDeviceOpen);
- return mIsDeviceOpen;
- }
-
- /**
- * close FM device
- *
- * @return true if close FM device success, false close FM device failed
- */
- private boolean closeDevice() {
- Log.d(TAG, ">>> FmRadioService.closeDevice");
- boolean isDeviceClose = false;
- if (mIsDeviceOpen) {
- isDeviceClose = FmRadioNative.closeDev();
- mIsDeviceOpen = !isDeviceClose;
- }
- Log.d(TAG, "<<< FmRadioService.closeDevice: " + isDeviceClose);
-
- // quit looper
- mFmServiceHandler.getLooper().quit();
- return isDeviceClose;
- }
-
- /**
- * get FM device opened or not
- *
- * @return true FM device opened, false FM device closed
- */
- public boolean isDeviceOpen() {
- Log.d(TAG, "FmRadioService.isDeviceOpen: " + mIsDeviceOpen);
- return mIsDeviceOpen;
- }
-
- /**
- * power up FM, and make FM voice output from earphone
- *
- * @param frequency
- */
- public void powerUpAsync(float frequency) {
- mIsPowerUping = true;
- final int bundleSize = 1;
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERUP_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERDOWN_FINISHED);
- Bundle bundle = new Bundle(bundleSize);
- bundle.putFloat(FM_FREQUENCY, frequency);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_POWERUP_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private boolean powerUpFm(float frequency) {
- Log.d(TAG, ">>> FmRadioService.powerUp: " + frequency);
- if (mIsPowerUp) {
- Log.d(TAG, "<<< FmRadioService.powerUp: already power up:" + mIsPowerUp);
- return true;
- }
-
- if (!requestAudioFocus()) {
- // activity used for update powerdown menu
- mIsMakePowerDown = true;
- Log.d(TAG, "FM can't get audio focus when power up");
- sendBroadcastToStopOtherAPP();
- return false;
- }
-
- // if device open fail when chip reset, it need open device again before
- // power up
- if (!mIsDeviceOpen) {
- openDevice();
- }
-
- waitIfTxSearching();
- Log.d(TAG, "set CURRENT_RX_ON true, CURRENT_TX_ON false");
- FmRadioNative.setFmStatus(CURRENT_RX_ON, true);
- FmRadioNative.setFmStatus(CURRENT_TX_ON, false);
- sendBroadcastToStopOtherAPP();
-
- Log.d(TAG, "service native power up start");
- if (!FmRadioNative.powerUp(frequency)) {
- Log.e(TAG, "Error: powerup failed.");
- return false;
- }
- Log.d(TAG, "service native power up end");
- mIsPowerUp = true;
- // need mute after power up
- setMute(true);
-
- // activity used for update powerdown menu
- mIsMakePowerDown = false;
- Log.d(TAG, "<<< FmRadioService.powerUp: " + mIsPowerUp);
- return mIsPowerUp;
- }
-
- // wait if TX is searching for timing issue
- private void waitIfTxSearching() {
- Log.d(TAG, ">>> waitIfTxSearching " + FmRadioNative.getFmStatus(CURRENT_TX_SCAN));
- long start = System.currentTimeMillis();
- // true for TX is searching
- while (FmRadioNative.getFmStatus(CURRENT_TX_SCAN) == true) {
- if (System.currentTimeMillis() - start > 5000) {
- Log.e(TAG, "waitIfTxSearching timeout");
- break;
- }
- try {
- Thread.sleep(100);
- } catch (Exception e) {
- }
- }
- Log.d(TAG, "<<< waitIfTxSearching");
- }
-
- private boolean startPlayFm(float frequency) {
- Log.d(TAG, ">>> FmRadioService.initDevice: " + frequency);
-
- mCurrentStation = FmRadioUtils.computeStation(frequency);
- FmRadioStation.setCurrentStation(mContext, mCurrentStation);
- // Add notification to the title bar.
- showNotification();
-
- // Start the RDS thread if RDS is supported.
- if (isRdsSupported()) {
- Log.d(TAG, "RDS is supported. Start the RDS thread.");
- startRdsThread();
- }
-
- if (!FmRadioUtils.isFmSuspendSupport()) {
- if (!mWakeLock.isHeld()) {
- mWakeLock.acquire();
- Log.d(TAG, "acquire wake lock");
- }
- }
- if (mIsSpeakerUsed != isSpeakerPhoneOn()) {
- setSpeakerPhoneOn(mIsSpeakerUsed);
- }
- if (mRecordState != FmRecorder.STATE_PLAYBACK) {
- enableFmAudio(true);
- }
-
- setRds(true);
- setMute(false);
-
- Log.d(TAG, "<<< FmRadioService.initDevice: " + mIsPowerUp);
- return mIsPowerUp;
- }
-
- /**
- * send broadcast to stop other application, such as music, MATV,
- * FMTransmitter
- */
- private void sendBroadcastToStopOtherAPP() {
- Intent intentToMusic = new Intent(ACTION_TOMUSICSERVICE_POWERDOWN);
- sendBroadcast(intentToMusic);
- Intent intentToAtv = new Intent(ACTION_TOATVSERVICE_POWERDOWN);
- sendBroadcast(intentToAtv);
- Intent intentToFMTx = new Intent(ACTION_TOFMTXSERVICE_POWERDOWN);
- sendBroadcast(intentToFMTx);
- }
-
- /**
- * power down FM
- */
- public void powerDownAsync() {
- // if power down Fm, should remove message first.
- // not remove all messages, because such as recorder message need
- // to execute after or before power down
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SCAN_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SEEK_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_TUNE_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERDOWN_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERUP_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_POWERDOWN_FINISHED);
- }
-
- /**
- * Power down FM
- *
- * @return true if power down success
- */
- private boolean powerDown() {
- Log.d(TAG, ">>> FmRadioService.powerDown");
- if (!mIsPowerUp) {
- Log.w(TAG, "Error: device is already power down.");
- return true;
- }
-
- setMute(true);
- setRds(false);
- enableFmAudio(false);
-
- // Only need to power down if RX status in native is ON
- // If TX is on, so need power down(TX is using).
- boolean isRxOn = FmRadioNative.getFmStatus(CURRENT_RX_ON);
- boolean powerDownSuccess = false;
- if (isRxOn) {
- powerDownSuccess = FmRadioNative.powerDown(0);
- } else {
- powerDownSuccess = true;
- }
-
- if (!powerDownSuccess) {
- Log.e(TAG, "Error: powerdown failed.");
- // activity used for update powerdown menu
- mIsMakePowerDown = true;
-
- if (isRdsSupported()) {
- Log.d(TAG, "RDS is supported. Stop the RDS thread.");
- stopRdsThread();
- }
- mIsPowerUp = false;
- if (mWakeLock.isHeld()) {
- mWakeLock.release();
- Log.d(TAG, "release wake lock");
- }
- // Remove the notification in the title bar.
- removeNotification();
- Log.d(TAG, "powerdown failed.release some resource.");
- return false;
- }
- // activity used for update powerdown menu
- mIsMakePowerDown = true;
-
- if (isRdsSupported()) {
- Log.d(TAG, "RDS is supported. Stop the RDS thread.");
- stopRdsThread();
- }
- mIsPowerUp = false;
-
- if (mWakeLock.isHeld()) {
- mWakeLock.release();
- Log.d(TAG, "release wake lock");
- }
-
- // Remove the notification in the title bar.
- removeNotification();
- Log.d(TAG, "<<< FmRadioService.powerDown: true");
- return true;
- }
-
- /**
- * Check whether FM is power up
- *
- * @return true, power up; false, power down.
- */
- public boolean isPowerUp() {
- Log.d(TAG, "FmRadioService.isPowerUp: " + mIsPowerUp);
- return mIsPowerUp;
- }
-
- /**
- * Check whether FM is power uping. if power uping, activity should call
- * super.onBackPressed, avoid not execute power down method.
- *
- * @return true, power up; false, power down.
- */
- public boolean isPowerUping() {
- Log.d(TAG, "FmRadioService.isPowerUping: " + mIsPowerUping);
- return mIsPowerUping;
- }
-
- /**
- * Check whether FM is power down by other app.
- *
- * @return true, power down; true.
- */
- public boolean isMakePowerDown() {
- Log.d(TAG, "FmRadioService.mIsMakePowerDown: " + mIsMakePowerDown);
- return mIsMakePowerDown;
- }
-
- /**
- * Tune to a station
- *
- * @param frequency The frequency to tune
- *
- * @return true, success; false, fail.
- */
- public void tuneStationAsync(float frequency) {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_TUNE_FINISHED);
- final int bundleSize = 1;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putFloat(FM_FREQUENCY, frequency);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_TUNE_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private boolean tuneStation(float frequency) {
- Log.d(TAG, ">>> FmRadioService.tune: " + frequency);
- if (mIsPowerUp) {
- setRds(false);
- Log.d(TAG, "FmRadioService.native tune start");
- boolean bRet = FmRadioNative.tune(frequency);
- Log.d(TAG, "FmRadioService.native tune end");
- if (bRet) {
- setRds(true);
- mCurrentStation = FmRadioUtils.computeStation(frequency);
- FmRadioStation.setCurrentStation(mContext, mCurrentStation);
- updateNotification();
- }
- setMute(false);
- Log.d(TAG, "<<< FmRadioService.tune: " + bRet);
- return bRet;
- }
-
- // if not support short Antenna and earphone is not insert, not power up
- if (!isAntennaAvailable() && !SHORT_ANNTENNA_SUPPORT) {
- Log.d(TAG, "earphone is not insert and short antenna not support");
- return false;
- }
-
- // if not power up yet, should powerup first
- Log.w(TAG, "FM is not powered up");
- mIsPowerUping = true;
- boolean tune = false;
-
- if (powerUpFm(frequency)) {
- tune = startPlayFm(frequency);
- }
- mIsPowerUping = false;
- Log.d(TAG, "<<< FmRadioService.tune: mIsPowerup:" + tune);
- return tune;
- }
-
- /**
- * Seek station according frequency and direction
- *
- * @param frequency start frequency(100KHZ, 87.5)
- * @param isUp direction(true, next station; false, previous station)
- *
- * @return the frequency after seek
- */
- public void seekStationAsync(float frequency, boolean isUp) {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SEEK_FINISHED);
- final int bundleSize = 2;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putFloat(FM_FREQUENCY, frequency);
- bundle.putBoolean(OPTION, isUp);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_SEEK_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private float seekStation(float frequency, boolean isUp) {
- Log.d(TAG, ">>> FmRadioService.seek: " + frequency + " " + isUp);
- if (!mIsPowerUp) {
- Log.w(TAG, "FM is not powered up");
- return -1;
- }
-
- setRds(false);
- mIsNativeSeeking = true;
- float fRet = FmRadioNative.seek(frequency, isUp);
- mIsNativeSeeking = false;
- // make mIsStopScanCalled false, avoid stop scan make this true,
- // when start scan, it will return null.
- mIsStopScanCalled = false;
- Log.d(TAG, "<<< FmRadioService.seek: " + fRet);
- return fRet;
- }
-
- /**
- * Scan stations
- */
- public void startScanAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SCAN_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_SCAN_FINISHED);
- }
-
- private int[] startScan() {
- Log.d(TAG, ">>> FmRadioService.startScan");
- int[] iChannels = null;
-
- setRds(false);
- setMute(true);
- short[] shortChannels = null;
- if (!mIsStopScanCalled) {
- mIsNativeScanning = true;
- Log.d(TAG, "startScan native method:start");
- shortChannels = FmRadioNative.autoScan();
- Log.d(TAG, "startScan native method:end " + Arrays.toString(shortChannels));
- mIsNativeScanning = false;
- }
-
- setRds(true);
- if (mIsStopScanCalled) {
- // Received a message to power down FM, or interrupted by a phone
- // call. Do not return any stations. shortChannels = null;
- // if cancel scan, return invalid station -100
- shortChannels = new short[] {
- -100
- };
- mIsStopScanCalled = false;
- }
-
- if (null != shortChannels) {
- int size = shortChannels.length;
- iChannels = new int[size];
- for (int i = 0; i < size; i++) {
- iChannels[i] = shortChannels[i];
- }
- }
- Log.d(TAG, "<<< FmRadioService.startScan: " + Arrays.toString(iChannels));
- return iChannels;
- }
-
- /**
- * Check FM Radio is in scan progress or not
- *
- * @return if in scan progress return true, otherwise return false.
- */
- public boolean isScanning() {
- return mIsScanning;
- }
-
- /**
- * Stop scan progress
- *
- * @return true if can stop scan, otherwise return false.
- */
- public boolean stopScan() {
- Log.d(TAG, ">>> FmRadioService.stopScan");
- if (!mIsPowerUp) {
- Log.w(TAG, "FM is not powered up");
- return false;
- }
-
- boolean bRet = false;
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SCAN_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SEEK_FINISHED);
- if (mIsNativeScanning || mIsNativeSeeking) {
- mIsStopScanCalled = true;
- Log.d(TAG, "native stop scan:start");
- bRet = FmRadioNative.stopScan();
- Log.d(TAG, "native stop scan:end --" + bRet);
- }
- Log.d(TAG, "<<< FmRadioService.stopScan: " + bRet);
- return bRet;
- }
-
- /**
- * Check FM is in seek progress or not
- *
- * @return true if in seek progress, otherwise return false.
- */
- public boolean isSeeking() {
- return mIsNativeSeeking;
- }
-
- /**
- * Set RDS
- *
- * @param on true, enable RDS; false, disable RDS.
- */
- public void setRdsAsync(boolean on) {
- final int bundleSize = 1;
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SET_RDS_FINISHED);
- Bundle bundle = new Bundle(bundleSize);
- bundle.putBoolean(OPTION, on);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_SET_RDS_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private int setRds(boolean on) {
- if (!mIsPowerUp) {
- return -1;
- }
- Log.d(TAG, ">>> FmRadioService.setRDS: " + on);
- int ret = -1;
- if (isRdsSupported()) {
- ret = FmRadioNative.setRds(on);
- }
- setPS("");
- setLRText("");
- Log.d(TAG, "<<< FmRadioService.setRDS: " + ret);
- return ret;
- }
-
- /**
- * Get PS information
- *
- * @return PS information
- */
- public String getPS() {
- Log.d(TAG, "FmRadioService.getPS: " + mPSString);
- return mPSString;
- }
-
- /**
- * Get RT information
- *
- * @return RT information
- */
- public String getLRText() {
- Log.d(TAG, "FmRadioService.getLRText: " + mLRTextString);
- return mLRTextString;
- }
-
- /**
- * Get AF frequency
- *
- * @return AF frequency
- */
- public void activeAFAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_ACTIVE_AF_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_ACTIVE_AF_FINISHED);
- }
-
- private int activeAF() {
- if (!mIsPowerUp) {
- Log.w(TAG, "FM is not powered up");
- return -1;
- }
-
- int frequency = FmRadioNative.activeAf();
- Log.d(TAG, "FmRadioService.activeAF: " + frequency);
- return frequency;
- }
-
- /**
- * Mute or unmute FM voice
- *
- * @param mute true for mute, false for unmute
- *
- * @return (true, success; false, failed)
- */
- public void setMuteAsync(boolean mute) {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SET_MUTE_FINISHED);
- final int bundleSize = 1;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putBoolean(OPTION, mute);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_SET_MUTE_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private int setMute(boolean mute) {
- if (!mIsPowerUp) {
- Log.w(TAG, "FM is not powered up");
- return -1;
- }
- Log.d(TAG, ">>> FmRadioService.setMute: " + mute);
- int iRet = FmRadioNative.setMute(mute);
- Log.d(TAG, "<<< FmRadioService.setMute: " + iRet);
- return iRet;
- }
-
- /**
- * Check whether RDS is support in driver
- *
- * @return (true, support; false, not support)
- */
- public boolean isRdsSupported() {
- boolean isRdsSupported = (FmRadioNative.isRdsSupport() == 1);
- Log.d(TAG, "FmRadioService.isRdsSupported: " + isRdsSupported);
- return isRdsSupported;
- }
-
- /**
- * Check whether speaker used or not
- *
- * @return true if use speaker, otherwise return false
- */
- public boolean isSpeakerUsed() {
- Log.d(TAG, "FmRadioService.isSpeakerUsed: " + mIsSpeakerUsed);
- return mIsSpeakerUsed;
- }
-
- /**
- * Initial service and current station
- *
- * @param iCurrentStation current station frequency
- */
- public void initService(int iCurrentStation) {
- Log.d(TAG, "FmRadioService.initService: " + iCurrentStation);
- mIsServiceInited = true;
- mCurrentStation = iCurrentStation;
- }
-
- /**
- * Check service is initialed or not
- *
- * @return true if initialed, otherwise return false
- */
- public boolean isServiceInited() {
- Log.d(TAG, "FmRadioService.isServiceInit: " + mIsServiceInited);
- return mIsServiceInited;
- }
-
- /**
- * Get FM service current station frequency
- *
- * @return Current station frequency
- */
- public int getFrequency() {
- Log.d(TAG, "FmRadioService.getFrequency: " + mCurrentStation);
- return mCurrentStation;
- }
-
- /**
- * Set FM service station frequency
- *
- * @param station Current station
- */
- public void setFrequency(int station) {
- mCurrentStation = station;
- }
-
- /**
- * resume FM audio
- */
- private void resumeFmAudio() {
- Log.d(TAG, "FmRadioService.resumeFmAudio");
- // If not check mIsAudioFocusHeld && mIsPowerup, when scan canceled,
- // this will be resume first, then execute power down. it will cause
- // nosise.
- if (mIsAudioFocusHeld && mIsPowerUp) {
- enableFmAudio(true);
- }
- }
-
- /**
- * Switch antenna There are two types of antenna(long and short) If long
- * antenna(most is this type), must plug in earphone as antenna to receive
- * FM. If short antenna, means there is a short antenna if phone already,
- * can receive FM without earphone.
- *
- * @param antenna antenna (0, long antenna, 1 short antenna)
- *
- * @return (0, success; 1 failed; 2 not support)
- */
- public void switchAntennaAsync(int antenna) {
- final int bundleSize = 1;
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SWITCH_ANNTENNA);
-
- Bundle bundle = new Bundle(bundleSize);
- bundle.putInt(FmRadioListener.SWITCH_ANNTENNA_VALUE, antenna);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_SWITCH_ANNTENNA);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- /**
- * Need native support whether antenna support interface.
- *
- * @param antenna antenna (0, long antenna, 1 short antenna)
- *
- * @return (0, success; 1 failed; 2 not support)
- */
- private int switchAntenna(int antenna) {
- Log.d(TAG, ">>> FmRadioService.switchAntenna:" + antenna);
- // if fm not powerup, switchAntenna will flag whether has earphone
- int ret = FmRadioNative.switchAntenna(antenna);
- Log.d(TAG, "<<< FmRadioService.switchAntenna: " + ret);
- return ret;
- }
-
- /**
- * Start recording
- */
- public void startRecordingAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_STARTRECORDING_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_STARTRECORDING_FINISHED);
- }
-
- private void startRecording() {
- Log.d(TAG, ">>> startRecording");
- if (!mIsPowerUp) {
- Log.d(TAG, "native is not power up: " + mIsPowerUp);
- onRecorderError(FmRecorder.ERROR_RECORDER_INVALID_STATE);
- return;
- }
- sRecordingSdcard = FmRadioUtils.getDefaultStoragePath();
- Log.d(TAG, "default sd card file path: " + sRecordingSdcard);
- if (sRecordingSdcard == null || sRecordingSdcard.isEmpty()) {
- Log.d(TAG, "startRecording: may be no sdcard");
- onRecorderError(FmRecorder.ERROR_SDCARD_NOT_PRESENT);
- return;
- }
-
- if (mFmRecorder == null) {
- mFmRecorder = new FmRecorder();
- mFmRecorder.registerRecorderStateListener(FmRadioService.this);
- }
-
- if (isSdcardReady(sRecordingSdcard)) {
- mFmRecorder.startRecording(getApplicationContext());
- } else {
- Log.d(TAG, "Cannot record because sdcard is not ready!!");
- onRecorderError(FmRecorder.ERROR_SDCARD_NOT_PRESENT);
- }
- Log.d(TAG, "<<< startRecording");
- }
-
- private boolean isSdcardReady(String sdcardPath) {
- Log.d(TAG, ">>> isSdcardReady: sdcardPath is " + sdcardPath +
- ", mSdcardStateMap is " + mSdcardStateMap);
- if (!mSdcardStateMap.isEmpty()) {
- if (mSdcardStateMap.get(sdcardPath) != null && !mSdcardStateMap.get(sdcardPath)) {
- Log.d(TAG, "<<< isSdcardReady: return false");
- return false;
- }
- }
- Log.d(TAG, "<<< isSdcardReady: mSdcardStateMap:" + mSdcardStateMap);
- return true;
- }
-
- /**
- * stop recording
- */
- public void stopRecordingAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_STOPRECORDING_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_STOPRECORDING_FINISHED);
- }
-
- private boolean stopRecording() {
- Log.d(TAG, ">>> stopRecording");
- if (mFmRecorder == null) {
- Log.e(TAG, "stopRecording called without a valid recorder!!");
- return false;
- }
- synchronized (mStopRecordingLock) {
- mFmRecorder.stopRecording();
- Log.d(TAG, "<<< stopRecording");
- }
- return true;
- }
-
- /**
- * Start play recording file
- */
- public void startPlaybackAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_STARTPLAYBACK_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_STARTPLAYBACK_FINISHED);
- }
-
- private boolean startPlayback() {
- Log.d(TAG, ">>> startPlayback");
- if (!requestAudioFocus()) {
- Log.d(TAG, "can't get audio focus when play recording file");
- return false;
- }
-
- if (mFmRecorder == null) {
- Log.e(TAG, "FMRecorder is null !!");
- return false;
- }
-
- // Set Mute before start playback
- mAudioManager.setParameters("AudioFmPreStop=1");
- setMute(true);
- enableFmAudio(false);
-
- mFmRecorder.startPlayback();
- Log.d(TAG, "<<< startPlayback");
- return true;
- }
-
- /**
- * stop play recording file
- */
- public void stopPlaybackAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_STOPPLAYBACK_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_STOPPLAYBACK_FINISHED);
- }
-
- private void stopPlayback() {
- Log.d(TAG, ">>> stopPlayback");
- if (mFmRecorder != null) {
- mFmRecorder.stopPlayback();
- checkAfterPlayback();
- }
- Log.d(TAG, "<<< stopPlayback");
- }
-
- /**
- * Save recording file according name or discard recording file if name is
- * null
- *
- * @param newName New recording file name
- */
- public void saveRecordingAsync(String newName) {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SAVERECORDING_FINISHED);
- final int bundleSize = 1;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putString(RECODING_FILE_NAME, newName);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_SAVERECORDING_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private void saveRecording(String newName) {
- Log.d(TAG, ">>> saveRecording");
- if (mFmRecorder != null) {
- if (newName != null) {
- mFmRecorder.saveRecording(FmRadioService.this, newName);
- Log.d(TAG, "<<< saveRecording");
- return;
- }
- mFmRecorder.discardRecording();
- }
- Log.d(TAG, "<<< saveRecording");
- }
-
- /**
- * Get record time
- *
- * @return Record time
- */
- public long getRecordTime() {
- if (mFmRecorder != null) {
- return mFmRecorder.recordTime();
- }
- Log.e(TAG, "FMRecorder is null !!");
- return 0;
- }
-
- /**
- * Set recording mode
- *
- * @param isRecording true, enter recoding mode; false, exit recording mode
- */
- public void setRecordingModeAsync(boolean isRecording) {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_RECORD_MODE_CHANED);
- final int bundleSize = 1;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putBoolean(OPTION, isRecording);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_RECORD_MODE_CHANED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private void setRecordingMode(boolean isRecording) {
- Log.d(TAG, ">>> setRecordingMode: isRecording=" + isRecording);
- mIsInRecordingMode = isRecording;
- if (mFmRecorder != null) {
- if (!isRecording) {
- if (mFmRecorder.getState() != FmRecorder.STATE_IDLE) {
- mFmRecorder.stopRecording();
- mFmRecorder.stopPlayback();
- }
- resumeFmAudio();
- setMute(false);
- Log.d(TAG, "<<< setRecordingMode");
- return;
- }
- // reset recorder to unused status
- mFmRecorder.resetRecorder();
- }
- Log.d(TAG, "<<< setRecordingMode");
- }
-
- /**
- * Get current recording mode
- *
- * @return if in recording mode return true, otherwise return false;
- */
- public boolean getRecordingMode() {
- return mIsInRecordingMode;
- }
-
- /**
- * Get record state
- *
- * @return record state
- */
- public int getRecorderState() {
- if (null != mFmRecorder) {
- return mFmRecorder.getState();
- }
- return FmRecorder.STATE_INVALID;
- }
-
- /**
- * Get recording file name
- *
- * @return recording file name
- */
- public String getRecordingName() {
- if (null != mFmRecorder) {
- return mFmRecorder.getRecordingName();
- }
- return null;
- }
-
- /**
- * Get current recording file name with full path
- *
- * @return The current recording file name or null
- */
- public String getRecordingNameWithPath() {
- if (null != mFmRecorder) {
- return mFmRecorder.getRecordingNameWithPath();
- }
- return null;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- Log.d(TAG, ">>> FmRadioService.onCreate");
- Log.d(TAG, "short antenna support:" + SHORT_ANNTENNA_SUPPORT);
- mContext = getApplicationContext();
- mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
- PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
- mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
- mWakeLock.setReferenceCounted(false);
- sRecordingSdcard = FmRadioUtils.getDefaultStoragePath();
-
- if (!initFmPlayer()) {
- Log.e(TAG, "init FMPlayer failed");
- return;
- }
-
- registerFmBroadcastReceiver();
- registerSdcardReceiver();
-
- HandlerThread handlerThread = new HandlerThread("FmRadioServiceThread");
- handlerThread.start();
- mFmServiceHandler = new FmRadioServiceHandler(handlerThread.getLooper());
-
- openDevice();
- // set speaker to default status, avoid setting->clear data.
- setSpeakerPhoneOn(mIsSpeakerUsed);
- Log.d(TAG, "<<< FmRadioService.onCreate");
- }
-
- private boolean initFmPlayer() {
- mFmPlayer = new MediaPlayer();
- if (!FmRadioUtils.isFmSuspendSupport()) {
- mFmPlayer.setWakeMode(FmRadioService.this, PowerManager.PARTIAL_WAKE_LOCK);
- }
- mFmPlayer.setOnErrorListener(mPlayerErrorListener);
- try {
- mFmPlayer.setDataSource("THIRDPARTY://MEDIAPLAYER_PLAYERTYPE_FM");
- } catch (IOException ex) {
- // notify the user why the file couldn't be opened
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- } catch (IllegalArgumentException ex) {
- // notify the user why the file couldn't be opened
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- } catch (SecurityException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- } catch (IllegalStateException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- }
- mFmPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
- return true;
- }
-
- private void registerFmBroadcastReceiver() {
- IntentFilter filter = new IntentFilter();
- filter.addAction(SOUND_POWER_DOWN_MSG);
- filter.addAction(Intent.ACTION_SHUTDOWN);
- filter.addAction(Intent.ACTION_SCREEN_ON);
- filter.addAction(Intent.ACTION_SCREEN_OFF);
- filter.addAction(Intent.ACTION_HEADSET_PLUG);
-/* Vanzo:tanglei on: Fri, 13 Mar 2015 21:22:01 +0800
- */
- //if (FeatureOption.VANZO_FEATURE_EARPHONE_KEY_ACTION) {
- // filter.addAction("com.mediatek.FMRadio.FMRadioService.NEXT_STATION");
- //}
-// End of Vanzo:tanglei
- filter.addAction(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED);
- filter.addAction(ACTION_TOFMSERVICE_POWERDOWN);
- filter.addAction(ACTION_FROMATVSERVICE_POWERUP);
- mBroadcastReceiver = new FmServiceBroadcastReceiver();
- Log.i(TAG, "Register broadcast receiver.");
- registerReceiver(mBroadcastReceiver, filter);
- }
-
- private void unregisterFmBroadcastReceiver() {
- if (null != mBroadcastReceiver) {
- Log.i(TAG, "Unregister broadcast receiver.");
- unregisterReceiver(mBroadcastReceiver);
- mBroadcastReceiver = null;
- }
- }
-
- @Override
- public void onDestroy() {
- Log.d(TAG, ">>> FmRadioService.onDestroy");
- mAudioManager.setParameters("AudioFmPreStop=1");
- setMute(true);
- // stop rds first, avoid blocking other native method
- if (isRdsSupported()) {
- Log.d(TAG, "RDS is supported. Stop the RDS thread.");
- stopRdsThread();
- }
- unregisterFmBroadcastReceiver();
- unregisterSdcardListener();
- abandonAudioFocus();
- exitFm();
- if (null != mFmRecorder) {
- mFmRecorder = null;
- }
- super.onDestroy();
- }
-
- /**
- * Exit FMRadio application
- */
- private void exitFm() {
- Log.d(TAG, "service.exitFm start");
- mIsAudioFocusHeld = false;
- // Stop FM recorder if it is working
- if (null != mFmRecorder) {
- synchronized (mStopRecordingLock) {
- int fmState = mFmRecorder.getState();
- if (FmRecorder.STATE_PLAYBACK == fmState) {
- mFmRecorder.stopPlayback();
- Log.d(TAG, "Stop playback FMRecorder.");
- } else if (FmRecorder.STATE_RECORDING == fmState) {
- mFmRecorder.stopRecording();
- Log.d(TAG, "stop Recording.");
- }
-
- // ALPS01789667 Add to DB if exit, there are two cases:
- // case 1: FileManager play Music->FM receive short audio focus->Fm stop recording
- // -> FM receive SOUND_POWER_DOWN_MSG->Come here but is IDLE status
- // case 2: Music play a song->FM receive long audio focus->Come here is RECORDING
- mFmRecorder.addCurrentRecordingToDb(mContext);
- }
- }
-
- // When exit, we set the audio path back to earphone.
- if (mIsNativeScanning || mIsNativeSeeking) {
- stopScan();
- }
-
- mFmServiceHandler.removeCallbacksAndMessages(null);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_FM_EXIT);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_FM_EXIT);
- Log.d(TAG, "service.exitFm end");
- }
-
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- // Change the notification string.
- if (mIsPowerUp) {
- showNotification();
- }
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- Log.d(TAG, ">>> FmRadioService.onStartCommand intent: " + intent + " startId: " + startId);
- int ret = super.onStartCommand(intent, flags, startId);
- Log.d(TAG, "<<< FmRadioService.onStartCommand: " + ret);
- return START_NOT_STICKY;
- }
-
- /**
- * Start RDS thread to update RDS information
- */
- private void startRdsThread() {
- Log.d(TAG, ">>> FmRadioService.startRdSThread");
- mIsRdsThreadExit = false;
- if (null != mRdsThread) {
- return;
- }
- mRdsThread = new Thread() {
- public void run() {
- Log.d(TAG, ">>> RDS Thread run()");
- while (true) {
- if (mIsRdsThreadExit) {
- break;
- }
-
- int iRdsEvents = FmRadioNative.readRds();
- if (iRdsEvents != 0) {
- Log.d(TAG, "FmRadioNative.readrds events: " + iRdsEvents);
- }
-
- if (RDS_EVENT_PROGRAMNAME == (RDS_EVENT_PROGRAMNAME & iRdsEvents)) {
- Log.d(TAG, "RDS_EVENT_PROGRAMNAME");
- byte[] bytePS = FmRadioNative.getPs();
- if (null != bytePS) {
- setPS(new String(bytePS).trim());
- }
- }
-
- if (RDS_EVENT_LAST_RADIOTEXT == (RDS_EVENT_LAST_RADIOTEXT & iRdsEvents)) {
- Log.d(TAG, "RDS_EVENT_LAST_RADIOTEXT");
- byte[] byteLRText = FmRadioNative.getLrText();
- if (null != byteLRText) {
- setLRText(new String(byteLRText).trim());
- }
- }
-
- if (RDS_EVENT_AF == (RDS_EVENT_AF & iRdsEvents)) {
- Log.d(TAG, "RDS_EVENT_AF");
- /*
- * add for rds AF
- */
- if (mIsScanning || mIsSeeking) {
- Log.d(TAG, "RDSThread. seek or scan going, no need to tune here");
- } else if (!mIsPowerUp) {
- Log.d(TAG, "RDSThread. fm is power down, do nothing.");
- } else {
- int iFreq = FmRadioNative.activeAf();
- if (FmRadioUtils.isValidStation(iFreq)) {
- // if the new frequency is not equal to current
- // frequency.
- if (mCurrentStation == iFreq) {
- Log.w(TAG, "RDSThread. the new freq is the same as current.");
- } else {
- setPS("");
- setLRText("");
- if (!mIsScanning && !mIsSeeking) {
- Log.d(TAG, "RDSThread. seek or scan not going," +
- "need to tune here");
- tuneStationAsync(FmRadioUtils.computeFrequency(iFreq));
- }
- }
- }
- }
- }
- // Do not handle other events.
- // Sleep 500ms to reduce inquiry frequency
- try {
- final int hundredMillisecond = 500;
- Thread.sleep(hundredMillisecond);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- Log.d(TAG, "<<< RDS Thread run()");
- }
- };
-
- Log.d(TAG, "Start RDS Thread.");
- mRdsThread.start();
- Log.d(TAG, "<<< FmRadioService.startRdSThread");
- }
-
- /**
- * Stop RDS thread to stop listen station RDS change
- */
- private void stopRdsThread() {
- Log.d(TAG, ">>> FmRadioService.stopRdSThread");
- if (null != mRdsThread) {
- // Must call closedev after stopRDSThread.
- mIsRdsThreadExit = true;
- mRdsThread = null;
- }
- Log.d(TAG, "<<< FmRadioService.stopRdSThread");
- }
-
- /**
- * Set PS information
- *
- * @param ps The ps information
- */
- private void setPS(String ps) {
- Log.d(TAG, "FmRadioService.setPS: " + ps + " ,current: " + mPSString);
- if (0 != mPSString.compareTo(ps)) {
- mPSString = ps;
- Bundle bundle = new Bundle(3);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.LISTEN_PS_CHANGED);
- bundle.putString(FmRadioListener.KEY_PS_INFO, mPSString);
- bundle.putString(FmRadioListener.KEY_RT_INFO, mLRTextString);
- notifyActivityStateChanged(bundle);
- } // else New PS is the same as current
- }
-
- /**
- * Set RT information
- *
- * @param lrtText The RT information
- */
- private void setLRText(String lrtText) {
- Log.d(TAG, "FmRadioService.setLRText: " + lrtText + " ,current: " + mLRTextString);
- if (0 != mLRTextString.compareTo(lrtText)) {
- mLRTextString = lrtText;
- Bundle bundle = new Bundle(3);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.LISTEN_RT_CHANGED);
- bundle.putString(FmRadioListener.KEY_PS_INFO, mPSString);
- bundle.putString(FmRadioListener.KEY_RT_INFO, mLRTextString);
- notifyActivityStateChanged(bundle);
- } // else New RT is the same as current
- }
-
- /**
- * Open or close FM Radio audio
- *
- * @param enable true, open FM audio; false, close FM audio;
- */
- private void enableFmAudio(boolean enable) {
- Log.d(TAG, ">>> FmRadioService.enableFmAudio: " + enable);
- if ((mFmPlayer == null) || !mIsPowerUp) {
- Log.w(TAG, "mFMPlayer is null in Service.enableFmAudio");
- return;
- }
-
- try {
- if (!enable) {
- if (!mFmPlayer.isPlaying()) {
- Log.d(TAG, "warning: FM audio is already disabled.");
- return;
- }
-
- Log.d(TAG, "call MediaPlayer.stop()");
- mFmPlayer.stop();
- Log.d(TAG, "stop FM audio.");
- return;
- }
-
- if (mFmPlayer.isPlaying()) {
- Log.d(TAG, "warning: FM audio is already enabled.");
- return;
- }
- } catch (IllegalStateException e) {
- Log.e(TAG, "Exception: Cannot call MediaPlayer isPlaying.", e);
- }
-
- try {
- mFmPlayer.prepare();
- //if (FmRadioUtils.isFmSuspendSupport()) {
- // Log.d(TAG, "support FM suspend");
- // mFmPlayer.startWithoutWakelock();
- //} else {
- mFmPlayer.start();
- //}
- } catch (IOException e) {
- Log.e(TAG, "Exception: Cannot call MediaPlayer prepare.", e);
- } catch (IllegalStateException e) {
- Log.e(TAG, "Exception: Cannot call MediaPlayer prepare.", e);
- }
-
- Log.d(TAG, "Start FM audio.");
- Log.d(TAG, "<<< FmRadioService.enableFmAudio");
- }
-
- /**
- * Show notification
- */
- private void showNotification() {
- Log.d(TAG, "FmRadioService.showNotification");
- Intent notificationIntent = new Intent();
- notificationIntent.setClassName(getPackageName(), FmRadioActivity.class.getName());
- PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),
- 0, notificationIntent, 0);
- Notification notification = new Notification(R.drawable.fm_title_icon, null,
- System.currentTimeMillis());
- notification.flags |= Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR;
- String fmUnit = mContext.getString(R.string.fm_unit);
- String text = FmRadioUtils.formatStation(mCurrentStation) + " " + fmUnit;
- notification.setLatestEventInfo(getApplicationContext(),
- getResources().getString(R.string.app_name), text, pendingIntent);
- Log.d(TAG, "Add notification to the title bar.");
- startForeground(NOTIFICATION_ID, notification);
- }
-
- /**
- * Remove notification
- */
- private void removeNotification() {
- Log.d(TAG, "FmRadioService.removeNotification");
- stopForeground(true);
- }
-
- /**
- * Update notification
- */
- private void updateNotification() {
- Log.d(TAG, "FmRadioService.updateNotification");
- if (mIsPowerUp) {
- showNotification();
- }
- }
-
- /**
- * Register sdcard listener for record
- */
- private void registerSdcardReceiver() {
- Log.v(TAG, "registerSdcardReceiver >>> ");
- if (mSdcardListener == null) {
- mSdcardListener = new SdcardListener();
- }
- IntentFilter filter = new IntentFilter();
- filter.addDataScheme("file");
- filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
- filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
- filter.addAction(Intent.ACTION_MEDIA_EJECT);
- registerReceiver(mSdcardListener, filter);
- Log.v(TAG, "registerSdcardReceiver <<< ");
- }
-
- private void unregisterSdcardListener() {
- if (null != mSdcardListener) {
- unregisterReceiver(mSdcardListener);
- }
- }
-
- private void updateSdcardStateMap(Intent intent) {
- String action = intent.getAction();
- String sdcardPath = null;
- Uri mountPointUri = intent.getData();
- if (mountPointUri != null) {
- sdcardPath = mountPointUri.getPath();
- if (sdcardPath != null) {
- if (Intent.ACTION_MEDIA_EJECT.equals(action)) {
- Log.d(TAG, "updateSdcardStateMap: ENJECT " + sdcardPath);
- mSdcardStateMap.put(sdcardPath, false);
- } else if (Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) {
- Log.d(TAG, "updateSdcardStateMap: UNMOUNTED " + sdcardPath);
- mSdcardStateMap.put(sdcardPath, false);
- } else if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) {
- Log.d(TAG, "updateSdcardStateMap: MOUNTED " + sdcardPath);
- mSdcardStateMap.put(sdcardPath, true);
- }
- }
- }
- }
-
- /**
- * Notify FM recorder state
- *
- * @param state The current FM recorder state
- */
- @Override
- public void onRecorderStateChanged(int state) {
- Log.d(TAG, "onRecorderStateChanged: " + state);
- mRecordState = state;
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.LISTEN_RECORDSTATE_CHANGED);
- bundle.putInt(FmRadioListener.KEY_RECORDING_STATE, state);
- notifyActivityStateChanged(bundle);
- }
-
- /**
- * Notify FM recorder error message
- *
- * @param error The recorder error type
- */
- @Override
- public void onRecorderError(int error) {
- Log.d(TAG, "onRecorderError: " + error);
- // if media server die, will not enable FM audio, and convert to
- // ERROR_PLAYER_INATERNAL, call back to activity showing toast.
- mRecorderErrorType = (MediaPlayer.MEDIA_ERROR_SERVER_DIED == error) ?
- FmRecorder.ERROR_PLAYER_INTERNAL : error;
-
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.LISTEN_RECORDERROR);
- bundle.putInt(FmRadioListener.KEY_RECORDING_ERROR_TYPE, mRecorderErrorType);
- notifyActivityStateChanged(bundle);
-
- // if media server die, should not enable fm, otherwise je will occur.
- if (FmRecorder.ERROR_PLAYER_INTERNAL == error) {
- resumeFmAudio();
- }
- }
-
- /**
- * Notify play FM record file complete
- */
- @Override
- public void onPlayRecordFileComplete() {
- Log.d(TAG, "service.onPlayRecordFileComplete");
- checkAfterPlayback();
- }
-
- /**
- * Check and go next(play or show tips) after recorder file play
- * back finish.
- * Two cases:
- * 1. With headset or support short antenna -> play FM
- * 2. Without headset -> show plug in earphone tips
- */
- private void checkAfterPlayback() {
- if (isHeadSetIn() || SHORT_ANNTENNA_SUPPORT) {
- // with headset
- Log.d(TAG, "checkAfterPlayback:eaphone is in,need resume fm");
- if (mIsPowerUp) {
- resumeFmAudio();
- setMute(false);
- } else {
- powerUpAsync(FmRadioUtils.computeFrequency(mCurrentStation));
- }
- } else {
- // without headset need show plug in earphone tips
- Log.d(TAG, "checkAfterPlayback:earphone is out, need show plug in earphone tips");
- switchAntennaAsync(mValueHeadSetPlug);
- }
- }
-
- /**
- * Check the headset is plug in or plug out
- *
- * @return true for plug in; false for plug out
- */
- private boolean isHeadSetIn() {
- return (0 == mValueHeadSetPlug);
- }
-
- private void stopFmFocusLoss(int focusState) {
- mIsAudioFocusHeld = false;
- if (mIsNativeScanning || mIsNativeSeeking) {
- // make stop scan from activity call to service.
- // notifyActivityStateChanged(FMRadioListener.LISTEN_SCAN_CANCELED);
- stopScan();
- Log.d(TAG, "need to stop FM, so stop scan channel.");
- }
-
- // using handler thread to update audio focus state
- updateAudioFocusAync(focusState);
- Log.d(TAG, "need to stop FM, so powerdown FM.");
-
- }
-
- /**
- * Handle FM Player error
- */
- private final MediaPlayer.OnErrorListener mPlayerErrorListener =
- new MediaPlayer.OnErrorListener() {
- /**
- * handle error message
- *
- * @param mp occurred error media player
- * @param what error message
- * @param extra error message extra
- *
- * @return handle error message or not
- */
- public boolean onError(MediaPlayer mp, int what, int extra) {
-
- if (MediaPlayer.MEDIA_ERROR_SERVER_DIED == what) {
- Log.d(TAG, "onError: MEDIA_SERVER_DIED");
- if (null != mFmPlayer) {
- mFmPlayer.release();
- mFmPlayer = null;
- }
- mFmPlayer = new MediaPlayer();
- if (!FmRadioUtils.isFmSuspendSupport()) {
- mFmPlayer.setWakeMode(FmRadioService.this, PowerManager.PARTIAL_WAKE_LOCK);
- }
- mFmPlayer.setOnErrorListener(mPlayerErrorListener);
- try {
- mFmPlayer.setDataSource("THIRDPARTY://MEDIAPLAYER_PLAYERTYPE_FM");
- mFmPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
- if (mIsPowerUp) {
- // set speaker mode according to AP
- setSpeakerPhoneOn(mIsSpeakerUsed);
- mFmPlayer.prepare();
- //if (FmRadioUtils.isFmSuspendSupport()) {
- // Log.d(TAG, "support FM suspend");
- // mFmPlayer.startWithoutWakelock();
- //} else {
- mFmPlayer.start();
- //}
- }
- } catch (IOException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- } catch (IllegalArgumentException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- } catch (IllegalStateException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- }
- }
-
- return true;
- }
- };
-
- /**
- * Request audio focus
- *
- * @return true, success; false, fail;
- */
- public boolean requestAudioFocus() {
- if (mIsAudioFocusHeld) {
- return true;
- }
-
- int audioFocus = mAudioManager.requestAudioFocus(mAudioFocusChangeListener,
- AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
- mIsAudioFocusHeld = (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == audioFocus);
- return mIsAudioFocusHeld;
- }
-
- /**
- * Abandon audio focus
- */
- public void abandonAudioFocus() {
- mAudioManager.abandonAudioFocus(mAudioFocusChangeListener);
- mIsAudioFocusHeld = false;
- }
-
- /**
- * Use to interact with other voice related app
- */
- private final OnAudioFocusChangeListener mAudioFocusChangeListener =
- new OnAudioFocusChangeListener() {
- /**
- * Handle audio focus change ensure message FIFO
- *
- * @param focusChange audio focus change state
- */
- @Override
- public void onAudioFocusChange(int focusChange) {
- Log.d(TAG, "onAudioFocusChange: " + focusChange);
- switch (focusChange) {
- case AudioManager.AUDIOFOCUS_LOSS:
- synchronized (this) {
- Log.d(TAG, "AudioFocus: received AUDIOFOCUS_LOSS");
- mAudioManager.setParameters("AudioFmPreStop=1");
- setMute(true);
- Log.d(TAG, "onAudioFocusChange.setParameters end");
- exitFm();
- stopSelf();
- }
- break;
-
- case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
- synchronized (this) {
- mAudioManager.setParameters("AudioFmPreStop=1");
- setMute(true);
- Log.d(TAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT");
- stopFmFocusLoss(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT);
- }
- break;
-
- case AudioManager.AUDIOFOCUS_GAIN:
- synchronized (this) {
- Log.d(TAG, "AudioFocus: received AUDIOFOCUS_GAIN");
- updateAudioFocusAync(AudioManager.AUDIOFOCUS_GAIN);
- }
- break;
-
- default:
- Log.d(TAG, "AudioFocus: Audio focus change, but not need handle");
- break;
- }
- }
- };
-
- /**
- * Audio focus changed, will send message to handler thread. synchronized to
- * ensure one message can go in this method.
- *
- * @param focusState AudioManager state
- */
- private synchronized void updateAudioFocusAync(int focusState) {
- Log.d(TAG, "updateAudioFocusAync: focusState = " + focusState);
- final int bundleSize = 1;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putInt(FmRadioListener.KEY_AUDIOFOCUS_CHANGED, focusState);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_AUDIOFOCUS_CHANGED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- /**
- * Audio focus changed, update FM focus state.
- *
- * @param focusState AudioManager state
- */
- private void updateAudioFocus(int focusState) {
- Log.d(TAG, "FmRadioService.updateAudioFocus");
- switch (focusState) {
- case AudioManager.AUDIOFOCUS_LOSS:
- mPausedByTransientLossOfFocus = false;
- // play back audio will output with music audio
- // May be affect other recorder app, but the flow can not be
- // execute earlier,
- // It should ensure execute after start/stop record.
- if (mFmRecorder != null) {
- int fmState = mFmRecorder.getState();
- Log.d(TAG, "stopFMFocusLoss.recorder state=" + fmState);
- // only handle recorder state, not handle playback state
- if (fmState == FmRecorder.STATE_RECORDING) {
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STARTRECORDING_FINISHED);
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STOPRECORDING_FINISHED);
- stopRecording();
- }
- }
- handlePowerDown();
- break;
-
- case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
- if (mIsPowerUp) {
- mPausedByTransientLossOfFocus = true;
- }
- Log.d(TAG, "AUDIOFOCUS_LOSS_TRANSIENT: mPausedByTransientLossOfFocus:" +
- mPausedByTransientLossOfFocus);
- // play back audio will output with music audio
- // May be affect other recorder app, but the flow can not be
- // execute earlier,
- // It should ensure execute after start/stop record.
- if (mFmRecorder != null) {
- int fmState = mFmRecorder.getState();
- Log.d(TAG, "stopFMFocusLoss.recorder state=" + fmState);
- if (fmState == FmRecorder.STATE_RECORDING) {
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STARTRECORDING_FINISHED);
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STOPRECORDING_FINISHED);
- stopRecording();
- }
- if (fmState == FmRecorder.STATE_PLAYBACK) {
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STARTPLAYBACK_FINISHED);
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STOPPLAYBACK_FINISHED);
- stopPlayback();
- }
- }
- handlePowerDown();
- break;
-
- case AudioManager.AUDIOFOCUS_GAIN:
- Log.d(TAG, "AUDIOFOCUS_GAIN: mPausedByTransientLossOfFocus:" +
- mPausedByTransientLossOfFocus);
- if (!mIsPowerUp && mPausedByTransientLossOfFocus) {
- mIsPowerUping = true;
- final int bundleSize = 1;
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERUP_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERDOWN_FINISHED);
- Bundle bundle = new Bundle(bundleSize);
- bundle.putFloat(FM_FREQUENCY, FmRadioUtils.computeFrequency(mCurrentStation));
- handlePowerUp(bundle);
- }
- break;
-
- default:
- break;
- }
- }
-
- /**
- * FM Radio listener record
- */
- private static class Record {
- int mHashCode; // hash code
- FmRadioListener mCallback; // call back
- }
-
- /**
- * Register FM Radio listener, activity get service state should call this
- * method register FM Radio listener
- *
- * @param callback FM Radio listener
- */
- public void registerFmRadioListener(FmRadioListener callback) {
- synchronized (mRecords) {
- // register callback in AudioProfileService, if the callback is
- // exist, just replace the event.
- Record record = null;
- int hashCode = callback.hashCode();
- final int n = mRecords.size();
- for (int i = 0; i < n; i++) {
- record = mRecords.get(i);
- if (hashCode == record.mHashCode) {
- return;
- }
- }
- record = new Record();
- record.mHashCode = hashCode;
- record.mCallback = callback;
- mRecords.add(record);
- }
- }
-
- /**
- * Call back from service to activity
- *
- * @param bundle The message to activity
- */
- private void notifyActivityStateChanged(Bundle bundle) {
- if (!mRecords.isEmpty()) {
- Log.d(TAG, "notifyActivityStatusChanged:clients = " + mRecords.size());
- synchronized (mRecords) {
- Iterator iterator = mRecords.iterator();
- while (iterator.hasNext()) {
- Record record = (Record) iterator.next();
-
- FmRadioListener listener = record.mCallback;
-
- if (listener == null) {
- iterator.remove();
- return;
- }
-
- listener.onCallBack(bundle);
- }
- }
- }
- }
-
- /**
- * Unregister FM Radio listener
- *
- * @param callback FM Radio listener
- */
- public void unregisterFmRadioListener(FmRadioListener callback) {
- remove(callback.hashCode());
- }
-
- /**
- * Remove call back according hash code
- *
- * @param hashCode The call back hash code
- */
- private void remove(int hashCode) {
- synchronized (mRecords) {
- Iterator iterator = mRecords.iterator();
- while (iterator.hasNext()) {
- Record record = (Record) iterator.next();
- if (record.mHashCode == hashCode) {
- iterator.remove();
- }
- }
- }
- }
-
- /**
- * Check recording sd card is unmount
- *
- * @param intent The unmount sd card intent
- *
- * @return true or false indicate whether current recording sd card is
- * unmount or not
- */
- public boolean isRecordingCardUnmount(Intent intent) {
- String unmountSDCard = intent.getData().toString();
- Log.d(TAG, "unmount sd card file path: " + unmountSDCard);
- return unmountSDCard.equalsIgnoreCase("file://" + sRecordingSdcard) ? true : false;
- }
-
- private int[] insertSearchedStation(int[] channels) {
- Log.d(TAG, "insertSearchedStation.firstValidChannel:" + Arrays.toString(channels));
- int firstValidChannel = mCurrentStation;
- int channelNum = 0;
- if (null != channels) {
- Arrays.sort(channels);
- int size = channels.length;
- // Save searched stations into database by batch
- ArrayList ops = new ArrayList();
- String defaultStationName = getString(R.string.default_station_name);
- for (int i = 0; i < size; i++) {
- if (FmRadioUtils.isValidStation(channels[i])) {
- if (0 == channelNum) {
- firstValidChannel = channels[i];
- }
-
- if (!FmRadioStation.isFavoriteStation(mContext, channels[i])) {
- ops.add(ContentProviderOperation.newInsert(Station.CONTENT_URI)
- .withValue(Station.COLUMN_STATION_NAME, defaultStationName)
- .withValue(Station.COLUMN_STATION_FREQ, channels[i])
- .withValue(Station.COLUMN_STATION_TYPE,
- FmRadioStation.STATION_TYPE_SEARCHED)
- .build());
- }
- channelNum++;
- }
- }
- // Save search stations to database by batch
- try {
- mContext.getContentResolver().applyBatch(FmRadioStation.AUTHORITY, ops);
- } catch (RemoteException e) {
- Log.d(TAG, "Exception when applyBatch searched stations " + e);
- } catch (OperationApplicationException e) {
- Log.d(TAG, "Exception when applyBatch searched stations " + e);
- }
- }
- Log.d(TAG, "insertSearchedStation.firstValidChannel:" + firstValidChannel +
- ",channelNum:" + channelNum);
- return (new int[] {
- firstValidChannel, channelNum
- });
- }
-
- /**
- * The background handler
- */
- class FmRadioServiceHandler extends Handler {
- public FmRadioServiceHandler(Looper looper) {
- super(looper);
- }
-
- @Override
- public void handleMessage(Message msg) {
- Bundle bundle;
- boolean isPowerup = false;
- boolean isSwitch = true;
-
- switch (msg.what) {
-
- // power up
- case FmRadioListener.MSGID_POWERUP_FINISHED:
- bundle = msg.getData();
- handlePowerUp(bundle);
- break;
-
- // power down
- case FmRadioListener.MSGID_POWERDOWN_FINISHED:
- handlePowerDown();
- break;
-
- // fm exit
- case FmRadioListener.MSGID_FM_EXIT:
- if (mIsSpeakerUsed) {
- setSpeakerPhoneOn(false);
- }
- powerDown();
- closeDevice();
- // Release FM player upon exit
- if (null != mFmPlayer) {
- mFmPlayer.release();
- mFmPlayer = null;
- }
-
- bundle = new Bundle(1);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.MSGID_FM_EXIT);
- notifyActivityStateChanged(bundle);
- // Finish favorite when exit FM
- if (sExitListener != null) {
- sExitListener.onExit();
- }
- break;
-
- // switch antenna
- case FmRadioListener.MSGID_SWITCH_ANNTENNA:
- bundle = msg.getData();
- int value = bundle.getInt(FmRadioListener.SWITCH_ANNTENNA_VALUE);
-
- // if not support short antenna, just notify, not need to switch antenna.
- if (SHORT_ANNTENNA_SUPPORT) {
- isSwitch = (switchAntenna(value) == 0) ? true : false;
- Log.d(TAG, "FmServiceHandler.switch anntenna:isSwitch:" + isSwitch);
- } else {
- // if ear phone insert, need dismiss plugin earphone
- // dialog
- // if earphone plug out and it is not play recorder
- // state, show plug dialog.
- if (0 == value) {
- Log.d(TAG, "FmServiceHandler.switch anntenna:dismiss dialog");
- // powerUpAsync(FMRadioUtils.computeFrequency(mCurrentStation));
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.MSGID_SWITCH_ANNTENNA);
- bundle.putBoolean(FmRadioListener.KEY_IS_SWITCH_ANNTENNA, true);
- notifyActivityStateChanged(bundle);
- } else {
- // ear phone plug out, and recorder state is not
- // play recorder state,
- // show dialog.
- if (mRecordState != FmRecorder.STATE_PLAYBACK) {
- Log.d(TAG, "FmServiceHandler.switch anntenna:show dialog");
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.MSGID_SWITCH_ANNTENNA);
- bundle.putBoolean(FmRadioListener.KEY_IS_SWITCH_ANNTENNA, false);
- notifyActivityStateChanged(bundle);
- }
- }
- }
- break;
-
- // tune to station
- case FmRadioListener.MSGID_TUNE_FINISHED:
- bundle = msg.getData();
- float tuneStation = bundle.getFloat(FM_FREQUENCY);
- boolean isTune = tuneStation(tuneStation);
- // if tune fail, pass current station to update ui
- if (!isTune) {
- tuneStation = FmRadioUtils.computeFrequency(mCurrentStation);
- }
- bundle = new Bundle(4);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.MSGID_TUNE_FINISHED);
- bundle.putBoolean(FmRadioListener.KEY_IS_TUNE, isTune);
- bundle.putFloat(FmRadioListener.KEY_TUNE_TO_STATION, tuneStation);
- bundle.putBoolean(FmRadioListener.KEY_IS_POWER_UP, mIsPowerUp);
- notifyActivityStateChanged(bundle);
- break;
-
- // seek to station
- case FmRadioListener.MSGID_SEEK_FINISHED:
- bundle = msg.getData();
- mIsSeeking = true;
- float seekStation = seekStation(bundle.getFloat(FM_FREQUENCY),
- bundle.getBoolean(OPTION));
- boolean isSeekTune = false;
- int station = FmRadioUtils.computeStation(seekStation);
- if (FmRadioUtils.isValidStation(station)) {
- isSeekTune = tuneStation(seekStation);
- }
- // if tune fail, pass current station to update ui
- if (!isSeekTune) {
- seekStation = FmRadioUtils.computeFrequency(mCurrentStation);
- }
- bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.MSGID_TUNE_FINISHED);
- bundle.putBoolean(FmRadioListener.KEY_IS_TUNE, isSeekTune);
- bundle.putFloat(FmRadioListener.KEY_TUNE_TO_STATION, seekStation);
- notifyActivityStateChanged(bundle);
- mIsSeeking = false;
- break;
-
- // start scan
- case FmRadioListener.MSGID_SCAN_FINISHED:
- int[] channels = null;
- int[] result = null;
- int scanTuneStation = 0;
- boolean isScan = true;
- mIsScanning = true;
- if (powerUpFm(FmRadioUtils.DEFAULT_STATION_FLOAT)) {
- channels = startScan();
- }
-
- // check whether cancel scan
- if ((null != channels) && channels[0] == -100) {
- Log.d(TAG, "user canceled scan:channels[0]=" + channels[0]);
- isScan = false;
- result = new int[] {
- -1, 0
- };
- } else {
- result = insertSearchedStation(channels);
- scanTuneStation = result[0];
- isTune = tuneStation(FmRadioUtils.computeFrequency(scanTuneStation));
- scanTuneStation = isTune ? scanTuneStation : mCurrentStation;
- }
-
- /*
- * if there is stop command when scan, so it needs to mute
- * fm avoid fm sound come out.
- */
- if (mIsAudioFocusHeld) {
- Log.d(TAG, "there is not power down command.set mute false");
- setMute(false);
- }
- bundle = new Bundle(4);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.MSGID_SCAN_FINISHED);
- bundle.putInt(FmRadioListener.KEY_TUNE_TO_STATION, scanTuneStation);
- bundle.putInt(FmRadioListener.KEY_STATION_NUM, result[1]);
- bundle.putBoolean(FmRadioListener.KEY_IS_SCAN, isScan);
- notifyActivityStateChanged(bundle);
- mIsScanning = false;
- break;
-
- // audio focus changed
- case FmRadioListener.MSGID_AUDIOFOCUS_CHANGED:
- bundle = msg.getData();
- int focusState = bundle.getInt(FmRadioListener.KEY_AUDIOFOCUS_CHANGED);
- updateAudioFocus(focusState);
- break;
-
- case FmRadioListener.MSGID_SET_RDS_FINISHED:
- bundle = msg.getData();
- setRds(bundle.getBoolean(OPTION));
- break;
-
- case FmRadioListener.MSGID_SET_MUTE_FINISHED:
- bundle = msg.getData();
- setMute(bundle.getBoolean(OPTION));
- break;
-
- case FmRadioListener.MSGID_ACTIVE_AF_FINISHED:
- activeAF();
- break;
-
- /********** recording **********/
- case FmRadioListener.MSGID_STARTRECORDING_FINISHED:
- startRecording();
- break;
-
- case FmRadioListener.MSGID_STOPRECORDING_FINISHED:
- stopRecording();
- break;
-
- case FmRadioListener.MSGID_STARTPLAYBACK_FINISHED:
- boolean isStart = startPlayback();
- // Can not start play back, call back to activity.
- if (!isStart) {
- bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.LISTEN_RECORDERROR);
- bundle.putInt(FmRadioListener.KEY_RECORDING_ERROR_TYPE,
- FmRadioListener.NOT_AUDIO_FOCUS);
- notifyActivityStateChanged(bundle);
- }
- break;
-
- case FmRadioListener.MSGID_STOPPLAYBACK_FINISHED:
- stopPlayback();
- break;
-
- case FmRadioListener.MSGID_RECORD_MODE_CHANED:
- bundle = msg.getData();
- setRecordingMode(bundle.getBoolean(OPTION));
- break;
-
- case FmRadioListener.MSGID_SAVERECORDING_FINISHED:
- bundle = msg.getData();
- saveRecording(bundle.getString(RECODING_FILE_NAME));
- break;
-
- default:
- break;
- }
- }
-
- }
-
- /**
- * handle power down, execute power down and call back to activity.
- */
- private void handlePowerDown() {
- Bundle bundle;
- boolean isPowerdown = powerDown();
- bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.MSGID_POWERDOWN_FINISHED);
- bundle.putBoolean(FmRadioListener.KEY_IS_POWER_DOWN, isPowerdown);
- notifyActivityStateChanged(bundle);
- }
-
- /**
- * handle power up, execute power up and call back to activity.
- *
- * @param bundle power up frequency
- */
- private void handlePowerUp(Bundle bundle) {
- boolean isPowerup = false;
- boolean isSwitch = true;
- Log.d(TAG, "service handler power up start");
- float curFrequency = bundle.getFloat(FM_FREQUENCY);
-
- if (!SHORT_ANNTENNA_SUPPORT && !isAntennaAvailable()) {
- Log.d(TAG, "call back to activity, earphone is not ready");
- mIsPowerUping = false;
- bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.MSGID_SWITCH_ANNTENNA);
- bundle.putBoolean(FmRadioListener.KEY_IS_SWITCH_ANNTENNA, false);
- notifyActivityStateChanged(bundle);
- return;
- }
-
- if (powerUpFm(curFrequency)) {
- isPowerup = startPlayFm(curFrequency);
- mPausedByTransientLossOfFocus = false;
- }
- mIsPowerUping = false;
- bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.MSGID_POWERUP_FINISHED);
- bundle.putBoolean(FmRadioListener.KEY_IS_POWER_UP, isPowerup);
- notifyActivityStateChanged(bundle);
- Log.d(TAG, "service handler power up end");
- }
-
- /**
- * check FM is foreground or background
- */
- public boolean isActivityForeground() {
- boolean isForeground = true;
- List appProcessInfos = mActivityManager.getRunningAppProcesses();
- for (RunningAppProcessInfo appProcessInfo : appProcessInfos) {
- if (appProcessInfo.processName.equals(mContext.getPackageName())) {
- int importance = appProcessInfo.importance;
- Log.d(TAG, "isActivityForeground importance:" + importance);
- if (importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND ||
- importance == RunningAppProcessInfo.IMPORTANCE_VISIBLE) {
- Log.d(TAG, "isActivityForeground is foreground");
- isForeground = true;
- } else {
- Log.d(TAG, "isActivityForeground is background");
- isForeground = false;
- }
- break;
- }
- }
- Log.d(TAG, "isActivityForeground return " + isForeground);
- return isForeground;
- }
-
- /**
- * Check if current is lock task mode. If in this mode, AMS will cannot destory
- * FmRadioActivity even call finish()
- * Settings->Security->Screen pinning on
- * @return true if current screen pinning on FmRadioActivity
- */
- public boolean isInLockTaskMode() {
- Log.d(TAG, "isInLockTaskMode:" + mActivityManager.isInLockTaskMode());
- return mActivityManager.isInLockTaskMode();
- }
-
- /**
- * Get the recording sdcard path when staring record
- *
- * @return sdcard path like "/storage/sdcard0"
- */
- public static String getRecordingSdcard() {
- return sRecordingSdcard;
- }
-
- /**
- * The listener interface for exit
- */
- public interface OnExitListener {
- /**
- * When Service finish, should notify FmRadioFavorite to finish
- */
- void onExit();
- }
-
- /**
- * Register the listener for exit
- *
- * @param listener The listener want to know the exit event
- */
- public static void registerExitListener(OnExitListener listener) {
- sExitListener = listener;
- }
-
- /**
- * Unregister the listener for exit
- *
- * @param listener The listener want to know the exit event
- */
- public static void unregisterExitListener(OnExitListener listener) {
- sExitListener = null;
- }
-
- /**
- * Get the latest recording name the show name in save dialog but saved in
- * service
- *
- * @return The latest recording name or null for not modified
- */
- public String getModifiedRecordingName() {
- Log.d(TAG, "getRecordingNameInDialog:" + mModifiedRecordingName);
- return mModifiedRecordingName;
- }
-
- /**
- * Set the latest recording name if modify the default name
- *
- * @param name The latest recording name or null for not modified
- */
- public void setModifiedRecordingName(String name) {
- Log.d(TAG, "setRecordingNameInDialog:" + name);
- mModifiedRecordingName = name;
- }
-
- /**
- * When FmRadioActivity.onStop() set true, FmRadioActivity.onResume() set false;
- * @param stop
- */
- public static void setActivityIsOnStop(boolean stop) {
- sActivityIsOnStop = stop;
- }
-
- /**
- * Check current is in call/ringtone or not
- * @return true if is not call mode. false mean is in call or ringtone
- */
- public boolean isModeNormal() {
- int mode = mAudioManager.getMode();
- Log.d(TAG, "isInCall mode:" + mode);
- return mode == AudioManager.MODE_NORMAL;
- }
-
- // FM Radio EM start
- /**
- * Inquiry if fm stereo mono(true, stereo; false mono)
- *
- * @return (true, stereo; false, mono)
- */
- public boolean getStereoMono() {
- Log.d(TAG, "FMRadioService.getStereoMono");
- return FmRadioNative.stereoMono();
- }
-
- /**
- * Force set to stero/mono mode
- *
- * @param isMono
- * (true, mono; false, stereo)
- * @return (true, success; false, failed)
- */
- public boolean setStereoMono(boolean isMono) {
- Log.d(TAG, "FMRadioService.setStereoMono: isMono=" + isMono);
- return FmRadioNative.setStereoMono(isMono);
- }
-
- /**
- * set RSSI, desense RSSI, mute gain soft
- * @param index flag which will execute
- * (0:rssi threshold,1:desense rssi threshold,2: SGM threshold)
- * @param value send to native
- * @return execute ok or not
- */
- public boolean setEmth(int index, int value) {
- Log.d(TAG, ">>> FMRadioService.setEmth: index=" + index + ",value=" + value);
- boolean isOk = FmRadioNative.emsetth(index, value);
- Log.d(TAG, "<<< FMRadioService.setEmth: isOk=" + isOk);
- return isOk;
- }
-
- /**
- * send variables to native, and get some variables return.
- * @param val send to native
- * @return get value from native
- */
- public short[] emcmd(short[] val) {
- Log.d(TAG, ">>FMRadioService.emcmd: val=" + val);
- short[] shortCmds = null;
- shortCmds = FmRadioNative.emcmd(val);
- Log.d(TAG, "< mSdcardStateMap = new HashMap();
- // The show name in save dialog but saved in service
- // If modify the save title it will be not null, otherwise it will be null
- private String mModifiedRecordingName = null;
- // record the listener list, will notify all listener in list
- private ArrayList mRecords = new ArrayList();
- // record FM whether in recording mode
- private boolean mIsInRecordingMode = false;
- // record sd card path when start recording
- private static String sRecordingSdcard = FmRadioUtils.getDefaultStoragePath();
-
- // RDS
- // PS String
- private String mPSString = "";
- // RT String
- private String mLRTextString = "";
- // PS RT
- private boolean mIsPSRTEnabled = false;
- // AF
- private boolean mIsAFEnabled = false;
- // RDS thread use to receive the information send by station
- private Thread mRdsThread = null;
- // record whether RDS thread exit
- private boolean mIsRdsThreadExit = false;
-
- // State variables
- // Record whether FM is in native scan state
- private boolean mIsNativeScanning = false;
- // Record whether FM is in scan thread
- private boolean mIsScanning = false;
- // Record whether FM is in seeking state
- private boolean mIsNativeSeeking = false;
- // Record whether FM is in native seek
- private boolean mIsSeeking = false;
- // Record whether searching progress is canceled
- private boolean mIsStopScanCalled = false;
- // Record whether is speaker used
- private boolean mIsSpeakerUsed = false;
- // Record whether device is open
- private boolean mIsDeviceOpen = false;
- // Record whether FM is power up
- private boolean mIsPowerUp = false;
- // Record whether is power uping, if so, should judge in activity back key.
- private boolean mIsPowerUping = false;
- // Record whether service is init
- private boolean mIsServiceInited = false;
- // Fm power down by loss audio focus,should make power down menu item can
- // click
- private boolean mIsMakePowerDown = false;
-
- // Instance variables
- private Context mContext = null;
- private AudioManager mAudioManager = null;
- private ActivityManager mActivityManager = null;
- private MediaPlayer mFmPlayer = null;
- private WakeLock mWakeLock = null;
- // Audio focus is held or not
- private boolean mIsAudioFocusHeld = false;
- // Focus transient lost
- private boolean mPausedByTransientLossOfFocus = false;
- private int mCurrentStation = FmRadioUtils.DEFAULT_STATION;
- // Headset plug state (0:long antenna plug in, 1:long antenna plug out)
- private int mValueHeadSetPlug = 1;
- // For bind service
- private final IBinder mBinder = new ServiceBinder();
- // Broadcast to receive the external event
- private FmServiceBroadcastReceiver mBroadcastReceiver = null;
- // Async handler
- private FmRadioServiceHandler mFmServiceHandler;
- // Lock for lose audio focus and receive SOUND_POWER_DOWN_MSG
- // at the same time
- // while recording call stop recording not finished(status is still
- // RECORDING), but
- // SOUND_POWER_DOWN_MSG will exitFm(), if it is RECORDING will discard the
- // record.
- // 1. lose audio focus -> stop recording(lock) -> set to IDLE and show save
- // dialog
- // 2. exitFm() -> check the record status, discard it if it is recording
- // status(lock)
- // Add this lock the exitFm() while stopRecording()
- private Object mStopRecordingLock = new Object();
- // The listener for exit, should finish favorite when exit FM
- private static OnExitListener sExitListener = null;
- // Record FmRadioActivity state
- private static boolean sActivityIsOnStop = false;
-
- @Override
- public IBinder onBind(Intent intent) {
- Log.d(TAG, "FmRadioService.onBind: " + intent);
- return mBinder;
- }
-
- /**
- * class use to return service instance
- */
- public class ServiceBinder extends Binder {
- /**
- * get FM service instance
- *
- * @return service instance
- */
- FmRadioService getService() {
- return FmRadioService.this;
- }
- }
-
- /**
- * Broadcast monitor external event, Other app want FM stop, Phone shut
- * down, screen state, headset state
- */
- private class FmServiceBroadcastReceiver extends BroadcastReceiver {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.d(TAG, ">>> FmRadioService.onReceive");
- String action = intent.getAction();
- String command = intent.getStringExtra("command");
- Log.d(TAG, "Action/Command: " + action + " / " + command);
- // other app want FM stop, stop FM
- if (ACTION_TOFMSERVICE_POWERDOWN.equals(action)
- || ACTION_FROMATVSERVICE_POWERUP.equals(action)
- || (SOUND_POWER_DOWN_MSG.equals(action) && CMDPAUSE.equals(command))) {
- // need remove all messages, make power down will be execute
- mFmServiceHandler.removeCallbacksAndMessages(null);
-
- Log.d(TAG, "onReceive.SOUND_POWER_DOWN_MSG. exit FM");
- exitFm();
- stopSelf();
- // phone shut down, so exit FM
- } else if (Intent.ACTION_SHUTDOWN.equals(action)) {
- /**
- * here exitFm, system will send broadcast, system will shut
- * down, so fm does not need call back to activity
- */
- mFmServiceHandler.removeCallbacksAndMessages(null);
- exitFm();
- // screen on, if FM play, open rds
- } else if (Intent.ACTION_SCREEN_ON.equals(action)) {
-
- setRdsAsync(true);
- // screen off, if FM play, close rds
- } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
- setRdsAsync(false);
- // switch antenna when headset plug in or plug out
- } else if (Intent.ACTION_HEADSET_PLUG.equals(action)) {
- // switch antenna should not impact audio focus status
- mValueHeadSetPlug = (intent.getIntExtra("state", -1) == HEADSET_PLUG_IN) ? 0 : 1;
- switchAntennaAsync(mValueHeadSetPlug);
-
- if (SHORT_ANNTENNA_SUPPORT) {
- boolean isSwitch = (switchAntenna(mValueHeadSetPlug) == 0) ? true : false;
- Log.d(TAG, "onReceive.switch anntenna:isWitch:" + isSwitch);
-
- // Plug out->Speaker Mode; Plug in->Earphone Mode
- boolean plugInEarphone = (0 == mValueHeadSetPlug);
- // Need check to switch to earphone mode for audio will
- // change to AudioSystem.FORCE_NONE
- if (plugInEarphone) {
- mForcedUseForMedia = AudioSystem.FORCE_NONE;
- mIsSpeakerUsed = false;
- }
- //setSpeakerPhoneOn(!plugInEarphone);
- // Notify UI change to earphone mode, false means not speaker mode
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.LISTEN_SPEAKER_MODE_CHANGED);
- bundle.putBoolean(FmRadioListener.KEY_IS_SPEAKER_MODE, !plugInEarphone);
- notifyActivityStateChanged(bundle);
-
- powerUpAutoIfNeed();
- } else {
- // Avoid Service is killed,and receive headset plug in
- // broadcast again
- if (!mIsServiceInited) {
- Log.d(TAG, "onReceive.switch anntenna:service is not init");
- powerUpAutoIfNeed();
- return;
- }
- /*
- * If ear phone insert and activity is
- * foreground. power up FM automatic
- */
- if ((0 == mValueHeadSetPlug) && isActivityForeground()) {
- Log.d(TAG, "onReceive.switch anntenna:need auto power up");
- powerUpAsync(FmRadioUtils.computeFrequency(mCurrentStation));
- } else if (1 == mValueHeadSetPlug) {
- Log.d(TAG, "plug out earphone, need to stop fm");
- // ALPS01687760 Avoid sound from speaker after plug out earphone when recording
- // plug out earphone will power down or exit, need to mute first anyway
- setMute(true);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SCAN_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SEEK_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_TUNE_FINISHED);
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_POWERDOWN_FINISHED);
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_POWERUP_FINISHED);
- stopFmFocusLoss(AudioManager.AUDIOFOCUS_LOSS);
-
- // Need check to switch to earphone mode for audio will
- // change to AudioSystem.FORCE_NONE
- setSpeakerPhoneOn(false);
-
- // Notify UI change to earphone mode, false means not speaker mode
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.LISTEN_SPEAKER_MODE_CHANGED);
- bundle.putBoolean(FmRadioListener.KEY_IS_SPEAKER_MODE, false);
- notifyActivityStateChanged(bundle);
- }
- }
-
- } else if (BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED.equals(action)) {
- int connectState = intent.getIntExtra(BluetoothA2dp.EXTRA_STATE, 0);
- Log.d(TAG, "ACTION_CONNECTION_STATE_CHANGED: connectState=" + connectState + ", ispowerup="
- + mIsPowerUp);
- handleBtConnectState(connectState);
-/* Vanzo:tanglei on: Fri, 13 Mar 2015 21:26:14 +0800
- * earphone key action
- */
- } //else if (FeatureOption.VANZO_FEATURE_EARPHONE_KEY_ACTION && "com.mediatek.FMRadio.FMRadioService.NEXT_STATION".equals(action)) {
- //seekStationAsync(FmRadioUtils.computeFrequency(mCurrentStation), true);
-// End of Vanzo:tanglei
- //}
- else {
- Log.w(TAG, "Error: undefined action.");
- }
- Log.d(TAG, "<<< FmRadioService.onReceive");
- }
- }
-
- /**
- * ALPS01756692 No sound after click FM app and power key
- * Need to power up auto for two cases:
- * case 1: Launcher click FM app, then quickly click Power key to lock phone.
- * case 2: Launcher click FM app, then quickly click Home key.
- * Because power up action is in FmRadioActivity.onServiceConnected(), these two cases
- * will not callback onServiceConnected() cause FmRadioActivity.onStop() has called unbind()
- */
- private void powerUpAutoIfNeed() {
- if ((0 == mValueHeadSetPlug)) {
- if (!mIsPowerUping && !mIsPowerUp && sActivityIsOnStop) {
- Log.w(TAG, "Power up for start app then quick click power/home");
- int iCurrentStation = FmRadioStation.getCurrentStation(mContext);
- powerUpAsync(FmRadioUtils.computeFrequency(iCurrentStation));
- }
- }
- }
-
- /**
- * handle FM over BT connect state
- *
- * @param connectState
- * FM over BT connect state
- */
- private void handleBtConnectState(int connectState) {
- if (!mIsPowerUp) {
- return;
- }
-
- switch (connectState) {
- case BluetoothA2dp.STATE_CONNECTED:
- //case BluetoothA2dp.STATE_PLAYING:
- //case BluetoothA2dp.STATE_CONNECTING:
- Log.d(TAG, "handleBtConnectState bt connected");
- changeToEarphoneMode();
- break;
- case BluetoothA2dp.STATE_DISCONNECTED:
- //case BluetoothA2dp.STATE_DISCONNECTING:
- Log.d(TAG, "handleBtConnectState bt disconnected");
- changeToEarphoneMode();
- break;
- default:
- Log.d(TAG, "invalid fm over bt connect state");
- break;
- }
-
-
- }
-
- private void changeToEarphoneMode() {
- setSpeakerPhoneOn(false);
- // Notify UI change to earphone mode, false means not speaker mode
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.LISTEN_SPEAKER_MODE_CHANGED);
- // Always set to earphone mode when bt is connected or disconnected
- bundle.putBoolean(FmRadioListener.KEY_IS_SPEAKER_MODE, false);
- notifyActivityStateChanged(bundle);
- }
-
- /**
- * Check if BT is connected
- * @return true if current is playing with BT earphone
- */
- public boolean isBtConnected() {
- BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
- Log.d(TAG, "isBtConnected headset:"
- + btAdapter.getProfileConnectionState(BluetoothProfile.HEADSET)
- + ", a2dp:" + btAdapter.getProfileConnectionState(BluetoothProfile.A2DP));
- int a2dpState = btAdapter.getProfileConnectionState(BluetoothProfile.HEADSET);
- return (BluetoothProfile.STATE_CONNECTED == a2dpState
- || BluetoothProfile.STATE_CONNECTING == a2dpState);
- }
-
- /**
- * Handle sdcard mount/unmount event. 1. Update the sdcard state map 2. If
- * the recording sdcard is unmounted, need to stop and notify
- */
- private class SdcardListener extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- // If eject record sdcard, should set this false to not
- // record.
- updateSdcardStateMap(intent);
-
- if (mFmRecorder == null) {
- Log.w(TAG, "SD receiver: FMRecorder is not present!!");
- return;
- }
-
- String action = intent.getAction();
- if (Intent.ACTION_MEDIA_EJECT.equals(action) ||
- Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) {
- // If not unmount recording sd card, do nothing;
- if (isRecordingCardUnmount(intent)) {
- Log.v(TAG, "MEDIA_EJECT");
- if (mFmRecorder.getState() == FmRecorder.STATE_RECORDING) {
- Log.d(TAG, "old state is recording");
- onRecorderError(FmRecorder.ERROR_SDCARD_NOT_PRESENT);
- mFmRecorder.discardRecording();
- } else {
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.LISTEN_RECORDSTATE_CHANGED);
- bundle.putInt(FmRadioListener.KEY_RECORDING_STATE,
- FmRecorder.STATE_IDLE);
- notifyActivityStateChanged(bundle);
- }
- }
- return;
- }
- }
- }
-
- /**
- * whether antenna available
- *
- * @return true, antenna available; false, antenna not available
- */
- public boolean isAntennaAvailable() {
- return mAudioManager.isWiredHeadsetOn();
- }
-
- /**
- * Set FM audio from speaker or not
- *
- * @param isSpeaker true if set FM audio from speaker
- */
- public void setSpeakerPhoneOn(boolean isSpeaker) {
- Log.d(TAG, ">>> FmRadioService.useSpeaker: " + isSpeaker);
- mForcedUseForMedia = isSpeaker ? AudioSystem.FORCE_SPEAKER : AudioSystem.FORCE_NONE;
- AudioSystem.setForceUse(FOR_PROPRIETARY, mForcedUseForMedia);
- mIsSpeakerUsed = isSpeaker;
- Log.d(TAG, "<<< FmRadioService.useSpeaker");
- }
-
- private boolean isSpeakerPhoneOn() {
- return (mForcedUseForMedia == AudioSystem.FORCE_SPEAKER);
- }
-
- /**
- * open FM device, should be call before power up
- *
- * @return true if FM device open, false FM device not open
- */
- private boolean openDevice() {
- Log.d(TAG, ">>> FmRadioService.openDevice");
- if (!mIsDeviceOpen) {
- mIsDeviceOpen = FmRadioNative.openDev();
- }
- Log.d(TAG, "<<< FmRadioService.openDevice: " + mIsDeviceOpen);
- return mIsDeviceOpen;
- }
-
- /**
- * close FM device
- *
- * @return true if close FM device success, false close FM device failed
- */
- private boolean closeDevice() {
- Log.d(TAG, ">>> FmRadioService.closeDevice");
- boolean isDeviceClose = false;
- if (mIsDeviceOpen) {
- isDeviceClose = FmRadioNative.closeDev();
- mIsDeviceOpen = !isDeviceClose;
- }
- Log.d(TAG, "<<< FmRadioService.closeDevice: " + isDeviceClose);
-
- // quit looper
- mFmServiceHandler.getLooper().quit();
- return isDeviceClose;
- }
-
- /**
- * get FM device opened or not
- *
- * @return true FM device opened, false FM device closed
- */
- public boolean isDeviceOpen() {
- Log.d(TAG, "FmRadioService.isDeviceOpen: " + mIsDeviceOpen);
- return mIsDeviceOpen;
- }
-
- /**
- * power up FM, and make FM voice output from earphone
- *
- * @param frequency
- */
- public void powerUpAsync(float frequency) {
- mIsPowerUping = true;
- final int bundleSize = 1;
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERUP_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERDOWN_FINISHED);
- Bundle bundle = new Bundle(bundleSize);
- bundle.putFloat(FM_FREQUENCY, frequency);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_POWERUP_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private boolean powerUpFm(float frequency) {
- Log.d(TAG, ">>> FmRadioService.powerUp: " + frequency);
- if (mIsPowerUp) {
- Log.d(TAG, "<<< FmRadioService.powerUp: already power up:" + mIsPowerUp);
- return true;
- }
-
- if (!requestAudioFocus()) {
- // activity used for update powerdown menu
- mIsMakePowerDown = true;
- Log.d(TAG, "FM can't get audio focus when power up");
- sendBroadcastToStopOtherAPP();
- return false;
- }
-
- // if device open fail when chip reset, it need open device again before
- // power up
- if (!mIsDeviceOpen) {
- openDevice();
- }
-
- waitIfTxSearching();
- Log.d(TAG, "set CURRENT_RX_ON true, CURRENT_TX_ON false");
- FmRadioNative.setFmStatus(CURRENT_RX_ON, true);
- FmRadioNative.setFmStatus(CURRENT_TX_ON, false);
- sendBroadcastToStopOtherAPP();
-
- Log.d(TAG, "service native power up start");
- if (!FmRadioNative.powerUp(frequency)) {
- Log.e(TAG, "Error: powerup failed.");
- return false;
- }
- Log.d(TAG, "service native power up end");
- mIsPowerUp = true;
- // need mute after power up
- setMute(true);
-
- // activity used for update powerdown menu
- mIsMakePowerDown = false;
- Log.d(TAG, "<<< FmRadioService.powerUp: " + mIsPowerUp);
- return mIsPowerUp;
- }
-
- // wait if TX is searching for timing issue
- private void waitIfTxSearching() {
- Log.d(TAG, ">>> waitIfTxSearching " + FmRadioNative.getFmStatus(CURRENT_TX_SCAN));
- long start = System.currentTimeMillis();
- // true for TX is searching
- while (FmRadioNative.getFmStatus(CURRENT_TX_SCAN) == true) {
- if (System.currentTimeMillis() - start > 5000) {
- Log.e(TAG, "waitIfTxSearching timeout");
- break;
- }
- try {
- Thread.sleep(100);
- } catch (Exception e) {
- }
- }
- Log.d(TAG, "<<< waitIfTxSearching");
- }
-
- private boolean startPlayFm(float frequency) {
- Log.d(TAG, ">>> FmRadioService.initDevice: " + frequency);
-
- mCurrentStation = FmRadioUtils.computeStation(frequency);
- FmRadioStation.setCurrentStation(mContext, mCurrentStation);
- // Add notification to the title bar.
- showNotification();
-
- // Start the RDS thread if RDS is supported.
- if (isRdsSupported()) {
- Log.d(TAG, "RDS is supported. Start the RDS thread.");
- startRdsThread();
- }
-
- if (!FmRadioUtils.isFmSuspendSupport()) {
- if (!mWakeLock.isHeld()) {
- mWakeLock.acquire();
- Log.d(TAG, "acquire wake lock");
- }
- }
- if (mIsSpeakerUsed != isSpeakerPhoneOn()) {
- setSpeakerPhoneOn(mIsSpeakerUsed);
- }
- if (mRecordState != FmRecorder.STATE_PLAYBACK) {
- enableFmAudio(true);
- }
-
- setRds(true);
- setMute(false);
-
- Log.d(TAG, "<<< FmRadioService.initDevice: " + mIsPowerUp);
- return mIsPowerUp;
- }
-
- /**
- * send broadcast to stop other application, such as music, MATV,
- * FMTransmitter
- */
- private void sendBroadcastToStopOtherAPP() {
- Intent intentToMusic = new Intent(ACTION_TOMUSICSERVICE_POWERDOWN);
- sendBroadcast(intentToMusic);
- Intent intentToAtv = new Intent(ACTION_TOATVSERVICE_POWERDOWN);
- sendBroadcast(intentToAtv);
- Intent intentToFMTx = new Intent(ACTION_TOFMTXSERVICE_POWERDOWN);
- sendBroadcast(intentToFMTx);
- }
-
- /**
- * power down FM
- */
- public void powerDownAsync() {
- // if power down Fm, should remove message first.
- // not remove all messages, because such as recorder message need
- // to execute after or before power down
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SCAN_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SEEK_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_TUNE_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERDOWN_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERUP_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_POWERDOWN_FINISHED);
- }
-
- /**
- * Power down FM
- *
- * @return true if power down success
- */
- private boolean powerDown() {
- Log.d(TAG, ">>> FmRadioService.powerDown");
- if (!mIsPowerUp) {
- Log.w(TAG, "Error: device is already power down.");
- return true;
- }
-
- setMute(true);
- setRds(false);
- enableFmAudio(false);
-
- // Only need to power down if RX status in native is ON
- // If TX is on, so need power down(TX is using).
- boolean isRxOn = FmRadioNative.getFmStatus(CURRENT_RX_ON);
- boolean powerDownSuccess = false;
- if (isRxOn) {
- powerDownSuccess = FmRadioNative.powerDown(0);
- } else {
- powerDownSuccess = true;
- }
-
- if (!powerDownSuccess) {
- Log.e(TAG, "Error: powerdown failed.");
- // activity used for update powerdown menu
- mIsMakePowerDown = true;
-
- if (isRdsSupported()) {
- Log.d(TAG, "RDS is supported. Stop the RDS thread.");
- stopRdsThread();
- }
- mIsPowerUp = false;
- if (mWakeLock.isHeld()) {
- mWakeLock.release();
- Log.d(TAG, "release wake lock");
- }
- // Remove the notification in the title bar.
- removeNotification();
- Log.d(TAG, "powerdown failed.release some resource.");
- return false;
- }
- // activity used for update powerdown menu
- mIsMakePowerDown = true;
-
- if (isRdsSupported()) {
- Log.d(TAG, "RDS is supported. Stop the RDS thread.");
- stopRdsThread();
- }
- mIsPowerUp = false;
-
- if (mWakeLock.isHeld()) {
- mWakeLock.release();
- Log.d(TAG, "release wake lock");
- }
-
- // Remove the notification in the title bar.
- removeNotification();
- Log.d(TAG, "<<< FmRadioService.powerDown: true");
- return true;
- }
-
- /**
- * Check whether FM is power up
- *
- * @return true, power up; false, power down.
- */
- public boolean isPowerUp() {
- Log.d(TAG, "FmRadioService.isPowerUp: " + mIsPowerUp);
- return mIsPowerUp;
- }
-
- /**
- * Check whether FM is power uping. if power uping, activity should call
- * super.onBackPressed, avoid not execute power down method.
- *
- * @return true, power up; false, power down.
- */
- public boolean isPowerUping() {
- Log.d(TAG, "FmRadioService.isPowerUping: " + mIsPowerUping);
- return mIsPowerUping;
- }
-
- /**
- * Check whether FM is power down by other app.
- *
- * @return true, power down; true.
- */
- public boolean isMakePowerDown() {
- Log.d(TAG, "FmRadioService.mIsMakePowerDown: " + mIsMakePowerDown);
- return mIsMakePowerDown;
- }
-
- /**
- * Tune to a station
- *
- * @param frequency The frequency to tune
- *
- * @return true, success; false, fail.
- */
- public void tuneStationAsync(float frequency) {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_TUNE_FINISHED);
- final int bundleSize = 1;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putFloat(FM_FREQUENCY, frequency);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_TUNE_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private boolean tuneStation(float frequency) {
- Log.d(TAG, ">>> FmRadioService.tune: " + frequency);
- if (mIsPowerUp) {
- setRds(false);
- Log.d(TAG, "FmRadioService.native tune start");
- boolean bRet = FmRadioNative.tune(frequency);
- Log.d(TAG, "FmRadioService.native tune end");
- if (bRet) {
- setRds(true);
- mCurrentStation = FmRadioUtils.computeStation(frequency);
- FmRadioStation.setCurrentStation(mContext, mCurrentStation);
- updateNotification();
- }
- setMute(false);
- Log.d(TAG, "<<< FmRadioService.tune: " + bRet);
- return bRet;
- }
-
- // if not support short Antenna and earphone is not insert, not power up
- if (!isAntennaAvailable() && !SHORT_ANNTENNA_SUPPORT) {
- Log.d(TAG, "earphone is not insert and short antenna not support");
- return false;
- }
-
- // if not power up yet, should powerup first
- Log.w(TAG, "FM is not powered up");
- mIsPowerUping = true;
- boolean tune = false;
-
- if (powerUpFm(frequency)) {
- tune = startPlayFm(frequency);
- }
- mIsPowerUping = false;
- Log.d(TAG, "<<< FmRadioService.tune: mIsPowerup:" + tune);
- return tune;
- }
-
- /**
- * Seek station according frequency and direction
- *
- * @param frequency start frequency(100KHZ, 87.5)
- * @param isUp direction(true, next station; false, previous station)
- *
- * @return the frequency after seek
- */
- public void seekStationAsync(float frequency, boolean isUp) {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SEEK_FINISHED);
- final int bundleSize = 2;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putFloat(FM_FREQUENCY, frequency);
- bundle.putBoolean(OPTION, isUp);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_SEEK_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private float seekStation(float frequency, boolean isUp) {
- Log.d(TAG, ">>> FmRadioService.seek: " + frequency + " " + isUp);
- if (!mIsPowerUp) {
- Log.w(TAG, "FM is not powered up");
- return -1;
- }
-
- setRds(false);
- mIsNativeSeeking = true;
- float fRet = FmRadioNative.seek(frequency, isUp);
- mIsNativeSeeking = false;
- // make mIsStopScanCalled false, avoid stop scan make this true,
- // when start scan, it will return null.
- mIsStopScanCalled = false;
- Log.d(TAG, "<<< FmRadioService.seek: " + fRet);
- return fRet;
- }
-
- /**
- * Scan stations
- */
- public void startScanAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SCAN_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_SCAN_FINISHED);
- }
-
- private int[] startScan() {
- Log.d(TAG, ">>> FmRadioService.startScan");
- int[] iChannels = null;
-
- setRds(false);
- setMute(true);
- short[] shortChannels = null;
- if (!mIsStopScanCalled) {
- mIsNativeScanning = true;
- Log.d(TAG, "startScan native method:start");
- shortChannels = FmRadioNative.autoScan();
- Log.d(TAG, "startScan native method:end " + Arrays.toString(shortChannels));
- mIsNativeScanning = false;
- }
-
- setRds(true);
- if (mIsStopScanCalled) {
- // Received a message to power down FM, or interrupted by a phone
- // call. Do not return any stations. shortChannels = null;
- // if cancel scan, return invalid station -100
- shortChannels = new short[] {
- -100
- };
- mIsStopScanCalled = false;
- }
-
- if (null != shortChannels) {
- int size = shortChannels.length;
- iChannels = new int[size];
- for (int i = 0; i < size; i++) {
- iChannels[i] = shortChannels[i];
- }
- }
- Log.d(TAG, "<<< FmRadioService.startScan: " + Arrays.toString(iChannels));
- return iChannels;
- }
-
- /**
- * Check FM Radio is in scan progress or not
- *
- * @return if in scan progress return true, otherwise return false.
- */
- public boolean isScanning() {
- return mIsScanning;
- }
-
- /**
- * Stop scan progress
- *
- * @return true if can stop scan, otherwise return false.
- */
- public boolean stopScan() {
- Log.d(TAG, ">>> FmRadioService.stopScan");
- if (!mIsPowerUp) {
- Log.w(TAG, "FM is not powered up");
- return false;
- }
-
- boolean bRet = false;
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SCAN_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SEEK_FINISHED);
- if (mIsNativeScanning || mIsNativeSeeking) {
- mIsStopScanCalled = true;
- Log.d(TAG, "native stop scan:start");
- bRet = FmRadioNative.stopScan();
- Log.d(TAG, "native stop scan:end --" + bRet);
- }
- Log.d(TAG, "<<< FmRadioService.stopScan: " + bRet);
- return bRet;
- }
-
- /**
- * Check FM is in seek progress or not
- *
- * @return true if in seek progress, otherwise return false.
- */
- public boolean isSeeking() {
- return mIsNativeSeeking;
- }
-
- /**
- * Set RDS
- *
- * @param on true, enable RDS; false, disable RDS.
- */
- public void setRdsAsync(boolean on) {
- final int bundleSize = 1;
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SET_RDS_FINISHED);
- Bundle bundle = new Bundle(bundleSize);
- bundle.putBoolean(OPTION, on);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_SET_RDS_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private int setRds(boolean on) {
- if (!mIsPowerUp) {
- return -1;
- }
- Log.d(TAG, ">>> FmRadioService.setRDS: " + on);
- int ret = -1;
- if (isRdsSupported()) {
- ret = FmRadioNative.setRds(on);
- }
- setPS("");
- setLRText("");
- Log.d(TAG, "<<< FmRadioService.setRDS: " + ret);
- return ret;
- }
-
- /**
- * Get PS information
- *
- * @return PS information
- */
- public String getPS() {
- Log.d(TAG, "FmRadioService.getPS: " + mPSString);
- return mPSString;
- }
-
- /**
- * Get RT information
- *
- * @return RT information
- */
- public String getLRText() {
- Log.d(TAG, "FmRadioService.getLRText: " + mLRTextString);
- return mLRTextString;
- }
-
- /**
- * Get AF frequency
- *
- * @return AF frequency
- */
- public void activeAFAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_ACTIVE_AF_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_ACTIVE_AF_FINISHED);
- }
-
- private int activeAF() {
- if (!mIsPowerUp) {
- Log.w(TAG, "FM is not powered up");
- return -1;
- }
-
- int frequency = FmRadioNative.activeAf();
- Log.d(TAG, "FmRadioService.activeAF: " + frequency);
- return frequency;
- }
-
- /**
- * Mute or unmute FM voice
- *
- * @param mute true for mute, false for unmute
- *
- * @return (true, success; false, failed)
- */
- public void setMuteAsync(boolean mute) {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SET_MUTE_FINISHED);
- final int bundleSize = 1;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putBoolean(OPTION, mute);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_SET_MUTE_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private int setMute(boolean mute) {
- if (!mIsPowerUp) {
- Log.w(TAG, "FM is not powered up");
- return -1;
- }
- Log.d(TAG, ">>> FmRadioService.setMute: " + mute);
- int iRet = FmRadioNative.setMute(mute);
- Log.d(TAG, "<<< FmRadioService.setMute: " + iRet);
- return iRet;
- }
-
- /**
- * Check whether RDS is support in driver
- *
- * @return (true, support; false, not support)
- */
- public boolean isRdsSupported() {
- boolean isRdsSupported = (FmRadioNative.isRdsSupport() == 1);
- Log.d(TAG, "FmRadioService.isRdsSupported: " + isRdsSupported);
- return isRdsSupported;
- }
-
- /**
- * Check whether speaker used or not
- *
- * @return true if use speaker, otherwise return false
- */
- public boolean isSpeakerUsed() {
- Log.d(TAG, "FmRadioService.isSpeakerUsed: " + mIsSpeakerUsed);
- return mIsSpeakerUsed;
- }
-
- /**
- * Initial service and current station
- *
- * @param iCurrentStation current station frequency
- */
- public void initService(int iCurrentStation) {
- Log.d(TAG, "FmRadioService.initService: " + iCurrentStation);
- mIsServiceInited = true;
- mCurrentStation = iCurrentStation;
- }
-
- /**
- * Check service is initialed or not
- *
- * @return true if initialed, otherwise return false
- */
- public boolean isServiceInited() {
- Log.d(TAG, "FmRadioService.isServiceInit: " + mIsServiceInited);
- return mIsServiceInited;
- }
-
- /**
- * Get FM service current station frequency
- *
- * @return Current station frequency
- */
- public int getFrequency() {
- Log.d(TAG, "FmRadioService.getFrequency: " + mCurrentStation);
- return mCurrentStation;
- }
-
- /**
- * Set FM service station frequency
- *
- * @param station Current station
- */
- public void setFrequency(int station) {
- mCurrentStation = station;
- }
-
- /**
- * resume FM audio
- */
- private void resumeFmAudio() {
- Log.d(TAG, "FmRadioService.resumeFmAudio");
- // If not check mIsAudioFocusHeld && mIsPowerup, when scan canceled,
- // this will be resume first, then execute power down. it will cause
- // nosise.
- if (mIsAudioFocusHeld && mIsPowerUp) {
- enableFmAudio(true);
- }
- }
-
- /**
- * Switch antenna There are two types of antenna(long and short) If long
- * antenna(most is this type), must plug in earphone as antenna to receive
- * FM. If short antenna, means there is a short antenna if phone already,
- * can receive FM without earphone.
- *
- * @param antenna antenna (0, long antenna, 1 short antenna)
- *
- * @return (0, success; 1 failed; 2 not support)
- */
- public void switchAntennaAsync(int antenna) {
- final int bundleSize = 1;
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SWITCH_ANNTENNA);
-
- Bundle bundle = new Bundle(bundleSize);
- bundle.putInt(FmRadioListener.SWITCH_ANNTENNA_VALUE, antenna);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_SWITCH_ANNTENNA);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- /**
- * Need native support whether antenna support interface.
- *
- * @param antenna antenna (0, long antenna, 1 short antenna)
- *
- * @return (0, success; 1 failed; 2 not support)
- */
- private int switchAntenna(int antenna) {
- Log.d(TAG, ">>> FmRadioService.switchAntenna:" + antenna);
- // if fm not powerup, switchAntenna will flag whether has earphone
- int ret = FmRadioNative.switchAntenna(antenna);
- Log.d(TAG, "<<< FmRadioService.switchAntenna: " + ret);
- return ret;
- }
-
- /**
- * Start recording
- */
- public void startRecordingAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_STARTRECORDING_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_STARTRECORDING_FINISHED);
- }
-
- private void startRecording() {
- Log.d(TAG, ">>> startRecording");
- if (!mIsPowerUp) {
- Log.d(TAG, "native is not power up: " + mIsPowerUp);
- onRecorderError(FmRecorder.ERROR_RECORDER_INVALID_STATE);
- return;
- }
- sRecordingSdcard = FmRadioUtils.getDefaultStoragePath();
- Log.d(TAG, "default sd card file path: " + sRecordingSdcard);
- if (sRecordingSdcard == null || sRecordingSdcard.isEmpty()) {
- Log.d(TAG, "startRecording: may be no sdcard");
- onRecorderError(FmRecorder.ERROR_SDCARD_NOT_PRESENT);
- return;
- }
-
- if (mFmRecorder == null) {
- mFmRecorder = new FmRecorder();
- mFmRecorder.registerRecorderStateListener(FmRadioService.this);
- }
-
- if (isSdcardReady(sRecordingSdcard)) {
- mFmRecorder.startRecording(getApplicationContext());
- } else {
- Log.d(TAG, "Cannot record because sdcard is not ready!!");
- onRecorderError(FmRecorder.ERROR_SDCARD_NOT_PRESENT);
- }
- Log.d(TAG, "<<< startRecording");
- }
-
- private boolean isSdcardReady(String sdcardPath) {
- Log.d(TAG, ">>> isSdcardReady: sdcardPath is " + sdcardPath +
- ", mSdcardStateMap is " + mSdcardStateMap);
- if (!mSdcardStateMap.isEmpty()) {
- if (mSdcardStateMap.get(sdcardPath) != null && !mSdcardStateMap.get(sdcardPath)) {
- Log.d(TAG, "<<< isSdcardReady: return false");
- return false;
- }
- }
- Log.d(TAG, "<<< isSdcardReady: mSdcardStateMap:" + mSdcardStateMap);
- return true;
- }
-
- /**
- * stop recording
- */
- public void stopRecordingAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_STOPRECORDING_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_STOPRECORDING_FINISHED);
- }
-
- private boolean stopRecording() {
- Log.d(TAG, ">>> stopRecording");
- if (mFmRecorder == null) {
- Log.e(TAG, "stopRecording called without a valid recorder!!");
- return false;
- }
- synchronized (mStopRecordingLock) {
- mFmRecorder.stopRecording();
- Log.d(TAG, "<<< stopRecording");
- }
- return true;
- }
-
- /**
- * Start play recording file
- */
- public void startPlaybackAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_STARTPLAYBACK_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_STARTPLAYBACK_FINISHED);
- }
-
- private boolean startPlayback() {
- Log.d(TAG, ">>> startPlayback");
- if (!requestAudioFocus()) {
- Log.d(TAG, "can't get audio focus when play recording file");
- return false;
- }
-
- if (mFmRecorder == null) {
- Log.e(TAG, "FMRecorder is null !!");
- return false;
- }
-
- // Set Mute before start playback
- mAudioManager.setParameters("AudioFmPreStop=1");
- setMute(true);
- enableFmAudio(false);
-
- mFmRecorder.startPlayback();
- Log.d(TAG, "<<< startPlayback");
- return true;
- }
-
- /**
- * stop play recording file
- */
- public void stopPlaybackAsync() {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_STOPPLAYBACK_FINISHED);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_STOPPLAYBACK_FINISHED);
- }
-
- private void stopPlayback() {
- Log.d(TAG, ">>> stopPlayback");
- if (mFmRecorder != null) {
- mFmRecorder.stopPlayback();
- checkAfterPlayback();
- }
- Log.d(TAG, "<<< stopPlayback");
- }
-
- /**
- * Save recording file according name or discard recording file if name is
- * null
- *
- * @param newName New recording file name
- */
- public void saveRecordingAsync(String newName) {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_SAVERECORDING_FINISHED);
- final int bundleSize = 1;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putString(RECODING_FILE_NAME, newName);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_SAVERECORDING_FINISHED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private void saveRecording(String newName) {
- Log.d(TAG, ">>> saveRecording");
- if (mFmRecorder != null) {
- if (newName != null) {
- mFmRecorder.saveRecording(FmRadioService.this, newName);
- Log.d(TAG, "<<< saveRecording");
- return;
- }
- mFmRecorder.discardRecording();
- }
- Log.d(TAG, "<<< saveRecording");
- }
-
- /**
- * Get record time
- *
- * @return Record time
- */
- public long getRecordTime() {
- if (mFmRecorder != null) {
- return mFmRecorder.recordTime();
- }
- Log.e(TAG, "FMRecorder is null !!");
- return 0;
- }
-
- /**
- * Set recording mode
- *
- * @param isRecording true, enter recoding mode; false, exit recording mode
- */
- public void setRecordingModeAsync(boolean isRecording) {
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_RECORD_MODE_CHANED);
- final int bundleSize = 1;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putBoolean(OPTION, isRecording);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_RECORD_MODE_CHANED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- private void setRecordingMode(boolean isRecording) {
- Log.d(TAG, ">>> setRecordingMode: isRecording=" + isRecording);
- mIsInRecordingMode = isRecording;
- if (mFmRecorder != null) {
- if (!isRecording) {
- if (mFmRecorder.getState() != FmRecorder.STATE_IDLE) {
- mFmRecorder.stopRecording();
- mFmRecorder.stopPlayback();
- }
- resumeFmAudio();
- setMute(false);
- Log.d(TAG, "<<< setRecordingMode");
- return;
- }
- // reset recorder to unused status
- mFmRecorder.resetRecorder();
- }
- Log.d(TAG, "<<< setRecordingMode");
- }
-
- /**
- * Get current recording mode
- *
- * @return if in recording mode return true, otherwise return false;
- */
- public boolean getRecordingMode() {
- return mIsInRecordingMode;
- }
-
- /**
- * Get record state
- *
- * @return record state
- */
- public int getRecorderState() {
- if (null != mFmRecorder) {
- return mFmRecorder.getState();
- }
- return FmRecorder.STATE_INVALID;
- }
-
- /**
- * Get recording file name
- *
- * @return recording file name
- */
- public String getRecordingName() {
- if (null != mFmRecorder) {
- return mFmRecorder.getRecordingName();
- }
- return null;
- }
-
- /**
- * Get current recording file name with full path
- *
- * @return The current recording file name or null
- */
- public String getRecordingNameWithPath() {
- if (null != mFmRecorder) {
- return mFmRecorder.getRecordingNameWithPath();
- }
- return null;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- Log.d(TAG, ">>> FmRadioService.onCreate");
- Log.d(TAG, "short antenna support:" + SHORT_ANNTENNA_SUPPORT);
- mContext = getApplicationContext();
- mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
- PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
- mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
- mWakeLock.setReferenceCounted(false);
- sRecordingSdcard = FmRadioUtils.getDefaultStoragePath();
-
- if (!initFmPlayer()) {
- Log.e(TAG, "init FMPlayer failed");
- return;
- }
-
- registerFmBroadcastReceiver();
- registerSdcardReceiver();
-
- HandlerThread handlerThread = new HandlerThread("FmRadioServiceThread");
- handlerThread.start();
- mFmServiceHandler = new FmRadioServiceHandler(handlerThread.getLooper());
-
- openDevice();
- // set speaker to default status, avoid setting->clear data.
- setSpeakerPhoneOn(mIsSpeakerUsed);
- Log.d(TAG, "<<< FmRadioService.onCreate");
- }
-
- private boolean initFmPlayer() {
- mFmPlayer = new MediaPlayer();
- if (!FmRadioUtils.isFmSuspendSupport()) {
- mFmPlayer.setWakeMode(FmRadioService.this, PowerManager.PARTIAL_WAKE_LOCK);
- }
- mFmPlayer.setOnErrorListener(mPlayerErrorListener);
- try {
- mFmPlayer.setDataSource("THIRDPARTY://MEDIAPLAYER_PLAYERTYPE_FM");
- } catch (IOException ex) {
- // notify the user why the file couldn't be opened
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- } catch (IllegalArgumentException ex) {
- // notify the user why the file couldn't be opened
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- } catch (SecurityException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- } catch (IllegalStateException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- }
- mFmPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
- return true;
- }
-
- private void registerFmBroadcastReceiver() {
- IntentFilter filter = new IntentFilter();
- filter.addAction(SOUND_POWER_DOWN_MSG);
- filter.addAction(Intent.ACTION_SHUTDOWN);
- filter.addAction(Intent.ACTION_SCREEN_ON);
- filter.addAction(Intent.ACTION_SCREEN_OFF);
- filter.addAction(Intent.ACTION_HEADSET_PLUG);
-/* Vanzo:tanglei on: Fri, 13 Mar 2015 21:22:01 +0800
- */
- //if (FeatureOption.VANZO_FEATURE_EARPHONE_KEY_ACTION) {
- // filter.addAction("com.mediatek.FMRadio.FMRadioService.NEXT_STATION");
- //}
-// End of Vanzo:tanglei
- filter.addAction(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED);
- filter.addAction(ACTION_TOFMSERVICE_POWERDOWN);
- filter.addAction(ACTION_FROMATVSERVICE_POWERUP);
- mBroadcastReceiver = new FmServiceBroadcastReceiver();
- Log.i(TAG, "Register broadcast receiver.");
- registerReceiver(mBroadcastReceiver, filter);
- }
-
- private void unregisterFmBroadcastReceiver() {
- if (null != mBroadcastReceiver) {
- Log.i(TAG, "Unregister broadcast receiver.");
- unregisterReceiver(mBroadcastReceiver);
- mBroadcastReceiver = null;
- }
- }
-
- @Override
- public void onDestroy() {
- Log.d(TAG, ">>> FmRadioService.onDestroy");
- mAudioManager.setParameters("AudioFmPreStop=1");
- setMute(true);
- // stop rds first, avoid blocking other native method
- if (isRdsSupported()) {
- Log.d(TAG, "RDS is supported. Stop the RDS thread.");
- stopRdsThread();
- }
- unregisterFmBroadcastReceiver();
- unregisterSdcardListener();
- abandonAudioFocus();
- exitFm();
- if (null != mFmRecorder) {
- mFmRecorder = null;
- }
- super.onDestroy();
- }
-
- /**
- * Exit FMRadio application
- */
- private void exitFm() {
- Log.d(TAG, "service.exitFm start");
- mIsAudioFocusHeld = false;
- // Stop FM recorder if it is working
- if (null != mFmRecorder) {
- synchronized (mStopRecordingLock) {
- int fmState = mFmRecorder.getState();
- if (FmRecorder.STATE_PLAYBACK == fmState) {
- mFmRecorder.stopPlayback();
- Log.d(TAG, "Stop playback FMRecorder.");
- } else if (FmRecorder.STATE_RECORDING == fmState) {
- mFmRecorder.stopRecording();
- Log.d(TAG, "stop Recording.");
- }
-
- // ALPS01789667 Add to DB if exit, there are two cases:
- // case 1: FileManager play Music->FM receive short audio focus->Fm stop recording
- // -> FM receive SOUND_POWER_DOWN_MSG->Come here but is IDLE status
- // case 2: Music play a song->FM receive long audio focus->Come here is RECORDING
- mFmRecorder.addCurrentRecordingToDb(mContext);
- }
- }
-
- // When exit, we set the audio path back to earphone.
- if (mIsNativeScanning || mIsNativeSeeking) {
- stopScan();
- }
-
- mFmServiceHandler.removeCallbacksAndMessages(null);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_FM_EXIT);
- mFmServiceHandler.sendEmptyMessage(FmRadioListener.MSGID_FM_EXIT);
- Log.d(TAG, "service.exitFm end");
- }
-
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- // Change the notification string.
- if (mIsPowerUp) {
- showNotification();
- }
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- Log.d(TAG, ">>> FmRadioService.onStartCommand intent: " + intent + " startId: " + startId);
- int ret = super.onStartCommand(intent, flags, startId);
- Log.d(TAG, "<<< FmRadioService.onStartCommand: " + ret);
- return START_NOT_STICKY;
- }
-
- /**
- * Start RDS thread to update RDS information
- */
- private void startRdsThread() {
- Log.d(TAG, ">>> FmRadioService.startRdSThread");
- mIsRdsThreadExit = false;
- if (null != mRdsThread) {
- return;
- }
- mRdsThread = new Thread() {
- public void run() {
- Log.d(TAG, ">>> RDS Thread run()");
- while (true) {
- if (mIsRdsThreadExit) {
- break;
- }
-
- int iRdsEvents = FmRadioNative.readRds();
- if (iRdsEvents != 0) {
- Log.d(TAG, "FmRadioNative.readrds events: " + iRdsEvents);
- }
-
- if (RDS_EVENT_PROGRAMNAME == (RDS_EVENT_PROGRAMNAME & iRdsEvents)) {
- Log.d(TAG, "RDS_EVENT_PROGRAMNAME");
- byte[] bytePS = FmRadioNative.getPs();
- if (null != bytePS) {
- setPS(new String(bytePS).trim());
- }
- }
-
- if (RDS_EVENT_LAST_RADIOTEXT == (RDS_EVENT_LAST_RADIOTEXT & iRdsEvents)) {
- Log.d(TAG, "RDS_EVENT_LAST_RADIOTEXT");
- byte[] byteLRText = FmRadioNative.getLrText();
- if (null != byteLRText) {
- setLRText(new String(byteLRText).trim());
- }
- }
-
- if (RDS_EVENT_AF == (RDS_EVENT_AF & iRdsEvents)) {
- Log.d(TAG, "RDS_EVENT_AF");
- /*
- * add for rds AF
- */
- if (mIsScanning || mIsSeeking) {
- Log.d(TAG, "RDSThread. seek or scan going, no need to tune here");
- } else if (!mIsPowerUp) {
- Log.d(TAG, "RDSThread. fm is power down, do nothing.");
- } else {
- int iFreq = FmRadioNative.activeAf();
- if (FmRadioUtils.isValidStation(iFreq)) {
- // if the new frequency is not equal to current
- // frequency.
- if (mCurrentStation == iFreq) {
- Log.w(TAG, "RDSThread. the new freq is the same as current.");
- } else {
- setPS("");
- setLRText("");
- if (!mIsScanning && !mIsSeeking) {
- Log.d(TAG, "RDSThread. seek or scan not going," +
- "need to tune here");
- tuneStationAsync(FmRadioUtils.computeFrequency(iFreq));
- }
- }
- }
- }
- }
- // Do not handle other events.
- // Sleep 500ms to reduce inquiry frequency
- try {
- final int hundredMillisecond = 500;
- Thread.sleep(hundredMillisecond);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- Log.d(TAG, "<<< RDS Thread run()");
- }
- };
-
- Log.d(TAG, "Start RDS Thread.");
- mRdsThread.start();
- Log.d(TAG, "<<< FmRadioService.startRdSThread");
- }
-
- /**
- * Stop RDS thread to stop listen station RDS change
- */
- private void stopRdsThread() {
- Log.d(TAG, ">>> FmRadioService.stopRdSThread");
- if (null != mRdsThread) {
- // Must call closedev after stopRDSThread.
- mIsRdsThreadExit = true;
- mRdsThread = null;
- }
- Log.d(TAG, "<<< FmRadioService.stopRdSThread");
- }
-
- /**
- * Set PS information
- *
- * @param ps The ps information
- */
- private void setPS(String ps) {
- Log.d(TAG, "FmRadioService.setPS: " + ps + " ,current: " + mPSString);
- if (0 != mPSString.compareTo(ps)) {
- mPSString = ps;
- Bundle bundle = new Bundle(3);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.LISTEN_PS_CHANGED);
- bundle.putString(FmRadioListener.KEY_PS_INFO, mPSString);
- bundle.putString(FmRadioListener.KEY_RT_INFO, mLRTextString);
- notifyActivityStateChanged(bundle);
- } // else New PS is the same as current
- }
-
- /**
- * Set RT information
- *
- * @param lrtText The RT information
- */
- private void setLRText(String lrtText) {
- Log.d(TAG, "FmRadioService.setLRText: " + lrtText + " ,current: " + mLRTextString);
- if (0 != mLRTextString.compareTo(lrtText)) {
- mLRTextString = lrtText;
- Bundle bundle = new Bundle(3);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.LISTEN_RT_CHANGED);
- bundle.putString(FmRadioListener.KEY_PS_INFO, mPSString);
- bundle.putString(FmRadioListener.KEY_RT_INFO, mLRTextString);
- notifyActivityStateChanged(bundle);
- } // else New RT is the same as current
- }
-
- /**
- * Open or close FM Radio audio
- *
- * @param enable true, open FM audio; false, close FM audio;
- */
- private void enableFmAudio(boolean enable) {
- Log.d(TAG, ">>> FmRadioService.enableFmAudio: " + enable);
- if ((mFmPlayer == null) || !mIsPowerUp) {
- Log.w(TAG, "mFMPlayer is null in Service.enableFmAudio");
- return;
- }
-
- try {
- if (!enable) {
- if (!mFmPlayer.isPlaying()) {
- Log.d(TAG, "warning: FM audio is already disabled.");
- return;
- }
-
- Log.d(TAG, "call MediaPlayer.stop()");
- mFmPlayer.stop();
- Log.d(TAG, "stop FM audio.");
- return;
- }
-
- if (mFmPlayer.isPlaying()) {
- Log.d(TAG, "warning: FM audio is already enabled.");
- return;
- }
- } catch (IllegalStateException e) {
- Log.e(TAG, "Exception: Cannot call MediaPlayer isPlaying.", e);
- }
-
- try {
- mFmPlayer.prepare();
- //if (FmRadioUtils.isFmSuspendSupport()) {
- // Log.d(TAG, "support FM suspend");
- // mFmPlayer.startWithoutWakelock();
- //} else {
- mFmPlayer.start();
- //}
- } catch (IOException e) {
- Log.e(TAG, "Exception: Cannot call MediaPlayer prepare.", e);
- } catch (IllegalStateException e) {
- Log.e(TAG, "Exception: Cannot call MediaPlayer prepare.", e);
- }
-
- Log.d(TAG, "Start FM audio.");
- Log.d(TAG, "<<< FmRadioService.enableFmAudio");
- }
-
- /**
- * Show notification
- */
- private void showNotification() {
- Log.d(TAG, "FmRadioService.showNotification");
- Intent notificationIntent = new Intent();
- notificationIntent.setClassName(getPackageName(), FmRadioActivity.class.getName());
- PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),
- 0, notificationIntent, 0);
- Notification notification = new Notification(R.drawable.fm_title_icon, null,
- System.currentTimeMillis());
- notification.flags |= Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR;
- String fmUnit = mContext.getString(R.string.fm_unit);
- String text = FmRadioUtils.formatStation(mCurrentStation) + " " + fmUnit;
- notification.setLatestEventInfo(getApplicationContext(),
- getResources().getString(R.string.app_name), text, pendingIntent);
- Log.d(TAG, "Add notification to the title bar.");
- startForeground(NOTIFICATION_ID, notification);
- }
-
- /**
- * Remove notification
- */
- private void removeNotification() {
- Log.d(TAG, "FmRadioService.removeNotification");
- stopForeground(true);
- }
-
- /**
- * Update notification
- */
- private void updateNotification() {
- Log.d(TAG, "FmRadioService.updateNotification");
- if (mIsPowerUp) {
- showNotification();
- }
- }
-
- /**
- * Register sdcard listener for record
- */
- private void registerSdcardReceiver() {
- Log.v(TAG, "registerSdcardReceiver >>> ");
- if (mSdcardListener == null) {
- mSdcardListener = new SdcardListener();
- }
- IntentFilter filter = new IntentFilter();
- filter.addDataScheme("file");
- filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
- filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
- filter.addAction(Intent.ACTION_MEDIA_EJECT);
- registerReceiver(mSdcardListener, filter);
- Log.v(TAG, "registerSdcardReceiver <<< ");
- }
-
- private void unregisterSdcardListener() {
- if (null != mSdcardListener) {
- unregisterReceiver(mSdcardListener);
- }
- }
-
- private void updateSdcardStateMap(Intent intent) {
- String action = intent.getAction();
- String sdcardPath = null;
- Uri mountPointUri = intent.getData();
- if (mountPointUri != null) {
- sdcardPath = mountPointUri.getPath();
- if (sdcardPath != null) {
- if (Intent.ACTION_MEDIA_EJECT.equals(action)) {
- Log.d(TAG, "updateSdcardStateMap: ENJECT " + sdcardPath);
- mSdcardStateMap.put(sdcardPath, false);
- } else if (Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) {
- Log.d(TAG, "updateSdcardStateMap: UNMOUNTED " + sdcardPath);
- mSdcardStateMap.put(sdcardPath, false);
- } else if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) {
- Log.d(TAG, "updateSdcardStateMap: MOUNTED " + sdcardPath);
- mSdcardStateMap.put(sdcardPath, true);
- }
- }
- }
- }
-
- /**
- * Notify FM recorder state
- *
- * @param state The current FM recorder state
- */
- @Override
- public void onRecorderStateChanged(int state) {
- Log.d(TAG, "onRecorderStateChanged: " + state);
- mRecordState = state;
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.LISTEN_RECORDSTATE_CHANGED);
- bundle.putInt(FmRadioListener.KEY_RECORDING_STATE, state);
- notifyActivityStateChanged(bundle);
- }
-
- /**
- * Notify FM recorder error message
- *
- * @param error The recorder error type
- */
- @Override
- public void onRecorderError(int error) {
- Log.d(TAG, "onRecorderError: " + error);
- // if media server die, will not enable FM audio, and convert to
- // ERROR_PLAYER_INATERNAL, call back to activity showing toast.
- mRecorderErrorType = (MediaPlayer.MEDIA_ERROR_SERVER_DIED == error) ?
- FmRecorder.ERROR_PLAYER_INTERNAL : error;
-
- Bundle bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.LISTEN_RECORDERROR);
- bundle.putInt(FmRadioListener.KEY_RECORDING_ERROR_TYPE, mRecorderErrorType);
- notifyActivityStateChanged(bundle);
-
- // if media server die, should not enable fm, otherwise je will occur.
- if (FmRecorder.ERROR_PLAYER_INTERNAL == error) {
- resumeFmAudio();
- }
- }
-
- /**
- * Notify play FM record file complete
- */
- @Override
- public void onPlayRecordFileComplete() {
- Log.d(TAG, "service.onPlayRecordFileComplete");
- checkAfterPlayback();
- }
-
- /**
- * Check and go next(play or show tips) after recorder file play
- * back finish.
- * Two cases:
- * 1. With headset or support short antenna -> play FM
- * 2. Without headset -> show plug in earphone tips
- */
- private void checkAfterPlayback() {
- if (isHeadSetIn() || SHORT_ANNTENNA_SUPPORT) {
- // with headset
- Log.d(TAG, "checkAfterPlayback:eaphone is in,need resume fm");
- if (mIsPowerUp) {
- resumeFmAudio();
- setMute(false);
- } else {
- powerUpAsync(FmRadioUtils.computeFrequency(mCurrentStation));
- }
- } else {
- // without headset need show plug in earphone tips
- Log.d(TAG, "checkAfterPlayback:earphone is out, need show plug in earphone tips");
- switchAntennaAsync(mValueHeadSetPlug);
- }
- }
-
- /**
- * Check the headset is plug in or plug out
- *
- * @return true for plug in; false for plug out
- */
- private boolean isHeadSetIn() {
- return (0 == mValueHeadSetPlug);
- }
-
- private void stopFmFocusLoss(int focusState) {
- mIsAudioFocusHeld = false;
- if (mIsNativeScanning || mIsNativeSeeking) {
- // make stop scan from activity call to service.
- // notifyActivityStateChanged(FMRadioListener.LISTEN_SCAN_CANCELED);
- stopScan();
- Log.d(TAG, "need to stop FM, so stop scan channel.");
- }
-
- // using handler thread to update audio focus state
- updateAudioFocusAync(focusState);
- Log.d(TAG, "need to stop FM, so powerdown FM.");
-
- }
-
- /**
- * Handle FM Player error
- */
- private final MediaPlayer.OnErrorListener mPlayerErrorListener =
- new MediaPlayer.OnErrorListener() {
- /**
- * handle error message
- *
- * @param mp occurred error media player
- * @param what error message
- * @param extra error message extra
- *
- * @return handle error message or not
- */
- public boolean onError(MediaPlayer mp, int what, int extra) {
-
- if (MediaPlayer.MEDIA_ERROR_SERVER_DIED == what) {
- Log.d(TAG, "onError: MEDIA_SERVER_DIED");
- if (null != mFmPlayer) {
- mFmPlayer.release();
- mFmPlayer = null;
- }
- mFmPlayer = new MediaPlayer();
- if (!FmRadioUtils.isFmSuspendSupport()) {
- mFmPlayer.setWakeMode(FmRadioService.this, PowerManager.PARTIAL_WAKE_LOCK);
- }
- mFmPlayer.setOnErrorListener(mPlayerErrorListener);
- try {
- mFmPlayer.setDataSource("THIRDPARTY://MEDIAPLAYER_PLAYERTYPE_FM");
- mFmPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
- if (mIsPowerUp) {
- // set speaker mode according to AP
- setSpeakerPhoneOn(mIsSpeakerUsed);
- mFmPlayer.prepare();
- if (FmRadioUtils.isFmSuspendSupport()) {
- Log.d(TAG, "support FM suspend");
- mFmPlayer.startWithoutWakelock();
- } else {
- mFmPlayer.start();
- }
- }
- } catch (IOException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- } catch (IllegalArgumentException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- } catch (IllegalStateException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return false;
- }
- }
-
- return true;
- }
- };
-
- /**
- * Request audio focus
- *
- * @return true, success; false, fail;
- */
- public boolean requestAudioFocus() {
- if (mIsAudioFocusHeld) {
- return true;
- }
-
- int audioFocus = mAudioManager.requestAudioFocus(mAudioFocusChangeListener,
- AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
- mIsAudioFocusHeld = (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == audioFocus);
- return mIsAudioFocusHeld;
- }
-
- /**
- * Abandon audio focus
- */
- public void abandonAudioFocus() {
- mAudioManager.abandonAudioFocus(mAudioFocusChangeListener);
- mIsAudioFocusHeld = false;
- }
-
- /**
- * Use to interact with other voice related app
- */
- private final OnAudioFocusChangeListener mAudioFocusChangeListener =
- new OnAudioFocusChangeListener() {
- /**
- * Handle audio focus change ensure message FIFO
- *
- * @param focusChange audio focus change state
- */
- @Override
- public void onAudioFocusChange(int focusChange) {
- Log.d(TAG, "onAudioFocusChange: " + focusChange);
- switch (focusChange) {
- case AudioManager.AUDIOFOCUS_LOSS:
- synchronized (this) {
- Log.d(TAG, "AudioFocus: received AUDIOFOCUS_LOSS");
- mAudioManager.setParameters("AudioFmPreStop=1");
- setMute(true);
- Log.d(TAG, "onAudioFocusChange.setParameters end");
- exitFm();
- stopSelf();
- }
- break;
-
- case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
- synchronized (this) {
- mAudioManager.setParameters("AudioFmPreStop=1");
- setMute(true);
- Log.d(TAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT");
- stopFmFocusLoss(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT);
- }
- break;
-
- case AudioManager.AUDIOFOCUS_GAIN:
- synchronized (this) {
- Log.d(TAG, "AudioFocus: received AUDIOFOCUS_GAIN");
- updateAudioFocusAync(AudioManager.AUDIOFOCUS_GAIN);
- }
- break;
-
- default:
- Log.d(TAG, "AudioFocus: Audio focus change, but not need handle");
- break;
- }
- }
- };
-
- /**
- * Audio focus changed, will send message to handler thread. synchronized to
- * ensure one message can go in this method.
- *
- * @param focusState AudioManager state
- */
- private synchronized void updateAudioFocusAync(int focusState) {
- Log.d(TAG, "updateAudioFocusAync: focusState = " + focusState);
- final int bundleSize = 1;
- Bundle bundle = new Bundle(bundleSize);
- bundle.putInt(FmRadioListener.KEY_AUDIOFOCUS_CHANGED, focusState);
- Message msg = mFmServiceHandler.obtainMessage(FmRadioListener.MSGID_AUDIOFOCUS_CHANGED);
- msg.setData(bundle);
- mFmServiceHandler.sendMessage(msg);
- }
-
- /**
- * Audio focus changed, update FM focus state.
- *
- * @param focusState AudioManager state
- */
- private void updateAudioFocus(int focusState) {
- Log.d(TAG, "FmRadioService.updateAudioFocus");
- switch (focusState) {
- case AudioManager.AUDIOFOCUS_LOSS:
- mPausedByTransientLossOfFocus = false;
- // play back audio will output with music audio
- // May be affect other recorder app, but the flow can not be
- // execute earlier,
- // It should ensure execute after start/stop record.
- if (mFmRecorder != null) {
- int fmState = mFmRecorder.getState();
- Log.d(TAG, "stopFMFocusLoss.recorder state=" + fmState);
- // only handle recorder state, not handle playback state
- if (fmState == FmRecorder.STATE_RECORDING) {
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STARTRECORDING_FINISHED);
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STOPRECORDING_FINISHED);
- stopRecording();
- }
- }
- handlePowerDown();
- break;
-
- case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
- if (mIsPowerUp) {
- mPausedByTransientLossOfFocus = true;
- }
- Log.d(TAG, "AUDIOFOCUS_LOSS_TRANSIENT: mPausedByTransientLossOfFocus:" +
- mPausedByTransientLossOfFocus);
- // play back audio will output with music audio
- // May be affect other recorder app, but the flow can not be
- // execute earlier,
- // It should ensure execute after start/stop record.
- if (mFmRecorder != null) {
- int fmState = mFmRecorder.getState();
- Log.d(TAG, "stopFMFocusLoss.recorder state=" + fmState);
- if (fmState == FmRecorder.STATE_RECORDING) {
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STARTRECORDING_FINISHED);
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STOPRECORDING_FINISHED);
- stopRecording();
- }
- if (fmState == FmRecorder.STATE_PLAYBACK) {
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STARTPLAYBACK_FINISHED);
- mFmServiceHandler.removeMessages(
- FmRadioListener.MSGID_STOPPLAYBACK_FINISHED);
- stopPlayback();
- }
- }
- handlePowerDown();
- break;
-
- case AudioManager.AUDIOFOCUS_GAIN:
- Log.d(TAG, "AUDIOFOCUS_GAIN: mPausedByTransientLossOfFocus:" +
- mPausedByTransientLossOfFocus);
- if (!mIsPowerUp && mPausedByTransientLossOfFocus) {
- mIsPowerUping = true;
- final int bundleSize = 1;
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERUP_FINISHED);
- mFmServiceHandler.removeMessages(FmRadioListener.MSGID_POWERDOWN_FINISHED);
- Bundle bundle = new Bundle(bundleSize);
- bundle.putFloat(FM_FREQUENCY, FmRadioUtils.computeFrequency(mCurrentStation));
- handlePowerUp(bundle);
- }
- break;
-
- default:
- break;
- }
- }
-
- /**
- * FM Radio listener record
- */
- private static class Record {
- int mHashCode; // hash code
- FmRadioListener mCallback; // call back
- }
-
- /**
- * Register FM Radio listener, activity get service state should call this
- * method register FM Radio listener
- *
- * @param callback FM Radio listener
- */
- public void registerFmRadioListener(FmRadioListener callback) {
- synchronized (mRecords) {
- // register callback in AudioProfileService, if the callback is
- // exist, just replace the event.
- Record record = null;
- int hashCode = callback.hashCode();
- final int n = mRecords.size();
- for (int i = 0; i < n; i++) {
- record = mRecords.get(i);
- if (hashCode == record.mHashCode) {
- return;
- }
- }
- record = new Record();
- record.mHashCode = hashCode;
- record.mCallback = callback;
- mRecords.add(record);
- }
- }
-
- /**
- * Call back from service to activity
- *
- * @param bundle The message to activity
- */
- private void notifyActivityStateChanged(Bundle bundle) {
- if (!mRecords.isEmpty()) {
- Log.d(TAG, "notifyActivityStatusChanged:clients = " + mRecords.size());
- synchronized (mRecords) {
- Iterator iterator = mRecords.iterator();
- while (iterator.hasNext()) {
- Record record = (Record) iterator.next();
-
- FmRadioListener listener = record.mCallback;
-
- if (listener == null) {
- iterator.remove();
- return;
- }
-
- listener.onCallBack(bundle);
- }
- }
- }
- }
-
- /**
- * Unregister FM Radio listener
- *
- * @param callback FM Radio listener
- */
- public void unregisterFmRadioListener(FmRadioListener callback) {
- remove(callback.hashCode());
- }
-
- /**
- * Remove call back according hash code
- *
- * @param hashCode The call back hash code
- */
- private void remove(int hashCode) {
- synchronized (mRecords) {
- Iterator iterator = mRecords.iterator();
- while (iterator.hasNext()) {
- Record record = (Record) iterator.next();
- if (record.mHashCode == hashCode) {
- iterator.remove();
- }
- }
- }
- }
-
- /**
- * Check recording sd card is unmount
- *
- * @param intent The unmount sd card intent
- *
- * @return true or false indicate whether current recording sd card is
- * unmount or not
- */
- public boolean isRecordingCardUnmount(Intent intent) {
- String unmountSDCard = intent.getData().toString();
- Log.d(TAG, "unmount sd card file path: " + unmountSDCard);
- return unmountSDCard.equalsIgnoreCase("file://" + sRecordingSdcard) ? true : false;
- }
-
- private int[] insertSearchedStation(int[] channels) {
- Log.d(TAG, "insertSearchedStation.firstValidChannel:" + Arrays.toString(channels));
- int firstValidChannel = mCurrentStation;
- int channelNum = 0;
- if (null != channels) {
- Arrays.sort(channels);
- int size = channels.length;
- // Save searched stations into database by batch
- ArrayList ops = new ArrayList();
- String defaultStationName = getString(R.string.default_station_name);
- for (int i = 0; i < size; i++) {
- if (FmRadioUtils.isValidStation(channels[i])) {
- if (0 == channelNum) {
- firstValidChannel = channels[i];
- }
-
- if (!FmRadioStation.isFavoriteStation(mContext, channels[i])) {
- ops.add(ContentProviderOperation.newInsert(Station.CONTENT_URI)
- .withValue(Station.COLUMN_STATION_NAME, defaultStationName)
- .withValue(Station.COLUMN_STATION_FREQ, channels[i])
- .withValue(Station.COLUMN_STATION_TYPE,
- FmRadioStation.STATION_TYPE_SEARCHED)
- .build());
- }
- channelNum++;
- }
- }
- // Save search stations to database by batch
- try {
- mContext.getContentResolver().applyBatch(FmRadioStation.AUTHORITY, ops);
- } catch (RemoteException e) {
- Log.d(TAG, "Exception when applyBatch searched stations " + e);
- } catch (OperationApplicationException e) {
- Log.d(TAG, "Exception when applyBatch searched stations " + e);
- }
- }
- Log.d(TAG, "insertSearchedStation.firstValidChannel:" + firstValidChannel +
- ",channelNum:" + channelNum);
- return (new int[] {
- firstValidChannel, channelNum
- });
- }
-
- /**
- * The background handler
- */
- class FmRadioServiceHandler extends Handler {
- public FmRadioServiceHandler(Looper looper) {
- super(looper);
- }
-
- @Override
- public void handleMessage(Message msg) {
- Bundle bundle;
- boolean isPowerup = false;
- boolean isSwitch = true;
-
- switch (msg.what) {
-
- // power up
- case FmRadioListener.MSGID_POWERUP_FINISHED:
- bundle = msg.getData();
- handlePowerUp(bundle);
- break;
-
- // power down
- case FmRadioListener.MSGID_POWERDOWN_FINISHED:
- handlePowerDown();
- break;
-
- // fm exit
- case FmRadioListener.MSGID_FM_EXIT:
- if (mIsSpeakerUsed) {
- setSpeakerPhoneOn(false);
- }
- powerDown();
- closeDevice();
- // Release FM player upon exit
- if (null != mFmPlayer) {
- mFmPlayer.release();
- mFmPlayer = null;
- }
-
- bundle = new Bundle(1);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.MSGID_FM_EXIT);
- notifyActivityStateChanged(bundle);
- // Finish favorite when exit FM
- if (sExitListener != null) {
- sExitListener.onExit();
- }
- break;
-
- // switch antenna
- case FmRadioListener.MSGID_SWITCH_ANNTENNA:
- bundle = msg.getData();
- int value = bundle.getInt(FmRadioListener.SWITCH_ANNTENNA_VALUE);
-
- // if not support short antenna, just notify, not need to switch antenna.
- if (SHORT_ANNTENNA_SUPPORT) {
- isSwitch = (switchAntenna(value) == 0) ? true : false;
- Log.d(TAG, "FmServiceHandler.switch anntenna:isSwitch:" + isSwitch);
- } else {
- // if ear phone insert, need dismiss plugin earphone
- // dialog
- // if earphone plug out and it is not play recorder
- // state, show plug dialog.
- if (0 == value) {
- Log.d(TAG, "FmServiceHandler.switch anntenna:dismiss dialog");
- // powerUpAsync(FMRadioUtils.computeFrequency(mCurrentStation));
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.MSGID_SWITCH_ANNTENNA);
- bundle.putBoolean(FmRadioListener.KEY_IS_SWITCH_ANNTENNA, true);
- notifyActivityStateChanged(bundle);
- } else {
- // ear phone plug out, and recorder state is not
- // play recorder state,
- // show dialog.
- if (mRecordState != FmRecorder.STATE_PLAYBACK) {
- Log.d(TAG, "FmServiceHandler.switch anntenna:show dialog");
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.MSGID_SWITCH_ANNTENNA);
- bundle.putBoolean(FmRadioListener.KEY_IS_SWITCH_ANNTENNA, false);
- notifyActivityStateChanged(bundle);
- }
- }
- }
- break;
-
- // tune to station
- case FmRadioListener.MSGID_TUNE_FINISHED:
- bundle = msg.getData();
- float tuneStation = bundle.getFloat(FM_FREQUENCY);
- boolean isTune = tuneStation(tuneStation);
- // if tune fail, pass current station to update ui
- if (!isTune) {
- tuneStation = FmRadioUtils.computeFrequency(mCurrentStation);
- }
- bundle = new Bundle(4);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.MSGID_TUNE_FINISHED);
- bundle.putBoolean(FmRadioListener.KEY_IS_TUNE, isTune);
- bundle.putFloat(FmRadioListener.KEY_TUNE_TO_STATION, tuneStation);
- bundle.putBoolean(FmRadioListener.KEY_IS_POWER_UP, mIsPowerUp);
- notifyActivityStateChanged(bundle);
- break;
-
- // seek to station
- case FmRadioListener.MSGID_SEEK_FINISHED:
- bundle = msg.getData();
- mIsSeeking = true;
- float seekStation = seekStation(bundle.getFloat(FM_FREQUENCY),
- bundle.getBoolean(OPTION));
- boolean isSeekTune = false;
- int station = FmRadioUtils.computeStation(seekStation);
- if (FmRadioUtils.isValidStation(station)) {
- isSeekTune = tuneStation(seekStation);
- }
- // if tune fail, pass current station to update ui
- if (!isSeekTune) {
- seekStation = FmRadioUtils.computeFrequency(mCurrentStation);
- }
- bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.MSGID_TUNE_FINISHED);
- bundle.putBoolean(FmRadioListener.KEY_IS_TUNE, isSeekTune);
- bundle.putFloat(FmRadioListener.KEY_TUNE_TO_STATION, seekStation);
- notifyActivityStateChanged(bundle);
- mIsSeeking = false;
- break;
-
- // start scan
- case FmRadioListener.MSGID_SCAN_FINISHED:
- int[] channels = null;
- int[] result = null;
- int scanTuneStation = 0;
- boolean isScan = true;
- mIsScanning = true;
- if (powerUpFm(FmRadioUtils.DEFAULT_STATION_FLOAT)) {
- channels = startScan();
- }
-
- // check whether cancel scan
- if ((null != channels) && channels[0] == -100) {
- Log.d(TAG, "user canceled scan:channels[0]=" + channels[0]);
- isScan = false;
- result = new int[] {
- -1, 0
- };
- } else {
- result = insertSearchedStation(channels);
- scanTuneStation = result[0];
- isTune = tuneStation(FmRadioUtils.computeFrequency(scanTuneStation));
- scanTuneStation = isTune ? scanTuneStation : mCurrentStation;
- }
-
- /*
- * if there is stop command when scan, so it needs to mute
- * fm avoid fm sound come out.
- */
- if (mIsAudioFocusHeld) {
- Log.d(TAG, "there is not power down command.set mute false");
- setMute(false);
- }
- bundle = new Bundle(4);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.MSGID_SCAN_FINISHED);
- bundle.putInt(FmRadioListener.KEY_TUNE_TO_STATION, scanTuneStation);
- bundle.putInt(FmRadioListener.KEY_STATION_NUM, result[1]);
- bundle.putBoolean(FmRadioListener.KEY_IS_SCAN, isScan);
- notifyActivityStateChanged(bundle);
- mIsScanning = false;
- break;
-
- // audio focus changed
- case FmRadioListener.MSGID_AUDIOFOCUS_CHANGED:
- bundle = msg.getData();
- int focusState = bundle.getInt(FmRadioListener.KEY_AUDIOFOCUS_CHANGED);
- updateAudioFocus(focusState);
- break;
-
- case FmRadioListener.MSGID_SET_RDS_FINISHED:
- bundle = msg.getData();
- setRds(bundle.getBoolean(OPTION));
- break;
-
- case FmRadioListener.MSGID_SET_MUTE_FINISHED:
- bundle = msg.getData();
- setMute(bundle.getBoolean(OPTION));
- break;
-
- case FmRadioListener.MSGID_ACTIVE_AF_FINISHED:
- activeAF();
- break;
-
- /********** recording **********/
- case FmRadioListener.MSGID_STARTRECORDING_FINISHED:
- startRecording();
- break;
-
- case FmRadioListener.MSGID_STOPRECORDING_FINISHED:
- stopRecording();
- break;
-
- case FmRadioListener.MSGID_STARTPLAYBACK_FINISHED:
- boolean isStart = startPlayback();
- // Can not start play back, call back to activity.
- if (!isStart) {
- bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG,
- FmRadioListener.LISTEN_RECORDERROR);
- bundle.putInt(FmRadioListener.KEY_RECORDING_ERROR_TYPE,
- FmRadioListener.NOT_AUDIO_FOCUS);
- notifyActivityStateChanged(bundle);
- }
- break;
-
- case FmRadioListener.MSGID_STOPPLAYBACK_FINISHED:
- stopPlayback();
- break;
-
- case FmRadioListener.MSGID_RECORD_MODE_CHANED:
- bundle = msg.getData();
- setRecordingMode(bundle.getBoolean(OPTION));
- break;
-
- case FmRadioListener.MSGID_SAVERECORDING_FINISHED:
- bundle = msg.getData();
- saveRecording(bundle.getString(RECODING_FILE_NAME));
- break;
-
- default:
- break;
- }
- }
-
- }
-
- /**
- * handle power down, execute power down and call back to activity.
- */
- private void handlePowerDown() {
- Bundle bundle;
- boolean isPowerdown = powerDown();
- bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.MSGID_POWERDOWN_FINISHED);
- bundle.putBoolean(FmRadioListener.KEY_IS_POWER_DOWN, isPowerdown);
- notifyActivityStateChanged(bundle);
- }
-
- /**
- * handle power up, execute power up and call back to activity.
- *
- * @param bundle power up frequency
- */
- private void handlePowerUp(Bundle bundle) {
- boolean isPowerup = false;
- boolean isSwitch = true;
- Log.d(TAG, "service handler power up start");
- float curFrequency = bundle.getFloat(FM_FREQUENCY);
-
- if (!SHORT_ANNTENNA_SUPPORT && !isAntennaAvailable()) {
- Log.d(TAG, "call back to activity, earphone is not ready");
- mIsPowerUping = false;
- bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.MSGID_SWITCH_ANNTENNA);
- bundle.putBoolean(FmRadioListener.KEY_IS_SWITCH_ANNTENNA, false);
- notifyActivityStateChanged(bundle);
- return;
- }
-
- if (powerUpFm(curFrequency)) {
- isPowerup = startPlayFm(curFrequency);
- mPausedByTransientLossOfFocus = false;
- }
- mIsPowerUping = false;
- bundle = new Bundle(2);
- bundle.putInt(FmRadioListener.CALLBACK_FLAG, FmRadioListener.MSGID_POWERUP_FINISHED);
- bundle.putBoolean(FmRadioListener.KEY_IS_POWER_UP, isPowerup);
- notifyActivityStateChanged(bundle);
- Log.d(TAG, "service handler power up end");
- }
-
- /**
- * check FM is foreground or background
- */
- public boolean isActivityForeground() {
- boolean isForeground = true;
- List appProcessInfos = mActivityManager.getRunningAppProcesses();
- for (RunningAppProcessInfo appProcessInfo : appProcessInfos) {
- if (appProcessInfo.processName.equals(mContext.getPackageName())) {
- int importance = appProcessInfo.importance;
- Log.d(TAG, "isActivityForeground importance:" + importance);
- if (importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND ||
- importance == RunningAppProcessInfo.IMPORTANCE_VISIBLE) {
- Log.d(TAG, "isActivityForeground is foreground");
- isForeground = true;
- } else {
- Log.d(TAG, "isActivityForeground is background");
- isForeground = false;
- }
- break;
- }
- }
- Log.d(TAG, "isActivityForeground return " + isForeground);
- return isForeground;
- }
-
- /**
- * Check if current is lock task mode. If in this mode, AMS will cannot destory
- * FmRadioActivity even call finish()
- * Settings->Security->Screen pinning on
- * @return true if current screen pinning on FmRadioActivity
- */
- public boolean isInLockTaskMode() {
- Log.d(TAG, "isInLockTaskMode:" + mActivityManager.isInLockTaskMode());
- return mActivityManager.isInLockTaskMode();
- }
-
- /**
- * Get the recording sdcard path when staring record
- *
- * @return sdcard path like "/storage/sdcard0"
- */
- public static String getRecordingSdcard() {
- return sRecordingSdcard;
- }
-
- /**
- * The listener interface for exit
- */
- public interface OnExitListener {
- /**
- * When Service finish, should notify FmRadioFavorite to finish
- */
- void onExit();
- }
-
- /**
- * Register the listener for exit
- *
- * @param listener The listener want to know the exit event
- */
- public static void registerExitListener(OnExitListener listener) {
- sExitListener = listener;
- }
-
- /**
- * Unregister the listener for exit
- *
- * @param listener The listener want to know the exit event
- */
- public static void unregisterExitListener(OnExitListener listener) {
- sExitListener = null;
- }
-
- /**
- * Get the latest recording name the show name in save dialog but saved in
- * service
- *
- * @return The latest recording name or null for not modified
- */
- public String getModifiedRecordingName() {
- Log.d(TAG, "getRecordingNameInDialog:" + mModifiedRecordingName);
- return mModifiedRecordingName;
- }
-
- /**
- * Set the latest recording name if modify the default name
- *
- * @param name The latest recording name or null for not modified
- */
- public void setModifiedRecordingName(String name) {
- Log.d(TAG, "setRecordingNameInDialog:" + name);
- mModifiedRecordingName = name;
- }
-
- /**
- * When FmRadioActivity.onStop() set true, FmRadioActivity.onResume() set false;
- * @param stop
- */
- public static void setActivityIsOnStop(boolean stop) {
- sActivityIsOnStop = stop;
- }
-
- /**
- * Check current is in call/ringtone or not
- * @return true if is not call mode. false mean is in call or ringtone
- */
- public boolean isModeNormal() {
- int mode = mAudioManager.getMode();
- Log.d(TAG, "isInCall mode:" + mode);
- return mode == AudioManager.MODE_NORMAL;
- }
-
- // FM Radio EM start
- /**
- * Inquiry if fm stereo mono(true, stereo; false mono)
- *
- * @return (true, stereo; false, mono)
- */
- public boolean getStereoMono() {
- Log.d(TAG, "FMRadioService.getStereoMono");
- return FmRadioNative.stereoMono();
- }
-
- /**
- * Force set to stero/mono mode
- *
- * @param isMono
- * (true, mono; false, stereo)
- * @return (true, success; false, failed)
- */
- public boolean setStereoMono(boolean isMono) {
- Log.d(TAG, "FMRadioService.setStereoMono: isMono=" + isMono);
- return FmRadioNative.setStereoMono(isMono);
- }
-
- /**
- * set RSSI, desense RSSI, mute gain soft
- * @param index flag which will execute
- * (0:rssi threshold,1:desense rssi threshold,2: SGM threshold)
- * @param value send to native
- * @return execute ok or not
- */
- public boolean setEmth(int index, int value) {
- Log.d(TAG, ">>> FMRadioService.setEmth: index=" + index + ",value=" + value);
- boolean isOk = FmRadioNative.emsetth(index, value);
- Log.d(TAG, "<<< FMRadioService.setEmth: isOk=" + isOk);
- return isOk;
- }
-
- /**
- * send variables to native, and get some variables return.
- * @param val send to native
- * @return get value from native
- */
- public short[] emcmd(short[] val) {
- Log.d(TAG, ">>FMRadioService.emcmd: val=" + val);
- short[] shortCmds = null;
- shortCmds = FmRadioNative.emcmd(val);
- Log.d(TAG, "<" + STATION_TYPE_CURRENT,
- new String[] {
- String.valueOf(stationFreq)
- });
- Log.d(TAG, "FmRadioStation.updateStationToDb: new name = " + newStationName
- + ", new freq type = " + newStationType);
- }
-
- /**
- * Delete station according station frequency and station type
- *
- * @param context The context
- * @param stationFreq The station frequency
- * @param stationType The station type
- */
- public static void deleteStationInDb(Context context, int stationFreq, int stationType) {
- context.getContentResolver().delete(
- Station.CONTENT_URI,
- Station.COLUMN_STATION_FREQ + "=? AND " + Station.COLUMN_STATION_TYPE + "=?",
- new String[] {
- String.valueOf(stationFreq), String.valueOf(stationType)
- });
- Log.d(TAG, "FmRadioStation.deleteStationInDb: freq = " + stationFreq +
- ", type = " + stationType);
- }
-
- /**
- * Judge a station whether exist according station frequency and station
- * type
- *
- * @param context The context
- * @param stationFreq The station frequency
- * @param stationType The station type
- *
- * @return true or false indicate whether station is exist
- */
- public static boolean isStationExist(Context context, int stationFreq, int stationType) {
- Log.d(TAG, ">>> isStationExist: stationFreq=" + stationFreq +
- ",stationType=" + stationType);
- boolean isExist = false;
- Cursor cur = context.getContentResolver().query(
- Station.CONTENT_URI,
- new String[] {
- Station.COLUMN_STATION_NAME
- },
- Station.COLUMN_STATION_FREQ + "=? AND " + Station.COLUMN_STATION_TYPE + "=?",
- new String[] {
- String.valueOf(stationFreq), String.valueOf(stationType)
- },
- null);
- if (null != cur) {
- try {
- if (cur.moveToFirst()) {
- // This station is exist
- isExist = true;
- }
- } finally {
- cur.close();
- }
- }
- Log.d(TAG, "<<< isStationExist: " + isExist);
- return isExist;
- }
-
- /**
- * Judge a station whether exist according station frequency
- *
- * @param context The context
- * @param stationFreq The station frequency
- * @param stationType The station type
- *
- * @return true or false indicate whether station is exist
- */
- public static boolean isStationExistInChList(Context context, int stationFreq) {
- Log.d(TAG, ">>> isStationExist: stationFreq=" + stationFreq);
- boolean isExist = false;
- Cursor cur = context.getContentResolver().query(
- Station.CONTENT_URI,
- new String[] {
- Station.COLUMN_STATION_NAME
- },
- Station.COLUMN_STATION_FREQ + "=? AND " + Station.COLUMN_STATION_TYPE + "<>1",
- new String[] {
- String.valueOf(stationFreq)
- },
- null);
- if (null != cur) {
- try {
- if (cur.moveToFirst()) {
- // This station is exist
- isExist = true;
- }
- } finally {
- cur.close();
- }
- }
- Log.d(TAG, "<<< isStationExist: " + isExist);
- return isExist;
- }
-
- /**
- * Get current station from database
- *
- * @param context The context
- *
- * @return the station which station type is current
- */
- public static int getCurrentStation(Context context) {
- int currentStation = FmRadioUtils.DEFAULT_STATION;
- Cursor cur = context.getContentResolver().query(
- Station.CONTENT_URI,
- new String[] {
- Station.COLUMN_STATION_FREQ
- },
- Station.COLUMN_STATION_TYPE + "=?",
- new String[] {
- String.valueOf(STATION_TYPE_CURRENT)
- },
- null);
- if (null != cur) {
- try {
- if (cur.moveToFirst()) {
- currentStation = cur.getInt(0);
- if (!FmRadioUtils.isValidStation(currentStation)) {
- // If current station is invalid, use default and update
- // the database
- currentStation = FmRadioUtils.DEFAULT_STATION;
- setCurrentStation(context, currentStation);
- Log.w(TAG, "current station is invalid, use default!");
- }
- }
- } finally {
- cur.close();
- }
- }
- Log.d(TAG, "FmRadioStation.getCurrentStation: " + currentStation);
- return currentStation;
- }
-
- /**
- * Set current station
- *
- * @param context The context
- * @param station The station frequency
- */
- public static void setCurrentStation(Context context, int station) {
- Log.d(TAG, "FmRadioStation.setCurrentStation start");
- // Update current station to database.
- final int size = 3;
- ContentValues values = new ContentValues(size);
- values.put(Station.COLUMN_STATION_NAME, CURRENT_STATION_NAME);
- values.put(Station.COLUMN_STATION_FREQ, station);
- values.put(Station.COLUMN_STATION_TYPE, STATION_TYPE_CURRENT);
- context.getContentResolver().update(
- Station.CONTENT_URI,
- values,
- Station.COLUMN_STATION_NAME + "=? AND " + Station.COLUMN_STATION_TYPE + "=?",
- new String[] {
- CURRENT_STATION_NAME, String.valueOf(STATION_TYPE_CURRENT)
- });
- Log.d(TAG, "FmRadioStation.setCurrentStation end");
- }
-
- /**
- * Clean all stations which station type is searched
- *
- * @param context The context
- */
- public static void cleanSearchedStations(Context context) {
- Log.d(TAG, "FmRadioStation.cleanSearchedStations start");
- context.getContentResolver().delete(
- Station.CONTENT_URI,
- Station.COLUMN_STATION_TYPE + "=" + String.valueOf(STATION_TYPE_SEARCHED),
- null);
- Log.d(TAG, "FmRadioStation.cleanSearchedStations end");
- }
-
- /**
- * Get station name according station frequency and station type
- *
- * @param context The context
- * @param stationFreq The station frequency
- * @param stationType The station type
- *
- * @return The station name
- */
- public static String getStationName(Context context, int stationFreq, int stationType) {
- Log.d(TAG, "FmRadioStation.getStationName: type = "
- + stationType + ", freq = " + stationFreq);
- // If can't find this station id database, return default station name
- String stationName = context.getString(R.string.default_station_name);
- Cursor cur = context.getContentResolver().query(
- Station.CONTENT_URI,
- new String[] {
- Station.COLUMN_STATION_NAME
- },
- Station.COLUMN_STATION_FREQ + "=? AND " + Station.COLUMN_STATION_TYPE + "=?",
- new String[] {
- String.valueOf(stationFreq), String.valueOf(stationType)
- },
- null);
- if (null != cur) {
- try {
- if (cur.moveToFirst()) {
- stationName = cur.getString(0);
- }
- } finally {
- cur.close();
- }
- }
- Log.d(TAG, "FmRadioStation.getStationName: stationName = " + stationName);
- return stationName;
- }
-
- /**
- * Judge whether station is a favorite station
- *
- * @param context The context
- * @param iStation The station frequency
- *
- * @return true or false indicate whether station type is favorite
- */
- public static boolean isFavoriteStation(Context context, int iStation) {
- return isStationExist(context, iStation, STATION_TYPE_FAVORITE);
- }
-
- /**
- * Get station count according station type
- *
- * @param context The context
- * @param stationType The station type
- *
- * @return The numbers of station according station type
- */
- public static int getStationCount(Context context, int stationType) {
- Log.d(TAG, "FmRadioStation.getStationCount Type: " + stationType);
- int stationNus = 0;
- Cursor cur = context.getContentResolver().query(
- Station.CONTENT_URI,
- COLUMNS,
- Station.COLUMN_STATION_TYPE + "=?",
- new String[] {
- String.valueOf(stationType)
- },
- null);
- if (null != cur) {
- try {
- stationNus = cur.getCount();
- } finally {
- cur.close();
- }
- }
- Log.d(TAG, "FmRadioStation.getStationCount: " + stationNus);
- return stationNus;
- }
-
- /**
- * Clear all station of FMRadio database
- *
- * @param context The application context
- */
- public static void cleanAllStations(Context context) {
- Uri uri = Station.CONTENT_URI;
- Cursor cur = context.getContentResolver().query(uri, COLUMNS, null, null, null);
- if (null != cur) {
- try {
- cur.moveToFirst();
- while (!cur.isAfterLast()) {
- // Have find one station.
- uri = ContentUris.appendId(Station.CONTENT_URI.buildUpon(),
- cur.getInt(cur.getColumnIndex(Station._ID))).build();
- context.getContentResolver().delete(uri, null, null);
- cur.moveToNext();
- }
- } finally {
- cur.close();
- }
- }
- }
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioUtils.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioUtils.java
deleted file mode 100755
index 71bf6a0..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRadioUtils.java
+++ /dev/null
@@ -1,262 +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) 2011-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.
- */
-
-package com.mediatek.fmradio;
-
-import android.content.Context;
-import android.os.Environment;
-import android.os.StatFs;
-import android.os.SystemProperties;
-import android.os.storage.StorageManager;
-import android.util.Log;
-
-import java.util.Locale;
-
-/**
- * This class provider interface to compute station and frequency, get project
- * string
- */
-public class FmRadioUtils {
- private static final String TAG = "FmRx/Utils";
-
- // FM station variables
- public static final int DEFAULT_STATION = 1000;
- public static final float DEFAULT_STATION_FLOAT = computeFrequency(DEFAULT_STATION);
- // maximum station frequency
- private static final int HIGHEST_STATION = 1080;
- // minimum station frequency
- private static final int LOWEST_STATION = 875;
- // station step
- private static final int STEP = 1;
- // convert rate
- private static final int CONVERT_RATE = 10;
-
-/* Vanzo:yujianpeng on: Fri, 30 Jan 2015 14:44:52 +0800
- * add FM FactoryMode
- */
- private static final String HEADSET_STATE_PATH = "/sys/class/switch/h2w/state";
-// End of Vanzo:yujianpeng
- // minimum storage space for record
- public static final long LOW_SPACE_THRESHOLD = 512 * 1024;
- // StorageManager For FM record
- private static StorageManager sStorageManager = null;
- // short antenna
- private static final boolean IS_FM_SHORT_ANTENNA_SUPPORT = SystemProperties.getBoolean(
- "ro.mtk_fm_short_antenna_support", false);
- // FM suspend feature
- private static final boolean IS_FM_SUSPEND_SUPPORT = SystemProperties.getBoolean(
- "ro.mtk_tc1_fm_at_suspend", false);
-
- /**
- * Whether the frequency is valid.
- *
- * @param station The FM station
- *
- * @return true if the frequency is in the valid scale, otherwise return
- * false
- */
- public static boolean isValidStation(int station) {
- boolean isValid = (station >= LOWEST_STATION && station <= HIGHEST_STATION);
- Log.v(TAG, "isValidStation: freq = " + station + ", valid = " + isValid);
- return isValid;
- }
-
- /**
- * Compute increase station frequency
- *
- * @param station The station frequency
- *
- * @return station The frequency after increased
- */
- public static int computeIncreaseStation(int station) {
- int result = station + STEP;
- if (result > HIGHEST_STATION) {
- result = LOWEST_STATION;
- }
- return result;
- }
-
- /**
- * Compute decrease station frequency
- *
- * @param station The station frequency
- *
- * @return station The frequency after decreased
- */
- public static int computeDecreaseStation(int station) {
- int result = station - STEP;
- if (result < LOWEST_STATION) {
- result = HIGHEST_STATION;
- }
- return result;
- }
-
- /**
- * Compute station value with given frequency
- *
- * @param frequency The station frequency
- *
- * @return station The result value
- */
- public static int computeStation(float frequency) {
- return (int) (frequency * CONVERT_RATE);
- }
-
- /**
- * Compute frequency value with given station
- *
- * @param station The station value
- *
- * @return station The frequency
- */
- public static float computeFrequency(int station) {
- return (float) station / CONVERT_RATE;
- }
-
- /**
- * According station to get frequency string
- *
- * @param station for 100KZ, range 875-1080
- *
- * @return string like 87.5
- */
- public static String formatStation(int station) {
- float frequency = (float) station / CONVERT_RATE;
- String result = String.format(Locale.ENGLISH, "%.1f",
- Float.valueOf(frequency));
- return result;
- }
-
- /**
- * Get the phone storage path
- *
- * @return The phone storage path
- */
- public static String getDefaultStoragePath() {
- return Environment.getExternalStorageDirectory().getPath();
- }
-
- /**
- * Get the default storage state
- *
- * @return The default storage state
- */
- public static String getDefaultStorageState(Context context) {
- ensureStorageManager(context);
- String state = sStorageManager.getVolumeState(getDefaultStoragePath());
- Log.d(TAG, "getDefaultStorageState() return state:" + state);
- return state;
- }
-
- private static void ensureStorageManager(Context context) {
- if (sStorageManager == null) {
- sStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
- }
- }
-
- /**
- * Get the FM play list path
- *
- * @param context The context
- *
- * @return The FM play list path
- */
- public static String getPlaylistPath(Context context) {
- ensureStorageManager(context);
- String[] externalStoragePaths = sStorageManager.getVolumePaths();
- String path = externalStoragePaths[0] + "/Playlists/";
- return path;
- }
-
-/* Vanzo:yujianpeng on: Fri, 30 Jan 2015 14:46:21 +0800
- * add FM FactoryMode
- */
- static boolean isWiredHeadsetReallyOn() {
- try {
- char[] buffer = new char[8];
- java.io.FileReader file = new java.io.FileReader(HEADSET_STATE_PATH);
- int len = file.read(buffer, 0, 8);
- int state = Integer.valueOf((new String(buffer, 0, len)).trim());
- file.close();
- return (state == 1 || state == 2);
- } catch (java.io.FileNotFoundException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
-// End of Vanzo:yujianpeng
- /**
- * Check if has enough space for record
- *
- * @param recordingSdcard The recording sdcard path
- *
- * @return true if has enough space for record
- */
- public static boolean hasEnoughSpace(String recordingSdcard) {
- boolean ret = false;
- try {
- StatFs fs = new StatFs(recordingSdcard);
- long blocks = fs.getAvailableBlocks();
- long blockSize = fs.getBlockSize();
- long spaceLeft = blocks * blockSize;
- Log.d(TAG, "hasEnoughSpace: available space=" + spaceLeft);
- ret = spaceLeft > LOW_SPACE_THRESHOLD ? true : false;
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "sdcard may be unmounted:" + recordingSdcard);
- }
- return ret;
- }
-
- /**
- * Check if support short antenna. If true, can play FM without headset
- * @return true if support
- */
- public static boolean isFmShortAntennaSupport() {
- return IS_FM_SHORT_ANTENNA_SUPPORT;
- }
-
- /**
- * Check if support FM suspend feature. If true, will not aquire wakelock.
- * @return true if support
- */
- public static boolean isFmSuspendSupport() {
- return IS_FM_SUSPEND_SUPPORT;
- }
-
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRecordDialogFragment.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRecordDialogFragment.java
deleted file mode 100755
index a44c15e..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRecordDialogFragment.java
+++ /dev/null
@@ -1,333 +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) 2011-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.
- */
-
-package com.mediatek.fmradio;
-
-import android.app.Activity;
-import android.app.DialogFragment;
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import java.io.File;
-
-/**
- * The dialog fragment for save recording file
- */
-public class FmRecordDialogFragment extends DialogFragment {
- private static final String TAG = "FmRx/RecordDlg";
-
- // save recording file button
- private Button mButtonSave = null;
- // discard recording file button
- private Button mButtonDiscard = null;
- // rename recording file edit text
- private EditText mRecordingNameEditText = null;
- // recording file default name
- private String mDefaultRecordingName = null;
- // recording file to save name
- private String mRecordingNameToSave = null;
- // text view which show storage warning
- private TextView mStorageWarningTextView = null;
- private OnRecordingDialogClickListener mListener = null;
-
- // The default filename need't to check whether exist
- private boolean mIsNeedCheckFilenameExist = false;
- // record sd card path when start recording
- private String mRecordingSdcard = null;
-
- /**
- * FM record dialog fragment, because fragment manager need empty
- * constructor to instantiated this dialog fragment when configuration
- * change
- */
- public FmRecordDialogFragment() {
- }
-
- /**
- * FM record dialog fragment according name, should pass value recording
- * file name
- *
- * @param defaultName The default file name in FileSystem
- * @param recordingName The name in the dialog for show and save
- */
- public FmRecordDialogFragment(String sdcard, String defaultName, String recordingName) {
- mRecordingSdcard = sdcard;
- mDefaultRecordingName = defaultName;
- mRecordingNameToSave = recordingName;
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- try {
- mListener = (OnRecordingDialogClickListener) activity;
- } catch (ClassCastException e) {
- e.printStackTrace();
- }
- }
-
- /**
- * When onCreate Set dialog style
- *
- * @param savedInstanceState The save instance state
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.d(TAG, ">>onCreate() savedInstanceState:" + savedInstanceState);
- setStyle(DialogFragment.STYLE_NO_TITLE, 0);
- Log.d(TAG, "<>onResume()");
-
- // check if storage is OK, if not enough storage, make view visible
- if (!FmRadioUtils.hasEnoughSpace(mRecordingSdcard)) {
- mStorageWarningTextView.setVisibility(View.VISIBLE);
- }
-
- // have define in fm_recorder_dialog.xml length at most
- // 250(maxFileLength - suffixLength)
- mRecordingNameEditText.setSingleLine(true);
-
- if (mDefaultRecordingName != null) {
- if (null != mRecordingNameToSave) {
- // this case just for,fragment recreate
- mRecordingNameEditText.setText(mRecordingNameToSave);
- if ("".equals(mRecordingNameToSave)) {
- mButtonSave.setEnabled(false);
- }
- } else {
- mRecordingNameEditText.setText(mDefaultRecordingName);
- }
-
- mRecordingNameEditText.selectAll();
- }
- mRecordingNameEditText.setHint(getActivity().getResources().getString(
- R.string.edit_recording_name_hint));
- mRecordingNameEditText.requestFocus();
- setTextChangedCallback();
- getDialog().setCanceledOnTouchOutside(false);
- getDialog().getWindow().setSoftInputMode(
- WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE
- | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
- Log.d(TAG, "<>onSaveInstanceState()");
- super.onSaveInstanceState(outState);
- }
-
- @Override
- public void onDestroy() {
- Log.d(TAG, ">>onDestroy()");
- mDefaultRecordingName = null;
- mRecordingNameToSave = null;
- mListener = null;
- Log.d(TAG, "<|\t].*")) {
- mButtonSave.setEnabled(false);
- } else {
- mButtonSave.setEnabled(true);
- }
-
- mRecordingNameToSave = mRecordingNameEditText.getText().toString().trim();
- Log.d(TAG, "onTextChanged mRecordingNameToSave:" + mRecordingNameToSave);
- }
- });
- }
-
- private OnClickListener mButtonOnClickListener = new OnClickListener() {
- /**
- * Define the button operation
- */
- @Override
- public void onClick(View v) {
-
- switch (v.getId()) {
- case R.id.fm_recording_btn_save:
- String msg = null;
- // Check the recording name whether exist
- mRecordingNameToSave = mRecordingNameEditText.getText().toString().trim();
- File recordingFolderPath = new File(mRecordingSdcard, "FM Recording");
- File recordingFileToSave =
- new File(recordingFolderPath, mRecordingNameToSave
- + FmRecorder.RECORDING_FILE_EXTENSION);
-
- // If the new name is same as default name ,need't to check!
- if (mDefaultRecordingName == null) {
- Log.e(TAG, "Error:recording file is not exist!");
- return;
- }
- if (mDefaultRecordingName.equals(mRecordingNameToSave)) {
- mIsNeedCheckFilenameExist = false;
- } else {
- mIsNeedCheckFilenameExist = true;
- }
-
- Log.d(TAG, "save:" + mDefaultRecordingName + "->" + mRecordingNameToSave +
- ", " + mIsNeedCheckFilenameExist);
- if (recordingFileToSave.exists() && mIsNeedCheckFilenameExist) {
- // show a toast notification if can't renaming a file/folder
- // to the same name
- msg = mRecordingNameEditText.getText().toString() + " "
- + getActivity().getResources().getString(R.string.already_exists);
- Log.d(TAG, "file " + mRecordingNameToSave + ".ogg is already exists!");
- Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show();
- } else {
- if (null != mListener) {
- mListener.onRecordingDialogClick(mRecordingNameToSave);
- }
- dismissAllowingStateLoss();
- }
- break;
-
- case R.id.fm_recording_btn_discard:
- if (null != mListener) {
- mListener.onRecordingDialogClick(null);
- }
- dismissAllowingStateLoss();
- Log.d(TAG, "Discard FM recording file. ");
- break;
-
- default:
- break;
- }
- }
- };
-
- /**
- * The listener for click Save or Discard
- */
- public interface OnRecordingDialogClickListener {
- /**
- * Record dialog click callback
- *
- * @param recordingName The user input recording name
- */
- void onRecordingDialogClick(String recordingName);
- }
-
- /**
- * Get the latest modified recording name
- *
- * @return The latest modified recording name
- */
- public String getRecordingNameToSave() {
- return mRecordingNameToSave;
- }
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRecorder.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRecorder.java
deleted file mode 100755
index be7452c..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/FmRecorder.java
+++ /dev/null
@@ -1,807 +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) 2011-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.
- */
-
-package com.mediatek.fmradio;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.media.MediaPlayer;
-import android.media.MediaRecorder;
-import android.media.MediaScannerConnection;
-import android.net.Uri;
-import android.os.Environment;
-import android.os.SystemClock;
-import android.provider.MediaStore;
-import android.text.format.DateFormat;
-import android.util.Log;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-/**
- * This class provider interface to recording, stop recording, save recording
- * file, play recording file
- */
-public class FmRecorder implements MediaPlayer.OnCompletionListener,
- MediaPlayer.OnErrorListener, MediaRecorder.OnErrorListener {
- private static final String TAG = "FmRx/Recorder";
- // file prefix
- private static final String RECORDING_FILE_PREFIX = "FM";
- // file extensition
- public static final String RECORDING_FILE_EXTENSION = ".3gpp";
- // recording file folder
- private static final String FM_RECORD_FOLDER = "FM Recording";
- private static final String RECORDING_FILE_TYPE = "audio/3gpp";
- private static final String RECORDING_FILE_SOURCE = "FM Recordings";
- // error type no sdcard
- public static final int ERROR_SDCARD_NOT_PRESENT = 0;
- // error type sdcard not have enough space
- public static final int ERROR_SDCARD_INSUFFICIENT_SPACE = 1;
- // error type can't write sdcard
- public static final int ERROR_SDCARD_WRITE_FAILED = 2;
- // error type recorder internal error occur
- public static final int ERROR_RECORDER_INTERNAL = 3;
- // error type player internal error occur
- public static final int ERROR_PLAYER_INTERNAL = 4;
- // error type recorder state is invalid
- public static final int ERROR_RECORDER_INVALID_STATE = 5;
- // FM Recorder state not recording and not playing
- public static final int STATE_IDLE = 5;
- // FM Recorder state recording
- public static final int STATE_RECORDING = 6;
- // FM Recorder state playing
- public static final int STATE_PLAYBACK = 7;
- // FM Recorder state invalid, need to check
- public static final int STATE_INVALID = -1;
-
- // use to record current FM recorder state
- public int mInternalState = STATE_IDLE;
- // the recording time after start recording
- private long mRecordTime = 0;
- // record start time
- private long mRecordStartTime = 0;
- // current record file
- private File mRecordFile = null;
- // record current record file is saved by user
- private boolean mIsRecordingFileSaved = false;
- // listener use for notify service the record state or error state
- private OnRecorderStateChangedListener mStateListener = null;
- // player use for play recording file
- private MediaPlayer mPlayer = null;
- // recorder use for record file
- private MediaRecorder mRecorder = null;
-
- /**
- * Start recording the voice of FM, also check the pre-conditions, if not
- * meet, will return an error message to the caller. if can start recording
- * success, will set FM record state to recording and notify to the caller
- */
- public void startRecording(Context context) {
- Log.d(TAG, ">> startRecording");
- mRecordTime = 0;
-
- // Check external storage
- if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
- Log.e(TAG, "No external storage available");
- setError(ERROR_SDCARD_NOT_PRESENT);
- return;
- }
-
- String recordingSdcard = FmRadioUtils.getDefaultStoragePath();
- // check whether have sufficient storage space, if not will notify
- // caller error message
- if (!FmRadioUtils.hasEnoughSpace(recordingSdcard)) {
- setError(ERROR_SDCARD_INSUFFICIENT_SPACE);
- Log.e(TAG, "SD card does not have sufficient space!!");
- return;
- }
-
- // get external storage directory
- File sdDir = new File(recordingSdcard);
- Log.d(TAG, "external storage dir = " + sdDir.getAbsolutePath());
- File recordingDir = new File(sdDir, FM_RECORD_FOLDER);
- // exist a file named FM Recording, so can't create FM recording folder
- if (recordingDir.exists() && !recordingDir.isDirectory()) {
- Log.e(TAG, "A FILE with name \"FM Recording\" already exists!!");
- setError(ERROR_SDCARD_WRITE_FAILED);
- return;
- } else if (!recordingDir.exists()) { // try to create recording folder
- boolean mkdirResult = recordingDir.mkdir();
- if (!mkdirResult) { // create recording file failed
- setError(ERROR_RECORDER_INTERNAL);
- return;
- }
- }
- // create recording temporary file
- long curTime = System.currentTimeMillis();
- Date date = new Date(curTime);
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.ENGLISH);
- String time = simpleDateFormat.format(date);
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append(RECORDING_FILE_PREFIX).append(
- "_").append(time).append(RECORDING_FILE_EXTENSION);
- String name = stringBuilder.toString();
- mRecordFile = new File(recordingDir, name);
- try {
- if (mRecordFile.createNewFile()) {
- Log.e(TAG, "createNewFile success");
- }
- } catch (IOException ioex) {
- Log.e(TAG, "IOException while createTempFile: " + ioex);
- ioex.printStackTrace();
- setError(ERROR_SDCARD_WRITE_FAILED);
- return;
- }
- // set record parameter and start recording
- try {
- Log.d(TAG, "new record file is:" + mRecordFile.getName());
-
- mRecorder = new MediaRecorder();
- Log.d(TAG, "startRecording: create new media record instance");
- mRecorder.setOnErrorListener(this);
- mRecorder.setAudioSource(MediaRecorder.AudioSource.FM_TUNER);
- mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
- final int samplingRate = 44100;
- mRecorder.setAudioSamplingRate(samplingRate);
- final int bitRate = 128000;
- mRecorder.setAudioEncodingBitRate(bitRate);
- final int channels = 2;
- mRecorder.setAudioChannels(channels);
- mRecorder.setOutputFile(mRecordFile.getAbsolutePath());
- mRecorder.prepare();
- mRecordStartTime = SystemClock.elapsedRealtime();
- mRecorder.start();
- mIsRecordingFileSaved = false;
- Log.d(TAG, "startRecording: start");
- } catch (IllegalStateException e) {
- Log.e(TAG, "IllegalStateException while starting recording!", e);
- setError(ERROR_RECORDER_INTERNAL);
- return;
- } catch (IOException e) {
- Log.e(TAG, "IOException while starting recording!", e);
- setError(ERROR_RECORDER_INTERNAL);
- return;
- } catch (RuntimeException e) {
- Log.e(TAG, "RuntimeException while start recording", e);
- setError(ERROR_RECORDER_INTERNAL);
- return;
- }
- setState(STATE_RECORDING);
- Log.d(TAG, "<< startRecording");
- }
-
- /**
- * Stop recording, compute recording time and update FM recorder state
- */
- public void stopRecording() {
- Log.d(TAG, ">> stopRecording");
- if (STATE_RECORDING != mInternalState) {
- Log.w(TAG, "stopRecording() called in wrong state!!");
- return;
- }
-
- mRecordTime = SystemClock.elapsedRealtime() - mRecordStartTime;
- stopRecorder();
- setState(STATE_IDLE);
- Log.d(TAG, "<< stopRecording");
- }
-
- /**
- * Play current recorded file, if failed notify error message to caller, if
- * success update FM recorder state
- */
- public void startPlayback() {
- Log.d(TAG, ">> startPlayback");
- if (null == mRecordFile) {
- Log.e(TAG, "no file to playback!");
- return;
- }
-
- mPlayer = new MediaPlayer();
- try {
- mPlayer.setDataSource(mRecordFile.getAbsolutePath());
- Log.d(TAG, "MediaPlayer.setDataSource(" + mRecordFile.getAbsolutePath() + ")");
- mPlayer.setOnCompletionListener(this);
- mPlayer.setOnErrorListener(this);
- mPlayer.prepare();
- Log.d(TAG, "MediaPlayer.prepare()");
- mPlayer.start();
- } catch (IOException e) {
- Log.e(TAG, "Exception while trying to playback recording file: " + e);
- setError(ERROR_PLAYER_INTERNAL);
- return;
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Exception while trying to playback recording file: " + e);
- setError(ERROR_PLAYER_INTERNAL);
- return;
- } catch (SecurityException e) {
- Log.e(TAG, "Exception while trying to playback recording file: " + e);
- setError(ERROR_PLAYER_INTERNAL);
- return;
- } catch (IllegalStateException e) {
- Log.e(TAG, "Exception while trying to playback recording file: " + e);
- setError(ERROR_PLAYER_INTERNAL);
- return;
- }
- setState(STATE_PLAYBACK);
- Log.d(TAG, "<< startPlayback");
- }
-
- /**
- * Stop playing the current recording file, and update FM recorder state
- */
- public void stopPlayback() {
- Log.d(TAG, ">> stopPlayback");
- if (null == mPlayer || STATE_PLAYBACK != mInternalState ||
- (null != mPlayer && !mPlayer.isPlaying())) {
- Log.w(TAG, "stopPlayback called in wrong state!!");
- // need call back to update button status
- setState(STATE_IDLE);
- return;
- }
- stopPlayer();
- setState(STATE_IDLE);
- Log.d(TAG, "<< stopPlayback");
- }
-
- /**
- * Compute the current record time
- *
- * @return The current record time
- */
- public long recordTime() {
- if (STATE_RECORDING == mInternalState) {
- mRecordTime = SystemClock.elapsedRealtime() - mRecordStartTime;
- }
- return mRecordTime;
- }
-
- /**
- * Get FM recorder current state
- *
- * @return FM recorder current state
- */
- public int getState() {
- return mInternalState;
- }
-
- /**
- * Get current recording file name
- *
- * @return The current recording file name
- */
- public String getRecordingName() {
- if (null != mRecordFile) {
- String fileName = mRecordFile.getName();
- if (fileName.toLowerCase().endsWith(RECORDING_FILE_EXTENSION)
- && fileName.length() > RECORDING_FILE_EXTENSION.length()) {
- // remove the extension sub string first
- fileName = fileName.substring(0, fileName.length() -
- RECORDING_FILE_EXTENSION.length());
- }
- return fileName;
- }
- return null;
- }
-
- /**
- * Get current recording file name with full path
- *
- * @return The current recording file name with path
- */
- public String getRecordingNameWithPath() {
- if (null != mRecordFile) {
- String fileName = mRecordFile.getAbsolutePath();
- if (fileName.toLowerCase().endsWith(RECORDING_FILE_EXTENSION)
- && fileName.length() > RECORDING_FILE_EXTENSION.length()) {
- // remove the extension sub string first
- fileName = fileName.substring(0, fileName.length() -
- RECORDING_FILE_EXTENSION.length());
- }
- Log.d(TAG, "getRecordingNameWithPath: fileName is " + fileName);
- return fileName;
- }
- return null;
- }
-
- /**
- * Save recording with the given name, and save recording file info to
- * database
- *
- * @param context The context
- * @param newName The name to override default recording name
- */
- public void saveRecording(Context context, String newName) {
- Log.d(TAG, ">> saveRecording(" + newName + ")");
- if (null == mRecordFile) {
- Log.e(TAG, "<< saveRecording: recording file is null!");
- return;
- }
-
- File parentFile = mRecordFile.getParentFile();
- if (null == parentFile) {
- Log.e(TAG, "<< saveRecording: parent recording file is null!");
- return;
- }
-
- // rename the recording file with given name
- if (null != newName && !newName.equals(getRecordingName())) {
- File sdFile = new File(parentFile.getPath(),
- newName + RECORDING_FILE_EXTENSION);
- if (sdFile.exists()) {
- Log.w(TAG, "A file with the same new name will be deleted: " +
- sdFile.getAbsolutePath());
- if (!sdFile.delete()) {
- Log.e(TAG, "can't delete the file already exits");
- }
- }
- if (null != parentFile) {
- if (!mRecordFile.renameTo(new File(parentFile.getPath(),
- newName + RECORDING_FILE_EXTENSION))) {
- Log.e(TAG, "can't rename file, use default name to save");
- newName = getRecordingName();
- }
- mRecordFile = new File(parentFile.getPath(),
- newName + RECORDING_FILE_EXTENSION);
- }
- }
- mIsRecordingFileSaved = true;
- // save recording file info to database
- addCurrentRecordingToDb(context);
- Log.d(TAG, "<< saveRecording(" + newName + ")");
- }
-
- /**
- * Discard current recording file, release recorder and player
- */
- public void discardRecording() {
- Log.d(TAG, ">> discardRecording");
- // release recorder
- if ((STATE_RECORDING == mInternalState) && (null != mRecorder)) {
- stopRecorder();
- // release player
- } else if ((STATE_PLAYBACK == mInternalState) && (null != mPlayer)) {
- stopPlayer();
- }
-
- if (null != mRecordFile && !mIsRecordingFileSaved) {
- if (!mRecordFile.delete()) {
- // deletion failed, possibly due to hot plug out SD card
- Log.d(TAG, "discardRecording: deletion failed!");
- }
- mRecordFile = null;
- mRecordStartTime = 0;
- mRecordTime = 0;
- }
- setState(STATE_IDLE);
- Log.d(TAG, "<< discardRecording");
- }
-
- /**
- * Set the callback use to notify FM recorder state and error message
- *
- * @param listener the callback
- */
- public void registerRecorderStateListener(OnRecorderStateChangedListener listener) {
- mStateListener = listener;
- }
-
- /**
- * Interface to notify FM recorder state and error message
- */
- public interface OnRecorderStateChangedListener {
- /**
- * notify FM recorder state
- *
- * @param state current FM recorder state
- */
- void onRecorderStateChanged(int state);
-
- /**
- * notify FM recorder error message
- *
- * @param error error type
- */
- void onRecorderError(int error);
-
- /**
- * notify play FM record file complete
- */
- void onPlayRecordFileComplete();
- }
-
- /**
- * When complete current recording file, release player and update FM
- * recorder state to idle
- *
- * @param mp The current player
- */
- @Override
- public void onCompletion(MediaPlayer mp) {
- Log.d(TAG, ">> MediaPlayer.onCompletion");
- synchronized (this) {
- if (null != mPlayer) {
- mPlayer.stop();
- mPlayer.release();
- mPlayer = null;
- }
- }
- setState(STATE_IDLE);
- if (null != mStateListener) {
- mStateListener.onPlayRecordFileComplete();
- }
- Log.d(TAG, "<< MediaPlayer.onCompletion");
- }
-
- /**
- * If player occur error, release player, notify error message, update FM
- * recorder state to idle
- *
- * @param mp The current player
- * @param what The error message type
- * @param extra The error message extra
- * @return true or false indicate handle this error or not
- */
- @Override
- public boolean onError(MediaPlayer mp, int what, int extra) {
- Log.e(TAG, "MediaPlayer.onError: what=" + what + ", extra=" + extra);
- int error = (MediaPlayer.MEDIA_ERROR_SERVER_DIED == what) ? what : ERROR_PLAYER_INTERNAL;
- setError(error);
- synchronized (this) {
- if (null != mPlayer) {
- mPlayer.release();
- mPlayer = null;
- }
- }
- if (STATE_PLAYBACK == mInternalState) {
- setState(STATE_IDLE);
- }
- return true;
- }
-
- /**
- * When recorder occur error, release player, notify error message, and
- * update FM recorder state to idle
- *
- * @param mr The current recorder
- * @param what The error message type
- * @param extra The error message extra
- */
- @Override
- public void onError(MediaRecorder mr, int what, int extra) {
- Log.e(TAG, "MediaRecorder.onError: what=" + what + ", extra=" + extra);
- stopRecorder();
- setError(ERROR_RECORDER_INTERNAL);
- if (STATE_RECORDING == mInternalState) {
- setState(STATE_IDLE);
- }
- }
-
- /**
- * Reset FM recorder
- */
- public void resetRecorder() {
- if (mRecorder != null) {
- mRecorder.release();
- mRecorder = null;
- }
- if (mPlayer != null) {
- mPlayer.release();
- mPlayer = null;
- }
- mRecordFile = null;
- mRecordStartTime = 0;
- mRecordTime = 0;
- mInternalState = STATE_IDLE;
- }
-
- /**
- * Notify error message to the callback
- *
- * @param error FM recorder error type
- */
- private void setError(int error) {
- Log.e(TAG, "setError: " + error);
- if (null != mStateListener) {
- mStateListener.onRecorderError(error);
- }
- }
-
- /**
- * Notify FM recorder state message to the callback
- *
- * @param state FM recorder current state
- */
- private void setState(int state) {
- mInternalState = state;
- if (null != mStateListener) {
- mStateListener.onRecorderStateChanged(state);
- }
- }
-
- /**
- * Save recording file info to database
- *
- * @param context application context
- */
- public void addCurrentRecordingToDb(final Context context) {
- Log.v(TAG, ">> addCurrentRecordingToDb");
- if (null == mRecordFile || !mRecordFile.exists()) {
- Log.e(TAG, "<< addCurrentRecordingToDb: file does not exists");
- return;
- }
- long curTime = System.currentTimeMillis();
- long modDate = mRecordFile.lastModified();
- Date date = new Date(curTime);
-
-// java.text.DateFormat dateFormatter = DateFormat.getDateFormat(context);
-// java.text.DateFormat timeFormatter = DateFormat.getTimeFormat(context);
- String title = getRecordingName();
-// StringBuilder stringBuilder = new StringBuilder();
-// stringBuilder.append(FM_RECORD_FOLDER).append(" ").append(
-// dateFormatter.format(date)).append(" ").append(
-// timeFormatter.format(date));
-// String artist = stringBuilder.toString();
-
- final int size = 8;
- ContentValues cv = new ContentValues(size);
- cv.put(MediaStore.Audio.Media.IS_MUSIC, 1);
- cv.put(MediaStore.Audio.Media.TITLE, title);
- cv.put(MediaStore.Audio.Media.DATA, mRecordFile.getAbsolutePath());
- final int oneSecond = 1000;
- cv.put(MediaStore.Audio.Media.DATE_ADDED, (int) (curTime / oneSecond));
- cv.put(MediaStore.Audio.Media.DATE_MODIFIED, (int) (modDate / oneSecond));
- cv.put(MediaStore.Audio.Media.MIME_TYPE, RECORDING_FILE_TYPE);
-// cv.put(MediaStore.Audio.Media.ARTIST, artist);
- cv.put(MediaStore.Audio.Media.ALBUM, RECORDING_FILE_SOURCE);
- cv.put(MediaStore.Audio.Media.DURATION, mRecordTime);
-
- int recordingId = addToMediaDB(context, cv);
- if (-1 == recordingId) {
- // insert failed
- return;
- }
- int playlistId = getPlaylistId(context);
- if (-1 == playlistId) {
- // play list not exist, create FM Recording play list
- playlistId = createPlaylist(context);
- }
- if (-1 == playlistId) {
- // insert playlist failed
- return;
- }
- // insert item to FM recording play list
- addToPlaylist(context, playlistId, recordingId);
- // Notify applications listening to the scanner events that
- // a recorded audio file just created.
- // Connect to mediascanner to update duration
- MediaScannerConnection.scanFile(context,
- new String[] {
- mRecordFile.getAbsolutePath()
- }, null, null);
- }
-
- private int getPlaylistId(final Context context) {
- Cursor playlistCursor = context.getContentResolver().query(
- MediaStore.Audio.Playlists.getContentUri("external"),
- new String[] {
- MediaStore.Audio.Playlists._ID
- },
- MediaStore.Audio.Playlists.DATA + "=?",
- new String[] {
- FmRadioUtils.getPlaylistPath(context) + RECORDING_FILE_SOURCE
- },
- null);
- int playlistId = -1;
- if (null != playlistCursor) {
- try {
- if (playlistCursor.moveToFirst()) {
- playlistId = playlistCursor.getInt(0);
- }
- } finally {
- playlistCursor.close();
- }
- }
- return playlistId;
- }
-
- private int createPlaylist(final Context context) {
- final int size = 1;
- ContentValues cv = new ContentValues(size);
- cv.put(MediaStore.Audio.Playlists.NAME, RECORDING_FILE_SOURCE);
- Log.d(TAG, "addToPlaylist: insert playlist");
- Uri newPlaylistUri = context.getContentResolver().insert(
- MediaStore.Audio.Playlists.getContentUri("external"), cv);
- if (newPlaylistUri == null) {
- Log.d(TAG, "createPlaylist: insert failed");
- return -1;
- }
- return Integer.valueOf(newPlaylistUri.getLastPathSegment());
- }
-
- private int addToMediaDB(final Context context, final ContentValues cv) {
- Uri insertResult = null;
- int recordingId = -1;
-
- Cursor existItems = context.getContentResolver().query(
- MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
- new String[] {
- "_id"
- },
- MediaStore.Audio.Media.DATA + "=?",
- new String[] {
- mRecordFile.getAbsolutePath()
- },
- null);
-
- if (null != existItems) {
- try {
-
- if (existItems.moveToFirst()) {
- // there's already a file with the same name in DB, update
- // the item.
- recordingId = existItems.getInt(0);
- Log.d(TAG, "existing items update recording id" + recordingId);
- int rowCnt = context.getContentResolver().update(
- MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
- cv,
- MediaStore.Audio.Media.DATA + "=?",
- new String[] {
- mRecordFile.getAbsolutePath()
- });
-
- } else {
- // not exist file has a same name in DB, insert the item.
- Log.d(TAG, "addToMediaDB: insert data");
- insertResult = context.getContentResolver().insert(
- MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, cv);
- if (null != insertResult) {
- recordingId = Integer.valueOf(insertResult.getLastPathSegment());
- }
- }
- } finally {
- existItems.close();
- existItems = null;
- }
- }
- return recordingId;
- }
-
- private void addToPlaylist(final Context context, final int playlistId, final int recordingId) {
- if (-1 == playlistId) {
- return;
- }
- Uri membersUri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId);
- Cursor itemInMembers = context.getContentResolver().query(membersUri,
- new String[] {
- MediaStore.Audio.Playlists.Members.AUDIO_ID
- },
- MediaStore.Audio.Playlists.Members.AUDIO_ID + "=?",
- new String[] {
- String.valueOf(recordingId)
- }, null);
- if (null != itemInMembers) {
- try {
- if (itemInMembers.moveToFirst()) {
- // Item already in playlist member,
- // no further actions (modify play_order is difficult,
- // since a same audio_id can appear multiple times in one
- // playlist
- // with different play_order)
- Log.d(TAG, "addToPlaylist new item already in playlists.members table");
- return;
- }
- } finally {
- itemInMembers.close();
- itemInMembers = null;
- }
- }
- Log.d(TAG, "addToPlaylist: query members");
- Cursor membersCursor = context.getContentResolver().query(
- membersUri,
- new String[] {
- "count(*)"
- },
- null,
- null,
- null);
-
- if (null != membersCursor) {
- try {
- if (membersCursor.moveToFirst()) {
- // insert item to playlist
- int base = membersCursor.getInt(0);
- final int size = 2;
- ContentValues cv = new ContentValues(size);
- cv.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer.valueOf(base));
- cv.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, recordingId);
- Log.d(TAG, "addToPlaylist: insert to members");
- context.getContentResolver().insert(membersUri, cv);
- }
- } finally {
- membersCursor.close();
- membersCursor = null;
- }
- }
- }
-
- private void stopRecorder() {
- synchronized (this) {
- if (null != mRecorder) {
- try {
- mRecorder.stop();
- Log.d(TAG, "stopRecorder: stop");
- } catch (IllegalStateException ex) {
- Log.e(TAG, "IllegalStateException ocurr" + ex);
- setError(ERROR_RECORDER_INTERNAL);
- } catch (RuntimeException exception) {
- // modified for stop recording failed.
- // native recorder will throw runtime exception such as
- // in case of start recording and stop it immediately
- Log.e(TAG, "RuntimeException ocurr" + exception);
- setError(ERROR_RECORDER_INTERNAL);
- } finally {
- mRecorder.release();
- Log.d(TAG, "stopRecorder: release");
- mRecorder = null;
- }
- }
- }
- }
-
- private void stopPlayer() {
- synchronized (this) {
- if (null != mPlayer) {
- try {
- mPlayer.stop();
- } catch (IllegalStateException e) {
- Log.e(TAG, "IllegalStateException while discard recording!");
- setError(ERROR_PLAYER_INTERNAL);
- return;
- } finally {
- mPlayer.release();
- mPlayer = null;
- }
- }
- }
- }
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/TestFM.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/TestFM.java
deleted file mode 100755
index accd31d..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/TestFM.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package com.mediatek.fmradio;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.media.AudioManager;
-import android.media.AudioSystem;
-import android.media.MediaPlayer;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.util.Log;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-
-import java.io.IOException;
-/* Vanzo:fenghaitao on: Tue, 30 Jun 2015 15:04:11 +0800
- * force use speaker
- */
-//import com.android.featureoption.FeatureOption;
-// End of Vanzo:fenghaitao
-public class TestFM extends Activity implements OnClickListener {
-
- public static final String TAG = "FM radio service";
- /* Vanzo:zhuhandong on: Fri, 27 Apr 2015 15:57:27 +0800
- * here to user speaker
- * private static final int FOR_PROPRIETARY = 5;
- */
- private static final int FOR_PROPRIETARY = 1;
- // End of Vanzo: zhuhandong
-
- private Button mSuccess = null;
-
- private Button mFail = null;
-
- private Button mSearch = null;
-
- private float mFrequency = 97.1f;
-
- private MediaPlayer mMP = null;
-
- private boolean mIsSearch = false;
-
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- if (msg.what == 1) {
- mSearch.setEnabled(true);
- }
- }
- };
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.test_view);
-
- mSuccess = (Button) findViewById(R.id.success);
- mFail = (Button) findViewById(R.id.fail);
- mSearch = (Button) findViewById(R.id.search);
- mSuccess.setOnClickListener(this);
- mSuccess.setEnabled(false);
- mFail.setOnClickListener(this);
- mSearch.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (!mIsSearch) {
- mSuccess.setEnabled(true);
- mIsSearch = true;
- new Thread() {
- public void run() {
- mFrequency = autoSearch(mFrequency, true);
- FmRadioNative.tune(mFrequency);
- FmRadioNative.setMute(false);
- mIsSearch = false;
- }
- }.start();
- }
- }
- });
-
- mSearch.setEnabled(false);
- new Thread() {
- public void run() {
- FmRadioNative.openDev();
- mMP = new MediaPlayer();
- try {
- mMP.setDataSource("THIRDPARTY://MEDIAPLAYER_PLAYERTYPE_FM");
- } catch (IOException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return;
- } catch (IllegalArgumentException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return;
- } catch (IllegalStateException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return;
- }
- mMP.setAudioStreamType(AudioManager.STREAM_MUSIC);
- enableFMAudio(true);
-/* Vanzo:fenghaitao on: Tue, 30 Jun 2015 15:05:06 +0800
- * force use speaker
- if (isHeadset()) {
- */
- //if (isHeadset() && !FeatureOption.VANZO_FEATURE_FM_ONLY_USE_EARPHONE) {
-// End of Vanzo:fenghaitao
- //setForceUseSpeaker(true);
- //}
- FmRadioNative.powerUp(mFrequency);
- FmRadioNative.setMute(false);
- mHandler.sendEmptyMessage(1);
- }
- }.start();
- }
-
- @Override
- public void onClick(View v) {
- Intent data = new Intent();
- data.putExtra("result", v == mSuccess);
- setResult(RESULT_OK, data);
- finish();
- }
-
- private void enableFMAudio(boolean bEnable) {
- if (bEnable) {
- if (mMP.isPlaying()) {
- Log.e(TAG, "Error: FM audio is already enabled.");
- } else {
- try {
- mMP.prepare();
- } catch (Exception e) {
- Log.e(TAG, "Exception: Cannot call MediaPlayer prepare.");
- }
- mMP.start();
- }
- } else {
- if (mMP.isPlaying()) {
- mMP.stop();
- mMP.reset();
- mMP.release();
- } else {
- Log.e(TAG, "Error: FM audio is already disabled.");
- }
- }
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- enableFMAudio(false);
- FmRadioNative.closeDev();
- setForceUseSpeaker(false);
- FmRadioNative.stopScan();
- }
-
- private float autoSearch(float action, boolean isUp) {
- return FmRadioNative.seek(action, isUp);
- }
-
- private void setForceUseSpeaker(boolean isOn) {
- int forcedUseForMedia = isOn ? AudioSystem.FORCE_SPEAKER : AudioSystem.FORCE_NONE;
- AudioSystem.setForceUse(FOR_PROPRIETARY, forcedUseForMedia);
- }
-
- private boolean isHeadset() {
- return FmRadioUtils.isWiredHeadsetReallyOn();
- }
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/TestFM.java~ b/MediaTek/FmRadio/src/com/mediatek/fmradio/TestFM.java~
deleted file mode 100755
index 27e9be0..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/TestFM.java~
+++ /dev/null
@@ -1,168 +0,0 @@
-package com.mediatek.fmradio;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.media.AudioManager;
-import android.media.AudioSystem;
-import android.media.MediaPlayer;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.util.Log;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-
-import java.io.IOException;
-/* Vanzo:fenghaitao on: Tue, 30 Jun 2015 15:04:11 +0800
- * force use speaker
- */
-//import com.android.featureoption.FeatureOption;
-// End of Vanzo:fenghaitao
-public class TestFM extends Activity implements OnClickListener {
-
- public static final String TAG = "FM radio service";
- /* Vanzo:zhuhandong on: Fri, 27 Apr 2015 15:57:27 +0800
- * here to user speaker
- * private static final int FOR_PROPRIETARY = 5;
- */
- private static final int FOR_PROPRIETARY = 1;
- // End of Vanzo: zhuhandong
-
- private Button mSuccess = null;
-
- private Button mFail = null;
-
- private Button mSearch = null;
-
- private float mFrequency = 97.1f;
-
- private MediaPlayer mMP = null;
-
- private boolean mIsSearch = false;
-
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- if (msg.what == 1) {
- mSearch.setEnabled(true);
- }
- }
- };
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.test_view);
-
- mSuccess = (Button) findViewById(R.id.success);
- mFail = (Button) findViewById(R.id.fail);
- mSearch = (Button) findViewById(R.id.search);
- mSuccess.setOnClickListener(this);
- mSuccess.setEnabled(false);
- mFail.setOnClickListener(this);
- mSearch.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (!mIsSearch) {
- mSuccess.setEnabled(true);
- mIsSearch = true;
- new Thread() {
- public void run() {
- mFrequency = autoSearch(mFrequency, true);
- FmRadioNative.tune(mFrequency);
- FmRadioNative.setMute(false);
- mIsSearch = false;
- }
- }.start();
- }
- }
- });
-
- mSearch.setEnabled(false);
- new Thread() {
- public void run() {
- FmRadioNative.openDev();
- mMP = new MediaPlayer();
- try {
- mMP.setDataSource("THIRDPARTY://MEDIAPLAYER_PLAYERTYPE_FM");
- } catch (IOException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return;
- } catch (IllegalArgumentException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return;
- } catch (IllegalStateException ex) {
- Log.e(TAG, "setDataSource: " + ex);
- return;
- }
- mMP.setAudioStreamType(AudioManager.STREAM_MUSIC);
- enableFMAudio(true);
-/* Vanzo:fenghaitao on: Tue, 30 Jun 2015 15:05:06 +0800
- * force use speaker
- if (isHeadset()) {
- */
- if (isHeadset() && !FeatureOption.VANZO_FEATURE_FM_ONLY_USE_EARPHONE) {
-// End of Vanzo:fenghaitao
- setForceUseSpeaker(true);
- }
- FmRadioNative.powerUp(mFrequency);
- FmRadioNative.setMute(false);
- mHandler.sendEmptyMessage(1);
- }
- }.start();
- }
-
- @Override
- public void onClick(View v) {
- Intent data = new Intent();
- data.putExtra("result", v == mSuccess);
- setResult(RESULT_OK, data);
- finish();
- }
-
- private void enableFMAudio(boolean bEnable) {
- if (bEnable) {
- if (mMP.isPlaying()) {
- Log.e(TAG, "Error: FM audio is already enabled.");
- } else {
- try {
- mMP.prepare();
- } catch (Exception e) {
- Log.e(TAG, "Exception: Cannot call MediaPlayer prepare.");
- }
- mMP.start();
- }
- } else {
- if (mMP.isPlaying()) {
- mMP.stop();
- mMP.reset();
- mMP.release();
- } else {
- Log.e(TAG, "Error: FM audio is already disabled.");
- }
- }
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- enableFMAudio(false);
- FmRadioNative.closeDev();
- setForceUseSpeaker(false);
- FmRadioNative.stopScan();
- }
-
- private float autoSearch(float action, boolean isUp) {
- return FmRadioNative.seek(action, isUp);
- }
-
- private void setForceUseSpeaker(boolean isOn) {
- int forcedUseForMedia = isOn ? AudioSystem.FORCE_SPEAKER : AudioSystem.FORCE_NONE;
- AudioSystem.setForceUse(FOR_PROPRIETARY, forcedUseForMedia);
- }
-
- private boolean isHeadset() {
- return FmRadioUtils.isWiredHeadsetReallyOn();
- }
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/AddFavoriteDialog.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/AddFavoriteDialog.java
deleted file mode 100755
index 3c65f4c..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/AddFavoriteDialog.java
+++ /dev/null
@@ -1,137 +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) 2011-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.
- */
-
-package com.mediatek.fmradio.dialogs;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.TextView;
-
-import com.mediatek.fmradio.ExtensionUtils;
-import com.mediatek.fmradio.FmRadioUtils;
-import com.mediatek.fmradio.R;
-import com.mediatek.fmradio.ext.IProjectStringExt;
-
-/**
- * Add a station as favorite caller should implement AddFavoriteListener
- */
-public class AddFavoriteDialog extends DialogFragment {
- private static final String STATION_NAME = "station_name";
- private static final String STATION_FREQ = "station_freq";
- private AddFavoriteListener mListener = null;
-
- /**
- * Create add favorite dialog instance according station name and station
- * frequency
- *
- * @param stationName The station name
- * @param stationFreq The station frequency
- * @return add favorite dialog instance
- */
- public static AddFavoriteDialog newInstance(String stationName, int stationFreq) {
- AddFavoriteDialog fragment = new AddFavoriteDialog();
- Bundle args = new Bundle(2);
- args.putString(STATION_NAME, stationName);
- args.putInt(STATION_FREQ, stationFreq);
- fragment.setArguments(args);
- return fragment;
- }
-
- /**
- * Add favorite listener, caller should implement
- */
- public interface AddFavoriteListener {
- /**
- * Add a station as favorite
- */
- void addFavorite();
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- try {
- mListener = (AddFavoriteListener) activity;
- } catch (ClassCastException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- String stationName = getArguments().getString(STATION_NAME);
- int stationFreq = getArguments().getInt(STATION_FREQ);
- Context context = getActivity().getApplicationContext();
- IProjectStringExt projectStringExt = ExtensionUtils.getExtension(context);
- View v = View.inflate(getActivity(), R.layout.addstation, null);
- EditText editTextStationName = (EditText) v.findViewById(R.id.dlg_add_station_name_text);
- ((TextView) v.findViewById(R.id.dlg_add_station_freq_text))
- .setText(FmRadioUtils.formatStation(stationFreq));
- // if not have current station name, hint with default station name
- // else hint current station name
- if (null == stationName || "".equals(stationName)) {
- editTextStationName.setHint(R.string.default_station_name);
- } else {
- editTextStationName.setHint(stationName);
- }
- editTextStationName.requestFocus();
- editTextStationName.requestFocusFromTouch();
- editTextStationName.setText("");
- return new AlertDialog.Builder(getActivity())
- // Must call setTitle here or the title will not be displayed.
- .setTitle(projectStringExt.getProjectString(context,
- R.string.add_to_favorite, R.string.add_to_favorite1))
- .setView(v)
- .setPositiveButton(R.string.btn_ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- mListener.addFavorite();
- }
- }).setNegativeButton(R.string.btn_cancel, null) // cancel button
- // not need to
- // handle
- // any thing
- .create();
- }
-
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/DeleteFavoriteDialog.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/DeleteFavoriteDialog.java
deleted file mode 100755
index f0f3fb7..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/DeleteFavoriteDialog.java
+++ /dev/null
@@ -1,107 +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) 2011-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.
- */
-
-package com.mediatek.fmradio.dialogs;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.os.Bundle;
-
-import com.mediatek.fmradio.ExtensionUtils;
-import com.mediatek.fmradio.R;
-import com.mediatek.fmradio.ext.IProjectStringExt;
-
-/**
- * Delete favorite from favorite channel list, caller should implement
- * DeleteFavoriteListener
- */
-public class DeleteFavoriteDialog extends DialogFragment {
- private DeleteFavoriteListener mListener = null;
-
- /**
- * Create delete favorite dialog instance, caller should implement
- * DeleFavoriteListener
- *
- * @return delete favorite dialog
- */
- public static DeleteFavoriteDialog newInstance() {
- return new DeleteFavoriteDialog();
- }
-
- /**
- * Delete favorite listener
- */
- public interface DeleteFavoriteListener {
- /**
- * Delete favorite from favorite channel list
- */
- void deleteFavorite();
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- try {
- mListener = (DeleteFavoriteListener) activity;
- } catch (ClassCastException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- Context context = getActivity().getApplicationContext();
- IProjectStringExt projectStringExt = ExtensionUtils.getExtension(context);
- return new AlertDialog.Builder(getActivity())
- .setTitle(projectStringExt.getProjectString(context,
- R.string.dlg_delete_confirm_title, R.string.dlg_delete_confirm_title1))
- .setMessage(projectStringExt.getProjectString(context,
- R.string.dlg_delete_confirm_text, R.string.dlg_delete_confirm_text1))
- .setPositiveButton(R.string.btn_ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- mListener.deleteFavorite();
- }
- })
- .setNegativeButton(R.string.btn_cancel, null)
- .create();
- }
-
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/EditFavoriteDialog.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/EditFavoriteDialog.java
deleted file mode 100755
index 3e360ce..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/EditFavoriteDialog.java
+++ /dev/null
@@ -1,225 +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) 2011-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.
- */
-
-package com.mediatek.fmradio.dialogs;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.InputFilter;
-import android.text.Selection;
-import android.text.Spanned;
-import android.text.TextWatcher;
-import android.view.View;
-import android.widget.Button;
-import android.widget.EditText;
-
-import com.mediatek.fmradio.FmRadioStation;
-import com.mediatek.fmradio.FmRadioUtils;
-import com.mediatek.fmradio.R;
-
-/**
- * Edit favorite station name and frequency, caller should implement
- * EditFavoriteListener
- */
-public class EditFavoriteDialog extends DialogFragment {
- private static final String STATION_NAME = "station_name";
- private static final String STATION_FREQ = "station_freq";
- private EditFavoriteListener mListener = null;
- private EditText mEditTextFrequency = null;
-
- /**
- * Create edit favorite dialog instance, caller should implement edit
- * favorite listener
- *
- * @param stationName The station name
- * @param stationFreq The station frequency
- * @return edit favorite dialog
- */
- public static EditFavoriteDialog newInstance(String stationName, int stationFreq) {
- EditFavoriteDialog fragment = new EditFavoriteDialog();
- Bundle args = new Bundle(2);
- args.putString(STATION_NAME, stationName);
- args.putInt(STATION_FREQ, stationFreq);
- fragment.setArguments(args);
- return fragment;
- }
-
- /**
- * Edit favorite listener
- */
- public interface EditFavoriteListener {
- /**
- * Edit favorite station name and station frequency
- */
- void editFavorite();
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- try {
- mListener = (EditFavoriteListener) activity;
- } catch (ClassCastException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- String stationName = getArguments().getString(STATION_NAME);
- int stationFreq = getArguments().getInt(STATION_FREQ);
- View v = View.inflate(getActivity(), R.layout.editstation, null);
- EditText editTextStationName = (EditText) v.findViewById(R.id.dlg_edit_station_name_text);
- mEditTextFrequency = (EditText) v.findViewById(R.id.dlg_edit_station_freq_text);
-
- final int lengthOf100Khz = 5;
- final int maxFrequencyLength = lengthOf100Khz;
- mEditTextFrequency.setFilters(new InputFilter[] {
- mFilter,
- new InputFilter.LengthFilter(maxFrequencyLength)
- });
-
- mEditTextFrequency.addTextChangedListener(mWatcher100KHZ);
-
- mEditTextFrequency.setText(FmRadioUtils.formatStation(stationFreq));
- if (null == stationName || "".equals(stationName)) {
- editTextStationName.setHint(R.string.default_station_name);
- } else {
- editTextStationName.setHint(stationName);
- }
- editTextStationName.requestFocus();
- editTextStationName.requestFocusFromTouch();
- // Edit
- editTextStationName.setText(stationName);
- Editable text = editTextStationName.getText();
- Selection.setSelection(text, text.length());
- return new AlertDialog.Builder(getActivity())
- // Must call setTitle here or the title will not be displayed.
- .setTitle(getString(R.string.dlg_addedit_title_edit)).setView(v)
- .setPositiveButton(R.string.edit_frequency_overwrite_text,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- mListener.editFavorite();
- }
- })
- .setNegativeButton(R.string.btn_cancel, null)
- .create();
- }
-
- InputFilter mFilter = new InputFilter() {
-
- public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
- int dstart, int dend) {
- final int accuracy = 1;
-
- if ("".equals(source.toString())) {
- return null;
- }
-
- // according the point divide string
- String[] splitArray = dest.toString().split("\\.");
- // input have point, should delete the redundant
- if (splitArray.length > 1) {
- String fraction = splitArray[1];
- int deleteIndex = fraction.length() + 1 - accuracy;
- if (deleteIndex > 0) {
- int dotIndex = dest.toString().indexOf(".") + 1;
- if (dstart >= dotIndex) {
- if ((end - deleteIndex) >= start) {
- return source.subSequence(start, end - deleteIndex);
- }
- } else {
- return dest.subSequence(dstart, dend) + source.toString();
- }
- }
- }
- return null;
- }
- };
-
- // Add for 100khz
- // add for overwrite frequency feature
- private TextWatcher mWatcher100KHZ = new TextWatcher() {
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- if (null == getDialog()) {
- return;
- }
- CharSequence cs = mEditTextFrequency.getText();
- float frequency = 0;
- try {
- frequency = Float.parseFloat(cs.toString());
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- final int convertData = 10;
- int station = Math.round(frequency * convertData);
- Button positiveButton = ((AlertDialog) getDialog())
- .getButton(DialogInterface.BUTTON_POSITIVE);
-
- if (null != positiveButton) {
- if (FmRadioStation.isStationExistInChList(
- getActivity().getApplicationContext(), station)) {
- positiveButton.setText(R.string.edit_frequency_overwrite_text);
- } else {
- positiveButton.setText(R.string.btn_ok);
- }
- }
- }
-
- /**
- * No need to implement
- */
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
- }
-
- /**
- * No need to implement
- */
- @Override
- public void afterTextChanged(Editable s) {
- }
- };
-
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/NoAntennaDialog.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/NoAntennaDialog.java
deleted file mode 100755
index 2d702f0..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/NoAntennaDialog.java
+++ /dev/null
@@ -1,124 +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) 2011-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.
- */
-
-package com.mediatek.fmradio.dialogs;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnKeyListener;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.KeyEvent;
-
-import com.mediatek.fmradio.R;
-
-/**
- * No antenna dialog, caller should implement NoAntennaListener
- */
-public class NoAntennaDialog extends DialogFragment {
- private static final String TAG = "FmRx/NoAntennaDialog";
- private NoAntennaListener mListener = null;
-
- /**
- * Create no antenna dialog instance, caller should implement
- * NoAntennaListener
- */
- public static NoAntennaDialog newInstance() {
- return new NoAntennaDialog();
- }
-
- /**
- * No antenna listener
- */
- public interface NoAntennaListener {
- /**
- * Continue to operate when no antenna
- */
- void noAntennaContinue();
-
- /**
- * Cancel operate when no antenna
- */
- void noAntennaCancel();
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- try {
- mListener = (NoAntennaListener) activity;
- } catch (ClassCastException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setMessage(R.string.no_antenna_info)
- .setTitle(R.string.dlg_noantenna_title)
- .setPositiveButton(R.string.btn_yes, new DialogInterface.OnClickListener() {
-
- public void onClick(DialogInterface dialog, int which) {
- mListener.noAntennaContinue();
- }
- })
- .setNegativeButton(R.string.btn_no, new DialogInterface.OnClickListener() {
-
- public void onClick(DialogInterface dialog, int which) {
- mListener.noAntennaCancel();
- }
- });
- AlertDialog d = builder.create();
- d.setCanceledOnTouchOutside(false);
- d.setOnKeyListener(new OnKeyListener() {
- @Override
- public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
- Log.d(TAG, "click back key, need to exit fm");
- mListener.noAntennaCancel();
- }
- return false;
- }
- });
- return d;
- }
-
-}
diff --git a/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/SearchChannelsDialog.java b/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/SearchChannelsDialog.java
deleted file mode 100755
index 3e049a0..0000000
--- a/MediaTek/FmRadio/src/com/mediatek/fmradio/dialogs/SearchChannelsDialog.java
+++ /dev/null
@@ -1,111 +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) 2011-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.
- */
-
-package com.mediatek.fmradio.dialogs;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.ProgressDialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-
-import com.mediatek.fmradio.R;
-
-/**
- * This class provider search dialog and cancel search function, caller should
- * implement CancelSearchListener
- */
-public class SearchChannelsDialog extends DialogFragment {
- private CancelSearchListener mListener = null;
-
- /**
- * Create search channels dialog instance, caller should implement
- * CancelSearchListener
- *
- * @return The dialog instance
- */
- public static SearchChannelsDialog newInstance() {
- return new SearchChannelsDialog();
- }
-
- /**
- * Cancel search listener
- */
- public interface CancelSearchListener {
- /**
- * Cancel search
- */
- void cancelSearch();
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- try {
- mListener = (CancelSearchListener) activity;
- } catch (ClassCastException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- String message = getActivity().getString(R.string.dlg_progress_text);
- ProgressDialog searchDialog = new ProgressDialog(getActivity());
- searchDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
- searchDialog.setMessage(message);
- searchDialog.setTitle(R.string.dlg_progress_title);
- searchDialog.setCancelable(true);
- // if not set, user touch outside of FMRadio will cancel search
- searchDialog.setCanceledOnTouchOutside(false);
- searchDialog.setButton(getString(R.string.btn_cancel),
- new DialogInterface.OnClickListener() {
-
- public void onClick(DialogInterface dialog, int which) {
- mListener.cancelSearch();
- }
- });
- return searchDialog;
- }
-
- @Override
- public void onCancel(DialogInterface dialog) {
- mListener.cancelSearch();
- }
-
-}
diff --git a/MediaTek/FmRadio/tests/Android.mk b/MediaTek/FmRadio/tests/Android.mk
deleted file mode 100755
index 0e3521a..0000000
--- a/MediaTek/FmRadio/tests/Android.mk
+++ /dev/null
@@ -1,57 +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.
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-
-
-# We only want this apk build for tests.
-LOCAL_MODULE_TAGS := tests
-LOCAL_CERTIFICATE := platform
-
-LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := librobotium4
-
-# Include all test java files.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := FmRadioTests
-
-LOCAL_INSTRUMENTATION_FOR := FmRadio
-
-include $(BUILD_PACKAGE)
-
-# Use the folloing include to make our test apk.
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/MediaTek/FmRadio/tests/AndroidManifest.xml b/MediaTek/FmRadio/tests/AndroidManifest.xml
deleted file mode 100755
index 1f8d990..0000000
--- a/MediaTek/FmRadio/tests/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/MediaTek/FmRadio/tests/NOTICE b/MediaTek/FmRadio/tests/NOTICE
deleted file mode 100644
index e69de29..0000000
diff --git a/MediaTek/FmRadio/tests/README b/MediaTek/FmRadio/tests/README
deleted file mode 100755
index 6a66800..0000000
--- a/MediaTek/FmRadio/tests/README
+++ /dev/null
@@ -1,25 +0,0 @@
-FmRadioTests.apk is the unit test of FmRadio.apk.
-
-This library is pre-built by MediaTek internal.
-
-WHAT IT DOES?
-=============
-It is designed to unit text for FM radio application.
-
-HOW IT WAS BUILT?
-==================
-It needs the following library from AOSP:
-1. framework.jar
-
-and the following libs from MediaTek:
-1. FmRadio.apk
-2. librobotium4.jar
-
-All source/dependency modules of this module are already put in
-'vendor/mediatek/libs' folder.
-
-HOW TO USE IT?
-==============
-1. Install FmRadioTests.apk in mediatek platform.
-2. Use adb command to run test:
-adb shell am instrument -w com.mediatek.fmradio.tests/.FmRadioFunctionRunner
diff --git a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioActivityTest.java b/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioActivityTest.java
deleted file mode 100755
index f7039c7..0000000
--- a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioActivityTest.java
+++ /dev/null
@@ -1,1054 +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.
- */
-
-package com.mediatek.fmradio.tests;
-
-import java.io.File;
-import com.jayway.android.robotium.solo.Solo;
-
-import android.app.ActionBar;
-import android.app.AlertDialog;
-import android.app.Instrumentation;
-import android.app.Instrumentation.ActivityMonitor;
-import android.content.Context;
-import android.database.Cursor;
-import android.media.AudioManager;
-import android.media.AudioManager.OnAudioFocusChangeListener;
-import android.net.Uri;
-import android.test.ActivityInstrumentationTestCase2;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.MenuInflater;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ImageButton;
-import android.widget.TextView;
-
-import com.mediatek.fmradio.FmRadioActivity;
-import com.mediatek.fmradio.FmRadioFavorite;
-import com.mediatek.fmradio.FmRadioUtils;
-import com.mediatek.fmradio.FmRadioStation;
-import com.mediatek.fmradio.R;
-
-public class FmRadioActivityTest extends ActivityInstrumentationTestCase2 {
- private Instrumentation mInstrumentation = null;
- private Solo mSolo = null;
- private Context mContext = null;
- private ActivityMonitor mActivityMonitor = null;
-
- private ActionBar mActionBar = null;
- private FmRadioActivity mFmRadioActivity = null;
- private FmRadioFavorite mFmRadioFavorite = null;
- private AudioManager mAudioManager = null;
- private OnAudioFocusChangeListener mFMAudioFocusChangeListener = null;
-
- // bottom bar
- private ImageButton mButtonDecrease = null;
- private ImageButton mButtonPrevStation = null;
- private ImageButton mButtonNextStation = null;
- private ImageButton mButtonIncrease = null;
-// private ImageButton mButtonPlayStop = null;
- private MenuInflater mMenuInflater = null;
- // the star
- private ImageButton mButtonAddToFavorite = null;
- // record bar
- private ImageButton mButtonRecord = null;
- private ImageButton mButtonStop = null;
- private ImageButton mButtonPlayback = null;
- private AlertDialog mDialogRDSSetting = null;
-
- private Button mButtonRecordSave = null;
- private EditText mEditTextRecordName = null;
-
- private static final String CONTENTURI = "content://com.mediatek.fmradio.FmRadioContentProvider/station";
-
- private TextView mTextViewFrequency = null;
- private static final int CHECK_TIME = 100;
- private static final int SHORT_TIME = 2000;
- private static final int ONE_SECOND = 1000;
- private static final int EXECUTE_TIME = 500;
- private static final int TIMEOUT = 5000;
- private static final int WAIT_TEAR_DOWN = 3000;
- private static final int WAIT_MOUNT_UNMOUNT = 7000;
- private static final int RECORDING_FILE_TIME = 10000;
-
- private static final long SEARCH_TIME = 20000;
- private static final int CONVERT_RATE = 10;
- private static final int TUNE_STEP = 1;
- private static final String TAG = "FmRadioFunctionTest";
-
- public FmRadioActivityTest() {
- super("com.mediatek.fmradio", FmRadioActivity.class);
- }
-
- public FmRadioActivityTest(String pkg, Class activityClass) {
- super("com.mediatek.fmradio", FmRadioActivity.class);
- }
-
- @Override
- protected void setUp() {
- try {
- super.setUp();
- } catch (Exception e) {
- e.printStackTrace();
- }
- setActivityInitialTouchMode(false);
- mInstrumentation = this.getInstrumentation();
- assertNotNull(mInstrumentation);
- mFmRadioActivity = getActivity();
- assertNotNull(mFmRadioActivity);
- mSolo = new Solo(getInstrumentation(), mFmRadioActivity);
- mContext = mFmRadioActivity.getApplicationContext();
- mAudioManager =
- (AudioManager) mFmRadioActivity.getSystemService(mContext.AUDIO_SERVICE);
- waitForPowerupWithTimeout(TIMEOUT);
- //waitForInitedWithTimeout(TIMEOUT);
-
- mButtonDecrease = (ImageButton) mFmRadioActivity.findViewById(R.id.button_decrease);
- mButtonPrevStation = (ImageButton) mFmRadioActivity.findViewById(R.id.button_prevstation);
- mButtonNextStation = (ImageButton) mFmRadioActivity.findViewById(R.id.button_nextstation);
- mButtonIncrease = (ImageButton) mFmRadioActivity.findViewById(R.id.button_increase);
-
- mButtonAddToFavorite = (ImageButton) mFmRadioActivity
- .findViewById(R.id.button_add_to_favorite);
-
- mButtonRecord = (ImageButton) mFmRadioActivity.findViewById(R.id.btn_record);
- mButtonStop = (ImageButton) mFmRadioActivity.findViewById(R.id.btn_stop);
- mButtonPlayback = (ImageButton) mFmRadioActivity.findViewById(R.id.btn_playback);
-
- mTextViewFrequency = (TextView) mFmRadioActivity
- .findViewById(R.id.station_value);
- }
-
- // click play/stop button.
- public void testCase01_PowerUpAndPowerDown() {
- boolean isPlaying = false;
- // test FM power down
- makeFMPowerUp();
- mInstrumentation.waitForIdleSync();
- FmRadioTestCaseUtil.requestFocusGain(mAudioManager);
- mSolo.sleep(SHORT_TIME);
- checkFMStopState();
-
- // test FM power up
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_power, 0);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- checkFMPlayingState();
- }
-
- // click speaker/earphone menu item.
- public void testCase02_SwitchSpeakerAndEarphone() {
- if (!mButtonDecrease.isEnabled()) {
- makeFMPowerUp();
- }
- String earphone = mFmRadioActivity.getString(R.string.optmenu_earphone);
- String speaker = mFmRadioActivity.getString(R.string.optmenu_speaker);
- // test FM switch to speaker
- switchSpeaker();
- mSolo.sleep(EXECUTE_TIME);
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- assertTrue(mSolo.searchText(earphone));
- mSolo.goBack();
- // test FM switch to earphone
- switchEarphone();
- mSolo.sleep(EXECUTE_TIME);
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- assertTrue(mSolo.searchText(speaker));
- mSolo.goBack();
- }
-
- // click favorite star.
- public void testCase03_AddDeleteFavoriteChannels() {
- int station = 0;
- // test add channel as favorite
- station = FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency);
- deleteChannelFromFavorite(station);
- clickView(mButtonAddToFavorite);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- assertTrue(FmRadioStation.isFavoriteStation(mFmRadioActivity, station));
-
- // test delete channel from favorite
- station = FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency);
- addChannelAsFavorite(station);
- clickView(mButtonAddToFavorite);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- assertFalse(FmRadioStation.isFavoriteStation(mFmRadioActivity, station));
- }
-
- // click tune frequency.
- public void testCase04_TuneFrequency() {
- int tuneStation = 0, currentStation = 0;
- if (!mButtonDecrease.isEnabled()) {
- makeFMPowerUp();
- }
- // test decrease 0.1 MHZ
- tuneStation = FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency);
- clickView(mButtonDecrease);
- mInstrumentation.waitForIdleSync();
- tuneStation -= TUNE_STEP;
- if (tuneStation < FmRadioTestCaseUtil.LOWEST_STATION) {
- tuneStation = FmRadioTestCaseUtil.HIGHEST_STATION;
- }
- // add sleep time, because instrumentation waitForIdleSync just wait for
- // UI thread end, must wait for all hardware and database operation end
- mSolo.sleep(SHORT_TIME);
- currentStation = FmRadioStation.getCurrentStation(mFmRadioActivity);
- assertEquals(tuneStation, currentStation);
-
- // add to favorite
- testCase03_AddDeleteFavoriteChannels();
-
- // test increase 0.1 MHZ
- tuneStation = FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency);
- clickView(mButtonIncrease);
- mInstrumentation.waitForIdleSync();
- tuneStation += TUNE_STEP;
- if (tuneStation > FmRadioTestCaseUtil.HIGHEST_STATION) {
- tuneStation = FmRadioTestCaseUtil.LOWEST_STATION;
- }
- mSolo.sleep(SHORT_TIME);
- currentStation = FmRadioStation.getCurrentStation(mFmRadioActivity);
- assertEquals(tuneStation, currentStation);
- }
-
- // click tune station
- public void testCase05_SwitchChannel() {
- int oldStation = 0, stationFromUI = 0, stationFromDB = 0;
- if (!mButtonPrevStation.isEnabled()) {
- makeFMPowerUp();
- }
-
- // test seek previous station
- oldStation = FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency);
- clickView(mButtonPrevStation);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(TIMEOUT);
- stationFromUI = FmRadioTestCaseUtil
- .getStationFromUI(mTextViewFrequency);
- // check station change
- assertTrue(oldStation != stationFromUI);
-
- // test seek next station
- oldStation = FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency);
- clickView(mButtonNextStation);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(TIMEOUT);
- stationFromUI = FmRadioTestCaseUtil
- .getStationFromUI(mTextViewFrequency);
- // check station change
- assertTrue(oldStation != stationFromUI);
- }
-
- // click cancel when search channel. click back key when search channel.
- public void testCase06_CancelChannelSearch() {
- // check cancel scan when power up
- startScanWhenPowerUp();
- checkCancelScan();
- checkFMPlayingState();
-
- }
-
- // search channel and tune to one station.
- public void testCase07_SearchChannels() {
- // check scan when power up
- startScanWhenPowerUp();
- checkFinishScan();
- }
-
- // enter channel list activity
- public void testCase08_EnterChannelList() {
- Log.d(TAG, ">>> testCase08_EnterChannelList");
- if (!mButtonDecrease.isEnabled()) {
- makeFMPowerUp();
- }
- mActivityMonitor = new ActivityMonitor(
- "com.mediatek.fmradio.FmRadioFavorite", null, false);
- mInstrumentation.addMonitor(mActivityMonitor);
- mInstrumentation.invokeMenuActionSync(mFmRadioActivity,
- R.id.fm_channel_list, 0);
- mFmRadioFavorite = (FmRadioFavorite) mActivityMonitor
- .waitForActivityWithTimeout(TIMEOUT);
- assertNotNull(mFmRadioFavorite);
- mSolo.sleep(SHORT_TIME);
- Uri uri = Uri.parse(CONTENTURI);
- Cursor c = mFmRadioFavorite.getContentResolver().query(
- uri,
- new String[] { FmRadioStation.Station._ID,
- FmRadioStation.Station.COLUMN_STATION_FREQ,
- FmRadioStation.Station.COLUMN_STATION_TYPE }, null,
- null, null);
- assertTrue(c != null && c.getCount() > 0);
- Log.d(TAG, "testCase08_EnterChannelList count:" + c.getCount());
- try {
- if (c != null) {
- c.moveToFirst();
- while (!c.isAfterLast()) {
- int stationFreq = c.getInt(1);
- int stationType = c.getInt(2);
- if ((FmRadioStation.STATION_TYPE_FAVORITE == stationType)
- || (FmRadioStation.STATION_TYPE_SEARCHED == stationType)) {
- Log.d(TAG, "testCase08_EnterChannelList stationFreq:" + stationFreq
- + ", stationType:" + stationType);
- assertTrue(FmRadioTestCaseUtil.isExistInChannelList(
- mFmRadioFavorite, stationFreq));
- }
- c.moveToNext();
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (c != null) {
- c.close();
- }
- }
- mInstrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
- Log.d(TAG, "<<< testCase08_EnterChannelList");
- }
-
- // when play fm, audio focus loss, and stop fm
- public void testCase09_CheckFocusLoss() {
- mInstrumentation.waitForIdleSync();
- makeFMPowerDown();
-
- // check when power up, music get focus, fm power down
- //mInstrumentation
- // .invokeMenuActionSync(mFmRadioActivity, R.id.fm_power, 0);
- //mInstrumentation.waitForIdleSync();
- mSolo.sleep(EXECUTE_TIME);
- //FmRadioTestCaseUtil.requestFocusGain(mAudioManager);
- //mInstrumentation.waitForIdleSync();
- checkFMStopState();
- //mSolo.sleep(SHORT_TIME);
-
- mSolo.sleep(SHORT_TIME);
- // fm is power up, check when fm is searching, focus is loss, fm power down
- startScanWhenPowerUp();
- mSolo.sleep(SHORT_TIME);
- FmRadioTestCaseUtil.requestFocusGain(mAudioManager);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(TIMEOUT);
- // check music is active, fm is power down
- checkFMStopState();
- }
-
- public void testCase10_EnterRecordingMode() {
- enterRecordingMode();
- mSolo.sleep(SHORT_TIME);
- checkRecordNotSaveIdle();
- mInstrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
- mInstrumentation.waitForIdleSync();
- checkFMPlayingState();
- }
-
- // recording, discard, save.
- public void testCase11_RecordingAndSave() {
- enterRecordingMode();
- mSolo.sleep(SHORT_TIME);
- // judge whether enter recording mode
- checkRecordNotSaveIdle();
-
- // test recording
- clickView(mButtonRecord);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- checkRecordingState();
- // make recording time have 3 seconds
- mSolo.sleep(SHORT_TIME);
- // test stop reocording and save recording file
- clickView(mButtonStop);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- checkRecordingStopState();
-
- // enter some illegal characters
- mEditTextRecordName = (EditText) mSolo.getView(R.id.fm_recording_text);
- String fileName = mEditTextRecordName.getText().toString();
- mSolo.clearEditText(mEditTextRecordName);
- mSolo.enterText(mEditTextRecordName, "test:");
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- mButtonRecordSave = (Button) mSolo.getView(R.id.fm_recording_btn_save);
- assertFalse(mButtonRecordSave.isEnabled());
- // enter some legal characters
- mSolo.clearEditText(mEditTextRecordName);
- mSolo.enterText(mEditTextRecordName, fileName);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- assertTrue(mButtonRecordSave.isEnabled());
-
- // click discard not save file
- mSolo.clickOnButton(mContext.getString(R.string.btn_discard_recording));
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- checkRecordNotSaveIdle();
-
- // recording and make focus at OK button of save recording dialog
- clickView(mButtonRecord);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- checkRecordingState();
- // make recording time have 3 seconds
- mSolo.sleep(SHORT_TIME);
- // test stop reocording and save recording file
- clickView(mButtonStop);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- checkRecordingStopState();
-
- // click OK button of save recording dialog
- mSolo.clickOnButton(mContext.getString(R.string.btn_save_recording));
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- checkRecordHasSavedIdle();
- mInstrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
- mInstrumentation.waitForIdleSync();
- }
-
- // recording and playback.
- public void testCase12_RecordingAndPlayBack() {
- enterRecordingMode();
- mSolo.sleep(TIMEOUT);
- // judge whether enter recording mode
- checkRecordNotSaveIdle();
-
- // test recording
- clickView(mButtonRecord);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- checkRecordingState();
- // make recording time have 3 seconds
- mSolo.sleep(SHORT_TIME);
- // test stop reocording and save recording file
- clickView(mButtonStop);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- checkRecordingStopState();
-
- // click OK button of save recording dialog
- mSolo.clickOnButton(mContext.getString(R.string.btn_save_recording));
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- checkRecordHasSavedIdle();
-
- // test playback recording file
- clickView(mButtonPlayback);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(EXECUTE_TIME);
- checkPlayingBackState();
- mSolo.sleep(TIMEOUT);
- checkPlayingBackFinished();
- mSolo.sleep(SHORT_TIME);
-
- mInstrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
- mInstrumentation.waitForIdleSync();
- }
-
- // test fm recreate when scan, and fm is powerup state.
- public void testCase14_relaunchFmWhenCancelScan() {
- Log.d(TAG, ">>> testCase14_relaunchFmWhenCancelScan");
- int oldStation = FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency);
- String cancel = mFmRadioActivity.getString(R.string.btn_cancel);
- // test cancel scan
- checkRelaunchWhenScan();
- // mInstrumentation.waitForIdleSync();
- mSolo.clickOnButton(cancel);
- //mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- checkFMPlayingState();
-
- int stationFromUI = FmRadioTestCaseUtil
- .getStationFromUI(mTextViewFrequency);
- // check station not change
- assertTrue(oldStation == stationFromUI);
-
- checkRelaunchWhenScan();
- checkFinishScan();
-
- }
-
- // mount, unmount sd card when recording
- /*public void testCase15_mountUnmountWhenRecording() {
- FmRadioTestCaseUtil.mountSDCard(mContext);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(WAIT_MOUNT_UNMOUNT);
- mSolo.sleep(SHORT_TIME);
- enterRecordingMode();
- mSolo.sleep(SHORT_TIME);
- checkRecordNotSaveIdle();
- String toastStartRecord = mContext.getString(R.string.toast_start_recording);
- String toastSdCardMiss = mContext.getString(R.string.toast_sdcard_missing);
- String save = mFmRadioActivity.getString(R.string.btn_save_recording);
- String discard = mFmRadioActivity.getString(R.string.btn_discard_recording);
- // unmount sd card when recording
-
- clickView(mButtonRecord);
- assertTrue(mSolo.waitForText(toastStartRecord, 0, SHORT_TIME));
- mSolo.sleep(SHORT_TIME);
- FmRadioTestCaseUtil.unmountSDCard(mContext);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(WAIT_MOUNT_UNMOUNT);
- assertFalse(mSolo.searchButton(save, true));
- checkRecordNotSaveIdle();
-
- // click record after unmount
- clickView(mButtonRecord);
- assertTrue(mSolo.waitForText(toastSdCardMiss));
- checkRecordNotSaveIdle();
-
- // check mount sd card and stop recording, popup save dialog, then unmount sd card
- FmRadioTestCaseUtil.mountSDCard(mContext);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(WAIT_MOUNT_UNMOUNT);
- clickView(mButtonRecord);
- assertTrue(mSolo.waitForText(toastStartRecord, 0, SHORT_TIME));
- mSolo.sleep(SHORT_TIME);
- clickView(mButtonStop);
- mInstrumentation.waitForIdleSync();
- assertTrue(mSolo.searchButton(save, true));
- FmRadioTestCaseUtil.unmountSDCard(mContext);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(WAIT_MOUNT_UNMOUNT);
- assertFalse(mSolo.searchButton(save, true));
-
- // mount sdcard finally
- FmRadioTestCaseUtil.mountSDCard(mContext);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(WAIT_MOUNT_UNMOUNT);
- mInstrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
- mInstrumentation.waitForIdleSync();
- }
-
- // mount, unmount sd card when recording
- public void testCase16_mountUnmountWhenPlayback() {
- // mount sdcard first
- FmRadioTestCaseUtil.mountSDCard(mContext);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(WAIT_MOUNT_UNMOUNT);
-
- // record some and playback
- String save = mContext.getString(R.string.btn_save_recording);
- String error = mContext.getString(R.string.toast_player_internal_error);
- mSolo.sleep(SHORT_TIME);
- enterRecordingMode();
- mSolo.sleep(SHORT_TIME);
-
- clickView(mButtonRecord);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(RECORDING_FILE_TIME);
- clickView(mButtonStop);
- mInstrumentation.waitForIdleSync();
- assertTrue(mSolo.searchButton(save, true));
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- mSolo.clickOnButton(save);
- mSolo.sleep(SHORT_TIME);
- clickView(mButtonPlayback);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
-
- // unmount sd card
- FmRadioTestCaseUtil.unmountSDCard(mContext);
- mInstrumentation.waitForIdleSync();
- assertTrue(mSolo.waitForText(error, 0, WAIT_MOUNT_UNMOUNT));
- mSolo.sleep(WAIT_MOUNT_UNMOUNT);
- checkRecordNotSaveIdle();
- mSolo.sleep(SHORT_TIME);
-
- // mount sdcard finally
- FmRadioTestCaseUtil.mountSDCard(mContext);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(WAIT_MOUNT_UNMOUNT);
- }*/
-
- // check fm exit when power up state
- public void testCase17_FmExit() {
- boolean isPlaying = false;
- // test FM power down
- makeFMPowerUp();
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
-
- // test FM power up
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_power, 0);
- mSolo.sleep(SHORT_TIME);
- }
-
- // check fm back key when power down state
- public void testCase18_FmBackKeyExit() {
- boolean isPlaying = false;
- makeFMPowerUp();
- mInstrumentation.waitForIdleSync();
- FmRadioTestCaseUtil.requestFocusGain(mAudioManager);
- mSolo.sleep(SHORT_TIME);
- checkFMStopState();
- mSolo.goBack();
- mSolo.sleep(SHORT_TIME);
- }
-
- // check fm tune from channel list
- public void testCase19_relaunchFmTuneToStation() {
- boolean isPlaying = false;
- makeFMPowerUp();
- // add to favorite
- int station = 0;
- // test add channel as favorite
- station = FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency);
- deleteChannelFromFavorite(station);
- clickView(mButtonAddToFavorite);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- assertTrue(FmRadioStation.isFavoriteStation(mFmRadioActivity, station));
-
- // test FM power up
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_channel_list, 0);
- mSolo.sleep(SHORT_TIME);
- mInstrumentation.waitForIdleSync();
- FmRadioTestCaseUtil.requestFocusGain(mAudioManager);
- mSolo.sleep(SHORT_TIME);
-
- relaunchFm();
- mFmRadioFavorite = (FmRadioFavorite) mSolo.getCurrentActivity();
- mSolo = new Solo(mInstrumentation, mFmRadioFavorite);
- mContext = mFmRadioFavorite.getApplicationContext();
- station = FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency);
- String pStation = String.valueOf((float) station / CONVERT_RATE);
- mSolo.clickOnText(pStation);
- mInstrumentation.waitForIdleSync();
- // delete favorite
- deleteChannelFromFavorite(station);
- mSolo.sleep(SHORT_TIME);
- checkFMPlayingState();
- }
-
- // recorder. save same name recorder file
- public void testCase20_saveRecorderWithSameName() {
- enterRecordingMode();
- File sdDir = new File(FmRadioUtils.getDefaultStoragePath());
- File recordingFile = new File(sdDir.getPath() + "/FM Recording", "recorder_file.ogg");
- if (recordingFile.exists()) {
- recordingFile.delete();
- }
- mSolo.sleep(SHORT_TIME);
-
- // record some and playback
- String save = mContext.getString(R.string.btn_save_recording);
- String error = mContext.getString(R.string.toast_player_internal_error);
-
- // save recorder file
- clickView(mButtonRecord);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- clickView(mButtonStop);
- mInstrumentation.waitForIdleSync();
- assertTrue(mSolo.searchButton(save, true));
- mInstrumentation.waitForIdleSync();
- EditText editText = (EditText) mSolo.getView(R.id.fm_recording_text);
- mSolo.clearEditText(editText);
- mSolo.enterText(editText, "recorder_file");
- mInstrumentation.waitForIdleSync();
- InputMethodManager inputMethodManager = (InputMethodManager) mSolo.getCurrentActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- inputMethodManager.toggleSoftInput(0, 0);
- mSolo.clickOnButton(save);
- mSolo.sleep(SHORT_TIME);
-
- // save recorder file with same name
- clickView(mButtonRecord);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- clickView(mButtonStop);
- mInstrumentation.waitForIdleSync();
- assertTrue(mSolo.searchButton(save, true));
- mInstrumentation.waitForIdleSync();
- editText = (EditText) mSolo.getView(R.id.fm_recording_text);
- mSolo.clearEditText(editText);
- mSolo.enterText(editText, "recorder_file");
- mInstrumentation.waitForIdleSync();
- InputMethodManager inputMethodManager2 = (InputMethodManager) mSolo.getCurrentActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- inputMethodManager2.toggleSoftInput(0, 0);
- mSolo.clickOnButton(save);
-
- // check file has exist
- String hasFile = mContext.getString(R.string.already_exists);
- assertTrue(mSolo.waitForText(hasFile, 0, SHORT_TIME));
-
- // discard save record file
- String discard = mFmRadioActivity.getString(R.string.btn_discard_recording);
- mSolo.clickOnButton(discard);
- mInstrumentation.waitForIdleSync();
-// File sdDir = new File(FmRadioUtils.getInternalStoragePath());
-// File recordingFile = new File(sdDir.getPath() + "/FM Recording", "recorder_file");
- if (recordingFile.exists()) {
- recordingFile.delete();
- }
-
- checkRecordNotSaveIdle();
- }
-
- // check scan dialog, and fm is powerup sate when recreate
- private void checkRelaunchWhenScan() {
- Log.d(TAG, ">>> checkRelaunchWhenScan");
- startScanWhenPowerUp();
- //mSolo.sleep(ONE_SECOND);
- String cancel = mFmRadioActivity.getString(R.string.btn_cancel);
- boolean isVisible = mSolo.searchButton(cancel, true);
- assertTrue(isVisible);
-
- //relaunch after start scan
- relaunchFm();
- //mInstrumentation.waitForIdleSync();
- mSolo.sleep(ONE_SECOND);
- Log.d(TAG, "current activity:" + mSolo.getCurrentActivity().getComponentName());
- initialRel();
- mSolo.sleep(ONE_SECOND);
- //check dialog is shown after relaunch
- isVisible = mSolo.searchButton(cancel, true);
- assertTrue(isVisible);
- Log.d(TAG, "<<< checkRelaunchWhenScan");
- }
-
- private void relaunchFm() {
- mSolo.getCurrentActivity().runOnUiThread(new Runnable() {
-
- @Override
- public void run() {
- Log.d(TAG, "sub thread relaunchFm start");
- mSolo.getCurrentActivity().recreate();
- Log.d(TAG, "sub thread relaunchFm end");
- }
- });
- }
-
- private void enterRecordingMode() {
- if (!mButtonDecrease.isEnabled()) {
- makeFMPowerUp();
- }
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- mSolo.sleep(EXECUTE_TIME);
- String record = mFmRadioActivity.getString(R.string.optmenu_record);
- mSolo.clickOnText(record);
- mInstrumentation.waitForIdleSync();
- }
-
- // check ui and state when no recording file saved.
- public void checkRecordNotSaveIdle() {
- assertTrue(mButtonRecord.isEnabled());
- assertFalse(mButtonPlayback.isEnabled());
- assertFalse(mButtonStop.isEnabled());
- assertTrue(mButtonAddToFavorite.getVisibility() == View.GONE);
- }
-
- // check ui and state while recording.
- public void checkRecordingState() {
- assertFalse(mButtonRecord.isEnabled());
- assertFalse(mButtonPlayback.isEnabled());
- assertTrue(mButtonStop.isEnabled());
- assertTrue(mButtonAddToFavorite.getVisibility() == View.GONE);
- }
-
- // check ui and state when recording stop
- public void checkRecordingStopState() {
- mButtonRecordSave = (Button) mSolo.getView(R.id.fm_recording_btn_save);
- assertTrue(mButtonRecordSave.isEnabled());
- assertTrue(mButtonAddToFavorite.getVisibility() == View.GONE);
- }
-
- // check ui and state when save an recording file.
- public void checkRecordHasSavedIdle() {
- assertTrue(mButtonRecord.isEnabled());
- assertTrue(mButtonPlayback.isEnabled());
- assertFalse(mButtonStop.isEnabled());
- assertTrue(mButtonAddToFavorite.getVisibility() == View.GONE);
- }
-
- // check ui and state while playing back an recordfing file.
- public void checkPlayingBackState() {
- assertFalse(mButtonRecord.isEnabled());
- assertFalse(mButtonPlayback.isEnabled());
- assertTrue(mButtonStop.isEnabled());
- assertTrue(mButtonAddToFavorite.getVisibility() == View.GONE);
- }
-
- // check ui and state when play back an recording file finish.
- public void checkPlayingBackFinished() {
- assertTrue(mButtonRecord.isEnabled());
- assertTrue(mButtonPlayback.isEnabled());
- assertFalse(mButtonStop.isEnabled());
- assertTrue(mButtonAddToFavorite.getVisibility() == View.GONE);
- }
-
- // check state, if cancel scan
- public void checkCancelScan() {
- mSolo.sleep(SHORT_TIME);
- String cancel = mFmRadioActivity.getString(R.string.btn_cancel);
- mSolo.clickOnText(cancel);
- mInstrumentation.waitForIdleSync();
- int currentStation = (Integer) FmRadioTestCaseUtil
- .getVariableFromActivity(mFmRadioActivity, "mCurrentStation");
- assertEquals(currentStation,
- FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency));
- mSolo.sleep(SHORT_TIME);
- }
-
- // check state, if finish scan
- public void checkFinishScan() {
- Log.d(TAG, ">>> checkFinishScan");
- //mInstrumentation.waitForIdleSync();
- mActivityMonitor = mInstrumentation.addMonitor(
- FmRadioFavorite.class.getName(), null, false);
- Log.d(TAG, "current activity:" + mSolo.getCurrentActivity().getComponentName());
- mFmRadioFavorite = (FmRadioFavorite) mInstrumentation
- .waitForMonitorWithTimeout(mActivityMonitor, SEARCH_TIME);
- mSolo.sleep(SHORT_TIME);
- Log.d(TAG, "mFmRadioFavorite is " + mFmRadioFavorite);
- assertNotNull(mFmRadioFavorite);
-
- // test data in database.
- Uri uri = Uri.parse(CONTENTURI);
- Cursor c = mFmRadioFavorite.getContentResolver().query(
- uri,
- new String[] { FmRadioStation.Station._ID,
- FmRadioStation.Station.COLUMN_STATION_FREQ,
- FmRadioStation.Station.COLUMN_STATION_TYPE }, null,
- null, null);
- assertTrue(c != null && c.getCount() > 0);
- int stationFreq = 0;
- int stationType = 0;
- if (c != null) {
- c.moveToFirst();
- while (!c.isAfterLast()) {
- stationFreq = c.getInt(1);
- stationType = c.getInt(2);
- Log.d(TAG, "station =" + stationFreq);
- if (FmRadioStation.STATION_TYPE_SEARCHED == stationType) {
- assertTrue(FmRadioTestCaseUtil.isExistInChannelList(
- mFmRadioFavorite, stationFreq));
- }
- c.moveToNext();
- }
- }
- if (c != null) {
- c.close();
- }
-
- // click the last station in listview to play.
- String pStation = String.valueOf((float) stationFreq / CONVERT_RATE);
- mSolo.clickOnText(pStation);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- assertEquals(stationFreq,
- FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency));
-
- checkFMPlayingState();
- }
-
- private void switchEarphone() {
- if (!mButtonDecrease.isEnabled()) {
- makeFMPowerUp();
- }
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- String earphone = mFmRadioActivity.getString(R.string.optmenu_earphone);
- mSolo.clickOnText(earphone);
- mInstrumentation.waitForIdleSync();
- }
-
- private void switchSpeaker() {
- if (!mButtonDecrease.isEnabled()) {
- makeFMPowerUp();
- }
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- String speaker = mFmRadioActivity.getString(R.string.optmenu_speaker);
- mSolo.clickOnText(speaker);
- mInstrumentation.waitForIdleSync();
- }
-
- private void deleteChannelFromFavorite(int station) {
- if (FmRadioStation.isFavoriteStation(mFmRadioActivity, station)) {
- clickView(mButtonAddToFavorite);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- }
- }
-
- private void addChannelAsFavorite(int station) {
- if (!FmRadioStation.isFavoriteStation(mFmRadioActivity, station)) {
- clickView(mButtonAddToFavorite);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- }
-
- }
-
- private void makeFMPowerUp() {
- boolean isPlaying = false;
- isPlaying = (Boolean) FmRadioTestCaseUtil.getVariableFromActivity(
- mFmRadioActivity, "mIsPlaying");
- if (!isPlaying) {
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_power, 0);
- }
- //mInstrumentation.waitForIdleSync();
- mSolo.sleep(TIMEOUT);
- }
-
- private void makeFMPowerDown() {
- boolean isPlaying = true;
- isPlaying = (Boolean) FmRadioTestCaseUtil.getVariableFromActivity(
- mFmRadioActivity, "mIsPlaying");
- if (isPlaying) {
- FmRadioTestCaseUtil.requestFocusGain(mAudioManager);
- }
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(SHORT_TIME);
- }
-
- private void clickView(final View view) {
- try {
- runTestOnUiThread(new Runnable() {
- @Override
- public void run() {
- view.performClick();
- }
- });
- } catch (Throwable t) {
- t.printStackTrace();
- }
- }
-
- private void waitForInitedWithTimeout(long timeOut) {
- long startTime = System.currentTimeMillis();
- boolean isInited = (Boolean) FmRadioTestCaseUtil
- .getVariableFromMethod(mFmRadioActivity, "isServiceInited");
- while (!isInited) {
- if (System.currentTimeMillis() - startTime > timeOut) {
- break;
- }
- mSolo.sleep(CHECK_TIME);
- }
- }
-
- private void waitForPowerupWithTimeout(long timeOut) {
-
- long startTime = System.currentTimeMillis();
- boolean isPlaying = (Boolean) FmRadioTestCaseUtil
- .getVariableFromActivity(mFmRadioActivity, "mIsPlaying");
- while (!isPlaying) {
- if (System.currentTimeMillis() - startTime > timeOut) {
- break;
- }
- mSolo.sleep(CHECK_TIME);
- }
- }
-
- // start scan when power up state
- private void startScanWhenPowerUp() {
- if (!mButtonDecrease.isEnabled()) {
- makeFMPowerUp();
- }
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- mInstrumentation.waitForIdleSync();
- mSolo.sleep(ONE_SECOND);
- String search = mFmRadioActivity.getString(R.string.optmenu_search);
- mSolo.clickOnText(search);
- }
-
- // check play FM layout button enable
- public void checkFMPlayingState() {
- assertTrue(mButtonDecrease.isEnabled());
- assertTrue(mButtonIncrease.isEnabled());
- assertTrue(mButtonNextStation.isEnabled());
- assertTrue(mButtonPrevStation.isEnabled());
-
- }
-
- // check play FM layout button enable
- public void checkFMStopState() {
- assertFalse(mButtonDecrease.isEnabled());
- assertFalse(mButtonPrevStation.isEnabled());
- assertFalse(mButtonNextStation.isEnabled());
- assertFalse(mButtonIncrease.isEnabled());
- }
-
- public void initialRel() {
- mFmRadioActivity = (FmRadioActivity) mSolo.getCurrentActivity();
- mSolo = new Solo(mInstrumentation, mFmRadioActivity);
- mContext = mFmRadioActivity.getApplicationContext();
- assertNotNull(mFmRadioActivity);
- mButtonPrevStation = (ImageButton) mFmRadioActivity.findViewById(R.id.button_prevstation);
- mButtonNextStation = (ImageButton) mFmRadioActivity.findViewById(R.id.button_nextstation);
- mButtonDecrease = (ImageButton) mFmRadioActivity.findViewById(R.id.button_decrease);
- mButtonIncrease = (ImageButton) mFmRadioActivity.findViewById(R.id.button_increase);
-
- mButtonAddToFavorite = (ImageButton) mFmRadioActivity
- .findViewById(R.id.button_add_to_favorite);
-
- mTextViewFrequency = (TextView) mFmRadioActivity
- .findViewById(R.id.station_value);
- }
-
- @Override
- protected void tearDown() {
- mSolo.finishOpenedActivities();
- mInstrumentation.waitForIdleSync();
- FmRadioTestCaseUtil.sleep(WAIT_TEAR_DOWN);
- try {
- mSolo.finalize();
- } catch (Throwable t) {
- t.printStackTrace();
- }
- try {
- super.tearDown();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
-}
diff --git a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioFavoriteTest.java b/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioFavoriteTest.java
deleted file mode 100755
index 841a727..0000000
--- a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioFavoriteTest.java
+++ /dev/null
@@ -1,261 +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.
- */
-
-package com.mediatek.fmradio.tests;
-import android.app.Instrumentation;
-import android.test.ActivityInstrumentationTestCase2;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.EditText;
-import android.widget.ListAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.content.Context;
-
-import com.jayway.android.robotium.solo.Solo;
-import com.mediatek.fmradio.FmRadioActivity;
-import com.mediatek.fmradio.FmRadioFavorite;
-import com.mediatek.fmradio.FmRadioStation;
-import com.mediatek.fmradio.R;
-
-
-public class FmRadioFavoriteTest extends
- ActivityInstrumentationTestCase2 {
- private Solo mSolo = null;
- private TextView mTextViewFrequency = null;
- private FmRadioFavorite mFmRadioFavorite = null;
- private FmRadioActivity mFmRadioActivity = null;
- private Context mContext = null;
- private Instrumentation mInstrumentation = null;
- private static final int CONVERT_RATE = 10;
- private static final long SLEEP_TIME = 2000;
-
- public FmRadioFavoriteTest() {
- super("com.mediatek.fmradio", FmRadioFavorite.class);
- }
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- mSolo = new Solo(getInstrumentation(), getActivity());
- mInstrumentation = getInstrumentation();
- mFmRadioFavorite = (FmRadioFavorite) getActivity();
- mContext = mFmRadioFavorite.getApplicationContext();
- }
- public void testCase01_AddToFavorite() {
- boolean find = false;
- float frequency = 0;
- int stationInList = 0;
- ListView listView = (ListView) mFmRadioFavorite.findViewById(R.id.station_list);
- FmRadioTestCaseUtil.sleep(SLEEP_TIME);
- assertTrue((listView != null) && (listView.getCount() > 0));
- ListAdapter listAdapter = listView.getAdapter();
- for (int i = 0; i < listView.getCount(); i++) {
- View view = listAdapter.getView(i, null, listView);
- TextView textView = (TextView) view.findViewById(R.id.lv_station_freq);
- String frequencyStr = textView.getText().toString();
- try {
- frequency = Float.parseFloat(frequencyStr);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- stationInList = (int) (frequency * CONVERT_RATE);
- if (!FmRadioStation.isFavoriteStation(mFmRadioFavorite, stationInList)) {
- mSolo.clickLongOnText(frequencyStr);
- mSolo.clickOnText(FmRadioTestCaseUtil.getProjectString(mContext, R.string.add_to_favorite1, R.string.add_to_favorite));
- mInstrumentation.waitForIdleSync();
- InputMethodManager inputMethodManager = (InputMethodManager) mSolo.getCurrentActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- inputMethodManager.toggleSoftInput(0, 0);
- mSolo.clickOnButton(mContext.getString(R.string.btn_ok));
- mInstrumentation.waitForIdleSync();
- sleep(SLEEP_TIME);
- assertTrue(FmRadioStation.isFavoriteStation(mFmRadioFavorite, stationInList));
- return ;
- }
- }
-
- }
- public void testCase02_EditFavoriteChannel() {
- boolean find = false;
- float frequency = 0;
- int stationInList = 0;
- ListView listView = (ListView) mFmRadioFavorite.findViewById(R.id.station_list);
- FmRadioTestCaseUtil.sleep(SLEEP_TIME);
- assertTrue((listView != null) && (listView.getCount() > 0));
- ListAdapter listAdapter = listView.getAdapter();
- for (int i = 0; i < listView.getCount(); i++) {
- View view = listAdapter.getView(i, null, listView);
- TextView textView = (TextView) view.findViewById(R.id.lv_station_freq);
- String frequencyStr = textView.getText().toString();
- try {
- frequency = Float.parseFloat(frequencyStr);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- stationInList = (int) (frequency * CONVERT_RATE);
- if (FmRadioStation.isFavoriteStation(mFmRadioFavorite, stationInList)) {
- mSolo.clickLongOnText(frequencyStr);
- mSolo.clickOnText(mContext.getString(R.string.contmenu_item_edit));
- EditText editText = (EditText) mSolo.getView(R.id.dlg_edit_station_name_text);
- mSolo.clearEditText(editText);
- mSolo.enterText(editText, "aaa");
- mInstrumentation.waitForIdleSync();
- InputMethodManager inputMethodManager = (InputMethodManager) mSolo.getCurrentActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- inputMethodManager.toggleSoftInput(0, 0);
- mSolo.clickOnButton(mContext.getString(R.string.edit_frequency_overwrite_text));
- mInstrumentation.waitForIdleSync();
- sleep(SLEEP_TIME);
- assertEquals("aaa", FmRadioStation.getStationName(mFmRadioFavorite, stationInList, FmRadioStation.STATION_TYPE_FAVORITE));
- return ;
- }
- }
- }
- public void testCase03_DeleteFromFavorite() throws Throwable {
- boolean find = false;
- float frequency = 0;
- int stationInList = 0;
- final ListView listView = (ListView) mFmRadioFavorite.findViewById(R.id.station_list);
- FmRadioTestCaseUtil.sleep(SLEEP_TIME);
- assertTrue((listView != null) && (listView.getCount() > 0));
- ListAdapter listAdapter = listView.getAdapter();
- for (int i = 0; i < listView.getCount(); i++) {
- View view = listAdapter.getView(i, null, listView);
- TextView textView = (TextView) view.findViewById(R.id.lv_station_freq);
- String frequencyStr = textView.getText().toString();
- try {
- frequency = Float.parseFloat(frequencyStr);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- stationInList = (int) (frequency * CONVERT_RATE);
- if (FmRadioStation.isFavoriteStation(mFmRadioFavorite, stationInList)) {
- runTestOnUiThread(new Runnable() {
- @Override
- public void run() {
- listView.setSelection(0);
- }
- });
- mSolo.sleep(3000);
- mSolo.clickLongOnText(frequencyStr);
- mSolo.clickOnText(FmRadioTestCaseUtil.getProjectString(mContext, R.string.contmenu_item_delete1, R.string.contmenu_item_delete));
- mInstrumentation.waitForIdleSync();
- mSolo.clickOnButton(mContext.getString(R.string.btn_ok));
- mInstrumentation.waitForIdleSync();
- sleep(SLEEP_TIME);
- assertFalse(FmRadioStation.isFavoriteStation(mFmRadioFavorite, stationInList));
- return ;
- }
- }
- }
-
- // edit a favorite to a favorite frequency
- public void testCase04_EditFavoriteToFavorite() throws Throwable {
- boolean find = false;
- float frequency = 0;
- int stationInList = 0;
- String preFavoritaFreq = "";
- ListView listView = (ListView) mFmRadioFavorite.findViewById(R.id.station_list);
- FmRadioTestCaseUtil.sleep(SLEEP_TIME);
- assertTrue((listView != null) && (listView.getCount() > 0));
- ListAdapter listAdapter = listView.getAdapter();
- int count = listView.getCount();
- for (int i = 0; i < count; i++) {
- int favoriateCount = 0;
- View view = listAdapter.getView(i, null, listView);
- TextView textView = (TextView) view.findViewById(R.id.lv_station_freq);
- String frequencyStr = textView.getText().toString();
- try {
- frequency = Float.parseFloat(frequencyStr);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- stationInList = (int) (frequency * CONVERT_RATE);
- if (FmRadioStation.isFavoriteStation(mFmRadioFavorite, stationInList)) {
- favoriateCount += 1;
- preFavoritaFreq = frequencyStr;
- }
- // add to favoriate
- if (!FmRadioStation.isFavoriteStation(mFmRadioFavorite, stationInList)) {
- mSolo.clickLongOnText(frequencyStr);
- mSolo.clickOnText(FmRadioTestCaseUtil.getProjectString(mContext, R.string.add_to_favorite1, R.string.add_to_favorite));
- mInstrumentation.waitForIdleSync();
- InputMethodManager inputMethodManager = (InputMethodManager) mSolo.getCurrentActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- inputMethodManager.toggleSoftInput(0, 0);
- mSolo.clickOnButton(mContext.getString(R.string.btn_ok));
- mInstrumentation.waitForIdleSync();
- sleep(SLEEP_TIME);
- assertTrue(FmRadioStation.isFavoriteStation(mFmRadioFavorite, stationInList));
- // edit favoriate to exist favorite
- if (favoriateCount > 0) {
- mSolo.clickLongOnText(frequencyStr);
- mSolo.clickOnText(mContext.getString(R.string.contmenu_item_edit));
- EditText editText = (EditText) mSolo.getView(R.id.dlg_edit_station_name_text);
- mSolo.clearEditText(editText);
- mSolo.enterText(editText, preFavoritaFreq);
- mInstrumentation.waitForIdleSync();
- InputMethodManager inputMethodManager2 = (InputMethodManager) mSolo.getCurrentActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- inputMethodManager2.toggleSoftInput(0, 0);
- mSolo.clickOnButton(mContext.getString(R.string.btn_ok));
- mInstrumentation.waitForIdleSync();
- sleep(SLEEP_TIME);
- assertEquals(preFavoritaFreq, FmRadioStation.getStationName(mFmRadioFavorite, stationInList, FmRadioStation.STATION_TYPE_FAVORITE));
- break;
- }
- }
- }
- testCase03_DeleteFromFavorite();
- }
-
- private void sleep(long milliseconds) {
- try {
- Thread.sleep(milliseconds);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- protected void tearDown() throws Exception {
- FmRadioTestCaseUtil.sleep(SLEEP_TIME);
- try {
- mSolo.finalize();
- } catch (Throwable t) {
- t.printStackTrace();
- }
- super.tearDown();
- }
-
-}
diff --git a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioFunctionRunner.java b/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioFunctionRunner.java
deleted file mode 100755
index 7658b2f..0000000
--- a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioFunctionRunner.java
+++ /dev/null
@@ -1,59 +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.
- */
-
-package com.mediatek.fmradio.tests;
-
-import junit.framework.TestSuite;
-
-import android.test.InstrumentationTestRunner;
-import android.test.InstrumentationTestSuite;
-
-public class FmRadioFunctionRunner extends InstrumentationTestRunner {
- @Override
- public TestSuite getAllTests() {
- InstrumentationTestSuite suite = new InstrumentationTestSuite(this);
- suite.addTestSuite(FmRadioActivityTest.class);
- suite.addTestSuite(FmRadioFavoriteTest.class);
- return suite;
- }
-
- @Override
- public ClassLoader getLoader() {
- return FmRadioFunctionRunner.class.getClassLoader();
- }
-
-}
diff --git a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioLaunchPerformance.java b/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioLaunchPerformance.java
deleted file mode 100755
index 828690c..0000000
--- a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioLaunchPerformance.java
+++ /dev/null
@@ -1,59 +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.
- */
-
-package com.mediatek.fmradio.tests;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.test.LaunchPerformanceBase;
-
-public class FmRadioLaunchPerformance extends LaunchPerformanceBase {
- @Override
- public void onCreate(Bundle arguments) {
- super.onCreate(arguments);
- mIntent.setClassName(getTargetContext(),
- "com.mediatek.fmradio.FmRadioActivity");
- start();
- }
-
- @Override
- public void onStart() {
- super.onStart();
- LaunchApp();
- finish(Activity.RESULT_OK, mResults);
- }
-}
\ No newline at end of file
diff --git a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioPerformanceRunner.java b/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioPerformanceRunner.java
deleted file mode 100755
index ad25cd4..0000000
--- a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioPerformanceRunner.java
+++ /dev/null
@@ -1,57 +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.
- */
-
-package com.mediatek.fmradio.tests;
-
-import junit.framework.TestSuite;
-import android.test.InstrumentationTestRunner;
-import android.test.InstrumentationTestSuite;
-
-public class FmRadioPerformanceRunner extends InstrumentationTestRunner {
- @Override
- public TestSuite getAllTests() {
- InstrumentationTestSuite suite = new InstrumentationTestSuite(this);
- suite.addTestSuite(FmRadioPerformanceTest.class);
- return suite;
- }
-
- @Override
- public ClassLoader getLoader() {
- return FmRadioPerformanceRunner.class.getClassLoader();
- }
-
-}
diff --git a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioPerformanceTest.java b/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioPerformanceTest.java
deleted file mode 100755
index 7bc3bf0..0000000
--- a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioPerformanceTest.java
+++ /dev/null
@@ -1,554 +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.
- */
-
-package com.mediatek.fmradio.tests;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import android.app.Activity;
-import android.app.Instrumentation;
-import android.content.Context;
-import android.media.AudioManager;
-import android.test.ActivityInstrumentationTestCase2;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.EditText;
-import android.widget.ImageButton;
-import android.widget.ListAdapter;
-import android.widget.TextView;
-import android.widget.ListView;
-import android.app.Instrumentation.ActivityMonitor;
-import com.jayway.android.robotium.solo.Solo;
-
-import com.mediatek.fmradio.FmRadioActivity;
-import com.mediatek.fmradio.FmRadioFavorite;
-import com.mediatek.fmradio.FmRadioStation;
-import com.mediatek.fmradio.R;
-
-public class FmRadioPerformanceTest extends ActivityInstrumentationTestCase2 {
-
- public FmRadioPerformanceTest(Class activityClass) {
- super(activityClass);
- }
-
- public FmRadioPerformanceTest() {
- super(FmRadioActivity.class);
- }
-
- private AudioManager mAudioManager = null;
-
- // bottom bar
- private ImageButton mButtonDecrease = null;
- private ImageButton mButtonPrevStation = null;
- private ImageButton mButtonNextStation = null;
- private ImageButton mButtonIncrease = null;
-// private ImageButton mButtonPlayStop = null;
-
- private ImageButton mButtonAddToFavorite = null;
-
- private TextView mTextViewFrequency = null;
-
- private static final long TIMEOUT = 5000;
- private static final long CHECK_TIME = 100;
- private static final long SHORT_TIME = 3000;
- private static final long WAIT_UI_STATE_CHANGE = 10000;
- private static final long WAIT_SCAN_FINISH = 20000;
- private static final long WAIT_TEAR_DOWN = 3000;
- private static final long SLEEP_TIME = 2000;
- private static final long RDS_TIME_OUT = 10 * 60 * 1000;
- private static final int CONVERT_RATE = 10;
- private static final int EXECUTE_TIME = 500;
- private static final String TAG = "FmRadioPerformanceTest";
-
- private FmRadioActivity mFmRadioActivity = null;
- private Instrumentation mInstrumentation = null;
- private ActivityMonitor mActivityMonitor = null;
- private FmRadioFavorite mFmRadioFavorite = null;
- private Solo mSolo = null;
-
- @Override
- public void setUp() throws Exception {
- super.setUp();
- Log.i(TAG, "setUp");
- setActivityInitialTouchMode(false);
- mFmRadioActivity = getActivity();
- assertNotNull(mFmRadioActivity);
- mInstrumentation = getInstrumentation();
- assertNotNull(mInstrumentation);
- mSolo = new Solo(getInstrumentation(), mFmRadioActivity);
- Context mContext = mFmRadioActivity.getApplicationContext();
- mAudioManager = (AudioManager) mFmRadioActivity.getSystemService(mContext.AUDIO_SERVICE);
- // Makesure FmRadio is playing and initialed
- waitForPowerupWithTimeout(TIMEOUT);
- boolean isPlaying = getBooleanFromVariable(mFmRadioActivity, "mIsPlaying");
- assertTrue(isPlaying);
- waitForInitedWithTimeout(TIMEOUT);
- boolean isInited = getBooleanFromVariable(mFmRadioActivity, "mIsServiceBinded");
- assertTrue(isInited);
- mButtonDecrease = (ImageButton) mFmRadioActivity.findViewById(R.id.button_decrease);
- mButtonPrevStation = (ImageButton) mFmRadioActivity.findViewById(R.id.button_prevstation);
- mButtonNextStation = (ImageButton) mFmRadioActivity.findViewById(R.id.button_nextstation);
- mButtonIncrease = (ImageButton) mFmRadioActivity.findViewById(R.id.button_increase);
-// mButtonPlayStop = (ImageButton) mFmRadioActivity.findViewById(R.id.button_play_stop);
-
- mButtonAddToFavorite = (ImageButton) mFmRadioActivity.findViewById(R.id.button_add_to_favorite);
- mTextViewFrequency = (TextView) mFmRadioActivity.findViewById(R.id.station_value);
- }
-
-
- private void waitForInitedWithTimeout(long timeOut) {
- Log.i(TAG, ">>>waitForInitedWithTimeout");
-
- long startTime = System.currentTimeMillis();
- while (!getBooleanFromVariable(mFmRadioActivity, "mIsServiceBinded")) {
- if (System.currentTimeMillis() - startTime > timeOut) {
- break;
- }
- sleep(CHECK_TIME);
- }
- Log.i(TAG, "<<>>waitForPowerupWithTimeout");
-
- long startTime = System.currentTimeMillis();
- while (!getBooleanFromVariable(mFmRadioActivity, "mIsPlaying")) {
- if (System.currentTimeMillis() - startTime > timeOut) {
- break;
- }
- sleep(CHECK_TIME);
- }
- Log.i(TAG, "<< currentStation) {
- stationGap = searchStation - currentStation;
- Log.i(TAG, "[Performance test][FmRadio] Test FmRadio seek time stationStep [" + (float) stationGap / CONVERT_RATE + "]");
- } else if (searchStation < currentStation) {
- stationGap = FmRadioTestCaseUtil.HIGHEST_STATION - currentStation + searchStation - FmRadioTestCaseUtil.LOWEST_STATION;
- Log.i(TAG, "[Performance test][FmRadio] Test FmRadio seek time stationStep [" + (float) stationGap / CONVERT_RATE + "]");
- } else {
- Log.e(TAG, "SearchStation Unchanged");
- }
- // test seek next station frequency performance
- currentStation = FmRadioStation.getCurrentStation(mFmRadioActivity);
- startTime = System.currentTimeMillis();
- Log.i(TAG, "[Performance test][FmRadio] seek next channel start [" + startTime + "]");
- clickView(mButtonNextStation);
- sleep(WAIT_UI_STATE_CHANGE);
- if (searchStation > currentStation) {
- stationGap = searchStation - currentStation;
- Log.i(TAG, "[Performance test][FmRadio] Test FmRadio seek time stationStep [" + (float) stationGap / CONVERT_RATE + "]");
- } else if (searchStation < currentStation) {
- stationGap = FmRadioTestCaseUtil.HIGHEST_STATION - currentStation + searchStation - FmRadioTestCaseUtil.LOWEST_STATION;
- Log.i(TAG, "[Performance test][FmRadio] Test FmRadio seek time stationStep [" + (float) stationGap / CONVERT_RATE + "]");
- } else {
- Log.e(TAG, "SearchStation Unchanged");
- }
- }
-
- /**
- * Test switch earphone and speaker performance.
- */
- public void testCase04_SwitchSpeakerEarphone() throws Exception {
- if (!mButtonDecrease.isEnabled()) {
- makeFMPowerUp();
- }
- String earphone = mFmRadioActivity.getString(R.string.optmenu_earphone);
- String speaker = mFmRadioActivity.getString(R.string.optmenu_speaker);
-
- sleep(SHORT_TIME);
- // test switch speaker performance
- mInstrumentation.invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- mSolo.clickOnText(speaker);
- sleep(SHORT_TIME);
- mInstrumentation.invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- assertTrue(mSolo.searchText(earphone));
- mInstrumentation.waitForIdleSync();
-
- // test switch earphone performance
- mInstrumentation.invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- mSolo.clickOnText(earphone);
- sleep(SHORT_TIME);
- mInstrumentation.invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- assertTrue(mSolo.searchText(speaker));
- }
-
- /**
- * Test power up performance.
- */
- public void testCase05_PowerUpPerformance() throws Exception {
- if (mButtonDecrease.isEnabled()) {
- makeFMPowerDown();
- }
- // test power up performance
- long startTime = System.currentTimeMillis();
- Log.i(TAG, "[Performance test][FmRadio] power up start [" + startTime + "]");
-// clickView(mButtonPlayStop);
- mInstrumentation.invokeMenuActionSync(mFmRadioActivity, R.id.fm_power, 0);
- sleep(WAIT_UI_STATE_CHANGE);
- }
-
- /**
- * Test get rds performance
- * start time: tune to 91.4 finished
- * end time: rds information show
- */
- public void testCase06_RDSPerformance() {
- int station = 0;
- // test add channel as favorite
- station = FmRadioTestCaseUtil.getStationFromUI(mTextViewFrequency);
- if (!FmRadioStation.isFavoriteStation(mFmRadioActivity, station)) {
- clickView(mButtonAddToFavorite);
- mInstrumentation.waitForIdleSync();
- FmRadioTestCaseUtil.sleep(SHORT_TIME);
- }
-
- // enter channel list
- mInstrumentation.invokeMenuActionSync(mFmRadioActivity,
- R.id.fm_channel_list, 0);
- mActivityMonitor = new ActivityMonitor(
- "com.mediatek.fmradio.FmRadioFavorite", null, false);
- mInstrumentation.addMonitor(mActivityMonitor);
- mFmRadioFavorite = (FmRadioFavorite) mActivityMonitor
- .waitForActivityWithTimeout(TIMEOUT);
- assertNotNull(mFmRadioFavorite);
- // edit this station to rds station91.4
- float frequency = 0;
- int stationInList = 0;
- ListView listView = (ListView) mFmRadioFavorite.findViewById(R.id.station_list);
- FmRadioTestCaseUtil.sleep(SLEEP_TIME);
- assertTrue((listView != null) && (listView.getCount() > 0));
- ListAdapter listAdapter = listView.getAdapter();
- for (int i = 0; i < listView.getCount(); i++) {
- View view = listAdapter.getView(i, null, listView);
- TextView textView = (TextView) view.findViewById(R.id.lv_station_freq);
- String frequencyStr = textView.getText().toString();
- try {
- frequency = Float.parseFloat(frequencyStr);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- stationInList = (int) (frequency * CONVERT_RATE);
- if (FmRadioStation.isFavoriteStation(mFmRadioFavorite, stationInList)) {
- mSolo.clickLongOnText(frequencyStr);
- mSolo.clickOnText(mFmRadioFavorite.getString(R.string.contmenu_item_edit));
- EditText editText = (EditText) mSolo.getView(R.id.dlg_edit_station_freq_text);
- mSolo.clearEditText(editText);
- mSolo.enterText(editText, "91.4");
- mInstrumentation.waitForIdleSync();
- InputMethodManager inputMethodManager = (InputMethodManager) mSolo.getCurrentActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- inputMethodManager.toggleSoftInput(0, 0);
- if (FmRadioStation.isStationExistInChList(mFmRadioFavorite, 914)) {
- mSolo.clickOnText(mFmRadioFavorite.getString(R.string.edit_frequency_overwrite_text));
- } else {
- mSolo.clickOnText(mFmRadioFavorite.getString(R.string.btn_ok));
- }
- mInstrumentation.waitForIdleSync();
- sleep(SLEEP_TIME);
-// assertEquals("aaa", FmRadioStation.getStationName(mFmRadioFavorite, stationInList, FmRadioStation.STATION_TYPE_FAVORITE));
- break;
- }
- }
-
- // tune to RDS station 91.4
- mSolo.clickOnText("91.4");
- long startTuneTime = System.currentTimeMillis();
- Log.i(TAG, "[Performance test][FmRadio] open channel start [" + startTuneTime + "]");
- mInstrumentation.waitForIdleSync();
- // test increase frequency performance
- long startTime = System.currentTimeMillis();
- Log.i(TAG, "[Performance test][FmRadio] receive RDS start [" + startTime + "]");
-
- // check RDS info is change
- final TextView rdsTextView = (TextView) FmRadioTestCaseUtil.getVariableFromActivity(mFmRadioActivity, "mTextRDS");
- long scapeTime = 0;
- while (true) {
- String rdsInfo = rdsTextView.getText().toString();
- if (!"".equals(rdsInfo)) {
- long endTime = System.currentTimeMillis();
- Log.i(TAG, "[Performance test][FmRadio] receive RDS end [" + endTime + "]");
- break;
- }
- try {
- scapeTime = System.currentTimeMillis() - startTime;
- sleep(CHECK_TIME);
- } catch (Exception e) {
- }
- // if time > 10min, end time will be 10min
- if (scapeTime > RDS_TIME_OUT) {
- long endTime = System.currentTimeMillis();
- Log.i(TAG, "[Performance test][FmRadio] receive RDS end [" + endTime + "]");
- break;
- }
- }
- }
-
- public void testCase07_PowerDownPerformance() throws Exception {
- if (!mButtonDecrease.isEnabled()) {
- makeFMPowerUp();
- }
- // test power down performance
- long startTime = System.currentTimeMillis();
- Log.i(TAG, "[Performance test][FmRadio] power down start [" + startTime + "]");
- FmRadioTestCaseUtil.requestFocusGain(mAudioManager);
- sleep(WAIT_UI_STATE_CHANGE);
- }
-
- private void makeFMPowerUp() {
- boolean isPlaying = false;
- isPlaying = getBooleanFromVariable(mFmRadioActivity, "mIsPlaying");
- if (!isPlaying) {
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_power, 0);
- }
- sleep(WAIT_UI_STATE_CHANGE);
-
- }
-
- private void makeFMPowerDown() {
- boolean isPlaying = true;
- isPlaying = getBooleanFromVariable(mFmRadioActivity, "mIsPlaying");
- if (isPlaying) {
- FmRadioTestCaseUtil.requestFocusGain(mAudioManager);
- }
- sleep(WAIT_UI_STATE_CHANGE);
-
- }
-
- private void switchEarphone() {
- if (!mButtonDecrease.isEnabled()) {
- makeFMPowerUp();
- }
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- String earphone = mFmRadioActivity.getString(R.string.optmenu_earphone);
- mSolo.clickOnText(earphone);
- mInstrumentation.waitForIdleSync();
- }
-
- private void switchSpeaker() {
- if (!mButtonDecrease.isEnabled()) {
- makeFMPowerUp();
- }
- mInstrumentation
- .invokeMenuActionSync(mFmRadioActivity, R.id.fm_menu, 0);
- String speaker = mFmRadioActivity.getString(R.string.optmenu_speaker);
- mSolo.clickOnText(speaker);
- mInstrumentation.waitForIdleSync();
-
- }
-
- private boolean getBooleanFromVariable(Activity activity, String variable) {
- Field field = null;
- boolean value = false;
- try {
- field = FmRadioActivity.class.getDeclaredField(variable);
- field.setAccessible(true);
- value = ((Boolean) field.get(activity)).booleanValue();
- } catch (SecurityException e) {
- e.printStackTrace();
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return value;
- }
-
- private boolean getBooleanFromMethod(Activity activity, String method) {
-
- boolean value = false;
- Class c = mFmRadioActivity.getClass();
- try {
- Method m = (Method) c.getDeclaredMethod(method, new Class[] {});
- m.setAccessible(true);
- value = (Boolean) m.invoke(activity, new Object[] {});
- } catch (SecurityException e) {
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- return value;
- }
-
- private void clickView(final View view) {
- try {
- runTestOnUiThread(new Runnable() {
- public void run() {
- view.performClick();
-
- }
- });
- } catch (Throwable t) {
- t.printStackTrace();
- }
- }
-
- private void sleep(long milliseconds) {
- try {
- Thread.sleep(milliseconds);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-
- private void addChannelAsFavorite(int station) {
- if (!FmRadioStation.isFavoriteStation(mFmRadioActivity, station)) {
- clickView(mButtonAddToFavorite);
- mInstrumentation.waitForIdleSync();
- sleep(SHORT_TIME);
- }
-
- }
-
- private int getStationFromUI() {
- int station = 0;
- float frequency = 0;
- mTextViewFrequency = (TextView) mFmRadioActivity.findViewById(R.id.station_value);
- String frequencyStr = mTextViewFrequency.getText().toString();
- try {
- frequency = Float.parseFloat(frequencyStr);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- station = (int) (frequency * CONVERT_RATE);
- return station;
-
- }
-
- @Override
- public void tearDown() throws Exception {
- Log.i(TAG, "tearDown");
- try {
- mSolo.finalize();
- } catch (Throwable t) {
- t.printStackTrace();
- }
- mSolo.finishOpenedActivities();
- sleep(WAIT_TEAR_DOWN);
- super.tearDown();
- }
-
-
-}
diff --git a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioTestCaseUtil.java b/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioTestCaseUtil.java
deleted file mode 100755
index f34a8c1..0000000
--- a/MediaTek/FmRadio/tests/src/com/mediatek/fmradio/tests/FmRadioTestCaseUtil.java
+++ /dev/null
@@ -1,219 +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.
- */
-
-package com.mediatek.fmradio.tests;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import android.app.Activity;
-import android.content.Context;
-import android.media.AudioManager;
-import android.media.AudioManager.OnAudioFocusChangeListener;
-import android.util.Log;
-import android.view.View;
-import android.widget.ListAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-import junit.framework.Assert;
-//import com.mediatek.storage.StorageManagerEx;
-import com.mediatek.fmradio.FmRadioActivity;
-import com.mediatek.fmradio.R;
-
-public class FmRadioTestCaseUtil {
- // FM station variables
- public static final int DEFAULT_STATION = 1000;
- // maximum station frequency
- public static final int HIGHEST_STATION = 1080;
- // minimum station frequency
- public static final int LOWEST_STATION = 875;
-
- // minimum storage space for record
- public static final long LOW_SPACE_THRESHOLD = 512 * 1024;
-
- public static final int CONVERT_RATE = 10;
- public static final long CHECK_TIME = 200;
- public static final String OP = android.os.SystemProperties.get("ro.operator.optr");
- public static final boolean IS_CMCC = ("OP01").equals(OP); // whether is CMCC project
- private static final String TAG = "FmRadioTestCaseUtil";
-
- // check station is in channel list.
- public static boolean isExistInChannelList(Activity activity, int station) {
-
- boolean find = false;
- float frequency = 0;
- int stationInList = 0;
- ListView listView = (ListView) activity.findViewById(R.id.station_list);
- sleep(CHECK_TIME);
- Assert.assertTrue((listView != null) && (listView.getCount() > 0));
- ListAdapter listAdapter = listView.getAdapter();
- int stationCount = listView.getCount();
- Log.d(TAG, "isExistInChannelList stationCount:" + stationCount);
- for (int i = 0; i < stationCount; i++) {
- View view = listAdapter.getView(i, null, listView);
- TextView textView = (TextView) view.findViewById(R.id.lv_station_freq);
- String frequencyStr = textView.getText().toString();
- try {
- frequency = Float.parseFloat(frequencyStr);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- stationInList = (int) (frequency * CONVERT_RATE);
- Log.d(TAG, "isExistInChannelList i:" + i + ", frequencyStr:" + frequencyStr +
- ", stationInList:" + stationInList);
- if (station == stationInList) {
- return true;
- }
- }
- return false;
- }
-
- // get station fraom UI.
- public static int getStationFromUI(TextView textView) {
- int station = 0;
- float frequency = 0;
- String frequencyStr = textView.getText().toString();
- try {
- frequency = Float.parseFloat(frequencyStr);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- station = (int) (frequency * CONVERT_RATE);
- return station;
- }
-
- // sleep
- public static void sleep(long milliseconds) {
- try {
- Thread.sleep(milliseconds);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-
- // get variable from method.
- public static Object getVariableFromMethod(Activity activity, String method) {
- Object value = false;
- Class c = activity.getClass();
- try {
- Method m = (Method) c.getDeclaredMethod(method, new Class[] {});
- m.setAccessible(true);
- value = m.invoke(activity, new Object[] {});
- } catch (SecurityException e) {
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- return value;
- }
-
- // get variable from activity.
- public static Object getVariableFromActivity(Activity activity, String variable) {
- Field field = null;
- Object value = null;
- try {
- field = FmRadioActivity.class.getDeclaredField(variable);
- field.setAccessible(true);
- value = field.get(activity);
- } catch (SecurityException e) {
- e.printStackTrace();
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return value;
- }
-
- public static String getProjectString(Context context, int cmccResId, int normalResId) {
- return IS_CMCC ? context.getString(cmccResId) : context.getString(normalResId);
- }
-
-// public static void mountSDCard(Context context) {
-// try {
-// getMountService().mountVolume(StorageManagerEx.getDefaultPath());
-// } catch (RemoteException e) {
-// }
-// }
-
-// public static void unmountSDCard(Context context) {
-// try {
-// getMountService().unmountVolume(StorageManagerEx.getDefaultPath(),
-// true, false);
-// } catch (RemoteException e) {
-// }
-// }
-//
-// private static IMountService getMountService() {
-// IMountService mountService = null;
-// IBinder service = ServiceManager.getService("mount");
-// Assert.assertNotNull(service);
-// mountService = IMountService.Stub.asInterface(service);
-// return mountService;
-// }
-
- private static OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener() {
- public void onAudioFocusChange(int focusChange) {
- switch (focusChange) {
- case AudioManager.AUDIOFOCUS_LOSS:
- Log.d(TAG, "request audio focus loss");
- break;
- case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
- Log.d(TAG, "request audio focus loss transient");
- break;
- case AudioManager.AUDIOFOCUS_GAIN:
- Log.d(TAG, "request audio focus gain");
- break;
- default :
- break;
- }
- }
- };
- public static void requestFocusGain(AudioManager audioManager) {
- audioManager.requestAudioFocus(mAudioFocusListener,
- AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
- }
-}
diff --git a/MediaTek/FmRadio/turnkey/com/mediatek/fmradio/ExtensionUtils.java b/MediaTek/FmRadio/turnkey/com/mediatek/fmradio/ExtensionUtils.java
deleted file mode 100755
index d560f17..0000000
--- a/MediaTek/FmRadio/turnkey/com/mediatek/fmradio/ExtensionUtils.java
+++ /dev/null
@@ -1,67 +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.
- */
-
-package com.mediatek.fmradio;
-
-import android.content.Context;
-
-import com.mediatek.common.MPlugin;
-import com.mediatek.fmradio.ext.IProjectStringExt;
-import com.mediatek.fmradio.ext.DefaultProjectStringExt;
-
-/**
- * get plugin instance.
- */
-public class ExtensionUtils {
- /**
- * get IProjectStringExt instance.
- */
- public static IProjectStringExt getExtension(
- Context context) {
- IProjectStringExt ext = null;
- try {
- ext = (IProjectStringExt) MPlugin.createInstance(IProjectStringExt.class.getName(),
- context);
- } finally {
- if (ext == null) {
- ext = new DefaultProjectStringExt();
- }
- }
-
- return ext;
- }
-}
diff --git a/MediaTek/fmaudioplayer/Android.mk b/MediaTek/fmaudioplayer/Android.mk
deleted file mode 100644
index 3d72db2..0000000
--- a/MediaTek/fmaudioplayer/Android.mk
+++ /dev/null
@@ -1,44 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-#
-# libmtkplayer
-#
-
-#ifneq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)
-
-#ifneq ($(strip $(HAVE_MATV_FEATURE))_$(strip $(MTK_FM_SUPPORT)), no_no)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- FMAudioPlayer.cpp
-
-#This is for customization
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libutils \
- libbinder \
- libmedia
-
-#LOCAL_CFLAGS += -DMTK_MATV_SUPPORT
-#LOCAL_CFLAGS += -DMTK_FM_SUPPORT
-
-
-LOCAL_C_INCLUDES := \
- $(JNI_H_INCLUDE) \
- $(TOP)/frameworks/av/include \
- $(TOP)/frameworks/av/include/media \
- $(TOP)/external \
- $(TOP)/frameworks/av/services/audioflinger
-
-LOCAL_C_INCLUDES += \
- $(call include-path-for, audio-utils) \
- $(call include-path-for, audio-effects)
-
-LOCAL_MODULE:= libmtkplayer
-
-LOCAL_PRELINK_MODULE := no
-
-include $(BUILD_SHARED_LIBRARY)
-
-#endif
-#endif
diff --git a/MediaTek/fmaudioplayer/FMAudioPlayer.cpp b/MediaTek/fmaudioplayer/FMAudioPlayer.cpp
deleted file mode 100644
index 59bda9d..0000000
--- a/MediaTek/fmaudioplayer/FMAudioPlayer.cpp
+++ /dev/null
@@ -1,1086 +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.
- */
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "FMPlayer"
-#include "utils/Log.h"
-#include "cutils/xlog.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-//#include
-#include
-#include "FMAudioPlayer.h"
-#include "rtpm_prio.h"
-
-#ifndef CHANGE_AUDIO_PRIORITY
-#include
-#include
-#endif
-
-
-#ifndef FAKE_FM
-// Query output device
-//#include "AudioResourceManager.h"
-//#include "AudioMTKHardware.h"
-//#include "AudioType.h"
-#endif
-
-//#define FM_AUDIO_FILELOG
-//#define FM_DIRECT_HW_CONNECT
-// Do not use render thread, rely on direct HW connect to output FM
-
-static pid_t myTid()
-{
- return gettid();
-}
-
-static long long getTimeMs()
-{
- struct timeval t1;
- long long ms;
-
- gettimeofday(&t1, NULL);
- ms = t1.tv_sec * 1000LL + t1.tv_usec / 1000;
-
- return ms;
-}
-
-// ----------------------------------------------------------------------------
-
-extern const int fm_use_analog_input;//from libaudiosetting.so
-extern const int fm_chip_519x;//from libaudiosetting.so
-
-namespace android
-{
-
-// workaround to avoid linking against libaudiosetting
-const int matv_use_analog_input = 0;
-const int fm_use_analog_input = 0;
-const int fm_chip_519x = 0;
-const int using_class_ab_amp = 0;
-
-typedef struct _AUDIO_DEVICE_CHANGE_CALLBACK_STRUCT {
- void (*callback)(void *data);
-} AUDIO_DEVICE_CHANGE_CALLBACK_STRUCT;
-
-enum AudioCommand {
- HOOK_FM_DEVICE_CALLBACK = 0x71,
- UNHOOK_FM_DEVICE_CALLBACK = 0x72
-};
-
-// ----------------------------------------------------------------------------
-
-#define sineTable48KSIZE 480
-#define sineTable32KSIZE 320
-//sine table for simulation only
-#ifdef FAKE_FM
-
-static const uint16_t sineTable48K[480] =
-{
- 0x1 , 0x0, 0xbd4 , 0xbd4, 0x1773 , 0x1774, 0x22ae , 0x22ad,
- 0x2d4e , 0x2d50, 0x372a , 0x372a, 0x4013 , 0x4013, 0x47e3 , 0x47e3,
- 0x4e79 , 0x4e79, 0x53b8 , 0x53b8, 0x5787 , 0x5787, 0x59d6 , 0x59d7,
- 0x5a9d , 0x5a9d, 0x59d6 , 0x59d7, 0x5786 , 0x5787, 0x53b7 , 0x53b7,
- 0x4e79 , 0x4e7a, 0x47e4 , 0x47e3, 0x4012 , 0x4013, 0x372a , 0x372a,
- 0x2d4f , 0x2d50, 0x22ac , 0x22ad, 0x1773 , 0x1774, 0xbd4 , 0xbd3,
- 0x0 , 0x0, 0xf42c , 0xf42c, 0xe88c , 0xe88c, 0xdd53 , 0xdd52,
- 0xd2b1 , 0xd2b1, 0xc8d6 , 0xc8d6, 0xbfed , 0xbfed, 0xb81d , 0xb81c,
- 0xb187 , 0xb186, 0xac49 , 0xac49, 0xa87a , 0xa879, 0xa629 , 0xa62a,
- 0xa563 , 0xa563, 0xa629 , 0xa629, 0xa879 , 0xa879, 0xac49 , 0xac49,
- 0xb186 , 0xb187, 0xb81c , 0xb81c, 0xbfed , 0xbfed, 0xc8d6 , 0xc8d6,
- 0xd2b2 , 0xd2b2, 0xdd53 , 0xdd52, 0xe88d , 0xe88c, 0xf42c , 0xf42c,
- 0xffff , 0xffff, 0xbd4 , 0xbd3, 0x1774 , 0x1774, 0x22ad , 0x22ad,
- 0x2d4e , 0x2d4f, 0x372a , 0x3729, 0x4013 , 0x4013, 0x47e3 , 0x47e3,
- 0x4e7a , 0x4e79, 0x53b7 , 0x53b8, 0x5787 , 0x5786, 0x59d7 , 0x59d7,
- 0x5a9e , 0x5a9d, 0x59d7 , 0x59d7, 0x5787 , 0x5786, 0x53b8 , 0x53b7,
- 0x4e79 , 0x4e7a, 0x47e3 , 0x47e4, 0x4013 , 0x4013, 0x3729 , 0x372a,
- 0x2d4f , 0x2d4f, 0x22ad , 0x22ad, 0x1774 , 0x1774, 0xbd4 , 0xbd4,
- 0x0 , 0x1, 0xf42d , 0xf42c, 0xe88c , 0xe88b, 0xdd53 , 0xdd53,
- 0xd2b1 , 0xd2b2, 0xc8d7 , 0xc8d6, 0xbfed , 0xbfed, 0xb81c , 0xb81c,
- 0xb187 , 0xb186, 0xac48 , 0xac48, 0xa879 , 0xa879, 0xa629 , 0xa629,
- 0xa563 , 0xa563, 0xa629 , 0xa62a, 0xa879 , 0xa879, 0xac49 , 0xac49,
- 0xb186 , 0xb187, 0xb81d , 0xb81c, 0xbfed , 0xbfed, 0xc8d7 , 0xc8d6,
- 0xd2b1 , 0xd2b1, 0xdd53 , 0xdd54, 0xe88c , 0xe88c, 0xf42c , 0xf42c,
- 0x0 , 0xffff, 0xbd4 , 0xbd4, 0x1773 , 0x1773, 0x22ad , 0x22ae,
- 0x2d4f , 0x2d4f, 0x3729 , 0x372a, 0x4013 , 0x4013, 0x47e4 , 0x47e4,
- 0x4e7a , 0x4e79, 0x53b7 , 0x53b7, 0x5787 , 0x5788, 0x59d6 , 0x59d6,
- 0x5a9e , 0x5a9d, 0x59d7 , 0x59d7, 0x5787 , 0x5786, 0x53b8 , 0x53b7,
- 0x4e7a , 0x4e79, 0x47e4 , 0x47e4, 0x4013 , 0x4013, 0x3729 , 0x372a,
- 0x2d4f , 0x2d4f, 0x22ad , 0x22ad, 0x1774 , 0x1774, 0xbd4 , 0xbd4,
- 0x0 , 0xffff, 0xf42c , 0xf42c, 0xe88c , 0xe88d, 0xdd52 , 0xdd53,
- 0xd2b1 , 0xd2b1, 0xc8d7 , 0xc8d6, 0xbfed , 0xbfed, 0xb81c , 0xb81d,
- 0xb186 , 0xb186, 0xac48 , 0xac49, 0xa879 , 0xa879, 0xa628 , 0xa629,
- 0xa563 , 0xa563, 0xa629 , 0xa62a, 0xa879 , 0xa879, 0xac48 , 0xac49,
- 0xb186 , 0xb187, 0xb81c , 0xb81d, 0xbfed , 0xbfed, 0xc8d6 , 0xc8d6,
- 0xd2b1 , 0xd2b2, 0xdd53 , 0xdd53, 0xe88b , 0xe88c, 0xf42c , 0xf42c,
- 0xffff , 0xffff, 0xbd3 , 0xbd4, 0x1774 , 0x1774, 0x22ad , 0x22ad,
- 0x2d4f , 0x2d4f, 0x3729 , 0x372a, 0x4012 , 0x4013, 0x47e3 , 0x47e4,
- 0x4e7a , 0x4e7a, 0x53b8 , 0x53b7, 0x5787 , 0x5787, 0x59d7 , 0x59d7,
- 0x5a9d , 0x5a9d, 0x59d6 , 0x59d7, 0x5787 , 0x5786, 0x53b7 , 0x53b7,
- 0x4e7a , 0x4e79, 0x47e4 , 0x47e4, 0x4013 , 0x4013, 0x372a , 0x372a,
- 0x2d4f , 0x2d4f, 0x22ad , 0x22ad, 0x1774 , 0x1774, 0xbd4 , 0xbd3,
- 0x0 , 0xffff, 0xf42c , 0xf42c, 0xe88c , 0xe88c, 0xdd53 , 0xdd53,
- 0xd2b2 , 0xd2b1, 0xc8d7 , 0xc8d6, 0xbfed , 0xbfed, 0xb81d , 0xb81d,
- 0xb187 , 0xb187, 0xac48 , 0xac48, 0xa87a , 0xa879, 0xa62a , 0xa62a,
- 0xa562 , 0xa563, 0xa629 , 0xa629, 0xa879 , 0xa879, 0xac49 , 0xac48,
- 0xb186 , 0xb186, 0xb81d , 0xb81c, 0xbfee , 0xbfee, 0xc8d6 , 0xc8d7,
- 0xd2b1 , 0xd2b1, 0xdd53 , 0xdd53, 0xe88c , 0xe88c, 0xf42c , 0xf42c,
- 0x1 , 0x0, 0xbd4 , 0xbd4, 0x1774 , 0x1774, 0x22ac , 0x22ae,
- 0x2d4e , 0x2d4f, 0x372a , 0x372a, 0x4013 , 0x4013, 0x47e4 , 0x47e4,
- 0x4e79 , 0x4e79, 0x53b8 , 0x53b7, 0x5787 , 0x5787, 0x59d7 , 0x59d7,
- 0x5a9d , 0x5a9c, 0x59d6 , 0x59d7, 0x5787 , 0x5787, 0x53b8 , 0x53b7,
- 0x4e78 , 0x4e7a, 0x47e3 , 0x47e4, 0x4013 , 0x4013, 0x3729 , 0x3729,
- 0x2d4f , 0x2d4f, 0x22ae , 0x22ad, 0x1774 , 0x1774, 0xbd4 , 0xbd4,
- 0x0 , 0x0, 0xf42c , 0xf42c, 0xe88c , 0xe88d, 0xdd53 , 0xdd53,
- 0xd2b1 , 0xd2b1, 0xc8d7 , 0xc8d6, 0xbfee , 0xbfed, 0xb81c , 0xb81c,
- 0xb187 , 0xb187, 0xac49 , 0xac49, 0xa879 , 0xa879, 0xa629 , 0xa629,
- 0xa563 , 0xa563, 0xa628 , 0xa629, 0xa879 , 0xa87a, 0xac49 , 0xac48,
- 0xb186 , 0xb186, 0xb81d , 0xb81d, 0xbfec , 0xbfed, 0xc8d6 , 0xc8d6,
- 0xd2b1 , 0xd2b1, 0xdd54 , 0xdd53, 0xe88d , 0xe88b, 0xf42b , 0xf42c
-};
-
-static const uint16_t sineTable[320] =
-{
- 0x0000, 0x0A03, 0x13C7, 0x1D0E, 0x259E, 0x2D41, 0x33C7, 0x3906,
- 0x3CDE, 0x3F36, 0x4000, 0x3F36, 0x3CDE, 0x3906, 0x33C7, 0x2D41,
- 0x259E, 0x1D0E, 0x13C7, 0x0A03, 0x0000, 0xF5FD, 0xEC39, 0xE2F2,
- 0xDA62, 0xD2BF, 0xCC39, 0xC6FA, 0xC322, 0xC0CA, 0xC000, 0xC0CA,
- 0xC322, 0xC6FA, 0xCC39, 0xD2BF, 0xDA62, 0xE2F2, 0xEC39, 0xF5FD,
- 0xFFFF, 0x0A03, 0x13C7, 0x1D0E, 0x259E, 0x2D41, 0x33C7, 0x3906,
- 0x3CDE, 0x3F36, 0x4000, 0x3F36, 0x3CDE, 0x3906, 0x33C7, 0x2D41,
- 0x259E, 0x1D0E, 0x13C7, 0x0A03, 0x0000, 0xF5FD, 0xEC39, 0xE2F2,
- 0xDA62, 0xD2BF, 0xCC39, 0xC6FA, 0xC322, 0xC0CA, 0xC000, 0xC0CA,
- 0xC322, 0xC6FA, 0xCC39, 0xD2BF, 0xDA62, 0xE2F2, 0xEC39, 0xF5FD,
- 0xFFFF, 0x0A03, 0x13C7, 0x1D0E, 0x259E, 0x2D41, 0x33C7, 0x3906,
- 0x3CDE, 0x3F36, 0x4000, 0x3F36, 0x3CDE, 0x3906, 0x33C7, 0x2D41,
- 0x259E, 0x1D0E, 0x13C7, 0x0A03, 0x0000, 0xF5FD, 0xEC39, 0xE2F2,
- 0xDA62, 0xD2BF, 0xCC39, 0xC6FA, 0xC322, 0xC0CA, 0xC000, 0xC0CA,
- 0xC322, 0xC6FA, 0xCC39, 0xD2BF, 0xDA62, 0xE2F2, 0xEC39, 0xF5FD,
- 0xFFFF, 0x0A03, 0x13C7, 0x1D0E, 0x259E, 0x2D41, 0x33C7, 0x3906,
- 0x3CDE, 0x3F36, 0x4000, 0x3F36, 0x3CDE, 0x3906, 0x33C7, 0x2D41,
- 0x259E, 0x1D0E, 0x13C7, 0x0A03, 0x0000, 0xF5FD, 0xEC39, 0xE2F2,
- 0xDA62, 0xD2BF, 0xCC39, 0xC6FA, 0xC322, 0xC0CA, 0xC000, 0xC0CA,
- 0xC322, 0xC6FA, 0xCC39, 0xD2BF, 0xDA62, 0xE2F2, 0xEC39, 0xF5FD,
- 0xFFFF, 0x0A03, 0x13C7, 0x1D0E, 0x259E, 0x2D41, 0x33C7, 0x3906,
- 0x3CDE, 0x3F36, 0x4000, 0x3F36, 0x3CDE, 0x3906, 0x33C7, 0x2D41,
- 0x259E, 0x1D0E, 0x13C7, 0x0A03, 0x0000, 0xF5FD, 0xEC39, 0xE2F2,
- 0xDA62, 0xD2BF, 0xCC39, 0xC6FA, 0xC322, 0xC0CA, 0xC000, 0xC0CA,
- 0xC322, 0xC6FA, 0xCC39, 0xD2BF, 0xDA62, 0xE2F2, 0xEC39, 0xF5FD,
- 0xFFFF, 0x0A03, 0x13C7, 0x1D0E, 0x259E, 0x2D41, 0x33C7, 0x3906,
- 0x3CDE, 0x3F36, 0x4000, 0x3F36, 0x3CDE, 0x3906, 0x33C7, 0x2D41,
- 0x259E, 0x1D0E, 0x13C7, 0x0A03, 0x0000, 0xF5FD, 0xEC39, 0xE2F2,
- 0xDA62, 0xD2BF, 0xCC39, 0xC6FA, 0xC322, 0xC0CA, 0xC000, 0xC0CA,
- 0xC322, 0xC6FA, 0xCC39, 0xD2BF, 0xDA62, 0xE2F2, 0xEC39, 0xF5FD,
- 0xFFFF, 0x0A03, 0x13C7, 0x1D0E, 0x259E, 0x2D41, 0x33C7, 0x3906,
- 0x3CDE, 0x3F36, 0x4000, 0x3F36, 0x3CDE, 0x3906, 0x33C7, 0x2D41,
- 0x259E, 0x1D0E, 0x13C7, 0x0A03, 0xFFFF, 0xF5FD, 0xEC39, 0xE2F2,
- 0xDA62, 0xD2BF, 0xCC39, 0xC6FA, 0xC322, 0xC0CA, 0xC000, 0xC0CA,
- 0xC322, 0xC6FA, 0xCC39, 0xD2BF, 0xDA62, 0xE2F2, 0xEC39, 0xF5FD,
- 0xFFFF, 0x0A03, 0x13C7, 0x1D0E, 0x259E, 0x2D41, 0x33C7, 0x3906,
- 0x3CDE, 0x3F36, 0x4000, 0x3F36, 0x3CDE, 0x3906, 0x33C7, 0x2D41,
- 0x259E, 0x1D0E, 0x13C7, 0x0A03, 0x0000, 0xF5FD, 0xEC39, 0xE2F2,
- 0xDA62, 0xD2BF, 0xCC39, 0xC6FA, 0xC322, 0xC0CA, 0xC000, 0xC0CA,
- 0xC322, 0xC6FA, 0xCC39, 0xD2BF, 0xDA62, 0xE2F2, 0xEC39, 0xF5FD,
-};
-
-static int ReadFakeBuffer(void *buffer)
-{
- usleep(1000);
- int sineTableSize = sineTable48KSIZE*sizeof(uint16_t);
- char * ptr = (char*)buffer;
- memcpy(ptr, sineTable48K, sineTableSize);
- ptr += sineTableSize;
- memcpy(ptr, sineTable48K, sineTableSize);
- ptr += sineTableSize;
-
- return sineTableSize * 2;
-}
-#endif
-
-static bool getValue(String8 str)
-{
- bool ret = false;
- char string[str.size() + 1];
- memcpy(string, str.string(), str.size());
- string[str.size()] = 0;
- ALOGD("string is %s", string);
-
- if(strlen(string) != 0)
- {
- size_t eqIdx = strcspn(string, "=");
- String8 key = String8(string, eqIdx);
- ALOGD("Key is %s", key.string());
- String8 value;
-
- if(eqIdx == strlen(string))
- {
- SXLOGE("Invailed value");
- }
- else
- {
- value = String8(string + eqIdx + 1);
- ALOGD("Value is %s", value.string());
- if(!strcasecmp(value.string(), "true"))
- {
- ret = true;
- }
- else if(!strcasecmp(value.string(), "false"))
- {
- ret = false;
- }
- else
- SXLOGE("Invailed value");
- }
- }
- return ret;
-}
-static int GetReadBufferSize()
-{
- return 384 * sizeof(uint16_t) * 2; // 2 x sine table size
-}
-
-// TODO: Determine appropriate return codes
-static status_t ERROR_NOT_OPEN = -1;
-static status_t ERROR_OPEN_FAILED = -2;
-static status_t ERROR_ALLOCATE_FAILED = -4;
-static status_t ERROR_NOT_SUPPORTED = -8;
-static status_t ERROR_NOT_READY = -16;
-static status_t ERROR_START_FAILED = -32;
-static status_t ERROR_STOP_FAILED = -64;
-static status_t STATE_INIT = 0;
-static status_t STATE_ERROR = 1;
-static status_t STATE_OPEN = 2;
-static status_t STATE_PLAY = 3;
-static status_t STATE_STOP = 4;
-
-
-String8 ANALOG_FM_ENABLE = (String8)("AudioSetFmEnable=1");
-String8 ANALOG_FM_DISABLE = (String8)("AudioSetFmEnable=0");
-
-String8 DIGITAL_FM_ENABLE = (String8)("AudioSetFmDigitalEnable=1");
-String8 DIGITAL_FM_DISABLE = (String8)("AudioSetFmDigitalEnable=0");
-
-String8 IS_WIRED_HEADSET_ON = (String8)("AudioFmIsWiredHeadsetOn");
-
-#ifndef FAKE_FM
-FMAudioPlayer *FmAudioPlayerInstance = NULL;
-
-void FMAudioPlayerCallback(void *data)
-{
- SXLOGD("FMAudioPlayer callback 0x%x\n", FmAudioPlayerInstance);
-
- if (FmAudioPlayerInstance != NULL)
- {
- FmAudioPlayerInstance->setRender((bool)data);
- }
-}
-#endif
-
-FMAudioPlayer::FMAudioPlayer() :
- mAudioBuffer(NULL), mPlayTime(-1), mDuration(-1), mState(STATE_ERROR),
- mStreamType(AUDIO_STREAM_MUSIC),mAudioRecord(NULL),flagRecordError(false),
- mExit(false), mPaused(false), mRender(false), mRenderTid(-1)
-{
- SXLOGD("[%d]FMAudioPlayer constructor\n");
-
- if (fm_use_analog_input == 1)
- {
- SXLOGD("FM use analog input");
- }
-
- else if (fm_use_analog_input == 0)
- {
- SXLOGD("I2S driver doesn't exists\n");
- }
-
-#ifndef FAKE_FM
- FmAudioPlayerInstance = this;
-#endif
- mMutePause = 0;
- mSetRender = false;
-}
-
-void FMAudioPlayer::onFirstRef()
-{
- SXLOGD("onFirstRef");
-
- // create playback thread
- Mutex::Autolock l(mMutex);
-
- if (fm_chip_519x == 0)
- {
- mFmAudioSamplingRate = 44100;
- }
- else
- {
- mFmAudioSamplingRate = 32000;
- }
-
-#ifndef FAKE_FM
- setHwCallback(true);
-#endif
-
- if (fm_use_analog_input == 1)
- {
- SXLOGD("FMAudioPlayer use analog input - onFirstRef");
- }
- else if (fm_use_analog_input == 0)
- {
- SXLOGD("FMAudioPlayer use digital input - onFirstRef");
- }
-
- createThreadEtc(renderThread, this, "FM audio player", ANDROID_PRIORITY_AUDIO);
- mCondition.waitRelative(mMutex, seconds(3));
-
- if (mRenderTid > 0)
- {
- SXLOGD("render thread(%d) started", mRenderTid);
- mState = STATE_INIT;
- }
-}
-
-status_t FMAudioPlayer::initCheck()
-{
- if (mState != STATE_ERROR)
- {
- return NO_ERROR;
- }
-
- return ERROR_NOT_READY;
-}
-
-FMAudioPlayer::~FMAudioPlayer()
-{
- SXLOGD("FMAudioPlayer destructor");
-#ifndef FAKE_FM
- FmAudioPlayerInstance = NULL;
-#endif
- release();
-
- if (fm_use_analog_input == 1)
- {
- SXLOGD("FMAudioPlayer use analog input - destructor end\n");
- }
-
- else if (fm_use_analog_input == 0)
- {
- SXLOGD("FMAudioPlayer destructor end\n");
- }
-}
-
-status_t FMAudioPlayer::setDataSource(const sp &httpService, const char *url, const KeyedVector *headers)
-{
- SXLOGD("FMAudioPlayer setDataSource path=%s \n", path);
- return setdatasource(url, -1, 0, 0x7ffffffffffffffLL); // intentionally less than LONG_MAX
-}
-
-status_t FMAudioPlayer::setDataSource(int fd, int64_t offset, int64_t length)
-{
- SXLOGD("FMAudioPlayer setDataSource offset=%d, length=%d \n", ((int)offset), ((int)length));
- return setdatasource(NULL, fd, offset, length);
-}
-
-
-status_t FMAudioPlayer::setdatasource(const char *path, int fd, int64_t offset, int64_t length)
-{
- SXLOGD("setdatasource");
-
- // file still open?
- Mutex::Autolock l(mMutex);
-
- if (mState == STATE_OPEN)
- {
- reset_nosync();
- }
-
- mState = STATE_OPEN;
- return NO_ERROR;
-}
-
-status_t FMAudioPlayer::prepare()
-{
- SXLOGD("prepare\n");
-
- if (mState != STATE_OPEN)
- {
- SXLOGE("prepare ERROR_NOT_OPEN \n");
- return ERROR_NOT_OPEN;
- }
-
- return NO_ERROR;
-}
-
-status_t FMAudioPlayer::prepareAsync()
-{
- SXLOGD("prepareAsync\n");
-
- // can't hold the lock here because of the callback
- // it's safe because we don't change state
- if (mState != STATE_OPEN && mState != STATE_PLAY && mState != STATE_STOP)
- {
- sendEvent(MEDIA_ERROR);
- SXLOGD("prepareAsync sendEvent(MEDIA_ERROR) \n");
- return NO_ERROR;
- }
-
- sendEvent(MEDIA_PREPARED);
- return NO_ERROR;
-}
-
-status_t FMAudioPlayer::start()
-{
- SXLOGD("start\n");
- Mutex::Autolock l(mMutex);
-
- if (mState != STATE_OPEN && mState != STATE_PLAY && mState != STATE_STOP)
- {
- SXLOGE("start ERROR_NOT_OPEN \n");
- return ERROR_NOT_OPEN;
- }
-
- if (fm_use_analog_input == 1)
- {
- status_t result;
- AudioSystem::setParameters(0, ANALOG_FM_ENABLE);
- mPaused = false;
- }
- else if (fm_use_analog_input == 0)
- {
- status_t result;
-
- if (mMutePause == true)
- {
- mMutePause = false;
- mPaused = false;
- //if(mAudioSink != NULL)
- //mAudioSink->setVolume(1.0, 1.0);
- }
-
- AudioSystem::setParameters(0, DIGITAL_FM_ENABLE);
- }
-
- mPaused = false;
-#ifndef FAKE_FM
-#if !defined(FM_DIRECT_HW_CONNECT)
- String8 str = AudioSystem::getParameters(0, IS_WIRED_HEADSET_ON);
- SXLOGD("mSetRender is %d", mSetRender);
-// if(!getValue(str))
- if(mSetRender)
- {
- // wake up render thread
- SXLOGD("start wakeup render thread---\n");
- mCondition.signal();
- }
-#endif
-#else
- mRender = true;
- // wake up render thread
- SXLOGD("start wakeup render thread\n");
- mCondition.signal();
-
-#endif
- mState = STATE_PLAY;
- return NO_ERROR;
-}
-
-status_t FMAudioPlayer::stop()
-{
- SXLOGD("stop\n");
- Mutex::Autolock l(mMutex);
-
- if (mState != STATE_OPEN && mState != STATE_PLAY && mState != STATE_STOP)
- {
- SXLOGE("stop ERROR_NOT_OPEN \n");
- return ERROR_NOT_OPEN;
- }
-
- if(mAudioRecord.get())
- {
- mAudioRecord->stop();
- deleteAudioRecord(); //delete for other APP related AudioRecord
- }
- if(mAudioSink != NULL)
-// mAudioSink->stop();
-
- if (fm_use_analog_input == 1)
- {
- AudioSystem::setParameters(0, ANALOG_FM_DISABLE);
- }
- else
- {
- AudioSystem::setParameters(0, DIGITAL_FM_DISABLE);
- }
-
- mPaused = true;
- mRender = false;
- mState = STATE_STOP;
- return NO_ERROR;
-}
-
-status_t FMAudioPlayer::seekTo(int position)
-{
- SXLOGD("seekTo %d\n", position);
- return NO_ERROR;
-}
-
-status_t FMAudioPlayer::pause()
-{
- SXLOGD("pause\n");
- Mutex::Autolock l(mMutex);
-
- if (mState != STATE_OPEN && mState != STATE_PLAY && mState != STATE_STOP)
- {
- SXLOGD("pause ERROR_NOT_OPEN \n");
- return ERROR_NOT_OPEN;
- }
-
- SXLOGD("pause got lock\n");
-
- if (fm_use_analog_input == 1)
- {
- AudioSystem::setParameters(0, ANALOG_FM_DISABLE);
- }
- else if (fm_use_analog_input == 0)
- {
- AudioSystem::setParameters(0, DIGITAL_FM_DISABLE);
- }
-
- mState = STATE_STOP;
- mPaused = true;
- return NO_ERROR;
-}
-
-bool FMAudioPlayer::isPlaying()
-{
- SXLOGD("isPlaying\n");
-
- if (mState == STATE_PLAY)
- {
- return true;
- }
-
- return false;
-}
-
-status_t FMAudioPlayer::getCurrentPosition(int *position)
-{
- SXLOGD("getCurrentPosition always return 0\n");
- *position = 0;
- return NO_ERROR;
-}
-
-status_t FMAudioPlayer::getDuration(int *duration)
-{
- *duration = 1000;
- SXLOGD("getDuration duration, always return 1000 \n");
- return NO_ERROR;
-}
-
-status_t FMAudioPlayer::release()
-{
- SXLOGD("release\n");
-
- int ret = 0;
- int count = 100;
- SXLOGD("release mMutex.tryLock ()");
-
-#ifndef CHANGE_AUDIO_PRIORITY
- int priority = getpriority(PRIO_PROCESS, 0);
- SXLOGD("FM Render Thread priority is %d", priority);
-#endif
-
-#ifndef FAKE_FM
- setHwCallback(false);
-#endif
-
- do
- {
- ret = mMutex.tryLock();
-
- if (ret)
- {
- SXLOGW("FMAudioPlayer::release() mMutex return ret = %d", ret);
- usleep(20 * 1000);
- count --;
- }
- }
- while (ret && count); // only cannot lock
-
- reset_nosync();
-
- // TODO: timeout when thread won't exit, wait for render thread to exit
- if (mRenderTid > 0)
- {
- mExit = true;
- SXLOGD("release signal \n");
- mCondition.signal();
- SXLOGD("release wait \n");
- mCondition.waitRelative(mMutex, seconds(3));
- }
-
- mMutex.unlock();
- return NO_ERROR;
-}
-
-status_t FMAudioPlayer::reset()
-{
- SXLOGD("reset\n");
- Mutex::Autolock l(mMutex);
- return reset_nosync();
-}
-
-// always call with lock held
-status_t FMAudioPlayer::reset_nosync()
-{
- SXLOGD("reset_nosync start\n");
-
- if (fm_use_analog_input == 1)
- {
- AudioSystem::setParameters(0, ANALOG_FM_DISABLE);//Add by Changqing
- }
- else if (fm_use_analog_input == 0)
- {
- AudioSystem::setParameters(0, DIGITAL_FM_DISABLE);//Add by Changqing
- }
-
- mState = STATE_ERROR;
- mPlayTime = -1;
- mDuration = -1;
- mPaused = false;
- mRender = false;
- SXLOGD("reset_nosync end\n");
- return NO_ERROR;
-}
-
-status_t FMAudioPlayer::setLooping(int loop)
-{
- SXLOGD("setLooping, do nothing \n");
- return NO_ERROR;
-}
-
-#ifndef FAKE_FM
-void FMAudioPlayer::setHwCallback(bool enable)
-{
- AUDIO_DEVICE_CHANGE_CALLBACK_STRUCT callback_data;
- callback_data.callback = FMAudioPlayerCallback;
-}
-
-status_t FMAudioPlayer::setRender(bool enable)
-{
- SXLOGD("setRender %d when mRender %d\n", enable, mRender);
- if (enable)
- {
- mSetRender = true;
- if(mState != STATE_PLAY)
- return NO_ERROR;
- if(mRender == false){
-// Mutex::Autolock l(mMutex);
- mCondition.signal();
- }
- }
- else
- {
- mSetRender = false;
- }
-
- return NO_ERROR;
-}
-#endif
-
-#define FM_AUDIO_CHANNEL_NUM 2
-
-status_t FMAudioPlayer::createOutputTrack()
-{
- // base on configuration define samplerate .
- int FM_AUDIO_SAMPLING_RATE;
-
- if (fm_chip_519x == 0)
- {
- FM_AUDIO_SAMPLING_RATE = 44100;
- }
- else
- {
- FM_AUDIO_SAMPLING_RATE = 32000;
- }
-
- SXLOGD("Create AudioTrack object: rate=%d, channels=%d\n", FM_AUDIO_SAMPLING_RATE, FM_AUDIO_CHANNEL_NUM);
-
- // open audio track
- if (mAudioSink->open(FM_AUDIO_SAMPLING_RATE, FM_AUDIO_CHANNEL_NUM, AUDIO_CHANNEL_OUT_STEREO, AUDIO_FORMAT_PCM_16_BIT, 6) != NO_ERROR)
- {
- SXLOGE("mAudioSink open failed");
- return ERROR_OPEN_FAILED;
- }
-
- return NO_ERROR;
-}
-
-int FMAudioPlayer::renderThread(void *p)
-{
- return ((FMAudioPlayer *)p)->render();
-}
-
-//#define AUDIOBUFFER_SIZE 4096
-int FMAudioPlayer::render()
-{
- int result = -1;
- int temp;
- int current_section = 0;
- bool audioStarted = false;
- bool firstOutput = false;
- int t_result = -1;
- int bufSize = 0;
- int lastTime = 0;
- int thisTime = 0;
- int dataCount = 0;
- int frameCount = 0;
-
-
-#ifdef FM_AUDIO_FILELOG
- FILE *fp;
- fp = fopen("sdcard/test.pcm", "wb");
- SXLOGD("fp:%d", fp);
-#endif
-
- bufSize = GetReadBufferSize();
- SXLOGD("got buffer size = %d", bufSize);
- mAudioBuffer = new char[bufSize * 2];
- mDummyBuffer = new char[bufSize * 2];
- memset(mDummyBuffer, 0, bufSize);
-
- SXLOGD("mAudioBuffer: %p \n", mAudioBuffer);
-
- if (!mAudioBuffer)
- {
- SXLOGD("mAudioBuffer allocate failed\n");
- goto threadExit;
- }
-
-#ifdef CHANGE_AUDIO_PRIORITY
- // if set prority false , force to set priority
- if (t_result == -1)
- {
- struct sched_param sched_p;
- sched_getparam(0, &sched_p);
- sched_p.sched_priority = RTPM_PRIO_FM_AUDIOPLAYER ;
-
- if (0 != sched_setscheduler(0, SCHED_RR, &sched_p))
- {
- SXLOGE("[%s] failed, errno: %d", __func__, errno);
- }
- else
- {
- sched_p.sched_priority = RTPM_PRIO_FM_AUDIOPLAYER;
- sched_getparam(0, &sched_p);
- SXLOGD("sched_setscheduler ok, priority: %d", sched_p.sched_priority);
- }
- }
-#endif
-
- // let main thread know we're ready
- {
- int ret = 0;
- int count = 100;
- SXLOGD("render mMutex.tryLock ()");
-
- do
- {
- ret = mMutex.tryLock();
-
- if (ret)
- {
- SXLOGW("FMAudioPlayer::render() mMutex return ret = %d", ret);
- usleep(20 * 1000);
- count --;
- }
- }while (ret && count); // only cannot lock
-
- mRenderTid = myTid();
- SXLOGD("render start mRenderTid=%d\n",mRenderTid);
- mCondition.signal();
- mMutex.unlock();
- }
-
- while (1)
- {
- long numread = 0;
- bool flagOfRecord = false;
- {
- Mutex::Autolock l(mMutex);
-
- // pausing?
- if (mPaused || (!mSetRender && audioStarted) || flagRecordError)
- {
- SXLOGD("render - pause\n");
-
- if (mAudioSink->ready())
- {
- mAudioSink->pause();
- usleep(300*1000); //For ALPS00821792
- mAudioSink->flush();
- }
-
- if(mAudioRecord.get())
- {
- mAudioRecord->stop();
- deleteAudioRecord();
- }
- mRender = false;
- audioStarted = false;
- }
-
- // nothing to render, wait for client thread to wake us up
- if( mSetRender && !mPaused && !flagRecordError)
- mRender = true;
- if (!mExit && !mRender)
- {
- SXLOGD("render - signal wait\n");
- mCondition.wait(mMutex);
- frameCount = 0;
- flagRecordError = false;
- SXLOGD("render - signal rx'd\n");
- }
-
- if(!mPaused && !mExit)
- {
- //flagOfRecord = createAudioRecord();
- if(false == flagOfRecord)
- {
- SXLOGE("Create AudioRecord Failed !!!");
- break;
- }
- }
-
- if (mExit)
- {
- break;
- }
-
- // We could end up here if start() is called, and before we get a
- // chance to run, the app calls stop() or reset(). Re-check render
- // flag so we don't try to render in stop or reset state.
- if (!mRender)
- {
- continue;
- }
-
- if (!mAudioSink->ready())
- {
- SXLOGD("render - create output track\n");
-
- if (createOutputTrack() != NO_ERROR)
- {
- break;
- }
- }
- }
-
- {
- Mutex::Autolock l(mMutex);
- // codec returns negative number on error
- if (numread < 0)
- {
- SXLOGE("Error in FMPlayer numread=%ld", numread);
- sendEvent(MEDIA_ERROR);
- break;
- }
-
- // start audio output if necessary
- if (!audioStarted && !mPaused && !mExit)
- {
- SXLOGD("render - starting audio\n");
- mAudioSink->start();
- if(!mAudioRecord.get())
- {
- SXLOGD("stop mAudioRecord Before mAudioRecord Start");
- continue;
- }
- else
- {
- mAudioRecord->start();
- }
- // setparameter to hardware after staring, for cr ALPS00073272
- //AudioSystem::setParameters (0,DIGITAL_FM_ENABLE);
- audioStarted = true;
- firstOutput = true;
-
-
- //firstly push some amount of buffer to make the mixer alive
- if ((temp = mAudioSink->write(mDummyBuffer, bufSize)) < 0)
- {
- SXLOGE("Error in writing:%d", temp);
- result = temp;
- break;
- }
-
- if ((temp = mAudioSink->write(mDummyBuffer, bufSize)) < 0)
- {
- SXLOGE("Error in writing:%d", temp);
- result = temp;
- break;
- }
-
- if ((temp = mAudioSink->write(mDummyBuffer, bufSize)) < 0)
- {
- SXLOGE("Error in writing:%d", temp);
- result = temp;
- break;
- }
- }
- }
-
- {
- Mutex::Autolock l(mMutex);
- int brt = 0, art = 0;
-
- //SXLOGD("[%lld] before read %d",brt=getTimeMs());
- if (firstOutput)
- {
- firstOutput = false;
- }
-
-#ifdef FAKE_FM
- numread = ReadFakeBuffer(mAudioBuffer);
-#else
- if(!mAudioRecord.get())
- {
- SXLOGE("mAudioRecord is deleted by FMAudioPlayer stop !!!");
- continue;
- }
- else
- {
- numread = mAudioRecord->read(mAudioBuffer, bufSize);
- }
-#endif
-
- //SXLOGD("[%lld] after read %d",art=getTimeMs());
- if (art - brt > 90)
- {
- SXLOGW("read time abnormal");
- }
-
- frameCount++;
- }
-
- lastTime = thisTime;
- thisTime = getTimeMs();
-
- if (thisTime - lastTime > 160)
- {
- SXLOGW(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!time diff = %d", thisTime - lastTime);
- }
-
- // Write data to the audio hardware
- dataCount += numread;
- if ( mPaused || !mSetRender ) //When try to pause, skip write
- continue;
- if(numread < 0)
- {
- flagRecordError = true;
- SXLOGE("Error in Record:%d", numread);
- continue;
- }
- else if ((temp = mAudioSink->write(mAudioBuffer, numread)) < 0)
- {
- Mutex::Autolock l(mMutex);
-
- SXLOGE("Error in writing:%d", temp);
- result = temp;
- if(mAudioRecord.get())
- mAudioRecord->stop();
- break;
- }
-
- //SXLOGD("[%lld] after write writecount = %d" ,getTimeMs(),temp);
- //sleep to allow command to get mutex
- usleep(1000);
- }
-
-threadExit:
- if (mAudioBuffer)
- {
- delete [] mAudioBuffer;
- mAudioBuffer = NULL;
- }
-
- if (mDummyBuffer)
- {
- delete [] mDummyBuffer;
- mDummyBuffer = NULL;
- }
-
- Mutex::Autolock l(mMutex);
- deleteAudioRecord();
- if(mAudioSink != NULL)
- mAudioSink.clear();
-
- SXLOGD("render end mRenderTid=%d\n",mRenderTid);
-
- // tell main thread goodbye
- mRenderTid = -1;
- mCondition.signal();
-
-#ifdef FM_AUDIO_FILELOG
- fclose(fp);
-#endif
- return result;
-}
-
-
-bool FMAudioPlayer::deleteAudioRecord()
-{
- SXLOGD("deleteAudioRecord !!!");
-
- if(mAudioRecord.get())
- {
- mAudioRecord.clear();
- }
- return true;
-}
-
-} // end namespace android
-
-
diff --git a/MediaTek/fmaudioplayer/FMAudioPlayer.h b/MediaTek/fmaudioplayer/FMAudioPlayer.h
deleted file mode 100644
index 66394f5..0000000
--- a/MediaTek/fmaudioplayer/FMAudioPlayer.h
+++ /dev/null
@@ -1,154 +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 ANDROID_FM_AUDIOPLAYER_H
-#define ANDROID_FM_AUDIOPLAYER_H
-
-
-#include
-
-#include
-#include
-#include
-//#ifdef MTK_5192_FM_LINEIN
-//#include "media/IATVCtrlService.h"
-//#endif
-
-namespace android
-{
-
-class FMAudioPlayer : public MediaPlayerInterface
-{
-public:
- FMAudioPlayer();
- ~FMAudioPlayer();
-
- virtual void onFirstRef();
- virtual status_t initCheck();
- //virtual status_t setDataSource(const char *path, const KeyedVector *headers);
- virtual status_t setDataSource(const sp &httpService, const char *url, const KeyedVector *headers);
- virtual status_t setDataSource(int fd, int64_t offset, int64_t length);
- virtual status_t setVideoSurface(const sp&)
- {
- return UNKNOWN_ERROR;
- }
- virtual status_t setVideoSurfaceTexture(
- const sp&)
- {
- return UNKNOWN_ERROR;
- }
- virtual status_t prepare();
- virtual status_t prepareAsync();
- virtual status_t start();
- virtual status_t stop();
- virtual status_t seekTo(int msec);
- virtual status_t pause();
- virtual bool isPlaying();
- virtual status_t getCurrentPosition(int *msec);
- virtual status_t getDuration(int *msec);
- virtual status_t release();
- virtual status_t reset();
- virtual status_t setLooping(int loop);
-#ifndef FAKE_FM
- virtual status_t setRender(bool enable);
-#endif
- virtual player_type playerType()
- {
- return FM_AUDIO_PLAYER;
- }
- virtual status_t invoke(const Parcel &, Parcel *)
- {
- return INVALID_OPERATION;
- }
- virtual status_t setParameter(int, const Parcel &)
- {
- return INVALID_OPERATION;
- }
- virtual status_t getParameter(int, Parcel *)
- {
- return INVALID_OPERATION;
- }
-
-private:
- status_t setdatasource(const char *path, int fd, int64_t offset, int64_t length);
- status_t reset_nosync();
- status_t createOutputTrack();
- static int renderThread(void *);
- int render();
- bool createAudioRecord();
- bool deleteAudioRecord();
-
-#ifndef FAKE_FM
- void setHwCallback(bool enable);
-#endif
-
- sp mAudioRecord;
- Mutex mMutex;
- Condition mCondition;
- FILE *mFile;
- int64_t mOffset;
- int64_t mLength;
- char *mAudioBuffer;
- char *mDummyBuffer;
- int mPlayTime;
- int mDuration;
- uint32_t mFmAudioSamplingRate;
-
- status_t mState;
- int mStreamType;
- bool mAndroidLoop;
- volatile bool mExit;
- bool mPaused;
-
- bool mSetRender;
- volatile bool mRender;
- pid_t mRenderTid;
- bool flagRecordError;
- bool flagOfFMEnabled;
-
- int mMutePause;
-
- //#ifdef MTK_5192_FM_LINEIN
- // Keeping pointer to ATVCtrlService
- //sp spATVCtrlService;
- //#endif
-
-};
-
-}; // namespace android
-
-#endif
-
-
diff --git a/MediaTek/fmaudioplayer/rtpm_prio.h b/MediaTek/fmaudioplayer/rtpm_prio.h
deleted file mode 100644
index b553254..0000000
--- a/MediaTek/fmaudioplayer/rtpm_prio.h
+++ /dev/null
@@ -1,84 +0,0 @@
-#ifndef __KERNEL_RTPM_PRIO__
-#define __KERNEL_RTPM_PRIO__
-
-#define CONFIG_MT_RT_MONITOR
-#ifdef CONFIG_MT_RT_MONITOR
-#define MT_ALLOW_RT_PRIO_BIT 0x10000000
-#else
-#define MT_ALLOW_RT_PRIO_BIT 0x0
-#endif
-
-#define REG_RT_PRIO(x) ((x) | MT_ALLOW_RT_PRIO_BIT)
-
-/***********************************************************************
- * Processes scheduled under one of the real-time policies (SCHED_FIFO, SCHED_RR)
- * have a sched_priority value in the range:
- * 1 (low) to 99 (high).
-************************************************************************/
-////////////////////////////////////////////////////////////////////////
-//DEFINE MM GROUP PRIORITY
-#define RTPM_PRIO_MM_GROUP_BASE (10)
-#define RTPM_PRIO_MM_GROUP_A (RTPM_PRIO_MM_GROUP_BASE+0)
-#define RTPM_PRIO_MM_GROUP_B (RTPM_PRIO_MM_GROUP_BASE+10)
-#define RTPM_PRIO_MM_GROUP_C (RTPM_PRIO_MM_GROUP_BASE+20)
-#define RTPM_PRIO_MM_GROUP_D (RTPM_PRIO_MM_GROUP_BASE+30)
-#define RTPM_PRIO_MM_GROUP_E (RTPM_PRIO_MM_GROUP_BASE+40)
-#define RTPM_PRIO_MM_GROUP_F (RTPM_PRIO_MM_GROUP_BASE+50)
-#define RTPM_PRIO_MM_GROUP_G (RTPM_PRIO_MM_GROUP_BASE+60)
-#define RTPM_PRIO_MM_GROUP_H (RTPM_PRIO_MM_GROUP_BASE+70)
-#define RTPM_PRIO_MM_GROUP_I (RTPM_PRIO_MM_GROUP_BASE+80)
-
-////////////////////////////////////////////////////////////////////////
-// DEFIN MTK RT PRIORITY
-
-#define RTPM_PRIO_CPU_CALLBACK REG_RT_PRIO(98)
-#define RTPM_PRIO_SWLOCKUP REG_RT_PRIO(98)
-#define RTPM_PRIO_AED REG_RT_PRIO(28)
-#define RTPM_PRIO_WDT REG_RT_PRIO(99)
-
-#define RTPM_PRIO_TPD REG_RT_PRIO(4)
-#define RTPM_PRIO_KSDIOIRQ REG_RT_PRIO(1)
-#define RTPM_PRIO_MTLTE_SYS_SDIO_THREAD REG_RT_PRIO(1)
-
-#define RTPM_PRIO_AUDIO_PLAYBACK REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+5)
-#define RTPM_PRIO_VIDEO_PLAYBACK_THREAD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+5) //TimeEventQueue
-#define RTPM_PRIO_SCRN_UPDATE REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+4)
-#define RTPM_PRIO_AUDIO_COMMAND REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+2)
-#define RTPM_PRIO_AUDIO_CCCI_THREAD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+2)
-
-#define RTPM_PRIO_CAMERA_TOPBASE REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+1)
-#define RTPM_PRIO_CAMERA_PREVIEW REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+1)
-#define RTPM_PRIO_CAMERA_COMPRESS REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+0)
-
-#define RTPM_PRIO_MATV_AUDIOPLAYER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+0)
-#define RTPM_PRIO_FM_AUDIOPLAYER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+0)
-#define RTPM_PRIO_AUDIO_I2S REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+0)
-
-#define RTPM_PRIO_CAMERA_DISPLAY REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+9)
-#define RTPM_PRIO_CAMERA_SHUTTER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+9)
-#define RTPM_PRIO_CAMERA_RECORD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+9)
-#define RTPM_PRIO_FB_THREAD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+7)
-#define RTPM_PRIO_AUDIO_RECORD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+6)
-#define RTPM_PRIO_VSYNC_THREAD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+5)
-#define RTPM_PRIO_SURFACEFLINGER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+4)
-
-#define RTPM_PRIO_VIDEO_YUV_BUFFER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+8)
-#define RTPM_PRIO_OMX_AUDIO REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+6)
-#define RTPM_PRIO_OMX_CMD_AUDIO REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+6)
-#define RTPM_PRIO_OMX_VIDEO_ENCODE REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+5)
-#define RTPM_PRIO_OMX_VIDEO REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+5)
-#define RTPM_PRIO_OMX_VIDEO_DECODE REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+4)
-
-#define RTPM_PRIO_VIDEO_BS_BUFFER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+3)
-#define RTPM_PRIO_MIDI_FILE REG_RT_PRIO(RTPM_PRIO_MM_GROUP_C+0)
-
-#define RTPM_PRIO_AUDIOTRACK_THREAD REG_RT_PRIO(1)
-#define RTPM_PRIO_GPS_DRIVER REG_RT_PRIO(1)
-// Total
-#define RTPM_PRIO_NUM 30
-////////////////////////////////////////////////////////////////////////////////
-//Removed
-//#define RTPM_PRIO_FB_THREAD REG_RT_PRIO(87)
-//#define RTPM_PRIO_SURFACE_OUT REG_RT_PRIO(80)
-
-#endif
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
- * Hongcheng Xia
- *
- */
-
-//for fm auto test and debug
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_coeff.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_patch.bin and /dev/null 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
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
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
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
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
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
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
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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_rom.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_coeff.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_patch.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_coeff.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_patch.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_coeff.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_patch.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_coeff.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_patch.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_coeff.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_patch.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff_tx.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch_tx.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff_tx.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch.bin and /dev/null 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
Binary files a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch_tx.bin and /dev/null 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
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
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
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
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
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
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
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
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
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
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
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
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
-#include "fm.h"
-#include "fmlib_cust.h"
-#include
-#include
-#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
-#include
-#include "fmlib_cust.h"
-#include
-#include
-#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
-#include
-//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; ievent_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; iAF_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(¶m_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(¶m_rds_tx.other_rds[0], rds, rdscnt);
- param_rds_tx.other_rds_cnt = rdscnt;*/
-
- ret = ioctl(fd, FM_IOCTL_RDS_TX, ¶m_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
-#include
-//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
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "fm.h"
-#include
-#include
-#include
-#include "../custom/fmlib_cust.h"
-
-#define FM_LIB_USE_XLOG
-
-#ifdef FM_LIB_USE_XLOG
-#include
-#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
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "../custom/fmlib_cust.h"
-
-#define FM_LIB_USE_XLOG
-
-#ifdef FM_LIB_USE_XLOG
-#include
-#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;idxinit_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; isize; 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=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; i0)) /*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 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; ichan){
- channle = chan_info->chan;
- for(j=0; jsize; 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; isize; 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
-#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
-
-#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 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