diff options
Diffstat (limited to 'MediaTek/fmradiolibs')
88 files changed, 0 insertions, 13397 deletions
diff --git a/MediaTek/fmradiolibs/Android.mk b/MediaTek/fmradiolibs/Android.mk deleted file mode 100755 index f23f49b..0000000 --- a/MediaTek/fmradiolibs/Android.mk +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (C) 2011 The Android Open-Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# WARNING: Everything listed here will be built on ALL platforms, -# including x86, the emulator, and the SDK. Modules must be uniquely -# named (liblights.panda), and must build everywhere, or limit themselves -# to only building on ARM if they include assembly. Individual makefiles -# are responsible for having their own logic, for fine-grained control. - -LOCAL_PATH := $(call my-dir) - -# if some modules are built directly from this directory (not subdirectories), -# their rules should be written here. - -include $(call all-subdir-makefiles) diff --git a/MediaTek/fmradiolibs/autofm/Android.mk b/MediaTek/fmradiolibs/autofm/Android.mk deleted file mode 100755 index 4e9186d..0000000 --- a/MediaTek/fmradiolibs/autofm/Android.mk +++ /dev/null @@ -1,34 +0,0 @@ -ifeq ($(MTK_FM_SUPPORT), yes) - -BUILD_FMTEST := true -FM_TOOL_BUILD_DEAMON := false - -LOCAL_PATH := $(call my-dir) - -ifeq ($(BUILD_FMTEST), true) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - autofm.c - -LOCAL_STATIC_LIBRARIES := - -#LOCAL_SHARED_LIBRARIES := libfm - -LOCAL_C_INCLUDES := - -LOCAL_PRELINK_MODULE := yes - -LOCAL_MODULE_TAGS := eng - -ifeq ($(FM_TOOL_BUILD_DEAMON), true) -LOCAL_CFLAGS := \ - -DFM_TOOL_BUILD_DEAMON -LOCAL_MODULE := autofmd -else -LOCAL_MODULE := autofm -endif - -include $(BUILD_EXECUTABLE) -endif -endif diff --git a/MediaTek/fmradiolibs/autofm/NOTICE b/MediaTek/fmradiolibs/autofm/NOTICE deleted file mode 100755 index 0519ecb..0000000 --- a/MediaTek/fmradiolibs/autofm/NOTICE +++ /dev/null @@ -1 +0,0 @@ -
\ No newline at end of file diff --git a/MediaTek/fmradiolibs/autofm/README b/MediaTek/fmradiolibs/autofm/README deleted file mode 100644 index ec6fc8d..0000000 --- a/MediaTek/fmradiolibs/autofm/README +++ /dev/null @@ -1,17 +0,0 @@ -Debug tool autofm, including FM power on/off, -seek, scan, tune ...and some other basic functions. - -WHAT IT DOES? -============= -Provide basic functions for debugging FM - -HOW IT WAS BUILT? -================== -'autofm' is a excutable bin file - -HOW TO USE IT? -============== -Run 'autofm' in adb shell - -All the source code of this library were written by MediaTek co.. - diff --git a/MediaTek/fmradiolibs/autofm/autofm.c b/MediaTek/fmradiolibs/autofm/autofm.c deleted file mode 100644 index a8c3198..0000000 --- a/MediaTek/fmradiolibs/autofm/autofm.c +++ /dev/null @@ -1,1955 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -/* - * - * (C) Copyright 2011 - * MediaTek <www.MediaTek.com> - * Hongcheng Xia <Hongcheng.Xia@MediaTek.com> - * - */ - -//for fm auto test and debug - -#include <stdio.h> -#include <stdlib.h> -#include <sys/ioctl.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> -#include <sys/select.h> -#include <unistd.h> -#include <sys/resource.h> - -#include "fm_main.h" -#include "fm_rds.h" -#include "fm_ioctl.h" -#include "fm_cust_cfg.h" -#include "autofm.h" - -static int autofm_run = 1; - -static int fm_open_dev(struct fm_cmd *cmd); -static int fm_close_dev(struct fm_cmd *cmd); -static int fm_power_up(struct fm_cmd *cmd); -static int fm_power_up_tx(struct fm_cmd *cmd); -static int fm_power_down(struct fm_cmd *cmd); -static int fm_tune(struct fm_cmd *cmd); -static int fm_tune_tx(struct fm_cmd *cmd); -static int fm_seek(struct fm_cmd *cmd); -static int fm_scan(struct fm_cmd *cmd); -static int fm_jammer_scan(struct fm_cmd *cmd); -static int fm_getcqi(struct fm_cmd *cmd); -static int fm_getrssi(struct fm_cmd *cmd); -static int fm_mute(struct fm_cmd *cmd); -static int fm_unmute(struct fm_cmd *cmd); -static int fm_scan_force_stop(struct fm_cmd *cmd); -static int fm_setvol(struct fm_cmd *cmd); -static int fm_getvol(struct fm_cmd *cmd); -static int fm_over_bt(struct fm_cmd *cmd); -static int fm_32kppm_compensation(struct fm_cmd *cmd); -static int fm_i2s_set(struct fm_cmd *cmd); -static int fm_rds_on_off(struct fm_cmd *cmd); -static int fm_rds_tx(struct fm_cmd *cmd); -static int fm_read_reg(struct fm_cmd *cmd); -static int fm_write_reg(struct fm_cmd *cmd); -static int fm_top_read_reg(struct fm_cmd *cmd); -static int fm_top_write_reg(struct fm_cmd *cmd); -static int fm_host_read_reg(struct fm_cmd *cmd); -static int fm_host_write_reg(struct fm_cmd *cmd); -static int fm_mod_reg(struct fm_cmd *cmd); -static int fm_print_reg(struct fm_cmd *cmd); -static int fm_help(struct fm_cmd *cmd); -static int fm_bye(struct fm_cmd *cmd); -static int fm_delay(struct fm_cmd *cmd); -static int fm_stdsrc_set(struct fm_cmd *cmd); - -static struct fm_cmd g_cmd[] = { - {"open", 0, fm_open_dev, {NULL, NULL, NULL}, "eg: open, desc: open dev/fm"}, - {"close", 0, fm_close_dev, {NULL, NULL, NULL}, "eg: close, desc: close dev/fm"}, - {"pwron", 0, fm_power_up, {NULL, NULL, NULL}, "eg: pwron, desc: power on fm rx subsystem"}, - {"txpwron", 0, fm_power_up_tx, {NULL, NULL, NULL}, "eg: txpwron, desc: power on fm tx subsystem"}, - {"pwroff", 0, fm_power_down, {NULL, NULL, NULL}, "eg: pwroff, desc: power off fm subsystem"}, - {"tune", 1, fm_tune, {NULL, NULL, NULL}, "eg: tune 876, desc: tune to a channel"}, - {"txtune", 1, fm_tune_tx, {NULL, NULL, NULL}, "eg: txtune 876, desc: tune tx to a channel"}, - {"seek", 1, fm_seek, {NULL, NULL, NULL}, "eg: seek up, desc: seek to another channel"}, - {"scan", 0, fm_scan, {NULL, NULL, NULL}, "eg: scan, desc: auto scan"}, - {"jamscan", 0, fm_jammer_scan, {NULL, NULL, NULL}, "eg: jamscan, desc: auto jammer scan"}, - {"cqi", 1, fm_getcqi, {NULL, NULL, NULL}, "eg: cqi, desc: get channel CQI"}, - {"rssi", 0, fm_getrssi, {NULL, NULL, NULL}, "eg: rssi, desc: get current channel RSSI"}, - {"mute", 0, fm_mute, {NULL, NULL, NULL}, "eg: mute, desc: mute audio"}, - {"unmute", 0, fm_unmute, {NULL, NULL, NULL}, "eg: unmute, desc: unmute audio"}, - {"sstop", 0, fm_scan_force_stop, {NULL, NULL, NULL}, "eg: sstop, desc: stop scan flow"}, - {"setvol", 1, fm_setvol, {NULL, NULL, NULL}, "eg: setvol 14, desc: set audio volume(rang:0~14)"}, - {"getvol", 0, fm_getvol, {NULL, NULL, NULL}, "eg: getvol, desc: get audio volume"}, - {"viabt", 1, fm_over_bt, {NULL, NULL, NULL}, "eg: viabt on, desc: set fm over bt on/off"}, - {"gpsrtc", 2, fm_32kppm_compensation, {NULL, NULL, NULL}, "eg: gpsrtc 10 20, desc: gps rtc setting"}, - {"seti2s", 3, fm_i2s_set, {NULL, NULL, NULL}, "eg: seti2s on slave 32k , desc: i2s setting"}, - {"rds", 1, fm_rds_on_off, {NULL, NULL, NULL}, "eg: rds on, desc: rds rx on/off"}, - {"txrds", 3, fm_rds_tx, {NULL, NULL, NULL}, "eg: txrds 0x1234 0 0 , desc: rds tx"}, - {"delay", 2, fm_delay, {NULL, NULL, NULL}, "eg: delay 100 ms, desc: delay n s/ms/us"}, - {"rd", 1, fm_read_reg, {NULL, NULL, NULL}, "eg: rd 0x62, desc: read a register"}, - //{"read", 1, fm_read_reg, {NULL, NULL, NULL}, "eg: read 0x62, desc: read a register"}, - {"wr", 2, fm_write_reg, {NULL, NULL, NULL}, "eg: wr 0x62 0xFF15, desc: write a register"}, - //{"write", 2, fm_write_reg, {NULL, NULL, NULL}, "eg: write 0x62 0xFF15, desc: write a register"}, - {"toprd", 1, fm_top_read_reg, {NULL, NULL, NULL}, "eg: toprd 0x0050, desc: read a top register"}, - {"topwr", 2, fm_top_write_reg, {NULL, NULL, NULL}, "eg: topwr 0x0050 0x00000007, desc: write top register"}, - {"hostrd", 1, fm_host_read_reg, {NULL, NULL, NULL}, "eg: hostrd 0x80103000, desc: read mcu host register"}, - {"hostwr", 2, fm_host_write_reg, {NULL, NULL, NULL}, "eg: hostwr 0x80103000 0x00000001, desc: write host register"}, - {"mod", 3, fm_mod_reg, {NULL, NULL, NULL}, "eg: mod 0x62 0xFFFE 0x0001, desc: modify a register"}, - {"modify", 3, fm_mod_reg, {NULL, NULL, NULL}, "eg: modify 0x62 0xFFFE 0x0001, desc: modify a register"}, - {"showreg", 1, fm_print_reg, {NULL, NULL, NULL}, "eg: showreg, desc: print all register"}, - {"setsrc", 2, fm_stdsrc_set, {NULL, NULL, NULL}, "eg: setsrc in /system/bin/abc.txt, desc: set stdinput"}, - {"help", 0, fm_help, {NULL, NULL, NULL}, "eg: help, desc: show help info"}, - {"bye", 0, fm_bye, {NULL, NULL, NULL}, "eg: bye, desc: exit autofm"} -}; - -static int g_fm_fd = -1; -static uint16_t g_freq = 967; -static int type = -1; - -static int to_upper(char *str) -{ - int i = 0; - - for(i=0; i < (int)strlen(str); i++){ - if(('a' <= str[i]) && (str[i] <= 'z')){ - str[i] = str[i] - ('a' - 'A'); - } - } - return 0; -} - -static int to_upper_n(char *str, int len) -{ - int i = 0; - - for(i=0; i < len; i++){ - if(('a' <= str[i]) && (str[i] <= 'z')){ - str[i] = str[i] - ('a' - 'A'); - } - } - return 0; -} - -#if 0 -static int check_hex_str(char *str, int len) -{ - int i = 0; - - for(i=0; i < len; i++){ - if((('a' <= str[i]) && (str[i] <= 'z')) || (('A' <= str[i]) && (str[i] <= 'Z')) || (('0' <= str[i]) && (str[i] <= '9'))){ - ; - }else{ - return -1; - } - } - return 0; -} -#else -static int check_hex_str(char *str, int len) -{ - int i = 0; - - for(i=0; i < len; i++){ - if((('!' <= str[i]) && (str[i] <= '~'))){ - ; - }else{ - return -1; - } - } - return 0; -} -#endif - -static int check_dec_str(char *str, int len) -{ - int i = 0; - - for(i=0; i < len; i++){ - if(('0' <= str[i]) && (str[i] <= '9')){ - ; - }else{ - return -1; - } - } - return 0; -} - -static int ascii_to_hex_u32(char *in_ascii, uint32_t *out_hex) -{ - int len = (int)strlen(in_ascii); - int i = 0; - uint32_t tmp; - - len = (len > 8)? 8 : len; - if (check_hex_str(in_ascii, len)) - { - return -1; - } - to_upper_n(in_ascii, len); - *out_hex = 0; - for (i=0; i < len; i++) - { - if (in_ascii[len-i-1] < 'A') - { - tmp = in_ascii[len-i-1]; - *out_hex |= ((tmp - '0') << (4*i)); - } - else - { - tmp = in_ascii[len-i-1]; - *out_hex |= ((tmp - 'A' + 10) << (4*i)); - } - } - return 0; -} - -static int ascii_to_hex(char *in_ascii, uint16_t *out_hex) -{ - int len = (int)strlen(in_ascii); - int i = 0; - uint16_t tmp; - - len = (len > 4)? 4 : len; - if(check_hex_str(in_ascii, len)){ - return -1; - } - to_upper_n(in_ascii, len); - *out_hex = 0; - for(i=0; i < len; i++){ - if(in_ascii[len-i-1] < 'A'){ - tmp = in_ascii[len-i-1]; - *out_hex |= ((tmp - '0') << (4*i)); - }else{ - tmp = in_ascii[len-i-1]; - *out_hex |= ((tmp - 'A' + 10) << (4*i)); - } - } - return 0; -} - -static int ascii_to_dec_u32(char *in_ascii, uint32_t *out_dec) -{ - int len = (int)strlen(in_ascii); - int i = 0; - int flag; - int multi = 1; - - len = (len > 10)? 10 : len; - /*if (in_ascii[0] == '-') - { - flag = -1; - in_ascii += 1; - len -= 1; - } - else*/ - { - flag = 1; - } - if (check_dec_str(in_ascii, len)) - { - return -1; - } - *out_dec = 0; - multi = 1; - for (i=0; i < len; i++) - { - *out_dec += ((in_ascii[len-i-1] - '0') * multi); - multi *= 10; - } - //*out_dec *= flag; - return 0; -} - -static int ascii_to_dec(char *in_ascii, int *out_dec) -{ - int len = (int)strlen(in_ascii); - int i = 0; - int flag; - int multi = 1; - - len = (len > 10)? 10 : len; - if(in_ascii[0] == '-'){ - flag = -1; - in_ascii += 1; - len -= 1; - }else{ - flag = 1; - } - if(check_dec_str(in_ascii, len)){ - return -1; - } - *out_dec = 0; - multi = 1; - for(i=0; i < len; i++){ - *out_dec += ((in_ascii[len-i-1] - '0') * multi); - multi *= 10; - } - *out_dec *= flag; - return 0; -} - -static int trim_string(char **start) -{ - char *end = *start; - - /* Advance to non-space character */ - while(*(*start) == ' '){ - (*start)++; - } - - /* Move to end of string */ - while(*end != '\0'){ - (end)++; - } - - /* Backup to non-space character */ - do{ - end--; - }while((end >= *start) && (*end == ' ')); - - /* Terminate string after last non-space character */ - *(++end) = '\0'; - return (end - *start); -} - -static int trim_path(char **start) -{ - char *end = *start; - - while(*(*start) == ' '){ - (*start)++; - } - - while(*end != '\0'){ - (end)++; - } - - do{ - end--; - }while((end >= *start) && ((*end == ' ') || (*end == '\n') || (*end == '\r'))); - - *(++end) = '\0'; - return (end - *start); -} - -static int cmd_parser(char *src, char **new_pos, char **word) -{ - char *p = src; - char *word_start = NULL; - - enum fm_cmd_parser_state state = FM_CMD_STAT_NONE; - - for(p = src; *p != '\0'; p++){ - switch(state){ - case FM_CMD_STAT_NONE:{ - if(!check_hex_str(p, 1)){ - //if we get show char in none state, it means a new word start - state = FM_CMD_STAT_WORD; - word_start = p; - } - break; - } - - case FM_CMD_STAT_WORD:{ - if(check_hex_str(p, 1)){ - //if we get non show char in word state, it means a word complete - *p = '\0'; - //FIX_ME - //record word - state = FM_CMD_STAT_NONE; - trim_string(&word_start); - *word = word_start; - *new_pos = p + 1; - //printf("%s\n", word_start); - return 0; - } - break; - } - default: - break; - } - } - return -1; -} - -static int get_cmd(char *buf, int buf_size) -{ -#if 0 - char tmp = 0; - - do{ - tmp = getchar(); - *buf = tmp; - buf++; - buf_size--; - }while((tmp != '\r') && (tmp != '\n') && (buf_size > 0)); -#else - int ret; - struct timeval tval; - tval.tv_sec = 0; - tval.tv_usec = 100*1000; - - ret = read(0, buf, buf_size); - //sleep(1); //sleep 1s - select(0, NULL, NULL, NULL, &tval); - -#endif - return 0; -} - -//fm funtion APIs -static int fm_open_dev(struct fm_cmd *cmd) -{ - int fd = open(FM_DEVICE_NAME, O_RDWR); - if(fd == -1){ - printf("FAIL open %s failed\n", FM_DEVICE_NAME); - return -1; - } - printf("OK\n"); - g_fm_fd = fd; - - return 0; -} - -static int fm_close_dev(struct fm_cmd *cmd) -{ - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - if(0 != close(g_fm_fd)){ - return -1; - } - - printf("OK\n"); - g_fm_fd = -1; - return 0; -} - -static int fm_power_up(struct fm_cmd *cmd) -{ - int ret; - struct fm_tune_parm parm; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_tune_parm)); - - parm.band = FM_BAND_UE; - parm.freq = 975; - parm.hilo = FM_AUTO_HILO_OFF; - parm.space = FM_SPACE_100K; - - ret = ioctl(g_fm_fd, FM_IOCTL_POWERUP, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK\n"); - - type = FM_RX; - return 0; -} - -static int fm_power_up_tx(struct fm_cmd *cmd) -{ - int ret; - struct fm_tune_parm parm; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_tune_parm)); - - parm.band = FM_BAND_UE; - parm.freq = 975; - parm.hilo = FM_AUTO_HILO_OFF; - parm.space = FM_SPACE_100K; - - ret = ioctl(g_fm_fd, FM_IOCTL_POWERUP_TX, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK\n"); - - type = FM_TX; - return 0; -} - -static int fm_power_down(struct fm_cmd *cmd) -{ - int ret; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - ret = ioctl(g_fm_fd, FM_IOCTL_POWERDOWN, &type); - if(ret){ - printf("FAIL:%d\n", ret); - return -1; - } - printf("OK\n"); - return 0; -} - -static int fm_rds_on_off(struct fm_cmd *cmd) -{ - int ret; - uint16_t on_off; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - if(strcmp(cmd->para[0], "on") == 0){ - on_off = 1; - }else if(strcmp(cmd->para[0], "off") == 0){ - on_off = 0; - }else{ - return -1; - } - - ret = ioctl(g_fm_fd, FM_IOCTL_RDS_ONOFF, &on_off); - if(ret){ - printf("FAIL:%d\n", ret); - return -1; - } - - printf("OK\n"); - return 0; -} - -static int get_int_val(char *src_val, int *dst_val) -{ - int ret = 0; - uint32_t tmp_hex; - int tmp_dec; - - //printf("%s\n", src_val); - if(memcmp(src_val, "0x", strlen("0x")) == 0){ - src_val += strlen("0x"); - ret = ascii_to_hex_u32(src_val, &tmp_hex); - if(!ret){ - *dst_val = (int)tmp_hex; - return 0; - }else{ - printf("error\n"); - return -1; - } - }else{ - ret = ascii_to_dec(src_val, &tmp_dec); - if(!ret && ((0 <= tmp_dec) && (tmp_dec <= 0xFFFFFFFF))){ - *dst_val = tmp_dec; - return 0; - }else{ - printf("error\n"); - return -1; - } - } -} - -static int get_u32_val(char *src_val, uint32_t *dst_val) -{ - int ret = 0; - uint32_t tmp_hex; - uint32_t tmp_dec; - - //printf("%s\n", src_val); - if (memcmp(src_val, "0x", strlen("0x")) == 0) - { - src_val += strlen("0x"); - ret = ascii_to_hex_u32(src_val, &tmp_hex); - if (!ret) - { - *dst_val = tmp_hex; - return 0; - } - else - { - printf("error\n"); - return -1; - } - } - else - { - ret = ascii_to_dec_u32(src_val, &tmp_dec); - if (!ret && (tmp_dec <= 0xFFFFFFFF)) - { - *dst_val = tmp_dec; - return 0; - } - else - { - printf("error\n"); - return -1; - } - } -} - -static int fm_tune(struct fm_cmd *cmd) -{ - int ret; - int freq; - struct fm_tune_parm parm; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_tune_parm)); - - ret = get_int_val(cmd->para[0], &freq); - if(ret){ - return -1; - } - parm.band = FM_BAND_UE; - parm.freq = freq; - parm.hilo = FM_AUTO_HILO_OFF; - parm.space = FM_SPACE_100K; - - ret = ioctl(g_fm_fd, FM_IOCTL_TUNE, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK:%d\n", parm.freq); - g_freq = parm.freq; - - return 0; -} - -static int fm_stdsrc_set(struct fm_cmd *cmd) -{ - #define FM_STD_SHELL 0 - #define FM_STD_FILE 1 - int ret; - int tmp; - static int fm_stdin = 0; - static int fm_stdout = 1; - static int fm_stderr = 2; - static int input = FM_STD_SHELL; - static int output = FM_STD_SHELL; - static int errput = FM_STD_SHELL; - - char *path = cmd->para[1]; - - if(fm_stdin == 0){ - fm_stdin = dup(0); - fm_stdout = dup(1); - fm_stderr = dup(2); - printf("backup, stdin:%d stdot:%d stderr:%d\n", fm_stdin, fm_stdout, fm_stderr); - } - - if(strcmp(cmd->para[0], "in") == 0) - { - if(strcmp(cmd->para[1], "shell") == 0) - { - if(input == FM_STD_FILE) - { - dup2(fm_stdin, 0); - input = FM_STD_SHELL; - } - else - { - ;//fm already use shell as stdin - } - } - else if(path != NULL) - { - tmp = open(path, O_RDONLY); - if(tmp < 0){ - printf("FAIL: open %s err\n", path); - return -1; - } - ret = dup2(tmp, 0); - if(ret < 0){ - printf("FAIL: dup %s err\n", path); - return -1; - } - close(tmp); - input = FM_STD_FILE; - } - else - { - printf("FAIL: path err\n"); - return -1; - } - } - else if(strcmp(cmd->para[0], "out") == 0) - { - if(strcmp(cmd->para[1], "shell") == 0) - { - if(output == FM_STD_FILE){ - dup2(fm_stdin, 1); - output = FM_STD_SHELL; - }else{ - ;//fm already use shell as stdin - } - } - else if(path != NULL) - { - tmp = open(path, O_RDWR | O_CREAT,S_IRUSR | S_IWUSR); - if(tmp < 0){ - printf("FAIL: open %s err\n", path); - return -1; - } - ret = dup2(tmp, 1); - if(ret < 0){ - printf("FAIL: dup %s err\n", path); - return -1; - } - close(tmp); - output = FM_STD_FILE; - } - else - { - printf("FAIL: path err\n"); - return -1; - } - } - else if(strcmp(cmd->para[0], "err") == 0) - { - if(strcmp(cmd->para[1], "shell") == 0) - { - if(errput == FM_STD_FILE){ - dup2(fm_stdin, 2); - errput = FM_STD_SHELL; - }else{ - ;//fm already use shell as stdin - } - } - else if(path != NULL) - { - tmp = open(path, O_RDWR | O_CREAT,S_IRUSR | S_IWUSR); - if(tmp < 0){ - printf("FAIL: open %s err\n", path); - return -1; - } - ret = dup2(tmp, 2); - if(ret < 0){ - printf("FAIL: dup %s err\n", path); - return -1; - } - close(tmp); - errput = FM_STD_FILE; - } - else - { - printf("FAIL: path err\n"); - return -1; - } - } - else - { - return -1; - } - - printf("OK:%s\n", cmd->para[0]); - - return 0; -} - -static int fm_tune_tx(struct fm_cmd *cmd) -{ - int ret; - int freq; - struct fm_tune_parm parm; - - if (g_fm_fd < 0) - { - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_tune_parm)); - - ret = get_int_val(cmd->para[0], &freq); - if(ret){ - return -1; - } - parm.band = FM_BAND_UE; - parm.freq = freq; - parm.hilo = FM_AUTO_HILO_OFF; - parm.space = FM_SPACE_100K; - - ret = ioctl(g_fm_fd, FM_IOCTL_TUNE_TX, &parm); - if (ret) - { - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK:%d\n", parm.freq); - g_freq = parm.freq; - - return 0; -} - -static int fm_rds_tx(struct fm_cmd *cmd) -{ - int ret; - struct fm_rds_tx_parm parm; - int pi; - uint16_t ps[12] = {0x3132, 0x3334, 0x3536, - 0x3132, 0x3334, 0x3536, - 0x3132, 0x3334, 0x3536, - 0x3132, 0x3334, 0x3536}; - int i; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_rds_tx_parm)); - - ret = get_int_val(cmd->para[0], &pi); - if(ret){ - return -1; - } - parm.pi = (uint16_t)pi; - for(i = 0; i < 12; i++){ - parm.ps[i] = ps[i]; - } - parm.other_rds_cnt = 0; - - ret = ioctl(g_fm_fd, FM_IOCTL_RDS_TX, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK\n"); - - return 0; -} - -static int fm_seek(struct fm_cmd *cmd) -{ - int ret; - struct fm_seek_parm parm; - - if (g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - bzero(&parm, sizeof(struct fm_tune_parm)); - - if(strcmp(cmd->para[0], "up") == 0){ - parm.seekdir = FM_SEEK_UP; - }else if(strcmp(cmd->para[0], "down") == 0){ - parm.seekdir = FM_SEEK_DOWN; - }else{ - return -1; - } - parm.band = FM_BAND_UE; - parm.freq = g_freq; - parm.hilo = FM_AUTO_HILO_OFF; - parm.space = FM_SPACE_100K; - parm.seekth = FM_SEEKTH_LEVEL_DEFAULT; - ret = ioctl(g_fm_fd, FM_IOCTL_SEEK, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK:%d\n",parm.freq); - g_freq = parm.freq; - - return 0; -} - -static int fm_scan(struct fm_cmd *cmd) -{ - int ret; - int seekdir; - struct fm_scan_parm parm; - uint16_t CH_Data[256], tmp_val, ch_offset, MASK_CH; - int LOFREQ = 875; - int i = 0, step = 0, ch_cnt = 0; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_scan_parm)); - - parm.band = FM_BAND_UE; - parm.space = FM_SPACE_100K; - parm.hilo = FM_AUTO_HILO_OFF; - parm.freq = g_freq; - parm.ScanTBLSize = sizeof(parm.ScanTBL)/sizeof(uint16_t); - - ret = ioctl(g_fm_fd, FM_IOCTL_SCAN, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK\n"); - g_freq = parm.freq; - - //parm.ScanTBLSize will return valid scan table size. - printf("Scan channel:"); - for(ch_offset = 0; ch_offset < parm.ScanTBLSize; ch_offset++){ - MASK_CH = 0x0001; - tmp_val = parm.ScanTBL[ch_offset]; - for(step = 0; step < 16; step++){ - MASK_CH = 1 << step; - if((MASK_CH & tmp_val)!=0){ - *(CH_Data + ch_cnt) = LOFREQ + (ch_offset * 16 + step) * (parm.space); //100KHz - if(*(CH_Data + ch_cnt) <= 1080){ - printf("%d ", *(CH_Data + ch_cnt)); - ch_cnt++; - } - } - } - } - printf("\nScan channel num:%d\n", ch_cnt); - - return 0; -} - -static int fm_jammer_scan(struct fm_cmd *cmd) -{ - int ret; - int tmp; - int seekdir; - struct fm_scan_parm parm; - uint16_t CH_Data[256], tmp_val, ch_offset, MASK_CH; - int LOFREQ = 875; - int i = 0, step = 0, ch_cnt = 0; - struct fm_cmd cmd_tmp; - struct fm_cqi_req cqi_req; - struct fm_cqi *cqi = NULL; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - cmd_tmp.para[0] = "0x61"; - cmd_tmp.para[1] = "0xDFFF"; - cmd_tmp.para[2] = "0x2000"; - ret = fm_mod_reg(&cmd_tmp); - if(ret){ - return ret; - } - - bzero(&parm, sizeof(struct fm_scan_parm)); - - parm.band = FM_BAND_UE; - parm.space = FM_SPACE_100K; - parm.hilo = FM_AUTO_HILO_OFF; - parm.freq = g_freq; - parm.ScanTBLSize = sizeof(parm.ScanTBL)/sizeof(uint16_t); - - ret = ioctl(g_fm_fd, FM_IOCTL_SCAN, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK\n"); - g_freq = parm.freq; - - //parm.ScanTBLSize will return valid scan table size. - printf("Scan channel:"); - for(ch_offset = 0; ch_offset < parm.ScanTBLSize; ch_offset++){ - MASK_CH = 0x0001; - tmp_val = parm.ScanTBL[ch_offset]; - for(step = 0; step < 16; step++){ - MASK_CH = 1 << step; - if((MASK_CH & tmp_val)!=0){ - *(CH_Data + ch_cnt) = LOFREQ + (ch_offset * 16 + step) * (parm.space); //100KHz - printf("%d ", *(CH_Data + ch_cnt)); - ch_cnt++; - } - } - } - printf("\nScan channel num:%d\n", ch_cnt); - - cqi_req.ch_num = (uint16_t)ch_cnt; - cqi_req.ch_num = (cqi_req.ch_num > 255) ? 255 : cqi_req.ch_num; - cqi_req.buf_size = cqi_req.ch_num*sizeof(struct fm_cqi); - cqi_req.cqi_buf = malloc(cqi_req.buf_size + 1); - if(!cqi_req.cqi_buf){ - printf("no mem\n"); - return -1; - } - - ret = ioctl(g_fm_fd, FM_IOCTL_CQI_GET, &cqi_req); - if(ret){ - free(cqi_req.cqi_buf); - printf("FAIL:%d\n", ret); - return -1; - } - cqi = (struct fm_cqi*)cqi_req.cqi_buf; - tmp = 0; - for(tmp = 0; tmp < cqi_req.ch_num; tmp++){ - printf("freq %d, jam_freq 0x%04x, reserve 0x%04x\n", (cqi[tmp].ch/2 + 640), cqi[tmp].rssi, cqi[tmp].reserve); - } - free(cqi_req.cqi_buf); - printf("OK\n"); - - cmd_tmp.para[0] = "0x61"; - cmd_tmp.para[1] = "0xDFFF"; - cmd_tmp.para[2] = "0x0000"; - ret = fm_mod_reg(&cmd_tmp); - if(ret){ - return ret; - } - - return 0; -} - -static int fm_getcqi(struct fm_cmd *cmd) -{ - int ret; - int tmp; - struct fm_cqi_req cqi_req; - struct fm_cqi *cqi = NULL; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - ret = get_int_val(cmd->para[0], &tmp); - if(ret){ - return -1; - } - cqi_req.ch_num = (uint16_t)tmp; - cqi_req.ch_num = (cqi_req.ch_num > 255) ? 255 : cqi_req.ch_num; - cqi_req.buf_size = cqi_req.ch_num*sizeof(struct fm_cqi); - cqi_req.cqi_buf = malloc(cqi_req.buf_size + 1); - if(!cqi_req.cqi_buf){ - printf("no mem\n"); - return -1; - } - - ret = ioctl(g_fm_fd, FM_IOCTL_CQI_GET, &cqi_req); - if(ret){ - free(cqi_req.cqi_buf); - printf("FAIL:%d\n", ret); - return -1; - } - cqi = (struct fm_cqi*)cqi_req.cqi_buf; - tmp = 0; - for(tmp = 0; tmp < cqi_req.ch_num; tmp++){ - printf("freq %d, rssi 0x%04x, reserve 0x%04x\n", cqi[tmp].ch/2 + 640, cqi[tmp].rssi, cqi[tmp].reserve); - } - free(cqi_req.cqi_buf); - printf("OK\n"); - - return 0; -} - -static int fm_scan_force_stop(struct fm_cmd *cmd) -{ - int stop_scan = 1; - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - if(lseek(g_fm_fd, 0, SEEK_END) != -1){ - printf("OK\n"); - return 0; - }else{ - printf("FAIL\n"); - return -1; - } - -} - -//scan test. -static int fm_seek_all(struct fm_cmd *cmd) -{ - int ret; - int start_freq = 1080; - - struct fm_seek_parm parm; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - g_freq = start_freq; - - do{ - bzero(&parm, sizeof(struct fm_tune_parm)); - parm.band = FM_BAND_UE; - parm.freq = g_freq; - parm.hilo = FM_AUTO_HILO_OFF; - parm.space = FM_SPACE_100K; - parm.seekdir = FM_SEEK_UP; - parm.seekth = FM_SEEKTH_LEVEL_DEFAULT; - - ret = ioctl(g_fm_fd, FM_IOCTL_SEEK, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK:%d:%d:%d\n", ret, parm.err, parm.freq); - g_freq = parm.freq; - }while(parm.err == FM_SUCCESS); - - return 0; -} - -static int fm_mute(struct fm_cmd *cmd) -{ - int ret; - uint32_t mute = 1; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - ret = ioctl(g_fm_fd, FM_IOCTL_MUTE, &mute); - if(ret){ - printf("FAIL:%d\n", ret); - return -1; - } - - printf("OK\n"); - return 0; -} - -static int fm_unmute(struct fm_cmd *cmd) -{ - int ret; - uint32_t mute = 0; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - ret = ioctl(g_fm_fd, FM_IOCTL_MUTE, &mute); - if(ret){ - printf("FAIL:%d\n", ret); - return -1; - } - - printf("OK\n"); - return 0; -} - -static int fm_setvol(struct fm_cmd *cmd) -{ - int ret; - uint32_t vol; - int tmp; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - ret = get_int_val(cmd->para[0], &tmp); - if(ret){ - return -1; - } - vol = (uint32_t)tmp; - ret = ioctl(g_fm_fd, FM_IOCTL_SETVOL, &vol); - if(ret){ - printf("FAIL:%d\n", ret); - return -1; - } - - printf("OK\n"); - return 0; -} - -static int fm_getvol(struct fm_cmd *cmd) -{ - int ret; - uint32_t vol; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - ret = ioctl(g_fm_fd, FM_IOCTL_GETVOL, &vol); - if(ret){ - printf("FAIL:%d\n", ret); - return -1; - } - printf("OK\n"); - printf("volume:%d\n", (int)vol); - - return 0; -} - -static int fm_getrssi(struct fm_cmd *cmd) -{ - int ret; - int rssi; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - ret = ioctl(g_fm_fd, FM_IOCTL_GETRSSI, &rssi); - if(ret){ - printf("FAIL:%d\n", ret); - return -1; - } - printf("OK\n"); - printf("RSSI:%d\n", rssi); - - return 0; -} - -static int fm_32kppm_compensation(struct fm_cmd *cmd) -{ - int ret; - int tmp = -1; - struct fm_gps_rtc_info rtcInfo; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&rtcInfo, sizeof(struct fm_gps_rtc_info)); - rtcInfo.ageThd = 2; - rtcInfo.driftThd = 30; - rtcInfo.retryCnt = 2; - rtcInfo.tvThd.tv_sec = 10; - - ret = get_int_val(cmd->para[0], &tmp); - if(ret){ - return -1; - } - rtcInfo.age = tmp; - - ret = get_int_val(cmd->para[1], &tmp); - if(ret){ - return -1; - } - rtcInfo.drift = tmp; - ret = ioctl(g_fm_fd, FM_IOCTL_GPS_RTC_DRIFT, &rtcInfo); - if(ret){ - printf("FAIL:%d\n", ret); - return -1; - } - printf("OK\n"); - return 0; -} - -static int fm_i2s_set(struct fm_cmd *cmd) -{ - int ret; - int tmp = -1; - static struct fm_i2s_setting i2s_cfg; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&i2s_cfg, sizeof(struct fm_i2s_setting)); - i2s_cfg.onoff = FM_I2S_ON; - i2s_cfg.mode = FM_I2S_SLAVE; - i2s_cfg.sample = FM_I2S_48K; - - if(strcmp(cmd->para[0], "on") == 0){ - i2s_cfg.onoff = FM_I2S_ON; - }else if(strcmp(cmd->para[0], "off") == 0){ - i2s_cfg.onoff = FM_I2S_OFF; - }else{ - return -1; - } - - if(strcmp(cmd->para[1], "master") == 0){ - i2s_cfg.mode = FM_I2S_MASTER; - }else if(strcmp(cmd->para[1], "slave") == 0){ - i2s_cfg.mode = FM_I2S_SLAVE; - }else{ - return -1; - } - - if(strcmp(cmd->para[2], "32k") == 0){ - i2s_cfg.sample = FM_I2S_32K; - }else if(strcmp(cmd->para[2], "44k") == 0){ - i2s_cfg.mode = FM_I2S_44K; - }else if(strcmp(cmd->para[2], "48k") == 0){ - i2s_cfg.mode = FM_I2S_48K; - }else{ - return -1; - } - - ret = ioctl(g_fm_fd, FM_IOCTL_I2S_SETTING, &i2s_cfg); - if(ret){ - printf("FAIL:%d\n", ret); - return -1; - } - printf("OK\n"); - return 0; -} - -static int fm_over_bt(struct fm_cmd *cmd) -{ - int ret; - uint32_t viabt = -1; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - if(strcmp(cmd->para[0], "on") == 0){ - viabt = 1; - }else if(strcmp(cmd->para[0], "off") == 0){ - viabt = 0; - }else{ - return -1; - } - ret = ioctl(g_fm_fd, FM_IOCTL_OVER_BT_ENABLE, &viabt); - if(ret){ - printf("FAIL:%d\n", ret); - return -1; - } - printf("OK\n"); - return 0; -} - -static int fm_read_reg(struct fm_cmd *cmd) -{ - int ret; - int tmp; - struct fm_ctl_parm parm; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_ctl_parm)); - - ret = get_int_val(cmd->para[0], &tmp); - if(ret){ - return -1; - } - parm.addr = (uint8_t)tmp; - parm.rw_flag = 1; - - ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK: 0x%02x = 0x%04x\n", parm.addr, parm.val); - - return 0; -} - -static int print_page(uint16_t page, int mode) -{ - int ret; - uint8_t addr = 0x00; - int i = 0; - int log_fd = -1; - int std_out = -1; - struct fm_ctl_parm parm; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - if(mode == 0){ - ;// - }else if(mode == 1){ - std_out = dup(1); - if(std_out < 0){ - ;//dup std out error - } - close(1); - log_fd = open("/data/data/fmlog", O_RDWR | O_CREAT | O_APPEND,S_IRUSR | S_IWUSR); - if(log_fd < 0){ - ;//error - } - } - - //setup page - printf("page %d.\n", (int)page); - bzero(&parm, sizeof(struct fm_ctl_parm)); - parm.addr = 0x9F; //page addr - parm.val = 0x0000; //page 0 - parm.rw_flag = 0; //write - ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - -start: - bzero(&parm, sizeof(struct fm_ctl_parm)); - parm.addr = addr; - printf("0x%02x ", parm.addr); - parm.rw_flag = 1; - ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("0x%04x\n", parm.val); - addr++; - if(++i < 256) - goto start; - - if(mode == 0){ - ;// - }else if(mode == 1){ - close(log_fd); - std_out = dup(std_out); - printf("stdout [fd=%d]\n", std_out); - } - return 0; -} - -static int fm_print_reg(struct fm_cmd *cmd) -{ - int ret = 0; - int tmp = -1; - - if(strcmp(cmd->para[0], "shell") == 0){ - tmp = 0; - }else if(strcmp(cmd->para[0], "file") == 0){ - tmp = 1; - }else{ - return -1; - } - ret = print_page(0x03, tmp); - ret = print_page(0x02, tmp); - ret = print_page(0x01, tmp); - ret = print_page(0x00, tmp); - printf("OK\n"); - - return 0; -} - -static int fm_write_reg(struct fm_cmd *cmd) -{ - int ret; - int tmp; - struct fm_ctl_parm parm; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_ctl_parm)); - - ret = get_int_val(cmd->para[0], &tmp); - if(ret){ - return -1; - } - parm.addr = (uint8_t)tmp; - ret = get_int_val(cmd->para[1], &tmp); - if(ret){ - return -1; - } - parm.val = (uint16_t)tmp; - parm.rw_flag = 0; - - ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK: 0x%02x = 0x%04x\n", parm.addr, parm.val); - - return 0; -} - -/* - * fm_mod_reg - * mod addr mask val -> mod 0x60 0xFFFE 0x0001 - */ -static int fm_mod_reg(struct fm_cmd *cmd) -{ - int ret; - int tmp; - uint16_t mask; - uint16_t val; - struct fm_ctl_parm parm; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - bzero(&parm, sizeof(struct fm_ctl_parm)); - - ret = get_int_val(cmd->para[0], &tmp); //get addr - if(ret){ - return -1; - } - parm.addr = (uint8_t)tmp; - parm.rw_flag = 1; - - ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - //printf("addr: 0x%02x\n", parm.addr); - - ret = get_int_val(cmd->para[1], &tmp); //get mask - if(ret){ - return -1; - } - mask = (uint16_t)tmp; - //printf("mask: 0x%04x\n", mask); - - ret = get_int_val(cmd->para[2], &tmp); //get bits - if(ret){ - return -1; - } - val = (uint16_t)tmp; - //printf("val: 0x%04x\n", val); - - parm.val = (parm.val & mask) | (val & (~mask)); - parm.rw_flag = 0; - ret = ioctl(g_fm_fd, FM_IOCTL_RW_REG, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK: 0x%02x = 0x%04x\n", parm.addr, parm.val); - - return 0; -} - -static int fm_delay(struct fm_cmd *cmd) -{ - int ret = 0; - int tmp; - struct timeval tval; - - ret = get_int_val(cmd->para[0], &tmp); - if(ret){ - return -1; - } - - if(strcmp(cmd->para[1], "s") == 0){ - tval.tv_sec = tmp; - tval.tv_usec = 0; - }else if(strcmp(cmd->para[1], "ms") == 0){ - tval.tv_sec = 0; - tval.tv_usec = tmp*1000; - }else if(strcmp(cmd->para[1], "us") == 0){ - tval.tv_sec = 0; - tval.tv_usec = tmp; - }else{ - return -1; - } - printf("OK: %ds,%dus \n", (int)tval.tv_sec, (int)tval.tv_usec); - select(0, NULL, NULL, NULL, &tval); - - return 0; -} - -static int fm_help(struct fm_cmd *cmd) -{ - int id = -1; - - printf("-------------------------------------------------------\n"); - printf("%s\t%s\t\t%s\n", "cmd id", "cmd name", "cmd para num"); - printf("-------------------------------------------------------\n"); - while((++id) < (int)(sizeof(g_cmd)/sizeof(g_cmd[0]))) { - printf("%d\t%s\t\t%d\t%s\n", id, g_cmd[id].name, g_cmd[id].para_size, g_cmd[id].description); - } - printf("-------------------------------------------------------\n"); - printf("OK\n"); - - return 0; -} - -static int fm_bye(struct fm_cmd *cmd) -{ - autofm_run = 0; - - printf("OK\n"); - return 0; -} - -static enum fm_event_type get_key_type(char *key, struct fm_cmd **pcmd) -{ - int i; - - for(i = 0; i < (int)(sizeof(g_cmd)/sizeof(g_cmd[0])); i++){ - if(strcmp(g_cmd[i].name, key) == 0){ - //printf("%s %d\n", g_cmd[i].name, g_cmd[i].para_size); - *pcmd = &g_cmd[i]; - return FM_EVENT_CMD; - } - } - return FM_EVENT_VAL; -} - -static int daemonize(int argc, char **argv) -{ - int ret = 0; - int fd0, fd1, fd2; - unsigned int i; - pid_t pid; - struct rlimit rl; - struct sigaction sa; - - umask(0); - - ret = getrlimit(RLIMIT_NOFILE, &rl); - if (ret < 0){ - return -1; - } - - pid = fork(); - if (pid < 0){ - return -1; - }else if (pid > 0){ - exit(0); - } - - setsid(); - - sa.sa_handler = SIG_IGN; - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - - if (sigaction(SIGHUP, &sa, NULL) < 0){ - return -1; - } - - pid = fork(); - if (pid < 0){ - return -1; - }else if (pid > 0){ - exit(0); - } - - chdir("/"); - - if (rl.rlim_max == RLIM_INFINITY){ - rl.rlim_max = 1024; - } - - for (i = 0; i < (unsigned int)argc; i++){ - printf("%s ", argv[i]); - } - printf("\n"); - - for (i = 0; i < rl.rlim_max; i++){ - close(i); - } - - open(argv[1], O_RDWR | O_CREAT); - open(argv[2], O_RDWR | O_CREAT); - open(argv[3], O_RDWR | O_CREAT); - - return 0; -} - -static int fm_top_read_reg(struct fm_cmd *cmd) -{ - int ret; - int tmp; - struct fm_top_rw_parm parm; - - if (g_fm_fd < 0) - { - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_top_rw_parm)); - - ret = get_int_val(cmd->para[0], &tmp); - if(ret){ - return -1; - } - parm.addr = (uint16_t)tmp; - parm.rw_flag = 1; - - ret = ioctl(g_fm_fd, FM_IOCTL_TOP_RDWR, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK: 0x%04x = 0x%08x\n", parm.addr, parm.val); - - return 0; -} - -static int fm_top_write_reg(struct fm_cmd *cmd) -{ - int ret; - int tmp; - struct fm_top_rw_parm parm; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_top_rw_parm)); - - ret = get_int_val(cmd->para[0], &tmp); - if(ret){ - return -1; - } - parm.addr = (uint16_t)tmp; - ret = get_int_val(cmd->para[1], &tmp); - if(ret){ - return -1; - } - parm.val = (uint32_t)tmp; - parm.rw_flag = 0; - - ret = ioctl(g_fm_fd, FM_IOCTL_TOP_RDWR, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK: 0x%04x = 0x%08x\n", parm.addr, parm.val); - - return 0; -} - -static int fm_host_read_reg(struct fm_cmd *cmd) -{ - int ret; - uint32_t tmp; - struct fm_host_rw_parm parm; - - if (g_fm_fd < 0) - { - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_host_rw_parm)); - - ret = get_u32_val(cmd->para[0], &tmp); - printf("tmp = 0x%08x\n", tmp); - if (ret) - { - return -1; - } - parm.addr = tmp; - parm.rw_flag = 1; - - ret = ioctl(g_fm_fd, FM_IOCTL_HOST_RDWR, &parm); - if (ret) - { - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK: 0x%08x = 0x%08x\n", parm.addr, parm.val); - - return 0; -} - -static int fm_host_write_reg(struct fm_cmd *cmd) -{ - int ret; - uint32_t tmp; - struct fm_host_rw_parm parm; - - if(g_fm_fd < 0){ - printf("WARN fd unavailable\n"); - return -2; - } - - bzero(&parm, sizeof(struct fm_host_rw_parm)); - - ret = get_u32_val(cmd->para[0], &tmp); - if(ret){ - return -1; - } - parm.addr = tmp; - ret = get_u32_val(cmd->para[1], &tmp); - if(ret){ - return -1; - } - parm.val = tmp; - parm.rw_flag = 0; - - ret = ioctl(g_fm_fd, FM_IOCTL_HOST_RDWR, &parm); - if(ret){ - printf("FAIL:%d:%d\n", ret, parm.err); - return -1; - } - printf("OK: 0x%08x = 0x%08x\n", parm.addr, parm.val); - - return 0; -} - -int main(int argc, char **argv) -{ - int ret = 0; - int i; - char *buf = NULL; -#define BUF_SIZE 1024*16 - - buf = malloc(BUF_SIZE); - if(!buf){ - printf("fm malloc memory failed!\n"); - return -1; - } - - printf("\n%s:%s:%s\n", argv[0], __DATE__, __TIME__); - for (i = 0; i < argc; i++){ - printf("%s ", argv[i]); - } - printf("\n"); - -#ifdef FM_TOOL_BUILD_DEAMON - daemonize(argc, argv); -#endif - - while(autofm_run){ - char *p = buf; - char *key = NULL; - enum fm_event_type keytype; - struct fm_cmd *cmd = NULL; - enum fm_sta sta = FM_STA_NON; - - memset(buf, 0, BUF_SIZE); - get_cmd(buf, BUF_SIZE); //get a line form input file - - while(cmd_parser(p, &p, &key) == 0){ - keytype = get_key_type(key, &cmd); //this function will update "cmd" pointer if need - switch(sta){ - case FM_STA_NON: - if(keytype == FM_EVENT_VAL){ - printf("bad format\n"); - }else if(cmd->para_size == 0){ - //printf("%s\n", cmd->name); - cmd->handler(cmd); //yes, do cmd - }else{ - sta = FM_STA_CMD; //cmd need one or more para - } - break; - - case FM_STA_CMD: - if(keytype == FM_EVENT_VAL){ - cmd->para[0] = key; - if(cmd->para_size == 1){ - //printf("%s\n", cmd->name); - cmd->handler(cmd); //yes, do cmd - sta = FM_STA_NON; - }else{ - sta = FM_STA_VAL_1; - } - }else{ - printf("bad format\n"); - if(cmd->para_size == 0){ - //printf("%s\n", cmd->name); - cmd->handler(cmd); //yes, do cmd - sta = FM_STA_NON; - }else{ - ; - } - } - break; - - case FM_STA_VAL_1: - if(keytype == FM_EVENT_VAL){ - cmd->para[1] = key; - if(cmd->para_size == 2){ - //printf("%s\n", cmd->name); - cmd->handler(cmd); - sta = FM_STA_NON; - }else{ - sta = FM_STA_VAL_2; - } - }else{ - printf("bad format\n"); - if(cmd->para_size == 0){ - //printf("%s\n", cmd->name); - cmd->handler(cmd); //yes, do cmd - sta = FM_STA_NON; - }else{ - sta = FM_STA_CMD; - } - } - break; - - case FM_STA_VAL_2: - if(keytype == FM_EVENT_VAL){ - cmd->para[2] = key; - //printf("%s\n", cmd->name); - cmd->handler(cmd); //yes, do cmd - sta = FM_STA_NON; - }else{ - printf("bad format\n"); - if(cmd->para_size == 0){ - //printf("%s\n", cmd->name); - cmd->handler(cmd); //yes, do cmd - sta = FM_STA_NON; - }else{ - sta = FM_STA_CMD; - } - } - default: - break; - } - } - } - - return 0; -} - diff --git a/MediaTek/fmradiolibs/autofm/autofm.h b/MediaTek/fmradiolibs/autofm/autofm.h deleted file mode 100644 index ecd7d40..0000000 --- a/MediaTek/fmradiolibs/autofm/autofm.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#ifndef __AUTOFM_H__ -#define __AUTOFM_H__ - -enum fm_cmd_parser_state -{ - FM_CMD_STAT_NONE = 0, - FM_CMD_STAT_WORD -}; - -typedef enum fm_cfg_parser_state fm_cfg_parser_state_t; - -#define COMMENT_CHAR '#' -#define DELIMIT_CHAR '=' -#define isspace(a) ((a) == 0x20) - - -struct fm_cmd -{ - char *name; - int para_size; - int (*handler)(struct fm_cmd *cmd); - char *para[3]; - char *description; -}; - -enum fm_sta -{ - FM_STA_NON, - FM_STA_CMD, - FM_STA_VAL_1, - FM_STA_VAL_2 -}; - -enum fm_event_type -{ - FM_EVENT_VAL, //a value string - FM_EVENT_CMD //a cmd string, the cmd need 0 para -}; - -#endif //__AUTOFM_H__
\ No newline at end of file diff --git a/MediaTek/fmradiolibs/autofm/fm_cust_cfg.h b/MediaTek/fmradiolibs/autofm/fm_cust_cfg.h deleted file mode 100644 index 1cc1d03..0000000 --- a/MediaTek/fmradiolibs/autofm/fm_cust_cfg.h +++ /dev/null @@ -1,119 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2014. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#ifndef __FM_CUST_CFG_H__ -#define __FM_CUST_CFG_H__ - -//scan sort algorithm -enum{ - FM_SCAN_SORT_NON = 0, - FM_SCAN_SORT_UP, - FM_SCAN_SORT_DOWN, - FM_SCAN_SORT_MAX -}; - -//***************************************************************************************** -//***********************************FM config for customer: start****************************** -//***************************************************************************************** -//RX -#define FM_RX_RSSI_TH_LONG 0xFF01 //FM radio long antenna RSSI threshold(11.375dBuV) -#define FM_RX_RSSI_TH_SHORT 0xFEE0 //FM radio short antenna RSSI threshold(-1dBuV) -#define FM_RX_CQI_TH 0x00E9 //FM radio Channel quality indicator threshold(0x0000~0x00FF) -#define FM_RX_MR_TH 0x01BD //FM radio MR threshold -#define FM_RX_SEEK_SPACE 1 //FM radio seek space,1:100KHZ; 2:200KHZ -#define FM_RX_SCAN_CH_SIZE 40 //FM radio scan max channel size -#define FM_RX_BAND 1 //FM radio band, 1:87.5MHz~108.0MHz; 2:76.0MHz~90.0MHz; 3:76.0MHz~108.0MHz; 4:special -#define FM_RX_BAND_FREQ_L 875 //FM radio special band low freq(Default 87.5MHz) -#define FM_RX_BAND_FREQ_H 1080 //FM radio special band high freq(Default 108.0MHz) -#define FM_RX_SCAN_SORT_SELECT FM_SCAN_SORT_NON -#define FM_RX_FAKE_CH_NUM 1 -#define FM_RX_FAKE_CH_RSSI 40 -#define FM_RX_FAKE_CH_1 1075 -#define FM_RX_FAKE_CH_2 0 -#define FM_RX_FAKE_CH_3 0 -#define FM_RX_FAKE_CH_4 0 -#define FM_RX_FAKE_CH_5 0 -#define FM_RX_DEEMPHASIS 0 //0-50us, China Mainland; 1-75us China Taiwan -#define FM_RX_OSC_FREQ 0 //0-26MHz; 1-19MHz; 2-24MHz; 3-38.4MHz; 4-40MHz; 5-52MHz - -//TX -#define FM_TX_PWR_LEVEL_MAX 120 -#define FM_TX_SCAN_HOLE_LOW 923 //92.3MHz~95.4MHz should not show to user -#define FM_TX_SCAN_HOLE_HIGH 954 //92.3MHz~95.4MHz should not show to user - - -//***************************************************************************************** -//***********************************FM config for customer:end ******************************* -//***************************************************************************************** -// band -#define FM_BAND_UNKNOWN 0 -#define FM_BAND_UE 1 // US/Europe band 87.5MHz ~ 108MHz (DEFAULT) -#define FM_BAND_JAPAN 2 // Japan band 76MHz ~ 90MHz -#define FM_BAND_JAPANW 3 // Japan wideband 76MHZ ~ 108MHz -#define FM_BAND_SPECIAL 4 // special band between 76MHZ and 108MHz -#define FM_BAND_DEFAULT FM_BAND_UE -#define FM_FREQ_MIN FM_RX_BAND_FREQ_L -#define FM_FREQ_MAX FM_RX_BAND_FREQ_H -#define FM_RAIDO_BAND FM_BAND_UE -// space -#define FM_SPACE_UNKNOWN 0 -#define FM_SPACE_100K 1 -#define FM_SPACE_200K 2 -#define FM_SPACE_DEFAULT FM_RX_SEEK_SPACE -#define FM_SEEK_SPACE FM_RX_SEEK_SPACE -//max scan chl num -#define FM_MAX_CHL_SIZE FM_RX_SCAN_CH_SIZE -// auto HiLo -#define FM_AUTO_HILO_OFF 0 -#define FM_AUTO_HILO_ON 1 -// seek direction -#define FM_SEEK_UP 0 -#define FM_SEEK_DOWN 1 - -#define FM_CHIP_AR1000 0x1000 -#define FM_CHIP_MT5192 0x91 -#define FM_CHIP_MT5193 0x92 -#define FM_CHIP_MT6616 0x6616 -#define FM_CHIP_MT6626 0x6626 -#define FM_CHIP_MT6628 0x6628 -#define FM_CHIP_MT6620 0x6620 -#define FM_CHIP_UNSUPPORTED 0xffff - -// seek threshold -#define FM_SEEKTH_LEVEL_DEFAULT 4 - -#endif // __FM_CUST_CFG_H__ diff --git a/MediaTek/fmradiolibs/autofm/fm_ioctl.h b/MediaTek/fmradiolibs/autofm/fm_ioctl.h deleted file mode 100644 index 605b765..0000000 --- a/MediaTek/fmradiolibs/autofm/fm_ioctl.h +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#ifndef __FM_IOCTL_H__ -#define __FM_IOCTL_H__ -#include "fm_rds.h" -#include "fm_main.h" - -#define FM_IOC_MAGIC 0xf5 // FIXME: any conflict? - -#define FM_IOCTL_POWERUP _IOWR(FM_IOC_MAGIC, 0, struct fm_tune_parm) -#define FM_IOCTL_POWERDOWN _IOWR(FM_IOC_MAGIC, 1, int32_t) -#define FM_IOCTL_TUNE _IOWR(FM_IOC_MAGIC, 2, struct fm_tune_parm) -#define FM_IOCTL_SEEK _IOWR(FM_IOC_MAGIC, 3, struct fm_seek_parm) -#define FM_IOCTL_SETVOL _IOWR(FM_IOC_MAGIC, 4, uint32_t) -#define FM_IOCTL_GETVOL _IOWR(FM_IOC_MAGIC, 5, uint32_t) -#define FM_IOCTL_MUTE _IOWR(FM_IOC_MAGIC, 6, uint32_t) -#define FM_IOCTL_GETRSSI _IOWR(FM_IOC_MAGIC, 7, int32_t) -#define FM_IOCTL_SCAN _IOWR(FM_IOC_MAGIC, 8, struct fm_scan_parm) -#define FM_IOCTL_STOP_SCAN _IO(FM_IOC_MAGIC, 9) -#define FM_IOCTL_POWERUP_TX _IOWR(FM_IOC_MAGIC, 20, struct fm_tune_parm) -#define FM_IOCTL_TUNE_TX _IOWR(FM_IOC_MAGIC, 21, struct fm_tune_parm) -#define FM_IOCTL_RDS_TX _IOWR(FM_IOC_MAGIC, 22, struct fm_rds_tx_parm) - -//IOCTL and struct for test -#define FM_IOCTL_GETCHIPID _IOWR(FM_IOC_MAGIC, 10, uint16_t) -#define FM_IOCTL_EM_TEST _IOWR(FM_IOC_MAGIC, 11, struct fm_em_parm) -#define FM_IOCTL_RW_REG _IOWR(FM_IOC_MAGIC, 12, struct fm_ctl_parm) -#define FM_IOCTL_GETMONOSTERO _IOWR(FM_IOC_MAGIC, 13, uint16_t) -#define FM_IOCTL_GETCURPAMD _IOWR(FM_IOC_MAGIC, 14, uint16_t) -#define FM_IOCTL_GETGOODBCNT _IOWR(FM_IOC_MAGIC, 15, uint16_t) -#define FM_IOCTL_GETBADBNT _IOWR(FM_IOC_MAGIC, 16, uint16_t) -#define FM_IOCTL_GETBLERRATIO _IOWR(FM_IOC_MAGIC, 17, uint16_t) - -//IOCTL for RDS -#define FM_IOCTL_RDS_ONOFF _IOWR(FM_IOC_MAGIC, 18, uint16_t) -#define FM_IOCTL_RDS_SUPPORT _IOWR(FM_IOC_MAGIC, 19, int32_t) - -#define FM_IOCTL_RDS_SIM_DATA _IOWR(FM_IOC_MAGIC, 23, uint32_t) -#define FM_IOCTL_IS_FM_POWERED_UP _IOWR(FM_IOC_MAGIC, 24, uint32_t) - -//IOCTL for FM Tx -#define FM_IOCTL_TX_SUPPORT _IOWR(FM_IOC_MAGIC, 25, int32_t) -#define FM_IOCTL_RDSTX_SUPPORT _IOWR(FM_IOC_MAGIC, 26, int32_t) -#define FM_IOCTL_RDSTX_ENABLE _IOWR(FM_IOC_MAGIC, 27, int32_t) -#define FM_IOCTL_TX_SCAN _IOWR(FM_IOC_MAGIC, 28, struct fm_tx_scan_parm) - -//IOCTL for FM over BT -#define FM_IOCTL_OVER_BT_ENABLE _IOWR(FM_IOC_MAGIC, 29, int32_t) - -//IOCTL for FM ANTENNA SWITCH -#define FM_IOCTL_ANA_SWITCH _IOWR(FM_IOC_MAGIC, 30, int32_t) -#define FM_IOCTL_GETCAPARRAY _IOWR(FM_IOC_MAGIC, 31, int32_t) - -//IOCTL for FM compensation by GPS RTC -#define FM_IOCTL_GPS_RTC_DRIFT _IOWR(FM_IOC_MAGIC, 32, struct fm_gps_rtc_info) - -//IOCTL for FM I2S Setting -#define FM_IOCTL_I2S_SETTING _IOWR(FM_IOC_MAGIC, 33, struct fm_i2s_setting) - -#define FM_IOCTL_RDS_GROUPCNT _IOWR(FM_IOC_MAGIC, 34, struct rds_group_cnt_req) -#define FM_IOCTL_RDS_GET_LOG _IOWR(FM_IOC_MAGIC, 35, struct rds_raw_data) - -#define FM_IOCTL_SCAN_GETRSSI _IOWR(FM_IOC_MAGIC, 36, struct fm_rssi_req) -#define FM_IOCTL_SETMONOSTERO _IOWR(FM_IOC_MAGIC, 37, int32_t) - -#define FM_IOCTL_RDS_BC_RST _IOWR(FM_IOC_MAGIC, 38, int32_t) -#define FM_IOCTL_CQI_GET _IOWR(FM_IOC_MAGIC, 39, struct fm_cqi_req) - -#define FM_IOCTL_TOP_RDWR _IOWR(FM_IOC_MAGIC, 43, struct fm_top_rw_parm) -#define FM_IOCTL_HOST_RDWR _IOWR(FM_IOC_MAGIC, 44, struct fm_host_rw_parm) - -#define FM_IOCTL_DUMP_REG _IO(FM_IOC_MAGIC, 0xFF) - -#endif //__FM_IOCTL_H__ - diff --git a/MediaTek/fmradiolibs/autofm/fm_main.h b/MediaTek/fmradiolibs/autofm/fm_main.h deleted file mode 100644 index fdcb314..0000000 --- a/MediaTek/fmradiolibs/autofm/fm_main.h +++ /dev/null @@ -1,244 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#ifndef __FM_MAIN_H__ -#define __FM_MAIN_H__ - -#define FM_NAME "fm" -#define FM_DEVICE_NAME "/dev/fm" - -#define FM_VOL_MAX 0x2B // 43 volume(0-15) - -#define FM_RDS_ENABLE 0x01 // 1: enable RDS, 0:disable RDS -#define FM_RDS_DATA_READY (1 << 0) - -// errno -#define FM_SUCCESS 0 -#define FM_FAILED 1 -#define FM_EPARM 2 -#define FM_BADSTATUS 3 -#define FM_TUNE_FAILED 4 -#define FM_SEEK_FAILED 5 -#define FM_BUSY 6 -#define FM_SCAN_FAILED 7 - -struct fm_tune_parm { - uint8_t err; - uint8_t band; - uint8_t space; - uint8_t hilo; - uint16_t freq; // IN/OUT parameter -}; - -struct fm_seek_parm { - uint8_t err; - uint8_t band; - uint8_t space; - uint8_t hilo; - uint8_t seekdir; - uint8_t seekth; - uint16_t freq; // IN/OUT parameter -}; - -struct fm_scan_parm { - uint8_t err; - uint8_t band; - uint8_t space; - uint8_t hilo; - uint16_t freq; // OUT parameter - uint16_t ScanTBL[16]; //need no less than the chip - uint16_t ScanTBLSize; //IN/OUT parameter -}; - -struct fm_cqi -{ - uint16_t ch; - uint16_t rssi; - uint16_t reserve; -}; - -struct fm_cqi_req -{ - uint16_t ch_num; - int buf_size; - char *cqi_buf; -}; - -struct fm_ch_rssi{ - uint16_t freq; - uint16_t rssi; -}; - -struct fm_rssi_req{ - uint16_t num; - uint16_t read_cnt; - struct fm_ch_rssi cr[16*16]; -}; - -struct fm_rds_tx_parm { - uint8_t err; - uint16_t pi; - uint16_t ps[12]; // 4 ps - uint16_t other_rds[87]; // 0~29 other groups - uint8_t other_rds_cnt; // # of other group -}; - -typedef struct fm_rds_tx_req{ - unsigned char pty; // 0~31 integer - unsigned char rds_rbds; // 0:RDS, 1:RBDS - unsigned char dyn_pty; // 0:static, 1:dynamic - unsigned short pi_code; // 2-byte hex - unsigned char ps_buf[8]; // hex buf of PS - unsigned char ps_len; // length of PS, must be 0 / 8" - unsigned char af; // 0~204, 0:not used, 1~204:(87.5+0.1*af)MHz - unsigned char ah; // Artificial head, 0:no, 1:yes - unsigned char stereo; // 0:mono, 1:stereo - unsigned char compress; // Audio compress, 0:no, 1:yes - unsigned char tp; // traffic program, 0:no, 1:yes - unsigned char ta; // traffic announcement, 0:no, 1:yes - unsigned char speech; // 0:music, 1:speech -}fm_rds_tx_req; - -#define TX_SCAN_MAX 10 -#define TX_SCAN_MIN 1 -struct fm_tx_scan_parm { - uint8_t err; - uint8_t band; //87.6~108MHz - uint8_t space; - uint8_t hilo; - uint16_t freq; // start freq, if less than band min freq, then will use band min freq - uint8_t scandir; - uint16_t ScanTBL[TX_SCAN_MAX]; //need no less than the chip - uint16_t ScanTBLSize; //IN: desired size, OUT: scan result size -}; - -struct fm_gps_rtc_info{ - int err; //error number, 0: success, other: err code - int retryCnt; //GPS mnl can decide retry times - int ageThd; //GPS 3D fix time diff threshold - int driftThd; //GPS RTC drift threshold - struct timeval tvThd; //time value diff threshold - int age; //GPS 3D fix time diff - int drift; //GPS RTC drift - union{ - unsigned long stamp; //time stamp in jiffies - struct timeval tv; //time stamp value in RTC - }; - int flag; //rw flag -}; - -typedef enum -{ - FM_I2S_ON = 0, - FM_I2S_OFF -}fm_i2s_state; - -typedef enum -{ - FM_I2S_MASTER = 0, - FM_I2S_SLAVE -}fm_i2s_mode; - -typedef enum -{ - FM_I2S_32K = 0, - FM_I2S_44K, - FM_I2S_48K -}fm_i2s_sample; - -struct fm_i2s_setting{ - int onoff; - int mode; - int sample; -}; - -typedef enum{ - FM_RX = 0, - FM_TX = 1 -}FM_PWR_T; - -enum group_idx { - mono=0, - stereo, - RSSI_threshold, - HCC_Enable, - PAMD_threshold, - Softmute_Enable, - De_emphasis, - HL_Side, - Demod_BW, - Dynamic_Limiter, - Softmute_Rate, - AFC_Enable, - Softmute_Level, - Analog_Volume, - GROUP_TOTAL_NUMS -}; - -enum item_idx { - Sblend_OFF=0, - Sblend_ON, - ITEM_TOTAL_NUMS -}; - -struct fm_ctl_parm { - uint8_t err; - uint8_t addr; - uint16_t val; - uint16_t rw_flag;//0:write, 1:read -}; -struct fm_top_rw_parm { - uint8_t err; - uint8_t rw_flag;//0:write, 1:read - uint16_t addr; - uint32_t val; -}; -struct fm_host_rw_parm { - uint8_t err; - uint8_t rw_flag;//0:write, 1:read - uint32_t addr; - uint32_t val; -}; - -struct fm_em_parm { - uint16_t group_idx; - uint16_t item_idx; - uint32_t item_value; -}; - -#endif //__FM_MAIN_H__ - diff --git a/MediaTek/fmradiolibs/autofm/fm_rds.h b/MediaTek/fmradiolibs/autofm/fm_rds.h deleted file mode 100644 index bda2e34..0000000 --- a/MediaTek/fmradiolibs/autofm/fm_rds.h +++ /dev/null @@ -1,242 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#ifndef __FM_RDS_H__ -#define __FM_RDS_H__ - -//FM_RDS_DATA_CRC_FFOST -#define FM_RDS_GDBK_IND_A (0x08) -#define FM_RDS_GDBK_IND_B (0x04) -#define FM_RDS_GDBK_IND_C (0x02) -#define FM_RDS_GDBK_IND_D (0x01) -#define FM_RDS_DCO_FIFO_OFST (0x01E0) -#define FM_RDS_READ_DELAY (0x80) - -#define RDS_RX_BLOCK_PER_GROUP (4) -#define RDS_RX_GROUP_SIZE (2*RDS_RX_BLOCK_PER_GROUP) -#define MAX_RDS_RX_GROUP_CNT (12) -#define RDS_RT_MULTI_REV_TH 16 - -typedef struct rds_packet_t -{ - uint16_t blkA; - uint16_t blkB; - uint16_t blkC; - uint16_t blkD; - uint16_t crc; //crc checksum - uint16_t cbc; //correct bit cnt -}rds_packet_t; - -typedef struct rds_rx_t -{ - uint16_t sin; - uint16_t cos; - rds_packet_t data[MAX_RDS_RX_GROUP_CNT]; -}rds_rx_t; - -typedef enum rds_ps_state_machine_t -{ - RDS_PS_START = 0, - RDS_PS_DECISION, - RDS_PS_GETLEN, - RDS_PS_DISPLAY, - RDS_PS_FINISH, - RDS_PS_MAX -}rds_ps_state_machine_t; - -typedef enum rds_rt_state_machine_t -{ - RDS_RT_START = 0, - RDS_RT_DECISION, - RDS_RT_GETLEN, - RDS_RT_DISPLAY, - RDS_RT_FINISH, - RDS_RT_MAX -}rds_rt_state_machine_t; - - -enum -{ - RDS_GRP_VER_A = 0, //group version A - RDS_GRP_VER_B -}; - -typedef enum rds_blk_t -{ - RDS_BLK_A = 0, - RDS_BLK_B, - RDS_BLK_C, - RDS_BLK_D, - RDS_BLK_MAX -}rds_blk_t; - -//For RDS feature, these strcutures also be defined in "fm.h" -typedef struct rds_flag_t -{ - uint8_t TP; - uint8_t TA; - uint8_t Music; - uint8_t Stereo; - uint8_t Artificial_Head; - uint8_t Compressed; - uint8_t Dynamic_PTY; - uint8_t Text_AB; - uint32_t flag_status; -}rds_flag_t; - -typedef struct rds_ct_t -{ - uint16_t Month; - uint16_t Day; - uint16_t Year; - uint16_t Hour; - uint16_t Minute; - uint8_t Local_Time_offset_signbit; - uint8_t Local_Time_offset_half_hour; -}rds_ct_t; - -typedef struct rds_af_t -{ - int16_t AF_Num; - int16_t AF[2][25]; //100KHz - uint8_t Addr_Cnt; - uint8_t isMethod_A; - uint8_t isAFNum_Get; -}rds_af_t; - -typedef struct rds_ps_t -{ - uint8_t PS[4][8]; - uint8_t Addr_Cnt; -}rds_ps_t; - -typedef struct rds_rt_t -{ - uint8_t TextData[4][64]; - uint8_t GetLength; - uint8_t isRTDisplay; - uint8_t TextLength; - uint8_t isTypeA; - uint8_t BufCnt; - uint16_t Addr_Cnt; -}rds_rt_t; - -typedef struct rds_raw_t -{ - int dirty; //indicate if the data changed or not - int len; //the data len form chip - uint8_t data[146]; -}rds_raw_t; - -typedef struct rds_group_cnt_t -{ - unsigned long total; - unsigned long groupA[16]; //RDS groupA counter - unsigned long groupB[16]; //RDS groupB counter -}rds_group_cnt_t; - -typedef enum rds_group_cnt_op_t -{ - RDS_GROUP_CNT_READ = 0, - RDS_GROUP_CNT_WRITE, - RDS_GROUP_CNT_RESET, - RDS_GROUP_CNT_MAX -}rds_group_cnt_op_t; - -typedef struct rds_group_cnt_req_t -{ - int err; - enum rds_group_cnt_op_t op; - struct rds_group_cnt_t gc; -}rds_group_cnt_req_t; - -typedef struct rds_t -{ - struct rds_ct_t CT; - struct rds_flag_t RDSFlag; - uint16_t PI; - uint8_t Switch_TP; - uint8_t PTY; - struct rds_af_t AF_Data; - struct rds_af_t AFON_Data; - uint8_t Radio_Page_Code; - uint16_t Program_Item_Number_Code; - uint8_t Extend_Country_Code; - uint16_t Language_Code; - struct rds_ps_t PS_Data; - uint8_t PS_ON[8]; - struct rds_rt_t RT_Data; - uint16_t event_status; //will use RDSFlag_Struct RDSFlag->flag_status to check which event, is that ok? - struct rds_group_cnt_t gc; -}rds_t; - - -//Need care the following definition. -//valid Rds Flag for notify -typedef enum rds_flag_status_t -{ - RDS_FLAG_IS_TP = 0x0001, // Program is a traffic program - RDS_FLAG_IS_TA = 0x0002, // Program currently broadcasts a traffic ann. - RDS_FLAG_IS_MUSIC = 0x0004, // Program currently broadcasts music - RDS_FLAG_IS_STEREO = 0x0008, // Program is transmitted in stereo - RDS_FLAG_IS_ARTIFICIAL_HEAD = 0x0010, // Program is an artificial head recording - RDS_FLAG_IS_COMPRESSED = 0x0020, // Program content is compressed - RDS_FLAG_IS_DYNAMIC_PTY = 0x0040, // Program type can change - RDS_FLAG_TEXT_AB = 0x0080 // If this flag changes state, a new radio text string begins -} rds_flag_status_t; - -typedef enum rds_event_status_t -{ - RDS_EVENT_FLAGS = 0x0001, // One of the RDS flags has changed state - RDS_EVENT_PI_CODE = 0x0002, // The program identification code has changed - RDS_EVENT_PTY_CODE = 0x0004, // The program type code has changed - RDS_EVENT_PROGRAMNAME = 0x0008, // The program name has changed - RDS_EVENT_UTCDATETIME = 0x0010, // A new UTC date/time is available - RDS_EVENT_LOCDATETIME = 0x0020, // A new local date/time is available - RDS_EVENT_LAST_RADIOTEXT = 0x0040, // A radio text string was completed - RDS_EVENT_AF = 0x0080, // Current Channel RF signal strength too weak, need do AF switch - RDS_EVENT_AF_LIST = 0x0100, // An alternative frequency list is ready - RDS_EVENT_AFON_LIST = 0x0200, // An alternative frequency list is ready - RDS_EVENT_TAON = 0x0400, // Other Network traffic announcement start - RDS_EVENT_TAON_OFF = 0x0800, // Other Network traffic announcement finished. - RDS_EVENT_RDS = 0x2000, // RDS Interrupt had arrived durint timer period - RDS_EVENT_NO_RDS = 0x4000, // RDS Interrupt not arrived durint timer period - RDS_EVENT_RDS_TIMER = 0x8000 // Timer for RDS Bler Check. ---- BLER block error rate -} rds_event_status_t; - -#endif //__FM_RDS_H__ - diff --git a/MediaTek/fmradiolibs/fmnative/Android.mk b/MediaTek/fmradiolibs/fmnative/Android.mk deleted file mode 100755 index f730a3c..0000000 --- a/MediaTek/fmradiolibs/fmnative/Android.mk +++ /dev/null @@ -1,643 +0,0 @@ -ifeq ($(MTK_FM_SUPPORT), yes) - -BUILD_FM_CFG := false -BUILD_FM_PATCH := false - -FM_CFG_FILE := fm_cust.cfg - -LOCAL_PATH:= $(call my-dir) -#fm custom path: mediatek/custom/common/hal/fmradio -FM_CUSTOM_PATH := ./config - -# $(call config-custom-folder,custom1:hal/fmradio) - -############################################## MT6628 FM config: start######################### -ifeq ($(findstring MT6628_FM,$(MTK_FM_CHIP)),MT6628_FM) - -BUILD_FM_CFG := true -BUILD_FM_PATCH := true -FM_CHIP := mt6628 -FM_ROM_FILE := mt6628_fm_rom.bin -FM_PATCH_FILE_1 := mt6628_fm_v1_patch.bin -FM_COEFF_FILE_1 := mt6628_fm_v1_coeff.bin -FM_PATCH_FILE_2 := mt6628_fm_v2_patch.bin -FM_COEFF_FILE_2 := mt6628_fm_v2_coeff.bin -FM_PATCH_FILE_3 := mt6628_fm_v3_patch.bin -FM_COEFF_FILE_3 := mt6628_fm_v3_coeff.bin -FM_PATCH_FILE_4 := mt6628_fm_v4_patch.bin -FM_COEFF_FILE_4 := mt6628_fm_v4_coeff.bin -FM_PATCH_FILE_5 := mt6628_fm_v5_patch.bin -FM_COEFF_FILE_5 := mt6628_fm_v5_coeff.bin - - -##### INSTALL fm_cust.cfg FOR fm CONFIG ##### - -ifeq ($(BUILD_FM_CFG), true) -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_CFG_FILE) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr -##LOCAL_SRC_FILES := custom1/$(FM_CHIP)/$(LOCAL_MODULE) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) -endif - -##### INSTALL fm PATCH ##### - -ifeq ($(BUILD_FM_PATCH), true) -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_ROM_FILE) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/mt6628 -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/mt6628/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -endif -endif -################################################### MT6628 FM config: end###################################### - -################################################### MT6620 FM config: start##################################### -ifeq ($(findstring MT6620_FM,$(MTK_FM_CHIP)),MT6620_FM) - -FM_CHIP := mt6620 - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_CHIP)_$(FM_CFG_FILE) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -endif -############################################### MT6620 FM config: end########################################## - -############################################### MT6627 FM config: start######################################## -ifeq ($(findstring MT6627_FM,$(MTK_FM_CHIP)),MT6627_FM) - -FM_CHIP := mt6627 -FM_PATCH_FILE_1 := mt6627_fm_v1_patch.bin -FM_COEFF_FILE_1 := mt6627_fm_v1_coeff.bin -FM_PATCH_FILE_2 := mt6627_fm_v2_patch.bin -FM_COEFF_FILE_2 := mt6627_fm_v2_coeff.bin -FM_PATCH_FILE_3 := mt6627_fm_v3_patch.bin -FM_COEFF_FILE_3 := mt6627_fm_v3_coeff.bin -FM_PATCH_FILE_4 := mt6627_fm_v4_patch.bin -FM_COEFF_FILE_4 := mt6627_fm_v4_coeff.bin -FM_PATCH_FILE_5 := mt6627_fm_v5_patch.bin -FM_COEFF_FILE_5 := mt6627_fm_v5_coeff.bin - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_CHIP)_$(FM_CFG_FILE) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -endif -##### MT6627 FM config: end##### - -############################################### MT6625 FM config: start######################################## -ifeq ($(findstring MT6625_FM,$(MTK_FM_CHIP)),MT6625_FM) - -FM_CHIP := mt6627 -FM_PATCH_FILE_1 := mt6627_fm_v1_patch.bin -FM_COEFF_FILE_1 := mt6627_fm_v1_coeff.bin -FM_PATCH_FILE_2 := mt6627_fm_v2_patch.bin -FM_COEFF_FILE_2 := mt6627_fm_v2_coeff.bin -FM_PATCH_FILE_3 := mt6627_fm_v3_patch.bin -FM_COEFF_FILE_3 := mt6627_fm_v3_coeff.bin -FM_PATCH_FILE_4 := mt6627_fm_v4_patch.bin -FM_COEFF_FILE_4 := mt6627_fm_v4_coeff.bin -FM_PATCH_FILE_5 := mt6627_fm_v5_patch.bin -FM_COEFF_FILE_5 := mt6627_fm_v5_coeff.bin - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_CHIP)_$(FM_CFG_FILE) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -endif -##### MT6625 FM config: end##### - -############################################### MT6580 FM config: start######################################## -ifeq ($(findstring MT6580_FM,$(MTK_FM_CHIP)),MT6580_FM) - -FM_CHIP := mt6580 -FM_PATCH_FILE_1 := mt6580_fm_v1_patch.bin -FM_COEFF_FILE_1 := mt6580_fm_v1_coeff.bin -FM_PATCH_FILE_2 := mt6580_fm_v2_patch.bin -FM_COEFF_FILE_2 := mt6580_fm_v2_coeff.bin -FM_PATCH_FILE_3 := mt6580_fm_v3_patch.bin -FM_COEFF_FILE_3 := mt6580_fm_v3_coeff.bin -FM_PATCH_FILE_4 := mt6580_fm_v4_patch.bin -FM_COEFF_FILE_4 := mt6580_fm_v4_coeff.bin -FM_PATCH_FILE_5 := mt6580_fm_v5_patch.bin -FM_COEFF_FILE_5 := mt6580_fm_v5_coeff.bin - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_CHIP)_$(FM_CFG_FILE) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -endif -##### MT6580 FM config: end##### - -############################################### MT6630 FM config: start######################################## -ifeq ($(findstring MT6630_FM,$(MTK_FM_CHIP)),MT6630_FM) - -FM_CHIP := mt6630 -FM_PATCH_FILE_1 := $(FM_CHIP)_fm_v1_patch.bin -FM_COEFF_FILE_1 := $(FM_CHIP)_fm_v1_coeff.bin -FM_PATCH_FILE_2 := $(FM_CHIP)_fm_v2_patch.bin -FM_COEFF_FILE_2 := $(FM_CHIP)_fm_v2_coeff.bin -FM_PATCH_FILE_3 := $(FM_CHIP)_fm_v3_patch.bin -FM_COEFF_FILE_3 := $(FM_CHIP)_fm_v3_coeff.bin -FM_PATCH_FILE_4 := $(FM_CHIP)_fm_v4_patch.bin -FM_COEFF_FILE_4 := $(FM_CHIP)_fm_v4_coeff.bin -FM_PATCH_FILE_5 := $(FM_CHIP)_fm_v5_patch.bin -FM_COEFF_FILE_5 := $(FM_CHIP)_fm_v5_coeff.bin - -FM_TX_PATCH_FILE_1 := $(FM_CHIP)_fm_v1_patch_tx.bin -FM_TX_COEFF_FILE_1 := $(FM_CHIP)_fm_v1_coeff_tx.bin -FM_TX_PATCH_FILE_2 := $(FM_CHIP)_fm_v2_patch_tx.bin -FM_TX_COEFF_FILE_2 := $(FM_CHIP)_fm_v2_coeff_tx.bin -FM_TX_PATCH_FILE_3 := $(FM_CHIP)_fm_v3_patch_tx.bin -FM_TX_COEFF_FILE_3 := $(FM_CHIP)_fm_v3_coeff_tx.bin -FM_TX_PATCH_FILE_4 := $(FM_CHIP)_fm_v4_patch_tx.bin -FM_TX_COEFF_FILE_4 := $(FM_CHIP)_fm_v4_coeff_tx.bin -FM_TX_PATCH_FILE_5 := $(FM_CHIP)_fm_v5_patch_tx.bin -FM_TX_COEFF_FILE_5 := $(FM_CHIP)_fm_v5_coeff_tx.bin - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_CHIP)_$(FM_CFG_FILE) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/fmr -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_TX_PATCH_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_TX_PATCH_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_TX_PATCH_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_TX_PATCH_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_PATCH_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_TX_PATCH_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_TX_COEFF_FILE_1) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_TX_COEFF_FILE_2) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_TX_COEFF_FILE_3) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_TX_COEFF_FILE_4) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_COEFF_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := $(FM_TX_COEFF_FILE_5) -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/$(FM_CHIP) -LOCAL_SRC_FILES := $(FM_CUSTOM_PATH)/$(FM_CHIP)/$(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -endif -##### MT6630 FM config: end##### -include $(call all-makefiles-under,$(LOCAL_PATH)) - -endif diff --git a/MediaTek/fmradiolibs/fmnative/NOTICE b/MediaTek/fmradiolibs/fmnative/NOTICE deleted file mode 100755 index 0519ecb..0000000 --- a/MediaTek/fmradiolibs/fmnative/NOTICE +++ /dev/null @@ -1 +0,0 @@ -
\ No newline at end of file diff --git a/MediaTek/fmradiolibs/fmnative/README b/MediaTek/fmradiolibs/fmnative/README deleted file mode 100644 index 23bd2ae..0000000 --- a/MediaTek/fmradiolibs/fmnative/README +++ /dev/null @@ -1,21 +0,0 @@ -Configure files and DSP patches needed by FM - -WHAT IT DOES? -============= -Configure files mtXXXX_fm_cust.cfg are used to adjust FM scan parameters -DSP patches mtxxxx_fm_vx_coeff.bin and mtxxxx_fm_vx_patch.bin are needed by FM Modem - -HOW IT WAS BUILT? -================== -These files are put inside target /etc/firmware/mtxxxx/ - -HOW TO USE IT? -============== -These files can be push out/push in directely by adb command - -Change items' value of the Configure files mtXXXX_fm_cust.cfg would effect FM scan performance - -DSP patches mtxxxx_fm_vx_coeff.bin and mtxxxx_fm_vx_patch.bin are updated by MediaTek co.. - -All the source code of this library were written by MediaTek co.. - diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6620/mt6620_fm_cust.cfg b/MediaTek/fmradiolibs/fmnative/config/mt6620/mt6620_fm_cust.cfg deleted file mode 100644 index af31551..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6620/mt6620_fm_cust.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[FM Radio] -#FM RX RSSI threshold setting -FM_RX_RSSI_TH_LONG_MT6620 = -296 -FM_RX_RSSI_TH_SHORT_MT6620 = -296 -FM_RX_DESENSE_RSSI_MT6620 = -245 -FM_RX_SMG_TH_MT6620 = 6 -#deemphasis: 0-50us, China Mainland; 1-75us China Taiwan -FM_RX_DEEMPHASIS_MT6620 = 0 -#osc freq: 0-26MHz; 1-19MHz; 2-24MHz; 3-38.4MHz; 4-40MHz; 5-52MHz -FM_RX_OSC_FREQ_MT6620 = 0 -[FM Transmitter] -#FMT_SCAN_HOLE_L_MT6620 = 976 -#FMT_SCAN_HOLE_H_MT6620 = 1011 -#FMT_PWR_LVL_MAX_MT6620 = 120 diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6626/fm_cust.cfg b/MediaTek/fmradiolibs/fmnative/config/mt6626/fm_cust.cfg deleted file mode 100755 index 57fa8d3..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6626/fm_cust.cfg +++ /dev/null @@ -1,28 +0,0 @@ -[FM Radio] -#FM RX RSSI threshold setting -FMR_RSSI_TH_L = 0xFF01 -FMR_RSSI_TH_S = 0xFEE0 -FMR_CQI_TH = 0x00E9 -FMR_MR_TH = 0x01BD -#FM RX scan channel max number -FMR_SCAN_CH_SIZE = 40 -#no sort:0, sort up:1, sort down:2 -FMR_SCAN_SORT = 0 -FMR_SEEK_SPACE = 1 -#FM RX band -FMR_BAND = 1 -FMR_BAND_FREQ_L = 875 -FMR_BAND_FREQ_H = 1080 -FMR_FAKE_CH = 881 -FMR_FAKE_CH = 882 -FMR_FAKE_CH = 885 -FMR_FAKE_CH = 950 -FMR_FAKE_CH_RSSI = 40 -#deemphasis: 0-50us, China Mainland; 1-75us China Taiwan -FMR_DEEMPHASIS = 0 -#osc freq: 0-26MHz; 1-19MHz; 2-24MHz; 3-38.4MHz; 4-40MHz; 5-52MHz -FMR_OSC_FREQ = 0 -[FM Transmitter] -FMT_SCAN_HOLE_L = 976 -FMT_SCAN_HOLE_H = 1011 -FMT_PWR_LVL_MAX = 120 diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_cust.cfg b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_cust.cfg deleted file mode 100755 index b0d532b..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_cust.cfg +++ /dev/null @@ -1,10 +0,0 @@ -[FM Radio] -#FM RX RSSI threshold setting -FM_RX_RSSI_TH_LONG_MT6627 = -296 -FM_RX_RSSI_TH_SHORT_MT6627 = -296 -FM_RX_DESENSE_RSSI_MT6627 = -240 -FM_RX_SMG_TH_MT6627 = 16421 -#deemphasis: 0-50us, China Mainland; 1-75us China Taiwan -FM_RX_DEEMPHASIS_MT6627 = 0 -#osc freq: 0-26MHz; 1-19MHz; 2-24MHz; 3-38.4MHz; 4-40MHz; 5-52MHz -FM_RX_OSC_FREQ_MT6627 = 0
\ No newline at end of file diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_coeff.bin Binary files differdeleted file mode 100755 index efce968..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_patch.bin Binary files differdeleted file mode 100755 index 929b4a6..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v1_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_coeff.bin deleted file mode 100755 index 136d063..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_coeff.bin +++ /dev/null @@ -1 +0,0 @@ -
\ No newline at end of file diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_patch.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v2_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_coeff.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_patch.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v3_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_coeff.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_patch.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v4_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_coeff.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_patch.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6627/mt6627_fm_v5_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/fm_cust.cfg b/MediaTek/fmradiolibs/fmnative/config/mt6628/fm_cust.cfg deleted file mode 100755 index 168b0a6..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/fm_cust.cfg +++ /dev/null @@ -1,10 +0,0 @@ -[FM Radio] -#FM RX RSSI threshold setting -FM_RX_RSSI_TH_LONG_MT6628 = -296 -FM_RX_RSSI_TH_SHORT_MT6628 = -296 -FM_RX_DESENSE_RSSI_MT6628 = -240 -FM_RX_SMG_TH_MT6628 = 16421 -#deemphasis: 0-50us, China Mainland; 1-75us China Taiwan -FM_RX_DEEMPHASIS_MT6628 = 0 -#osc freq: 0-26MHz; 1-19MHz; 2-24MHz; 3-38.4MHz; 4-40MHz; 5-52MHz -FM_RX_OSC_FREQ_MT6628 = 0
\ No newline at end of file diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_rom.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_rom.bin Binary files differdeleted file mode 100755 index adebd40..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_rom.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_coeff.bin Binary files differdeleted file mode 100755 index 0f9f128..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_patch.bin Binary files differdeleted file mode 100755 index 8161c8a..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v1_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_coeff.bin Binary files differdeleted file mode 100755 index ca0c6ad..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_patch.bin Binary files differdeleted file mode 100755 index de87a87..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v2_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_coeff.bin Binary files differdeleted file mode 100755 index 523a0e8..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_patch.bin Binary files differdeleted file mode 100755 index d8ae935..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v3_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_coeff.bin Binary files differdeleted file mode 100755 index 523a0e8..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_patch.bin Binary files differdeleted file mode 100755 index d8ae935..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v4_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_coeff.bin Binary files differdeleted file mode 100755 index 523a0e8..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_patch.bin Binary files differdeleted file mode 100755 index d8ae935..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6628/mt6628_fm_v5_patch.bin +++ /dev/null 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 Binary files differdeleted file mode 100644 index 0bf54f8..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff.bin +++ /dev/null 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 Binary files differdeleted file mode 100644 index 4744b8e..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_coeff_tx.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch.bin Binary files differdeleted file mode 100644 index c1b5664..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch.bin +++ /dev/null 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 Binary files differdeleted file mode 100644 index 2419651..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v1_patch_tx.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff.bin Binary files differdeleted file mode 100644 index 669349d..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff.bin +++ /dev/null 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 Binary files differdeleted file mode 100644 index f709909..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_coeff_tx.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch.bin Binary files differdeleted file mode 100644 index b844c26..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch.bin +++ /dev/null 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 Binary files differdeleted file mode 100644 index 829f661..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v2_patch_tx.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff_tx.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_coeff_tx.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch_tx.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v3_patch_tx.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff_tx.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_coeff_tx.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch_tx.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v4_patch_tx.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff_tx.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_coeff_tx.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch_tx.bin b/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch_tx.bin deleted file mode 100644 index e69de29..0000000 --- a/MediaTek/fmradiolibs/fmnative/config/mt6630/mt6630_fm_v5_patch_tx.bin +++ /dev/null diff --git a/MediaTek/fmradiolibs/fmnative/custom/Android.mk b/MediaTek/fmradiolibs/fmnative/custom/Android.mk deleted file mode 100755 index f5dd6a0..0000000 --- a/MediaTek/fmradiolibs/fmnative/custom/Android.mk +++ /dev/null @@ -1,40 +0,0 @@ -ifeq ($(MTK_FM_SUPPORT), yes) - -LOCAL_PATH := $(call my-dir) -############################################################################### -# Define MTK FM Radio Chip solution -############################################################################### - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - custom.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) - -LOCAL_CFLAGS+= \ - -DMT6620_FM -ifeq ($(findstring MT6628_FM,$(MTK_FM_CHIP)),MT6628_FM) -LOCAL_CFLAGS+= \ - -DMT6628_FM -endif -LOCAL_CFLAGS+= \ - -DMT6627_FM -ifeq ($(findstring MT6625_FM,$(MTK_FM_CHIP)),MT6625_FM) -LOCAL_CFLAGS+= \ - -DMT6627_FM -endif -ifeq ($(findstring MT6580_FM,$(MTK_FM_CHIP)),MT6580_FM) -LOCAL_CFLAGS+= \ - -DMT6580_FM -endif -LOCAL_CFLAGS+= \ - -DMT6630_FM -LOCAL_SHARED_LIBRARIES := libcutils -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmcust -include $(BUILD_SHARED_LIBRARY) - -endif - diff --git a/MediaTek/fmradiolibs/fmnative/custom/Android.mk~ b/MediaTek/fmradiolibs/fmnative/custom/Android.mk~ deleted file mode 100755 index f5dd6a0..0000000 --- a/MediaTek/fmradiolibs/fmnative/custom/Android.mk~ +++ /dev/null @@ -1,40 +0,0 @@ -ifeq ($(MTK_FM_SUPPORT), yes) - -LOCAL_PATH := $(call my-dir) -############################################################################### -# Define MTK FM Radio Chip solution -############################################################################### - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - custom.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) - -LOCAL_CFLAGS+= \ - -DMT6620_FM -ifeq ($(findstring MT6628_FM,$(MTK_FM_CHIP)),MT6628_FM) -LOCAL_CFLAGS+= \ - -DMT6628_FM -endif -LOCAL_CFLAGS+= \ - -DMT6627_FM -ifeq ($(findstring MT6625_FM,$(MTK_FM_CHIP)),MT6625_FM) -LOCAL_CFLAGS+= \ - -DMT6627_FM -endif -ifeq ($(findstring MT6580_FM,$(MTK_FM_CHIP)),MT6580_FM) -LOCAL_CFLAGS+= \ - -DMT6580_FM -endif -LOCAL_CFLAGS+= \ - -DMT6630_FM -LOCAL_SHARED_LIBRARIES := libcutils -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmcust -include $(BUILD_SHARED_LIBRARY) - -endif - diff --git a/MediaTek/fmradiolibs/fmnative/custom/NOTICE b/MediaTek/fmradiolibs/fmnative/custom/NOTICE deleted file mode 100755 index 0519ecb..0000000 --- a/MediaTek/fmradiolibs/fmnative/custom/NOTICE +++ /dev/null @@ -1 +0,0 @@ -
\ No newline at end of file diff --git a/MediaTek/fmradiolibs/fmnative/custom/README b/MediaTek/fmradiolibs/fmnative/custom/README deleted file mode 100644 index d6d4343..0000000 --- a/MediaTek/fmradiolibs/fmnative/custom/README +++ /dev/null @@ -1,20 +0,0 @@ -Initial parameters needed by FM before open it - -WHAT IT DOES? -============= -Initial parameters needed by FM before open it - -HOW IT WAS BUILT? -================== -It needs the following libs from AOSP: -1. libcutils - -HOW TO USE IT? -============== -Files in this directory is used to -generate a library which name is 'libfmcust' - -The lib 'libfmcust' is loaded when system up - -All the source code of this library were written by MediaTek co.. - diff --git a/MediaTek/fmradiolibs/fmnative/custom/custom.cpp b/MediaTek/fmradiolibs/fmnative/custom/custom.cpp deleted file mode 100644 index cf91007..0000000 --- a/MediaTek/fmradiolibs/fmnative/custom/custom.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include <sys/types.h> -#include "fm.h" -#include "fmlib_cust.h" -#include <cutils/properties.h> -#include <cutils/xlog.h> -#undef LOGV -#define LOGV(...) XLOGV(__VA_ARGS__) -#undef LOGD -#define LOGD(...) XLOGD(__VA_ARGS__) -#undef LOGI -#define LOGI(...) XLOGI(__VA_ARGS__) -#undef LOGW -#define LOGW(...) XLOGW(__VA_ARGS__) -#undef LOGE -#define LOGE(...) XLOGE(__VA_ARGS__) -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "FMLIB_CUST" - - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef MTK_FM_50KHZ_SUPPORT -#define MT6620_FM_FAKE_CHANNEL \ - { \ - {10400, -40, -1}, \ - {9100, -40, -1}, \ - {9600, -40, -1}, \ - {9220, -80, -1} \ - } -#define MT6628_FM_FAKE_CHANNEL \ - { } -#define MT6627_FM_FAKE_CHANNEL \ -{ \ - {9600,-107,-1},\ - {10400,-107,-1},\ - {10750,-224,-1}\ -} -#define MT6580_FM_FAKE_CHANNEL \ -{ \ - {9600,-107,-1},\ - {10400,-107,-1},\ -} - -#define MT6630_FM_FAKE_CHANNEL \ -{ \ - {9600,-107,-1},\ - {10400,-107,-1}\ -} -#else -#define MT6620_FM_FAKE_CHANNEL \ - { \ - {1040, -40, -1}, \ - {910, -40, -1}, \ - {960, -40, -1}, \ - {922, -80, -1} \ - } -#define MT6628_FM_FAKE_CHANNEL \ - { } -#define MT6627_FM_FAKE_CHANNEL \ -{ \ - {960,-107,-1},\ - {1040,-107,-1},\ - {1075,-224,-1}\ -} -#define MT6580_FM_FAKE_CHANNEL \ -{ \ - {960,-107,-1},\ - {1040,-107,-1},\ -} -#define MT6630_FM_FAKE_CHANNEL \ -{ \ - {960,-107,-1},\ - {1040,-107,-1}\ -} -#endif //MTK_FM_50KHZ_SUPPORT - -#if defined MT6620_FM -static struct fm_fake_channel fake_ch[] = MT6620_FM_FAKE_CHANNEL; -#elif defined MT6628_FM -static struct fm_fake_channel fake_ch[] = MT6628_FM_FAKE_CHANNEL; -#elif defined MT6627_FM -static struct fm_fake_channel fake_ch[] = MT6627_FM_FAKE_CHANNEL; -#elif defined MT6580_FM -static struct fm_fake_channel fake_ch[] = MT6580_FM_FAKE_CHANNEL; -#elif defined MT6630_FM -static struct fm_fake_channel fake_ch[] = MT6630_FM_FAKE_CHANNEL; -#endif - - -static struct fm_fake_channel_t fake_ch_info = {0, 0}; - -int CUST_get_cfg(struct CUST_cfg_ds *cfg) -{ - char val[PROPERTY_VALUE_MAX] = {0};//[10]; - cfg->chip = FM_CHIP_UNSUPPORTED; - if(property_get("persist.mtk.wcn.combo.chipid",val,NULL)) - { - LOGI("WCN CHIP ID=%s\n",val); - if(strcmp(val, "0x6628") == 0) - { - cfg->chip = FM_CHIP_MT6628; - LOGI("detect 6628 chip\n"); - } - else if(strcmp(val, "0x6620") == 0) - { - cfg->chip = FM_CHIP_MT6620; - LOGI("detect 6620 chip\n"); - } - else if ((strcmp(val, "0x6572") == 0) || (strcmp(val, "0x6582") == 0) || (strcmp(val, "0x6592") == 0) \ - || (strcmp(val, "0x8127") == 0) || (strcmp(val, "0x6752") == 0) || (strcmp(val, "0x0321") == 0) \ - || (strcmp(val, "0x0335") == 0) || (strcmp(val, "0x0337") == 0) || (strcmp(val, "0x6735") == 0) \ - || (strcmp(val, "0x8163") == 0)) - { - cfg->chip = FM_CHIP_MT6627; - LOGI("detect 6627 chip\n"); - } - else if(strcmp(val, "0x6580") == 0) - { - cfg->chip = FM_CHIP_MT6580; - LOGI("detect 6580 chip\n"); - } - else if(strcmp(val, "0x6630") == 0) - { - cfg->chip = FM_CHIP_MT6630; - LOGI("detect 6630 chip\n"); - } - } - if(cfg->chip == FM_CHIP_UNSUPPORTED) - { - LOGI("WCN CHIP ID fail!\n"); -#ifdef AR1000_FM - cfg->chip = FM_CHIP_AR1000; -#elif defined MT6616_E3_FM - cfg->chip = FM_CHIP_MT6616; -#elif defined MT5192_FM - cfg->chip = FM_CHIP_MT5192; -#elif defined MT5193_FM - cfg->chip = FM_CHIP_MT5193; -#elif defined MT519X_FM - cfg->chip = FM_CHIP_MT5192; -#elif defined MT6620_FM - cfg->chip = FM_CHIP_MT6620; -#elif defined MT6626_FM - cfg->chip = FM_CHIP_MT6626; -#elif defined MT6628_FM - cfg->chip = FM_CHIP_MT6628; -#elif defined MT6627_FM - cfg->chip = FM_CHIP_MT6627; -#elif defined MT6580_FM - cfg->chip = FM_CHIP_MT6580; -#elif defined MT6630_FM - cfg->chip = FM_CHIP_MT6630; -#else - cfg->chip = FM_CHIP_UNSUPPORTED; -#endif - } - - - cfg->band = FM_RAIDO_BAND; // 1, UE; 2, JAPAN; 3, JAPANW -#ifdef MTK_FM_50KHZ_SUPPORT - cfg->low_band = FM_FREQ_MIN * 10; - cfg->high_band = FM_FREQ_MAX * 10; -#else - cfg->low_band = FM_FREQ_MIN; - cfg->high_band = FM_FREQ_MAX; -#endif -#ifdef MTK_FM_50KHZ_SUPPORT - cfg->seek_space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ -#else - cfg->seek_space = 1; -#endif - - cfg->max_scan_num = FM_MAX_CHL_SIZE; - cfg->seek_lev = FM_SEEKTH_LEVEL_DEFAULT; - - cfg->scan_sort = FM_SCAN_SORT_SELECT; - -#ifndef MTK_FM_SHORT_ANTENNA_SUPPORT - cfg->short_ana_sup = false; -#else - cfg->short_ana_sup = true; -#endif - - cfg->rssi_th_l2 = FM_CHIP_DESE_RSSI_TH; - cfg->rssi_th_l2 = (cfg->rssi_th_l2 > -72) ? -72 : cfg->rssi_th_l2; - cfg->rssi_th_l2 = (cfg->rssi_th_l2 < -102) ? -102 : cfg->rssi_th_l2; - - fake_ch_info.chan = fake_ch; - fake_ch_info.size = sizeof(fake_ch)/sizeof(fake_ch[0]); - cfg->fake_chan = &fake_ch_info; - return 0; -} - -#ifdef __cplusplus -} -#endif diff --git a/MediaTek/fmradiolibs/fmnative/custom/custom.cpp~ b/MediaTek/fmradiolibs/fmnative/custom/custom.cpp~ deleted file mode 100644 index 076e968..0000000 --- a/MediaTek/fmradiolibs/fmnative/custom/custom.cpp~ +++ /dev/null @@ -1,237 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include <sys/types.h> -#include <linux/fm.h> -#include "fmlib_cust.h" -#include <cutils/properties.h> -#include <cutils/xlog.h> -#undef LOGV -#define LOGV(...) XLOGV(__VA_ARGS__) -#undef LOGD -#define LOGD(...) XLOGD(__VA_ARGS__) -#undef LOGI -#define LOGI(...) XLOGI(__VA_ARGS__) -#undef LOGW -#define LOGW(...) XLOGW(__VA_ARGS__) -#undef LOGE -#define LOGE(...) XLOGE(__VA_ARGS__) -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "FMLIB_CUST" - - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef MTK_FM_50KHZ_SUPPORT -#define MT6620_FM_FAKE_CHANNEL \ - { \ - {10400, -40, -1}, \ - {9100, -40, -1}, \ - {9600, -40, -1}, \ - {9220, -80, -1} \ - } -#define MT6628_FM_FAKE_CHANNEL \ - { } -#define MT6627_FM_FAKE_CHANNEL \ -{ \ - {9600,-107,-1},\ - {10400,-107,-1},\ - {10750,-224,-1}\ -} -#define MT6580_FM_FAKE_CHANNEL \ -{ \ - {9600,-107,-1},\ - {10400,-107,-1},\ -} - -#define MT6630_FM_FAKE_CHANNEL \ -{ \ - {9600,-107,-1},\ - {10400,-107,-1}\ -} -#else -#define MT6620_FM_FAKE_CHANNEL \ - { \ - {1040, -40, -1}, \ - {910, -40, -1}, \ - {960, -40, -1}, \ - {922, -80, -1} \ - } -#define MT6628_FM_FAKE_CHANNEL \ - { } -#define MT6627_FM_FAKE_CHANNEL \ -{ \ - {960,-107,-1},\ - {1040,-107,-1},\ - {1075,-224,-1}\ -} -#define MT6580_FM_FAKE_CHANNEL \ -{ \ - {960,-107,-1},\ - {1040,-107,-1},\ -} -#define MT6630_FM_FAKE_CHANNEL \ -{ \ - {960,-107,-1},\ - {1040,-107,-1}\ -} -#endif //MTK_FM_50KHZ_SUPPORT - -#if defined MT6620_FM -static struct fm_fake_channel fake_ch[] = MT6620_FM_FAKE_CHANNEL; -#elif defined MT6628_FM -static struct fm_fake_channel fake_ch[] = MT6628_FM_FAKE_CHANNEL; -#elif defined MT6627_FM -static struct fm_fake_channel fake_ch[] = MT6627_FM_FAKE_CHANNEL; -#elif defined MT6580_FM -static struct fm_fake_channel fake_ch[] = MT6580_FM_FAKE_CHANNEL; -#elif defined MT6630_FM -static struct fm_fake_channel fake_ch[] = MT6630_FM_FAKE_CHANNEL; -#endif - - -static struct fm_fake_channel_t fake_ch_info = {0, 0}; - -int CUST_get_cfg(struct CUST_cfg_ds *cfg) -{ - char val[PROPERTY_VALUE_MAX] = {0};//[10]; - cfg->chip = FM_CHIP_UNSUPPORTED; - if(property_get("persist.mtk.wcn.combo.chipid",val,NULL)) - { - LOGI("WCN CHIP ID=%s\n",val); - if(strcmp(val, "0x6628") == 0) - { - cfg->chip = FM_CHIP_MT6628; - LOGI("detect 6628 chip\n"); - } - else if(strcmp(val, "0x6620") == 0) - { - cfg->chip = FM_CHIP_MT6620; - LOGI("detect 6620 chip\n"); - } - else if ((strcmp(val, "0x6572") == 0) || (strcmp(val, "0x6582") == 0) || (strcmp(val, "0x6592") == 0) \ - || (strcmp(val, "0x8127") == 0) || (strcmp(val, "0x6752") == 0) || (strcmp(val, "0x0321") == 0) \ - || (strcmp(val, "0x0335") == 0) || (strcmp(val, "0x0337") == 0) || (strcmp(val, "0x6735") == 0) \ - || (strcmp(val, "0x8163") == 0)) - { - cfg->chip = FM_CHIP_MT6627; - LOGI("detect 6627 chip\n"); - } - else if(strcmp(val, "0x6580") == 0) - { - cfg->chip = FM_CHIP_MT6580; - LOGI("detect 6580 chip\n"); - } - else if(strcmp(val, "0x6630") == 0) - { - cfg->chip = FM_CHIP_MT6630; - LOGI("detect 6630 chip\n"); - } - } - if(cfg->chip == FM_CHIP_UNSUPPORTED) - { - LOGI("WCN CHIP ID fail!\n"); -#ifdef AR1000_FM - cfg->chip = FM_CHIP_AR1000; -#elif defined MT6616_E3_FM - cfg->chip = FM_CHIP_MT6616; -#elif defined MT5192_FM - cfg->chip = FM_CHIP_MT5192; -#elif defined MT5193_FM - cfg->chip = FM_CHIP_MT5193; -#elif defined MT519X_FM - cfg->chip = FM_CHIP_MT5192; -#elif defined MT6620_FM - cfg->chip = FM_CHIP_MT6620; -#elif defined MT6626_FM - cfg->chip = FM_CHIP_MT6626; -#elif defined MT6628_FM - cfg->chip = FM_CHIP_MT6628; -#elif defined MT6627_FM - cfg->chip = FM_CHIP_MT6627; -#elif defined MT6580_FM - cfg->chip = FM_CHIP_MT6580; -#elif defined MT6630_FM - cfg->chip = FM_CHIP_MT6630; -#else - cfg->chip = FM_CHIP_UNSUPPORTED; -#endif - } - - - cfg->band = FM_RAIDO_BAND; // 1, UE; 2, JAPAN; 3, JAPANW -#ifdef MTK_FM_50KHZ_SUPPORT - cfg->low_band = FM_FREQ_MIN * 10; - cfg->high_band = FM_FREQ_MAX * 10; -#else - cfg->low_band = FM_FREQ_MIN; - cfg->high_band = FM_FREQ_MAX; -#endif -#ifdef MTK_FM_50KHZ_SUPPORT - cfg->seek_space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ -#else - cfg->seek_space = 1; -#endif - - cfg->max_scan_num = FM_MAX_CHL_SIZE; - cfg->seek_lev = FM_SEEKTH_LEVEL_DEFAULT; - - cfg->scan_sort = FM_SCAN_SORT_SELECT; - -#ifndef MTK_FM_SHORT_ANTENNA_SUPPORT - cfg->short_ana_sup = false; -#else - cfg->short_ana_sup = true; -#endif - - cfg->rssi_th_l2 = FM_CHIP_DESE_RSSI_TH; - cfg->rssi_th_l2 = (cfg->rssi_th_l2 > -72) ? -72 : cfg->rssi_th_l2; - cfg->rssi_th_l2 = (cfg->rssi_th_l2 < -102) ? -102 : cfg->rssi_th_l2; - - fake_ch_info.chan = fake_ch; - fake_ch_info.size = sizeof(fake_ch)/sizeof(fake_ch[0]); - cfg->fake_chan = &fake_ch_info; - return 0; -} - -#ifdef __cplusplus -} -#endif diff --git a/MediaTek/fmradiolibs/fmnative/custom/fm.h b/MediaTek/fmradiolibs/fmnative/custom/fm.h deleted file mode 100644 index ca232c7..0000000 --- a/MediaTek/fmradiolibs/fmnative/custom/fm.h +++ /dev/null @@ -1,656 +0,0 @@ -#ifndef __FM_H__ -#define __FM_H__ - -//#define FMDEBUG - -#include <linux/ioctl.h> -#include <linux/time.h> -//fm type define -typedef signed char fm_s8; -typedef signed short fm_s16; -typedef signed int fm_s32; -typedef signed long long fm_s64; -typedef unsigned char fm_u8; -typedef unsigned short fm_u16; -typedef unsigned int fm_u32; -typedef unsigned long long fm_u64; -typedef enum fm_bool { - fm_false = 0, - fm_true = 1 -} fm_bool; - -//scan sort algorithm -enum{ - FM_SCAN_SORT_NON = 0, - FM_SCAN_SORT_UP, - FM_SCAN_SORT_DOWN, - FM_SCAN_SORT_MAX -}; - -//scan methods -enum{ - FM_SCAN_SEL_HW = 0, //select hardware scan, advantage: fast - FM_SCAN_SEL_SW, //select software scan, advantage: more accurate - FM_SCAN_SEL_MAX -}; - - //***************************************************************************************** -//***********************************FM config for customer *********************************** -//***************************************************************************************** -//RX -#define FMR_RSSI_TH_LONG 0x0301 //FM radio long antenna RSSI threshold(11.375dBuV) -#define FMR_RSSI_TH_SHORT 0x02E0 //FM radio short antenna RSSI threshold(-1dBuV) -#define FMR_CQI_TH 0x00E9 //FM radio Channel quality indicator threshold(0x0000~0x00FF) -#define FMR_SEEK_SPACE 1 //FM radio seek space,1:100KHZ; 2:200KHZ -#define FMR_SCAN_CH_SIZE 80 //FM radio scan max channel size -#define FMR_BAND 1 //FM radio band, 1:87.5MHz~108.0MHz; 2:76.0MHz~90.0MHz; 3:76.0MHz~108.0MHz; 4:special -#define FMR_BAND_FREQ_L 875 //FM radio special band low freq(Default 87.5MHz) -#define FMR_BAND_FREQ_H 1080 //FM radio special band high freq(Default 108.0MHz) -#define FM_SCAN_SORT_SELECT FM_SCAN_SORT_NON -#define FM_SCAN_SELECT FM_SCAN_SEL_HW -#define FM_SCAN_SOFT_MUTE_GAIN_TH 3 //soft-mute threshold when software scan, rang: 0~3, 0 means better audio quality but less channel -#define FM_CHIP_DESE_RSSI_TH (-102) // rang: -102 ~ -72 - -//TX -#define FMTX_PWR_LEVEL_MAX 120 //FM transmitter power level, rang: 85db~120db, default 120db - -//***************************************************************************************** -//***********************************FM config for engineer *********************************** -//***************************************************************************************** -//RX -#define FMR_MR_TH 0x01BD //FM radio MR threshold -#define ADDR_SCAN_TH 0xE0 //scan thrshold register -#define ADDR_CQI_TH 0xE1 //scan CQI register - -//TX -#define FMTX_SCAN_HOLE_LOW 923 //92.3MHz~95.4MHz should not show to user -#define FMTX_SCAN_HOLE_HIGH 954 //92.3MHz~95.4MHz should not show to user -//***************************************************************************************** - -#define FM_NAME "fm" -#define FM_DEVICE_NAME "/dev/fm" - -// errno -#define FM_SUCCESS 0 -#define FM_FAILED 1 -#define FM_EPARM 2 -#define FM_BADSTATUS 3 -#define FM_TUNE_FAILED 4 -#define FM_SEEK_FAILED 5 -#define FM_BUSY 6 -#define FM_SCAN_FAILED 7 - -// band - -#define FM_BAND_UNKNOWN 0 -#define FM_BAND_UE 1 // US/Europe band 87.5MHz ~ 108MHz (DEFAULT) -#define FM_BAND_JAPAN 2 // Japan band 76MHz ~ 90MHz -#define FM_BAND_JAPANW 3 // Japan wideband 76MHZ ~ 108MHz -#define FM_BAND_SPECIAL 4 // special band between 76MHZ and 108MHz -#define FM_BAND_DEFAULT FM_BAND_UE - -#define FM_UE_FREQ_MIN 875 -#define FM_UE_FREQ_MAX 1080 -#define FM_JP_FREQ_MIN 760 -#define FM_JP_FREQ_MAX 1080 -#define FM_FREQ_MIN FMR_BAND_FREQ_L -#define FM_FREQ_MAX FMR_BAND_FREQ_H -#define FM_RAIDO_BAND FM_BAND_UE - -// space -#define FM_SPACE_UNKNOWN 0 -#define FM_SPACE_100K 1 -#define FM_SPACE_200K 2 -#define FM_SPACE_50K 5 - -#define FM_SEEK_SPACE FMR_SEEK_SPACE - -//max scan chl num -#define FM_MAX_CHL_SIZE FMR_SCAN_CH_SIZE -// auto HiLo -#define FM_AUTO_HILO_OFF 0 -#define FM_AUTO_HILO_ON 1 - -// seek direction -#define FM_SEEK_UP 0 -#define FM_SEEK_DOWN 1 - -#define FM_CHIP_AR1000 0x1000 -#define FM_CHIP_MT5192 0x91 -#define FM_CHIP_MT5193 0x92 -#define FM_CHIP_MT6616 0x6616 -#define FM_CHIP_MT6620 0x6620 -#define FM_CHIP_MT6626 0x6626 -#define FM_CHIP_MT6628 0x6628 -#define FM_CHIP_MT6627 0x6627 -#define FM_CHIP_MT6580 0x6580 -#define FM_CHIP_MT6630 0x6630 - -#define FM_CHIP_UNSUPPORTED -1 - -// seek threshold -#define FM_SEEKTH_LEVEL_DEFAULT 4 - -struct fm_tune_parm { - uint8_t err; - uint8_t band; - uint8_t space; - uint8_t hilo; - uint16_t freq; // IN/OUT parameter -}; - -struct fm_seek_parm { - uint8_t err; - uint8_t band; - uint8_t space; - uint8_t hilo; - uint8_t seekdir; - uint8_t seekth; - uint16_t freq; // IN/OUT parameter -}; - -struct fm_scan_parm { - uint8_t err; - uint8_t band; - uint8_t space; - uint8_t hilo; - uint16_t freq; // OUT parameter - uint16_t ScanTBL[26]; //need no less than the chip - uint16_t ScanTBLSize; //IN/OUT parameter -}; - -struct fm_ch_rssi{ - uint16_t freq; - int rssi; -}; - -enum fm_scan_cmd_t { - FM_SCAN_CMD_INIT = 0, - FM_SCAN_CMD_START, - FM_SCAN_CMD_GET_NUM, - FM_SCAN_CMD_GET_CH, - FM_SCAN_CMD_GET_RSSI, - FM_SCAN_CMD_GET_CH_RSSI, - FM_SCAN_CMD_MAX -}; - -struct fm_scan_t { - enum fm_scan_cmd_t cmd; - int ret; // 0, success; else error code - uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz - uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz - int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz - int num; // valid channel number - void *priv; - int sr_size; // scan result buffer size in bytes - union { - uint16_t *ch_buf; // channel buffer - int *rssi_buf; // rssi buffer - struct fm_ch_rssi *ch_rssi_buf; //channel and RSSI buffer - } sr; -}; - -struct fm_seek_t { - int ret; // 0, success; else error code - uint16_t freq; - uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz - uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz - int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz - int dir; // 0: up; 1: down - int th; // seek threshold in dbm(Eg, -95dbm) - void *priv; -}; - -struct fm_tune_t { - int ret; // 0, success; else error code - uint16_t freq; - uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz - uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz - int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz - void *priv; -}; -struct fm_softmute_tune_t -{ - fm_s32 rssi; // RSSI of current channel - fm_u16 freq; //current frequency - fm_bool valid; //current channel is valid(true) or not(false) -}; - -struct fm_rssi_req{ - uint16_t num; - uint16_t read_cnt; - struct fm_ch_rssi cr[26*16]; -}; - -struct fm_hw_info{ - int chip_id; //chip ID, eg. 6620 - int eco_ver; //chip ECO version, eg. E3 - int rom_ver; //FM DSP rom code version, eg. V2 - int patch_ver; //FM DSP patch version, eg. 1.11 - int reserve; -}; - -struct fm_search_threshold_t -{ - fm_s32 th_type;// 0, RSSI. 1,desense RSSI. 2,SMG. - fm_s32 th_val; //threshold value - fm_s32 reserve; -}; - -#if 1 -#define NEED_DEF_RDS 1 -#else -#define NEED_DEF_RDS 0 -#endif - -#if NEED_DEF_RDS -//For RDS feature -typedef struct -{ - uint8_t TP; - uint8_t TA; - uint8_t Music; - uint8_t Stereo; - uint8_t Artificial_Head; - uint8_t Compressed; - uint8_t Dynamic_PTY; - uint8_t Text_AB; - uint32_t flag_status; -}RDSFlag_Struct; - -typedef struct -{ - uint16_t Month; - uint16_t Day; - uint16_t Year; - uint16_t Hour; - uint16_t Minute; - uint8_t Local_Time_offset_signbit; - uint8_t Local_Time_offset_half_hour; -}CT_Struct; - -typedef struct -{ - int16_t AF_Num; - int16_t AF[2][25]; //100KHz - uint8_t Addr_Cnt; - uint8_t isMethod_A; - uint8_t isAFNum_Get; -}AF_Info; - -typedef struct -{ - uint8_t PS[4][8]; - uint8_t Addr_Cnt; -}PS_Info; - -typedef struct -{ - uint8_t TextData[4][64]; - uint8_t GetLength; - uint8_t isRTDisplay; - uint8_t TextLength; - uint8_t isTypeA; - uint8_t BufCnt; - uint16_t Addr_Cnt; -}RT_Info; - -struct rds_raw_data -{ - int dirty; //indicate if the data changed or not - int len; //the data len form chip - uint8_t data[146]; -}; - -struct rds_group_cnt -{ - unsigned int total; - unsigned int groupA[16]; //RDS groupA counter - unsigned int groupB[16]; //RDS groupB counter -}; - -enum rds_group_cnt_opcode -{ - RDS_GROUP_CNT_READ = 0, - RDS_GROUP_CNT_WRITE, - RDS_GROUP_CNT_RESET, - RDS_GROUP_CNT_MAX -}; - -struct rds_group_cnt_req -{ - int err; - enum rds_group_cnt_opcode op; - struct rds_group_cnt gc; -}; - -typedef struct -{ - CT_Struct CT; - RDSFlag_Struct RDSFlag; - uint16_t PI; - uint8_t Switch_TP; - uint8_t PTY; - AF_Info AF_Data; - uint8_t Radio_Page_Code; - uint16_t Program_Item_Number_Code; - AF_Info AFON_Data; - uint8_t Extend_Country_Code; - uint16_t Language_Code; - PS_Info PS_Data; - uint8_t PS_ON[8]; - uint16_t event_status; //will use RDSFlag_Struct RDSFlag->flag_status to check which event, is that ok? - RT_Info RT_Data; - uint8_t PAD1; //padding for data aligh - struct rds_group_cnt gc; -} RDSData_Struct; - - -//Need care the following definition. -//valid Rds Flag for notify -typedef enum { - RDS_FLAG_IS_TP = 0x0001, // Program is a traffic program - RDS_FLAG_IS_TA = 0x0002, // Program currently broadcasts a traffic ann. - RDS_FLAG_IS_MUSIC = 0x0004, // Program currently broadcasts music - RDS_FLAG_IS_STEREO = 0x0008, // Program is transmitted in stereo - RDS_FLAG_IS_ARTIFICIAL_HEAD = 0x0010, // Program is an artificial head recording - RDS_FLAG_IS_COMPRESSED = 0x0020, // Program content is compressed - RDS_FLAG_IS_DYNAMIC_PTY = 0x0040, // Program type can change - RDS_FLAG_TEXT_AB = 0x0080 // If this flag changes state, a new radio text string begins -} RdsFlag; - -typedef enum { - RDS_EVENT_FLAGS = 0x0001, // One of the RDS flags has changed state - RDS_EVENT_PI_CODE = 0x0002, // The program identification code has changed - RDS_EVENT_PTY_CODE = 0x0004, // The program type code has changed - RDS_EVENT_PROGRAMNAME = 0x0008, // The program name has changed - RDS_EVENT_UTCDATETIME = 0x0010, // A new UTC date/time is available - RDS_EVENT_LOCDATETIME = 0x0020, // A new local date/time is available - RDS_EVENT_LAST_RADIOTEXT = 0x0040, // A radio text string was completed - RDS_EVENT_AF = 0x0080, // Current Channel RF signal strength too weak, need do AF switch - RDS_EVENT_AF_LIST = 0x0100, // An alternative frequency list is ready - RDS_EVENT_AFON_LIST = 0x0200, // An alternative frequency list is ready - RDS_EVENT_TAON = 0x0400, // Other Network traffic announcement start - RDS_EVENT_TAON_OFF = 0x0800, // Other Network traffic announcement finished. - RDS_EVENT_RDS = 0x2000, // RDS Interrupt had arrived durint timer period - RDS_EVENT_NO_RDS = 0x4000, // RDS Interrupt not arrived durint timer period - RDS_EVENT_RDS_TIMER = 0x8000 // Timer for RDS Bler Check. ---- BLER block error rate -} RdsEvent; -#endif - -struct fm_rds_tx_parm { - uint8_t err; - uint16_t pi; - uint16_t ps[12]; // 4 ps - uint16_t other_rds[87]; // 0~29 other groups - uint8_t other_rds_cnt; // # of other group -}; - -typedef struct fm_rds_tx_req{ - unsigned char pty; // 0~31 integer - unsigned char rds_rbds; // 0:RDS, 1:RBDS - unsigned char dyn_pty; // 0:static, 1:dynamic - unsigned short pi_code; // 2-byte hex - unsigned char ps_buf[8]; // hex buf of PS - unsigned char ps_len; // length of PS, must be 0 / 8" - unsigned char af; // 0~204, 0:not used, 1~204:(87.5+0.1*af)MHz - unsigned char ah; // Artificial head, 0:no, 1:yes - unsigned char stereo; // 0:mono, 1:stereo - unsigned char compress; // Audio compress, 0:no, 1:yes - unsigned char tp; // traffic program, 0:no, 1:yes - unsigned char ta; // traffic announcement, 0:no, 1:yes - unsigned char speech; // 0:music, 1:speech -}fm_rds_tx_req; - -#define TX_SCAN_MAX 10 -#define TX_SCAN_MIN 1 -struct fm_tx_scan_parm { - uint8_t err; - uint8_t band; //87.6~108MHz - uint8_t space; - uint8_t hilo; - uint16_t freq; // start freq, if less than band min freq, then will use band min freq - uint8_t scandir; - uint16_t ScanTBL[TX_SCAN_MAX]; //need no less than the chip - uint16_t ScanTBLSize; //IN: desired size, OUT: scan result size -}; - -struct fm_gps_rtc_info{ - int err; //error number, 0: success, other: err code - int retryCnt; //GPS mnl can decide retry times - int ageThd; //GPS 3D fix time diff threshold - int driftThd; //GPS RTC drift threshold - struct timeval tvThd; //time value diff threshold - int age; //GPS 3D fix time diff - int drift; //GPS RTC drift - union{ - unsigned long stamp; //time stamp in jiffies - struct timeval tv; //time stamp value in RTC - }; - int flag; //rw flag -}; - -typedef enum -{ - FM_I2S_ON = 0, - FM_I2S_OFF, - FM_I2S_STATE_ERR -}fm_i2s_state_e; - -typedef enum -{ - FM_I2S_MASTER = 0, - FM_I2S_SLAVE, - FM_I2S_MODE_ERR -}fm_i2s_mode_e; - -typedef enum -{ - FM_I2S_32K = 0, - FM_I2S_44K, - FM_I2S_48K, - FM_I2S_SR_ERR -}fm_i2s_sample_e; - -struct fm_i2s_setting{ - int onoff; - int mode; - int sample; -}; - -typedef enum{ - FM_RX = 0, - FM_TX = 1 -}FM_PWR_T; - -typedef struct fm_i2s_info -{ - int status; /*0:FM_I2S_ON, 1:FM_I2S_OFF,2:error*/ - int mode; /*0:FM_I2S_MASTER, 1:FM_I2S_SLAVE,2:error*/ - int rate; /*0:FM_I2S_32K:32000,1:FM_I2S_44K:44100,2:FM_I2S_48K:48000,3:error*/ -} fm_i2s_info_t; - -typedef enum -{ - FM_AUD_ANALOG = 0, - FM_AUD_I2S = 1, - FM_AUD_MRGIF = 2, - FM_AUD_ERR -}fm_audio_path_e; - -typedef enum -{ - FM_I2S_PAD_CONN = 0, //sco fm chip: e.g.6627 - FM_I2S_PAD_IO = 1, //combo fm chip: e.g.6628 - FM_I2S_PAD_ERR -}fm_i2s_pad_sel_e; - -typedef struct fm_audio_info -{ - fm_audio_path_e aud_path; - fm_i2s_info_t i2s_info; - fm_i2s_pad_sel_e i2s_pad; -} fm_audio_info_t; - -struct fm_cqi -{ - int ch; - int rssi; - int reserve; -}; - -struct fm_cqi_req -{ - uint16_t ch_num; - int buf_size; - char *cqi_buf; -}; -typedef struct -{ - int freq; - int rssi; -}fm_desense_check_t; - -typedef struct -{ - uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz - uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz - int space; // 0x1: 50KHz, 0x2: 100Khz, 0x4: 200Khz - int cycle; // repeat times -}fm_full_cqi_log_t; - -typedef struct -{ - int which; - bool stat; -}fm_status_t; - -// ********** ***********FM IOCTL define start ******************************* - -#define FM_IOC_MAGIC 0xf5 // FIXME: any conflict? - -#define FM_IOCTL_POWERUP _IOWR(FM_IOC_MAGIC, 0, struct fm_tune_parm) -#define FM_IOCTL_POWERDOWN _IOWR(FM_IOC_MAGIC, 1, int32_t) -#define FM_IOCTL_TUNE _IOWR(FM_IOC_MAGIC, 2, struct fm_tune_parm) -#define FM_IOCTL_SEEK _IOWR(FM_IOC_MAGIC, 3, struct fm_seek_parm) -#define FM_IOCTL_SETVOL _IOWR(FM_IOC_MAGIC, 4, uint32_t) -#define FM_IOCTL_GETVOL _IOWR(FM_IOC_MAGIC, 5, uint32_t) -#define FM_IOCTL_MUTE _IOWR(FM_IOC_MAGIC, 6, uint32_t) -#define FM_IOCTL_GETRSSI _IOWR(FM_IOC_MAGIC, 7, int32_t) -#define FM_IOCTL_SCAN _IOWR(FM_IOC_MAGIC, 8, struct fm_scan_parm) -#define FM_IOCTL_STOP_SCAN _IO(FM_IOC_MAGIC, 9) - -//IOCTL and struct for test -#define FM_IOCTL_GETCHIPID _IOWR(FM_IOC_MAGIC, 10, uint16_t) -#define FM_IOCTL_EM_TEST _IOWR(FM_IOC_MAGIC, 11, struct fm_em_parm) -#define FM_IOCTL_RW_REG _IOWR(FM_IOC_MAGIC, 12, struct fm_ctl_parm) -#define FM_IOCTL_GETMONOSTERO _IOWR(FM_IOC_MAGIC, 13, uint16_t) -#define FM_IOCTL_GETCURPAMD _IOWR(FM_IOC_MAGIC, 14, uint16_t) -#define FM_IOCTL_GETGOODBCNT _IOWR(FM_IOC_MAGIC, 15, uint16_t) -#define FM_IOCTL_GETBADBNT _IOWR(FM_IOC_MAGIC, 16, uint16_t) -#define FM_IOCTL_GETBLERRATIO _IOWR(FM_IOC_MAGIC, 17, uint16_t) - -//IOCTL for RDS -#define FM_IOCTL_RDS_ONOFF _IOWR(FM_IOC_MAGIC, 18, uint16_t) -#define FM_IOCTL_RDS_SUPPORT _IOWR(FM_IOC_MAGIC, 19, int32_t) - -#define FM_IOCTL_POWERUP_TX _IOWR(FM_IOC_MAGIC, 20, struct fm_tune_parm) -#define FM_IOCTL_TUNE_TX _IOWR(FM_IOC_MAGIC, 21, struct fm_tune_parm) -#define FM_IOCTL_RDS_TX _IOWR(FM_IOC_MAGIC, 22, struct fm_rds_tx_parm) - -#define FM_IOCTL_RDS_SIM_DATA _IOWR(FM_IOC_MAGIC, 23, uint32_t) -#define FM_IOCTL_IS_FM_POWERED_UP _IOWR(FM_IOC_MAGIC, 24, uint32_t) - -//IOCTL for FM Tx -#define FM_IOCTL_TX_SUPPORT _IOWR(FM_IOC_MAGIC, 25, int32_t) -#define FM_IOCTL_RDSTX_SUPPORT _IOWR(FM_IOC_MAGIC, 26, int32_t) -#define FM_IOCTL_RDSTX_ENABLE _IOWR(FM_IOC_MAGIC, 27, int32_t) -#define FM_IOCTL_TX_SCAN _IOWR(FM_IOC_MAGIC, 28, struct fm_tx_scan_parm) - -//IOCTL for FM over BT -#define FM_IOCTL_OVER_BT_ENABLE _IOWR(FM_IOC_MAGIC, 29, int32_t) - -//IOCTL for FM ANTENNA SWITCH -#define FM_IOCTL_ANA_SWITCH _IOWR(FM_IOC_MAGIC, 30, int32_t) -#define FM_IOCTL_GETCAPARRAY _IOWR(FM_IOC_MAGIC, 31, int32_t) - -//IOCTL for FM compensation by GPS RTC -#define FM_IOCTL_GPS_RTC_DRIFT _IOWR(FM_IOC_MAGIC, 32, struct fm_gps_rtc_info) - -//IOCTL for FM I2S Setting -#define FM_IOCTL_I2S_SETTING _IOWR(FM_IOC_MAGIC, 33, struct fm_i2s_setting) - -#define FM_IOCTL_RDS_GROUPCNT _IOWR(FM_IOC_MAGIC, 34, struct rds_group_cnt_req) -#define FM_IOCTL_RDS_GET_LOG _IOWR(FM_IOC_MAGIC, 35, struct rds_raw_data) - -#define FM_IOCTL_SCAN_GETRSSI _IOWR(FM_IOC_MAGIC, 36, struct fm_rssi_req) -#define FM_IOCTL_SETMONOSTERO _IOWR(FM_IOC_MAGIC, 37, int32_t) -#define FM_IOCTL_RDS_BC_RST _IOWR(FM_IOC_MAGIC, 38, int32_t) -#define FM_IOCTL_CQI_GET _IOWR(FM_IOC_MAGIC, 39, struct fm_cqi_req) -#define FM_IOCTL_GET_HW_INFO _IOWR(FM_IOC_MAGIC, 40, struct fm_hw_info) -#define FM_IOCTL_GET_I2S_INFO _IOWR(FM_IOC_MAGIC, 41, fm_i2s_info_t) -#define FM_IOCTL_IS_DESE_CHAN _IOWR(FM_IOC_MAGIC, 42, int32_t) -#define FM_IOCTL_TOP_RDWR _IOWR(FM_IOC_MAGIC, 43, struct fm_top_rw_parm) -#define FM_IOCTL_HOST_RDWR _IOWR(FM_IOC_MAGIC, 44, struct fm_host_rw_parm) - -#define FM_IOCTL_PRE_SEARCH _IOWR(FM_IOC_MAGIC, 45,int32_t) -#define FM_IOCTL_RESTORE_SEARCH _IOWR(FM_IOC_MAGIC, 46,int32_t) - -#define FM_IOCTL_SET_SEARCH_THRESHOLD _IOWR(FM_IOC_MAGIC, 47, fm_search_threshold_t) - -#define FM_IOCTL_GET_AUDIO_INFO _IOWR(FM_IOC_MAGIC, 48, fm_audio_info_t) -#define FM_IOCTL_FM_SET_STATUS _IOWR(FM_IOC_MAGIC, 49, fm_status_t) -#define FM_IOCTL_FM_GET_STATUS _IOWR(FM_IOC_MAGIC, 50, fm_status_t) - -#define FM_IOCTL_SCAN_NEW _IOWR(FM_IOC_MAGIC, 60, struct fm_scan_t) -#define FM_IOCTL_SEEK_NEW _IOWR(FM_IOC_MAGIC, 61, struct fm_seek_t) -#define FM_IOCTL_TUNE_NEW _IOWR(FM_IOC_MAGIC, 62, struct fm_tune_t) - -#define FM_IOCTL_SOFT_MUTE_TUNE _IOWR(FM_IOC_MAGIC, 63, struct fm_softmute_tune_t)/*for soft mute tune*/ -#define FM_IOCTL_DESENSE_CHECK _IOWR(FM_IOC_MAGIC, 64, fm_desense_check_t) - -//IOCTL for EM -#define FM_IOCTL_FULL_CQI_LOG _IOWR(FM_IOC_MAGIC, 70, fm_full_cqi_log_t ) - -#define FM_IOCTL_DUMP_REG _IO(FM_IOC_MAGIC, 0xFF) - -// ********** ***********FM IOCTL define end ******************************* - - -enum group_idx { - mono=0, - stereo, - RSSI_threshold, - HCC_Enable, - PAMD_threshold, - Softmute_Enable, - De_emphasis, - HL_Side, - Demod_BW, - Dynamic_Limiter, - Softmute_Rate, - AFC_Enable, - Softmute_Level, - Analog_Volume, - GROUP_TOTAL_NUMS -}; - -enum item_idx { - Sblend_OFF=0, - Sblend_ON, - ITEM_TOTAL_NUMS -}; - -struct fm_ctl_parm { - uint8_t err; - uint8_t addr; - uint16_t val; - uint16_t rw_flag;//0:write, 1:read -}; - -struct fm_em_parm { - uint16_t group_idx; - uint16_t item_idx; - uint32_t item_value; -}; -#endif // __FM_H__ diff --git a/MediaTek/fmradiolibs/fmnative/custom/fmlib_cust.h b/MediaTek/fmradiolibs/fmnative/custom/fmlib_cust.h deleted file mode 100644 index 36d433b..0000000 --- a/MediaTek/fmradiolibs/fmnative/custom/fmlib_cust.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#ifndef __FMLIB_CUST_H__ -#define __FMLIB_CUST_H__ - -struct fm_fake_channel -{ - int freq; - int rssi_th; - int reserve; -}; - -struct fm_fake_channel_t -{ - int size; - struct fm_fake_channel *chan; -}; - -struct CUST_cfg_ds -{ - int16_t chip; - int32_t band; - int32_t low_band; - int32_t high_band; - int32_t seek_space; - int32_t max_scan_num; - int32_t seek_lev; - int32_t scan_sort; - int32_t short_ana_sup; - int32_t rssi_th_l2; - struct fm_fake_channel_t *fake_chan; -}; - -#define FM_JNI_SCAN_SPACE_50K 5 -#define FM_JNI_SCAN_SPACE_100K 1 -#define FM_JNI_SCAN_SPACE_200K 2 -#if (defined(MT6620_FM) || defined(MT6628_FM)||defined(MT6627_FM)||defined(MT6580_FM)||defined(MT6630_FM)) -/*implement fm scan by soft mute tune - change to 0 will scan by orginal way*/ -#define FMR_SOFT_MUTE_TUEN_SCAN 1 -#define FMR_NOISE_FLOORT_DETECT 1 -#define RSSI_TH -296 -#define FM_SEVERE_RSSI_TH -107//67dBuV -#define FM_NOISE_FLOOR_OFFSET 10 -#else/*if new chip support, need to modify following parameters*/ -#define FMR_SOFT_MUTE_TUEN_SCAN 0 -#define FMR_NOISE_FLOORT_DETECT 0 -#endif -#endif //__FMLIB_CUST_H__ diff --git a/MediaTek/fmradiolibs/fmnative/fmr/Android.mk b/MediaTek/fmradiolibs/fmnative/fmr/Android.mk deleted file mode 100755 index 56df92e..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/Android.mk +++ /dev/null @@ -1,231 +0,0 @@ -ifeq ($(MTK_FM_SUPPORT), yes) - -FM_LIB_BUILD_AR1000 := no -FM_LIB_BUILD_MT6616 := no -FM_LIB_BUILD_MT6620 := yes -FM_LIB_BUILD_MT6626 := no -FM_LIB_BUILD_MT6628 := yes -FM_LIB_BUILD_MT519X := no -FM_LIB_BUILD_MT6627 := yes -FM_LIB_BUILD_MT6580 := yes -FM_LIB_BUILD_MT6630 := yes - -LOCAL_PATH := $(call my-dir) -############################################################################### -# Define MTK FM Radio Chip solution -############################################################################### - -include $(CLEAR_VARS) - -LOCAL_CFLAGS+= \ - -DMT6627_FM - -LOCAL_SRC_FILES := \ - fmr_core.cpp \ - fmr_err.cpp \ - libfm_jni.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia \ - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmjni -include $(BUILD_SHARED_LIBRARY) - -######################## -ifeq ($(FM_LIB_BUILD_MT6616), yes) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6616.cpp \ - common.cpp \ - bt_ctrl.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6616 -include $(BUILD_SHARED_LIBRARY) -endif - -######################## -ifeq ($(FM_LIB_BUILD_MT6626), yes) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6626.cpp \ - common.cpp \ - bt_ctrl.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6626 -include $(BUILD_SHARED_LIBRARY) -endif - -######################## -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6620.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6620 -include $(BUILD_SHARED_LIBRARY) - -######################## -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6628.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media \ - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6628 -include $(BUILD_SHARED_LIBRARY) -######################## -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6627.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media \ - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6627 -include $(BUILD_SHARED_LIBRARY) -######################## -ifeq ($(FM_LIB_BUILD_MT6580), yes) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6580.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media \ - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6580 -include $(BUILD_SHARED_LIBRARY) -endif -######################## -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6630.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media \ - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6630 -include $(BUILD_SHARED_LIBRARY) -######################## -ifeq ($(FM_LIB_BUILD_AR1000), yes) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - ar1000.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmar1000 -include $(BUILD_SHARED_LIBRARY) -endif - -######################## -ifeq ($(FM_LIB_BUILD_MT519X), yes) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt519x.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt519x -include $(BUILD_SHARED_LIBRARY) -endif - -######################## - -endif diff --git a/MediaTek/fmradiolibs/fmnative/fmr/Android.mk~ b/MediaTek/fmradiolibs/fmnative/fmr/Android.mk~ deleted file mode 100755 index 56df92e..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/Android.mk~ +++ /dev/null @@ -1,231 +0,0 @@ -ifeq ($(MTK_FM_SUPPORT), yes) - -FM_LIB_BUILD_AR1000 := no -FM_LIB_BUILD_MT6616 := no -FM_LIB_BUILD_MT6620 := yes -FM_LIB_BUILD_MT6626 := no -FM_LIB_BUILD_MT6628 := yes -FM_LIB_BUILD_MT519X := no -FM_LIB_BUILD_MT6627 := yes -FM_LIB_BUILD_MT6580 := yes -FM_LIB_BUILD_MT6630 := yes - -LOCAL_PATH := $(call my-dir) -############################################################################### -# Define MTK FM Radio Chip solution -############################################################################### - -include $(CLEAR_VARS) - -LOCAL_CFLAGS+= \ - -DMT6627_FM - -LOCAL_SRC_FILES := \ - fmr_core.cpp \ - fmr_err.cpp \ - libfm_jni.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia \ - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmjni -include $(BUILD_SHARED_LIBRARY) - -######################## -ifeq ($(FM_LIB_BUILD_MT6616), yes) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6616.cpp \ - common.cpp \ - bt_ctrl.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6616 -include $(BUILD_SHARED_LIBRARY) -endif - -######################## -ifeq ($(FM_LIB_BUILD_MT6626), yes) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6626.cpp \ - common.cpp \ - bt_ctrl.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6626 -include $(BUILD_SHARED_LIBRARY) -endif - -######################## -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6620.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6620 -include $(BUILD_SHARED_LIBRARY) - -######################## -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6628.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media \ - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6628 -include $(BUILD_SHARED_LIBRARY) -######################## -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6627.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media \ - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6627 -include $(BUILD_SHARED_LIBRARY) -######################## -ifeq ($(FM_LIB_BUILD_MT6580), yes) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6580.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media \ - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6580 -include $(BUILD_SHARED_LIBRARY) -endif -######################## -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt6630.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media \ - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt6630 -include $(BUILD_SHARED_LIBRARY) -######################## -ifeq ($(FM_LIB_BUILD_AR1000), yes) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - ar1000.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmar1000 -include $(BUILD_SHARED_LIBRARY) -endif - -######################## -ifeq ($(FM_LIB_BUILD_MT519X), yes) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - mt519x.cpp \ - common.cpp - -LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) \ - frameworks/base/include/media - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libdl \ - libmedia - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libfmmt519x -include $(BUILD_SHARED_LIBRARY) -endif - -######################## - -endif diff --git a/MediaTek/fmradiolibs/fmnative/fmr/NOTICE b/MediaTek/fmradiolibs/fmnative/fmr/NOTICE deleted file mode 100755 index 0519ecb..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/NOTICE +++ /dev/null @@ -1 +0,0 @@ -
\ No newline at end of file diff --git a/MediaTek/fmradiolibs/fmnative/fmr/README b/MediaTek/fmradiolibs/fmnative/fmr/README deleted file mode 100644 index d16ff95..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/README +++ /dev/null @@ -1,25 +0,0 @@ -Libraries of MTK FM feature, including FM power on/off, -seek, scan, tune...and some other basic functions. - -WHAT IT DOES? -============= -Provide FM basic functions - -HOW IT WAS BUILT? -================== -It needs the following libs from AOSP: -1. libcutils -2. libdl - -and the following libs from MediaTek: -1. libmedia - -HOW TO USE IT? -============== -Files in this directory is used to -generate libraries 'libfmjni' and 'libfmmtxxxx' - -These libraries are loaded when system up - -All the source code of this library were written by MediaTek co.. - diff --git a/MediaTek/fmradiolibs/fmnative/fmr/ar1000.cpp b/MediaTek/fmradiolibs/fmnative/fmr/ar1000.cpp deleted file mode 100644 index d6c83c6..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/ar1000.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" - -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "FMLIB_AR1000" - -#ifdef __cplusplus -extern "C" { -#endif - -static int AR1000_open_dev(const char *pname, int *fd) -{ - int ret; - ret = COM_open_dev(pname, fd); - - //TODO important!!!, check if it's valid FM chip, hard code here. - - return ret; -} - -static int AR1000_ana_switch(int fd, int antenna) -{ - return -ERR_UNSUPT_SHORTANA; -} - -void AR1000_init(struct fm_cbk_tbl *cbk_tbl) -{ - //Basic functions. - cbk_tbl->open_dev = AR1000_open_dev; - cbk_tbl->close_dev = COM_close_dev; - cbk_tbl->pwr_up = COM_pwr_up; - cbk_tbl->pwr_down = COM_pwr_down; - cbk_tbl->seek = COM_seek; - cbk_tbl->scan = COM_sw_scan; //hw_scan or sw_scan. - cbk_tbl->stop_scan = COM_stop_scan; - cbk_tbl->tune = COM_tune; - cbk_tbl->set_mute = COM_set_mute; - cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup; - cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support; - cbk_tbl->is_rdstx_support = COM_is_rdstx_support; - cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds; - cbk_tbl->get_chip_id = COM_get_chip_id; - cbk_tbl->ana_switch = AR1000_ana_switch; - - return; -} - -#ifdef __cplusplus -} -#endif - diff --git a/MediaTek/fmradiolibs/fmnative/fmr/bt_ctrl.cpp b/MediaTek/fmradiolibs/fmnative/fmr/bt_ctrl.cpp deleted file mode 100644 index 87b6a92..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/bt_ctrl.cpp +++ /dev/null @@ -1,445 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" - -#ifdef LOG_TAG -#undef LOG_TAG -#define LOG_TAG "FMJNI_BTCTRL" -#endif - -#define BT_SERIAL_PORT "/dev/ttyMT2" - -enum{ - BT_PWR_ON, - BT_PWR_OFF, - BT_PWR_UNKNOWN, - BT_PWR_MAX -}; -//for BT host -static int bt_host_rfkill_path_get(int *bt_id, char **state_path); -static int bt_host_pwr_state_get(int *state); -static int bt_host_init_uart(char *dev); -//for MT6616 BT controller -static int bt_mt6616_reset(int fd); -static int bt_mt6616_nonsleepduration_set(int fd, uint32_t dwTime); -static int bt_mt6616_alwayssleep_set(int fd); -static void *bt_mt6616_forcesleep_thread(void *priv); -//for MT6626 BT controller -static int bt_mt6626_alwayssleep_set(int fd); -static int bt_mt6626_i2s_switch_1(int fd); -static int bt_mt6626_i2s_switch_2(int fd); -static void *bt_mt6626_forcesleep_thread(void *priv); - - -static int bt_host_rfkill_path_get(int *bt_id, char **state_path) -{ - char path[128]; - char buf[32]; - int fd, id; - ssize_t sz; - - FMR_ASSERT(bt_id); - FMR_ASSERT(state_path); - - for(id = 0; id < 10 ; id++){ - snprintf(path, sizeof(path), "/sys/class/rfkill/rfkill%d/type", id); - fd = open(path, O_RDONLY); - if(fd < 0){ - LOGE("open(%s) failed\n", path); - return -1; - } - sz = read(fd, &buf, sizeof(buf)); - close(fd); - if(sz >= 9 && (memcmp(buf, "bluetooth", 9) == 0)){ - *bt_id = id; - break; - } - } - - if (id == 10) - return -1; - - asprintf(state_path, "/sys/class/rfkill/rfkill%d/state", *bt_id); - return 0; -} - -static int bt_host_pwr_state_get(int *state) -{ - int sz; - int fd = -1; - int ret = 0; - char sta; - int bt_rfkill_id = -1; - char *bt_rfkill_state_path = NULL; - - FMR_ASSERT(state); - - if(bt_rfkill_id == -1){ - ret = bt_host_rfkill_path_get(&bt_rfkill_id, &bt_rfkill_state_path); - if(ret){ - LOGE("get bt rfkill sate path failed\n"); - return ret; - } - } - - fd = open(bt_rfkill_state_path, O_RDONLY); - if(fd < 0){ - LOGE("open(%s) failed\n", bt_rfkill_state_path); - return fd; - } - sz = read(fd, &sta, 1); - if(sz != 1){ - LOGE("read(%s) failed", bt_rfkill_state_path); - close(fd); - return -1; - } - - switch(sta){ - case '1': - *state = BT_PWR_ON; - break; - case '0': - *state = BT_PWR_OFF; - break; - default: - LOGE("unknown bt pwr state\n"); - ret = -1; - } - - free(bt_rfkill_state_path); - close(fd); - return ret; -} - -static int bt_host_init_uart(char *dev) -{ - struct termios ti; - int fd, i; - - FMR_ASSERT(dev); - - fd = open(dev, O_RDWR | O_NOCTTY); - if(fd < 0){ - LOGE("Can't open serial port\n"); - return -1; - } - - tcflush(fd, TCIOFLUSH); - - if(tcgetattr(fd, &ti) < 0){ - LOGE("unable to get UART port setting\n"); - return -1; - } - - cfmakeraw(&ti); - - ti.c_cflag |= CLOCAL; - ti.c_cflag &= ~CRTSCTS; - - ti.c_lflag = 0; - ti.c_cc[VTIME] = 5; /* 0.5 sec */ - ti.c_cc[VMIN] = 0; - - if(tcsetattr(fd, TCSANOW, &ti) < 0){ - LOGE("Can't set port settings\n"); - return -1; - } - - /* Set initial baudrate */ - cfsetospeed(&ti, B115200); - cfsetispeed(&ti, B115200); - - tcsetattr(fd, TCSANOW, &ti); - tcflush(fd, TCIOFLUSH); - - return fd; -} - -static int bt_mt6616_reset(int fd) -{ - uint32_t dwBytesWritten = 0; - uint32_t dwBytesTotal = 0; - uint32_t dwCounter = 0; - uint32_t dwBytesRead = 7; - uint8_t pAckEvent[7]; - int sz = 0; - uint8_t HCI_RESET[] = {0x01, 0x03, 0x0c, 0x0}; - - sz = write(fd, HCI_RESET, sizeof(HCI_RESET)); - if(sz < 0){ - LOGE("%s can't send command\n", __func__); - return -1; - } - - while((dwBytesTotal < 7) && (dwCounter < 5)){ - dwBytesRead = read(fd, &pAckEvent[dwBytesTotal], dwBytesRead); - dwBytesTotal += dwBytesRead; - dwBytesRead = 7 - dwBytesTotal; - dwCounter++; - } - if(dwBytesTotal < 7){ - LOGE("%s no ACK \n", __func__); - return -1; - } - - return 0; -} - -static int bt_mt6616_nonsleepduration_set(int fd, uint32_t dwTime) -{ - uint32_t dwBytesWritten = 0; - uint32_t dwBytesTotal = 0; - uint32_t dwCounter = 0; - uint32_t dwBytesRead = 7; - uint8_t pAckEvent[7]; - int sz = 0; - - uint32_t dwSlotNum = (dwTime<<3)/5; - uint8_t HCI_VS_SET_SLEEP[] = {0x01, 0x7a, 0xfc, 0x07, 0x03, 0x40, 0x1f, 0x40, 0x1f, 0x00, 0x04}; - - HCI_VS_SET_SLEEP[4] = 0x03; //3-pin lower power mode - HCI_VS_SET_SLEEP[5] = (uint8_t)(dwSlotNum&0xFF); - HCI_VS_SET_SLEEP[6] = (uint8_t)((dwSlotNum>>8)&0xFF); - HCI_VS_SET_SLEEP[7] = (uint8_t)(dwSlotNum&0xFF); - HCI_VS_SET_SLEEP[8] = (uint8_t)((dwSlotNum>>8)&0xFF); - - sz = write(fd, HCI_VS_SET_SLEEP, sizeof(HCI_VS_SET_SLEEP)); - if(sz < 0){ - LOGE("%s can't send command\n", __func__); - return -1; - } - - while((dwBytesTotal < 7) && (dwCounter < 5)){ - dwBytesRead = read(fd, &pAckEvent[dwBytesTotal], dwBytesRead); - dwBytesTotal += dwBytesRead; - dwBytesRead = 7 - dwBytesTotal; - dwCounter++; - } - if(dwBytesTotal < 7){ - LOGE("%s no ACK \n", __func__); - return -1; - } - - return 0; -} - -static int bt_mt6616_alwayssleep_set(int fd) -{ - int sz = 0; - uint8_t HCI_VS_SET_ALWAYS_SLEEP[] = {0x01, 0xD8, 0xfc, 0x0}; - - sz = write(fd, HCI_VS_SET_ALWAYS_SLEEP, sizeof(HCI_VS_SET_ALWAYS_SLEEP)); - if(sz < 0){ - LOGE("%s can't send command\n", __func__); - return -1; - } - - return 0; -} - -static void *bt_mt6616_forcesleep_thread(void *priv) -{ - int bt_fd = bt_host_init_uart((char*)BT_SERIAL_PORT); - if(bt_fd != -1){ - LOGD("+set bt force sleep, sleep 1\n"); - sleep(1); - bt_mt6616_nonsleepduration_set(bt_fd, 5000); - bt_mt6616_reset(bt_fd); - bt_mt6616_alwayssleep_set(bt_fd); - LOGD("-set bt force sleep\n"); - close(bt_fd); - } - - pthread_exit(NULL); - return NULL; -} - -static int bt_mt6626_alwayssleep_set(int fd) -{ - uint32_t dwBytesWritten = 0; - uint32_t dwBytesTotal = 0; - uint32_t dwCounter = 0; - uint32_t dwBytesRead = 7; - uint8_t pAckEvent[7]; - int sz = 0; - uint8_t HCI_VS_SET_ALWAYS_SLEEP[] = - {0x01, 0xD8, 0xFC, 0x08, 0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04, 0x01}; - - sz = write(fd, HCI_VS_SET_ALWAYS_SLEEP, sizeof(HCI_VS_SET_ALWAYS_SLEEP)); - if(sz < 0){ - LOGE("%s can't send command\n", __func__); - return -1; - } - - while((dwBytesTotal < 7) && (dwCounter < 5)){ - dwBytesRead = read(fd, &pAckEvent[dwBytesTotal], dwBytesRead); - dwBytesTotal += dwBytesRead; - dwBytesRead = 7 - dwBytesTotal; - dwCounter++; - } - if(dwBytesTotal < 7){ - LOGE("%s no ACK \n", __func__); - return -1; - } - - return 0; -} - -static int bt_mt6626_i2s_switch_1(int fd) -{ - uint32_t dwBytesWritten = 0; - uint32_t dwBytesTotal = 0; - uint32_t dwCounter = 0; - uint32_t dwBytesRead = 7; - uint8_t pAckEvent[7]; - int sz = 0; - uint8_t HCI_VS_I2S_SWITCH_1[] = - {0x01, 0xD0, 0xFC, 0x08, 0x50, 0x01, 0x05, 0x80, 0x20, 0x00, 0x00, 0x00}; - - sz = write(fd, HCI_VS_I2S_SWITCH_1, sizeof(HCI_VS_I2S_SWITCH_1)); - if(sz < 0){ - LOGE("%s can't send command\n", __func__); - return -1; - } - - while((dwBytesTotal < 7) && (dwCounter < 5)){ - dwBytesRead = read(fd, &pAckEvent[dwBytesTotal], dwBytesRead); - dwBytesTotal += dwBytesRead; - dwBytesRead = 7 - dwBytesTotal; - dwCounter++; - } - if(dwBytesTotal < 7){ - LOGE("%s no ACK \n", __func__); - return -1; - } - - return 0; -} - -static int bt_mt6626_i2s_switch_2(int fd) -{ - uint32_t dwBytesWritten = 0; - uint32_t dwBytesTotal = 0; - uint32_t dwCounter = 0; - uint32_t dwBytesRead = 7; - uint8_t pAckEvent[7]; - int sz = 0; - uint8_t bt_mt6626_i2s_switch_2[] = - {0x01, 0xD0, 0xFC, 0x08, 0x60, 0x01, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00}; - - sz = write(fd, bt_mt6626_i2s_switch_2, sizeof(bt_mt6626_i2s_switch_2)); - if(sz < 0){ - LOGE("%s can't send command\n", __func__); - return -1; - } - - while((dwBytesTotal < 7) && (dwCounter < 5)){ - dwBytesRead = read(fd, &pAckEvent[dwBytesTotal], dwBytesRead); - dwBytesTotal += dwBytesRead; - dwBytesRead = 7 - dwBytesTotal; - dwCounter++; - } - if(dwBytesTotal < 7){ - LOGE("%s no ACK \n", __func__); - return -1; - } - - return 0; -} - -static void *bt_mt6626_forcesleep_thread(void *priv) -{ - int bt_fd = bt_host_init_uart((char*)BT_SERIAL_PORT); - if(bt_fd != -1){ - LOGD("+set bt force sleep, sleep 1\n"); - sleep(1); - bt_mt6626_alwayssleep_set(bt_fd); - bt_mt6626_i2s_switch_1(bt_fd); - bt_mt6626_i2s_switch_2(bt_fd); - LOGD("-set bt force sleep\n"); - close(bt_fd); - } - - pthread_exit(NULL); - return NULL; -} - -/* - * bt_set_controller_force_sleep - * If bt host is not at power on state, we should info bt firmware to close bt HW - * and let bt firmware enter sleep mode - * @chip -- chip value, 0x6616/0x6626 - */ -int bt_set_controller_force_sleep(int chip) -{ - int ret = 0; - pthread_t bt_fsleep_thd; - void *(*work_thread)(void*) = NULL; - int pwr_state = BT_PWR_UNKNOWN; - - ret = bt_host_pwr_state_get(&pwr_state); - if(ret){ - LOGE("get bt power state failed\n"); - return ret; - } - - switch(chip){ - case FM_CHIP_MT6616: - work_thread = bt_mt6616_forcesleep_thread; - break; - case FM_CHIP_MT6626: - work_thread = bt_mt6626_forcesleep_thread; - break; - default: - LOGE("unknown chip type\n"); - return -1; - break; - } - - if(BT_PWR_OFF == pwr_state){ - LOGD("set bt force sleep\n"); - ret = pthread_create(&bt_fsleep_thd, NULL, work_thread, NULL); - if(ret){ - LOGE("create work thread failed\n"); - return ret; - } - pthread_join(bt_fsleep_thd, NULL); - } - return ret; -} - diff --git a/MediaTek/fmradiolibs/fmnative/fmr/common.cpp b/MediaTek/fmradiolibs/fmnative/fmr/common.cpp deleted file mode 100644 index 9c0a2cd..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/common.cpp +++ /dev/null @@ -1,1389 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" - -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "FMLIB_COM" - -static int g_stopscan = 0; - -int COM_open_dev(const char *pname, int *fd) -{ - int ret = 0; - int tmp = -1; - - FMR_ASSERT(pname); - FMR_ASSERT(fd); - - LOGI("COM_open_dev start\n"); - tmp = open(pname, O_RDWR); - if (tmp < 0) { - LOGE("Open %s failed, %s\n", pname, strerror(errno)); - ret = -ERR_INVALID_FD; - } - *fd = tmp; - LOGI("%s, [fd=%d] [ret=%d]\n", __func__, *fd, ret); - return ret; -} - -int COM_close_dev(int fd) -{ - int ret = 0; - - LOGI("COM_close_dev start\n"); - ret = close(fd); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret); - return ret; -} - -int COM_pwr_up(int fd, int band, int freq) -{ - int ret = 0; - struct fm_tune_parm parm; - - LOGI("%s, [freq=%d]\n", __func__, freq); - bzero(&parm, sizeof(struct fm_tune_parm)); - - parm.band = band; - parm.freq = freq; - parm.hilo = FM_AUTO_HILO_OFF; -#ifdef MTK_FM_50KHZ_SUPPORT - parm.space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ -#else - parm.space = 1; -#endif - - ret = ioctl(fd, FM_IOCTL_POWERUP, &parm); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret); - return ret; -} - -int COM_pwr_down(int fd, int type) -{ - int ret = 0; - LOGI("%s, [type=%d]\n", __func__, type); - ret = ioctl(fd, FM_IOCTL_POWERDOWN, &type); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret); - return ret; -} - -int COM_get_chip_id(int fd, int *chipid) -{ - int ret = 0; - uint16_t tmp = 0; - - FMR_ASSERT(chipid); - - ret = ioctl(fd, FM_IOCTL_GETCHIPID, &tmp); - *chipid = (int)tmp; - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [fd=%d] [chipid=%x] [ret=%d]\n", __func__, fd, *chipid, ret); - return ret; -} - -int COM_get_rssi(int fd, int *rssi) -{ - int ret = 0; - - FMR_ASSERT(rssi); - - ret = ioctl(fd, FM_IOCTL_GETRSSI, rssi); - if(ret){ - LOGE("%s, failed, [ret=%d]\n", __func__, ret); - } - LOGI("%s, [rssi=%d] [ret=%d]\n", __func__, *rssi, ret); - return ret; -} -/*0x20: space, 0x7E:~*/ -#define ISVALID(c)((c)>=0x20 && (c)<=0x7E) -/*change any char which out of [0x20,0x7E]to space(0x20)*/ -void COM_change_string(uint8_t *str,int len) -{ - int i=0; - for (i=0; i<len; i++) - { - if(false == ISVALID(str[i])) - { - str[i]= 0x20; - } - } -} -int COM_get_ps(int fd, RDSData_Struct *rds, uint8_t **ps, int *ps_len) -{ - int ret = 0; - char tmp_ps[9] = {0}; - - FMR_ASSERT(rds); - FMR_ASSERT(ps); - FMR_ASSERT(ps_len); - - if (rds->event_status&RDS_EVENT_PROGRAMNAME) - { - LOGD("%s, Success,[event_status=%d]\n", __func__, rds->event_status); - *ps = &rds->PS_Data.PS[3][0]; - *ps_len = sizeof(rds->PS_Data.PS[3]); - - COM_change_string(*ps,*ps_len); - memcpy(tmp_ps, *ps, 8); - LOGI("PS=%s\n", tmp_ps); - } - else - { - LOGE("%s, Failed,[event_status=%d]\n", __func__, rds->event_status); - *ps = NULL; - *ps_len = 0; - ret = -ERR_RDS_NO_DATA; - } - - return ret; -} - -int COM_get_rt(int fd, RDSData_Struct *rds, uint8_t **rt, int *rt_len) -{ - int ret = 0; - char tmp_rt[65] = { 0 }; - - FMR_ASSERT(rds); - FMR_ASSERT(rt); - FMR_ASSERT(rt_len); - - if (rds->event_status&RDS_EVENT_LAST_RADIOTEXT) - { - LOGD("%s, Success,[event_status=%d]\n", __func__, rds->event_status); - *rt = &rds->RT_Data.TextData[3][0]; - *rt_len = rds->RT_Data.TextLength; - - COM_change_string(*rt,*rt_len); - memcpy(tmp_rt, *rt, 64); - LOGI("RT=%s\n", tmp_rt); - } - else - { - LOGE("%s, Failed,[event_status=%d]\n", __func__, rds->event_status); - *rt = NULL; - *rt_len = 0; - ret = -ERR_RDS_NO_DATA; - } - return ret; -} - -int COM_get_pi(int fd, RDSData_Struct *rds, uint16_t *pi) -{ - int ret = 0; - - FMR_ASSERT(rds); - FMR_ASSERT(pi); - - if(rds->event_status&RDS_EVENT_PI_CODE){ - LOGD("%s, Success,[event_status=%d] [PI=%d]\n", __func__, rds->event_status, rds->PI); - *pi = rds->PI; - }else { - LOGI("%s, Failed, there's no pi,[event_status=%d]\n", __func__, rds->event_status); - *pi = -1; - ret = -ERR_RDS_NO_DATA; - } - - return ret; -} - -int COM_get_pty(int fd, RDSData_Struct *rds, uint8_t *pty) -{ - int ret = 0; - - FMR_ASSERT(rds); - FMR_ASSERT(pty); - - if(rds->event_status&RDS_EVENT_PTY_CODE){ - LOGD("%s, Success,[event_status=%d] [PTY=%d]\n", __func__, rds->event_status, rds->PTY); - *pty = rds->PTY; - }else{ - LOGI("%s, Success, there's no pty,[event_status=%d]\n", __func__, rds->event_status); - *pty = -1; - ret = -ERR_RDS_NO_DATA; - } - - return ret; -} - -int COM_tune(int fd, int freq, int band) -{ - int ret = 0; - - struct fm_tune_parm parm; - - bzero(&parm, sizeof(struct fm_tune_parm)); - - parm.band = band; - parm.freq = freq; - parm.hilo = FM_AUTO_HILO_OFF; -#ifdef MTK_FM_50KHZ_SUPPORT - parm.space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ -#else - parm.space = 1; -#endif - - ret = ioctl(fd, FM_IOCTL_TUNE, &parm); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [fd=%d] [freq=%d] [ret=%d]\n", __func__, fd, freq, ret); - return ret; -} - -int COM_seek(int fd, int *freq, int band, int dir, int lev) -{ - int ret = 0; - struct fm_seek_parm parm; - - bzero(&parm, sizeof(struct fm_tune_parm)); - - parm.band = band; - parm.freq = *freq; - parm.hilo = FM_AUTO_HILO_OFF; -#ifdef MTK_FM_50KHZ_SUPPORT - parm.space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ -#else - parm.space = 1; -#endif - if (dir == 1) { - parm.seekdir = FM_SEEK_UP; - } else if (dir == 0) { - parm.seekdir = FM_SEEK_DOWN; - } - parm.seekth = lev; - - ret = ioctl(fd, FM_IOCTL_SEEK, &parm); - if (ret == 0) { - *freq = parm.freq; - } - LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret); - return ret; -} - -int COM_set_mute(int fd, int mute) -{ - int ret = 0; - int tmp = mute; - - LOGD("%s, start \n", __func__); - ret = ioctl(fd, FM_IOCTL_MUTE, &tmp); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret); - return ret; -} - -int COM_is_fm_pwrup(int fd, int *pwrup) -{ - int ret = 0; - - ret = ioctl(fd, FM_IOCTL_IS_FM_POWERED_UP, pwrup); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret); - return ret; -} - -int COM_fm_set_status(int fd, int which, bool stat) -{ - int ret = 0; - fm_status_t stat_parm; - - bzero(&stat_parm, sizeof(fm_status_t)); - stat_parm.which = which; - stat_parm.stat = stat; - - ret = ioctl(fd, FM_IOCTL_FM_SET_STATUS, &stat_parm); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret); - return ret; -} - -int COM_fm_get_status(int fd, int which, bool *stat) -{ - int ret = 0; - fm_status_t stat_parm; - - bzero(&stat_parm, sizeof(fm_status_t)); - stat_parm.which = which; - - ret = ioctl(fd, FM_IOCTL_FM_GET_STATUS, &stat_parm); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [fd=%d] [ret=%d]\n", __func__, fd, ret); - - *stat = stat_parm.stat; - - return ret; -} - -/****************************************** - * Inquiry if RDS is support in driver. - * Parameter: - * None - *supt Value: - * 1: support - * 0: NOT support - * -1: error - ******************************************/ -int COM_is_rdsrx_support(int fd, int *supt) -{ - int ret = 0; - int support = -1; - - if (fd < 0){ - LOGE("FM isRDSsupport fail, g_fm_fd = %d\n", fd); - *supt = -1; - ret = -ERR_INVALID_FD; - return ret; - } - - ret = ioctl(fd, FM_IOCTL_RDS_SUPPORT, &support); - if (ret){ - LOGE("FM FM_IOCTL_RDS_SUPPORT fail, errno = %d\n", errno); - //don't support - *supt = 0; - return ret; - } - LOGI("isRDSsupport Success,[support=%d]\n", support); - *supt = support; - return ret; -} - -int COM_is_rdstx_support(int fd, int *supt) -{ - int ret = 0; - - ret = ioctl(fd, FM_IOCTL_RDSTX_SUPPORT, supt); - if (ret < 0){ - LOGE("%s: fail\n", __func__); - //FM don't support RDS Tx - *supt = 0; - } - LOGD("%s:[supt=%d] [ret=%d]\n", __func__, *supt, ret); - return ret; -} - - -static struct fm_scan_t scan_req; -static int scan_req_init_flag = 0; - -/* - * COM_hw_scan_new - * @fd -file descriptor - * @ppdst - target channel buffer - * @upper - upper band, Eg: 10800 (108.00Mhz) - * @lower - lower band, Eg: 7600 (76.00Mhz) - * @space - scan space, 5: 50Khz, 10: 100Khz, 20: 200Khz - * Return channel number >= 0 if success, else error code - */ -int COM_hw_scan_new(int fd, void **ppdst, int upper, int lower, int space, void *para) -{ - int ret = 0; - int tmp = 0; - - if (!scan_req_init_flag) { - scan_req_init_flag = 1; - scan_req.sr_size = 0; - scan_req.sr.ch_rssi_buf = NULL; - } - - // alloc memory for buffer - if ((upper - lower) < space) { - LOGE("band para err\n"); - return -1; - } - - tmp = ((upper - lower) / space + 1) * sizeof(struct fm_ch_rssi*); - if (scan_req.sr_size < tmp) { - if (scan_req.sr.ch_rssi_buf) { - free(scan_req.sr.ch_rssi_buf); - scan_req.sr.ch_rssi_buf = NULL; - } - scan_req.sr_size = tmp; - } - - if (!scan_req.sr.ch_rssi_buf) { - scan_req.sr.ch_rssi_buf = (struct fm_ch_rssi*)malloc(scan_req.sr_size); - if (!scan_req.sr.ch_rssi_buf) { - LOGE("scan alloc mem failed\n"); - scan_req.sr_size = 0; - return -2; - } - } - - // scan parameter init, start scan - scan_req.lower = lower; - scan_req.upper = upper; - scan_req.space = space; - scan_req.cmd = FM_SCAN_CMD_START; - ret = ioctl(fd, FM_IOCTL_SCAN_NEW, &scan_req); - if (ret < 0) { - LOGE("scan start faild\n"); - return ret; - } - - // get result channel info - scan_req.cmd = FM_SCAN_CMD_GET_CH_RSSI; - ret = ioctl(fd, FM_IOCTL_SCAN_NEW, &scan_req); - if (ret < 0) { - LOGE("scan get num faild\n"); - return ret; - } - - *ppdst = (void*)scan_req.sr.ch_rssi_buf; - return scan_req.num; -} - - -/* - * COM_seek_new - * @fd -file descriptor - * @freq - start freqency of seek - * @upper - upper band, Eg: 10800 (108.00Mhz) - * @lower - lower band, Eg: 7600 (76.00Mhz) - * @space - scan space, 5: 50Khz, 10: 100Khz, 20: 200Khz - * @dir - seek direction, 0: up; 1: down - * @rssi - seek threshold in dbm (Eg, -95dbm) - * Return 0 if success, else error code - */ -int COM_seek_new(int fd, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para) -{ - int ret = 0; - int tmp = 0; - struct fm_seek_t seek_req; - - // seek parameter init, start seek - seek_req.lower = lower; - seek_req.upper = upper; - seek_req.space = space; - seek_req.freq = *freq; - seek_req.dir = dir; - seek_req.th = *rssi; - ret = ioctl(fd, FM_IOCTL_SEEK_NEW, &seek_req); - if (ret < 0) { - LOGE("seek faild\n"); - return ret; - } - - *freq = seek_req.freq; - *rssi = seek_req.th; - LOGD("seek, freq %d, rssi %d\n", seek_req.freq, seek_req.th); - return ret; -} - - -/* - * COM_tune_new - * @fd -file descriptor - * @freq - target freqency - * @upper - upper band, Eg: 10800 (108.00Mhz) - * @lower - lower band, Eg: 7600 (76.00Mhz) - * @space - scan space, 5: 50Khz, 10: 100Khz, 20: 200Khz - * Return 0 if success, else error code - */ -int COM_tune_new(int fd, int freq, int upper, int lower, int space, void *para) -{ - int ret = 0; - int tmp = 0; - struct fm_tune_t tune_req; - - // tune parameter init, start tune - tune_req.lower = lower; - tune_req.upper = upper; - tune_req.space = space; - tune_req.freq = freq; - ret = ioctl(fd, FM_IOCTL_TUNE_NEW, &tune_req); - if (ret < 0) { - LOGE("tune faild\n"); - return ret; - } - - LOGD("tune, freq %d\n", tune_req.freq); - return ret; -} -int COM_pre_search(int fd) -{ - fm_s32 ret = 0; - ret = ioctl(fd, FM_IOCTL_PRE_SEARCH, 0); - LOGD("COM_pre_search:%d\n",ret); - return ret; -} -int COM_restore_search(int fd) -{ - fm_s32 ret = 0; - ret = ioctl(fd, FM_IOCTL_RESTORE_SEARCH, 0); - LOGD("COM_restore_search:%d\n",ret); - return ret; -} - -/*soft mute tune function, usually for sw scan implement or CQI log tool*/ -int COM_Soft_Mute_Tune(int fd,fm_softmute_tune_t *para) -{ - fm_s32 ret = 0; -// fm_s32 RSSI=0, PAMD=0,MR=0, ATDC=0; -// fm_u32 PRX=0; -// fm_u16 softmuteGainLvl=0; - fm_softmute_tune_t value; - - value.freq = para->freq; - ret = ioctl(fd, FM_IOCTL_SOFT_MUTE_TUNE, &value); - if (ret) - { - LOGE("FM soft mute tune faild:%d\n",ret); - return ret; - } - #if 0 - LOGD("Raw data of soft mute tune[%d]: RSSI:[%x]PAMD:[%x]MR:[%x]ATDC:[%x]PRX:[%x]SMG:[%x]",para->freq,value.RSSI,value.PAMD,value.MR,value.ATDC,value.PRX,value.SMG); - RSSI = ((value.RSSI & 0x03FF) >= 512) ? ((value.RSSI & 0x03FF) - 1024) : (value.RSSI & 0x03FF); - PAMD = ((value.PAMD & 0xFF) >= 128) ? ((value.PAMD & 0x00FF) - 256) : (value.PAMD & 0x00FF); - MR = ((value.MR & 0x01FF) >= 256) ? ((value.MR & 0x01FF) - 512) : (value.MR & 0x01FF); - ATDC =((value.ATDC & 0x0FFF) >= 2048) ? ((value.ATDC & 0x0FFF) - 4096) : (value.ATDC & 0x0FFF); - if(ATDC < 0) - { - ATDC = (~(ATDC)) - 1;//Get abs value of ATDC - } - PRX = (value.PRX & 0x00FF); - softmuteGainLvl = value.SMG; - //check if the channel is valid according to each CQIs - if((RSSI >= RSSI_TH) - && (PAMD <= PAMD_TH) - && (ATDC <= ATDC_TH) - && (MR >= MR_TH) - && (PRX >= PRX_TH) - && (softmuteGainLvl <= softMuteGainTH)) - { - para->valid = fm_true; - } - else - { - para->valid = fm_false; - } - #endif - para->valid = value.valid; - para->rssi = value.rssi; -// LOGI("soft mute tune[%d] valid[%d]: RSSI:[%d]PAMD:[%d]MR:[%d]ATDC:[%d]PRX:[%d]SMG:[%d]",para->freq,para->valid,RSSI,PAMD,MR,ATDC,PRX,softmuteGainLvl); - return 0; -} - -int COM_hw_scan(int fd, uint16_t *scan_tbl, int *max_num, int band, int sort) -{ - struct fm_scan_parm parm; - uint16_t tmp_val = 0; - uint16_t ch_offset = 0; - uint16_t MASK_CH = 0; - int ret = 0; - int step = 0; - int chl_cnt = 0; - int i, j; - struct fm_ch_rssi tmp; - struct fm_rssi_req rssi_req; - - parm.band = band; -#ifdef MTK_FM_50KHZ_SUPPORT - parm.space = FM_SPACE_50K; -#else - parm.space = FM_SPACE_100K; -#endif - parm.hilo = FM_AUTO_HILO_OFF; - parm.freq = 0; - parm.ScanTBLSize = sizeof(parm.ScanTBL)/sizeof(uint16_t); - - ret = ioctl(fd, FM_IOCTL_SCAN, &parm); - if (ret) { - LOGE("FM scan faild\n"); - *max_num = 0; - return ret; - } - - //get scan result channel - memset(&rssi_req, 0x0, sizeof(struct fm_rssi_req)); - for (ch_offset = 0; ch_offset < parm.ScanTBLSize; ch_offset++) { - if(parm.ScanTBL[ch_offset] == 0) - continue; - for (step=0;step<16;step++) { - if(parm.ScanTBL[ch_offset] & (1 << step)){ - tmp_val = FM_FREQ_MIN + (ch_offset*16 + step) * (parm.space); - if (tmp_val <= FM_FREQ_MAX) { - rssi_req.cr[chl_cnt].freq = tmp_val; - chl_cnt++; - } - } - } - } - - //sort - switch(sort){ - case FM_SCAN_SORT_NON: - break; - case FM_SCAN_SORT_UP: - case FM_SCAN_SORT_DOWN: - //get rssi per channel, mute --> fast tune --> get rssi - rssi_req.num = chl_cnt; - rssi_req.read_cnt = 1; //RSSI read times, we can read more than one time to ensure rssi valid - ret = ioctl(fd, FM_IOCTL_SCAN_GETRSSI, &rssi_req); - if(ret){ - LOGE("FM scan get rssi faild\n"); - *max_num = 0; - return ret; - } - //do sort: insert sort algorithm - for(i = 1; i < chl_cnt; i++){ - for(j = i; (j > 0) && ((FM_SCAN_SORT_DOWN == sort) ? (rssi_req.cr[j-1].rssi\ - < rssi_req.cr[j].rssi) : (rssi_req.cr[j-1].rssi > rssi_req.cr[j].rssi)); j--){ - tmp.freq = rssi_req.cr[j].freq; - tmp.rssi = rssi_req.cr[j].rssi; - rssi_req.cr[j].freq = rssi_req.cr[j-1].freq; - rssi_req.cr[j].rssi = rssi_req.cr[j-1].rssi; - rssi_req.cr[j-1].freq = tmp.freq; - rssi_req.cr[j-1].rssi = tmp.rssi; - } - } - break; - default: - break; - } - *max_num = (chl_cnt > *max_num) ? *max_num : chl_cnt; - - //copy to result buf - LOGD("Channel list(%d):", chl_cnt); - for(i = 0; i < *max_num; i++){ - scan_tbl[i] = rssi_req.cr[i].freq; - LOGD("%d(%d dbm) ", (int)scan_tbl[i], rssi_req.cr[i].rssi); - } - LOGD("\n"); - return ret; -} - -int COM_fastget_rssi(int fd, struct fm_rssi_req *rssi_req) -{ - int ret = 0; - - FMR_ASSERT(rssi_req); - //get rssi per channel, mute --> fast tune --> get rssi - if(rssi_req->read_cnt <= 0){ - rssi_req->read_cnt = 1; //RSSI read times, we can read more than one time to ensure rssi valid - } - ret = ioctl(fd, FM_IOCTL_SCAN_GETRSSI, rssi_req); - if(ret){ - LOGE("Fast get rssi faild\n"); - } - - return ret; -} - - -int COM_get_cqi(int fd, int num, char *buf, int buf_len) -{ - int ret; - struct fm_cqi_req cqi_req; - - //check buf - num = (num > CQI_CH_NUM_MAX) ? CQI_CH_NUM_MAX : num; - num = (num < CQI_CH_NUM_MIN) ? CQI_CH_NUM_MIN : num; - cqi_req.ch_num = (uint16_t)num; - cqi_req.buf_size = cqi_req.ch_num * sizeof(struct fm_cqi); - if (!buf || (buf_len < cqi_req.buf_size)) { - LOGE("get cqi, invalid buf\n"); - return -1; - } - cqi_req.cqi_buf = buf; - - //get cqi from driver - ret = ioctl(fd, FM_IOCTL_CQI_GET, &cqi_req); - if (ret < 0) { - LOGE("get cqi, failed %d\n", ret); - return -1; - } - - return 0; -} - - -int COM_sw_scan(int fd, uint16_t *scan_tbl, int *max_num, int band, int sort) -{ - int ret; - int chl_cnt = 0; - uint16_t start_freq = FM_FREQ_MIN; - struct fm_seek_parm parm; - - g_stopscan = 0; - - do { - bzero(&parm, sizeof(struct fm_tune_parm)); - parm.band = band; - parm.freq = start_freq; - parm.hilo = FM_AUTO_HILO_OFF; -#ifdef MTK_FM_50KHZ_SUPPORT - parm.space = 5; //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ -#else - parm.space = 1; -#endif - parm.seekdir = FM_SEEK_UP; - parm.seekth = FM_SEEKTH_LEVEL_DEFAULT; - - ret = ioctl(fd, FM_IOCTL_SEEK, &parm); - if (ret != 0) { - LOGE("FM scan faild, %s, %d\n", strerror(errno), parm.err); - break; - } - - if((parm.err == FM_SUCCESS) && (chl_cnt < *max_num) && (parm.freq > start_freq)){ - scan_tbl[chl_cnt] = parm.freq; - chl_cnt++; - } else { - break; - } - - start_freq = parm.freq; - } while (g_stopscan == 0); - - LOGI("FM sw scan %d station found\n", chl_cnt); - return ret; -} - -int COM_stop_scan(int fd) -{ - int ret = 0; - - g_stopscan = 1; - - return ret; -} - -int COM_turn_on_off_rds(int fd, int onoff) -{ - int ret = 0; - uint16_t rds_on = -1; - - LOGD("Rdsset start\n"); - if(onoff == FMR_RDS_ON){ - rds_on = 1; - ret = ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on); - if (ret){ - LOGE("FM_IOCTL_RDS_ON failed\n"); - return ret; - } - LOGD("Rdsset Success,[rds_on=%d]\n", rds_on); - }else{ - rds_on = 0; - ret = ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on); - if (ret){ - LOGE("FM_IOCTL_RDS_OFF failed\n"); - return ret; - } - LOGD("Rdsset Success,[rds_on=%d]\n", rds_on); - } - return ret; -} - -int COM_read_rds_data(int fd, RDSData_Struct *rds, uint16_t *rds_status) -{ - int ret = 0; - uint16_t event_status; - //char tmp_ps[9] = {0}; - //char tmp_rt[65] = { 0 }; - - FMR_ASSERT(rds); - FMR_ASSERT(rds_status); - - if(read(fd, rds, sizeof(RDSData_Struct)) == sizeof(RDSData_Struct)){ - event_status = rds->event_status; - //memcpy(tmp_ps, &rds->PS_Data.PS[3][0], 8); - //memcpy(tmp_rt, &rds->RT_Data.TextData[3][0], 64); - LOGI("event_status = 0x%x\n", event_status); - //memset(tmp_ps, 0, 9); - //memset(tmp_rt, 0, 65); - *rds_status = event_status; - return ret; - }else { - //LOGE("readrds get no event\n"); - ret = -ERR_RDS_NO_DATA; - } - return ret; -} - -int COM_active_af(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *ret_freq) -{ - int ret = 0; - int i = 0; - struct fm_tune_parm parm; - uint16_t rds_on = 0; - uint16_t set_freq, sw_freq, org_freq, PAMD_Value, AF_PAMD_LBound, AF_PAMD_HBound; - uint16_t PAMD_Level[25]; - uint16_t PAMD_DB_TBL[5] = {// 5dB, 10dB, 15dB, 20dB, 25dB, - // 13, 17, 21, 25, 29}; - 8, 12, 15, 18, 20}; - FMR_ASSERT(rds); - FMR_ASSERT(ret_freq); - - sw_freq = cur_freq; //current freq - org_freq = cur_freq; - parm.band = band; - parm.freq = sw_freq; - parm.hilo = FM_AUTO_HILO_OFF; -#ifdef MTK_FM_50KHZ_SUPPORT - parm.space = FM_SPACE_50K; -#else - parm.space = FM_SPACE_100K; -#endif - - - if(!(rds->event_status&RDS_EVENT_AF)){ - LOGE("activeAF failed\n"); - *ret_freq = 0; - ret = -ERR_RDS_NO_DATA; - return ret; - } - - AF_PAMD_LBound = PAMD_DB_TBL[0]; //5dB - AF_PAMD_HBound = PAMD_DB_TBL[1]; //15dB - ioctl(fd, FM_IOCTL_GETCURPAMD, &PAMD_Value); - LOGI("current_freq=%d,PAMD_Value=%d\n", cur_freq, PAMD_Value); - - if(PAMD_Value < AF_PAMD_LBound){ - rds_on = 0; - ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on); - //make sure rds->AF_Data.AF_Num is valid - rds->AF_Data.AF_Num = (rds->AF_Data.AF_Num > 25)? 25 : rds->AF_Data.AF_Num; - for(i=0; i<rds->AF_Data.AF_Num; i++){ - set_freq = rds->AF_Data.AF[1][i]; //method A or B - if(set_freq != org_freq){ - parm.freq = set_freq; - ioctl(fd, FM_IOCTL_TUNE, &parm); - usleep(250*1000); - ioctl(fd, FM_IOCTL_GETCURPAMD, &PAMD_Level[i]); - LOGI("next_freq=%d,PAMD_Level=%d\n", parm.freq, PAMD_Level[i]); - if(PAMD_Level[i] > PAMD_Value){ - PAMD_Value = PAMD_Level[i]; - sw_freq = set_freq; - } - } - } - LOGI("PAMD_Value=%d, sw_freq=%d\n", PAMD_Value, sw_freq); - if((PAMD_Value > AF_PAMD_HBound)&&(sw_freq != 0)){ - parm.freq = sw_freq; - ioctl(fd, FM_IOCTL_TUNE, &parm); - cur_freq = parm.freq; - }else { - parm.freq = org_freq; - ioctl(fd, FM_IOCTL_TUNE, &parm); - cur_freq = parm.freq; - } - rds_on = 1; - ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on); - }else { - LOGD("RDS_EVENT_AF old freq:%d\n", org_freq); - } - *ret_freq = cur_freq; - - return ret; -} - -int COM_active_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq) -{ - int ret = 0; - - FMR_ASSERT(rds); - FMR_ASSERT(backup_freq); - FMR_ASSERT(ret_freq); - - if(rds->event_status&RDS_EVENT_TAON){ - uint16_t rds_on = 0; - struct fm_tune_parm parm; - uint16_t PAMD_Level[25]; - uint16_t PAMD_DB_TBL[5] = {13, 17, 21, 25, 29}; - uint16_t set_freq, sw_freq, org_freq, PAMD_Value, TA_PAMD_Threshold; - int i = 0; - - rds_on = 0; - ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on); - TA_PAMD_Threshold = PAMD_DB_TBL[2]; //15dB - sw_freq = cur_freq; - org_freq = cur_freq; - *backup_freq = org_freq; - parm.band = band; - parm.freq = sw_freq; - parm.hilo = FM_AUTO_HILO_OFF; -#ifdef MTK_FM_50KHZ_SUPPORT - parm.space = FM_SPACE_50K; -#else - parm.space = FM_SPACE_100K; -#endif - - ioctl(fd, FM_IOCTL_GETCURPAMD, &PAMD_Value); - //make sure rds->AF_Data.AF_Num is valid - rds->AFON_Data.AF_Num = (rds->AFON_Data.AF_Num > 25)? 25 : rds->AFON_Data.AF_Num; - for(i=0; i< rds->AFON_Data.AF_Num; i++){ - set_freq = rds->AFON_Data.AF[1][i]; - LOGI("set_freq=0x%02x,org_freq=0x%02x\n", set_freq, org_freq); - if(set_freq != org_freq){ - parm.freq = sw_freq; - ioctl(fd, FM_IOCTL_TUNE, &parm); - ioctl(fd, FM_IOCTL_GETCURPAMD, &PAMD_Level[i]); - if(PAMD_Level[i] > PAMD_Value){ - PAMD_Value = PAMD_Level[i]; - sw_freq = set_freq; - } - } - } - - if((PAMD_Value > TA_PAMD_Threshold)&&(sw_freq != 0)){ - rds->Switch_TP= 1; - parm.freq = sw_freq; - ioctl(fd, FM_IOCTL_TUNE, &parm); - cur_freq = parm.freq; - }else{ - parm.freq = org_freq; - ioctl(fd, FM_IOCTL_TUNE, &parm); - cur_freq = parm.freq; - } - rds_on = 1; - ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on); - } - - *ret_freq = cur_freq; - return ret; -} - -int COM_deactive_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq) -{ - int ret = 0; - - FMR_ASSERT(rds); - FMR_ASSERT(backup_freq); - FMR_ASSERT(ret_freq); - - if(rds->event_status&RDS_EVENT_TAON_OFF){ - uint16_t rds_on = 0; - struct fm_tune_parm parm; - parm.band = FM_RAIDO_BAND; - parm.freq = *backup_freq; - parm.hilo = FM_AUTO_HILO_OFF; -#ifdef MTK_FM_50KHZ_SUPPORT - parm.space = FM_SPACE_50K; -#else - parm.space = FM_SPACE_100K; -#endif - ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on); - - ioctl(fd, FM_IOCTL_TUNE, &parm); - cur_freq = parm.freq; - rds_on = 1; - ioctl(fd, FM_IOCTL_RDS_ONOFF, &rds_on); - } - - *ret_freq = cur_freq; - return ret; -} - -int COM_is_tx_support(int fd, int *supt) -{ - int ret = 0; - - ret = ioctl(fd, FM_IOCTL_TX_SUPPORT, supt); - if (ret < 0){ - LOGE("%s:fail\n", __func__); - *supt = -1; //error - } - LOGD("%s:[supt=%d] [ret=%d]\n", __func__, *supt, ret); - return ret; -} -//return tx support -int COM_tx_support(int fd, int *supt) -{ - *supt = 1; - LOGD("%s:\n", __func__); - return 0; -} - -int COM_tx_pwrup(int fd, int band, int freq) -{ - int ret = 0; - struct fm_tune_parm parm_tune; - - parm_tune.band = band; - parm_tune.freq = freq; - parm_tune.hilo = FM_AUTO_HILO_OFF; -#ifdef MTK_FM_50KHZ_SUPPORT - parm_tune.space = FM_SPACE_50K; -#else - parm_tune.space = FM_SPACE_100K; -#endif - - ret = ioctl(fd, FM_IOCTL_POWERUP_TX, &parm_tune); - if (ret){ - LOGE("%s:fail\n", __func__); - } - LOGD("%s:[freq=%d] [ret=%d]\n", __func__, freq, ret); - - return ret; -} - -int COM_tx_tune(int fd, int band, int freq) -{ - int ret = 0; - struct fm_tune_parm parm_tune; - - parm_tune.band = band; - parm_tune.freq = freq; - parm_tune.hilo = FM_AUTO_HILO_OFF; -#ifdef MTK_FM_50KHZ_SUPPORT - parm_tune.space = FM_SPACE_50K; -#else - parm_tune.space = FM_SPACE_100K; -#endif - - ret = ioctl(fd, FM_IOCTL_TUNE_TX, &parm_tune); - if (ret){ - LOGE("%s:fail\n", __func__); - } - LOGD("%s:[freq=%d] [ret=%d]\n", __func__, freq, ret); - - return ret; -} - -int COM_tx_scan(int fd, int band, int start_freq, int dir, int *num, uint16_t *tbl) -{ - int ret = 0; - struct fm_tx_scan_parm parm; - - bzero(&parm, sizeof(struct fm_tx_scan_parm)); - parm.band = band; -#ifdef MTK_FM_50KHZ_SUPPORT - parm.space = FM_SPACE_50K; -#else - parm.space = FM_SPACE_100K; -#endif - parm.hilo = FM_AUTO_HILO_OFF; - parm.freq = start_freq; - parm.scandir = dir; - parm.ScanTBLSize = *num; - - ret = ioctl(fd, FM_IOCTL_TX_SCAN, &parm); - if(ret){ - LOGE("%s:failed, [ret=%d]\n", __func__, ret); - *num = 0; - }else{ - *num = parm.ScanTBLSize; - memcpy(tbl, &parm.ScanTBL[0], parm.ScanTBLSize*sizeof(uint16_t)); - } - LOGD("%s:[num=%d] [ret=%d]\n", __func__, parm.ScanTBLSize, ret); - return ret; -} - -int COM_rdstx_onoff(int fd, int onoff) -{ - int ret = 0; - - ret = ioctl(fd, FM_IOCTL_RDSTX_ENABLE, &onoff); - if (ret < 0){ - LOGE("%s: fail, ret = %d\n", __func__, ret); - } - - LOGD("%s: [ret = %d]\n", __func__, ret); - return ret; -} - -int COM_rdstx(int fd, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt) -{ - int ret = 0; - struct fm_rds_tx_parm param_rds_tx; - struct fm_rds_tx_req rds_req; - int i = 0; - - bzero(&rds_req, sizeof(struct fm_rds_tx_req)); - bzero(¶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 <linux/ioctl.h> -#include <linux/time.h> -//fm type define -typedef signed char fm_s8; -typedef signed short fm_s16; -typedef signed int fm_s32; -typedef signed long long fm_s64; -typedef unsigned char fm_u8; -typedef unsigned short fm_u16; -typedef unsigned int fm_u32; -typedef unsigned long long fm_u64; -typedef enum fm_bool { - fm_false = 0, - fm_true = 1 -} fm_bool; - -//scan sort algorithm -enum{ - FM_SCAN_SORT_NON = 0, - FM_SCAN_SORT_UP, - FM_SCAN_SORT_DOWN, - FM_SCAN_SORT_MAX -}; - -//scan methods -enum{ - FM_SCAN_SEL_HW = 0, //select hardware scan, advantage: fast - FM_SCAN_SEL_SW, //select software scan, advantage: more accurate - FM_SCAN_SEL_MAX -}; - - //***************************************************************************************** -//***********************************FM config for customer *********************************** -//***************************************************************************************** -//RX -#define FMR_RSSI_TH_LONG 0x0301 //FM radio long antenna RSSI threshold(11.375dBuV) -#define FMR_RSSI_TH_SHORT 0x02E0 //FM radio short antenna RSSI threshold(-1dBuV) -#define FMR_CQI_TH 0x00E9 //FM radio Channel quality indicator threshold(0x0000~0x00FF) -#define FMR_SEEK_SPACE 1 //FM radio seek space,1:100KHZ; 2:200KHZ -#define FMR_SCAN_CH_SIZE 80 //FM radio scan max channel size -#define FMR_BAND 1 //FM radio band, 1:87.5MHz~108.0MHz; 2:76.0MHz~90.0MHz; 3:76.0MHz~108.0MHz; 4:special -#define FMR_BAND_FREQ_L 875 //FM radio special band low freq(Default 87.5MHz) -#define FMR_BAND_FREQ_H 1080 //FM radio special band high freq(Default 108.0MHz) -#define FM_SCAN_SORT_SELECT FM_SCAN_SORT_NON -#define FM_SCAN_SELECT FM_SCAN_SEL_HW -#define FM_SCAN_SOFT_MUTE_GAIN_TH 3 //soft-mute threshold when software scan, rang: 0~3, 0 means better audio quality but less channel -#define FM_CHIP_DESE_RSSI_TH (-102) // rang: -102 ~ -72 - -//TX -#define FMTX_PWR_LEVEL_MAX 120 //FM transmitter power level, rang: 85db~120db, default 120db - -//***************************************************************************************** -//***********************************FM config for engineer *********************************** -//***************************************************************************************** -//RX -#define FMR_MR_TH 0x01BD //FM radio MR threshold -#define ADDR_SCAN_TH 0xE0 //scan thrshold register -#define ADDR_CQI_TH 0xE1 //scan CQI register - -//TX -#define FMTX_SCAN_HOLE_LOW 923 //92.3MHz~95.4MHz should not show to user -#define FMTX_SCAN_HOLE_HIGH 954 //92.3MHz~95.4MHz should not show to user -//***************************************************************************************** - -#define FM_NAME "fm" -#define FM_DEVICE_NAME "/dev/fm" - -// errno -#define FM_SUCCESS 0 -#define FM_FAILED 1 -#define FM_EPARM 2 -#define FM_BADSTATUS 3 -#define FM_TUNE_FAILED 4 -#define FM_SEEK_FAILED 5 -#define FM_BUSY 6 -#define FM_SCAN_FAILED 7 - -// band - -#define FM_BAND_UNKNOWN 0 -#define FM_BAND_UE 1 // US/Europe band 87.5MHz ~ 108MHz (DEFAULT) -#define FM_BAND_JAPAN 2 // Japan band 76MHz ~ 90MHz -#define FM_BAND_JAPANW 3 // Japan wideband 76MHZ ~ 108MHz -#define FM_BAND_SPECIAL 4 // special band between 76MHZ and 108MHz -#define FM_BAND_DEFAULT FM_BAND_UE - -#define FM_UE_FREQ_MIN 875 -#define FM_UE_FREQ_MAX 1080 -#define FM_JP_FREQ_MIN 760 -#define FM_JP_FREQ_MAX 1080 -#define FM_FREQ_MIN FMR_BAND_FREQ_L -#define FM_FREQ_MAX FMR_BAND_FREQ_H -#define FM_RAIDO_BAND FM_BAND_UE - -// space -#define FM_SPACE_UNKNOWN 0 -#define FM_SPACE_100K 1 -#define FM_SPACE_200K 2 -#define FM_SPACE_50K 5 - -#define FM_SEEK_SPACE FMR_SEEK_SPACE - -//max scan chl num -#define FM_MAX_CHL_SIZE FMR_SCAN_CH_SIZE -// auto HiLo -#define FM_AUTO_HILO_OFF 0 -#define FM_AUTO_HILO_ON 1 - -// seek direction -#define FM_SEEK_UP 0 -#define FM_SEEK_DOWN 1 - -#define FM_CHIP_AR1000 0x1000 -#define FM_CHIP_MT5192 0x91 -#define FM_CHIP_MT5193 0x92 -#define FM_CHIP_MT6616 0x6616 -#define FM_CHIP_MT6620 0x6620 -#define FM_CHIP_MT6626 0x6626 -#define FM_CHIP_MT6628 0x6628 -#define FM_CHIP_MT6627 0x6627 -#define FM_CHIP_MT6580 0x6580 -#define FM_CHIP_MT6630 0x6630 - -#define FM_CHIP_UNSUPPORTED -1 - -// seek threshold -#define FM_SEEKTH_LEVEL_DEFAULT 4 - -struct fm_tune_parm { - uint8_t err; - uint8_t band; - uint8_t space; - uint8_t hilo; - uint16_t freq; // IN/OUT parameter -}; - -struct fm_seek_parm { - uint8_t err; - uint8_t band; - uint8_t space; - uint8_t hilo; - uint8_t seekdir; - uint8_t seekth; - uint16_t freq; // IN/OUT parameter -}; - -struct fm_scan_parm { - uint8_t err; - uint8_t band; - uint8_t space; - uint8_t hilo; - uint16_t freq; // OUT parameter - uint16_t ScanTBL[26]; //need no less than the chip - uint16_t ScanTBLSize; //IN/OUT parameter -}; - -struct fm_ch_rssi{ - uint16_t freq; - int rssi; -}; - -enum fm_scan_cmd_t { - FM_SCAN_CMD_INIT = 0, - FM_SCAN_CMD_START, - FM_SCAN_CMD_GET_NUM, - FM_SCAN_CMD_GET_CH, - FM_SCAN_CMD_GET_RSSI, - FM_SCAN_CMD_GET_CH_RSSI, - FM_SCAN_CMD_MAX -}; - -struct fm_scan_t { - enum fm_scan_cmd_t cmd; - int ret; // 0, success; else error code - uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz - uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz - int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz - int num; // valid channel number - void *priv; - int sr_size; // scan result buffer size in bytes - union { - uint16_t *ch_buf; // channel buffer - int *rssi_buf; // rssi buffer - struct fm_ch_rssi *ch_rssi_buf; //channel and RSSI buffer - } sr; -}; - -struct fm_seek_t { - int ret; // 0, success; else error code - uint16_t freq; - uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz - uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz - int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz - int dir; // 0: up; 1: down - int th; // seek threshold in dbm(Eg, -95dbm) - void *priv; -}; - -struct fm_tune_t { - int ret; // 0, success; else error code - uint16_t freq; - uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz - uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz - int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz - void *priv; -}; -struct fm_softmute_tune_t -{ - fm_s32 rssi; // RSSI of current channel - fm_u16 freq; //current frequency - fm_bool valid; //current channel is valid(true) or not(false) -}; - -struct fm_rssi_req{ - uint16_t num; - uint16_t read_cnt; - struct fm_ch_rssi cr[26*16]; -}; - -struct fm_hw_info{ - int chip_id; //chip ID, eg. 6620 - int eco_ver; //chip ECO version, eg. E3 - int rom_ver; //FM DSP rom code version, eg. V2 - int patch_ver; //FM DSP patch version, eg. 1.11 - int reserve; -}; - -struct fm_search_threshold_t -{ - fm_s32 th_type;// 0, RSSI. 1,desense RSSI. 2,SMG. - fm_s32 th_val; //threshold value - fm_s32 reserve; -}; - -#if 1 -#define NEED_DEF_RDS 1 -#else -#define NEED_DEF_RDS 0 -#endif - -#if NEED_DEF_RDS -//For RDS feature -typedef struct -{ - uint8_t TP; - uint8_t TA; - uint8_t Music; - uint8_t Stereo; - uint8_t Artificial_Head; - uint8_t Compressed; - uint8_t Dynamic_PTY; - uint8_t Text_AB; - uint32_t flag_status; -}RDSFlag_Struct; - -typedef struct -{ - uint16_t Month; - uint16_t Day; - uint16_t Year; - uint16_t Hour; - uint16_t Minute; - uint8_t Local_Time_offset_signbit; - uint8_t Local_Time_offset_half_hour; -}CT_Struct; - -typedef struct -{ - int16_t AF_Num; - int16_t AF[2][25]; //100KHz - uint8_t Addr_Cnt; - uint8_t isMethod_A; - uint8_t isAFNum_Get; -}AF_Info; - -typedef struct -{ - uint8_t PS[4][8]; - uint8_t Addr_Cnt; -}PS_Info; - -typedef struct -{ - uint8_t TextData[4][64]; - uint8_t GetLength; - uint8_t isRTDisplay; - uint8_t TextLength; - uint8_t isTypeA; - uint8_t BufCnt; - uint16_t Addr_Cnt; -}RT_Info; - -struct rds_raw_data -{ - int dirty; //indicate if the data changed or not - int len; //the data len form chip - uint8_t data[146]; -}; - -struct rds_group_cnt -{ - unsigned int total; - unsigned int groupA[16]; //RDS groupA counter - unsigned int groupB[16]; //RDS groupB counter -}; - -enum rds_group_cnt_opcode -{ - RDS_GROUP_CNT_READ = 0, - RDS_GROUP_CNT_WRITE, - RDS_GROUP_CNT_RESET, - RDS_GROUP_CNT_MAX -}; - -struct rds_group_cnt_req -{ - int err; - enum rds_group_cnt_opcode op; - struct rds_group_cnt gc; -}; - -typedef struct -{ - CT_Struct CT; - RDSFlag_Struct RDSFlag; - uint16_t PI; - uint8_t Switch_TP; - uint8_t PTY; - AF_Info AF_Data; - uint8_t Radio_Page_Code; - uint16_t Program_Item_Number_Code; - AF_Info AFON_Data; - uint8_t Extend_Country_Code; - uint16_t Language_Code; - PS_Info PS_Data; - uint8_t PS_ON[8]; - uint16_t event_status; //will use RDSFlag_Struct RDSFlag->flag_status to check which event, is that ok? - RT_Info RT_Data; - uint8_t PAD1; //padding for data aligh - struct rds_group_cnt gc; -} RDSData_Struct; - - -//Need care the following definition. -//valid Rds Flag for notify -typedef enum { - RDS_FLAG_IS_TP = 0x0001, // Program is a traffic program - RDS_FLAG_IS_TA = 0x0002, // Program currently broadcasts a traffic ann. - RDS_FLAG_IS_MUSIC = 0x0004, // Program currently broadcasts music - RDS_FLAG_IS_STEREO = 0x0008, // Program is transmitted in stereo - RDS_FLAG_IS_ARTIFICIAL_HEAD = 0x0010, // Program is an artificial head recording - RDS_FLAG_IS_COMPRESSED = 0x0020, // Program content is compressed - RDS_FLAG_IS_DYNAMIC_PTY = 0x0040, // Program type can change - RDS_FLAG_TEXT_AB = 0x0080 // If this flag changes state, a new radio text string begins -} RdsFlag; - -typedef enum { - RDS_EVENT_FLAGS = 0x0001, // One of the RDS flags has changed state - RDS_EVENT_PI_CODE = 0x0002, // The program identification code has changed - RDS_EVENT_PTY_CODE = 0x0004, // The program type code has changed - RDS_EVENT_PROGRAMNAME = 0x0008, // The program name has changed - RDS_EVENT_UTCDATETIME = 0x0010, // A new UTC date/time is available - RDS_EVENT_LOCDATETIME = 0x0020, // A new local date/time is available - RDS_EVENT_LAST_RADIOTEXT = 0x0040, // A radio text string was completed - RDS_EVENT_AF = 0x0080, // Current Channel RF signal strength too weak, need do AF switch - RDS_EVENT_AF_LIST = 0x0100, // An alternative frequency list is ready - RDS_EVENT_AFON_LIST = 0x0200, // An alternative frequency list is ready - RDS_EVENT_TAON = 0x0400, // Other Network traffic announcement start - RDS_EVENT_TAON_OFF = 0x0800, // Other Network traffic announcement finished. - RDS_EVENT_RDS = 0x2000, // RDS Interrupt had arrived durint timer period - RDS_EVENT_NO_RDS = 0x4000, // RDS Interrupt not arrived durint timer period - RDS_EVENT_RDS_TIMER = 0x8000 // Timer for RDS Bler Check. ---- BLER block error rate -} RdsEvent; -#endif - -struct fm_rds_tx_parm { - uint8_t err; - uint16_t pi; - uint16_t ps[12]; // 4 ps - uint16_t other_rds[87]; // 0~29 other groups - uint8_t other_rds_cnt; // # of other group -}; - -typedef struct fm_rds_tx_req{ - unsigned char pty; // 0~31 integer - unsigned char rds_rbds; // 0:RDS, 1:RBDS - unsigned char dyn_pty; // 0:static, 1:dynamic - unsigned short pi_code; // 2-byte hex - unsigned char ps_buf[8]; // hex buf of PS - unsigned char ps_len; // length of PS, must be 0 / 8" - unsigned char af; // 0~204, 0:not used, 1~204:(87.5+0.1*af)MHz - unsigned char ah; // Artificial head, 0:no, 1:yes - unsigned char stereo; // 0:mono, 1:stereo - unsigned char compress; // Audio compress, 0:no, 1:yes - unsigned char tp; // traffic program, 0:no, 1:yes - unsigned char ta; // traffic announcement, 0:no, 1:yes - unsigned char speech; // 0:music, 1:speech -}fm_rds_tx_req; - -#define TX_SCAN_MAX 10 -#define TX_SCAN_MIN 1 -struct fm_tx_scan_parm { - uint8_t err; - uint8_t band; //87.6~108MHz - uint8_t space; - uint8_t hilo; - uint16_t freq; // start freq, if less than band min freq, then will use band min freq - uint8_t scandir; - uint16_t ScanTBL[TX_SCAN_MAX]; //need no less than the chip - uint16_t ScanTBLSize; //IN: desired size, OUT: scan result size -}; - -struct fm_gps_rtc_info{ - int err; //error number, 0: success, other: err code - int retryCnt; //GPS mnl can decide retry times - int ageThd; //GPS 3D fix time diff threshold - int driftThd; //GPS RTC drift threshold - struct timeval tvThd; //time value diff threshold - int age; //GPS 3D fix time diff - int drift; //GPS RTC drift - union{ - unsigned long stamp; //time stamp in jiffies - struct timeval tv; //time stamp value in RTC - }; - int flag; //rw flag -}; - -typedef enum -{ - FM_I2S_ON = 0, - FM_I2S_OFF, - FM_I2S_STATE_ERR -}fm_i2s_state_e; - -typedef enum -{ - FM_I2S_MASTER = 0, - FM_I2S_SLAVE, - FM_I2S_MODE_ERR -}fm_i2s_mode_e; - -typedef enum -{ - FM_I2S_32K = 0, - FM_I2S_44K, - FM_I2S_48K, - FM_I2S_SR_ERR -}fm_i2s_sample_e; - -struct fm_i2s_setting{ - int onoff; - int mode; - int sample; -}; - -typedef enum{ - FM_RX = 0, - FM_TX = 1 -}FM_PWR_T; - -typedef struct fm_i2s_info -{ - int status; /*0:FM_I2S_ON, 1:FM_I2S_OFF,2:error*/ - int mode; /*0:FM_I2S_MASTER, 1:FM_I2S_SLAVE,2:error*/ - int rate; /*0:FM_I2S_32K:32000,1:FM_I2S_44K:44100,2:FM_I2S_48K:48000,3:error*/ -} fm_i2s_info_t; - -typedef enum -{ - FM_AUD_ANALOG = 0, - FM_AUD_I2S = 1, - FM_AUD_MRGIF = 2, - FM_AUD_ERR -}fm_audio_path_e; - -typedef enum -{ - FM_I2S_PAD_CONN = 0, //sco fm chip: e.g.6627 - FM_I2S_PAD_IO = 1, //combo fm chip: e.g.6628 - FM_I2S_PAD_ERR -}fm_i2s_pad_sel_e; - -typedef struct fm_audio_info -{ - fm_audio_path_e aud_path; - fm_i2s_info_t i2s_info; - fm_i2s_pad_sel_e i2s_pad; -} fm_audio_info_t; - -struct fm_cqi -{ - int ch; - int rssi; - int reserve; -}; - -struct fm_cqi_req -{ - uint16_t ch_num; - int buf_size; - char *cqi_buf; -}; -typedef struct -{ - int freq; - int rssi; -}fm_desense_check_t; - -typedef struct -{ - uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz - uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz - int space; // 0x1: 50KHz, 0x2: 100Khz, 0x4: 200Khz - int cycle; // repeat times -}fm_full_cqi_log_t; - -typedef struct -{ - int which; - bool stat; -}fm_status_t; - -// ********** ***********FM IOCTL define start ******************************* - -#define FM_IOC_MAGIC 0xf5 // FIXME: any conflict? - -#define FM_IOCTL_POWERUP _IOWR(FM_IOC_MAGIC, 0, struct fm_tune_parm) -#define FM_IOCTL_POWERDOWN _IOWR(FM_IOC_MAGIC, 1, int32_t) -#define FM_IOCTL_TUNE _IOWR(FM_IOC_MAGIC, 2, struct fm_tune_parm) -#define FM_IOCTL_SEEK _IOWR(FM_IOC_MAGIC, 3, struct fm_seek_parm) -#define FM_IOCTL_SETVOL _IOWR(FM_IOC_MAGIC, 4, uint32_t) -#define FM_IOCTL_GETVOL _IOWR(FM_IOC_MAGIC, 5, uint32_t) -#define FM_IOCTL_MUTE _IOWR(FM_IOC_MAGIC, 6, uint32_t) -#define FM_IOCTL_GETRSSI _IOWR(FM_IOC_MAGIC, 7, int32_t) -#define FM_IOCTL_SCAN _IOWR(FM_IOC_MAGIC, 8, struct fm_scan_parm) -#define FM_IOCTL_STOP_SCAN _IO(FM_IOC_MAGIC, 9) - -//IOCTL and struct for test -#define FM_IOCTL_GETCHIPID _IOWR(FM_IOC_MAGIC, 10, uint16_t) -#define FM_IOCTL_EM_TEST _IOWR(FM_IOC_MAGIC, 11, struct fm_em_parm) -#define FM_IOCTL_RW_REG _IOWR(FM_IOC_MAGIC, 12, struct fm_ctl_parm) -#define FM_IOCTL_GETMONOSTERO _IOWR(FM_IOC_MAGIC, 13, uint16_t) -#define FM_IOCTL_GETCURPAMD _IOWR(FM_IOC_MAGIC, 14, uint16_t) -#define FM_IOCTL_GETGOODBCNT _IOWR(FM_IOC_MAGIC, 15, uint16_t) -#define FM_IOCTL_GETBADBNT _IOWR(FM_IOC_MAGIC, 16, uint16_t) -#define FM_IOCTL_GETBLERRATIO _IOWR(FM_IOC_MAGIC, 17, uint16_t) - -//IOCTL for RDS -#define FM_IOCTL_RDS_ONOFF _IOWR(FM_IOC_MAGIC, 18, uint16_t) -#define FM_IOCTL_RDS_SUPPORT _IOWR(FM_IOC_MAGIC, 19, int32_t) - -#define FM_IOCTL_POWERUP_TX _IOWR(FM_IOC_MAGIC, 20, struct fm_tune_parm) -#define FM_IOCTL_TUNE_TX _IOWR(FM_IOC_MAGIC, 21, struct fm_tune_parm) -#define FM_IOCTL_RDS_TX _IOWR(FM_IOC_MAGIC, 22, struct fm_rds_tx_parm) - -#define FM_IOCTL_RDS_SIM_DATA _IOWR(FM_IOC_MAGIC, 23, uint32_t) -#define FM_IOCTL_IS_FM_POWERED_UP _IOWR(FM_IOC_MAGIC, 24, uint32_t) - -//IOCTL for FM Tx -#define FM_IOCTL_TX_SUPPORT _IOWR(FM_IOC_MAGIC, 25, int32_t) -#define FM_IOCTL_RDSTX_SUPPORT _IOWR(FM_IOC_MAGIC, 26, int32_t) -#define FM_IOCTL_RDSTX_ENABLE _IOWR(FM_IOC_MAGIC, 27, int32_t) -#define FM_IOCTL_TX_SCAN _IOWR(FM_IOC_MAGIC, 28, struct fm_tx_scan_parm) - -//IOCTL for FM over BT -#define FM_IOCTL_OVER_BT_ENABLE _IOWR(FM_IOC_MAGIC, 29, int32_t) - -//IOCTL for FM ANTENNA SWITCH -#define FM_IOCTL_ANA_SWITCH _IOWR(FM_IOC_MAGIC, 30, int32_t) -#define FM_IOCTL_GETCAPARRAY _IOWR(FM_IOC_MAGIC, 31, int32_t) - -//IOCTL for FM compensation by GPS RTC -#define FM_IOCTL_GPS_RTC_DRIFT _IOWR(FM_IOC_MAGIC, 32, struct fm_gps_rtc_info) - -//IOCTL for FM I2S Setting -#define FM_IOCTL_I2S_SETTING _IOWR(FM_IOC_MAGIC, 33, struct fm_i2s_setting) - -#define FM_IOCTL_RDS_GROUPCNT _IOWR(FM_IOC_MAGIC, 34, struct rds_group_cnt_req) -#define FM_IOCTL_RDS_GET_LOG _IOWR(FM_IOC_MAGIC, 35, struct rds_raw_data) - -#define FM_IOCTL_SCAN_GETRSSI _IOWR(FM_IOC_MAGIC, 36, struct fm_rssi_req) -#define FM_IOCTL_SETMONOSTERO _IOWR(FM_IOC_MAGIC, 37, int32_t) -#define FM_IOCTL_RDS_BC_RST _IOWR(FM_IOC_MAGIC, 38, int32_t) -#define FM_IOCTL_CQI_GET _IOWR(FM_IOC_MAGIC, 39, struct fm_cqi_req) -#define FM_IOCTL_GET_HW_INFO _IOWR(FM_IOC_MAGIC, 40, struct fm_hw_info) -#define FM_IOCTL_GET_I2S_INFO _IOWR(FM_IOC_MAGIC, 41, fm_i2s_info_t) -#define FM_IOCTL_IS_DESE_CHAN _IOWR(FM_IOC_MAGIC, 42, int32_t) -#define FM_IOCTL_TOP_RDWR _IOWR(FM_IOC_MAGIC, 43, struct fm_top_rw_parm) -#define FM_IOCTL_HOST_RDWR _IOWR(FM_IOC_MAGIC, 44, struct fm_host_rw_parm) - -#define FM_IOCTL_PRE_SEARCH _IOWR(FM_IOC_MAGIC, 45,int32_t) -#define FM_IOCTL_RESTORE_SEARCH _IOWR(FM_IOC_MAGIC, 46,int32_t) - -#define FM_IOCTL_SET_SEARCH_THRESHOLD _IOWR(FM_IOC_MAGIC, 47, fm_search_threshold_t) - -#define FM_IOCTL_GET_AUDIO_INFO _IOWR(FM_IOC_MAGIC, 48, fm_audio_info_t) -#define FM_IOCTL_FM_SET_STATUS _IOWR(FM_IOC_MAGIC, 49, fm_status_t) -#define FM_IOCTL_FM_GET_STATUS _IOWR(FM_IOC_MAGIC, 50, fm_status_t) - -#define FM_IOCTL_SCAN_NEW _IOWR(FM_IOC_MAGIC, 60, struct fm_scan_t) -#define FM_IOCTL_SEEK_NEW _IOWR(FM_IOC_MAGIC, 61, struct fm_seek_t) -#define FM_IOCTL_TUNE_NEW _IOWR(FM_IOC_MAGIC, 62, struct fm_tune_t) - -#define FM_IOCTL_SOFT_MUTE_TUNE _IOWR(FM_IOC_MAGIC, 63, struct fm_softmute_tune_t)/*for soft mute tune*/ -#define FM_IOCTL_DESENSE_CHECK _IOWR(FM_IOC_MAGIC, 64, fm_desense_check_t) - -//IOCTL for EM -#define FM_IOCTL_FULL_CQI_LOG _IOWR(FM_IOC_MAGIC, 70, fm_full_cqi_log_t ) - -#define FM_IOCTL_DUMP_REG _IO(FM_IOC_MAGIC, 0xFF) - -// ********** ***********FM IOCTL define end ******************************* - - -enum group_idx { - mono=0, - stereo, - RSSI_threshold, - HCC_Enable, - PAMD_threshold, - Softmute_Enable, - De_emphasis, - HL_Side, - Demod_BW, - Dynamic_Limiter, - Softmute_Rate, - AFC_Enable, - Softmute_Level, - Analog_Volume, - GROUP_TOTAL_NUMS -}; - -enum item_idx { - Sblend_OFF=0, - Sblend_ON, - ITEM_TOTAL_NUMS -}; - -struct fm_ctl_parm { - uint8_t err; - uint8_t addr; - uint16_t val; - uint16_t rw_flag;//0:write, 1:read -}; - -struct fm_em_parm { - uint16_t group_idx; - uint16_t item_idx; - uint32_t item_value; -}; -#endif // __FM_H__ diff --git a/MediaTek/fmradiolibs/fmnative/fmr/fmr.h b/MediaTek/fmradiolibs/fmnative/fmr/fmr.h deleted file mode 100644 index fa28060..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/fmr.h +++ /dev/null @@ -1,341 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#ifndef __FMR_H__ -#define __FMR_H__ - -#include <jni.h> -#include <utils/Log.h> -#include <stdio.h> -#include <stdlib.h> -#include <sys/ioctl.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> -#include <termios.h> -#include <pthread.h> -#include <linux/serial.h> -#include "fm.h" -#include <signal.h> -#include <errno.h> -#include <dlfcn.h> -#include "../custom/fmlib_cust.h" - -#define FM_LIB_USE_XLOG - -#ifdef FM_LIB_USE_XLOG -#include <cutils/xlog.h> -#undef LOGV -#define LOGV(...) XLOGV(__VA_ARGS__) -#undef LOGD -#define LOGD(...) XLOGD(__VA_ARGS__) -#undef LOGI -#define LOGI(...) XLOGI(__VA_ARGS__) -#undef LOGW -#define LOGW(...) XLOGW(__VA_ARGS__) -#undef LOGE -#define LOGE(...) XLOGE(__VA_ARGS__) -#endif - -#define CUST_LIB_NAME "libfmcust.so" -#define AR1000_LIB_NAME "libfmar1000.so" -#define MT6616_LIB_NAME "libfmmt6616.so" -#define MT6620_LIB_NAME "libfmmt6620.so" -#define MT6626_LIB_NAME "libfmmt6626.so" -#define MT6628_LIB_NAME "libfmmt6628.so" -#define MT6627_LIB_NAME "libfmmt6627.so" -#define MT6580_LIB_NAME "libfmmt6580.so" -#define MT6630_LIB_NAME "libfmmt6630.so" -#define MT519X_LIB_NAME "libfmmt519x.so" -#define FM_DEV_NAME "/dev/fm" - -#define FM_RDS_PS_LEN 8 - -struct fm_cbk_tbl { - //Basic functions. - int (*open_dev)(const char *pname, int *fd); - int (*close_dev)(int fd); - int (*pwr_up)(int fd, int band, int freq); - int (*pwr_down)(int fd, int type); - int (*seek)(int fd, int *freq, int band, int dir, int lev); - int (*scan)(int fd, uint16_t *tbl, int *num, int band, int sort); - int (*scan_new)(int fd, void **ppdst, int upper, int lower, int space, void *para); - int (*seek_new)(int fd, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para); - int (*tune_new)(int fd, int freq, int upper, int lower, int space, void *para); - int (*fastget_rssi)(int fd, struct fm_rssi_req *rssi_req); - int (*get_cqi)(int fd, int num, char *buf, int buf_len); - int (*stop_scan)(int fd); - int (*tune)(int fd, int freq, int band); - int (*set_mute)(int fd, int mute); - int (*is_fm_pwrup)(int fd, int *pwrup); - int (*fm_set_status)(int fd, int which, bool stat); - int (*fm_get_status)(int fd, int which, bool *stat); - int (*is_rdsrx_support)(int fd, int *supt); - int (*is_rdstx_support)(int fd, int *supt); - int (*turn_on_off_rds)(int fd, int onoff); - int (*get_chip_id)(int fd, int *chipid); - //FOR RDS RX. - int (*read_rds_data)(int fd, RDSData_Struct *rds, uint16_t *rds_status); - int (*get_pi)(int fd, RDSData_Struct *rds, uint16_t *pi); - int (*get_ps)(int fd, RDSData_Struct *rds, uint8_t **ps, int *ps_len); - int (*get_pty)(int fd, RDSData_Struct *rds, uint8_t *pty); - int (*get_rssi)(int fd, int *rssi); - int (*get_rt)(int fd, RDSData_Struct *rds, uint8_t **rt, int *rt_len); - int (*active_af)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *ret_freq); - int (*active_ta)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq); - int (*deactive_ta)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq); - //FOR RDS TX. - int (*is_tx_support)(int fd, int *supt); - int (*tx_pwrup)(int fd, int band, int freq); - int (*tx_tune)(int fd, int band, int freq); - int (*tx_scan)(int fd, int band, int start_freq, int dir, int *num, uint16_t *tbl); - int (*rdstx_onoff)(int fd, int onoff); - int (*rdstx)(int fd, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt); - // For FM new feature - //FM over BT - int (*fm_over_bt)(int fd, int onoff); - //FM long/short antenna switch - int (*ana_switch)(int fd, int antenna); - //For FM RX EM mode - int (*get_badratio)(int fd, int *badratio); - int (*get_stereomono)(int fd, int *stemono); - int (*set_stereomono)(int fd, int stemono); - int (*get_caparray)(int fd, int *caparray); - int (*get_hw_info)(int fd, struct fm_hw_info *info); - int (*is_dese_chan)(int fd, int freq); - int (*soft_mute_tune)(int fd,fm_softmute_tune_t * para); - int (*desense_check)(int fd,int freq,int rssi); - int (*set_search_threshold)(int fd, int th_idx,int th_val); - int (*full_cqi_logger)(int fd,fm_full_cqi_log_t *log_parm); - /*New search*/ - int (*pre_search)(int fd); - int (*restore_search)(int fd); -}; - -typedef int (*CUST_func_type)(struct CUST_cfg_ds *); -typedef void (*init_func_type)(struct fm_cbk_tbl *); - -struct fmr_ds { - int fd; - int err; - uint16_t cur_freq; - uint16_t backup_freq; - void *priv; - void *custom_handler; - struct CUST_cfg_ds cfg_data; - struct fm_cbk_tbl tbl; - CUST_func_type get_cfg; - void* init_handler; - init_func_type init_func; - RDSData_Struct rds; - struct fm_hw_info hw_info; - fm_bool scan_stop; -}; -/*#define fmr_fd (FMR_data.fd) -#define fmr_err (FMR_data.err) -#define fmr_chip (FMR_data.cfg_data.chip) -#define fmr_low_band (FMR_data.cfg_data.low_band) -#define fmr_high_band (FMR_data.cfg_data.high_band) -#define fmr_seek_space (FMR_data.cfg_data.seek_space) -#define fmr_max_scan_num (FMR_data.cfg_data.max_scan_num) -#define fmr_cbk_tbl (FMR_data.tbl) -#define fmr_cust_hdler (FMR_data.custom_handler) -#define fmr_get_cfg (FMR_data.get_cfg) - -extern struct fmr_ds FMR_data;*/ - -enum fmr_err_em { - ERR_SUCCESS = 1000, // kernel error begin at here - ERR_INVALID_BUF, - ERR_INVALID_PARA, - ERR_STP, - ERR_GET_MUTEX, - ERR_FW_NORES, - ERR_RDS_CRC, - ERR_INVALID_FD, // native error begin at here - ERR_UNSUPPORT_CHIP, - ERR_LD_LIB, - ERR_FIND_CUST_FNUC, - ERR_UNINIT, - ERR_NO_MORE_IDX, - ERR_RDS_NO_DATA, - ERR_UNSUPT_SHORTANA, - ERR_MAX -}; - -enum fmr_rds_onoff -{ - FMR_RDS_ON, - FMR_RDS_OFF, - FMR_MAX -}; - -typedef enum -{ - FM_LONG_ANA = 0, - FM_SHORT_ANA -}fm_antenna_type; - - -#define CQI_CH_NUM_MAX 255 -#define CQI_CH_NUM_MIN 0 - - -/****************** Function declaration ******************/ -//fmr_err.cpp -char *FMR_strerr(); -void FMR_seterr(int err); - -//fmr_core.cpp -int FMR_init(void); -int FMR_get_cfgs(int idx); -int FMR_open_dev(int idx); -int FMR_close_dev(int idx); -int FMR_pwr_up(int idx, int freq); -int FMR_pwr_down(int idx, int type); -int FMR_seek(int idx, int start_freq, int dir, int *ret_freq); -int FMR_scan(int idx, uint16_t *tbl, int *num); -int FMR_scan_new(int idx, uint16_t *scan_tbl, int *max_cnt, int upper, int lower, int space, void *para); -int FMR_seek_new(int idx, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para); -int FMR_tune_new(int idx, int freq, int upper, int lower, int space, void *para); -int FMR_stop_scan(int idx); -int FMR_tune(int idx, int freq); -int FMR_set_mute(int idx, int mute); -int FMR_is_fm_pwrup(int idx, int *pwrup); -int FM_set_status(int idx, int which, bool stat); -int FM_get_status(int idx, int which, bool *stat); -int FMR_is_rdsrx_support(int idx, int *supt); -int FMR_turn_on_off_rds(int idx, int onoff); -int FMR_get_chip_id(int idx, int *chipid); -int FMR_read_rds_data(int idx, uint16_t *rds_status); -int FMR_get_pi(int idx, uint16_t *pi); -int FMR_get_ps(int idx, uint8_t **ps, int *ps_len); -int FMR_get_pty(int idx, uint8_t *pty); -int FMR_get_rssi(int idx, int *rssi); -int FMR_get_rt(int idx, uint8_t **rt, int *rt_len); -int FMR_active_af(int idx, uint16_t *ret_freq); -int FMR_active_ta(int idx, uint16_t *ret_freq); -int FMR_deactive_ta(int idx, uint16_t *ret_freq); - -int FMR_is_tx_support(int idx, int *supt); -int FMR_is_rdstx_support(int idx, int *supt); -int FMR_tx_pwrup(int idx, int freq); -int FMR_tx_tune(int idx, int freq); -int FMR_tx_scan(int idx, int start_freq, int dir, int *num, uint16_t *tbl); -int FMR_rdstx_onoff(int idx, int onoff); -int FMR_rdstx(int idx, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt); - -int FMR_fm_over_bt(int idx, int onoff); -int FMR_ana_switch(int idx, int antenna); -int FMR_get_badratio(int idx, int *badratio); -int FMR_get_stereomono(int idx, int *stemono); -int FMR_set_stereomono(int idx, int stemono); -int FMR_get_caparray(int idx, int *caparray); -int FMR_get_hw_info(int idx, int **info, int *info_len); -int FMR_Pre_Search(int idx); -int FMR_Restore_Search(int idx); -int FMR_EMSetTH(int idx, int th_idx, int th_val); -int FMR_EM_CQI_logger(int idx,uint16_t cycle); - - -//common part -int COM_open_dev(const char *pname, int *fd); -int COM_close_dev(int fd); -int COM_pwr_up(int fd, int band, int freq); -int COM_pwr_down(int fd, int type); -int COM_seek(int fd, int *freq, int band, int dir, int lev); -int COM_Soft_Mute_Tune(int fd,fm_softmute_tune_t * para); -//int COM_dese_chan_check(int fd, int freq); -int COM_hw_scan(int fd, uint16_t *tbl, int *num, int band, int sort); -int COM_hw_scan_new(int fd, void **ppdst, int upper, int lower, int space, void *para); -int COM_seek_new(int fd, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para); -int COM_tune_new(int fd, int freq, int upper, int lower, int space, void *para); -int COM_fastget_rssi(int fd, struct fm_rssi_req *rssi_req); -int COM_get_cqi(int fd, int num, char *buf, int buf_len); -int COM_sw_scan(int fd, uint16_t *tbl, int *num, int band, int sort); -int COM_stop_scan(int fd); -int COM_tune(int fd, int freq, int band); -int COM_set_mute(int fd, int mute); -int COM_is_fm_pwrup(int fd, int *pwrup); -int COM_fm_set_status(int fd, int which, bool stat); -int COM_fm_get_status(int fd, int which, bool *stat); -int COM_is_rdsrx_support(int fd, int *supt); -int COM_is_rdstx_support(int fd, int *supt); -int COM_turn_on_off_rds(int fd, int onoff); -int COM_get_chip_id(int fd, int *chipid); -int COM_read_rds_data(int fd, RDSData_Struct *rds, uint16_t *rds_status); -int COM_get_pi(int fd, RDSData_Struct *rds, uint16_t *pi); -int COM_get_ps(int fd, RDSData_Struct *rds, uint8_t **ps, int *ps_len); -int COM_get_pty(int fd, RDSData_Struct *rds, uint8_t *pty); -int COM_get_rssi(int fd, int *rssi); -int COM_get_rt(int fd, RDSData_Struct *rds, uint8_t **rt, int *rt_len); -int COM_active_af(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *ret_freq); -int COM_active_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq); -int COM_deactive_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq); - -int COM_is_tx_support(int fd, int *supt); -int COM_tx_support(int fd, int *supt); -int COM_tx_pwrup(int fd, int band, int freq); -int COM_tx_tune(int fd, int band, int freq); -int COM_tx_scan(int fd, int band, int start_freq, int dir, int *num, uint16_t *tbl); -int COM_rdstx_onoff(int fd, int onoff); -int COM_rdstx(int fd, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt); - -int COM_fm_over_bt(int fd, int onoff); -int COM_ana_switch(int fd, int antenna); -int COM_get_badratio(int fd, int *badratio); -int COM_get_stereomono(int fd, int *stemono); -int COM_set_stereomono(int fd, int stemono); -int COM_get_caparray(int fd, int *caparray); -int COM_get_hw_info(int fd, struct fm_hw_info *info); -int COM_is_dese_chan(int fd, int freq); -int COM_desense_check(int fd, int freq, int rssi); -int COM_pre_search(int fd); -int COM_restore_search(int fd); -int COM_set_search_threshold(int fd, int th_idx,int th_val); -int COM_full_cqi_logger(int fd, fm_full_cqi_log_t *log_parm); - -int bt_set_controller_force_sleep(int chip); - -#define FMR_ASSERT(a) { \ - if ((a) == NULL) { \ - LOGE("%s,invalid buf\n", __func__);\ - return -ERR_INVALID_BUF; \ - } \ - } -#endif diff --git a/MediaTek/fmradiolibs/fmnative/fmr/fmr.h~ b/MediaTek/fmradiolibs/fmnative/fmr/fmr.h~ deleted file mode 100644 index 669c346..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/fmr.h~ +++ /dev/null @@ -1,341 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#ifndef __FMR_H__ -#define __FMR_H__ - -#include <jni.h> -#include <utils/Log.h> -#include <stdio.h> -#include <stdlib.h> -#include <sys/ioctl.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> -#include <termios.h> -#include <pthread.h> -#include <linux/serial.h> -#include <linux/fm.h> -#include <signal.h> -#include <errno.h> -#include <dlfcn.h> -#include "../custom/fmlib_cust.h" - -#define FM_LIB_USE_XLOG - -#ifdef FM_LIB_USE_XLOG -#include <cutils/xlog.h> -#undef LOGV -#define LOGV(...) XLOGV(__VA_ARGS__) -#undef LOGD -#define LOGD(...) XLOGD(__VA_ARGS__) -#undef LOGI -#define LOGI(...) XLOGI(__VA_ARGS__) -#undef LOGW -#define LOGW(...) XLOGW(__VA_ARGS__) -#undef LOGE -#define LOGE(...) XLOGE(__VA_ARGS__) -#endif - -#define CUST_LIB_NAME "libfmcust.so" -#define AR1000_LIB_NAME "libfmar1000.so" -#define MT6616_LIB_NAME "libfmmt6616.so" -#define MT6620_LIB_NAME "libfmmt6620.so" -#define MT6626_LIB_NAME "libfmmt6626.so" -#define MT6628_LIB_NAME "libfmmt6628.so" -#define MT6627_LIB_NAME "libfmmt6627.so" -#define MT6580_LIB_NAME "libfmmt6580.so" -#define MT6630_LIB_NAME "libfmmt6630.so" -#define MT519X_LIB_NAME "libfmmt519x.so" -#define FM_DEV_NAME "/dev/fm" - -#define FM_RDS_PS_LEN 8 - -struct fm_cbk_tbl { - //Basic functions. - int (*open_dev)(const char *pname, int *fd); - int (*close_dev)(int fd); - int (*pwr_up)(int fd, int band, int freq); - int (*pwr_down)(int fd, int type); - int (*seek)(int fd, int *freq, int band, int dir, int lev); - int (*scan)(int fd, uint16_t *tbl, int *num, int band, int sort); - int (*scan_new)(int fd, void **ppdst, int upper, int lower, int space, void *para); - int (*seek_new)(int fd, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para); - int (*tune_new)(int fd, int freq, int upper, int lower, int space, void *para); - int (*fastget_rssi)(int fd, struct fm_rssi_req *rssi_req); - int (*get_cqi)(int fd, int num, char *buf, int buf_len); - int (*stop_scan)(int fd); - int (*tune)(int fd, int freq, int band); - int (*set_mute)(int fd, int mute); - int (*is_fm_pwrup)(int fd, int *pwrup); - int (*fm_set_status)(int fd, int which, bool stat); - int (*fm_get_status)(int fd, int which, bool *stat); - int (*is_rdsrx_support)(int fd, int *supt); - int (*is_rdstx_support)(int fd, int *supt); - int (*turn_on_off_rds)(int fd, int onoff); - int (*get_chip_id)(int fd, int *chipid); - //FOR RDS RX. - int (*read_rds_data)(int fd, RDSData_Struct *rds, uint16_t *rds_status); - int (*get_pi)(int fd, RDSData_Struct *rds, uint16_t *pi); - int (*get_ps)(int fd, RDSData_Struct *rds, uint8_t **ps, int *ps_len); - int (*get_pty)(int fd, RDSData_Struct *rds, uint8_t *pty); - int (*get_rssi)(int fd, int *rssi); - int (*get_rt)(int fd, RDSData_Struct *rds, uint8_t **rt, int *rt_len); - int (*active_af)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *ret_freq); - int (*active_ta)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq); - int (*deactive_ta)(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq); - //FOR RDS TX. - int (*is_tx_support)(int fd, int *supt); - int (*tx_pwrup)(int fd, int band, int freq); - int (*tx_tune)(int fd, int band, int freq); - int (*tx_scan)(int fd, int band, int start_freq, int dir, int *num, uint16_t *tbl); - int (*rdstx_onoff)(int fd, int onoff); - int (*rdstx)(int fd, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt); - // For FM new feature - //FM over BT - int (*fm_over_bt)(int fd, int onoff); - //FM long/short antenna switch - int (*ana_switch)(int fd, int antenna); - //For FM RX EM mode - int (*get_badratio)(int fd, int *badratio); - int (*get_stereomono)(int fd, int *stemono); - int (*set_stereomono)(int fd, int stemono); - int (*get_caparray)(int fd, int *caparray); - int (*get_hw_info)(int fd, struct fm_hw_info *info); - int (*is_dese_chan)(int fd, int freq); - int (*soft_mute_tune)(int fd,fm_softmute_tune_t * para); - int (*desense_check)(int fd,int freq,int rssi); - int (*set_search_threshold)(int fd, int th_idx,int th_val); - int (*full_cqi_logger)(int fd,fm_full_cqi_log_t *log_parm); - /*New search*/ - int (*pre_search)(int fd); - int (*restore_search)(int fd); -}; - -typedef int (*CUST_func_type)(struct CUST_cfg_ds *); -typedef void (*init_func_type)(struct fm_cbk_tbl *); - -struct fmr_ds { - int fd; - int err; - uint16_t cur_freq; - uint16_t backup_freq; - void *priv; - void *custom_handler; - struct CUST_cfg_ds cfg_data; - struct fm_cbk_tbl tbl; - CUST_func_type get_cfg; - void* init_handler; - init_func_type init_func; - RDSData_Struct rds; - struct fm_hw_info hw_info; - fm_bool scan_stop; -}; -/*#define fmr_fd (FMR_data.fd) -#define fmr_err (FMR_data.err) -#define fmr_chip (FMR_data.cfg_data.chip) -#define fmr_low_band (FMR_data.cfg_data.low_band) -#define fmr_high_band (FMR_data.cfg_data.high_band) -#define fmr_seek_space (FMR_data.cfg_data.seek_space) -#define fmr_max_scan_num (FMR_data.cfg_data.max_scan_num) -#define fmr_cbk_tbl (FMR_data.tbl) -#define fmr_cust_hdler (FMR_data.custom_handler) -#define fmr_get_cfg (FMR_data.get_cfg) - -extern struct fmr_ds FMR_data;*/ - -enum fmr_err_em { - ERR_SUCCESS = 1000, // kernel error begin at here - ERR_INVALID_BUF, - ERR_INVALID_PARA, - ERR_STP, - ERR_GET_MUTEX, - ERR_FW_NORES, - ERR_RDS_CRC, - ERR_INVALID_FD, // native error begin at here - ERR_UNSUPPORT_CHIP, - ERR_LD_LIB, - ERR_FIND_CUST_FNUC, - ERR_UNINIT, - ERR_NO_MORE_IDX, - ERR_RDS_NO_DATA, - ERR_UNSUPT_SHORTANA, - ERR_MAX -}; - -enum fmr_rds_onoff -{ - FMR_RDS_ON, - FMR_RDS_OFF, - FMR_MAX -}; - -typedef enum -{ - FM_LONG_ANA = 0, - FM_SHORT_ANA -}fm_antenna_type; - - -#define CQI_CH_NUM_MAX 255 -#define CQI_CH_NUM_MIN 0 - - -/****************** Function declaration ******************/ -//fmr_err.cpp -char *FMR_strerr(); -void FMR_seterr(int err); - -//fmr_core.cpp -int FMR_init(void); -int FMR_get_cfgs(int idx); -int FMR_open_dev(int idx); -int FMR_close_dev(int idx); -int FMR_pwr_up(int idx, int freq); -int FMR_pwr_down(int idx, int type); -int FMR_seek(int idx, int start_freq, int dir, int *ret_freq); -int FMR_scan(int idx, uint16_t *tbl, int *num); -int FMR_scan_new(int idx, uint16_t *scan_tbl, int *max_cnt, int upper, int lower, int space, void *para); -int FMR_seek_new(int idx, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para); -int FMR_tune_new(int idx, int freq, int upper, int lower, int space, void *para); -int FMR_stop_scan(int idx); -int FMR_tune(int idx, int freq); -int FMR_set_mute(int idx, int mute); -int FMR_is_fm_pwrup(int idx, int *pwrup); -int FM_set_status(int idx, int which, bool stat); -int FM_get_status(int idx, int which, bool *stat); -int FMR_is_rdsrx_support(int idx, int *supt); -int FMR_turn_on_off_rds(int idx, int onoff); -int FMR_get_chip_id(int idx, int *chipid); -int FMR_read_rds_data(int idx, uint16_t *rds_status); -int FMR_get_pi(int idx, uint16_t *pi); -int FMR_get_ps(int idx, uint8_t **ps, int *ps_len); -int FMR_get_pty(int idx, uint8_t *pty); -int FMR_get_rssi(int idx, int *rssi); -int FMR_get_rt(int idx, uint8_t **rt, int *rt_len); -int FMR_active_af(int idx, uint16_t *ret_freq); -int FMR_active_ta(int idx, uint16_t *ret_freq); -int FMR_deactive_ta(int idx, uint16_t *ret_freq); - -int FMR_is_tx_support(int idx, int *supt); -int FMR_is_rdstx_support(int idx, int *supt); -int FMR_tx_pwrup(int idx, int freq); -int FMR_tx_tune(int idx, int freq); -int FMR_tx_scan(int idx, int start_freq, int dir, int *num, uint16_t *tbl); -int FMR_rdstx_onoff(int idx, int onoff); -int FMR_rdstx(int idx, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt); - -int FMR_fm_over_bt(int idx, int onoff); -int FMR_ana_switch(int idx, int antenna); -int FMR_get_badratio(int idx, int *badratio); -int FMR_get_stereomono(int idx, int *stemono); -int FMR_set_stereomono(int idx, int stemono); -int FMR_get_caparray(int idx, int *caparray); -int FMR_get_hw_info(int idx, int **info, int *info_len); -int FMR_Pre_Search(int idx); -int FMR_Restore_Search(int idx); -int FMR_EMSetTH(int idx, int th_idx, int th_val); -int FMR_EM_CQI_logger(int idx,uint16_t cycle); - - -//common part -int COM_open_dev(const char *pname, int *fd); -int COM_close_dev(int fd); -int COM_pwr_up(int fd, int band, int freq); -int COM_pwr_down(int fd, int type); -int COM_seek(int fd, int *freq, int band, int dir, int lev); -int COM_Soft_Mute_Tune(int fd,fm_softmute_tune_t * para); -//int COM_dese_chan_check(int fd, int freq); -int COM_hw_scan(int fd, uint16_t *tbl, int *num, int band, int sort); -int COM_hw_scan_new(int fd, void **ppdst, int upper, int lower, int space, void *para); -int COM_seek_new(int fd, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para); -int COM_tune_new(int fd, int freq, int upper, int lower, int space, void *para); -int COM_fastget_rssi(int fd, struct fm_rssi_req *rssi_req); -int COM_get_cqi(int fd, int num, char *buf, int buf_len); -int COM_sw_scan(int fd, uint16_t *tbl, int *num, int band, int sort); -int COM_stop_scan(int fd); -int COM_tune(int fd, int freq, int band); -int COM_set_mute(int fd, int mute); -int COM_is_fm_pwrup(int fd, int *pwrup); -int COM_fm_set_status(int fd, int which, bool stat); -int COM_fm_get_status(int fd, int which, bool *stat); -int COM_is_rdsrx_support(int fd, int *supt); -int COM_is_rdstx_support(int fd, int *supt); -int COM_turn_on_off_rds(int fd, int onoff); -int COM_get_chip_id(int fd, int *chipid); -int COM_read_rds_data(int fd, RDSData_Struct *rds, uint16_t *rds_status); -int COM_get_pi(int fd, RDSData_Struct *rds, uint16_t *pi); -int COM_get_ps(int fd, RDSData_Struct *rds, uint8_t **ps, int *ps_len); -int COM_get_pty(int fd, RDSData_Struct *rds, uint8_t *pty); -int COM_get_rssi(int fd, int *rssi); -int COM_get_rt(int fd, RDSData_Struct *rds, uint8_t **rt, int *rt_len); -int COM_active_af(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *ret_freq); -int COM_active_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq); -int COM_deactive_ta(int fd, RDSData_Struct *rds, int band, uint16_t cur_freq, uint16_t *backup_freq, uint16_t *ret_freq); - -int COM_is_tx_support(int fd, int *supt); -int COM_tx_support(int fd, int *supt); -int COM_tx_pwrup(int fd, int band, int freq); -int COM_tx_tune(int fd, int band, int freq); -int COM_tx_scan(int fd, int band, int start_freq, int dir, int *num, uint16_t *tbl); -int COM_rdstx_onoff(int fd, int onoff); -int COM_rdstx(int fd, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt); - -int COM_fm_over_bt(int fd, int onoff); -int COM_ana_switch(int fd, int antenna); -int COM_get_badratio(int fd, int *badratio); -int COM_get_stereomono(int fd, int *stemono); -int COM_set_stereomono(int fd, int stemono); -int COM_get_caparray(int fd, int *caparray); -int COM_get_hw_info(int fd, struct fm_hw_info *info); -int COM_is_dese_chan(int fd, int freq); -int COM_desense_check(int fd, int freq, int rssi); -int COM_pre_search(int fd); -int COM_restore_search(int fd); -int COM_set_search_threshold(int fd, int th_idx,int th_val); -int COM_full_cqi_logger(int fd, fm_full_cqi_log_t *log_parm); - -int bt_set_controller_force_sleep(int chip); - -#define FMR_ASSERT(a) { \ - if ((a) == NULL) { \ - LOGE("%s,invalid buf\n", __func__);\ - return -ERR_INVALID_BUF; \ - } \ - } -#endif diff --git a/MediaTek/fmradiolibs/fmnative/fmr/fmr_core.cpp b/MediaTek/fmradiolibs/fmnative/fmr/fmr_core.cpp deleted file mode 100644 index 53bf74f..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/fmr_core.cpp +++ /dev/null @@ -1,2176 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -/******************************************************************* - * FM JNI core - * return -1 if error occured. else return needed value. - * if return type is char *, return NULL if error occured. - * Do NOT return value access paramater. - * - * FM JNI core should be independent from lower layer, that means - * there should be no low layer dependent data struct in FM JNI core - * - * Naming rule: FMR_n(paramter Micro), FMR_v(functions), fmr_n(global param) - * pfmr_n(global paramter pointer) - * - *******************************************************************/ - -#include "fmr.h" - -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "FMLIB_CORE" - -#define FMR_MAX_IDX 1 - -struct fmr_ds fmr_data; -struct fmr_ds *pfmr_data[FMR_MAX_IDX] = {0}; -#define FMR_fd(idx) ((pfmr_data[idx])->fd) -#define FMR_err(idx) ((pfmr_data[idx])->err) -#define FMR_chip(idx) ((pfmr_data[idx])->cfg_data.chip) -#define FMR_low_band(idx) ((pfmr_data[idx])->cfg_data.low_band) -#define FMR_high_band(idx) ((pfmr_data[idx])->cfg_data.high_band) -#define FMR_seek_space(idx) ((pfmr_data[idx])->cfg_data.seek_space) -#define FMR_max_scan_num(idx) ((pfmr_data[idx])->cfg_data.max_scan_num) -#define FMR_cbk_tbl(idx) ((pfmr_data[idx])->tbl) -#define FMR_cust_hdler(idx) ((pfmr_data[idx])->custom_handler) -#define FMR_get_cfg(idx) ((pfmr_data[idx])->get_cfg) - -int FMR_get_cfgs(int idx) -{ - int ret = -1; - FMR_cust_hdler(idx) = NULL; - FMR_get_cfg(idx) = NULL; - - FMR_cust_hdler(idx) = dlopen(CUST_LIB_NAME, RTLD_NOW); - if (FMR_cust_hdler(idx) == NULL) { - LOGE("%s failed, %s\n", __FUNCTION__, dlerror()); - //FMR_seterr(ERR_LD_LIB); - } else { - *(void **) (&FMR_get_cfg(idx)) = dlsym(FMR_cust_hdler(idx), "CUST_get_cfg"); - if (FMR_get_cfg(idx) == NULL) { - LOGE("%s failed, %s\n", __FUNCTION__, dlerror()); - //FMR_seterr(ERR_FIND_CUST_FNUC); - } else { - LOGI("Go to run cust function\n"); - (*FMR_get_cfg(idx))(&(pfmr_data[idx]->cfg_data)); - LOGI("OK\n"); - ret = 0; - } - //dlclose(FMR_cust_hdler(idx)); - FMR_cust_hdler(idx) = NULL; - FMR_get_cfg(idx) = NULL; - } - LOGI("%s succefully. chip: 0x%x, lband: %d, hband: %d, seek_space: %d, max_scan_num: %d\n", __FUNCTION__, FMR_chip(idx), FMR_low_band(idx), FMR_high_band(idx), FMR_seek_space(idx), FMR_max_scan_num(idx)); - - return ret; -} - -int FMR_chk_cfg_data(int idx) -{ - //TODO Need check? how to check? - return 0; -} - -static void sig_alarm(int sig) -{ - LOGI("+++Receive sig %d\n", sig); - return; -} - -int FMR_init() -{ - int idx; - int ret = 0; - //signal(4, sig_alarm); - - for (idx=0;idx<FMR_MAX_IDX;idx++) { - if (pfmr_data[idx] == NULL) { - break; - } - } - LOGI("FMR idx = %d\n", idx); - if (idx == FMR_MAX_IDX) { - //FMR_seterr(ERR_NO_MORE_IDX); - return -1; - } - - /*The best way here is to call malloc to alloc mem for each idx,but - I do not know where to release it, so use static global param instead*/ - pfmr_data[idx] = &fmr_data; - memset(pfmr_data[idx], 0, sizeof(struct fmr_ds)); - - if (FMR_get_cfgs(idx) < 0) { - LOGI("FMR_get_cfgs failed\n"); - goto fail; - } - - if (FMR_chk_cfg_data(idx) < 0) { - LOGI("FMR_chk_cfg_data failed\n"); - goto fail; - } - - switch (FMR_chip(idx)) { - case FM_CHIP_AR1000: - pfmr_data[idx]->init_handler = dlopen(AR1000_LIB_NAME, RTLD_NOW); - if (pfmr_data[idx]->init_handler == NULL) { - LOGE("%s init_handler error, %s\n", __func__, dlerror()); - //FMR_seterr(ERR_LD_LIB); - } else{ - *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "AR1000_init"); - if (pfmr_data[idx]->init_func == NULL){ - LOGE("%s init_func error, %s\n", __func__, dlerror()); - //FMR_seterr(ERR_FIND_CUST_FNUC); - }else{ - LOGI("Go to run init function\n"); - (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl)); - LOGI("OK\n"); - ret = 0; - } - } - //AR1000_init(&FMR_cbk_tbl(idx)); - break; - case FM_CHIP_MT6616: - pfmr_data[idx]->init_handler = dlopen(MT6616_LIB_NAME, RTLD_NOW); - if (pfmr_data[idx]->init_handler == NULL) { - LOGE("%s init_handler error, %s\n", __func__, dlerror()); - //FMR_seterr(ERR_LD_LIB); - }else{ - *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6616_init"); - if (pfmr_data[idx]->init_func == NULL){ - LOGE("%s init_func error, %s\n", __func__, dlerror()); - //FMR_seterr(ERR_FIND_CUST_FNUC); - }else{ - LOGI("Go to run init function\n"); - (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl)); - LOGI("OK\n"); - ret = 0; - } - } - //MT6616_init(&FMR_cbk_tbl(idx)); - break; - case FM_CHIP_MT6620: - pfmr_data[idx]->init_handler = dlopen(MT6620_LIB_NAME, RTLD_NOW); - LOGI("mt6620[init_handler=%p]\n", pfmr_data[idx]->init_handler); - if (pfmr_data[idx]->init_handler == NULL){ - LOGE("%s init_handler error, %s\n", __func__, dlerror()); - //FMR_seterr(ERR_LD_LIB); - }else{ - *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6620_init"); - if (pfmr_data[idx]->init_func == NULL){ - LOGE("%s init_func error, %s\n", __func__, dlerror()); - //FMR_seterr(ERR_FIND_CUST_FNUC); - }else{ - LOGI("Go to run 6620 init\n"); - (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl)); - LOGI("OK\n"); - ret = 0; - } - } - //MT6620_init(&FMR_cbk_tbl(idx)); - break; - case FM_CHIP_MT6626: - pfmr_data[idx]->init_handler = dlopen(MT6626_LIB_NAME, RTLD_NOW); - if (pfmr_data[idx]->init_handler == NULL) { - LOGE("%s init_handler error, %s\n", __func__, dlerror()); - }else{ - *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6626_init"); - if (pfmr_data[idx]->init_func == NULL){ - LOGE("%s init_func error, %s\n", __func__, dlerror()); - }else{ - LOGI("Go to run init function\n"); - (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl)); - LOGI("OK\n"); - ret = 0; - } - } - break; - case FM_CHIP_MT6628: - pfmr_data[idx]->init_handler = dlopen(MT6628_LIB_NAME, RTLD_NOW); - if (pfmr_data[idx]->init_handler == NULL){ - LOGE("%s init_handler error, %s\n", __func__, dlerror()); - }else{ - *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6628_init"); - if (pfmr_data[idx]->init_func == NULL){ - LOGE("%s init_func error, %s\n", __func__, dlerror()); - }else{ - LOGI("Go to run init function\n"); - (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl)); - LOGI("OK\n"); - ret = 0; - } - } - break; - case FM_CHIP_MT6627: - { - pfmr_data[idx]->init_handler = dlopen(MT6627_LIB_NAME, RTLD_NOW); - if (pfmr_data[idx]->init_handler == NULL){ - LOGE("%s init_handler error, %s\n", __func__, dlerror()); - }else{ - *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6627_init"); - if (pfmr_data[idx]->init_func == NULL){ - LOGE("%s init_func error, %s\n", __func__, dlerror()); - }else{ - LOGI("Go to run init function\n"); - (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl)); - LOGI("OK\n"); - ret = 0; - } - } - break; - } - case FM_CHIP_MT6580: - { - pfmr_data[idx]->init_handler = dlopen(MT6580_LIB_NAME, RTLD_NOW); - if (pfmr_data[idx]->init_handler == NULL){ - LOGE("%s init_handler error, %s\n", __func__, dlerror()); - }else{ - *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6580_init"); - if (pfmr_data[idx]->init_func == NULL){ - LOGE("%s init_func error, %s\n", __func__, dlerror()); - }else{ - LOGI("Go to run init function\n"); - (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl)); - LOGI("OK\n"); - ret = 0; - } - } - break; - } - case FM_CHIP_MT6630: - { - pfmr_data[idx]->init_handler = dlopen(MT6630_LIB_NAME, RTLD_NOW); - if (pfmr_data[idx]->init_handler == NULL){ - LOGE("%s init_handler error, %s\n", __func__, dlerror()); - }else{ - *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT6630_init"); - if (pfmr_data[idx]->init_func == NULL){ - LOGE("%s init_func error, %s\n", __func__, dlerror()); - }else{ - LOGI("Go to run init function\n"); - (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl)); - LOGI("OK\n"); - ret = 0; - } - } - break; - } - case FM_CHIP_MT5192: - case FM_CHIP_MT5193: - pfmr_data[idx]->init_handler = dlopen(MT519X_LIB_NAME, RTLD_NOW); - if (pfmr_data[idx]->init_handler == NULL){ - LOGE("%s init_handler error, %s\n", __func__, dlerror()); - //FMR_seterr(ERR_LD_LIB); - }else{ - *(void **) (&pfmr_data[idx]->init_func) = dlsym(pfmr_data[idx]->init_handler, "MT519X_init"); - if (pfmr_data[idx]->init_func == NULL){ - LOGE("%s init_func error, %s\n", __func__, dlerror()); - //FMR_seterr(ERR_FIND_CUST_FNUC); - }else{ - LOGI("Go to run init function\n"); - (*pfmr_data[idx]->init_func)(&(pfmr_data[idx]->tbl)); - LOGI("OK\n"); - ret = 0; - } - } - //MT5192_init(&FMR_cbk_tbl(idx)); - break; - default: - //FMR_seterr(ERR_UNSUPPORT_CHIP); - LOGI("Unsupported Chip: 0x%x", FMR_chip(idx)); - goto fail; - } - return idx; - -fail: - pfmr_data[idx] = NULL; - - return -1; -} - -int FMR_open_dev(int idx) -{ - int ret = 0; - int real_chip; - - FMR_ASSERT(FMR_cbk_tbl(idx).open_dev); - - ret = FMR_cbk_tbl(idx).open_dev(FM_DEV_NAME, &FMR_fd(idx)); - if (ret || FMR_fd(idx) < 0) { - LOGE("%s failed, [fd=%d]\n", __func__, FMR_fd(idx)); - return ret; - } - - //Check if customer's cfg matchs driver. - ret = FMR_get_chip_id(idx, &real_chip); - if (FMR_chip(idx) != real_chip) { - LOGE("%s, Chip config error. 0x%x\n", __func__, real_chip); - ret = FMR_cbk_tbl(idx).close_dev(FMR_fd(idx)); - return ret; - } - - LOGD("%s, [fd=%d] [chipid=0x%x] [ret=%d]\n", __func__, FMR_fd(idx), real_chip, ret); - return ret; -} - -int FMR_close_dev(int idx) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).close_dev); - ret = FMR_cbk_tbl(idx).close_dev(FMR_fd(idx)); - LOGD("%s, [fd=%d] [ret=%d]\n", __func__, FMR_fd(idx), ret); - return ret; -} - -int FMR_pwr_up(int idx, int freq) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).pwr_up); - - LOGI("%s,[freq=%d]\n", __func__, freq); - if (freq < fmr_data.cfg_data.low_band || freq > fmr_data.cfg_data.high_band) { - LOGE("%s error freq: %d\n", __func__, freq); - ret = -ERR_INVALID_PARA; - return ret; - } - ret = FMR_cbk_tbl(idx).pwr_up(FMR_fd(idx), fmr_data.cfg_data.band, freq); - if (ret) { - LOGE("%s failed, [ret=%d]\n", __func__, ret); - } - fmr_data.cur_freq = freq; - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_pwr_down(int idx, int type) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).pwr_down); - ret = FMR_cbk_tbl(idx).pwr_down(FMR_fd(idx), type); - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_get_chip_id(int idx, int *chipid) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).get_chip_id); - FMR_ASSERT(chipid); - - ret = FMR_cbk_tbl(idx).get_chip_id(FMR_fd(idx), chipid); - if (ret){ - LOGE("%s failed, %s\n", __func__, FMR_strerr()); - *chipid = -1; - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_get_rssi(int idx, int *rssi) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).get_rssi); - FMR_ASSERT(rssi); - - ret = FMR_cbk_tbl(idx).get_rssi(FMR_fd(idx), rssi); - if (ret){ - LOGE("%s failed, [ret=%d]\n", __func__, ret); - *rssi = -1; - } - LOGD("%s, [rssi=%d] [ret=%d]\n", __func__, *rssi, ret); - return ret; -} - -int FMR_get_ps(int idx, uint8_t **ps, int *ps_len) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).get_ps); - FMR_ASSERT(ps); - FMR_ASSERT(ps_len); - ret = FMR_cbk_tbl(idx).get_ps(FMR_fd(idx), &fmr_data.rds, ps, ps_len); - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_get_rt(int idx, uint8_t **rt, int *rt_len) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).get_rt); - FMR_ASSERT(rt); - FMR_ASSERT(rt_len); - - ret = FMR_cbk_tbl(idx).get_rt(FMR_fd(idx), &fmr_data.rds, rt, rt_len); - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_get_pi(int idx, uint16_t *pi) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).get_pi); - - ret = FMR_cbk_tbl(idx).get_pi(FMR_fd(idx), &fmr_data.rds, pi); - if (ret){ - LOGE("%s failed, %s\n", __func__, FMR_strerr()); - *pi = -1; - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_get_pty(int idx, uint8_t *pty) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).get_pty); - - ret = FMR_cbk_tbl(idx).get_pty(FMR_fd(idx), &fmr_data.rds, pty); - if (ret){ - *pty = -1; - LOGI("%s failed, %s\n", __func__, FMR_strerr()); - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_tune(int idx, int freq) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).tune); - - ret = FMR_cbk_tbl(idx).tune(FMR_fd(idx), freq, fmr_data.cfg_data.band); - if (ret){ - LOGE("%s failed, [ret=%d]\n", __func__, ret); - } - fmr_data.cur_freq = freq; - LOGD("%s, [freq=%d] [ret=%d]\n", __func__, freq, ret); - return ret; -} - -#if FMR_SOFT_MUTE_TUEN_SCAN -/*return: fm_true: desense, fm_false: not desene channel*/ -fm_bool FMR_DensenseDetect(fm_s32 idx,fm_u16 ChannelNo,fm_s32 RSSI) -{ - fm_u8 bDesenseCh = 0; - - bDesenseCh = FMR_cbk_tbl(idx).desense_check(FMR_fd(idx),ChannelNo,RSSI); - if(bDesenseCh == 1) - { - return fm_true; - } - return fm_false; -} -fm_bool FMR_SevereDensense(fm_u16 ChannelNo,fm_s32 RSSI) -{ - fm_s32 i=0,j=0; - struct fm_fake_channel_t *chan_info = fmr_data.cfg_data.fake_chan; - -#ifndef MTK_FM_50KHZ_SUPPORT - ChannelNo /= 10; -#endif - for(i=0; i<chan_info->size; i++) - { - if(ChannelNo == chan_info->chan[i].freq) - { - //if(RSSI < FM_SEVERE_RSSI_TH) - if(RSSI < chan_info->chan[i].rssi_th) - { - LOGI(" SevereDensense[%d] RSSI[%d]\n", ChannelNo,RSSI); - return fm_true; - } - else - { - break; - } - } - } - return fm_false; -} -#if (FMR_NOISE_FLOORT_DETECT==1) -/*return TRUE:get noise floor freq*/ -fm_bool FMR_NoiseFloorDetect(fm_bool *rF,fm_s32 rssi,fm_s32 *F_rssi) -{ - if(rF[0]==fm_true) - { - if(rF[1]==fm_true) - { - F_rssi[2]=rssi; - rF[2]=fm_true; - return fm_true; - } - else - { - F_rssi[1]=rssi; - rF[1]=fm_true; - } - } - else - { - F_rssi[0]=rssi; - rF[0]=fm_true; - } - return fm_false; -} -#endif - -/*check the cur_freq->freq is valid or not -return fm_true : need check cur_freq->valid - fm_false: check faild, should stop seek -*/ -static fm_bool FMR_Seek_TuneCheck(int idx,fm_softmute_tune_t *cur_freq) -{ - int ret=0; - if(fmr_data.scan_stop == fm_true) - { - ret = FMR_tune(idx,fmr_data.cur_freq); - LOGI("seek stop!!! tune ret=%d",ret); - return fm_false; - } - ret = FMR_cbk_tbl(idx).soft_mute_tune(FMR_fd(idx),cur_freq); - if(ret) - { - LOGE("soft mute tune, failed:[%d]\n",ret); - cur_freq->valid = fm_false; - return fm_true; - } - if(cur_freq->valid == fm_true)/*get valid channel*/ - { - if(FMR_DensenseDetect(idx,cur_freq->freq,cur_freq->rssi)==fm_true) - { - LOGI("desense channel detected:[%d] \n", cur_freq->freq); - cur_freq->valid = fm_false; - return fm_true; - } - if(FMR_SevereDensense(cur_freq->freq,cur_freq->rssi)==fm_true) - { - LOGI("sever desense channel detected:[%d] \n", cur_freq->freq); - cur_freq->valid = fm_false; - return fm_true; - } - LOGI("seek result freq:[%d] \n", cur_freq->freq); - } - return fm_true; -} -/* -check more 2 freq, curfreq: current freq, seek_dir: 1,forward. 0,backword -*/ -static int FMR_Seek_More(int idx,fm_softmute_tune_t *validfreq,fm_u8 seek_dir,fm_u8 step,fm_u16 min_freq,fm_u16 max_freq) -{ - fm_s32 i; - fm_softmute_tune_t cur_freq; - cur_freq.freq = validfreq->freq; - - for(i=0; i<2; i++) - { - if(seek_dir)//forward - { - if(cur_freq.freq + step > max_freq) - { - return 0; - } - cur_freq.freq += step; - } - else//backward - { - if(cur_freq.freq - step < min_freq) - { - return 0; - } - cur_freq.freq -= step; - } - if(FMR_Seek_TuneCheck(idx,&cur_freq) == fm_true) - { - if(cur_freq.valid == fm_true) - { - if(cur_freq.rssi > validfreq->rssi) - { - validfreq->freq = cur_freq.freq; - validfreq->rssi = cur_freq.rssi; - LOGI("seek cover last by freq=%d",cur_freq.freq); - } - } - } - else - { - return -1; - } - } - return 0; -} - -/*check the a valid channel -return -1 : seek fail - 0: seek success -*/ -int FMR_seek_Channel(int idx, int start_freq, int min_freq, int max_freq, int band_channel_no, int seek_space, int dir, int *ret_freq, int *rssi_tmp) -{ - fm_s32 i, ret = 0; - fm_softmute_tune_t cur_freq; - - if(dir==1)/*forward*/ - { - for (i=((start_freq-min_freq)/seek_space+1); i<band_channel_no; i++) - { - cur_freq.freq = min_freq + seek_space*i; - LOGI("i=%d, freq=%d-----1",i,cur_freq.freq); - ret = FMR_Seek_TuneCheck(idx,&cur_freq); - if(ret == fm_false) - { - return -1; - } - else - { - if(cur_freq.valid == fm_false) - { - continue; - } - else - { - if(FMR_Seek_More(idx,&cur_freq,dir,seek_space,min_freq,max_freq) == 0) - { - *ret_freq = cur_freq.freq; - *rssi_tmp = cur_freq.rssi; - return 0; - } - else - { - return -1; - } - } - } - } - for (i=0; i<((start_freq-min_freq)/seek_space); i++) - { - cur_freq.freq = min_freq + seek_space*i; - LOGI("i=%d, freq=%d-----2",i,cur_freq.freq); - ret = FMR_Seek_TuneCheck(idx,&cur_freq); - if(ret == fm_false) - { - return -1; - } - else - { - if(cur_freq.valid == fm_false) - { - continue; - } - else - { - if(FMR_Seek_More(idx,&cur_freq,dir,seek_space,min_freq,max_freq) == 0) - { - *ret_freq = cur_freq.freq; - *rssi_tmp = cur_freq.rssi; - return 0; - } - else - { - return -1; - } - } - } - } - } - else/*backward*/ - { - for (i=((start_freq-min_freq)/seek_space-1); i>=0; i--) - { - cur_freq.freq = min_freq + seek_space*i; - LOGI("i=%d, freq=%d-----3",i,cur_freq.freq); - ret = FMR_Seek_TuneCheck(idx,&cur_freq); - if(ret == fm_false) - { - return -1; - } - else - { - if(cur_freq.valid == fm_false) - { - continue; - } - else - { - if(FMR_Seek_More(idx,&cur_freq,dir,seek_space,min_freq,max_freq) == 0) - { - *ret_freq = cur_freq.freq; - *rssi_tmp = cur_freq.rssi; - return 0; - } - else - { - return -1; - } - } - } - } - for (i=(band_channel_no-1); i>((start_freq-min_freq)/seek_space); i--) - { - cur_freq.freq = min_freq + seek_space*i; - LOGI("i=%d, freq=%d-----4",i,cur_freq.freq); - ret = FMR_Seek_TuneCheck(idx,&cur_freq); - if(ret == fm_false) - { - return -1; - } - else - { - if(cur_freq.valid == fm_false) - { - continue; - } - else - { - if(FMR_Seek_More(idx,&cur_freq,dir,seek_space,min_freq,max_freq) == 0) - { - *ret_freq = cur_freq.freq; - *rssi_tmp = cur_freq.rssi; - return 0; - } - else - { - return -1; - } - } - } - } - } - - *ret_freq = start_freq; - return 0; -} - -int FMR_seek(int idx, int start_freq, int dir, int *ret_freq) -{ - fm_s32 ret=0,i,j; - fm_softmute_tune_t cur_freq; - fm_s32 band_channel_no=0; - fm_u8 seek_space=10; - fm_u16 min_freq,max_freq; - int rssi; - - if ((start_freq < 7600) || (start_freq > 10800)) /*need replace by macro*/ - { - LOGE("%s error start_freq: %d\n", __func__, start_freq); - return -ERR_INVALID_PARA; - } - - //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ - if(fmr_data.cfg_data.seek_space == 5) - { - seek_space=5; - } - else if (fmr_data.cfg_data.seek_space == 2) - { - seek_space=20; - } - else - { - seek_space=10; - } - if (fmr_data.cfg_data.band == FM_BAND_JAPAN)// Japan band 76MHz ~ 90MHz - { - band_channel_no = (9600-7600)/seek_space + 1; - min_freq = 7600; - max_freq = 9600; - } - else if (fmr_data.cfg_data.band == FM_BAND_JAPANW)// Japan wideband 76MHZ ~ 108MHz - { - band_channel_no = (10800-7600)/seek_space + 1; - min_freq = 7600; - max_freq = 10800; - } - else// US/Europe band 87.5MHz ~ 108MHz (DEFAULT) - { - band_channel_no = (10800-8750)/seek_space + 1; - min_freq = 8750; - max_freq = 10800; - } - - fmr_data.scan_stop = fm_false; - LOGD("seek start freq %d band_channel_no=[%d], seek_space=%d band[%d - %d] dir=%d\n", start_freq, band_channel_no,seek_space,min_freq,max_freq,dir); - - ret = FMR_seek_Channel(idx, start_freq, min_freq, max_freq, band_channel_no, seek_space, dir, ret_freq, &rssi); - - return ret; -} -#else -int FMR_seek(int idx, int start_freq, int dir, int *ret_freq) -{ - int ret = 0; - int freq = start_freq; - int rssi; - struct fm_fake_channel_t *chan_info = fmr_data.cfg_data.fake_chan; - struct fm_fake_channel *channle = NULL; - int j; - - FMR_ASSERT(FMR_cbk_tbl(idx).seek); - FMR_ASSERT(ret_freq); - - *ret_freq = 0; - - if ((start_freq < fmr_data.cfg_data.low_band) || (start_freq > fmr_data.cfg_data.high_band)) { - LOGE("%s error start_freq: %d\n", __func__, start_freq); - return -ERR_INVALID_PARA; - } - -redo: - LOGD("freq %d\n", freq); - ret = FMR_cbk_tbl(idx).seek(FMR_fd(idx), - &freq, - fmr_data.cfg_data.band, - dir, - fmr_data.cfg_data.seek_lev); - - if (ret < 0) { - //Here we just need to return the start_freq. - *ret_freq = start_freq; - LOGE("%s failed, %s\n", __func__, FMR_strerr()); - goto out; - } - - if ((FMR_cbk_tbl(idx).is_dese_chan) && (FMR_cbk_tbl(idx).is_dese_chan(FMR_fd(idx), freq))) { - FMR_cbk_tbl(idx).get_rssi(FMR_fd(idx), &rssi); - - if (rssi < fmr_data.cfg_data.rssi_th_l2) { - // an invalid channel - LOGW("cur rssi %d < TH_L2, delete %d \n", rssi, freq); - - if (dir) { - freq++; - freq = (freq > fmr_data.cfg_data.high_band) ? fmr_data.cfg_data.low_band : freq; - } else { - freq--; - freq = (freq < fmr_data.cfg_data.low_band) ? fmr_data.cfg_data.high_band : freq; - } - - FMR_cbk_tbl(idx).tune(FMR_fd(idx), freq, fmr_data.cfg_data.band); - LOGD("restart with %d\n", freq); - goto redo; - } - } - - if (chan_info && chan_info->chan) { - channle = chan_info->chan; - - for (j = 0; j < chan_info->size; j++) { - if (freq == channle[j].freq) { - FMR_cbk_tbl(idx).get_rssi(FMR_fd(idx), &rssi); - - if (rssi < channle[j].rssi_th) { - // an invalid channel - LOGW("cur rssi %d < TH_L3, delete %d \n", rssi, freq); - - if (dir) { - freq++; - freq = (freq > fmr_data.cfg_data.high_band) ? fmr_data.cfg_data.low_band : freq; - } else { - freq--; - freq = (freq < fmr_data.cfg_data.low_band) ? fmr_data.cfg_data.high_band : freq; - } - - FMR_cbk_tbl(idx).tune(FMR_fd(idx), freq, fmr_data.cfg_data.band); - LOGD("restart with %d\n", freq); - goto redo; - } - } - } - *ret_freq = freq; - fmr_data.cur_freq = freq; - } - -out: - LOGD("%s, [freq=%d] [ret=%d]\n", __func__, freq, ret); - return ret; -} -#endif - -int FMR_set_mute(int idx, int mute) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).set_mute) - - if ((mute < 0) || (mute > 1)){ - LOGE("%s error param mute: %d\n", __func__, mute); - } - - ret = FMR_cbk_tbl(idx).set_mute(FMR_fd(idx), mute); - if (ret){ - LOGE("%s failed, %s\n", __func__, FMR_strerr()); - } - LOGD("%s, [mute=%d] [ret=%d]\n", __func__, mute, ret); - return ret; -} - -int FMR_is_fm_pwrup(int idx, int *pwrup) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).is_fm_pwrup); - FMR_ASSERT(pwrup); - - ret = FMR_cbk_tbl(idx).is_fm_pwrup(FMR_fd(idx), pwrup); - if (ret){ - *pwrup = 0; - LOGE("%s failed, %s\n", __func__, FMR_strerr()); - } - - LOGD("%s, [pwrup=%d] [ret=%d]\n", __func__, *pwrup, ret); - return ret; -} -int FM_set_status(int idx, int which, bool stat) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).fm_set_status); - - ret = FMR_cbk_tbl(idx).fm_set_status(FMR_fd(idx), which, stat); - - if(ret){ - LOGE("%s failed, %s\n", __func__, FMR_strerr()); - } - - LOGD("%s, [which=%d] [stat=%d] [ret=%d]\n", __func__, which, stat, ret); - return ret; -} - -int FM_get_status(int idx, int which, bool *stat) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).fm_get_status); - - ret = FMR_cbk_tbl(idx).fm_get_status(FMR_fd(idx), which, stat); - - if(ret){ - LOGE("%s failed, %s\n", __func__, FMR_strerr()); - } - - LOGD("%s, [which=%d] [stat=%d] [ret=%d]\n", __func__, which, *stat, ret); - return ret; -} - -int FMR_is_rdsrx_support(int idx, int *supt) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).is_rdsrx_support); - FMR_ASSERT(supt); - - ret = FMR_cbk_tbl(idx).is_rdsrx_support(FMR_fd(idx), supt); - if (ret){ - *supt = 0; - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [supt=%d] [ret=%d]\n", __func__, *supt, ret); - return ret; -} -int FMR_Pre_Search(int idx) -{ - //avoid scan stop flag clear if stop cmd send before pre-search finish - fmr_data.scan_stop = fm_false; -#if FMR_SOFT_MUTE_TUEN_SCAN - FMR_ASSERT(FMR_cbk_tbl(idx).pre_search); - FMR_cbk_tbl(idx).pre_search(FMR_fd(idx)); - return 0; -#else - return 0; -#endif -} -int FMR_Restore_Search(int idx) -{ -#if FMR_SOFT_MUTE_TUEN_SCAN - FMR_ASSERT(FMR_cbk_tbl(idx).restore_search); - FMR_cbk_tbl(idx).restore_search(FMR_fd(idx)); - return 0; -#else - return 0; -#endif -} - -#if FMR_SOFT_MUTE_TUEN_SCAN -int FMR_scan_Channels(int idx, uint16_t *scan_tbl, int *max_cnt, fm_s32 band_channel_no, fm_u16 Start_Freq, fm_u8 seek_space, fm_u8 NF_Space) -{ - fm_s32 ret=0,Num=0,i,j; - fm_u32 ChannelNo=0; - fm_softmute_tune_t cur_freq; - static struct fm_cqi SortData[CQI_CH_NUM_MAX]; - fm_bool LastExist=fm_false; - struct fm_cqi swap; -#if (FMR_NOISE_FLOORT_DETECT==1) - fm_s32 Pacc=0,Nacc=0; - fm_s32 NF=0; - fm_bool F[3]={fm_false,fm_false,fm_false}; - fm_s32 F_Rssi[3]={0}; - fm_u8 NF_Idx=0; -#endif - - memset (SortData, 0, CQI_CH_NUM_MAX*sizeof(struct fm_cqi)); - LOGI("band_channel_no=[%d], seek_space=%d, start freq=%d\n", band_channel_no,seek_space,Start_Freq); - for(i=0; i<band_channel_no; i++) - { - if(fmr_data.scan_stop == fm_true) - { - FMR_Restore_Search(idx); - ret = FMR_tune(idx,fmr_data.cur_freq); - LOGI("scan stop!!! tune ret=%d",ret); - return -1; - } - cur_freq.freq = Start_Freq + seek_space*i; - ret = FMR_cbk_tbl(idx).soft_mute_tune(FMR_fd(idx),&cur_freq); - if(ret) - { - LOGE("soft mute tune, failed:[%d]\n",ret); - LastExist=fm_false; - continue; - } - if(cur_freq.valid == fm_true)/*get valid channel*/ - { -#if (FMR_NOISE_FLOORT_DETECT==1) - memset(F,fm_false,sizeof(F)); -#endif - if(FMR_DensenseDetect(idx,cur_freq.freq,cur_freq.rssi)==fm_true) - { - LOGI("desense channel detected:[%d] \n", cur_freq.freq); - LastExist=fm_false; - continue; - } - if((LastExist==fm_true)&&(Num>0)) /*neighbor channel*/ - { - if(cur_freq.rssi>SortData[Num-1].rssi)/*save current freq and cover last channel*/ - { - if(FMR_SevereDensense(cur_freq.freq,cur_freq.rssi)==fm_true) - { - LastExist=fm_false; - continue; - } - SortData[Num-1].ch=cur_freq.freq; - SortData[Num-1].rssi=cur_freq.rssi; - SortData[Num-1].reserve = 1; - LOGI("cover last channel \n"); - } - else/*ignore current freq*/ - { - LastExist=fm_false; - continue; - } - } - else/*save current*/ - { - if(FMR_SevereDensense(cur_freq.freq,cur_freq.rssi)==fm_true) - { - LastExist=fm_false; - continue; - } - SortData[Num].ch=cur_freq.freq; - SortData[Num].rssi=cur_freq.rssi; - SortData[Num].reserve = 1; - Num++; - LastExist=fm_true; - LOGI("Num++:[%d] \n", Num); - } - } - else - { -#if (FMR_NOISE_FLOORT_DETECT==1) - if(FMR_DensenseDetect(idx,cur_freq.freq,cur_freq.rssi)==fm_false) - { - if(FMR_NoiseFloorDetect(F,cur_freq.rssi,F_Rssi)==fm_true) - { - Pacc+=F_Rssi[1]; - Nacc++; - /*check next freq*/ - F[0]=F[1]; - F_Rssi[0]=F_Rssi[1]; - F[1]=F[2]; - F_Rssi[1]=F_Rssi[2]; - F[2]=fm_false; - F_Rssi[2]=0; - LOGI("FM Noise FLoor:Pacc=[%d] Nacc=[%d] \n", Pacc,Nacc); - } - } - else - { - memset(F,fm_false,sizeof(F)); - } -#endif - LastExist=fm_false; - } -#if (FMR_NOISE_FLOORT_DETECT==1) - if(((i%NF_Space)==0)&&(i!=0)) - { - if(Nacc>0) - { - NF=Pacc/Nacc; - } - else - { - NF=RSSI_TH-FM_NOISE_FLOOR_OFFSET; - } - Pacc=0; - Nacc=0; - for(j=NF_Idx; j<Num; j++) - { - if(SortData[j].rssi<(NF+FM_NOISE_FLOOR_OFFSET)) - { - LOGI("FM Noise FLoor Detected:freq=[%d] NF=[%d] \n", SortData[j].ch,NF); - SortData[j].reserve=0; - } - } - NF_Idx=j; - LOGI("FM Noise FLoor NF_Idx[%d] \n", NF_Idx); - } -#endif - } - LOGI("get channel no.[%d] \n", Num); - if(Num==0)/*get nothing*/ - { - *max_cnt = 0; - FMR_Restore_Search(idx); - return -1; - } - for(i=0; i<Num; i++)//debug - { - LOGI("[%d]:%d \n", i,SortData[i].ch); - } - - switch (fmr_data.cfg_data.scan_sort) - { - case FM_SCAN_SORT_UP: - case FM_SCAN_SORT_DOWN: - { - LOGI("Start sort \n"); - //do sort: insert sort algorithm - for (i = 1; i < Num; i++) - { - for (j = i; (j > 0) && ((FM_SCAN_SORT_DOWN == fmr_data.cfg_data.scan_sort) ? (SortData[j-1].rssi \ - < SortData[j].rssi) : (SortData[j-1].rssi > SortData[j].rssi)); j--) - { - memcpy(&swap,&SortData[j],sizeof(struct fm_cqi)); - memcpy(&SortData[j],&SortData[j-1],sizeof(struct fm_cqi)); - memcpy(&SortData[j-1],&swap,sizeof(struct fm_cqi)); - } - } - LOGI("End sort \n"); - break; - } - default: - break; - } - - ChannelNo = 0; - for(i=0; i<Num; i++) - { - if(SortData[i].reserve == 1) - { -#ifndef MTK_FM_50KHZ_SUPPORT - SortData[i].ch /= 10; -#endif - scan_tbl[ChannelNo]=SortData[i].ch; - ChannelNo++; - } - } - *max_cnt=ChannelNo; - - LOGI("return channel no.[%d] \n", ChannelNo); - return 0; - -} - -int FMR_scan(int idx, uint16_t *scan_tbl, int *max_cnt) -{ - fm_s32 ret=0; - fm_s32 band_channel_no=0; - fm_u8 seek_space=10; - fm_u16 Start_Freq=8750; -#if (FMR_NOISE_FLOORT_DETECT==1) - fm_u8 NF_Space=41; -#endif - - //FM radio seek space,5:50KHZ; 1:100KHZ; 2:200KHZ - if(fmr_data.cfg_data.seek_space == 5) - { - seek_space=5; - } - else if (fmr_data.cfg_data.seek_space == 2) - { - seek_space=20; - } - else - { - seek_space=10; - } - if (fmr_data.cfg_data.band == FM_BAND_JAPAN)// Japan band 76MHz ~ 90MHz - { - band_channel_no = (9600-7600)/seek_space + 1; - Start_Freq = 7600; -#if (FMR_NOISE_FLOORT_DETECT==1) - NF_Space = 400/seek_space; -#endif - } - else if (fmr_data.cfg_data.band == FM_BAND_JAPANW)// Japan wideband 76MHZ ~ 108MHz - { - band_channel_no = (10800-7600)/seek_space + 1; - Start_Freq = 7600; -#if (FMR_NOISE_FLOORT_DETECT==1) - NF_Space = 640/seek_space; -#endif - } - else// US/Europe band 87.5MHz ~ 108MHz (DEFAULT) - { - band_channel_no = (10800-8750)/seek_space + 1; - Start_Freq = 8750; -#if (FMR_NOISE_FLOORT_DETECT==1) - NF_Space = 410/seek_space; -#endif - } - - ret = FMR_scan_Channels(idx, scan_tbl, max_cnt, band_channel_no, Start_Freq, seek_space, NF_Space); - - return ret; -} -#else -int FMR_scan(int idx, uint16_t *scan_tbl, int *max_cnt) -{ - int ret = 0; - int i,j,k,m,n; - int flag = 0; - int hw_sort_en = FM_SCAN_SORT_NON; - struct fm_rssi_req req; - struct fm_fake_channel_t *chan_info = fmr_data.cfg_data.fake_chan; - struct fm_fake_channel *channle = NULL; - static char cqi_buf[CQI_CH_NUM_MAX*sizeof(struct fm_cqi)] = {0}; - struct fm_cqi swap; - struct fm_cqi *cqi = NULL; - - FMR_ASSERT(FMR_cbk_tbl(idx).scan); - -#ifdef MT6620 - hw_sort_en = fmr_data.cfg_data.scan_sort; -#else - hw_sort_en = FM_SCAN_SORT_NON; -#endif - - ret = FMR_cbk_tbl(idx).scan(FMR_fd(idx), scan_tbl, max_cnt, - fmr_data.cfg_data.band, hw_sort_en); - if(ret){ - LOGE("%s, failed\n", __func__); - return ret; - } - - //MT6620 will use this way - if (FMR_cbk_tbl(idx).fastget_rssi) { - //find desense channels - req.num = 0; - if(chan_info && chan_info->chan){ - channle = chan_info->chan; - for(j=0; j<chan_info->size; j++){ - for(i=0; (i<*max_cnt) && (flag==0); i++){ - if(scan_tbl[i] == channle[j].freq){ - req.cr[req.num].freq = channle[j].freq; //add to req list - channle[j].reserve = i; //record position - req.num++; - flag = 1; - } - } - flag = 0; //reset flag - } - } - - //read RSSI - if (req.num > 0) { - req.read_cnt = 1; - ret = FMR_cbk_tbl(idx).fastget_rssi(FMR_fd(idx), &req); - if(ret){ - LOGE("Can't get RSSI\n"); - goto way_1; - } - - //Decide delete a channel or not - j = 0; - for(i=0; i<chan_info->size; i++){ - if(channle[i].reserve >= 0){ - if(channle[i].rssi_th > req.cr[j].rssi){ - //delete this channel from scan table - LOGI("delete %d, RSSI %d, RSSI_TH %d\n", channle[i].freq, req.cr[j].rssi, channle[i].rssi_th); - for(k=channle[i].reserve; k<*max_cnt; k++){ - scan_tbl[k] = scan_tbl[k+1]; - } - (*max_cnt)--; - } - j++; - } - } - } - } - - way_1: - - //MT6626/28 will use this way - if (FMR_cbk_tbl(idx).get_cqi) { - memset (cqi_buf, 0, CQI_CH_NUM_MAX*sizeof(struct fm_cqi)); - ret = FMR_cbk_tbl(idx).get_cqi(FMR_fd(idx), *max_cnt, cqi_buf, CQI_CH_NUM_MAX*sizeof(struct fm_cqi)); - if (ret < 0) { - LOGE("Can't get CQI\n"); - ret = 0; - goto out; - } - cqi = (struct fm_cqi*)cqi_buf; - //show result - LOGD("before check\n"); - for (i = 0; i < *max_cnt; i++) { -#ifndef MTK_FM_50KHZ_SUPPORT - cqi[i].ch /= 10; -#endif - scan_tbl[i] = cqi[i].ch; - LOGD("NO.%d: %d --> %d(dbm)\n", i, cqi[i].ch, cqi[i].rssi); - } - - //check chip-level de-sense list - LOGD("chip-level de-sense check\n"); - if (FMR_cbk_tbl(idx).is_dese_chan) { - for (i = 0; i < *max_cnt; i++) { - if ((FMR_cbk_tbl(idx).is_dese_chan(FMR_fd(idx), cqi[i].ch)) \ - && (cqi[i].rssi < fmr_data.cfg_data.rssi_th_l2)) { - //mark for later delete - cqi[i].reserve = 0; - LOGD("del %d\n", (int)cqi[i].ch); - }else{ - // mark as a valid channel - cqi[i].reserve = 1; - } - } - - // flush invalid channels - for (i = 0; i < *max_cnt; i++) { - if (0 == cqi[i].reserve) { - //delete this channel - for (k = i; k < *max_cnt; k++) { - memcpy(&cqi[k], &cqi[k+1], sizeof(struct fm_cqi)); - } - (*max_cnt)--; - } - } - } - - - //neighbor channel check - LOGD("neighbor channel check\n"); - m = 0; - if (cqi[0].ch == fmr_data.cfg_data.low_band) { - m++; - } -#ifdef MTK_FM_50KHZ_SUPPORT - #define STEP_OFFEST 5 -#else -#define STEP_OFFEST 1 -#endif - for (i = m; i < *max_cnt; i++) { - n = i + 1; - if (cqi[n-1].reserve && cqi[n].reserve && ((cqi[n-1].ch + STEP_OFFEST) == cqi[n].ch)) { - LOGD("%d:(%d) <--v.s--> %d:(%d)\n", cqi[n-1].ch, cqi[n-1].rssi, cqi[n].ch, cqi[n].rssi); - if (cqi[n].rssi > cqi[n-1].rssi) { - cqi[n-1].reserve = 0; - LOGD("del %d\n", cqi[n-1].ch); - if (((cqi[n].ch + STEP_OFFEST) < fmr_data.cfg_data.high_band) \ - && ((cqi[n].ch + STEP_OFFEST) == cqi[n+1].ch)) { - cqi[n+1].reserve = 0; - LOGD("del %d\n", cqi[n+1].ch); - } - } else { - cqi[n].reserve = 0; - LOGD("del %d\n", cqi[n].ch); - } - - } - } - - // flush invalid channels - for (i = 0; i < *max_cnt; i++) { - if (0 == cqi[i].reserve) { - //delete this channel - for (k = i; k < *max_cnt; k++) { - memcpy(&cqi[k], &cqi[k+1], sizeof(struct fm_cqi)); - } - (*max_cnt)--; - } - } - - - //check phone-level de-sense list - LOGD("phone-level de-sense check\n"); - channle = chan_info->chan; - n = 0; - for (i = 0; i < *max_cnt; i++) { - for (j = n; j < chan_info->size; j++) { - if (cqi[i].ch == channle[j].freq) { - n++; - if (cqi[i].rssi < channle[j].rssi_th) { - // mark for later delete - cqi[i].reserve = 0; - LOGD("del %d\n", (int)cqi[i].ch); - } else { - cqi[i].reserve = 1; - } - } - } - } - - // flush invalid channels - for (i = 0; i < *max_cnt; i++) { - if (0 == cqi[i].reserve) { - //delete this channel - for (k = i; k < *max_cnt; k++) { - memcpy(&cqi[k], &cqi[k+1], sizeof(struct fm_cqi)); - } - (*max_cnt)--; - } - } - - - //RSSI sort if need - LOGD("RSSI sort way %d\n", fmr_data.cfg_data.scan_sort); - switch (fmr_data.cfg_data.scan_sort) { - case FM_SCAN_SORT_NON: - break; - case FM_SCAN_SORT_UP: - case FM_SCAN_SORT_DOWN: - //do sort: insert sort algorithm - for (i = 1; i < *max_cnt; i++) { - for (j = i; (j > 0) && ((FM_SCAN_SORT_DOWN == fmr_data.cfg_data.scan_sort) ? (cqi[j-1].rssi \ - < cqi[j].rssi) : (cqi[j-1].rssi > cqi[j].rssi)); j--) { - swap.ch = cqi[j].ch; - swap.rssi = cqi[j].rssi; - cqi[j].ch = cqi[j-1].ch; - cqi[j].rssi = cqi[j-1].rssi; - cqi[j-1].ch = swap.ch; - cqi[j-1].rssi = swap.rssi; - } - } - break; - default: - break; - } - - //get result - LOGD("after check\n"); - for (i = 0; i < *max_cnt; i++) { - scan_tbl[i] = cqi[i].ch; - LOGD("NO.%d: %d --> %d(dbm)\n", i, cqi[i].ch, cqi[i].rssi); - } - } - - // tune to original channel if scan result num is 0 - if (0 == *max_cnt) { - ret = FMR_cbk_tbl(idx).tune(FMR_fd(idx), fmr_data.cur_freq, fmr_data.cfg_data.band); - if (ret < 0) { - LOGE("scan tune failed, [ret=%d]\n", ret); - } else { - LOGE("scan tuned to %d, [ret=%d]\n", fmr_data.cur_freq, ret); - } - } - -out: - LOGD("%s, [cnt=%d] [ret=%d]\n", __func__, *max_cnt, ret); - return ret; -} -#endif - -/* - * FMR_scan_new - * @idx - contex index - * @ppdst - target buffer - * @upper - scan upper band - * @lower - scan lower band - * @space - scan space - * return channel number(>=0) if success, else error code - */ -#if FMR_SOFT_MUTE_TUEN_SCAN -int FMR_seek_new(int idx, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para) -{ - int ret = 0; - int rssi_tmp = 0; - int start_freq = *freq; - fm_s32 band_channel_no=0; - fm_u16 min_freq,max_freq; - - FMR_ASSERT(freq); - - if ((start_freq < lower) || (start_freq > upper)) { - LOGE("start freq err: %d\n", start_freq); - return -ERR_INVALID_PARA; - } - - if (rssi) { - rssi_tmp = *rssi; // rssi th - } - - band_channel_no = (upper-lower)/space + 1; - min_freq = lower; - max_freq = upper; - - LOGD("seek_new start freq %d band_channel_no=[%d], seek_space=%d band[%d - %d] dir=%d\n", start_freq, band_channel_no,space,min_freq,max_freq,dir); - - ret = FMR_seek_Channel(idx, start_freq, min_freq, max_freq, band_channel_no, space, dir, freq, &rssi_tmp); - - if (ret < 0) { - //Here we just need to return the start_freq. - *freq = start_freq; - LOGE("seek err, %d\n", ret); - } else { - fmr_data.cur_freq = *freq; - } - - // return rssi to JNI if need - if (rssi) { - *rssi = rssi_tmp; - } - - LOGD("seek_new, start %d, result %d, rssi %d, ret %d\n", start_freq, *freq, rssi_tmp, ret); - return ret; -} - -int FMR_scan_new(int idx, uint16_t *scan_tbl, int *max_cnt, int upper, int lower, int space, void *para) -{ - fm_s32 ret=0; - fm_s32 band_channel_no=0; - fm_u16 Start_Freq=8750; -#if (FMR_NOISE_FLOORT_DETECT==1) - fm_u8 NF_Space=41; -#endif - - band_channel_no = (upper-lower)/space + 1; - Start_Freq = lower; -#if (FMR_NOISE_FLOORT_DETECT==1) - NF_Space = 410/space; -#endif - - ret = FMR_scan_Channels(idx, scan_tbl, max_cnt, band_channel_no, Start_Freq, space, NF_Space); - - return 0; -} - -#else -int FMR_scan_new(int idx, void **ppdst, int upper, int lower, int space, void *para) -{ - int ret = 0; - struct fm_ch_rssi *ch_buf = NULL; - struct fm_ch_rssi swap; - int num; - int i, j, n; - struct fm_fake_channel_t *fake_info = fmr_data.cfg_data.fake_chan; - struct fm_fake_channel *fake_ch = NULL; - int flag = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).scan_new); - - // do scan - ret = FMR_cbk_tbl(idx).scan_new(FMR_fd(idx), (void**)&ch_buf, upper, lower, space, para); - if ((ret < 0) || (NULL == ch_buf)) { - LOGE("%s, failed\n", __func__); - return ret; - } - - num = ret; - - //check chip-level de-sense list - LOGD("chip-level de-sense check\n"); - if (FMR_cbk_tbl(idx).is_dese_chan) { - for (i = 0; i < num; i++) { - if ((FMR_cbk_tbl(idx).is_dese_chan(FMR_fd(idx), ch_buf[i].freq)) \ - && (ch_buf[i].rssi < fmr_data.cfg_data.rssi_th_l2)) { - //mark for later delete - LOGD("del %d\n", (int)ch_buf[i].freq); - ch_buf[i].freq = 0; - } - } - } - - //neighbor channel check - LOGD("neighbor channel check\n"); - for (i = 0; i < num; i++) { - n = i + 1; - if (ch_buf[n-1].freq && ch_buf[n].freq && ((ch_buf[n-1].freq + space) == ch_buf[n].freq)) { - LOGD("%d:(%d) <--v.s--> %d:(%d)\n", ch_buf[n-1].freq, ch_buf[n-1].rssi, ch_buf[n].freq, ch_buf[n].rssi); - if (ch_buf[n].rssi > ch_buf[n-1].rssi) { - LOGD("del %d\n", ch_buf[n-1].freq); - ch_buf[n-1].freq = 0; - if (((ch_buf[n].freq + space) < upper) \ - && ((ch_buf[n].freq + space) == ch_buf[n+1].freq)) { - LOGD("del %d\n", ch_buf[n+1].freq); - ch_buf[n+1].freq = 0; - } - } else { - LOGD("del %d\n", ch_buf[n].freq); - ch_buf[n].freq = 0; - } - } - } - - // fake channel delete - if (fake_info && fake_info->chan) { - fake_ch = fake_info->chan; - - for (j = 0; j < fake_info->size; j++) { - for (i = 0; (i < num) && (flag == 0); i++) { - if (ch_buf[i].freq == fake_ch[j].freq) { - flag = 1; - if (ch_buf[i].rssi < fake_ch[j].rssi_th) { - ch_buf[i].freq = 0; // mark for delete - } - } - } - flag = 0; //reset flag - } - } - - //RSSI sort if need - LOGD("RSSI sort way %d\n", fmr_data.cfg_data.scan_sort); - switch (fmr_data.cfg_data.scan_sort) { - case FM_SCAN_SORT_NON: - break; - case FM_SCAN_SORT_UP: - case FM_SCAN_SORT_DOWN: - //do sort: insert sort algorithm - for (i = 1; i < num; i++) { - for (j = i; (j > 0) && ((FM_SCAN_SORT_DOWN == fmr_data.cfg_data.scan_sort) ? (ch_buf[j-1].rssi \ - < ch_buf[j].rssi) : (ch_buf[j-1].rssi > ch_buf[j].rssi)); j--) { - swap.freq = ch_buf[j].freq; - swap.rssi = ch_buf[j].rssi; - ch_buf[j].freq = ch_buf[j-1].freq; - ch_buf[j].rssi = ch_buf[j-1].rssi; - ch_buf[j-1].freq = swap.freq; - ch_buf[j-1].rssi = swap.rssi; - } - } - break; - default: - break; - } - - *ppdst = (void*)ch_buf; - return num; -} - - -int FMR_seek_new(int idx, int *freq, int upper, int lower, int space, int dir, int *rssi, void *para) -{ - int ret = 0; - int rssi_tmp = 0; - int start_freq = *freq; - - FMR_ASSERT(FMR_cbk_tbl(idx).seek_new); - FMR_ASSERT(freq); - - if ((start_freq < lower) || (start_freq > upper)) { - LOGE("start freq err: %d\n", start_freq); - return -ERR_INVALID_PARA; - } - - if (rssi) { - rssi_tmp = *rssi; // rssi th - } - - ret = FMR_cbk_tbl(idx).seek_new(FMR_fd(idx), freq, upper, lower, space, dir, &rssi_tmp, para); - if (ret < 0) { - //Here we just need to return the start_freq. - *freq = start_freq; - LOGE("seek err, %d\n", ret); - } else { - fmr_data.cur_freq = *freq; - } - - // FIXED_ME fake channel handle - - // return rssi to JNI if need - if (rssi) { - *rssi = rssi_tmp; - } - - LOGD("seek, start %d, result %d, rssi %d, ret %d\n", start_freq, *freq, rssi_tmp, ret); - return ret; -} -#endif - -int FMR_tune_new(int idx, int freq, int upper, int lower, int space, void *para) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).tune_new); - - if ((freq < lower) || (freq > upper)) { - LOGE("freq err: %d\n", freq); - return -ERR_INVALID_PARA; - } - - ret = FMR_cbk_tbl(idx).tune_new(FMR_fd(idx), freq, upper, lower, space, para); - if (ret < 0) { - LOGE("tune err, %d\n", ret); - } else { - fmr_data.cur_freq = freq; - } - - LOGD("tune, freq %d, ret %d\n", freq, ret); - return ret; -} -#if FMR_SOFT_MUTE_TUEN_SCAN -int FMR_stop_scan(int idx) -{ - fmr_data.scan_stop = fm_true; - return 0; -} -#else -int FMR_stop_scan(int idx) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).stop_scan); - - ret = FMR_cbk_tbl(idx).stop_scan(FMR_fd(idx)); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} -#endif -int FMR_turn_on_off_rds(int idx, int onoff) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).turn_on_off_rds) - ret = FMR_cbk_tbl(idx).turn_on_off_rds(FMR_fd(idx), onoff); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [onoff=%d] [ret=%d]\n", __func__, onoff, ret); - return ret; -} - -int FMR_read_rds_data(int idx, uint16_t *rds_status) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).read_rds_data); - FMR_ASSERT(rds_status); - - ret = FMR_cbk_tbl(idx).read_rds_data(FMR_fd(idx), &fmr_data.rds, rds_status); - /*if (ret){ - LOGE("%s, get no event\n", __func__); - }*/ - LOGD("%s, [status=%d] [ret=%d]\n", __func__, *rds_status, ret); - return ret; -} - -int FMR_active_af(int idx, uint16_t *ret_freq) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).active_af); - FMR_ASSERT(ret_freq); - ret = FMR_cbk_tbl(idx).active_af(FMR_fd(idx), - &fmr_data.rds, - fmr_data.cfg_data.band, - fmr_data.cur_freq, - ret_freq); - if((ret == 0) && (*ret_freq != fmr_data.cur_freq)){ - fmr_data.cur_freq = *ret_freq; - LOGI("active AF OK, new channel[freq=%d]\n", fmr_data.cur_freq); - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_active_ta(int idx, uint16_t *ret_freq) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).active_ta); - FMR_ASSERT(ret_freq); - ret = FMR_cbk_tbl(idx).active_ta(FMR_fd(idx), - &fmr_data.rds, - fmr_data.cfg_data.band, - fmr_data.cur_freq, - &fmr_data.backup_freq, - ret_freq); - if((ret == 0) && (*ret_freq != fmr_data.cur_freq)){ - fmr_data.cur_freq = *ret_freq; - LOGI("active TA OK, new channel[freq=%d]\n", fmr_data.cur_freq); - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_deactive_ta(int idx, uint16_t *ret_freq) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).deactive_ta); - FMR_ASSERT(ret_freq); - ret = FMR_cbk_tbl(idx).deactive_ta(FMR_fd(idx), - &fmr_data.rds, - fmr_data.cfg_data.band, - fmr_data.cur_freq, - &fmr_data.backup_freq, - ret_freq); - if((ret == 0) && (*ret_freq != fmr_data.cur_freq)){ - fmr_data.cur_freq = *ret_freq; - LOGI("deactive TA OK, new channel[freq=%d]\n", fmr_data.cur_freq); - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_is_tx_support(int idx, int *supt) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).is_tx_support); - FMR_ASSERT(supt); - - ret = FMR_cbk_tbl(idx).is_tx_support(FMR_fd(idx), supt); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [supt=%d] [ret=%d]\n", __func__, *supt, ret); - return ret; -} - -int FMR_is_rdstx_support(int idx, int *supt) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).is_rdstx_support); - FMR_ASSERT(supt); - - ret = FMR_cbk_tbl(idx).is_rdstx_support(FMR_fd(idx), supt); - if (ret){ - LOGE("%s, failed\n", __func__); - } - LOGD("%s, [supt=%d] [ret=%d]\n", __func__, *supt, ret); - return ret; -} - -int FMR_tx_pwrup(int idx, int freq) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).tx_pwrup); - - LOGI("%s,[freq=%d]\n", __func__, freq); - if (freq < fmr_data.cfg_data.low_band || freq > fmr_data.cfg_data.high_band){ - LOGE("%s error freq: %d\n", __func__, freq); - ret = -ERR_INVALID_PARA; - return ret; - } - ret = FMR_cbk_tbl(idx).tx_pwrup(FMR_fd(idx), fmr_data.cfg_data.band, freq); - if (ret) { - LOGE("%s failed, [ret=%d]\n", __func__, ret); - } - fmr_data.cur_freq = freq; - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_tx_tune(int idx, int freq) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).tx_tune); - - LOGI("%s,[freq=%d]\n", __func__, freq); - if (freq < fmr_data.cfg_data.low_band || freq > fmr_data.cfg_data.high_band) { - LOGE("%s error freq: %d\n", __func__, freq); - ret = -ERR_INVALID_PARA; - return ret; - } - ret = FMR_cbk_tbl(idx).tx_tune(FMR_fd(idx), fmr_data.cfg_data.band, freq); - if (ret) { - LOGE("%s failed, [ret=%d]\n", __func__, ret); - } - fmr_data.cur_freq = freq; - - LOGD("%s, [freq=%d] [ret=%d]\n", __func__, freq, ret); - return ret; -} - -int FMR_tx_scan(int idx, int start_freq, int dir, int *num, uint16_t *tbl) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).tx_scan); - FMR_ASSERT(num); - FMR_ASSERT(tbl); - - if (start_freq < fmr_data.cfg_data.low_band || start_freq > fmr_data.cfg_data.high_band) { - LOGW("%s:error freq, [freq=%d]\n", __func__, start_freq); - start_freq = fmr_data.cfg_data.low_band; - } - - if((*num < 1) || (*num > 10)){ - LOGW("%s:error num, [ScanTBLSize=%d], use 10 as default\n", __func__, *num); - *num = 10; - } - - if(dir > 1){ - LOGW("%s:error dir, [scandir=%d], use 0(up) as default\n", __func__, dir); - dir = 0; - } - - ret = FMR_cbk_tbl(idx).tx_scan(FMR_fd(idx), fmr_data.cfg_data.band, start_freq, dir, num, tbl); - if (ret) { - LOGE("%s failed, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_rdstx_onoff(int idx, int onoff) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).rdstx_onoff); - - ret = FMR_cbk_tbl(idx).rdstx_onoff(FMR_fd(idx), onoff); - if (ret){ - LOGE("%s failed, [ret=%d]\n", __func__, ret); - } - - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_rdstx(int idx, uint16_t pi, uint8_t *ps, int ps_len, uint16_t *rds, int cnt) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).rdstx); - FMR_ASSERT(ps); - FMR_ASSERT(rds); - - ret = FMR_cbk_tbl(idx).rdstx(FMR_fd(idx), pi, ps, ps_len, rds, cnt); - if (ret){ - LOGE("%s failed, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_fm_over_bt(int idx, int onoff) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).fm_over_bt); - - ret = FMR_cbk_tbl(idx).fm_over_bt(FMR_fd(idx), onoff); - if (ret){ - LOGE("%s failed, [ret=%d]\n", __func__, ret); - } - - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_ana_switch(int idx, int antenna) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).ana_switch); - - if(fmr_data.cfg_data.short_ana_sup == true){ - ret = FMR_cbk_tbl(idx).ana_switch(FMR_fd(idx), antenna); - if (ret){ - LOGE("%s failed, [ret=%d]\n", __func__, ret); - } - }else{ - LOGW("FM antenna switch not support!\n"); - ret = -ERR_UNSUPT_SHORTANA; - } - - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} - -int FMR_get_badratio(int idx, int *badratio) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).get_badratio); - FMR_ASSERT(badratio); - - ret = FMR_cbk_tbl(idx).get_badratio(FMR_fd(idx), badratio); - if (ret){ - *badratio = 0; - LOGE("%s failed, %s\n", __func__, FMR_strerr()); - } - - LOGD("%s, [badratio=%d] [ret=%d]\n", __func__, *badratio, ret); - return ret; -} - -int FMR_get_stereomono(int idx, int *stemono) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).get_stereomono); - FMR_ASSERT(stemono); - - ret = FMR_cbk_tbl(idx).get_stereomono(FMR_fd(idx), stemono); - if (ret){ - *stemono = 0; - LOGE("%s failed, %s\n", __func__, FMR_strerr()); - } - - LOGD("%s, [stemono=%d] [ret=%d]\n", __func__, *stemono, ret); - return ret; -} - -int FMR_set_stereomono(int idx, int stemono) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).set_stereomono); - - ret = FMR_cbk_tbl(idx).set_stereomono(FMR_fd(idx), stemono); - if (ret){ - LOGE("%s failed, %s\n", __func__, FMR_strerr()); - } - - LOGD("%s, [stemono=%d] [ret=%d]\n", __func__, stemono, ret); - return ret; -} - -int FMR_get_caparray(int idx, int *caparray) -{ - int ret = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).get_caparray); - FMR_ASSERT(caparray); - - ret = FMR_cbk_tbl(idx).get_caparray(FMR_fd(idx), caparray); - if (ret){ - *caparray = 0; - LOGE("%s failed, %s\n", __func__, FMR_strerr()); - } - - LOGD("%s, [caparray=%d] [ret=%d]\n", __func__, *caparray, ret); - return ret; -} - -int FMR_get_hw_info(int idx, int **info, int *info_len) -{ - int ret = 0; - static int inited = 0; - static int info_array[10] = {0}; - - FMR_ASSERT(FMR_cbk_tbl(idx).get_hw_info); - FMR_ASSERT(info); - FMR_ASSERT(info_len); - - if(!inited){ - ret = FMR_cbk_tbl(idx).get_hw_info(FMR_fd(idx), &fmr_data.hw_info); - if(ret >= 0){ - inited = 1; //get hw info success - } - } - - info_array[0] = fmr_data.hw_info.chip_id; - info_array[1] = fmr_data.hw_info.eco_ver; - info_array[2] = fmr_data.hw_info.rom_ver; - info_array[3] = fmr_data.hw_info.patch_ver; - - *info = info_array; - *info_len = sizeof(struct fm_hw_info)/sizeof(int); - - LOGD("chip:0x%08x, eco:0x%08x, rom:0x%08x, patch: 0x%08x\n", info_array[0], info_array[1], info_array[2], info_array[3]); - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret; -} -/* -th_idx: - threshold type: 0, RSSI. 1,desense RSSI. 2,SMG. -th_val: threshold value*/ -int FMR_EMSetTH(int idx, int th_idx, int th_val) -{ - int ret = -1; - FMR_ASSERT(FMR_cbk_tbl(idx).set_search_threshold); - ret=FMR_cbk_tbl(idx).set_search_threshold(FMR_fd(idx),th_idx,th_val); - - return ret; -} - -int FMR_EM_CQI_logger(int idx,uint16_t cycle) -{ - int ret = -1; - fm_full_cqi_log_t log_setting; - uint i = 0; - - FMR_ASSERT(FMR_cbk_tbl(idx).full_cqi_logger); - - //log_setting.cycle = cycle; -#ifdef MTK_FM_50KHZ_SUPPORT - log_setting.lower = FM_FREQ_MIN * 10; - log_setting.upper = FM_FREQ_MAX * 10; -#else - log_setting.lower = FM_FREQ_MIN; - log_setting.upper = FM_FREQ_MAX; -#endif - log_setting.space = 0x2; - - for(i = 0;i < cycle; i++) - { - - log_setting.cycle = i; - ret = FMR_cbk_tbl(idx).full_cqi_logger(FMR_fd(idx),&log_setting); - - LOGD("%s, [%d]\n", __func__, i); - } - - //ret = FMR_cbk_tbl(idx).full_cqi_logger(FMR_fd(idx),&log_setting); - - return ret; -} - diff --git a/MediaTek/fmradiolibs/fmnative/fmr/fmr_err.cpp b/MediaTek/fmradiolibs/fmnative/fmr/fmr_err.cpp deleted file mode 100644 index 3ba1875..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/fmr_err.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" - -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "FMLIB_ERR" - -#define FMR_ERR_BASE -0x100 - -static int fmr_err = 0; -static char tmp[20] = {0}; - -char *FMR_strerr() -{ - sprintf(tmp, "%d", fmr_err); - - return tmp; -} - -void FMR_seterr(int err) -{ - fmr_err = err; -} diff --git a/MediaTek/fmradiolibs/fmnative/fmr/libfm_jni.cpp b/MediaTek/fmradiolibs/fmnative/fmr/libfm_jni.cpp deleted file mode 100644 index abad2e4..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/libfm_jni.cpp +++ /dev/null @@ -1,1245 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include <jni.h> -#include "fmr.h" - -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "FMLIB_JNI" - -static int g_idx = -1; -extern struct fmr_ds fmr_data; - -jboolean openDev(JNIEnv *env, jobject thiz) -{ - int ret = 0; - - ret = FMR_open_dev(g_idx); // if success, then ret = 0; else ret < 0 - - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret?JNI_FALSE:JNI_TRUE; -} - -jboolean closeDev(JNIEnv *env, jobject thiz) -{ - int ret = 0; - - ret = FMR_close_dev(g_idx); - - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret?JNI_FALSE:JNI_TRUE; -} - -jboolean powerUp(JNIEnv *env, jobject thiz, jfloat freq) -{ - int ret = 0; - int tmp_freq; - - LOGI("%s, [freq=%d]\n", __func__, (int)freq); -#ifdef MTK_FM_50KHZ_SUPPORT - tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755 -#else - tmp_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875 -#endif - ret = FMR_pwr_up(g_idx, tmp_freq); - - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret?JNI_FALSE:JNI_TRUE; -} - -jboolean powerDown(JNIEnv *env, jobject thiz, jint type) -{ - int ret = 0; - - ret = FMR_pwr_down(g_idx, type); - - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret?JNI_FALSE:JNI_TRUE; -} - -jint readRssi(JNIEnv *env, jobject thiz) //jint = int -{ - int ret = 0; - int rssi = -1; - - ret = FMR_get_rssi(g_idx, &rssi); - - LOGD("%s, [ret=%d]\n", __func__, ret); - return rssi; -} - -jboolean tune(JNIEnv *env, jobject thiz, jfloat freq) -{ - int ret = 0; - int tmp_freq; - -#ifdef MTK_FM_50KHZ_SUPPORT - tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755 -#else - tmp_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875 -#endif - ret = FMR_tune(g_idx, tmp_freq); - - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret?JNI_FALSE:JNI_TRUE; -} - -jfloat seek(JNIEnv *env, jobject thiz, jfloat freq, jboolean isUp) //jboolean isUp; -{ - int ret = 0; - int tmp_freq; - int ret_freq; - float val; - -#ifdef MTK_FM_50KHZ_SUPPORT - tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755 -#elif FMR_SOFT_MUTE_TUEN_SCAN - tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755 - ret = FMR_set_mute(g_idx, 1); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [mute] [ret=%d]\n", __func__, ret); -#else - tmp_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875 -#endif - - ret = FMR_seek(g_idx, tmp_freq, (int)isUp, &ret_freq); - if (ret){ - ret_freq = tmp_freq; //seek error, so use original freq - } - - LOGD("%s, [freq=%d] [ret=%d]\n", __func__, ret_freq, ret); - -#ifdef MTK_FM_50KHZ_SUPPORT - val = (float)ret_freq/100; //Eg, 8755 / 100 --> 87.55 -#elif FMR_SOFT_MUTE_TUEN_SCAN - val = (float)ret_freq/100; //Eg, 8755 / 100 --> 87.55 -#else - val = (float)ret_freq/10; //Eg, 875 / 10 --> 87.5 -#endif - return val; -} - -jshortArray autoScan(JNIEnv *env, jobject thiz) -{ -#define FM_SCAN_CH_SIZE_MAX 200 - int ret = 0; - jshortArray scanChlarray; - int chl_cnt = FM_SCAN_CH_SIZE_MAX; - uint16_t ScanTBL[FM_SCAN_CH_SIZE_MAX]; - - LOGI("%s, [tbl=%p]\n", __func__, ScanTBL); - FMR_Pre_Search(g_idx); - ret = FMR_scan(g_idx, ScanTBL, &chl_cnt); - if (ret < 0) { - LOGE("scan failed!\n"); - scanChlarray = NULL; - goto out; - } - if (chl_cnt > 0) { - scanChlarray = env->NewShortArray(chl_cnt); - env->SetShortArrayRegion(scanChlarray, 0, chl_cnt, (const jshort*)&ScanTBL[0]); - } else { - LOGE("cnt error, [cnt=%d]\n", chl_cnt); - scanChlarray = NULL; - } - FMR_Restore_Search(g_idx); - - if(fmr_data.scan_stop == fm_true) - { - ret = FMR_tune(g_idx,fmr_data.cur_freq); - LOGI("scan stop!!! tune ret=%d",ret); - scanChlarray = NULL; - ret = -1; - } - -out: - LOGD("%s, [cnt=%d] [ret=%d]\n", __func__, chl_cnt, ret); - return scanChlarray; -} - - -/* - * scannew - * @env - davlink VM - * @thiz - current object - * @upper - upper band, Eg: 10800 (108.00Mhz) - * @lower - lower band, Eg: 7600 (76.00Mhz) - * @space - scan space, 5: 50Khz, 10: 100Khz, 20: 200Khz - * Return channel list if success, else NULL - */ -jshortArray scannew(JNIEnv *env, jobject thiz, jint upper, jint lower, jint space) -{ - #define FM_SCAN_CH_SIZE_MAX 200 - int ret = 0; - jshortArray scanChlarray; - int chl_cnt = FM_SCAN_CH_SIZE_MAX; - uint16_t ScanTBL[FM_SCAN_CH_SIZE_MAX]; - int i, j; - - LOGI("%s, [tbl=%p]\n", __func__, ScanTBL); - FMR_Pre_Search(g_idx); - ret = FMR_scan_new(g_idx, ScanTBL, &chl_cnt, upper, lower, space, NULL); - if (ret < 0) { - LOGE("scan failed!\n"); - scanChlarray = NULL; - goto out; - } - - if (chl_cnt > 0){ - scanChlarray = env->NewShortArray(chl_cnt); - env->SetShortArrayRegion(scanChlarray, 0, chl_cnt, (const jshort*)&ScanTBL[0]); - } - else { - LOGE("cnt error, [cnt=%d]\n", ret); - scanChlarray = NULL; - } - - FMR_Restore_Search(g_idx); - -out: - LOGD("%s, [cnt=%d] [ret=%d]\n", __func__, chl_cnt, ret); - return scanChlarray; -} - - -/* - * seeknew - * @env - davlink VM - * @thiz - current object - * @upper - upper band, Eg: 10800 (108.00Mhz) - * @lower - lower band, Eg: 7600 (76.00Mhz) - * @space - seek space, 5: 50Khz, 10: 100Khz, 20: 200Khz - * @start - start freq, Eg, 9000 (90.00Mhz) - * @dir - seek direction, 0: up; 1, down - * @lev - seek rssi threshold, eg -95dbm - * Return channel if success, else -1 - */ -jint seeknew(JNIEnv *env, jobject thiz, jint upper, jint lower, jint space, jint start, jint dir, jint lev) -{ - int ret = 0; - int tmp_freq = start; - int rssi_th = lev; - - ret = FMR_seek_new(g_idx, &tmp_freq, upper, lower, space, dir, &rssi_th, NULL); - if (ret < 0) { - tmp_freq = -1; - } - - LOGD("seeknew result %d, ret %d\n", tmp_freq, ret); - return tmp_freq; -} - - -/* - * tunenew - * @env - davlink VM - * @thiz - current object - * @upper - upper band, Eg: 10800 (108.00Mhz) - * @lower - lower band, Eg: 7600 (76.00Mhz) - * @space - seek space, 5: 50Khz, 10: 100Khz, 20: 200Khz - * @freq - target freq, Eg, 9000 (90.00Mhz) - * Return JNI_TRUE if success, else JNI_FALSE - */ -jboolean tunenew(JNIEnv *env, jobject thiz, jint upper, jint lower, jint space, jint freq) -{ - int ret = 0; - - ret = FMR_tune_new(g_idx, freq, upper, lower, space, NULL); - - LOGD("tunenew ret %d\n", ret); - return (ret < 0) ? JNI_FALSE : JNI_TRUE; -} - -jboolean emsetth(JNIEnv *env, jobject thiz, jint index, jint value) -{ - int ret = 0; - - ret = FMR_EMSetTH(g_idx, index, value); - - LOGD("emsetth ret %d\n", ret); - return (ret < 0) ? JNI_FALSE : JNI_TRUE; -} -jshortArray emcmd(JNIEnv *env, jobject thiz, jshortArray val) -{ - jshortArray eventarray; - uint16_t eventtbl[20]={0}; - uint16_t* cmdtbl=NULL; - - cmdtbl = (uint16_t*) env->GetShortArrayElements(val, NULL); - if(cmdtbl == NULL) - { - LOGE("%s:get cmdtbl error\n", __func__); - goto out; - } - LOGI("EM cmd:=%x %x %x %x %x",cmdtbl[0],cmdtbl[1],cmdtbl[2],cmdtbl[3],cmdtbl[4]); - - if(!cmdtbl[0]) //LANT - { - } - else //SANT - { - } - - switch(cmdtbl[1]) - { - case 0x02: //CQI log tool - { - FMR_EM_CQI_logger(g_idx, cmdtbl[2]); - } - break; - default: - break; - } - - eventarray = env->NewShortArray(20); - env->SetShortArrayRegion(eventarray, 0, 20, (const jshort*)&eventtbl[0]); - //LOGD("emsetth ret %d\n", ret); -out: - return eventarray; -} - -jshort readRds(JNIEnv *env, jobject thiz) -{ - int ret = 0; - uint16_t status = 0; - - ret = FMR_read_rds_data(g_idx, &status); - - if(ret){ - //LOGE("%s,status = 0,[ret=%d]\n", __func__, ret); - status = 0; //there's no event or some error happened - } - - return status; -} - -jshort getPI(JNIEnv *env, jobject thiz) -{ - int ret = 0; - uint16_t pi = 0; - - ret = FMR_get_pi(g_idx, &pi); - - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - pi = -1; //there's some error happened - } - return pi; -} - -jbyte getPTY(JNIEnv *env, jobject thiz) -{ - int ret = 0; - uint8_t pty = 0; - - ret = FMR_get_pty(g_idx, &pty); - - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - pty = -1; //there's some error happened - } - return pty; -} - -jbyteArray getPs(JNIEnv *env, jobject thiz) -{ - int ret = 0; - jbyteArray PSname; - uint8_t *ps = NULL; - int ps_len = 0; - - ret = FMR_get_ps(g_idx, &ps, &ps_len); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - return NULL; - } - PSname = env->NewByteArray(ps_len); - env->SetByteArrayRegion(PSname, 0, ps_len, (const jbyte*)ps); - LOGD("%s, [ret=%d]\n", __func__, ret); - return PSname; -} - -jbyteArray getLrText(JNIEnv *env, jobject thiz) -{ - int ret = 0; - jbyteArray LastRadioText; - uint8_t *rt = NULL; - int rt_len = 0; - - ret = FMR_get_rt(g_idx, &rt, &rt_len); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - return NULL; - } - LastRadioText = env->NewByteArray(rt_len); - env->SetByteArrayRegion(LastRadioText, 0, rt_len, (const jbyte*)rt); - LOGD("%s, [ret=%d]\n", __func__, ret); - return LastRadioText; -} - -jshort activeAf(JNIEnv *env, jobject thiz) -{ - int ret = 0; - jshort ret_freq = 0; - - ret = FMR_active_af(g_idx, (uint16_t*)&ret_freq); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - return 0; - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret_freq; -} - -jshortArray getAFList(JNIEnv *env, jobject thiz) -{ - int ret = 0; - jshortArray AFList; - char *af = NULL; - int af_len = 0; - - //ret = FMR_get_af(g_idx, &af, &af_len); // If need, we should implemate this API - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - return NULL; - } - AFList = env->NewShortArray(af_len); - env->SetShortArrayRegion(AFList, 0, af_len, (const jshort*)af); - LOGD("%s, [ret=%d]\n", __func__, ret); - return AFList; -} - -jshort activeTA(JNIEnv *env, jobject thiz) -{ - int ret = 0; - jshort ret_freq = 0; - - ret = FMR_active_ta(g_idx, (uint16_t*)&ret_freq); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - return 0; - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret_freq; -} - -jshort deactiveTA(JNIEnv *env, jobject thiz) -{ - int ret = 0; - jshort ret_freq = 0; - - ret = FMR_deactive_ta(g_idx, (uint16_t*)&ret_freq); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - return 0; - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret_freq; -} - -jint setRds(JNIEnv *env, jobject thiz, jboolean rdson) -{ - int ret = 0; - int onoff = -1; - - if(rdson == JNI_TRUE){ - onoff = FMR_RDS_ON; - }else{ - onoff = FMR_RDS_OFF; - } - ret = FMR_turn_on_off_rds(g_idx, onoff); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [onoff=%d] [ret=%d]\n", __func__, onoff, ret); - return ret?JNI_FALSE:JNI_TRUE; -} - -jboolean stopScan(JNIEnv *env, jobject thiz) -{ - int ret = 0; - - ret = FMR_stop_scan(g_idx); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [ret=%d]\n", __func__, ret); - return ret?JNI_FALSE:JNI_TRUE; -} - -jint setMute(JNIEnv *env, jobject thiz, jboolean mute) -{ - int ret = 0; - - ret = FMR_set_mute(g_idx, (int)mute); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [mute=%d] [ret=%d]\n", __func__, (int)mute, ret); - return ret?JNI_FALSE:JNI_TRUE; -} - -/****************************************** - * Used to get chip ID. - *Parameter: - * None - *Return value - * 1000: chip AR1000 - * 6616: chip mt6616 - * -1: error - ******************************************/ -jint getchipid(JNIEnv *env, jobject thiz) -{ - int ret = 0; - int chipid = -1; - ret = FMR_get_chip_id(g_idx, &chipid); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [chipid=%x] [ret=%d]\n", __func__, chipid, ret); - return chipid; -} - -/****************************************** - * Inquiry if RDS is support in driver. - * Parameter: - * None - *Return Value: - * 1: support - * 0: NOT support - * -1: error - ******************************************/ -jint isRdsSupport(JNIEnv *env, jobject thiz) -{ - int ret = 0; - int supt = -1; - - ret = FMR_is_rdsrx_support(g_idx, &supt); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [supt=%d] [ret=%d]\n", __func__, supt, ret); - return supt; -} - -/****************************************** - * Inquiry if FM is powered up. - * Parameter: - * None - *Return Value: - * 1: Powered up - * 0: Did NOT powered up - ******************************************/ -jint isFMPoweredUp(JNIEnv *env, jobject thiz) -{ - int ret = 0; - int pwrup = -1; - - ret = FMR_is_fm_pwrup(g_idx, &pwrup); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [pwrup=%d] [ret=%d]\n", __func__, pwrup, ret); - return pwrup; -} -/****************************************** - * Set FM Status. - * Parameter: - * which - * 0: RX power - * 1: TX power - * 2: TX scan - * stat - * JNI_TRUE: on - * JNI_FALSE: off - *Return Value: - * 1: Set status fail - * 0: Set status success - ******************************************/ -jboolean setFmStatus(JNIEnv *env, jobject thiz, jint which, jboolean stat) -{ - int ret = 0; - - ret = FM_set_status(g_idx, which, stat); - - if(!ret) - { - LOGD("%s, [object=%d], [stat=%d], [ret=%d]\n", __func__, which, stat, ret); - } - else - { - LOGD("%s, error, [object=%d] [ret=%d]\n", __func__, which, ret); - } - - return ret?JNI_FALSE:JNI_TRUE; -} - -/****************************************** - * Get FM Status. - * Parameter: - * which - * 0: RX power - * 1: TX power - * 2: TX scan - *Return Value: - * JNI_TRUE: on - * JNI_FALSE: off - ******************************************/ -jboolean getFmStatus(JNIEnv *env, jobject thiz, jint which) -{ - int ret = 0; - bool status = 0; - - ret = FM_get_status(g_idx, which, &status); - - if(!ret) - { - LOGD("%s, [object=%d] [status=%d]\n", __func__, which, status); - } - else - { - LOGD("%s, error, [object=%d]\n", __func__, which); - } - - return status?JNI_TRUE:JNI_FALSE; -} - -/****************************************** - * Inquiry if TX is support in driver. - * Parameter: - * None - *Return Value: - * 1: support - * 0: NOT support - * -1: error - ******************************************/ -jint isTXSupport(JNIEnv *env, jobject thiz) -{ - int ret = 0; - int support = -1; - - ret = FMR_is_tx_support(g_idx, &support); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [support=%d] [ret=%d]\n", __func__, support, ret); - - return support; -} - -/****************************************** - * Start to transmit - * Parameter: - * freq: Which freqency to work on. - *Return Value: - * True: Sucess - * False: Failed - ******************************************/ -jboolean powerupTX(JNIEnv *env, jobject thiz, jfloat freq) -{ - int ret = 0; - int tmp_freq; - -#ifdef MTK_FM_50KHZ_SUPPORT - tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755 -#else - tmp_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875 -#endif - - LOGI("%s, [freq=%d]\n", __func__, tmp_freq); - - ret = FMR_tx_pwrup(g_idx, tmp_freq); - if(ret){ - LOGE("%s, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [freq=%d] [ret=%d]\n", __func__, tmp_freq, ret); - return ret?JNI_FALSE:JNI_TRUE; -} - -/********************************************************* -*Description: Tune FM to a desired channel in TX mode -* -*Date: 2010.12.01 -* -*Parameter: freq, the freqency will be tune -* -*Return: TRUE, if success; FALSE, if failed -*********************************************************/ -jboolean tuneTX(JNIEnv *env, jobject thiz, jfloat freq) -{ - int ret = 0; - int tmp_freq; - -#ifdef MTK_FM_50KHZ_SUPPORT - tmp_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755 -#else - tmp_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875 -#endif - - LOGI("%s, [freq=%d]\n", __func__, tmp_freq); - - ret = FMR_tx_tune(g_idx, tmp_freq); - if(ret){ - LOGE("%s, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [freq=%d] [ret=%d]\n", __func__, tmp_freq, ret); - return ret?JNI_FALSE:JNI_TRUE; -} - -/****************************************** - * Get useable TX frequency list. - * Parameter: - * freq: Start frenquency. - * num: max number to scan - * Return Value: TX frequency list. - ******************************************/ -jshortArray getTXFreqList(JNIEnv *env, jobject thiz, jfloat freq, jint scandir, jint num) -{ - int ret = 0; - uint16_t tbl[TX_SCAN_MAX+1] = {0}; - int start_freq; - int dir = scandir; - int scan_num = num; - -#ifdef MTK_FM_50KHZ_SUPPORT - start_freq = (int)(freq * 100); //Eg, 87.55 * 100 --> 8755 -#else - start_freq = (int)(freq * 10); //Eg, 87.5 * 10 --> 875 -#endif - - LOGI("%s, [freq=%d] [dir=%d] [num=%d]\n", __func__, start_freq, dir, scan_num); - ret = FMR_tx_scan(g_idx, start_freq, dir, &scan_num, &tbl[0]); - if(ret){ - LOGE("%s:failed, [ret=%d]\n", __func__, ret); - goto err; - } - - if ((scan_num > 0) && (scan_num < (TX_SCAN_MAX+1))){ - jshortArray scanChlarray ; - int i = 0; - scanChlarray = env->NewShortArray(scan_num); - env->SetShortArrayRegion(scanChlarray, 0, scan_num, (const jshort*)&tbl[0]); - LOGD("Success,[chl_cnt=%d]\n", scan_num); - for(i = 0; i < scan_num; i++){ - LOGI("NO.%d:%d\n", i+1, tbl[i]); - } - return scanChlarray; - } - -err: - LOGE("%s:Failed,[chl_cnt=%d] [ret=%d]\n", __func__, scan_num, ret); - return NULL; -} - -/****************************************** - * Inquiry if RDS TX is support in driver. - * Parameter: - * None - *Return Value: - * 1: support - * 0: NOT support - * -1: error - ******************************************/ -jint isRDSTXsupport(JNIEnv *env, jobject thiz) -{ - int ret = 0; - int support = -1; - - ret = FMR_is_rdstx_support(g_idx, &support); - if(ret){ - LOGE("%s, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [support=%d] [ret=%d]\n", __func__, support, ret); - - return support; -} - -/****************************************** - * Enable/Disable RDS TX - * Parameter: - * Enable: - JNI_TRUE : To enable RDS TX - JNI_FALSE: To disable RDS TX - *Return Value: - * JNI_TRUE: Success - * JNI_FALSE: Failed - ******************************************/ -jboolean setRDSTXEnabled(JNIEnv *env, jobject thiz, jboolean enable) -{ - int ret = 0; - jboolean jret = JNI_FALSE; - int onoff = -1; - - if(JNI_FALSE == enable){ - onoff = 0; - }else if(JNI_TRUE == enable){ - onoff = 1; - }else{ - LOGE("%s:fail, para error\n", __func__); - jret = JNI_FALSE; - goto out; - } - ret = FMR_rdstx_onoff(g_idx, onoff); - if(ret){ - jret = JNI_FALSE; - }else{ - jret = JNI_TRUE; - } -out: - LOGD("%s: [enable=%d] [ret=%d]\n", __func__, onoff, ret); - return jret; -} - -/****************************************** - * This function is used to set RDS data. The blockA is stored in parameter pi, The rest three block(B, C, D) is stored in parameter rds, - * parameter rds can also contains many pakage. - * Parameter: - * pi: PI code - * ps: PS name, make sure it's 8 bytes. - * rds: RDS blockB, C and D - * rdscnt: The number of pakages papameter rds contains. - *Return Value: - * JNI_TRUE: Success - * JNI_FALSE: Failed - ******************************************/ -jboolean setRDSTX(JNIEnv *env, jobject thiz, jshort pi, jcharArray ps, jshortArray rds, jint rdscnt) -{ - int ret = 0; - jboolean jret = JNI_TRUE; - uint16_t rds_pi = pi; - uint8_t *rds_ps = NULL; - int rds_ps_len = 8; - uint16_t *rdsdata = NULL; - int rds_data_len = rdscnt; - - if(ps){ - rds_ps = (unsigned char*) env->GetCharArrayElements(ps, NULL); - if(rds_ps == NULL){ - LOGE("%s:get ps error\n", __func__); - jret = JNI_FALSE; - goto out; - } - }else{ - LOGE("%s:NULL java array\n", __func__); - jret = JNI_FALSE; - goto out; - } - - if(rds){ - rdsdata = (uint16_t*) env->GetShortArrayElements(rds, NULL); - if(rdsdata == NULL){ - LOGE("%s:get rdsdata error\n", __func__); - jret = JNI_FALSE; - goto out; - } - }else{ - LOGE("%s:NULL java array\n", __func__); - jret = JNI_FALSE; - goto out; - } - - ret = FMR_rdstx(g_idx, rds_pi, rds_ps, rds_ps_len, rdsdata, rds_data_len); - if(ret){ - LOGE("%s:failed, [ret=%d]\n", __func__, ret); - jret = JNI_FALSE; - } - -out: - LOGD("%s, [ret=%d]\n", __func__, ret); - return jret; -} - -/****************************************** - * FM over BT - * Parameter: - * Enable: - JNI_TRUE : To enable FM over BT - JNI_FALSE: To disable FM over BT - *Return Value: - * JNI_TRUE: Success - * JNI_FALSE: Failed - ******************************************/ -jboolean setFMViaBTController(JNIEnv *env, jobject thiz, jboolean enable) -{ - int ret = 0; - int jret = JNI_FALSE; - int onoff = -1; - - if(JNI_FALSE == enable){ - onoff = 0; - }else if(JNI_TRUE == enable){ - onoff = 1; - }else{ - LOGE("%s:fail, para error\n", __func__); - jret = JNI_FALSE; - goto out; - } - ret = FMR_fm_over_bt(g_idx, onoff); - if(ret){ - LOGE("%s:fail\n", __func__); - jret = JNI_FALSE; - }else{ - jret = JNI_TRUE; - } -out: - LOGD("%s: [enable=%d] [ret=%d]\n", __func__, onoff, ret); - return jret; -} - -/****************************************** - * SwitchAntenna - * Parameter: - * antenna: - 0 : switch to long antenna - 1: switch to short antenna - *Return Value: - * 0: Success - * 1: Failed - * 2: Not support - ******************************************/ -jint switchAntenna(JNIEnv *env, jobject thiz, jint antenna) -{ - int ret = 0; - jint jret = 0; - int ana = -1; - - if(0 == antenna){ - ana = FM_LONG_ANA; - }else if(1 == antenna){ - ana = FM_SHORT_ANA; - }else{ - LOGE("%s:fail, para error\n", __func__); - jret = JNI_FALSE; - goto out; - } - ret = FMR_ana_switch(g_idx, ana); - if(ret == -ERR_UNSUPT_SHORTANA){ - LOGW("Not support switchAntenna\n"); - jret = 2; - }else if(ret){ - LOGE("switchAntenna(), error\n"); - jret = 1; - }else{ - jret = 0; - } -out: - LOGD("%s: [antenna=%d] [ret=%d]\n", __func__, ana, ret); - return jret; -} - -/****************************************** - * Inquiry if FM is stereoMono. - * Parameter: - * None - *Return Value: - * JNI_TRUE: stereo - * JNI_FALSE: mono - ******************************************/ -jboolean stereoMono(JNIEnv *env, jobject thiz) -{ - int ret = 0; - int stemono = -1; - - ret = FMR_get_stereomono(g_idx, &stemono); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [stemono=%d] [ret=%d]\n", __func__, stemono, ret); - - return stemono?JNI_TRUE:JNI_FALSE; -} - -/****************************************** - * Force set to stero/mono mode. - * Parameter: - * type: JNI_TRUE, mono; JNI_FALSE, stero - *Return Value: - * JNI_TRUE: success - * JNI_FALSE: failed - ******************************************/ -jboolean setStereoMono(JNIEnv *env, jobject thiz, jboolean type) -{ - int ret = 0; - ret = FMR_set_stereomono(g_idx, ((type == JNI_TRUE) ? 1 : 0)); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - LOGD("%s,[ret=%d]\n", __func__, ret); - - return (ret==0) ? JNI_TRUE : JNI_FALSE; -} - -/****************************************** - * Read cap array of short antenna. - * Parameter: - * None - *Return Value: - * CapArray - ******************************************/ -jshort readCapArray(JNIEnv *env, jobject thiz) -{ - int ret = 0; - int caparray = -1; - - ret = FMR_get_caparray(g_idx, &caparray); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - LOGD("%s, [caparray=%d] [ret=%d]\n", __func__, caparray, ret); - - return (jshort)caparray; -} - -/****************************************** - * Read cap array of short antenna. - * Parameter: - * None - *Return Value: - * CapArray : 0~100 - ******************************************/ -jshort readRdsBler(JNIEnv *env, jobject thiz) -{ - int ret = 0; - int badratio = -1; - - ret = FMR_get_badratio(g_idx, &badratio); - if(ret){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - } - - if(badratio > 100){ - badratio = 100; - LOGW("badratio value error, give a max value!"); - }else if(badratio < 0){ - badratio = 0; - LOGW("badratio value error, give a min value!"); - } - LOGD("%s, [badratio=%d] [ret=%d]\n", __func__, badratio, ret); - - return (jshort)badratio; -} - -jintArray getHardwareVersion(JNIEnv *env, jobject thiz) -{ - int ret = 0; - jintArray hw_info; - int *info = NULL; - int info_len = 0; - - ret = FMR_get_hw_info(g_idx, &info, &info_len); - if(ret < 0){ - LOGE("%s, error, [ret=%d]\n", __func__, ret); - return NULL; - } - hw_info = env->NewIntArray(info_len); - env->SetIntArrayRegion(hw_info, 0, info_len, (const jint*)info); - LOGD("%s, [ret=%d]\n", __func__, ret); - return hw_info; -} - -static const char *classPathNameRx = "com/mediatek/fmradio/FmRadioNative"; -static const char *classPathNameTx = "com/mediatek/FMTransmitter/FMTransmitterNative"; - - -static JNINativeMethod methodsRx[] = { - {"openDev", "()Z", (void*)openDev }, //1 - {"closeDev", "()Z", (void*)closeDev }, //2 - {"powerUp", "(F)Z", (void*)powerUp }, //3 - {"powerDown", "(I)Z", (void*)powerDown }, //4 - {"tune", "(F)Z", (void*)tune }, //5 - {"seek", "(FZ)F", (void*)seek }, //6 - {"autoScan", "()[S", (void*)autoScan }, //7 - {"stopScan", "()Z", (void*)stopScan }, //8 - {"readRssi", "()I", (void*)readRssi }, //9 - {"setRds", "(Z)I", (void*)setRds }, //10 - {"readRds", "()S", (void*)readRds }, //11 will pending here for get event status - //{"getPI", "()S", (void*)getPI }, //12 - //{"getPTY", "()B", (void*)getPTY }, //13 - {"getPs", "()[B", (void*)getPs }, //14 - {"getLrText", "()[B", (void*)getLrText}, //15 - {"activeAf", "()S", (void*)activeAf}, //16 - //{"getAFList", "()[S", (void*)getAFList }, //17 not need show actually - //{"activeTA", "()S", (void*)activeTA}, //18 - //{"deactiveTA","()S", (void*)deactiveTA}, //19 - {"setMute", "(Z)I", (void*)setMute}, //20 - //{"getchipid", "()I", (void*)getchipid}, //21 - {"isRdsSupport", "()I", (void*)isRdsSupport}, //22 - //{"isFMPoweredUp", "()I", (void*)isFMPoweredUp}, //23 - //{"setFMViaBTController", "(Z)Z", (void*)setFMViaBTController}, //24 - {"switchAntenna", "(I)I", (void*)switchAntenna}, //25 - {"stereoMono", "()Z", (void*)stereoMono}, //26 - {"readCapArray", "()S", (void*)readCapArray}, //27 - {"readRdsBler", "()S", (void*)readRdsBler}, //28 - {"setStereoMono", "(Z)Z", (void*)setStereoMono}, //29 - {"getHardwareVersion", "()[I", (void*)getHardwareVersion}, //30 - //{"scannew", "(III)[S", (void*)scannew}, //31 - //{"seeknew", "(IIIIII)I", (void*)seeknew}, //32 - //{"tunenew", "(IIII)Z", (void*)tunenew}, //33 - {"emsetth","(II)Z",(void*)emsetth},//34 - {"emcmd","([S)[S",(void*)emcmd},//35 - {"setFmStatus", "(IZ)Z",(void*)setFmStatus}, - {"getFmStatus", "(I)Z",(void*)getFmStatus}, -}; - -static JNINativeMethod methodsTx[] = { - {"openDev", "()Z", (void*)openDev }, //1 - {"closeDev", "()Z", (void*)closeDev }, //2 - {"powerUp", "(F)Z", (void*)powerUp }, //3 - {"powerDown", "(I)Z", (void*)powerDown }, //4 - {"tune", "(F)Z", (void*)tune }, //5 - {"seek", "(FZ)F", (void*)seek }, //6 - {"autoScan", "()[S", (void*)autoScan }, //7 - {"stopScan", "()Z", (void*)stopScan }, //8 - //{"getrssi", "()I", (void*)getrssi }, //9 - {"setRds", "(Z)I", (void*)setRds }, //10 - {"readRds", "()S", (void*)readRds }, //11 will pending here for get event status - //{"getPI", "()S", (void*)getPI }, //12 - //{"getPTY", "()B", (void*)getPTY }, //13 - {"getPs", "()[B", (void*)getPs }, //14 - {"getLrText", "()[B", (void*)getLrText}, //15 - {"activeAf", "()S", (void*)activeAf}, //16 - //{"getAFList", "()[S", (void*)getAFList }, //17 not need show actually - {"activeTA", "()S", (void*)activeTA}, //18 - {"deactiveTA","()S", (void*)deactiveTA}, //19 - {"setMute", "(Z)I", (void*)setMute}, //20 - //{"getchipid", "()I", (void*)getchipid}, //21 - {"isRdsSupport", "()I", (void*)isRdsSupport}, //23 - {"isTXSupport", "()I", (void*)isTXSupport}, //24 - {"powerupTX", "(F)Z", (void*)powerupTX}, //25 - {"getTXFreqList", "(FII)[S", (void*)getTXFreqList }, //26 - {"isRDSTXSupport", "()I", (void*)isRDSTXsupport}, //27 - {"setRDSTXEnabled", "(Z)Z", (void*)setRDSTXEnabled}, //28 - {"setRDSTX", "(S[C[SI)Z", (void*)setRDSTX}, //29 - {"tuneTX", "(F)Z", (void*)tuneTX}, //30 - {"setFmStatus", "(IZ)Z",(void*)setFmStatus}, - {"getFmStatus", "(I)Z",(void*)getFmStatus}, -}; - - -/* - * Register several native methods for one class. - */ -static jint registerNativeMethods(JNIEnv* env, const char* className, - JNINativeMethod* gMethods, int numMethods) -{ - jclass clazz; - - clazz = env->FindClass(className); - if(env->ExceptionCheck()){ - env->ExceptionDescribe(); - env->ExceptionClear(); - } - if (clazz == NULL) { - LOGE("Native registration unable to find class '%s'", className); - return JNI_FALSE; - } - if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) { - LOGE("RegisterNatives failed for '%s'", className); - return JNI_FALSE; - } - - LOGD("%s, success\n", __func__); - return JNI_TRUE; -} - -/* - * Register native methods for all classes we know about. - * - * returns JNI_TRUE on success. - */ -static jint registerNatives(JNIEnv* env) -{ - jint ret = JNI_FALSE; - - if (registerNativeMethods(env, classPathNameRx,methodsRx, - sizeof(methodsRx) / sizeof(methodsRx[0]))){ - ret = JNI_TRUE; - } - - if (registerNativeMethods(env, classPathNameTx,methodsTx, - sizeof(methodsTx) / sizeof(methodsTx[0]))){ - ret = JNI_TRUE; - } - - LOGD("%s, done\n", __func__); - return ret; -} - - -// ---------------------------------------------------------------------------- - -/* - * This is called by the VM when the shared library is first loaded. - */ - -typedef union { - JNIEnv* env; - void* venv; -} UnionJNIEnvToVoid; - -jint JNI_OnLoad(JavaVM* vm, void* reserved) -{ - UnionJNIEnvToVoid uenv; - uenv.venv = NULL; - jint result = -1; - JNIEnv* env = NULL; - - LOGI("JNI_OnLoad"); - - if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) { - LOGE("ERROR: GetEnv failed"); - goto bail; - } - env = uenv.env; - - if (registerNatives(env) != JNI_TRUE) { - LOGE("ERROR: registerNatives failed"); - goto bail; - } - - if ((g_idx = FMR_init()) < 0) { - goto bail; - } - result = JNI_VERSION_1_4; - -bail: - return result; -} diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt519x.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt519x.cpp deleted file mode 100644 index 7416b83..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/mt519x.cpp +++ /dev/null @@ -1,342 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" -#include <ATVCtrl.h> - -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "FMLIB_519x" - -extern "C" { - using namespace android; - - int ATVC_fm_powerup(void* parm){return ATVCtrl::ATVC_fm_powerup(parm);} - int ATVC_fm_powerdown(void){return ATVCtrl::ATVC_fm_powerdown();} - int ATVC_fm_getrssi(int* val){return ATVCtrl::ATVC_fm_getrssi(val);} - int ATVC_fm_tune(void* parm){return ATVCtrl::ATVC_fm_tune(parm);} - int ATVC_fm_seek(void* parm){return ATVCtrl::ATVC_fm_seek(parm);} - int ATVC_fm_scan(void* parm){return ATVCtrl::ATVC_fm_scan(parm);} - int ATVC_fm_mute(int val){return ATVCtrl::ATVC_fm_mute(val);} - int ATVC_fm_getchipid(unsigned short int* val){return ATVCtrl::ATVC_fm_getchipid(val);} - int ATVC_fm_isRDSsupport(int* val){return ATVCtrl::ATVC_fm_isRDSsupport(val);} - int ATVC_fm_isFMPowerUp(int* val){return ATVCtrl::ATVC_fm_isFMPowerUp(val);} -} - -#ifdef __cplusplus -extern "C" { -#endif - -#define MT519X_VFD_MAX 10 -#define MT519X_VFD_BASE 20 - -static int g_stopscan = 0; -static int vfd[MT519X_VFD_MAX] = {0}; - -int MT519X_open_dev(const char *pname, int *fd); -int MT519X_close_dev(int fd); -int MT519X_pwr_up(int fd, int band, int freq); -int MT519X_pwr_down(int fd, int type); -int MT519X_seek(int fd, int *freq, int band, int dir, int lev); -int MT519X_sw_scan(int fd, uint16_t *scan_tbl, int *max_num, int band, int sort); -int MT519X_scan(int fd, uint16_t *tbl, int *num); -int MT519X_stop_scan(int fd); -int MT519X_tune(int fd, int freq, int band); -int MT519X_set_mute(int fd, int mute); -int MT519X_is_fm_pwrup(int fd, int *pwrup); -int MT519X_is_rdsrx_support(int fd, int *supt); -int MT519X_is_rdstx_support(int fd, int *supt); -int MT519X_turn_on_off_rds(int fd, int onoff); -int MT519X_get_chip_id(int fd, int *chipid); - - -void MT519X_init(struct fm_cbk_tbl *cbk_tbl) -{ - //Basic functions. - cbk_tbl->open_dev = MT519X_open_dev; - cbk_tbl->close_dev = MT519X_close_dev; - cbk_tbl->pwr_up = MT519X_pwr_up; - cbk_tbl->pwr_down = MT519X_pwr_down; - cbk_tbl->seek = MT519X_seek; - cbk_tbl->scan = MT519X_sw_scan; //hw_scan or sw_scan. - cbk_tbl->stop_scan = MT519X_stop_scan; - cbk_tbl->tune = MT519X_tune; - cbk_tbl->set_mute = MT519X_set_mute; - cbk_tbl->is_fm_pwrup = MT519X_is_fm_pwrup; - cbk_tbl->is_rdsrx_support = MT519X_is_rdsrx_support; - cbk_tbl->is_rdstx_support = MT519X_is_rdstx_support; - cbk_tbl->turn_on_off_rds = MT519X_turn_on_off_rds; - cbk_tbl->get_chip_id = MT519X_get_chip_id; - - return; -} - -int MT519X_open_dev(const char *pname, int *fd) -{ - int idx; - int ret = 0; - - for (idx=0;idx<MT519X_VFD_MAX;idx++) { - if (vfd[idx] == 0) { - vfd[idx] = 1; - *fd = idx+MT519X_VFD_BASE; - return ret; - } - } - - return -ERR_INVALID_FD; -} - -int MT519X_close_dev(int fd) -{ - if (vfd[fd-MT519X_VFD_BASE] == 1) { - vfd[fd-MT519X_VFD_BASE] = 0; - return 0; - } else { - return -1; - } -} - -int MT519X_pwr_up(int fd, int band, int freq) -{ - int ret = 0; - struct fm_tune_parm parm; - - bzero(&parm, sizeof(struct fm_tune_parm)); - - parm.band = band; - parm.freq = freq; - parm.hilo = FM_AUTO_HILO_OFF; - parm.space = FM_SEEK_SPACE; - - if(ATVC_fm_powerup(&parm)) - { - ret = 0; - } - else - { - ret = ERR_FW_NORES; - } - return ret; -} - -int MT519X_pwr_down(int fd, int type) -{ - int ret = 0; - - if(ATVC_fm_powerdown()) - { - ret = 0; - } - else - { - ret = ERR_FW_NORES; - } - return ret; -} - -int MT519X_get_chip_id(int fd, int *chipid) -{ - int ret = 0; - - ret = ATVC_fm_getchipid((short unsigned int *)chipid)?0:1; - return ret; -} - -int MT519X_get_rssi(int fd, int *rssi) -{ - int ret = 0; - - ret = ATVC_fm_getrssi(rssi)?0:1; - return ret; -} - -int MT519X_tune(int fd, int freq, int band) -{ - int ret = 0; - struct fm_tune_parm parm; - - bzero(&parm, sizeof(struct fm_tune_parm)); - - parm.band = band; - parm.freq = freq; - parm.hilo = FM_AUTO_HILO_OFF; - parm.space = FM_SEEK_SPACE; - - ret = ATVC_fm_tune(&parm); - return ret?0:1; -} - -int MT519X_seek(int fd, int *freq, int band, int dir, int lev) -{ - int ret = 0; - struct fm_seek_parm parm; - - bzero(&parm, sizeof(struct fm_tune_parm)); - - parm.band = band; - parm.freq = *freq; - parm.hilo = FM_AUTO_HILO_OFF; - parm.space = FM_SEEK_SPACE; - if (dir == 1) { - parm.seekdir = FM_SEEK_UP; - } else if (dir == 0) { - parm.seekdir = FM_SEEK_DOWN; - } - parm.seekth = lev; - - ret = ATVC_fm_seek(&parm)?0:1; - if (ret == 0) { - *freq = parm.freq; - } - - return ret; -} - -int MT519X_set_mute(int fd, int mute) -{ - int ret = 0; - - ret = ATVC_fm_mute(mute)?0:1; - - return ret; -} - -int MT519X_is_fm_pwrup(int fd, int *pwrup) -{ - int ret = 0; - - ret = ATVC_fm_isFMPowerUp(pwrup); - return ret; -} - -int MT519X_is_rdsrx_support(int fd, int *supt) -{ - int ret = 0; - - ret = ATVC_fm_isRDSsupport(supt)?0:1; - return ret; -} - -int MT519X_is_rdstx_support(int fd, int *supt) -{ - int ret = 0; - - *supt = 0; - return ret; -} - -int MT519X_sw_scan(int fd, uint16_t *scan_tbl, int *max_num, int band, int sort) -{ - int ret = 0; - int chl_cnt = 0; - struct fm_seek_parm parm; - int start_freq = FM_FREQ_MIN; - - g_stopscan = false; - - do - { - bzero(&parm, sizeof(struct fm_tune_parm)); - parm.band = band; - parm.freq = start_freq; - parm.hilo = FM_AUTO_HILO_OFF; - parm.space = FM_SEEK_SPACE; - parm.seekdir = FM_SEEK_UP; - parm.seekth = FM_SEEKTH_LEVEL_DEFAULT; - - ret = ATVC_fm_seek(&parm)?0:1; - - if (ret) - { - LOGE("FM scan faild:%d:%d\n", ret, parm.err); - return NULL; - } - - if((parm.err == FM_SUCCESS) - && (chl_cnt < *max_num) - && (parm.freq > start_freq)) - { - scan_tbl[chl_cnt] = parm.freq; - chl_cnt++; - LOGI("FM scan:%d:%d\n", chl_cnt, parm.freq); - } - else - { - break; - } - start_freq = parm.freq; - } while (!g_stopscan); - - if(g_stopscan) - { - LOGI("FM force stop scan\n"); - g_stopscan = false; - } - - *max_num = chl_cnt; - - if(g_stopscan) - { - LOGI("FM force stop scan\n"); - g_stopscan = false; - } - - LOGI("FM sw scan %d station found\n", chl_cnt); - return ret; -} - - -int MT519X_stop_scan(int fd) -{ - int ret = 0; - - g_stopscan = 1; - return ret; -} - -int MT519X_turn_on_off_rds(int fd, int onoff) -{ - return 0; -} - -#ifdef __cplusplus -} -#endif - - diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6616.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6616.cpp deleted file mode 100644 index a41e2c8..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/mt6616.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" - -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "FMLIB_MT6616" - -#ifdef __cplusplus -extern "C" { -#endif - -int MT6616_open_dev(const char *pname, int *fd) -{ - int ret = 0; - ret = COM_open_dev(pname, fd); - //TODO important!!!, check if it's valid FM chip, hard code here. - - ret = bt_set_controller_force_sleep(FM_CHIP_MT6616); - - return ret; -} - -int MT6616_stop_scan(int fd) -{ - int ret = 0; - if (fd < 0){ - LOGE("FM fd unavailable for stopscan\n"); - ret = ERR_INVALID_FD; - goto out; - } - - if(lseek(fd, 0, SEEK_END) != -1){ - LOGE("Stopscan failed\n"); - ret = -1; - goto out; - } - else - LOGD("Stopscan Success,[fd=%d]\n", fd); -out: - return ret; -} - -void MT6616_init(struct fm_cbk_tbl *cbk_tbl) -{ - //Basic functions. - cbk_tbl->open_dev = MT6616_open_dev; - cbk_tbl->close_dev = COM_close_dev; - cbk_tbl->pwr_up = COM_pwr_up; - cbk_tbl->pwr_down = COM_pwr_down; - cbk_tbl->seek = COM_seek; - cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan. - cbk_tbl->stop_scan = MT6616_stop_scan; - cbk_tbl->tune = COM_tune; - cbk_tbl->set_mute = COM_set_mute; - cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup; - cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support; - cbk_tbl->is_rdstx_support = COM_is_rdstx_support; - cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds; - cbk_tbl->get_chip_id = COM_get_chip_id; - //For RDS RX. - cbk_tbl->read_rds_data = COM_read_rds_data; - cbk_tbl->get_pi = COM_get_pi; - cbk_tbl->get_ps = COM_get_ps; - cbk_tbl->get_pty = COM_get_pty; - cbk_tbl->get_rssi = COM_get_rssi; - cbk_tbl->get_rt = COM_get_rt; - cbk_tbl->active_af = COM_active_af; - cbk_tbl->active_ta = COM_active_ta; - cbk_tbl->deactive_ta = COM_deactive_ta; - return; -} - -#ifdef __cplusplus -} -#endif - diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6620.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6620.cpp deleted file mode 100644 index dea2bd6..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/mt6620.cpp +++ /dev/null @@ -1,142 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" - -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "FMLIB_MT6620" - -#ifdef __cplusplus -extern "C" { -#endif - -int MT6620_open_dev(const char *pname, int *fd) -{ - int ret = 0; - ret = COM_open_dev(pname, fd); - - //TODO important!!!, check if it's valid FM chip here. - - return ret; -} - -int MT6620_stop_scan(int fd) -{ - int ret = 0; - if (fd < 0){ - LOGE("FM fd unavailable for stopscan\n"); - ret = ERR_INVALID_FD; - goto out; - } - - //becare for the impliment of lseek in FM driver char device driver - if(lseek(fd, 0, SEEK_END) != 0){ - LOGE("Stopscan failed\n"); - ret = -1; - goto out; - }else - LOGD("Stopscan Success,[fd=%d]\n", fd); -out: - return ret; -} - -void MT6620_init(struct fm_cbk_tbl *cbk_tbl) -{ - //Basic functions. - cbk_tbl->open_dev = MT6620_open_dev; - cbk_tbl->close_dev = COM_close_dev; - cbk_tbl->pwr_up = COM_pwr_up; - cbk_tbl->pwr_down = COM_pwr_down; - cbk_tbl->seek = COM_seek; - cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan. - cbk_tbl->scan_new = COM_hw_scan_new; - cbk_tbl->seek_new = COM_seek_new; - cbk_tbl->tune_new = COM_tune_new; - cbk_tbl->fastget_rssi = COM_fastget_rssi; - cbk_tbl->stop_scan = MT6620_stop_scan; - cbk_tbl->tune = COM_tune; - cbk_tbl->set_mute = COM_set_mute; - cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup; - cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support; - cbk_tbl->is_rdstx_support = COM_is_rdstx_support; - cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds; - cbk_tbl->get_chip_id = COM_get_chip_id; - //For RDS RX. - cbk_tbl->read_rds_data = COM_read_rds_data; - cbk_tbl->get_pi = COM_get_pi; - cbk_tbl->get_ps = COM_get_ps; - cbk_tbl->get_pty = COM_get_pty; - cbk_tbl->get_rssi = COM_get_rssi; - cbk_tbl->get_rt = COM_get_rt; - cbk_tbl->active_af = COM_active_af; - cbk_tbl->active_ta = COM_active_ta; - cbk_tbl->deactive_ta = COM_deactive_ta; - //FOR RDS TX. - //TODO RDS TX functions. - cbk_tbl->is_tx_support = COM_tx_support; - cbk_tbl->tx_pwrup = COM_tx_pwrup; - cbk_tbl->rdstx_onoff = COM_rdstx_onoff; - cbk_tbl->tx_tune = COM_tx_tune; - cbk_tbl->tx_scan = COM_tx_scan; - cbk_tbl->rdstx = COM_rdstx; - //FM over BT - cbk_tbl->fm_over_bt = COM_fm_over_bt; - //FM short antenna - cbk_tbl->ana_switch = COM_ana_switch; - cbk_tbl->get_caparray = COM_get_caparray; - //RX EM mode use - cbk_tbl->get_badratio = COM_get_badratio; - cbk_tbl->get_stereomono = COM_get_stereomono; - cbk_tbl->set_stereomono = COM_set_stereomono; - cbk_tbl->get_hw_info = COM_get_hw_info; - - cbk_tbl->soft_mute_tune = COM_Soft_Mute_Tune; - cbk_tbl->is_dese_chan = COM_is_dese_chan;//COM_dese_chan_check; - cbk_tbl->desense_check = COM_desense_check; - cbk_tbl->pre_search = COM_pre_search; - cbk_tbl->restore_search = COM_restore_search; - //EM - cbk_tbl->set_search_threshold = COM_set_search_threshold; - return; -} - -#ifdef __cplusplus -} -#endif - diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6626.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6626.cpp deleted file mode 100644 index 8b5ad35..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/mt6626.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -int MT6626_open_dev(const char *pname, int *fd) -{ - int ret = 0; - ret = COM_open_dev(pname, fd); - //TODO important!!!, check if it's valid FM chip, hard code here. - - ret = bt_set_controller_force_sleep(FM_CHIP_MT6626); - - return ret; -} - -int MT6626_stop_scan(int fd) -{ - int ret = 0; - if (fd < 0){ - LOGE("FM fd unavailable for stopscan\n"); - ret = ERR_INVALID_FD; - goto out; - } - - if(lseek(fd, 0, SEEK_END) != -1){ - LOGE("Stopscan failed\n"); - ret = -1; - goto out; - } - else - LOGD("Stopscan Success,[fd=%d]\n", fd); -out: - return ret; -} - -void MT6626_init(struct fm_cbk_tbl *cbk_tbl) -{ - //Basic functions. - cbk_tbl->open_dev = MT6626_open_dev; - cbk_tbl->close_dev = COM_close_dev; - cbk_tbl->pwr_up = COM_pwr_up; - cbk_tbl->pwr_down = COM_pwr_down; - cbk_tbl->seek = COM_seek; - cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan. - cbk_tbl->scan_new = COM_hw_scan_new; - cbk_tbl->seek_new = COM_seek_new; - cbk_tbl->tune_new = COM_tune_new; - cbk_tbl->stop_scan = MT6626_stop_scan; - cbk_tbl->tune = COM_tune; - cbk_tbl->set_mute = COM_set_mute; - cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup; - cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support; - cbk_tbl->is_rdstx_support = COM_is_rdstx_support; - cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds; - cbk_tbl->get_chip_id = COM_get_chip_id; - cbk_tbl->get_rssi = COM_get_rssi; - cbk_tbl->ana_switch = COM_ana_switch; - //For RDS RX. - cbk_tbl->read_rds_data = COM_read_rds_data; - cbk_tbl->get_pi = COM_get_pi; - cbk_tbl->get_ps = COM_get_ps; - cbk_tbl->get_pty = COM_get_pty; - cbk_tbl->get_rt = COM_get_rt; - cbk_tbl->active_af = COM_active_af; - cbk_tbl->active_ta = COM_active_ta; - cbk_tbl->deactive_ta = COM_deactive_ta; - //RX EM mode use - cbk_tbl->get_caparray = COM_get_caparray; - cbk_tbl->get_badratio = COM_get_badratio; - cbk_tbl->get_stereomono = COM_get_stereomono; - cbk_tbl->set_stereomono = COM_set_stereomono; - return; -} - -#ifdef __cplusplus -} -#endif - diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6627.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6627.cpp deleted file mode 100644 index 8af454c..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/mt6627.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -int MT6627_open_dev(const char *pname, int *fd) -{ - int ret = 0; - ret = COM_open_dev(pname, fd); - - //TODO important!!!, check if it's valid FM chip here. - - return ret; -} - -/*int MT6627_stop_scan(int fd) -{ - int ret = 0; - if (fd < 0){ - LOGE("FM fd unavailable for stopscan\n"); - ret = ERR_INVALID_FD; - goto out; - } - - if(lseek(fd, 0, SEEK_END) != 0){ - LOGE("Stopscan failed\n"); - ret = -1; - goto out; - }else - LOGD("Stopscan Success,[fd=%d]\n", fd); -out: - return ret; -}*/ - -void MT6627_init(struct fm_cbk_tbl *cbk_tbl) -{ - //Basic functions. - cbk_tbl->open_dev = MT6627_open_dev; - cbk_tbl->close_dev = COM_close_dev; - cbk_tbl->pwr_up = COM_pwr_up; - cbk_tbl->pwr_down = COM_pwr_down; - //cbk_tbl->seek = COM_seek; - //cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan. - //cbk_tbl->scan_new = COM_hw_scan_new; - //cbk_tbl->seek_new = COM_seek_new; - //cbk_tbl->tune_new = COM_tune_new; - //cbk_tbl->stop_scan = MT6627_stop_scan; - cbk_tbl->tune = COM_tune; - cbk_tbl->set_mute = COM_set_mute; - cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup; - cbk_tbl->fm_set_status = COM_fm_set_status; - cbk_tbl->fm_get_status = COM_fm_get_status; - cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support; - cbk_tbl->is_rdstx_support = COM_is_rdstx_support; - cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds; - cbk_tbl->get_chip_id = COM_get_chip_id; - //For RDS RX. - cbk_tbl->read_rds_data = COM_read_rds_data; - cbk_tbl->get_pi = COM_get_pi; - cbk_tbl->get_ps = COM_get_ps; - cbk_tbl->get_pty = COM_get_pty; - cbk_tbl->get_rssi = COM_get_rssi; - cbk_tbl->get_rt = COM_get_rt; - cbk_tbl->active_af = COM_active_af; - cbk_tbl->active_ta = COM_active_ta; - cbk_tbl->deactive_ta = COM_deactive_ta; - //FM over BT - //cbk_tbl->fm_over_bt = COM_fm_over_bt; - //FM short antenna - cbk_tbl->ana_switch = COM_ana_switch; - cbk_tbl->get_caparray = COM_get_caparray; - //RX EM mode use - cbk_tbl->get_badratio = COM_get_badratio; - cbk_tbl->get_stereomono = COM_get_stereomono; - cbk_tbl->set_stereomono = COM_set_stereomono; - cbk_tbl->get_cqi = COM_get_cqi; - cbk_tbl->is_dese_chan = COM_is_dese_chan; - cbk_tbl->desense_check = COM_desense_check; - cbk_tbl->get_hw_info = COM_get_hw_info; - //soft mute tune - cbk_tbl->soft_mute_tune = COM_Soft_Mute_Tune; - cbk_tbl->pre_search = COM_pre_search; - cbk_tbl->restore_search = COM_restore_search; - //EM - cbk_tbl->set_search_threshold = COM_set_search_threshold; - cbk_tbl->full_cqi_logger = COM_full_cqi_logger; - return; -} - -#ifdef __cplusplus -} -#endif - diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6628.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6628.cpp deleted file mode 100644 index 15d0a85..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/mt6628.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -int MT6628_open_dev(const char *pname, int *fd) -{ - int ret = 0; - ret = COM_open_dev(pname, fd); - - //TODO important!!!, check if it's valid FM chip here. - - return ret; -} - -int MT6628_stop_scan(int fd) -{ - int ret = 0; - if (fd < 0){ - LOGE("FM fd unavailable for stopscan\n"); - ret = ERR_INVALID_FD; - goto out; - } - - //becare for the impliment of lseek in FM driver char device driver - if(lseek(fd, 0, SEEK_END) != 0){ - LOGE("Stopscan failed\n"); - ret = -1; - goto out; - }else - LOGD("Stopscan Success,[fd=%d]\n", fd); -out: - return ret; -} - -void MT6628_init(struct fm_cbk_tbl *cbk_tbl) -{ - //Basic functions. - cbk_tbl->open_dev = MT6628_open_dev; - cbk_tbl->close_dev = COM_close_dev; - cbk_tbl->pwr_up = COM_pwr_up; - cbk_tbl->pwr_down = COM_pwr_down; - cbk_tbl->seek = COM_seek; - cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan. - cbk_tbl->scan_new = COM_hw_scan_new; - cbk_tbl->seek_new = COM_seek_new; - cbk_tbl->tune_new = COM_tune_new; - cbk_tbl->stop_scan = MT6628_stop_scan; - cbk_tbl->tune = COM_tune; - cbk_tbl->set_mute = COM_set_mute; - cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup; - cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support; - cbk_tbl->is_rdstx_support = COM_is_rdstx_support; - cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds; - cbk_tbl->get_chip_id = COM_get_chip_id; - //For RDS RX. - cbk_tbl->read_rds_data = COM_read_rds_data; - cbk_tbl->get_pi = COM_get_pi; - cbk_tbl->get_ps = COM_get_ps; - cbk_tbl->get_pty = COM_get_pty; - cbk_tbl->get_rssi = COM_get_rssi; - cbk_tbl->get_rt = COM_get_rt; - cbk_tbl->active_af = COM_active_af; - cbk_tbl->active_ta = COM_active_ta; - cbk_tbl->deactive_ta = COM_deactive_ta; - //FM over BT - cbk_tbl->fm_over_bt = COM_fm_over_bt; - //FM short antenna - cbk_tbl->ana_switch = COM_ana_switch; - cbk_tbl->get_caparray = COM_get_caparray; - //RX EM mode use - cbk_tbl->get_badratio = COM_get_badratio; - cbk_tbl->get_stereomono = COM_get_stereomono; - cbk_tbl->set_stereomono = COM_set_stereomono; - cbk_tbl->get_cqi = COM_get_cqi; - cbk_tbl->is_dese_chan = COM_is_dese_chan; - cbk_tbl->desense_check = COM_desense_check; - cbk_tbl->get_hw_info = COM_get_hw_info; - //soft mute tune - cbk_tbl->soft_mute_tune = COM_Soft_Mute_Tune; - cbk_tbl->pre_search = COM_pre_search; - cbk_tbl->restore_search = COM_restore_search; - //EM - cbk_tbl->set_search_threshold = COM_set_search_threshold; - cbk_tbl->full_cqi_logger = COM_full_cqi_logger; - return; -} - -#ifdef __cplusplus -} -#endif - diff --git a/MediaTek/fmradiolibs/fmnative/fmr/mt6630.cpp b/MediaTek/fmradiolibs/fmnative/fmr/mt6630.cpp deleted file mode 100644 index 04e9b27..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/mt6630.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -int MT6630_open_dev(const char *pname, int *fd) -{ - int ret = 0; - ret = COM_open_dev(pname, fd); - - //TODO important!!!, check if it's valid FM chip here. - - return ret; -} - -void MT6630_init(struct fm_cbk_tbl *cbk_tbl) -{ - //Basic functions. - cbk_tbl->open_dev = MT6630_open_dev; - cbk_tbl->close_dev = COM_close_dev; - cbk_tbl->pwr_up = COM_pwr_up; - cbk_tbl->pwr_down = COM_pwr_down; - //cbk_tbl->seek = COM_seek; - //cbk_tbl->scan = COM_hw_scan; //hw_scan or sw_scan. - //cbk_tbl->scan_new = COM_hw_scan_new; - //cbk_tbl->seek_new = COM_seek_new; - //cbk_tbl->tune_new = COM_tune_new; - cbk_tbl->tune = COM_tune; - cbk_tbl->set_mute = COM_set_mute; - cbk_tbl->is_fm_pwrup = COM_is_fm_pwrup; - cbk_tbl->fm_set_status = COM_fm_set_status; - cbk_tbl->fm_get_status = COM_fm_get_status; - cbk_tbl->is_rdsrx_support = COM_is_rdsrx_support; - cbk_tbl->is_rdstx_support = COM_is_rdstx_support; - cbk_tbl->turn_on_off_rds = COM_turn_on_off_rds; - cbk_tbl->get_chip_id = COM_get_chip_id; - //For RDS RX. - cbk_tbl->read_rds_data = COM_read_rds_data; - cbk_tbl->get_pi = COM_get_pi; - cbk_tbl->get_ps = COM_get_ps; - cbk_tbl->get_pty = COM_get_pty; - cbk_tbl->get_rssi = COM_get_rssi; - cbk_tbl->get_rt = COM_get_rt; - cbk_tbl->active_af = COM_active_af; - cbk_tbl->active_ta = COM_active_ta; - cbk_tbl->deactive_ta = COM_deactive_ta; - //FM over BT - cbk_tbl->fm_over_bt = COM_fm_over_bt; - //FM short antenna - cbk_tbl->ana_switch = COM_ana_switch; - cbk_tbl->get_caparray = COM_get_caparray; - //RX EM mode use - cbk_tbl->get_badratio = COM_get_badratio; - cbk_tbl->get_stereomono = COM_get_stereomono; - cbk_tbl->set_stereomono = COM_set_stereomono; - cbk_tbl->get_cqi = COM_get_cqi; - cbk_tbl->is_dese_chan = COM_is_dese_chan; - cbk_tbl->desense_check = COM_desense_check; - cbk_tbl->get_hw_info = COM_get_hw_info; - //soft mute tune - cbk_tbl->soft_mute_tune = COM_Soft_Mute_Tune; - cbk_tbl->pre_search = COM_pre_search; - cbk_tbl->restore_search = COM_restore_search; - //EM - cbk_tbl->set_search_threshold = COM_set_search_threshold; - cbk_tbl->full_cqi_logger = COM_full_cqi_logger; - - //TX - cbk_tbl->is_tx_support = COM_tx_support; - cbk_tbl->tx_pwrup = COM_tx_pwrup; - cbk_tbl->rdstx_onoff = COM_rdstx_onoff; - cbk_tbl->tx_tune = COM_tx_tune; - cbk_tbl->tx_scan = COM_tx_scan; - cbk_tbl->rdstx = COM_rdstx; - - return; -} - -#ifdef __cplusplus -} -#endif - diff --git a/MediaTek/fmradiolibs/fmnative/fmr/target.cpp b/MediaTek/fmradiolibs/fmnative/fmr/target.cpp deleted file mode 100644 index 2e65c36..0000000 --- a/MediaTek/fmradiolibs/fmnative/fmr/target.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein is - * confidential and proprietary to MediaTek Inc. and/or its licensors. Without - * the prior written permission of MediaTek inc. and/or its licensors, any - * reproduction, modification, use or disclosure of MediaTek Software, and - * information contained herein, in whole or in part, shall be strictly - * prohibited. - * - * MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER - * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL - * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH - * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, - * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES - * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. - * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO - * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK - * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE - * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S - * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE - * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE - * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE - * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek - * Software") have been modified by MediaTek Inc. All revisions are subject to - * any receiver's applicable license agreements with MediaTek Inc. - */ - -#include "fmr.h" - -void TGT_init(struct fm_cbk_tbl *cbk_tbl) -{ - //Basic functions. - cbk_table->open_dev = TGT_open_dev; - cbk_table->close_dev = TGT_close_dev; - cbk_table->pwr_up = TGT_pwr_up; - cbk_table->pwr_down = TGT_pwr_down; - cbk_table->seek = TGT_seek; - cbk_table->scan = TGT_hw_scan; //hw_scan or sw_scan. - cbk_table->stop_scan = TGT_stop_scan; - cbk_table->tune = TGT_tune; - cbk_table->set_mute = TGT_set_mute; - cbk_table->is_fm_pwrup = TGT_is_fm_pwrup; - cbk_table->is_rdsrx_support = TGT_is_rdsrx_support; - cbk_table->is_rdstx_support = TGT_is_rdstx_support; - cbk_table->turn_on_off_rds = TGT_turn_on_off_rds; - cbk_table->get_chip_id = TGT_get_chip_id; - //For RDS RX. - cbk_table->read_rds_data = TGT_read_rds_data; - cbk_table->get_pi = TGT_get_pi; - cbk_table->get_ps = TGT_get_ps; - cbk_table->get_pty = TGT_get_pty; - cbk_table->get_rssi = TGT_get_rssi; - cbk_table->get_rt = TGT_get_rt; - cbk_table->active_af = TGT_active_af; - cbk_table->active_ta = TGT_active_ta; - cbk_table->deactive_ta = TGT_deactive_ta; - //FOR RDS TX. - //TODO RDS TX functions. - return; -} - -int TGT_open_dev(const char *pname, int *fd) -{ - int ret = 0;; - ret = COM_open_dev(pname, fd); - //TODO important!!!, check if it's valid FM chip here. - - return ret; -} - -int TGT_close_dev(int fd, int freq) -{ - return COM_close_dev(fd, freq); -} - -int TGT_pwr_up(int fd) -{ - return COM_pwr_up(fd); -} - -int TGT_pwr_down(int fd, int type) -{ - return COM_pwr_down(fd, type); -} - -int TGT_get_chip_id(int fd, int *chipid) -{ - return COM_get_chip_id(fd, chipid); -} - -int TGT_get_rssi(int fd, int *rssi) -{ - return COM_get_rssi(fd, rssi); -} - -char *TGT_get_ps(int fd) -{ - return COM_get_ps(fd); -} - -char *TGT_get_rt(int fd) -{ - return COM_get_rt(fd); -} - -int TGT_get_pi(int fd) -{ - return COM_get_pi(fd); -} - -int TGT_get_pty(int fd) -{ - return COM_get_pty(fd); -} - -int TGT_tune(int fd, int freq, int band) -{ - return COM_tune(fd, freq, band); -} - -int TGT_seek(int fd, int start_freq, int dir) -{ - return COM_seek(fd, start_freq, dir); -} - -int TGT_set_mute(int fd, int mute) -{ - return COM_set_mute(fd, mute); -} - -int TGT_is_fm_pwrup(int fd) -{ - return COM_is_fm_pwrup(fd); -} - -int TGT_is_rdsrx_support(int fd) -{ - return COM_is_rdsrx_support(fd); -} - -int TGT_is_rdstx_support(int fd) -{ - return COM_is_rdstx_support(fd); -} - -int TGT_sw_scan(int fd, uint16_t *scan_tbl, int max_cnt, int band) -{ - return COM_sw_scan(fd, scan_tbl, max_cnt, band); -} - -int TGT_hw_scan(int fd, uint16_t *scan_tbl, int max_cnt, int band) -{ - return COM_hw_scan(fd, scan_tbl, max_cnt, band); -} - -int TGT_stop_scan(int fd) -{ - return COM_stop_scan(); -} - -int TGT_turn_on_off_rds(int fd, int onoff) -{ - return COM_turn_on_off_rds(fd, onoff); -} - -uint16_t TGT_read_rds_data(int fd) -{ - return COM_read_rds_data(fd); -} - -int TGT_active_af(int fd) -{ - return COM_active_af(fd); -} - -int TGT_active_ta(int fd) -{ - return COM_active_ta(fd); -} - -int TGT_deactive_ta(int fd) -{ - return COM_deactive_ta(fd); -}
\ No newline at end of file |
