视频监控平台:交通运输标准JTT808设备SDK接入源代码函数分享

目录

一、JT/T 808标准简介

(一)概述

(二)协议特点

1、通信方式

2、鉴权机制

3、消息分类

(三)协议主要内容

1、位置信息

2、报警信息

3、车辆控制

4、数据转发

二、代码和解释

(一)代码和注释

(二)代码解释

1、概述

2、包含的目录和库

3、 宏定义

4、结构体定义

5、类定义(`CJT808NetSDKAPI`)

6、 静态变量和函数

7、成员变量


一、JT/T 808标准简介

(一)概述

        JT/T 808标准,全称为《道路运输车辆卫星定位系统终端通讯协议及数据格式》,是由国家交通运输部发布的一个重要标准。这个标准主要规定了道路运输车辆卫星定位系统车载终端与监控平台之间的通信协议,包括信息交换的格式、数据的加密传输、报警信息的处理等,为车辆监管和服务提供了统一的数据通信标准,实现了信息的快速传输和远程控制。

(二)协议特点

1、通信方式

        采用TCP协议作为通信协议,确保数据传输的稳定性和可靠性。

2、鉴权机制

        车载终端与监控平台之间建立了鉴权机制,确保通信双方的身份合法性。

3、消息分类

        将不同功能的消息分为不同的消息类别,如位置信息汇报、报警信息上传、车辆控制等,每个消息类别都有独特的消息ID

(三)协议主要内容

1、位置信息

        JT/T808标准定义了采集车辆位置信息的方式和格式,如经纬度、速度、方向等,并规定了位置信息上报的频率和条件。

2、报警信息

        标准中定义了不同类型的报警信息,如超速报警、紧急报警等,并规定了报警信息的上报和处理方式。

3、车辆控制

        标准还规定了终端对车辆某些功能的控制,如车辆远程锁车、解锁等。

4、数据转发

        定义了终端之间的数据转发方式,允许终端之间相互通信。

二、代码和解释

(一)代码和注释

        以下部分C++代码是JT808标准接入视频监控平台的SDK代码的头文件,列出了相关的函数,具体如下:

// JT808_NET_SDK_API_H__ header file

/* 
 * 定义CJT808NetSDKAPI类,该类用于处理JT808协议的网络通信。
 * JT808是一种中国制定的车辆监控通信协议。
 * 本类封装了网络通信的功能,包括登录/登出、数据接收/发送、线程处理等。
 */

#ifndef __JT808_NET_SDK_API_H__
#define __JT808_NET_SDK_API_H__

// 包含标准目录遍历类
#include <dirent.h>
// 引入STL中的map和list容器
#include <map>
#include <list>

// 引入自定义的NetSdkApp类,用于处理网络相关应用逻辑
#include "NetSdkApp.h"
// 引入类型定义
#include "TypeDef.h"
// 引入JT808协议相关定义
#include "jt808.h"
// 引入消息中心,用于处理各种消息
#include "MsgCenter.h"

// 引入线程相关的类和定义
#include "jthread.h"
#include "TransportMgr.h"
#include "TcpServer.h"

// 引入JT808常量定义
#include "JT808Constant.h"
// 可能引入JT808流处理类,但此行被注释掉了
// #include "JT808Stream.h"

// 使用命名空间jthread,以便于使用线程相关的类和函数
using namespace jthread;

// 定义最大缓存大小
#define JT808_CACHE_MAX_SIZE 1024*2

// 定义一个结构体用于缓存接收到的数据
typedef struct _Jt808RecvCache
{
    // 指向缓存的指针
    UINT8 *pCache;
    // 缓存的最大大小
    int iCacheSize;
    // 当前缓存的大小
    int iCurCacheSize;

    // 结构体的构造函数,初始化成员变量
    _Jt808RecvCache()
    {
        pCache = NULL;
        iCacheSize = JT808_CACHE_MAX_SIZE;
        iCurCacheSize = 0;
    }
}Jt808RecvCache;

// CJT808NetSDKAPI类声明
class CJT808NetSDKAPI: public JThread, public CTransportMgr
{
public:
    // 构造函数和析构函数
    CJT808NetSDKAPI();
    ~CJT808NetSDKAPI();

    // 初始化方法
    void Init(void);
    // 清理方法
    void Unit(void);

