前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AIoT应用创新大赛-基于TencentOS Tiny 家庭视频加密方案

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

原创
作者头像
用户9550808
发布2022-03-12 23:46:51
5080
发布2022-03-12 23:46:51
举报
  • 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 刚刚开始呀!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
TencentOS Server
TencentOS Server 是腾讯云推出的 Linux 操作系统,它旨在为云上运行的应用程序提供稳定、安全和高性能的执行环境。它可以运行在腾讯云 CVM 全规格实例上,包括黑石物理服务器2.0。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档