- 1 方案介绍
- 开放式家庭云视频安全问题越来越严重,对于家庭云视频的安全保密工作日益严重。
- 采用NXP CPU腾讯提供的开发板采集家庭视频,通过Mini PCIE外接CCP903T -S迷你密码卡加密后输出到腾讯云,移动终端通过手机U盾认证授权后链接腾讯微云,达到实施查看家庭视频的安全通路。
- 2 方案框图
- 整体方案框图
- 3 调试流程
- 目前开发板可以正常仿真基础Demo程序
- 可以导入TencentOS Tiny工程(经过仔细观看直播视频后才入门)。github的教程,我的电脑打开后没有参考图片!!
- 密码卡流程程序已经准备完毕
- 4 阶段目标
- 第一阶段 实现图像采集
- 第二阶段 实现PCIE的密码卡通讯
- 第三阶段 实现腾讯云的链接
- 第四阶段 实现视频的采集加密后上传腾讯云
- 第五阶段 实现远程互联
- 5 调试流程
代码语言:javascript
复制
#include"sf_create.h"
/**
* @brief 读取当前文件的类型
* @param mf_n MF编号
* @param p_FileInfo 文件信息首地址
* @param p_FileType 存储文件属性
* @return uint32 指令读取状态
*
*/
static inline int32 SF_GetFileType(uint32 mf_n,FILE_INFO *p_FileInfo,uint8 *p_FileType)
{
return SF_ReadLogicFlashBytes(mf_n,
&p_FileInfo->file_head.type,
sizeof(p_FileInfo->file_head.type),
p_FileType);
}
/**
* @brief 获取当前文件的DF节点信息,
* @param mf MF编号
* @param p_FileInfo 当前文件节点地址,如果p_FileInfo是DF/MF/ADF则返回p_FileInfo
* @param p_F_FILEINFO 当前文件父节点地址
* @return uint32 读取状态
*
*/
static inline int32 SF_GetFNode(uint32 mf_n,FILE_INFO *p_FileInfo,FILE_INFO **p_F_FILEINFO)
{
uint8 f_type;
int32 ret;
ret = SF_GetFileType(mf_n,p_FileInfo,&f_type);
if(SUCCESS_OK != ret){
return ret;
}
if(IS_DF_3(f_type)){
*p_F_FILEINFO = p_FileInfo;
return SUCCESS_OK;
}else{
return SF_ReadLogicFlashBytes(mf_n,
&p_FileInfo->file_node.f_node,
sizeof(p_FileInfo->file_node.f_node),
*p_F_FILEINFO);
}
}
/**
* @brief 获取当前文件的DF节点信息
* @param mf MF编号
* @param p_FileInfo 当前文件节点地址
* @param p_B_FILEINFO 当前文件兄弟节点地址
* @return uint32 读取状态
*
*/
static inline int32 SF_GetBNode(uint32 mf_n,FILE_INFO *p_FileInfo,FILE_INFO **p_B_FILEINFO)
{
return SF_ReadLogicFlashBytes(mf_n,
&p_FileInfo->file_node.b_node,
sizeof(p_FileInfo->file_node.b_node),
*p_B_FILEINFO);
}
/**
* @brief 获取当前文件的DF节点信息
* @param mf MF编号
* @param p_FileInfo 当前文件节点地址
* @param p_C_FileInfo 当前文件子节点地址
* @return uint32 读取状态
*
*/
static inline int32 SF_GetCNode(uint32 mf_n,FILE_INFO *p_FileInfo,FILE_INFO **p_C_FileInfo)
{
return SF_ReadLogicFlashBytes(mf_n,
&p_FileInfo->file_node.c_node,
sizeof(p_FileInfo->file_node.c_node),
*p_C_FileInfo);
}
/**
* @brief 获取当前文件的DF节点信息
* @param mf MF编号
* @param p_FileInfo 当前文件节点地址
* @param p_D_FileInfo 当前文件数据节点地址
* @return uint32 读取状态
*
*/
int32 inline SF_GetDNode(uint32 mf_n,FILE_INFO *p_FileInfo,FILE_INFO **p_D_FileInfo)
{
return SF_ReadLogicFlashBytes(mf_n,
&p_FileInfo->file_node.d_node,
sizeof(p_FileInfo->file_node.d_node),
*p_D_FileInfo);
}
/**
* @brief 获取文件ID
* @param mf_n MF编号
* @param f_addr 文件地址
* @param p_f_id 存储文件ID的指针
* @return uint32 FLASH的读取状态
*
*/
int32 inline SF_GetFileID(uint32 mf_n,FILE_INFO *p_FileInfo,uint16 *p_FileID)
{
return SF_ReadLogicFlashBytes(mf_n,
&p_FileInfo->file_head.file_id,
sizeof(p_FileInfo->file_head.file_id),
(uint8*)p_FileID);
}
/**
* @brief 读取文件的名称有效长度
* @param mf_n MF编号
* @param f_addr 文件地址
* @param p_name_len 存储文件名长度的指针
* @return int32 FLASH读取状态
*
*/
int32 inline SF_GetFileNameLen(uint32 mf_n,FILE_INFO *p_FileInfo,uint8 *p_NameLen)
{
return SF_ReadLogicFlashBytes(mf_n,
&p_FileInfo->file_head.name_len,
sizeof(p_FileInfo->file_head.name_len),
p_NameLen);
}
/**
* @brief 读取文件的名称
* @param mf_n MF编号
* @param f_addr 文件地址
* @param name_len 读取长度
* @param p_name 保存文件名称
* @return int32 读取状态
*
*/
int32 inline SF_GetFileName(uint32 mf_n,FILE_INFO *p_FileInfo,uint8 name_len,uint8*p_Name)
{
return SF_ReadLogicFlashBytes(mf_n,
&p_FileInfo->file_head.name_buf,
name_len,
&p_Name);
}
/**
* @brief 读取文件大小<包含文件头>
* @param mf_n
* @param p_FileInfo
* @param p_size
* @return int32
*
*/
int32 inline SF_GetFileSize(uint32 mf_n,FILE_INFO *p_FileInfo,uint32 *p_size)
{
uint32 size;
int32 ret;
return SF_ReadLogicFlashBytes(mf_n,
&p_FileInfo->file_head.size,
sizeof(p_FileInfo->file_head.size),
p_size);
}
/**
* @brief 根据权限类型,判断权限状态
* @param mf_n MF编号
* @param ac_type 权限类型判断权限;MF/DF/ADF创建/删除权限;EF:读取/写入/使用权限
* @param p_FileInfo 当前文件地址
* @param cur_ac 输入权限
* @return int32 判断状态
*
*/
int32 SF_CheckFileAC(uint32 mf_n,FILE_INFO *p_FileInfo,E_AC_TYPE ac_type,uint8 cur_ac)
{
uint8 ac;
uint8 f_type;
int32 ret;
///*****判断当前MF/DF/ADF状态*****
///<读取传入的文件类型
ret = SF_GetFileType(mf_n,p_FileInfo,&f_type);
if(SUCCESS_OK != ret){
return ret;
}
///<根据类型读取权限值
switch (ac_type)
{
case E_AC_DF_CREATE:
if(!IS_DF_3(f_type)){
return ERR_FILE_TYPE;
}
ret = SF_GetFileAC(mf_n,p_FileInfo,DF_AC_C_OFFSET,&ac);
if(SUCCESS_OK != ret){
return ret;
}
break;
case E_AC_DF_DELETE:
if(!IS_DF_3(f_type)){
return ERR_FILE_TYPE;
}
ret = SF_GetFileAC(mf_n,p_FileInfo,DF_AC_D_OFFSET,&ac);
if(SUCCESS_OK != ret){
return ret;
}
break;
case E_AC_EF_READ:
if(IS_DF_3(f_type)){
return ERR_FILE_TYPE;
}
ret = SF_GetFileAC(mf_n,p_FileInfo,EF_AC_READ_OFFSET,&ac);
if(SUCCESS_OK != ret){
return ret;
}
case E_AC_EF_WRITE:
if(IS_DF_3(f_type)){
return ERR_FILE_TYPE;
}
ret = SF_GetFileAC(mf_n,p_FileInfo,EF_AC_WRITE_OFFSET,&ac);
if(SUCCESS_OK != ret){
return ret;
}
default:
return ERR_PARA;
}
///<判断权限是否满足