    // 登录方法,传入服务器IP和端口
    long Login(const char *ip, UINT16 port);
    // 登出方法,传入登录ID
    void Logout(long Loginid);

    // 线程执行方法
    void* Thread(void);
    // 线程退出方法
    void  ThreadQuit(void);

    // 从网络接收数据的接口
    int RecvDataFromNetwork(void);
    // 向网络发送数据的接口
    int SendDataToNetwork(void);

    // 回调函数,处理接收到的数据包
    int RecvPacketCallBack(CMySocket *pMySocket, const char *pData, int len, char *pSrcIP, UINT16 SrcPort);
    // 回调函数,处理TCP套接字异常
    int TcpSockExceptionCallBack(CMySocket *pMySocket);

    // 处理接收到的消息
    int MsgProcess(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, Jt808_Head *pHead, char* pBodyData, int BodyLen);

    // 构造基础响应消息
    int MsgBaseRsp(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, Jt808_Head *pHead, WORD MsgType, char * pRspData, int DataLen);
    // 构造通用响应消息
    int MsgCommonRsp(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, Jt808_Head *pHead, int RetCode);

    // 构造基础请求消息
    int MsgBaseReq(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, WORD MsgType, char * pRspData, int DataLen);
    // 构造实时播放请求消息
    int RealPlayReq(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, int ChanID);

private:
    // 静态变量和互斥锁,用于管理JT808索引
    static int jt808Index;
    static CCritSec CritSec_jt808Index;
    int JT808IndexAdd()
    {
        CAutoLock AutoLock(&CritSec_jt808Index);
        return ++jt808Index;
    }

private:	
    // 本地主机IP地址和端口,用于RTSP
    char   MyIpAddr[IPSTR_MAX_LEN+4];
    UINT16 MyPort;	
    // 进程退出标志
    bool  	ExitFlag;	
    // TCP服务器对象
    CTcpServer *pTcpSvr;	

    // 暂时先使用一个
    Jt808RecvCache *m_pStack;

};

// 文件结束宏
#endif /* INSTRUCTCONVERT_H_ */

(二)代码解释

1、概述

        头文件定义了一个名为`CJT808NetSDKAPI`的比较复杂的类,该类继承了`JThread`和`CTransportMgr`两个接口。

        该文件是用于处理JT808协议的网络通信的SDK(软件开发工具包),包括数据接收、发送、处理和缓存管理等。类也包含了许多网络通信的方法,如登录、登出、数据接收和发送等。它还包含了一些回调函数,用于处理接收到的数据包和TCP套接字异常。此外,它还定义了一些静态变量和互斥锁,用于管理JT808索引。

        具体解释如下所述。

2、包含的目录和库

           - `#include <dirent.h>`:用于目录操作。

           - `#include <map>` 和 `#include <list>`:用于标准模板库中的映射和列表数据结构。

           - `#include "NetSdkApp.h"`:可能是网络应用相关的头文件。

           - `#include "TypeDef.h"`:包含类型定义的头文件。

           - `#include "jt808.h"`:JT808协议相关的定义。

           - `#include "MsgCenter.h"`:消息中心的定义。

           - `#include "jthread.h"`:可能是自定义的线程类。

           - `#include "TransportMgr.h"`:传输管理类的定义。

           - `#include "TcpServer.h"`:TCP服务器类的定义。

           - `#include "JT808Constant.h"`:JT808常量定义。

3、 宏定义

   - `#define JT808_CACHE_MAX_SIZE 1024*2`:

        定义了接收缓存的最大大小为2KB。

4、结构体定义

   - `typedef struct _Jt808RecvCache Jt808RecvCache;`:

        定义了一个用于接收缓存的结构体。

5、类定义(`CJT808NetSDKAPI`)

           - 这个类继承了`JThread`和`CTransportMgr`,这意味着它具有线程功能和传输管理功能。

           - 类中定义了多个成员函数,包括初始化、清理、登录、登出、接收网络数据、发送网络数据等。

           - 还有回调函数,如接收数据包回调和TCP套接字异常回调。

           - 成员函数`MsgProcess`用于处理消息,`MsgBaseRsp`和`MsgCommonRsp`用于发送基础响应和通用响应,`MsgBaseReq`用于发送基础请求,`RealPlayReq`用于实况播放请求。

