AIoT应用创新大赛-基于TencentOS Tiny 家庭视频加密方案

2022-03-12 23:46:51 浏览数 (1)

  • 1 方案介绍
    1. 开放式家庭云视频安全问题越来越严重,对于家庭云视频的安全保密工作日益严重。
    2. 采用NXP CPU腾讯提供的开发板采集家庭视频,通过Mini PCIE外接CCP903T -S迷你密码卡加密后输出到腾讯云,移动终端通过手机U盾认证授权后链接腾讯微云,达到实施查看家庭视频的安全通路。
  • 2 方案框图
    1. 整体方案框图
  • 3 调试流程
    1. 目前开发板可以正常仿真基础Demo程序
    2. 可以导入TencentOS Tiny工程(经过仔细观看直播视频后才入门)。github的教程,我的电脑打开后没有参考图片!!
    3. 密码卡流程程序已经准备完毕
  • 4 阶段目标
    1. 第一阶段 实现图像采集
    2. 第二阶段 实现PCIE的密码卡通讯
    3. 第三阶段 实现腾讯云的链接
    4. 第四阶段 实现视频的采集加密后上传腾讯云
    5. 第五阶段 实现远程互联
  • 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;
    }
    ///<判断权限是否满足
  • 6 刚刚开始呀!

0 人点赞