半导体:Gem/Secs基本协议库的开发(3)

2023-12-15 21:36

本文主要是介绍半导体:Gem/Secs基本协议库的开发(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接着上一篇《半导体:Gem/Secs基本协议库的开发(2)》继续,模拟工具延到下一篇,别催!

【codes】

//hsmsmessageheader.h
/*****************************************         HsmsMessageHeader****************************************/#ifndef HSMSMESSAGEHEADER_H
#define HSMSMESSAGEHEADER_H#include "JcHsms.h"class JCHSMS_EXPORT HsmsMessageHeader
{
public:HsmsMessageHeader();  // originateHsmsMessageHeader(uint16_t sessionID, uint8_t stream, uint8_t function,uint8_t ptype, uint8_t stype,  uint32_t systembytes);HsmsMessageHeader(QByteArray source); // interpretQByteArray toByteArray();QByteArray toByteArray(uint16_t sessionID,uint8_t stream,uint8_t function,uint8_t ptype,uint8_t stype,uint32_t systembytes);uint16_t GetSessionID();uint8_t  Getstream();uint8_t  Getfunction();uint8_t  GetpType();uint8_t  GetsType();uint32_t GetSystemBytes();MessageType GetMessageType();static uint16_t GetSessionID(const QByteArray& source);static uint8_t  Getstream(const QByteArray& source);static uint8_t  Getfunction(const QByteArray& source);static uint8_t  GetpType(const QByteArray& source);static uint8_t  GetsType(const QByteArray& source);static uint32_t GetSystemBytes(const QByteArray& source);static MessageType GetMessageType(const QByteArray& source);void SetSessionID(uint16_t id);void SetStreamFunction(uint8_t stream, uint8_t function);void SetWBit(WBit bit);void SetPSType(uint8_t ptype, uint8_t stype);void SetSystemBytes(uint32_t systemByte);uint32_t uniqueSystemBytes();public:static uint32_t m_systembytes;  /// 4 bytes SystemBytes.static uint32_t SystemBytes_counter;
private:QByteArray m_source;            /// 10 bytes.fixed.uint16_t m_sessionID;           /// 2 bytesuint8_t m_stream;               /// 1 byte streamuint8_t m_function;             /// 1 byte functionuint8_t m_stype;                /// 1 byte stypeuint8_t m_ptype;                /// 1 byte ptype
};#endif // HSMSMESSAGEHEADER_H
// hsmsmessageheader.cpp/*******************************************************************************   HsmsMessageHeader******************************************************************************/#include "hsmsmessageheader.h"uint32_t HsmsMessageHeader::m_systembytes = 0;
uint32_t HsmsMessageHeader::SystemBytes_counter = 0;/*!* \brief The HsmsMessageHeader struct*  10 bytes message header* segment ==>|session id |  stream | function | pType | SType |     system bytes             |*            |hDev |lDev |------------------------------------| source num | transaction num |* bytes   ==>|    2      |    1    |   1      |   1   |  1    |            4                 |*/
HsmsMessageHeader::HsmsMessageHeader()
{m_source.resize(10);}HsmsMessageHeader::HsmsMessageHeader(QByteArray source)
{assert(m_source.length() != HSMS_MESSAGEHEADER_LEN);m_source.resize(10);m_source = source;m_sessionID = GetSessionID(source);m_stream = Getstream(source);m_function = Getfunction(source);m_stype = GetsType(source);m_ptype = GetpType(source);m_systembytes = GetSystemBytes(source);
}HsmsMessageHeader::HsmsMessageHeader(uint16_t sessionID, uint8_t stream, uint8_t function,uint8_t ptype, uint8_t stype,  uint32_t systembytes)
{m_sessionID = sessionID;m_stream = stream;m_function = function;m_stype = stype;m_ptype = ptype;m_systembytes = systembytes;m_source.resize(10);toByteArray();}QByteArray HsmsMessageHeader::toByteArray()
{SetSessionID(m_sessionID);SetStreamFunction(m_stream,m_function);SetPSType(m_ptype,m_stype);SetSystemBytes(m_systembytes);return m_source;
}QByteArray HsmsMessageHeader::toByteArray(uint16_t sessionID, uint8_t stream,uint8_t  function, uint8_t ptype,uint8_t  stype   , uint32_t systembytes)
{SetSessionID(sessionID);SetStreamFunction(stream,function);SetPSType(ptype,stype);SetSystemBytes(systembytes);return m_source;
}uint16_t HsmsMessageHeader::GetSessionID()
{return m_sessionID;
}uint8_t HsmsMessageHeader::Getstream()
{return m_stream;
}uint8_t HsmsMessageHeader::Getfunction()
{return m_function;
}uint8_t HsmsMessageHeader::GetpType()
{return m_ptype;
}uint8_t HsmsMessageHeader::GetsType()
{return m_stype;
}uint32_t HsmsMessageHeader::GetSystemBytes()
{return m_systembytes;
}MessageType HsmsMessageHeader::GetMessageType()
{if(m_source.size() < 10){return ErrorMessageType;}if( GetpType() != 0){return ErrorMessageType;}if( Getstream() & ( !GetsType() ) ){return DataMessage;}if( GetsType() >= 0 && GetsType() < 10){return static_cast<MessageType>(GetsType());}else{return ErrorMessageType;}
}uint16_t HsmsMessageHeader::GetSessionID(const QByteArray &source)
{uint16_t id = static_cast<uint16_t>(source.at(0));id = (id << 8) + static_cast<uint16_t>(source.at(1));return id;
}uint8_t HsmsMessageHeader::Getstream(const QByteArray &source)
{return static_cast<uint8_t>(source.at(2) & 0b01111111);
}uint8_t HsmsMessageHeader::Getfunction(const QByteArray &source)
{return static_cast<uint8_t>(source.at(3));
}uint8_t HsmsMessageHeader::GetpType(const QByteArray &source)
{return static_cast<uint8_t>(source.at(4));
}uint8_t HsmsMessageHeader::GetsType(const QByteArray &source)
{return static_cast<uint8_t>(source.at(5));
}uint32_t HsmsMessageHeader::GetSystemBytes(const QByteArray &source)
{uint32_t lenA[4] = {0};uint32_t len = 0;lenA[0] = static_cast<uint32_t>(source.at(6));lenA[1] = static_cast<uint32_t>(source.at(7));lenA[2] = static_cast<uint32_t>(source.at(8));lenA[3] = static_cast<uint32_t>(source.at(9));#if ENDIAN == LITTLE_ENDIANfor(int i = 0; i < 4;i++) len += (lenA[i] << ((3-i)*8 ));
#elsefor(int i = 0; i < 4;i++)  len += (lenA[i] << (i*8 ));
#endifreturn len;
}MessageType HsmsMessageHeader::GetMessageType(const QByteArray &source)
{if(source.size() < 10){return ErrorMessageType;}if( GetpType(source) != 0){return ErrorMessageType;}if( Getstream(source) & ( !GetsType(source) ) ){return DataMessage;}if( GetsType(source) >= 0 && GetsType(source) < 10){return static_cast<MessageType>(GetsType(source));}else{return ErrorMessageType;}
}void HsmsMessageHeader::SetSessionID(uint16_t id)
{
#if  ENDIAN == LITTLE_ENDIANm_source[0] = static_cast<char>( (id >> 8) & 0xff); //header byte 0m_source[1] = static_cast<char>( (id >> 0) & 0xff); //header byte 1
#elsem_source[1] = static_cast<char>( (id >> 8) & 0xff); //header byte 1m_source[0] = static_cast<char>( (id >> 0) & 0xff); //header byte 0
#endifm_sessionID = id;
}void HsmsMessageHeader::SetStreamFunction(uint8_t stream, uint8_t function)
{m_source[2] = static_cast<char>(stream);   //header byte 2m_source[3] = static_cast<char>(function); //header byte 3m_stream = stream;m_function = function;
}void HsmsMessageHeader::SetWBit(WBit bit)
{uint8_t f = Getfunction();uint8_t s = Getstream();if(bit == NeedReply){s = s | 0b10000000;}else{s = s & 0b01111111;}SetStreamFunction(s, f);
}void HsmsMessageHeader::SetPSType(uint8_t ptype, uint8_t stype)
{m_source[4] = static_cast<char>(ptype);  //header byte 4m_source[5] = static_cast<char>(stype);  //header byte 5m_ptype = ptype;m_stype = stype;
}void HsmsMessageHeader::SetSystemBytes(uint32_t systemByte)
{m_source[6] = static_cast<uchar>( (systemByte >> 24) & 0xff); //header byte 6m_source[7] = static_cast<uchar>( (systemByte >> 16) & 0xff); //header byte 7m_source[8] = static_cast<uchar>( (systemByte >> 8 ) & 0xff); //header byte 8m_source[9] = static_cast<uchar>( (systemByte >> 0 ) & 0xff); //header byte 9m_systembytes = systemByte;
}uint32_t HsmsMessageHeader::uniqueSystemBytes()
{SystemBytes_counter ++;uint32_t timeDate = QDateTime::currentDateTime().toTime_t();  // 获取当前时间,将当前时间转为时间戳m_systembytes = timeDate<<4;m_systembytes += SystemBytes_counter%16;return m_systembytes;
}
//  secs2item.h/*****************************************         Secs2Item***************************************** ItemHeader      | Item Body     |* format_lenbytes | Len | context |* format|len bytes| Len | context |****************************************/#ifndef SECS2ITEM_H
#define SECS2ITEM_H#include "JcHsms_global.h"class JCHSMS_EXPORT Secs2Item
{
public:Secs2Item() {}Secs2Item(QString name);Secs2Item(ItemFormatCode format,QVariant val);Secs2Item(QByteArray source); // interpretQByteArray toByteArray() const;int format() const;bool isEmpty() const;static int  format(const QByteArray &array);static bool isValidFormat(ItemFormatCode format);static int  itemHeaderSize(const QByteArray &array);static int  bytes(const QByteArray& array);const int bytes() const;QByteArray itemHeader() const;QByteArray itemBody() const;QByteArray itemDataAll() const;int buildItemHeader();void AddBinary(const QByteArray& x);void AddASCII(QString str);void AddASCII(const char* str,int len);void AddJIS8(const char * str); // unicodevoid AddBoolean(const bool x);void AddBoolean(const bool x[], int N);void AddInt8(const int8_t x);void AddInt8(const int8_t x[], int N);void AddInt8

这篇关于半导体:Gem/Secs基本协议库的开发(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/497971

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template