6、 静态变量和函数

   - `static int jt808Index;` 和 `static CCritSec CritSec_jt808Index;`:

        用于管理JT808索引的静态变量和互斥锁。

   - `static int JT808IndexAdd()`:

        一个静态函数,用于增加JT808索引。

7、成员变量

           - `char MyIpAddr[IPSTR_MAX_LEN+4];` 和 `UINT16 MyPort;`:本地IP地址和端口。

           - `bool ExitFlag;`:进程退出标志。

           - `CTcpServer *pTcpSvr;`:TCP服务器对象指针。

           - `Jt808RecvCache *m_pStack;`:接收缓存堆栈。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/608321.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言leetcode刷题笔记1

C语言leetcode刷题笔记1 第1题&#xff1a;136.只出现一次的数字两次遍历&#xff08;O(numsSize^2)&#xff09;位运算 第2题&#xff1a;202.快乐数快慢指针记录历史数据 第3题&#xff1a;53.最大子数组和暴力求解&#xff08;超时&#xff09;动态规划分治 第1题&#xff1…

机器学习初学者 6 个核心算法!建议收藏,反复观看!

今天再来介绍机器学习算法的基本概念和适用场景&#xff01; 首先&#xff0c;引用一句英国统计学家George E. P. Box的名言&#xff1a;All models are wrong, but some are useful. 没有哪一种算法能够适用所有情况&#xff0c;只有针对某一种问题更有用的算法。 也就是说&…

【新版系统架构】知识点背诵默写本

前言 系统架构考试在即&#xff0c;想要考试的人肯定感受到了沉甸甸的压力和紧迫感&#xff0c;脑海中不断闪过知识点的画面&#xff0c;却让人有些头昏脑胀&#xff0c;发现很难完全记住&#xff0c;这个考试很难&#xff0c;知识点很多。这次我在准备考试的同时&#xff0c;…

Android GPU渲染屏幕绘制显示基础概念(1)

Android GPU渲染屏幕绘制显示基础概念&#xff08;1&#xff09; Android中的图像生产者OpenGL&#xff0c;Skia&#xff0c;Vulkan将绘制的数据存放在图像缓冲区中&#xff0c;Android中的图像消费SurfaceFlinger从图像缓冲区将数据取出&#xff0c;进行加工及合成。 Surface…

华为云CodeArts API专场直播来袭!——探索API全生命周期管理新趋势

API的全生命周期管理是否让你摸不清头脑&#xff1f;你是否对API的前沿技术和应用充满了好奇&#xff0c;渴望一探究竟&#xff1f; 华为云PaaS服务即将在5月10日16:00&#xff0c;为你带来一场别开生面的CodeArts API专场直播活动&#xff01; 你可以在轻松愉快的氛围中&…

小巧简单实用的Linux端口转发工具Rinetd

Linux下实现端口转发有很多种方法&#xff0c;尤其是在可以联网的情况下&#xff0c;更是容易。最近在资源受限的定制系统中&#xff0c;找到一个方便离线安装和使用的端口转发工具Rinetd&#xff0c;安装包仅几十K&#xff0c;而且有很多版本的Linux发行系统的支持。 1、安装…

水质监测设备预警系统

随着工业化进程的加快和城市化水平的提高&#xff0c;水质安全问题愈发受到社会各界的广泛关注。为了确保水资源的清洁与安全&#xff0c;水质监测设备预警系统成为了不可或缺的利器。在这个背景下&#xff0c;HiWoo Cloud平台凭借其先进的技术和卓越的性能&#xff0c;为水质监…

【已解决】直接在远程新增文件本地再提交报Merge branch ‘master‘ of

【已解决】直接在远程新增文件本地再提交报Merge branch ‘master’ of … 1、问题产生背景 直接在远程仓库新建了md文件&#xff0c;本地库修改了文件已添加到暂存区之后再提交报错 2、分析 远程新建文件产生变更&#xff0c;版本号与本地拿到的不一致&#xff0c;本地再次提…

Docker 安装的MySQL迁移数据库

1. 导出数据库 docker ps :查看数据库对应的 CONTAINER ID docker exec -it id /bin/bash : 进入到mysql的docker实例中 cd /usr/bin : 进入到bin目录 mysqldump -u root -p123456 study > /root/study_backup0509.sql :使用mysqldump备份库&#xff0c;注意密码与-p之间…

PopChar for Mac v10.1激活版:特殊字符输入工具

