KT24-1110_65E-HA-651B/apps/soundbox/include/task_manager/fm/fm_manage.h
2024-11-10 18:44:17 +08:00

123 lines
3.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _FM_MANAGE_H
#define _FM_MANAGE_H
#include "printf.h"
#include "cpu.h"
#include "asm/iic_hw.h"
#include "asm/iic_soft.h"
#include "timer.h"
#include "app_config.h"
#include "event.h"
#include "system/includes.h"
#include "typedef.h"
#define FREQ_STEP (100)//100 步进
#define REAL_FREQ_MIN (8750)
#define REAL_FREQ_MAX (10800)
#define VIRTUAL_FREQ_STEP (FREQ_STEP/10)
#define REAL_FREQ(x) ((REAL_FREQ_MIN-VIRTUAL_FREQ_STEP) + (x)*VIRTUAL_FREQ_STEP)
#define VIRTUAL_FREQ(x) ((x - (REAL_FREQ_MIN-VIRTUAL_FREQ_STEP))/VIRTUAL_FREQ_STEP)
#define MAX_CHANNEL ((REAL_FREQ_MAX - REAL_FREQ_MIN)/VIRTUAL_FREQ_STEP + 1)
enum {
FM_CUR_FRE = 0,
FM_FRE_DEC = 1,
FM_FRE_INC = 2,
};
typedef struct {
u8(*init)(void *priv);
u8(*close)(void *priv);
u8(*set_fre)(void *priv, u16 fre);
u8(*mute)(void *priv, u8 flag);
u8(*read_id)(void *priv);
u8 logo[20];
} FM_INTERFACE;
struct _fm_dev_info {
u8 iic_hdl;
u8 iic_delay; //这个延时并非影响iic的时钟频率而是2Byte数据之间的延时
u8 logo[20];
};
struct _fm_dev_platform_data {
u8 iic_hdl;
u8 iic_delay; //这个延时并非影响iic的时钟频率而是2Byte数据之间的延时
};
extern FM_INTERFACE fm_dev_begin[];
extern FM_INTERFACE fm_dev_end[];
#define REGISTER_FM(fm) \
static FM_INTERFACE fm SEC_USED(.fm_dev)
#define list_for_each_fm(c) \
for (c=fm_dev_begin; c<fm_dev_end; c++)
#define FM_DEV_PLATFORM_DATA_BEGIN(data) \
static const struct _fm_dev_platform_data data = {
#define FM_DEV_PLATFORM_DATA_END() \
};
extern u8 fm_dev_iic_write(u8 w_chip_id, u8 register_address, u8 *buf, u32 data_len);
extern u8 fm_dev_iic_readn(u8 r_chip_id, u8 register_address, u8 *buf, u8 data_len);
extern struct _fm_dev_info t_fm_dev_info;
void fm_manage_check_online();
int fm_manage_init();
int fm_manage_start();
bool fm_manage_set_fre(u16 fre);
u16 fm_manage_get_fre();
void fm_manage_close(void);
void fm_manage_mute(u8 mute);
int fm_dev_init(void *_data);
void fm_mutex_init(void *priv);
void fm_mutex_stop(void *priv);
extern void fm_inside_trim(u32 freq);
extern void save_scan_freq_org(u32 freq);
//内部收音优化使用
#if 0
#define iic_init(iic) hw_iic_init(iic)
#define iic_uninit(iic) hw_iic_uninit(iic)
#define iic_start(iic) hw_iic_start(iic)
#define iic_stop(iic) hw_iic_stop(iic)
#define iic_tx_byte(iic, byte) hw_iic_tx_byte(iic, byte)
#define iic_rx_byte(iic, ack) hw_iic_rx_byte(iic, ack)
#define iic_read_buf(iic, buf, len) hw_iic_read_buf(iic, buf, len)
#define iic_write_buf(iic, buf, len) hw_iic_write_buf(iic, buf, len)
#define iic_suspend(iic) hw_iic_suspend(iic)
#define iic_resume(iic) hw_iic_resume(iic)
#else
#define iic_init(iic) soft_iic_init(iic)
#define iic_uninit(iic) soft_iic_uninit(iic)
#define iic_start(iic) soft_iic_start(iic)
#define iic_stop(iic) soft_iic_stop(iic)
#define iic_tx_byte(iic, byte) soft_iic_tx_byte(iic, byte)
#define iic_rx_byte(iic, ack) soft_iic_rx_byte(iic, ack)
#define iic_read_buf(iic, buf, len) soft_iic_read_buf(iic, buf, len)
#define iic_write_buf(iic, buf, len) soft_iic_write_buf(iic, buf, len)
#define iic_suspend(iic) soft_iic_suspend(iic)
#define iic_resume(iic) soft_iic_resume(iic)
#endif
#endif