#ifndef __EFFECTS_ADJ__H #define __EFFECTS_ADJ__H #include "system/includes.h" #include "config/config_interface.h" #include "asm/crc16.h" #include "fs/resfile.h" #include "AudioEffect_DataType.h" #include "media/framework/include/jlstream.h" struct node_param {//单节点名称 char name[16]; }; struct eff_default_parm { char name[16]; char cfg_index;//使用配置项的序号,指定默认配置项 char mode_index;//节点与多模式关联时,该变量用于获取相应模式下的节点参数,模式序号(如,蓝牙模式下,无多子模式,mode_index 是0) }; struct cfg_info { u16 offset; u16 size; u16 uuid; u8 subid; }; #define indicator_check_points 4 #define indicator_read_points 40 struct indicator_upload_data { u8 len; u8 type; u8 index; u8 reserve; float min; float max; int nbit;//16bit、32bit int peak[indicator_read_points]; } __attribute__((packed)); // 配置文件格式 //文件头+节点配置头+节点数据区 struct node_file_head { u16 version; char reserved[14]; } __attribute__((packed)); #define EQ_NODE_CFG_TYPE 0x1//EQ节点配置 #define DRC_NODE_CFG_TYPE 0x2//DRC节点配置 #define FORM_NODE_CFG_TYPE 0x3//表单节点配置 #define PIPELINE_CFG_TYPE 0x4//参数组数据 #define UUID_MAP_CFG_TYPE 0x5//uuid映射表 #define DRC_ADVANCE_NODE_CFG_TYPE 0x6//drc advance 节点配置 struct node_cfg_format { u8 type; //0x1 EQ配置 0x2 DRC配置 0x3 表单配置 0x4 参数组数据 0x5 uuid映射表 u16 uuid; u8 subid; u8 mode_index; //模式序号 u16 node_name_uuid; //节点名称的crc16 u16 config_name_uuid;//配置名称的crc16 u8 config_index; //配置序号 u32 offset; //参数偏移位置 u16 size; //参数大小 char reserved[16]; //保留位 } __attribute__((packed)); struct group_param { u16 uuid; //流模块uuid u8 num; //参数组个数 u8 reserve; u8 data[0]; //参数组名称的uuid } __attribute__((packed)); #define EFF_CONFIG_ID (0x21) //调音注册的cmd #define REPLY_TO_TOOL (0) //应答工具使用的标识 #define EFF_ADJ_CMD (0x500)//调音命令 #define EFF_UPLOAD_CMD (0x501)//数据上报命令,用于发送数据给上位机 #define EFF_MODE_CMD (0x502)//模式切换命令,上位机发送当前模式序号给小机 #define EFF_INDICATOR_CMD (0x503)//指示器主动来获取数据 #define EFF_CRC_CMD (0x504)//stream.bin crc校验命令 #define EFF_FORM_CMD (0x506)//表单节点获取当前值命令 #define EFF_ONLINE_CMD (0x507)//检查需要在线调试的节点 #define EFF_NODE_MERGE_UPDATE BIT(0) #define EFF_MANUAL_ADJ_NODE BIT(1) enum { ERR_NONE = 1, //处理成功,返回"OK" ERR_COMM = 0, //通用错误,例如模块未打开,返回"ER" ERR_ACCEPTABLE = -1, //可接受的错误,由case内部处理,返回内部数据 EFF_ERR_TYPE_PTR_NULL = -2,//模块打开失败,返回"ER_FLOW_OPEN_BUF" EFF_ERR_TYPE_ALGORITHM_NULL = -3,//算法返回错误,返回"ER_FLOW_OPEN_ALGORITHM" EFF_ERR_CRC = -4,//CRC校验失败 EFF_ERR_RUN = -5,//音效run失败 }; struct effects_online_adjust { u16 uuid; } __attribute__((packed)); //支持调音的节点,需使用该操作注册 #define REGISTER_ONLINE_ADJUST_TARGET(online) \ static struct effects_online_adjust online sec(.effects_online_adjust) extern struct effects_online_adjust effects_online_adjust_begin[]; extern struct effects_online_adjust effects_online_adjust_end[]; #define list_for_online_adjust_target(p) \ for (p = effects_online_adjust_begin; p < effects_online_adjust_end; p++) /* *节点通过uuid 与name获取在线调试音效的参数 * */ int get_eff_online_param(u32 uuid, char *name, void *packet); /* *获取需要指定得默认配置 * */ int get_eff_default_param(int arg); /* *表单节点参数信息获取(获取目标参数存储地址,与大小) *mode_index:参数组序号(模式序号) *name:音效节点名字(节点内用户自定义) *cfg_index:目标配置项(0,1,2....) *info:音效节点的配置项信息(存储的目标地址,配置项大小) *return: 0 返回成功, 非0:返回失败 * */ int jlstream_read_form_node_info_base(char mode_index, const char *name, char cfg_index, struct cfg_info *info); /* *根据文件内偏移,获取目标配置参数 *return: 实际长度: 返回成功, 0:返回失败 * */ int jlstream_read_form_cfg_data(struct cfg_info *info, void *data); /* *表单节点参数获取 *mode_index:参数组序号(模式序号) *name:音效节点名字(节点内用户自定义) *cft_index:目标配置项(0,1,2....) *data:目标参数返回地址 *return: 实际长度: 返回成功, 0:返回失败 * */ int jlstream_read_form_data(char mode_index, const char *name, char cfg_index, void *data); /* *通过uuid与subid直接获取节点参数,节点内如有多份参数,需通过STREAM_EVENT_GET_NODE_PARM case内指定目标参数序号 *uuid:节点uuid *subid:节点subid *data:目标参数返回地址 *node_name:节点配置名称返回地址 *return: 实际长度: 返回成功, 0:返回失败 * */ int jlstream_read_node_data_new(u16 uuid, u8 subid, void *data, char *node_name); /* *通过uuid与subid、cfg_index直接获取节点参数 *uuid:节点uuid *subid:节点subid *cfg_index:节点内的配置序号 *data:目标参数返回地址 *node_name:节点配置名称返回地址 *return: 实际长度: 返回成功, 0:返回失败 * */ int jlstream_read_node_data_by_cfg_index(u16 uuid, u8 subid, char cfg_index, void *data, char *node_name); /* *通过uuid与subid直接获取节点info信息,节点内如有多份参数,需通过STREAM_EVENT_GET_NODE_PARM case内指定目标参数序号 *uuid:节点uuid *subid:节点subid *data:目标参数返回地址 *node_name:节点配置名称返回地址 *info:节点信息保存的地址 *return: 1:读取info信息成功,0:读取info信息失败 * */ int jlstream_read_node_info_data(u16 uuid, u8 subid, char *node_name, struct cfg_info *info); /* *节点info参数获取 *mode_index:参数组序号(模式序号) *name:音效节点名字(节点内用户自定义) *cft_index:目标配置项(0,1,2....) *return: 1:读取info信息成功,0:读取info信息失败 * */ int jlstream_read_info_data(char mode_index, const char *name, char cfg_index, struct cfg_info *info); /* *通过uuid获取参数组个数 *pipeline_uuid:流模块uuid *group_param_num:返回参数组个数 *return 0:成功, 非0:失败 * */ int jlstream_read_pipeline_param_group_num(u16 pipeline_uuid, u8 *group_param_num); /* *通过uuid和name获取长度为len的在线调试参数param * */ int jlstream_read_effects_online_param(u32 uuid, char *name, void *param, u16 len); /* *小机主动往上位机发数据接口 * */ void eff_node_send_packet(u32 id, u8 sq, u8 *packet, int size); int jlstream_read_indicator_node_data(u16 uuid, u8 subid, u8 *param); #endif/*__EFFECTS_ADJ__H*/