PopChar for Mac是一款专为Mac用户设计的字符输入工具&#xff0c;其简单直观的功能使得查找和插入特殊字符变得轻而易举。 PopChar for Mac v10.1激活版下载 首先&#xff0c;PopChar为Mac提供了访问所有字体字符的能力&#xff0c;包括那些难以通过键盘直接输入的字符。用户只…

【3dmax笔记】032: 编辑顶点

一、编辑顶点概述 (1)启动安装好的3dmax软件。 (2)选择顶视图,用图形画出一个矩形。 (3)选择矩形,右击鼠标,将矩形转换成可编辑样条线。 (4)进入顶点层级。 展开可编辑样条线,选择顶点层级(快捷键为1,在不展开样条线的情况下也可以选择顶点层级)。选择后,可以…

postman介绍、安装、使用、功能特点、注意事项

Postman是一款流行的API开发工具&#xff0c;它提供了丰富的功能&#xff0c;包括创建、测试、调试和文档化API。本文将介绍Postman的安装、使用方法&#xff0c;以及其功能特点和注意事项。 1. 介绍 Postman是一款用于构建、测试和调试API的工具&#xff0c;它提供了用户友好的…

串口通信---了解

1 串口接线方式 RXD&#xff1a;数据输入引脚&#xff0c;数据接受&#xff1b;STC89系列对应P3.0口 TXD&#xff1a;数据发送引脚&#xff0c;数据发送&#xff1b;STC89系列对应P3.1口 接线方式 串口编程要素 输入/输出数据缓冲器叫做SBUF&#xff0c;都用99H地址码&#x…

链式二叉树的基本操作1

1.概念回顾 讲二叉树的基本操作之前&#xff0c;我们回顾一下二叉树的概念 在讲树之前&#xff0c;我们的每讲一种数据结构&#xff0c;无外乎就是在讲它们的增删查改&#xff0c;但是在树这里&#xff0c;就有了不小变化。 2.结点的定义 既然是链式二叉树&#xff0c;那必须…

必学-设计模式

设计模式的分类 创建型模式&#xff08;Creational&#xff09;&#xff1a;关注对象的实例化过程&#xff0c;包括了如何实例化对象、隐藏对象的创建细节等。常见的创建型模式有单例模式、工厂模式、抽象工厂模式等。 结构型模式&#xff08;Structural&#xff09;&#xff…

Tensorflow2.0笔记 - 循环神经网络RNN做IMDB评价分析

本笔记记录使用SimpleRNNCell做一个IMDB评价系统情感二分类问题的例子。 import os import time import numpy as np import tensorflow as tf from tensorflow import keras from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics, Inputos.envir…

VisualGLM-6B微调(V100)

Visualglm-6b-CSDN博客文章浏览阅读1.3k次。【官方教程】XrayGLM微调实践&#xff0c;&#xff08;加强后的GPT-3.5&#xff09;能力媲美4.0&#xff0c;无次数限制。_visualglm-6bhttps://blog.csdn.net/u012193416/article/details/131074962?ops_request_misc%257B%2522req…

2. Linux 基本指令(上)|ls|pwd|cd|tree|touch|mkdir|rmdir|rm

前言 计算机软硬件体系结构 层状结构应用软件Word&#xff0c;Matlab操作系统Windows&#xff0c;Linux设备驱动声卡驱动硬件CPU&#xff0c;内存&#xff0c;磁盘&#xff0c;显示器&#xff0c;键盘 操作系统概念 操作系统 是一款进行软硬件资源管理的软件 例子 比如在学…

Join优化规则及应用层BI系统实践

目录 一、背景 二、查询优化器概述​编辑 2.1 System R Optimizer 2.2 Volcano Optimizer 2.3 Cascade Optimizer 三、Join相关优化规则 3.1 JoinReorder 3.1.1 少量表的Reorder 3.1.2 大量表的Reorder 3.1.3 星型模型的Reorder 3.2 外连接消除 3.3 Join消除 3.4 谓…

使用ROW_NUMBER()分组遇到的坑

1、再一次清洗数据时&#xff0c;需要过滤重复数据&#xff0c;使用了ROW_NUMBER() 来分组给每组数据排序号 在获取每组的第一行数据 with records as(select cc.F_Id as Id,REPLACE(cc.F_CNKITitle,char(10),1) as F_CNKITitle,REPLACE(REPLACE(cc.F_Special,专题&#xff1…
最新文章