hjdatadefine.h 54 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943
  1. #ifndef __HJDATADEFINE__
  2. #define __HJDATADEFINE__
  3. #include "WinDef.h"
  4. #include <stdint.h>
  5. #include <map>
  6. #include <set>
  7. #include <vector>
  8. #include <string>
  9. #define DATA_HEADTAIL 0xAA
  10. #define DATA_HEAD 0xAA
  11. #define DATA_TAIL 0xAA
  12. #define DATA_CONVER 0xAB
  13. //数据中心和数据总中心的交互指令
  14. #define UP_MSG_LOGIN 0x01 //登录包或者订阅包
  15. #define UP_MSG_LIST 0x03 //请求任务列表
  16. #define UP_MSG_TASKSTATUS 0x05 //请求任务状态
  17. #define UP_MSG_ALARMHANDLE 0x08 //上传报警处理
  18. #define UP_MSG_PLATEINFO 0x0A
  19. #define UP_MSG_LASTALARM 0x0B //请求最后报警
  20. #define UP_MSG_LASTRTINFO 0x0C //请求最后状态信息
  21. #define UP_MSG_HISTORYALARM 0x0D //请求历史报警
  22. #define UP_MSG_HISTORYRTINFO 0x0E //请求历史状态信息
  23. #define UP_MSG_ERROR 0x11 //上传误报警
  24. #define UP_MSG_VIDEO_START 0x13 //请求开始实时视频
  25. #define UP_MSG_VIDEO_STOP 0x15 //请求停止实时视频
  26. #define MSG_REALTIMEANALYSIS 0x18 //下发定时分析图片 //用于分析是否车道是否偏移等功能
  27. #define UP_MSG_DELETEALARM 0x19 //上传删除报警
  28. #define UP_MSG_CONFIRMALARM 0x21 //上传报警确认
  29. #define UP_MSG_VIDEOFINISH 0x23 //上传录像通知
  30. #define UP_MSG_MARKERROR 0x25 //上传误报警入库
  31. #define UP_MSG_PTZCMD 0x27 //上传云台控制
  32. #define UP_MSG_KEEP 0x32 //心跳
  33. #define UP_MSG_IDTRACK_INFO 0x2C //上传目标id跟踪信息
  34. #define DOWN_MSG_RESP 0x02 //通用应答包
  35. #define DOWN_MSG_LIST 0x04 //下发任务列表
  36. #define DOWN_MSG_TASKSTATUS 0x06 //下发任务状态
  37. #define DOWN_MSG_ALARM 0x07 //下发报警
  38. #define DOWN_MSG_RTINFO 0x09 //下发状态信息
  39. #define DOWN_MSG_LICENSE 0x0A //下发车牌信息
  40. #define DOWN_MSG_VIDEO_DATA 0x14 //下发视频数据
  41. #define DOWN_MSG_DELETEALARM 0x20 //下发删除报警
  42. #define DOWN_MSG_CONFIRMALARM 0x22 //下发报警确认
  43. #define DOWN_MSG_MARKERROR 0x24 //下发错误标记
  44. #define DOWN_MSG_KEEP 0x26 //心跳
  45. #define DOWN_MSG_REALTIMEANALYSIS 0x28 //下发实时分析图片(类似报警) //崇左定制 2023年10月18日起 使用 MSG_REALTIMEANALYSIS
  46. #define DOWN_MSG_ALARM_DATA 0x2A //下发报警数据图片 暂时只用于图片
  47. #define DWON_MSG_IDTRACK_INFO 0x2D //下发目标id跟踪信息
  48. #define DWON_MSG_IDTRACK_INFOTOSERVER 0x2E //下发目标id跟踪信息到dataserver
  49. #define DOWN_MSG_LIST_NEW 0x1A //下发新的任务列表
  50. #define DOWN_MSG_REFLECTIVECONE_INFO 0x1D //下发反光锥桶信息
  51. #define DOWN_MSG_CONSTRUCTION_INFO 0x1E //下发施工信息
  52. #define MSG_CONTROL 0x1B //下发控制命令 此命令同协议号回包
  53. #define MSG_VIDEO_SRC 0x1C //下发视频源配置
  54. #define MSG_TASK_LIST 0x29 //请求和下发任务列表 用于下发给VA关联通道用
  55. #define MSG_TASK_CONF 0x2B //请求和下发任务配置
  56. #define MSG_CONFIRM_RECV_ALARM_0x2F 0x2F //确认收到报警. 报警补传用, 数据内容为36 bit guid + 预留156bit
  57. #define MSG_LOG 0x33 //系统日志
  58. #define UP_MSG_TIME 0x34 //时间同步
  59. #define NOTICE_MSG_FEEDBACK 0x3A //雨雾报警反馈
  60. #define UP_MSG_ALARM_ERROR 0x40 //非车辆行人误报警反馈
  61. #define MSG_CAMERA_STATUS 0x35 //摄像机状态 设备ID 13bit + 状态 1bit + 摄像机ip 16bit 预留 34bit 状态: 0.离线 1.在线
  62. #define DOWN_MSG_IMAGE_DATA 0x36 //下发图像数据
  63. #define MSG_CONFIG_JSON_DATA 0x37 //配置数据获取和设置 1bit OR_DATA_INFO + 64bit taskname + json data
  64. #define MSG_CONGESTION_INFO 0x39 //收费站拥堵长度
  65. #define MSG_TRAINWORK_INFO 0x42 //隧道行车信息
  66. #define UP_WATCH_LIST 0x61 //请求监控列表
  67. #define DOWN_WATCH_LIST 0x62 //下发监控列表
  68. #define UP_WATCH_CONTROL 0x63 //请求控制监控操作 启动.停止.暂停.继续.隐藏.显示.重启.添加.删除等
  69. #define UP_WATCH_ALLCTL 0x65 //请求对所有监控操作 启动.停止.暂停.继续.隐藏.显示.重启.添加.删除等
  70. #define UP_SERVER_STATUS 0x66 //请求服务器状态
  71. #define DOWN_SERVER_STATUS 0x67 //响应\或主动通知服务器状态
  72. //广播协议
  73. #define MSG_GROUP_MOD_ADDR 0xFE //修改地址协命令
  74. #define MSG_DISCOVER_DEVICE 0xFF //路由发现协议
  75. //任务来源定义
  76. #define TASK_SOURCE_UNDEFINE 0x00
  77. #define TASK_SOURCE_JIESHANG 0x01
  78. #define TASK_SOURCE_HUIJING 0x02
  79. #define TASK_SOURCE_XIANDL 0x03
  80. //车辆类型 specialvalue 第一字节低四位
  81. //#define CAR_TYPE_INVALID 0x00 //无效
  82. //#define CAR_TYPE_TRUNK 0x01
  83. //#define CAR_TYPE_BUS 0x02
  84. //#define CAR_TYPE_CAR 0x03 //小车
  85. //#define CAR_TYPE_YELLOW 0x04 //维护车辆
  86. //位置信息 specialvalue 第一字节高四位
  87. #define ALARM_LOCA_INVALID 0x00
  88. #define ALARM_LOCA_HARD 0x01 //硬路肩
  89. #define ALARM_LOCA_PARK 0x02 //停车带
  90. #define ALARM_LOCA_LANE 0x03 //主车道
  91. #define ALARM_LOCA_GUIDE 0x04 //导流带
  92. #define ALARM_LOCA_ISOLA 0x05 //隔离带
  93. #define ALARM_LOCA_RAMP 0x06 //匝道
  94. #define ALARM_DIRECTION_INVALID 0x00 //位置方向
  95. #define ALARM_DIRECTION_NEGA 0x01
  96. #define ALARM_DIRECTION_POSI 0x02
  97. //报警车辆类型
  98. #define ALARM_CARTYPE_TRUCK 0x01 //货车
  99. #define ALARM_CARTYPE_BUS 0x02 //客车
  100. #define ALARM_CARTYPE_CAR 0x03 //小车
  101. #define ALARM_CARTYPE_TANKER 0x04 //油罐车
  102. #define ALARM_CARTYPE_YELLOWCAR 0x05 //施工车
  103. #define ALARM_CARTYPE_CONTRAINERTRUCK 0x06 //厢式货车
  104. #define ALARM_CARTYPE_POLICECAR 0x07 //警车
  105. #define SPECIAL_POSI(x) (x & 0xFFFF3FFF | 0x008000)
  106. #define SPECIAL_NEGA(x) (x & 0xFFFF3FFF | 0x004000)
  107. #define SPECIAL_LOCA(x) ((x & 0x0000C000) >> 14)
  108. #define SPECIAL_EVENTLOCA(x) ((x & 0x000000F0) >> 4)
  109. #define SPECIAL_TYPE(x) (x & 0x0000000F)
  110. #define SPECIAL_LANE(x) ((x & 0x00000F00) >> 8)
  111. //MSG_CONTROL
  112. enum class VA_CONTROL_TYPE : uint16_t
  113. {
  114. VBT_SNAP = 0x01, //抓拍
  115. VBT_MODIFY_IP = 0x02, //修改视频源IP
  116. VBT_MODIFY_ID = 0x03, //修改taskid 64bit taskname + 13bit old taskid + 13bit new taskid
  117. VBT_MODIFY_NAME = 0x04, //修改taskname 64bit taskname + 64bit old taskname
  118. VBT_MODIFY_INTERVAL = 0x05, //修改流量统计间隔 4bit 统计时长
  119. VBT_CHECK_BOX = 0x06, // 复选框勾选 1bit 0 read or 1 set + 2bit checkbox type + 64bit taskname + 1bit value + 1bit result
  120. VBT_SAMPLE = 0x07, //截取样本类型下发 2bit WORK_TARGET_TYPE 16bit reser
  121. };
  122. enum class VA_CONFIG_CHECKBOX_TYPE : uint16_t
  123. {
  124. VCIT_PRESET_CONFIG = 0x01, //预置位配置
  125. };
  126. //分析服务器类型
  127. enum class VASERVICE_TYPE
  128. {
  129. VST_INVALD = 0,
  130. VST_IVU = 1,
  131. VST_VA = 2,
  132. VST_XADL = 3,
  133. VST_DATA = 4,
  134. };
  135. enum class ALARM_LEVEL
  136. {
  137. Fatal = 1,
  138. Error = 2,
  139. Warn = 3,
  140. Info = 4,
  141. };
  142. //分析场景类型
  143. enum class ANALYSISSCENARIO_TYPE : uint8_t
  144. {
  145. AS_UNKOWN = 0,
  146. AS_TUNNEL = 2, //隧道
  147. AS_ROAD = 1, //路面
  148. AS_TUNNELOPENING = 5, //洞口
  149. AS_TUNNELN = 4, //汽通洞
  150. AS_SWITCHHOUSE = 15, //配电房
  151. AS_SERVERAREA = 11, //服务区
  152. AS_TOLLSTATION = 6, //收费站
  153. AS_NATIONALROAD = 19, //国道
  154. AS_PARKINGSTRIP = 3, //停车带
  155. AS_RADAR = 17, //雷达
  156. AS_FISHEYE = 18, //鱼眼
  157. };
  158. //目标类型
  159. enum class WORK_TARGET_TYPE : uint16_t
  160. {
  161. WTT_UNKOWN = -1,
  162. WTT_CAR = 0x00, //小车
  163. WTT_PERSON = 0x01, //行人
  164. WTT_OTHER = 0x02, //其他
  165. WTT_SPILL = 0x03, //抛撒物
  166. WTT_BICYCLE = 0x04, //自行车
  167. WTT_MOTORBIKE = 0x05, //摩托车
  168. WTT_BUS = 0x06, //大巴
  169. WTT_TRUCK = 0x07, //货车
  170. WTT_YELLOWCAR = 0x08, //工程车
  171. WTT_REFLECTIVECONE = 0x09, //反光锥
  172. WTT_YELLOWPERSON, //维护人员
  173. WTT_TANKER, //危化品
  174. WTT_MULTI_CAR, //多辆车(拥堵)
  175. WTT_FIRE, //火焰
  176. WTT_PTZ, //字符
  177. WTT_CAT, //猫
  178. WTT_DOG, //狗
  179. WTT_SMOG, //烟雾
  180. WTT_SHEEP, //羊
  181. WTT_COW, //牛
  182. WTT_BRANCH, //树枝
  183. WTT_REFLECTIVEEVSTS, //反光背心
  184. WTT_BARRIERARM, //抬杆
  185. WTT_TOOL, //工具
  186. WTT_HEAD, //头
  187. WTT_HAT, //帽子
  188. WTT_CLOTHES, //衣服
  189. WTT_TRAILER, //挂车
  190. WTT_WOVENBAG, // 编织袋
  191. WTT_RUBBISH, // 垃圾堆
  192. };
  193. enum TaskStateType
  194. {
  195. STATUS_ALL = -1,
  196. STATUS_STOP = 0, /*停止*/
  197. STATUS_GETSTREAMING = 1, /*正在获取视频流*/
  198. STATUS_GETSTREAMFAILED = 2, /*正在获取视频流*/
  199. STATUS_ALGINITERROR = 3, /*算法错误 可能视频尺寸 加密狗 规则设置等问题*/
  200. STATUS_ALGSETCONFIGERROR = 4, /*算法错误 可能视频尺寸 加密狗 规则设置等问题*/
  201. STATUS_ANALYZING = 5, /*正常分析中*/
  202. STATUS_STOPBYTIME = 6, /*处于暂停时间中*/
  203. STATUS_STOPBYUSAGE = 7, /*性能占用过高,暂停任务*/
  204. STATUS_FILESERIALIZING = 8, /*文件解析中*/
  205. STATUS_FILESERIALIZEFAILED = 9, /*文件解析中*/
  206. };
  207. enum class eTimeSlot : uint8_t
  208. {
  209. TS_UNKNOW = 0,
  210. TS_DAYTIME,
  211. TS_NIGHTTIME,
  212. TS_ALTERNATING,
  213. TS_SKY, //天窗
  214. };
  215. enum DA_AlarmType
  216. {
  217. ALARM_0 = 0x00, //0x00: 抓拍
  218. ALARM_1 = 0x01, //0x01: "移动物体";
  219. ALARM_2 = 0x02, //0x02: "小场景打架"; //移动人体改成打架 2009/12/03 ;打架改成小场景打架;
  220. ALARM_3 = 0x03, //0x03: "环境突变";
  221. ALARM_4 = 0x04, //0x04: "区域滞留";
  222. ALARM_5 = 0x05, //0x05: "区域内消失";
  223. ALARM_6 = 0x06, //0x06: "进入区域";
  224. ALARM_7 = 0x07, //0x07: "离开区域";
  225. ALARM_8 = 0x08, //0x08: "左穿越拌线";
  226. ALARM_9 = 0x09, //0x09: "右穿越拌线";
  227. ALARM_0A = 0x0A, //0x0A: "踩线";
  228. ALARM_0B = 0x0B, //0x0B: "突然出现";
  229. ALARM_0C = 0x0C, //0x0C: 常规图片 //物品盗移前图片
  230. ALARM_0D = 0x0D, //0x0D: "清晰人脸抓拍";
  231. ALARM_0E = 0x0E, //0x0E: "物品盗移";
  232. ALARM_0F = 0x0F, //0x0F: "物品位移";
  233. ALARM_10 = 0x10, //0x10: "物品遮挡";
  234. ALARM_11 = 0x11, //0x11: "多于1张人脸抓拍";
  235. ALARM_12 = 0x12, //0x12: "物体滞留";
  236. ALARM_13 = 0x13, //0x13: "跌倒";
  237. ALARM_14 = 0x14, //0x14: "加速";
  238. ALARM_15 = 0x15, //0x15: "徘徊";
  239. ALARM_16 = 0x16, //0x16: "超高";
  240. ALARM_17 = 0x17, //0x17: 清晰人脸抓拍灰度图,灰度图不再是JPEG图片
  241. ALARM_18 = 0x18, //0x18: 多于1张人脸抓拍灰度图
  242. ALARM_19 = 0x19, //0x19: 报警前图片
  243. ALARM_1A = 0x1A, //0x1a: 报警后图片
  244. ALARM_1B = 0x1B, //0x1b: 人头计数查询图片
  245. ALARM_1C = 0x1C, //0x1c: 人脸图片
  246. ALARM_1D = 0x1D, //0x1d: 目标信息 people_cnt1为目标数,无图片,只有tagObjectInfo结构体
  247. ALARM_1E = 0x1E, //0x1e: 球机跟踪信息 无图片,只有tagPtzCtrlInfo结构体
  248. ALARM_1F = 0x1F, //0x1f: 球机跟踪结束 无图片,无内容
  249. ALARM_20 = 0x20, // 大场景打架
  250. ALARM_21 = 0x21, // 人员接近
  251. //广州中科院需求报警类型
  252. ALARM_22 = 0x22, // 区域内有目标(专用)
  253. ALARM_23 = 0x23, // 区域内无目标(专用)
  254. // 周界新增报警类型
  255. ALARM_24 = 0x24, // 逆行
  256. ALARM_25 = 0x25, // 聚众 (周界3.0聚众)
  257. ALARM_26 = 0x26, // 车牌识别 people_cnt1为车牌数,buf部分为people_cnt1个tagPlateInfo结构体+图片
  258. ALARM_27 = 0x27, // 安全帽
  259. // ATM滞留相关报警类型(74-0x3D为滞留用户自定义报警)
  260. ALARM_30 = 0x30, // 人员滞留超时
  261. ALARM_31 = 0x31, // 人员进入
  262. ALARM_32 = 0x32, // 人员离开
  263. ALARM_33 = 0x33, // 物体滞留前
  264. ALARM_34 = 0x34, // 键盘
  265. ALARM_35 = 0x35, // 读卡器
  266. ALARM_36 = 0x36, // 防护罩
  267. // AB相关报警类型
  268. ALARM_40 = 0x40, // 打砸
  269. ALARM_41 = 0x41, // 人员进入(AB)
  270. ALARM_42 = 0x42, // 人员滞留
  271. ALARM_43 = 0x43, // 人员聚集 (异常行为)
  272. ALARM_ROLLOVER_0x45 = 0x45, //疑似事故(侧翻)
  273. ALARM_CRASH_GUARD_0x46 = 0x46, //疑似事故(撞护栏)
  274. ALARM_REAR_END_0x47 = 0x47, //疑似事故(追尾)
  275. ALARM_BREAK_DOWN_0x48 = 0x48, //疑似事故(抛锚)
  276. ALARM_SELF_BURNING_0x49 = 0x49, //疑似事故(自然)
  277. ALARM_ANA_FRAME = 0x4E, //定时抓拍
  278. ALARM_4F = 0x4F, //观察,只存不发送
  279. ALARM_50 = 0x50, //0x50: 停驶
  280. ALARM_51 = 0x51, //0x51: 超速
  281. ALARM_52 = 0x52, //0x52: 事故
  282. ALARM_53 = 0x53, //0x53: 拥堵
  283. ALARM_PERSON = 84,
  284. ALARM_54 = 0x54, //0x54: 行人
  285. ALARM_55 = 0x55, //0x55: 逆行
  286. ALARM_FIRE = 0x56,
  287. ALARM_56 = 0x56, //0x56: 火焰
  288. ALARM_SPILL = 0x57,
  289. ALARM_57 = 0x57, //0x57: 抛洒物
  290. ALARM_58 = 0x58, //0x58: 排队超限
  291. ALARM_59 = 0x59, //0x59: 交通状态信息 无图片,只有tagDriveWayInfo结构体
  292. ALARM_5a = 0x5a, //0x5a: 抓拍(近景,会附加上车牌)
  293. ALARM_5b = 0x5b, //0x5b: 抓拍(中景) 2018年8月31日 10:03:04
  294. ALARM_5c = 0x5c, //0x5c; 光线异常 2017年12月8日 11:29:46 scz
  295. ALARM_SMOG = 0x5d,
  296. ALARM_5d = 0x5d, //0x5d; 烟雾 2017年12月8日 11:29:50 scz
  297. ALARM_5e = 0x5e, //0x5e; 摄像头转动 2018年1月4日 10:15:28 scz
  298. ALARM_5f = 0x5f, //0x5f; 低速 2018年3月29日 10:22:08 scz
  299. ALARM_MOTORBIKE_0X60 = 96,
  300. ALARM_60 = 0x60, //0x60: 非法车辆 2019年4月17日13:14:21 scz
  301. ALARM_61 = 0x61, //0x61; 施工车辆 2019年4月18日09:19:42 scz
  302. ALARM_62 = 0x62, //0x62; 施工维护人员 2019年4月18日09:20:19 scz
  303. ALARM_63 = 0x63, //0x63: 施工 2019年4月17日13:14:30 scz
  304. ALARM_64 = 0x64, //0x64; 违章变道 2019年8月14日11:02:43 scz
  305. ALARM_65 = 0x65, //0x65; 高温预警 2019年11月12日09:15:32 scz
  306. ALARM_66 = 0x66, //0x66; 高温报警 2019年11月12日13:50:14 scz
  307. ALARM_67 = 0x67, //0x67; 低温预警 2019年11月12日09:16:01 scz
  308. ALARM_68 = 0x68, //0x68; 低温报警 2019年11月12日09:16:01 scz
  309. ALARM_69 = 0x69, //0x69; 火点报警 2019年11月14日11:03:54 scz
  310. ALARM_6a = 0x6a, //0x6a; 压线报警 2020年5月22日11:26:41 scz
  311. ALARM_6b = 0x6b, //0x6b 行驶车辆异常 107
  312. ALARM_6c = 0x6c, //0x6c 能见度报警 108
  313. ALARM_6e = 0x6e, //0x6e; 摄像机异常 2019年8月21日09:22:15 scz
  314. ALARM_6f = 0x6f, //0x6f; 昼夜交替 2018年11月1日 16:10:51 scz
  315. ALARM_70 = 0x70, //112; 驶离
  316. ALARM_71 = 0x71, //113; 非法闯入
  317. ALARM_72 = 0x72, //114 树枝侵入
  318. ALARM_73 = 0x73, //115 工具遗漏
  319. ALARM_74 = 0x74, //116 抬杆
  320. ALARM_75 = 0x75, //117 可燃物
  321. ALARM_76 = 0x76, //118 滞留
  322. ALARM_77 = 0x77, //119 拥堵解除
  323. ALARM_78 = 0x78, //120 施工解除
  324. ALARM_79 = 0x79, //121 穿越导流带报警
  325. ALARM_7a = 0x7a, //122 挂车报警
  326. ALARM_LENS_OFFSET_7b = 0x7b, //123 镜头偏移
  327. ALARM_7c = 0x7c, //车辆超限
  328. ALARM_81 = 0x81, //0x81: "外接报警1";
  329. ALARM_82 = 0x82, //0x82: "外接报警2";
  330. ALARM_83 = 0x83, //0x83: "外接报警3";
  331. ALARM_84 = 0x84, //0x84: "外接报警4";
  332. // 视频丢失和视频遮挡相关报警类型
  333. ALARM_90 = 0x90, //144 视频丢失
  334. ALARM_91 = 0x91, //145 视频遮挡
  335. ALARM_92 = 0x92, //146 视频模糊(视频质量下降) 2021年7月15日08:47:00
  336. // 设备相关报警类型(新)
  337. ALARM_93 = 0x93, // 紧急报警
  338. ALARM_94 = 0x94, // 无硬盘
  339. ALARM_DISK_OVER_95 = 149,
  340. ALARM_95 = 0x95, // 硬盘满
  341. ALARM_96 = 0x96, // 硬盘错误
  342. ALARM_97 = 0x97, // 登录失败
  343. ALARM_98 = 0x98, // 设备网络中断 2021年7月15日08:50:22
  344. ALARM_99 = 0x99, // 网络冲突
  345. ALARM_9A = 0x9A, // 算法重置
  346. ALARM_9B = 0x9B, // 网络通信故障
  347. ALARM_9C = 0x9C, // 无GPU
  348. ALARM_GPU_MEM_9D = 0x9D, //显存异常
  349. ALARM_GPU_USE_9E = 0x9E, //GPU异常
  350. ALARM_9F = 0x9F, //判断设备类型用
  351. // 人脸遮挡算法相关报警类型
  352. ALARM_A0 = 0xA0, /* 口罩遮挡(v3.0版本新增) */
  353. ALARM_A1 = 0xA1, /* 墨镜遮挡(v3.0版本新增) */
  354. ALARM_A2 = 0xA2, /* 其他遮挡(v3.0版本新增) */
  355. // 帽子检测算法报警类型
  356. ALARM_A6 = 0xA6, /* 没有佩戴安全帽 */
  357. ALARM_A7 = 0xA7, //未穿反光衣或其它穿带异常
  358. //桥下报警 0xB0~0xB8
  359. ALARM_PERSON_STAY_0XB0 = 176, //人员滞留
  360. ALARM_CAR_STAY_0XB1 = 177, //车辆滞留
  361. ALARM_RUBBISH_0XB2 = 178, //堆放物料
  362. ALARM_ILLEGAL_OPT_0XB3 = 179, //违规操作/违规经营
  363. ALARM_DUMP_RUBBISH_0xB4 = 180, //疑似倾倒垃圾
  364. ALARM_E0 = 0xE0, //0xe0: 人头计数报警格式,尾部增加img_alarm_report_t结构体
  365. ALARM_E1 = 0xE1, //0xe1: 聚众报警的图片
  366. ALARM_E2 = 0xE2, // 双目垂直人头计数
  367. ALARM_EE = 0xEE, //0xee: mjpeg视频流
  368. ALARM_F0 = 0xF0, //0xF0: "设备重启";
  369. ALARM_F1 = 0xF1, //0xF1: "上电抓拍";
  370. ALARM_TEST = 0xFF,
  371. };
  372. enum class WATCH_CONTROL_ACTION
  373. {
  374. WCA_UNKNOW = 0,
  375. WCA_START,
  376. WCA_STOP,
  377. WCA_PAUSE,
  378. WCA_CONTINUE,
  379. WCA_HIDE,
  380. WCA_SHOW,
  381. WCA_REBOOT,
  382. WCA_APPEND,
  383. WCA_DELETE,
  384. WCA_CLEAR
  385. };
  386. enum class VA_CAMERA_BRAND
  387. {
  388. VCB_UNKOWN = 0x00,
  389. VCB_HIK,
  390. VCB_DAHUA,
  391. VCB_UNIVIEW,
  392. VCB_SANTICHI,
  393. VCB_AXIS,
  394. VCB_OBTELECOM,
  395. VCB_SUNCTI,
  396. VCB_SIGNALWAY,
  397. VCB_PELCO,
  398. VCB_HUAWEI,
  399. };
  400. //数据包类型
  401. enum class VA_PACK_TYPE
  402. {
  403. VPT_UNKOWN = 0,
  404. VPT_ALARM_EVENT, //报警事件
  405. VPT_TRAFFIC_FLOW, //车流量
  406. VPT_PLATE_DETECT, //车牌检测
  407. VPT_REAL_MONITOR,
  408. VPT_RCF_EVENT, //反光锥事件
  409. VPT_CONGEST_INFO, //拥堵信息
  410. };
  411. enum class VA_ALARM_DATA_TYPE : uint8_t
  412. {
  413. VADT_PIC_JPG = 0x00, //JPG数据
  414. VADT_VIDEO_MP4 = 0x01, //MP4数据
  415. VADT_VIDEO_H264 = 0x02, //H264数据
  416. };
  417. enum class VA_DATA_CATA : uint8_t
  418. {
  419. VDC_PIC = 0x00, //pic
  420. VDC_IMG = 0x01, //img
  421. VDC_LOG = 0x02, //log
  422. VDC_PLATE = 0x03, //plate
  423. VDC_VIDEO = 0x04, //video
  424. VDC_ANA = 0x05, //ana
  425. };
  426. #pragma pack(push, 1)
  427. //头部
  428. typedef struct tagHjDataHead {
  429. BYTE head; //头部标识
  430. BYTE len[2]; //数据内容的长度
  431. BYTE ver; //协议版本
  432. BYTE protocol; //数据包的协议代码
  433. BYTE subno; //下级的编号 如果是数据中心发往数据服务,则为0
  434. BYTE subpacknum; //分包总数,0和1表示不分包
  435. bool subpackend : 1; //分包结束标记
  436. BYTE subpackno : 7; //分包编号
  437. DWORD packno; //数据包编号
  438. }HJDATAHEAD, * LPHJDATAHEAD;
  439. //21
  440. typedef struct tagHjDataHead2 {
  441. DWORD64 head; //头部标识
  442. DWORD len; //数据内容的长度,等于包长度 – 21 – 2,后面数据长度为9 + len + 2
  443. BYTE ver; //协议版本
  444. BYTE protocol; //数据包的协议代码
  445. BYTE subno; //下级的编号 如果是数据中心发往数据服务,则为0
  446. BYTE subpacknum; //分包总数,0和1表示不分包
  447. bool subpackend : 1; //分包结束标记
  448. BYTE subpackno : 7; //分包编号
  449. DWORD packno; //数据包编号
  450. }HJDATAHEAD2, * LPHJDATAHEAD2;
  451. typedef struct tagOrDataInfo
  452. {
  453. uint8_t readORset : 1; //0 read 1 set
  454. uint8_t requestORresponse : 1; //0 request 1 response
  455. uint8_t failORsucc : 1; // 0 fail 1 succ response 时使用
  456. uint8_t source : 2; // 0 web 1 vaservice 2 dataservice 3 super
  457. uint8_t reser : 3;
  458. }OR_DATA_INFO, * LPOR_DATA_INFO;
  459. typedef struct tagVAConfigData
  460. {
  461. OR_DATA_INFO or_info;
  462. char taskname[64] = { 0 };
  463. char jsondata[0];
  464. }VACONFIG_DATA, * LPVACONFIG_DATA;
  465. typedef struct dATALOGIN {
  466. char name[50];
  467. WORD areano;
  468. char addr[32];
  469. char user[32];
  470. char pswd[32];
  471. }DATALOGIN, * LPDATALOGIN;
  472. typedef struct dATANOTICE {
  473. char addr[32];
  474. WORD port;
  475. byte bnotice;
  476. }DATANOTICE, * LPDATANOTICE;
  477. typedef struct dATALIST {
  478. char ivuaddr[32] = { 0 };//192.168.2.73:21011
  479. uint8_t tasknum = 0;//共有多少个任务.
  480. uint8_t task_size = 0; //每个任务结构体多少长度
  481. //WORD tasknum;
  482. }DATALIST, * LPDATALIST;
  483. typedef struct {
  484. DWORD packno;
  485. BYTE protocol;
  486. BYTE result;
  487. char mark[32];
  488. }DATARESP, * LPDATARESP;
  489. typedef struct tagDDateTime
  490. {
  491. WORD wYear;
  492. WORD wMonth;
  493. WORD wDayOfWeek;
  494. WORD wDay;
  495. WORD wHour;
  496. WORD wMinute;
  497. WORD wSecond;
  498. WORD wMilliseconds;
  499. void operator=(tagDDateTime dataTime)
  500. {
  501. wYear = dataTime.wYear;
  502. wMonth = dataTime.wMonth;
  503. wDay = dataTime.wDay;
  504. wHour = dataTime.wHour;
  505. wMinute = dataTime.wMinute;
  506. wSecond = dataTime.wSecond;
  507. wMilliseconds = dataTime.wMilliseconds;
  508. }
  509. void operator=(uint64_t t)
  510. {
  511. CTime time(t / 1000);
  512. SYSTEMTIME st;
  513. time.GetAsSystemTime(st);
  514. wYear = st.wYear;
  515. wMonth = st.wMonth;
  516. wDay = st.wDay;
  517. wHour = st.wHour;
  518. wMinute = st.wMinute;
  519. wSecond = st.wSecond;
  520. wMilliseconds = t % 1000;
  521. }
  522. bool operator>(tagDDateTime dataTime) const
  523. {
  524. int iSecond = wHour * 3600 + wMinute * 60 + wSecond;
  525. int iOtherSecond = dataTime.wHour * 3600 + dataTime.wMinute * 60 + dataTime.wSecond;
  526. if (iSecond > iOtherSecond)
  527. {
  528. return true;
  529. }
  530. else
  531. {
  532. return false;
  533. }
  534. }
  535. bool operator<(tagDDateTime dataTime) const
  536. {
  537. int iSecond = wHour * 3600 + wMinute * 60 + wSecond;
  538. int iOtherSecond = dataTime.wHour * 3600 + dataTime.wMinute * 60 + dataTime.wSecond;
  539. if (iSecond < iOtherSecond)
  540. {
  541. return true;
  542. }
  543. else
  544. {
  545. return false;
  546. }
  547. }
  548. bool operator==(tagDDateTime dataTime) const
  549. {
  550. return (dataTime.wYear == wYear && dataTime.wMonth == wMonth && dataTime.wDay == wDay &&
  551. dataTime.wHour == wHour && dataTime.wMinute == wMinute && dataTime.wSecond == wSecond);
  552. }
  553. bool operator!=(tagDDateTime dataTime) const
  554. {
  555. return (dataTime.wHour != wHour || dataTime.wMinute != wMinute || dataTime.wSecond != wSecond);
  556. }
  557. void Parse(const char* chTime)
  558. {
  559. sscanf_s(chTime, "%04hd-%02hd-%02hdT%02hd:%02hd:%02hd", &wYear, &wMonth, &wDay, &wHour, &wMinute, &wSecond);
  560. }
  561. void ParseFromANSI(const char* chTime)
  562. {
  563. sscanf_s(chTime, "%04hd-%02hd-%02hd %02hd:%02hd:%02hd", &wYear, &wMonth, &wDay, &wHour, &wMinute, &wSecond);
  564. }
  565. operator CString()
  566. {
  567. CString strTime;
  568. strTime.Format("%04hd-%02hd-%02hd %02hd:%02hd:%02hd", wYear, wMonth, wDay, wHour, wMinute, wSecond);
  569. return strTime;
  570. }
  571. operator uint64_t() const
  572. {
  573. uint64_t nTimer = 0;
  574. tm temptm = { wSecond,
  575. wMinute,
  576. wHour,
  577. wDay,
  578. wMonth - 1,
  579. wYear - 1900
  580. };
  581. nTimer = mktime(&temptm) * 1000 + wMilliseconds;
  582. return nTimer;
  583. }
  584. }DDATE_TIME;
  585. typedef struct {
  586. char guid[37];
  587. char name[20];
  588. DDATE_TIME time;
  589. BYTE result;
  590. char mark[200];
  591. }DATAALARMHANDLE, * LPDATAALARMHANDLE;
  592. typedef struct tagHistoryReq
  593. {
  594. char taskid[12];
  595. char taskname[64];
  596. DDATE_TIME starttime;
  597. DDATE_TIME endtime;
  598. BYTE reserve[16];
  599. tagHistoryReq()
  600. {
  601. memset(this, 0, sizeof(tagHistoryReq));
  602. }
  603. }DATA_HISTORYREQ, * LPDATA_HISTORYREQ;
  604. typedef struct tagDataTaskItem
  605. {
  606. char task_id[12]; // 任务唯一ID
  607. char task_name[64]; // 任务名称(界面显示用)
  608. char roadno[6];
  609. unsigned char task_type; // 0-实时视频 1-录像视频 2-本地文件
  610. DWORD scenestype : 8; //1字节 场景类型 0 未知 3 普清路面 4 普清隧道 5 高清路面 7 高清隧道 8走廊过道 9 匝道 10 热成像匝道 10
  611. DWORD stationnum : 24; //3字节 桩号
  612. char sourcetype; //来源类型, 0. 无效 1. ONVIF 2. GB28181 3. DAXUN 4. WEICHUAN 5. HIK 2017年9月27日 10:01:05 scz
  613. char sourceip[16]; //视频源IP
  614. unsigned short sourceport; //视频源端口
  615. int taskState;
  616. }DATA_TASK_ITEM, * LPDATA_TASK_ITEM;
  617. typedef struct tagDataTaskItemEx : tagDataTaskItem
  618. {
  619. uint32_t lng = 0; //经度 10的六次方
  620. uint32_t lat = 0; // 纬度 10的六次方
  621. char version[20] = { 0 };
  622. uint32_t rever[6] = { 0 }; //预留
  623. }DATA_TASK_ITEMEX, * LPDATA_TASK_ITEMEX;
  624. typedef struct tagDataTaskItemEx1
  625. {
  626. char task_id[12]; // 任务唯一ID
  627. char task_name[64]; // 任务名称(界面显示用)
  628. char roadno[6];
  629. unsigned char task_type; // 0-实时视频 1-录像视频 2-本地文件
  630. DWORD scenestype : 8; //1字节 场景类型 0 未知 3 普清路面 4 普清隧道 5 高清路面 7 高清隧道 8走廊过道 9 匝道 10 热成像匝道 10
  631. DWORD stationnum : 24; //3字节 桩号
  632. //int task_channel; // 分析通道,从0开始
  633. /*
  634. unsigned char task_sysType; // 0-iCVS 1-RTSP 2-SDK
  635. //iCV_AnalyRuleType
  636. unsigned char alg_type; // 算法类型ALG_TYPE
  637. unsigned int alg_len; // 算法规则长度, 此结构体后跟随alg_len个字节,表示算法规则
  638. unsigned char throw_type; // 丢帧方式 0-全帧 1-两帧丢一帧 2-三帧丢一帧 3-四帧丢一帧...
  639. //analyTimeSpan
  640. DDATE_TIME begin_time; // 开始时间
  641. DDATE_TIME end_time; // 结束时间
  642. //iCV_MediaSrcType
  643. char dev_Id[128]; //rtsp时为媒体url
  644. char nodePath[32];
  645. char nodeType[32];
  646. char biz_Id[128];
  647. int dataType; //0-RAW 1-YV12 2-RGB32 3-MPEG4 4-H264
  648. */
  649. //LocalExInfo
  650. char sourcetype; //来源类型, 0. 无效 1. ONVIF 2. GB28181 3. DAXUN 4. WEICHUAN 5. HIK 2017年9月27日 10:01:05 scz
  651. char sourceip[16]; //视频源IP
  652. unsigned short sourceport; //视频源端口
  653. /*
  654. char username[64]; //视频源登录用户名
  655. char password[256]; //视频源登录密码
  656. char vd_domain[64]; //视频源登录域名
  657. char vd_guid[256]; //平台厂家提供的视频通道唯一标识符
  658. unsigned char chn_id; //通道号
  659. unsigned char stream_type; //0-主码流 1-子码流
  660. unsigned char video_source; //视频源类型 对应厂家视频类型 VDEV_TYPE
  661. int presetNo; //分析任务启动时相机预置位,非启用此功能置0
  662. char vd_ipaddr[16];
  663. unsigned short vd_port; // 视频端口
  664. char file_name[256]; // 录像文件的完整路径,在实时模式下,用做onvif设备认证类型
  665. */
  666. int taskState;
  667. }DATA_TASK_ITEMEX1, * LPDATA_TASK_ITEMEX1;
  668. typedef struct {
  669. char taskname[64];
  670. TaskStateType status;
  671. }DATA_TASKSTATUS, * LPDATA_TASKSTATUS;
  672. //106
  673. typedef struct tagAlarmBase
  674. {
  675. char taskid[12]; //由48字节减少到12字节 2018年6月5日 12:50:08 //vaservice 不用管理, 由数据服务管理 2023.11.27
  676. char taskname[64]; //通道名称
  677. char roadno[6]; //公路编号 例如:G60
  678. //int channelid; //视频流的通道索引
  679. int stat_num; //桩号
  680. DDATE_TIME alarmtime;//报警时间
  681. DA_AlarmType alarmtype;
  682. tagAlarmBase()
  683. {
  684. memset(this, 0, sizeof(tagAlarmBase));
  685. }
  686. }D_ALARMBASE, * LPD_ALARMBASE;
  687. //16
  688. typedef struct tagAlarmAdditional
  689. {
  690. BYTE remindlevel; //报警提醒等级 0. 无效(默认为3) 1. 低 2. 中 3. 高 4. 特高
  691. char licenseplate[11]; //抓拍识别的车牌号
  692. eTimeSlot timeslot; //时段 0. 无效 1. 昼 2. 夜 3. 昼夜交替 4 天窗
  693. BYTE platecolor; //抓拍识别的车牌颜色
  694. BYTE reserve[2];
  695. }D_ALARM_ADDIINFO, * LPD_ALARM_ADDIINFO;
  696. typedef struct tagAnalysisImageInfo
  697. {
  698. char imagetype_path[89];
  699. char directname[11] = { 0 }; //车道方向名称
  700. }D_IMAGE_INFO, * LPD_PIMAGE_INFO;
  701. typedef struct tagiAlarmIVUPoint
  702. {
  703. tagiAlarmIVUPoint() {};
  704. tagiAlarmIVUPoint(unsigned short x, unsigned short y)
  705. {
  706. point_x = x;
  707. point_y = y;
  708. }
  709. unsigned short point_x;
  710. unsigned short point_y;
  711. }D_ALARM_POINT, * LPD_ALARM_POINT;
  712. typedef struct tagiAlarmIVULine
  713. {
  714. D_ALARM_POINT its_point1;
  715. D_ALARM_POINT its_point2;
  716. DWORD ivu_line_length;
  717. }D_ALARM_LINE, * LPD_ALARM_LINE;
  718. typedef struct tagiAlarmIVUBox
  719. {
  720. D_ALARM_POINT its_point1;
  721. D_ALARM_POINT its_point2;
  722. }D_ALARM_BOX, * LPD_ALARM_BOX;
  723. enum class ALARM_FILTER_ID
  724. {
  725. AFI_EVE_LIGHT = 20,
  726. };
  727. enum class E_FILTER : uint8_t
  728. {
  729. FILTER_NO = 0x00, //没有过滤
  730. FILTER_SPILL = 0x01, // 小抛洒物过滤
  731. FILTER_NETWORK = 0x02, //网络卡顿过滤
  732. FILTER_TESTALARM = 0x03, //测试报警过滤
  733. FILTER_NO_PUSH, //主动不推送
  734. FILTER_WB, //误报过滤
  735. FILTER_SHIGONG_RONGHE, //施工融合
  736. FILTER_CAR_SMALL, //车辆过小
  737. FILTER_HOLIDAY, //节假日
  738. FILTER_AUTO, //自动处理
  739. FILTER_SHIGONG, //施工过滤
  740. FILTER_PLAN, //施工计划
  741. FILTER_REPEAT, //重复报警
  742. FILTER_MALFUNCTION, //事故过滤
  743. FILTER_STREAM, //码流卡顿
  744. FILTER_AREAOUT, //区域外报警
  745. FILTER_WHRATE = 0x10, //车辆长宽比例不对
  746. FILTER_GREEN, //绿化带树枝 58001
  747. FILTER_MOVE, //车道偏移 58007 58012
  748. FILTER_BRAND, //护栏立杆标牌 58002
  749. FILTER_WHITE, //标线白印修补 58003
  750. FILTER_DIRECT, //方向标错 58009
  751. FILTER_LIGHT, //光线阴影 58004
  752. FILTER_STAT, //桩号标错 58010
  753. FILTER_KADUN, //卡顿引起 58011
  754. FILTER_OUT_ROAD, //非高速路段内
  755. FILTER_HUANXING, //缓行拥堵 58013, 58015
  756. FILTER_WORK, //施工施救作业 58014
  757. FILTER_BIRDS, //鸟类误报 58098
  758. FILTER_SHIELD, //主动屏蔽
  759. FILTER_ZGY, //浙高运过滤
  760. FILTER_CLASSIFY, //图像分类
  761. };
  762. enum class E_SCENE_TYPE : uint8_t
  763. {
  764. SCENE_UNKOWN = 0x00,
  765. SCENE_ROAD = 0x01, //主线
  766. SCENE_SD, //隧道
  767. SCENE_STOPPARK, //紧停
  768. SCENE_CARPASS, //汽通
  769. SCENE_HOLE_OUT, //洞外
  770. SCENE_COLLECT, //收费
  771. SCENE_YANGHU, //养护
  772. SCENE_IN, //进口
  773. SCENE_OUT, //出口
  774. SCENE_BRIDGE_DOWN, // 桥下
  775. SCENE_SERVICE, // 服务
  776. SCENE_CONSTRUCTION, // 工地
  777. SCENE_WATCH_BOX, // 岗亭
  778. SCENE_CAR, // 车载
  779. SCENE_POWER, // 配电
  780. SCENE_RAMP, // 匝道
  781. SCENE_RADAR, // 雷达
  782. SCENE_YUYAN, //鱼眼
  783. SCENE_NATIONAL, //国道
  784. };
  785. //12 == sizeof(tagiAlarmObjectInfo)
  786. typedef struct tagiAlarmObjectInfo
  787. {
  788. uint8_t laneindex : 1; //车道方向,0.下行(桩号有大变小) 1.上行(桩号有小变大) 2018年6月5日 12:51:46 更改定义
  789. uint8_t r1 : 7;
  790. uint8_t r[3];
  791. DWORD laneno; //方向编号(见相关定义)
  792. union
  793. {
  794. DWORD special_value;
  795. //事件
  796. struct
  797. {
  798. uint8_t car_type : 4; //80车辆类型 83拥堵等级
  799. uint8_t event_loca : 4; //事件位置
  800. uint8_t lane_label_e : 4; //车道编号1, 2, 3, 4, 5
  801. uint8_t startoversign : 2; //报警开始结束标记 0.未知 1.开始 2.结束 例如拥堵开始拥堵结束, 施工开始,施工结束 摄像机断开开始,结束
  802. uint8_t posinega : 2; //0. 无效 1. 反向 2. 正向
  803. uint8_t snapback : 1; //0. 不归位 1. 归位到1倍焦距
  804. uint8_t cong_level : 3; //83拥堵等级 0 无效 1. 畅通 2. 基本畅通 3. 轻度拥堵 4. 中度拥堵 5. 严重拥堵
  805. uint8_t result : 2; //处理结果, 包含人工和系统, 0. 未处理 1. 已处理 2. 误报 3. 其他
  806. uint8_t rever : 2;
  807. E_FILTER filter : 7; //报警过滤结果 用于过滤结果的统计,只发送到数据端,而不推送到客户端
  808. uint8_t make_up_e : 1; //补传位
  809. };
  810. //流量
  811. struct
  812. {
  813. uint8_t rever1 : 4;
  814. eTimeSlot time_solt : 4; //时间段1昼2夜3昼夜交替4天窗 注意事件不能使用此字段
  815. uint16_t lane_label : 4; //车道编号1, 2, 3, 4, 5(新的已经不使用)
  816. uint16_t time_span : 12; //时间跨度
  817. uint8_t rever2 : 7;
  818. uint8_t make_up : 1; //补传位
  819. };
  820. //抓拍
  821. struct
  822. {
  823. uint8_t targetType; //WORK_TARGET_TYPE
  824. uint8_t version; //YOLO_VERSION_ALGO
  825. uint8_t sr;
  826. uint8_t sr2;
  827. };
  828. };
  829. }D_ALARM_OBJ_INFO, * LPD_ALARM_OBJ_INFO;
  830. /*
  831. 如果报警是ALARM_50 或者 ALARM_55 等车辆事件时,
  832. special_value 定义更改为:
  833. 低四位标识车辆类型:
  834. 0. 无效
  835. 1. 事件车辆为货车
  836. 2. 事件车辆为客车
  837. 3. 事件车辆为小车
  838. 4. 事件车辆为危化品车
  839. 5. 事件车辆为施工车
  840. 高四位表示事件发生的位置:
  841. 0. 无效
  842. 1. 硬路肩
  843. 2. 停车带
  844. 3. 行驶车道
  845. 4. 导流带
  846. 5. 隔离带
  847. 6. 匝道
  848. 如果报警是 ALARM_53 事件时:
  849. special_value 定义更改为:
  850. 0. 无效
  851. 1. 基本畅通
  852. 2. 轻度拥堵
  853. 3. 中度拥堵
  854. 4. 严重拥堵
  855. (可只取0, 2, 4值)
  856. 针对所有报警和车流量数据包:(新增)
  857. SPECIALVALUE的最高位(即下标从0开始的第31位)
  858. 0. 实时数据包
  859. 1. 补传数据包
  860. 针对车流量数据包;
  861. 第一字节低四位的值标识车流量统计时间单位:
  862. 0. 1分钟
  863. 1. 5分钟
  864. 2. 1小时
  865. 3. 1天
  866. (目前只取0值, 后续会考虑归档,归档后值为2)
  867. */
  868. //2019年2月27日14:11:10
  869. //sizeof(tagAlarmExtraInfo) == 12
  870. typedef struct tagAlarmExtraInfo
  871. {
  872. union
  873. {
  874. struct
  875. {
  876. unsigned short uwFlux; //当前预估的分钟车流量 单位(辆 / 分)
  877. unsigned short uwSpeed; //当前平均车速 km/h
  878. unsigned short uwSpace; //车间距
  879. unsigned short uwDensity; //车辆密度,N/L, 单位:辆/km
  880. unsigned short uwOccupancy; //当前车道占有率,扩大1000倍
  881. unsigned short uwLowSpace;
  882. } congestion;
  883. };
  884. }D_ALARM_EXTRAINFO, * LPD_ALARM_EXTRAINFO;
  885. //sizeof(D_ALARM_ITS_ANALYSIS) == 254
  886. typedef struct tagAlarmIVUITSAnalysis : public D_ALARMBASE
  887. {
  888. D_ALARM_OBJ_INFO its_info;
  889. //D_ALARM_LINE its_line;
  890. D_ALARM_EXTRAINFO its_extra;
  891. D_ALARM_BOX its_box;
  892. D_ALARM_ADDIINFO its_addition;
  893. D_IMAGE_INFO its_image;
  894. }D_ALARM_ITS_ANALYSIS, * LPD_ALARM_ITS_ANALYSIS;
  895. //44
  896. typedef struct
  897. {
  898. uint16_t uwQueue; //排队超限,非零则超限
  899. uint16_t uwJam; //交通状态 0 无效 1 畅通 2 基本畅通 3 轻度拥堵 4 中度拥堵 5 严重拥堵
  900. //unsigned int udwFlux; //车流量数 单位 辆/每分钟
  901. uint16_t udwFlux; //车流量数 单位 辆/每分钟
  902. uint16_t r1;
  903. int16_t udwSpeed; //平均车速 km/h
  904. uint16_t r2;
  905. int16_t udwSpace; //车间距
  906. uint16_t r3;
  907. int16_t uwDensity; //车辆密度,N/L, 单位:辆/km
  908. int16_t uwOccupancy; //车道占有率,扩大1000倍
  909. uint16_t udwLowSpace; //
  910. uint16_t laneno = 0; //车道级 方向编号 scz 2024年4月24日 不能大于65535
  911. uint8_t lane_label; //车道编号0,1,2,3,4
  912. uint16_t carNum; //小型车数目
  913. uint16_t truckNum; //中型车数目
  914. uint16_t tankerNum; //大车数目
  915. uint8_t valid : 1; //是否有该车道 0无1有
  916. uint8_t busNum : 7; //客车数目
  917. uint8_t reserve[12];
  918. //unsigned int udwStyleFlux[5]; //车流量 单位时间 分钟
  919. }DDRIVEWAY_INFO, * LPDRIVEWAYINFO; //车道报警类型
  920. //sizeof(D_ALARM_ITS_RTINFO) == 382
  921. typedef struct tagiAlarmIVUITSRealTimeInfo : public D_ALARMBASE
  922. {
  923. D_ALARM_OBJ_INFO its_info;
  924. DDRIVEWAY_INFO its_statcinfo[6];
  925. }D_ALARM_ITS_RTINFO, * LPD_ALARM_ITS_RTINFO;
  926. typedef struct {
  927. DWORD packno;
  928. BYTE protocol;
  929. BYTE result;
  930. }DATA_RESP, * LPDATA_RESP;
  931. typedef struct {
  932. char playguid[36];
  933. char ivuname[32];
  934. char taskname[64];
  935. }DATA_STARTVIDEO, * LPDATA_STARTVIDEO;
  936. //报警结构体
  937. typedef struct tagAlarmIVUITSAnalysisEx : public tagAlarmIVUITSAnalysis
  938. {
  939. char guid[37];
  940. char rel_guid[37];
  941. uint32_t lng; //经度
  942. uint32_t lat; //维度
  943. byte byNetworkStatus; //0表示网络好 1表示最近有丢包 2表示最近I帧间隔有变化 3表示既有丢包又有I帧变化
  944. DA_AlarmType rel_alarm_type = ALARM_0;
  945. uint32_t rel_alarm_time = 0;
  946. E_SCENE_TYPE scene_type = E_SCENE_TYPE::SCENE_UNKOWN;
  947. byte reserver[2] = { 0 };
  948. char mark[35] = { 0 };
  949. }D_ALARM_ITS_ANALYSISEX, * LPD_ALARM_ITS_ANALYSISEX;
  950. //车流量结构体
  951. typedef struct tagiAlarmIVUITSRealTimeInfoex : public tagiAlarmIVUITSRealTimeInfo
  952. {
  953. char guid[37];
  954. uint32_t lng; //经度
  955. uint32_t lat; //维度
  956. byte reserver[12];
  957. }D_ALARM_ITS_RTINFOEX, * LPD_ALARM_ITS_RTINFOEX;;
  958. typedef tagAlarmIVUITSAnalysisEx VA_Alarm;
  959. typedef D_ALARM_ITS_ANALYSISEX D_ALARM_ITS_ANALYSISEXEX;
  960. typedef LPD_ALARM_ITS_ANALYSISEX LPD_ALARM_ITS_ANALYSISEXEX;
  961. typedef tagiAlarmIVUITSRealTimeInfoex VA_TrafficFlow;
  962. typedef struct VAPlateInfo
  963. {
  964. DDATE_TIME time;
  965. char license[16]; // 车牌字符串
  966. BYTE platecolor; //车牌颜色
  967. BYTE confidence; //可信度
  968. char imagepath[100];
  969. WORD platewidth; //车牌宽度
  970. BYTE lanelabel; //车道标号 0代表所有-不分车道, 1,2,3,4 从里往外 5应急车道
  971. char reserve[5];
  972. }VA_PlateInfo;
  973. //sizeof(VA_TASK_LIST) = 128
  974. typedef struct tagTaskList
  975. {
  976. char taskname[64]; //名称
  977. char ip[16]; //ip
  978. uint16_t port; //端口
  979. uint32_t stat_num; //桩号
  980. char reserve[42];
  981. }VA_TASK_LIST, * LPVA_TASK_LIST;
  982. typedef struct tagObjIDTrcakInfoList
  983. {
  984. uint64_t global_id; //全局ID
  985. uint64_t vehicle_id; //本地ID
  986. //RECT rcObj; //目标框
  987. uint16_t x;
  988. uint16_t y;
  989. uint16_t w;
  990. uint16_t h;
  991. WORK_TARGET_TYPE objType; //目标类型
  992. uint8_t lane_index; //上下行
  993. uint32_t lane_no; //方向编号
  994. int16_t speed; //车速 km/h
  995. uint64_t time; //时间戳
  996. uint8_t lane_label; //车道号
  997. uint32_t lng; //经度 *1000000
  998. uint32_t lat; //维度 *1000000
  999. uint8_t time_slot; //时间段1昼2夜3昼夜交替4天窗
  1000. byte data_type; //数据类型 0:数据记录 1:跟踪画线接力 2:跟踪消失接力 3 车牌信息
  1001. char licenseplate[11]; //抓拍识别的车牌号
  1002. uint8_t license_color; //车牌颜色 0 未知 1 蓝色 2 黄色 3 白色 4 黑色 5 绿色 6黄绿色-大型新能源车牌颜色
  1003. uint32_t vehicle_statnum; //车辆桩号
  1004. uint32_t global_index; //全局ID索引
  1005. uint8_t posi; //正反向 0:无效 1:正向 2:反向
  1006. //int image_channels; //CV_8UC1 CV_8UC2
  1007. //uint8_t image_data[192 * 192 * 3];
  1008. uint8_t reserver[15]; //识别为车牌数据时reserver[0]表示车辆颜色 0 白色 1 灰色 2 黄 3 粉 4 红 5 绿 6 蓝 7 棕 8 黑
  1009. tagObjIDTrcakInfoList()
  1010. {
  1011. memset(this, 0, sizeof(tagObjIDTrcakInfoList));
  1012. }
  1013. }VA_IDTRCAK_INFOLIST, * LPVA_IDTRCAK_INFOLIST;
  1014. struct tagObjIDTrcakInfoListEx
  1015. {
  1016. tagObjIDTrcakInfoList info;
  1017. uint32_t stat_num; //镜头桩号
  1018. };
  1019. struct TrcakItem
  1020. {
  1021. std::vector<tagObjIDTrcakInfoListEx> item;
  1022. size_t objindex; //最近桩号索引
  1023. uint8_t lane_label; //最后使用车道号
  1024. size_t changeLane; //变道次数
  1025. TrcakItem()
  1026. {
  1027. lane_label = -1;
  1028. objindex = -1;
  1029. changeLane = 0;
  1030. }
  1031. };
  1032. typedef std::map<uint64_t, TrcakItem> MapTraceList;
  1033. typedef struct tagObjIDTrcakInfoToServer
  1034. {
  1035. char taskid[16];
  1036. char taskname[64]; //通道名称
  1037. uint32_t stat_num; //桩号
  1038. uint64_t time; //时间戳
  1039. uint8_t g_lane_index; //总上下行
  1040. uint8_t num; //目标个数
  1041. VA_IDTRCAK_INFOLIST idtrcakInfo[];
  1042. tagObjIDTrcakInfoToServer()
  1043. {
  1044. memset(this, 0, sizeof(tagObjIDTrcakInfoToServer));
  1045. }
  1046. }VA_IDTRCAK_INFOLIST_TOSERVER, * LPVA_IDTRCAK_INFOLIST_TOSERVER;
  1047. #pragma warning(disable : 4200)
  1048. typedef struct VALicense
  1049. {
  1050. char taskid[12];
  1051. char taskname[64];
  1052. char roadno[6];
  1053. DWORD laneno;
  1054. DWORD ip;
  1055. BYTE bSrc; //0车牌图,1 全图
  1056. BYTE reserve[9];
  1057. BYTE licensenum;
  1058. //后面紧跟 VA_PlateInfo 结构体
  1059. VA_PlateInfo plateInfo[];
  1060. }VA_License, * LP_VA_License;
  1061. typedef struct tagVAAlarmEx
  1062. : public VA_Alarm
  1063. {
  1064. char ivuaddr[32];
  1065. int result;
  1066. byte isdelete;
  1067. int filterresult;
  1068. int level;
  1069. }VA_AlarmEx, * LPVA_AlarmEx;
  1070. typedef struct tagVAAlarmEx2
  1071. : public VA_Alarm
  1072. {
  1073. char handlename[20];
  1074. DDATE_TIME handletime;
  1075. byte result; //0. 未处理 1. 正确报警 2. 误报警 3. 其他
  1076. char mark[200];
  1077. }VA_AlarmEx2, * LPA_AlarmEx2;
  1078. //摄像机信息 scz 新增
  1079. typedef struct tagCameraInfo
  1080. {
  1081. char ip[32]; //ip
  1082. char user[32]; //用户名
  1083. char pwd[32]; //密码
  1084. VA_CAMERA_BRAND brand; //品牌
  1085. char model[32]; //型号
  1086. WORD httpport;
  1087. WORD rtspport;
  1088. WORD httpsport;
  1089. WORD serverport;
  1090. WORD onvifport;
  1091. tagCameraInfo()
  1092. {
  1093. memset(this, 0, sizeof(tagCameraInfo));
  1094. httpport = 80;
  1095. rtspport = 554;
  1096. httpsport = 443;
  1097. onvifport = 80;
  1098. }
  1099. }VA_CAMERA_INFO, * LPVA_CAMERA_INFO;
  1100. //锥桶上传信息
  1101. typedef struct tagReflectiveConeInfo
  1102. {
  1103. uint16_t x;
  1104. uint16_t y;
  1105. uint16_t w;
  1106. uint16_t h;
  1107. uint8_t lanelabel; //车道号
  1108. uint32_t statnum; //锥桶桩号
  1109. BYTE reserve[20];
  1110. }VA_REFLECTIVECONE_INFO, * LPVA_REFLECTIVECONE_INFO;
  1111. typedef struct tagReflectiveConeInfoToServer
  1112. {
  1113. char taskid[16];
  1114. char taskname[64]; //通道名称
  1115. char road_no[6];
  1116. uint32_t stat_num; //杆子桩号
  1117. uint64_t time; //时间戳
  1118. uint8_t lane_index; //上下行
  1119. BYTE reserve[20]; //服务器临时需要使用8个字节
  1120. uint8_t num; //目标个数
  1121. VA_REFLECTIVECONE_INFO reflectiveConeInfo[];
  1122. tagReflectiveConeInfoToServer()
  1123. {
  1124. memset(this, 0, sizeof(tagReflectiveConeInfoToServer));
  1125. }
  1126. }VA_REFLECTIVECONE_INFO_TOSERVER, * LPVA_REFLECTIVECONE_INFO_TOSERVER;
  1127. //数据包
  1128. typedef struct tagVAPack
  1129. {
  1130. uint8_t* data; //数据地址 //注意前面是否有LWS_PRE个字节预留
  1131. uint32_t len; //数据长度 //data的数据长度
  1132. VA_PACK_TYPE type; //数据类型
  1133. time_t time; //时间
  1134. bool bin; //是否二进制
  1135. bool json; //是否json
  1136. uint16_t count; //数据总数
  1137. uint32_t rever;
  1138. tagVAPack()
  1139. {
  1140. memset(this, 0, sizeof(tagVAPack));
  1141. };
  1142. }VA_PACK, * LPVA_PACK;
  1143. //0x2A 下发报警数据
  1144. typedef struct tagHjAlarmData {
  1145. DDATE_TIME time; //报警时间
  1146. DA_AlarmType alarmtype; //报警类型
  1147. char guid[37]; //报警记录ID
  1148. VA_ALARM_DATA_TYPE datatype; //数据类型
  1149. VA_DATA_CATA datacata; //数据存放目录
  1150. eTimeSlot timeslot;
  1151. uint8_t targetType; //WORK_TARGET_TYPE
  1152. uint8_t version; //YOLO_VERSION_ALGO
  1153. uint8_t reser[12]; //预留
  1154. uint32_t len; //数据长度
  1155. uint8_t data[]; //数据
  1156. tagHjAlarmData() {
  1157. memset(this, 0, sizeof(tagHjAlarmData));
  1158. }
  1159. }HJALARMDATA, * LPHJALARMDATA;
  1160. //0x18 下发报警数据,定时发的实时图像
  1161. typedef struct tagHjAlarmDataEx {
  1162. char taskname[64]; //通道名称
  1163. SYSTEMTIME time; //报警时间
  1164. DA_AlarmType alarmtype; //报警类型
  1165. char guid[37]; //报警记录ID
  1166. VA_ALARM_DATA_TYPE datatype; //数据类型
  1167. VA_DATA_CATA datacata; //数据存放目录
  1168. eTimeSlot timeslot;
  1169. uint8_t targetType; //WORK_TARGET_TYPE
  1170. uint8_t version; //YOLO_VERSION_ALGO
  1171. uint8_t reser[12]; //预留
  1172. uint32_t len; //数据长度
  1173. uint8_t data[]; //数据
  1174. tagHjAlarmDataEx() {
  1175. memset(this, 0, sizeof(tagHjAlarmDataEx));
  1176. }
  1177. }HJALARMDATAEX, * LPHJALARMDATAEX;
  1178. //下发图像数据
  1179. typedef struct tagHjImageData
  1180. {
  1181. char taskid[16];
  1182. char road_no[6];
  1183. uint64_t objid; //目标ID
  1184. char licenseplate[11]; //车牌号
  1185. uint8_t ncolor; //车牌颜色 0 未知 1 蓝色 2 黄色 3 白色 4 黑色 5 绿色 6黄绿色-大型新能源车牌颜色
  1186. byte send_type; // 1 va发送 2 车牌算法发送 3 post给浙高运的图像数据
  1187. uint64_t time; //时间戳
  1188. VA_ALARM_DATA_TYPE datatype; //图像数据类型
  1189. uint8_t reser[128]; //预留 //识别为车牌数据时reser[0]表示车辆颜色 0 白色 1 灰色 2 黄 3 粉 4 红 5 绿 6 蓝 7 棕 8 黑
  1190. uint32_t len; //数据长度
  1191. uint8_t data[]; //图像数据
  1192. tagHjImageData()
  1193. {
  1194. memset(this, 0, sizeof(tagHjImageData));
  1195. }
  1196. }HJIMAGEDATA, * LPIMAGEDATA;
  1197. //收费站拥堵信息
  1198. typedef struct tagCongestionInfo
  1199. {
  1200. char taskname[64]; //通道名称 命名以XXX收费站开头
  1201. uint64_t t; //时间戳
  1202. uint16_t congest_length; //拥堵长度
  1203. uint16_t ramp_length; //总长度
  1204. char roadno[10]; //公路编号
  1205. uint8_t lane_label : 3; //车道0代表全部 取值[0,5] 必填
  1206. uint8_t jam_level : 3; //0.未知 1.畅通 2.基本畅通 3.轻度拥堵 4.中度拥堵 5.严重拥堵
  1207. uint8_t posinega : 2; // 0.反向 1.正向 必填
  1208. uint8_t lane_index : 2; //0. 无效 1. 下行 2. 上行 跟原有的定义不同
  1209. int laneno; //方向编号
  1210. uint8_t r : 6;
  1211. uint32_t lng;
  1212. uint32_t lat;
  1213. char direct[11]; //方向名称 入口方向/出口方向
  1214. VA_ALARM_DATA_TYPE datatype; //图像数据类型
  1215. uint8_t congest_state; //拥堵状态 0 未拥堵 1 拥堵开始 2 拥堵中 3 拥堵结束
  1216. uint8_t reser[15]; //预留
  1217. uint32_t len; //图像数据长度
  1218. uint8_t data[0]; //图像数据
  1219. tagCongestionInfo()
  1220. {
  1221. //roadno, direct, lane_index, lng, lat 以页面数据为准
  1222. memset(this, 0, sizeof(tagCongestionInfo));
  1223. }
  1224. }CONGESTIONINFO, * LPCONGESTIONINFO;
  1225. //隧道行车信息
  1226. typedef struct tagTrainWorkInfo
  1227. {
  1228. char taskid[16];
  1229. char roadno[10]; //公路编号
  1230. char guid[37]; //id
  1231. uint64_t time; //时间戳 毫秒
  1232. uint8_t lane_label; // 车道
  1233. uint8_t lane_index; // 上下行 0 下行 1 上行
  1234. char licenseplate[11]; //车牌号
  1235. uint8_t speed; //车速
  1236. uint8_t ncolor; //车身颜色
  1237. uint8_t car_length; //车长度
  1238. uint8_t car_type; // 车型 0 未知 1 行人 2 非机动车 3 小型车 4 中型车 5 大型
  1239. uint8_t reser[32];
  1240. tagTrainWorkInfo()
  1241. {
  1242. memset(this, 0, sizeof(tagTrainWorkInfo));
  1243. }
  1244. }TRAINWORKINFO, * LPTRAINWORKINFO;
  1245. typedef struct tagAllDISKSTATUS
  1246. {
  1247. char diskName; //磁盘数量
  1248. int total; //所有磁盘总容量MB
  1249. int ofFree; //所有磁盘剩余容量MB
  1250. }AllDISKSTATUS, * LPAllDISKSTATUS;
  1251. #define HJ_MAX_GPU_NUM 4 // 监控的GPU个数(NVIDIA定义的最多GPU个数是64,这里最多只监控4个
  1252. typedef struct tagGpuInfo
  1253. {
  1254. char name[20];
  1255. WORD utilizationRate; //千分制 GPU使用率
  1256. WORD memusage; //千分制 GPU显存使用率
  1257. WORD temperature; //0.1度 GPU温度
  1258. BYTE decUtilization; //解码使用率
  1259. BYTE encUtilization; //编码使用率
  1260. uint8_t reser[4]; //预留
  1261. }GPUINFO;
  1262. #define HJ_MAX_DISK_NUM 10
  1263. typedef struct SERVER_STATUS
  1264. {
  1265. DWORD64 osRunTime;
  1266. DWORD backTime;
  1267. WORD cpuUsage; //千分制
  1268. GPUINFO gpuUsage[HJ_MAX_GPU_NUM];
  1269. WORD memUsage; // 千分制
  1270. AllDISKSTATUS diskUsage[HJ_MAX_DISK_NUM];
  1271. WORD cputemp; //CPU温度 摄氏度
  1272. char ipAddr[16] = { 0 };
  1273. }SERVERSTATUS, * HJSERVERSTATUS;
  1274. typedef struct SERVER_STATUS_EX : public SERVER_STATUS
  1275. {
  1276. time_t recvTime = 0;
  1277. time_t lastOffDetect = 0;
  1278. time_t lastDiskDetect = 0;
  1279. uint32_t r[8] = { 0 };
  1280. }SERVERSTATUSEX, * HJSERVERSTATUSEX;
  1281. enum class eDEVICE_TYPE : uint8_t
  1282. {
  1283. DT_ALL = 0x00,
  1284. DT_GT_EDGE = 0x01, //高瞳盒子
  1285. DT_HJ_DOG = 0x02, //慧景软件狗
  1286. DT_HJ_VA = 0x03, //慧景VA
  1287. };
  1288. typedef struct tagDeviceDiscover
  1289. {
  1290. eDEVICE_TYPE type = eDEVICE_TYPE::DT_ALL;
  1291. uint8_t r[31] = { 0 };
  1292. };
  1293. //设置地址 128
  1294. typedef struct tagAddressIPv4
  1295. {
  1296. uint8_t bVersion = 4; // 取值4为ipv4, 6为ipv6
  1297. uint8_t bDHCP = 0; // 是否启用DHCP, 如果启动, 后面配置无效
  1298. char srcip[16] = { 0 }; // 原IP
  1299. char ip[16] = { 0 };
  1300. char mask[16] = { 0 };
  1301. char gateway[16] = { 0 };
  1302. char dns[16] = { 0 };
  1303. char dns_back[16] = { 0 };
  1304. uint8_t r[30] = { 0 };
  1305. }IPv4_ADDRESS;
  1306. // 468
  1307. typedef struct tagDeviceInfo2
  1308. {
  1309. uint8_t no = 1; //序号, 设备层, 无用
  1310. uint8_t channel_num = 4; //通道数, 设备最大配置路数
  1311. uint16_t port = 8000;
  1312. uint16_t http_port = 80;
  1313. uint8_t activate = false;
  1314. uint8_t r = 0;
  1315. char type[20] = { "" };
  1316. char version[12] = { "1.0.0" }; //版本
  1317. char ip[32] = { 0 }; //设备地址
  1318. char gateway[32] = { "192.168.1.1" }; //设备网关
  1319. char sn[32] = { "DWW74T3" }; //设备序号
  1320. char subnet_mask[32] = { "255.255.255.0" }; //设备子网掩码
  1321. char mac_address[32] = { "CC-96-E5-00-A6-6B" }; //mac地址
  1322. char device_name[64] = { "" };
  1323. eDEVICE_TYPE device_type = eDEVICE_TYPE::DT_ALL;
  1324. time_t time = 0; //时间戳
  1325. uint8_t bDHCP = 0; //是否启用DHCP, 如果启动, 后面配置无效
  1326. char device_no[12] = { "GT-001" }; // 设备编号
  1327. char dns[32] = { "0.0.0.0" }; // 首选DNS
  1328. char dns_pack[32] = { "0.0.0.0" }; // 备选DNS
  1329. uint8_t rr[118] = { 0 };
  1330. }DEVICE_INFO, * LPDEVICE_INFO;
  1331. //用于系统日志
  1332. #define LOG_LEVEL_1 1
  1333. #define LOG_LEVEL_2 2
  1334. #define LOG_LEVEL_3 3
  1335. #define LOG_LEVEL_4 4
  1336. typedef struct tagVA_LOG_DATA
  1337. {
  1338. char ip[16]; //分析地址
  1339. uint8_t no; //序号 端口 - 20010
  1340. uint8_t level; //等级 1严重 2重要 3警告 4提示
  1341. uint16_t r;
  1342. uint64_t time; //时间
  1343. char taskname[64]; //通道名称
  1344. char mark[280]; //详细信息
  1345. tagVA_LOG_DATA()
  1346. {
  1347. memset(this, 0, sizeof(tagVA_LOG_DATA));
  1348. }
  1349. }VA_LOG_DATA;
  1350. //施工区域(通信使用)
  1351. typedef struct tagConstructionAreaMsg
  1352. {
  1353. char guid[37]; //施工ID
  1354. char roadno[6]; //公路编号 例如:G60
  1355. //人工确认信息
  1356. uint32_t start_stat_num; //开始桩号
  1357. uint32_t end_stat_num; //结束桩号
  1358. uint64_t start_time; //开始时间 毫秒
  1359. uint64_t end_time; //结束时间 同上
  1360. uint64_t real_end_time; //实际结束时间 同上
  1361. uint8_t lane_index; //上下行 0. 下行 1. 上行
  1362. //uint8_t lane_label; //车道编号0,1,2,3,4 //TODO 需要改成数组lane_label[7]
  1363. int lane_label; //车道编号 位表示
  1364. uint8_t lane_label_max; //最大车道数量
  1365. char add_name[50]; //添加人员
  1366. //计算和人工确认综合后的数据
  1367. uint32_t com_start_stat_num; //开始桩号
  1368. uint32_t com_end_stat_num; //结束桩号
  1369. uint64_t com_end_time; //结束时间 同上
  1370. int set_lane_label; //车道编号 位表示
  1371. };
  1372. //施工区域(结构体不能使用memset操作)
  1373. typedef struct tagConstructionArea
  1374. {
  1375. char guid[37]; //施工ID
  1376. char roadno[6]; //公路编号 例如:G60
  1377. //人工确认信息
  1378. uint32_t start_stat_num; //开始桩号
  1379. uint32_t end_stat_num; //结束桩号
  1380. uint64_t start_time; //开始时间 毫秒
  1381. uint64_t end_time; //结束时间 同上
  1382. uint64_t real_end_time; //实际结束时间 同上
  1383. uint8_t lane_index; //上下行 0. 下行 1. 上行
  1384. //uint8_t lane_label; //车道编号0,1,2,3,4 //TODO 需要改成数组lane_label[7]
  1385. std::set<uint8_t> set_lane_label;
  1386. uint8_t lane_label_max; //最大车道数量
  1387. char add_name[50]; //添加人员
  1388. //计算和人工确认综合后的数据
  1389. uint32_t com_start_stat_num; //开始桩号
  1390. uint32_t com_end_stat_num; //结束桩号
  1391. uint64_t com_end_time; //结束时间 同上
  1392. std::set<uint8_t>com_set_lane_label; //车道编号
  1393. //
  1394. int end_count; //结束统计
  1395. bool time_init; //开始结束时间为手动设置
  1396. tagConstructionArea()
  1397. {
  1398. ZeroMemory(guid, sizeof(guid));
  1399. ZeroMemory(add_name, sizeof(add_name));
  1400. ZeroMemory(roadno, sizeof(roadno));
  1401. start_stat_num = 0;
  1402. end_stat_num = 0;
  1403. start_time = 0;
  1404. end_time = 0;
  1405. real_end_time = 0;
  1406. lane_index = 0;
  1407. lane_label_max = 0;
  1408. com_start_stat_num = 0;
  1409. com_end_stat_num = 0;
  1410. com_end_time = 0;
  1411. end_count = 0;
  1412. time_init = false;
  1413. set_lane_label.clear();
  1414. com_set_lane_label.clear();
  1415. }
  1416. tagConstructionArea(const tagConstructionArea& s)
  1417. :set_lane_label(s.set_lane_label),
  1418. com_set_lane_label(s.com_set_lane_label)
  1419. {
  1420. CopyMemory(this->guid, s.guid, sizeof(this->guid));
  1421. CopyMemory(this->add_name, s.add_name, sizeof(this->add_name));
  1422. CopyMemory(this->roadno, s.roadno, sizeof(this->roadno));
  1423. //人工确认信息
  1424. this->start_stat_num = s.start_stat_num; //开始桩号
  1425. this->end_stat_num = s.end_stat_num; //结束桩号
  1426. this->start_time = s.start_time; //开始时间 毫秒
  1427. this->end_time = s.end_time; //结束时间 同上
  1428. this->real_end_time = s.real_end_time; //实际结束时间 同上
  1429. this->lane_index = s.lane_index; //上下行 0. 下行 1. 上行
  1430. this->lane_label_max = s.lane_label_max; //最大车道数量
  1431. this->end_count = s.end_count; //最大车道数量
  1432. this->time_init = s.time_init;
  1433. //计算和人工确认综合后的数据
  1434. this->com_start_stat_num = s.com_start_stat_num; //开始桩号
  1435. this->com_end_stat_num = s.com_end_stat_num; //结束桩号
  1436. this->com_end_time = s.com_end_time; //结束时间 同上
  1437. }
  1438. tagConstructionArea& operator=(const tagConstructionArea& s)
  1439. {
  1440. if (this != &s)
  1441. {
  1442. CopyMemory(this->guid, s.guid, sizeof(this->guid));
  1443. CopyMemory(this->add_name, s.add_name, sizeof(this->add_name));
  1444. CopyMemory(this->roadno, s.roadno, sizeof(this->roadno));
  1445. //人工确认信息
  1446. this->start_stat_num = s.start_stat_num; //开始桩号
  1447. this->end_stat_num = s.end_stat_num; //结束桩号
  1448. this->start_time = s.start_time; //开始时间 毫秒
  1449. this->end_time = s.end_time; //结束时间 同上
  1450. this->real_end_time = s.real_end_time; //实际结束时间 同上
  1451. this->lane_index = s.lane_index; //上下行 0. 下行 1. 上行
  1452. this->lane_label_max = s.lane_label_max; //最大车道数量
  1453. this->set_lane_label = s.set_lane_label;
  1454. this->end_count = s.end_count; //最大车道数量
  1455. this->time_init = s.time_init;
  1456. //计算和人工确认综合后的数据
  1457. this->com_start_stat_num = s.com_start_stat_num; //开始桩号
  1458. this->com_end_stat_num = s.com_end_stat_num; //结束桩号
  1459. this->com_end_time = s.com_end_time; //结束时间 同上
  1460. this->com_set_lane_label = s.com_set_lane_label;
  1461. }
  1462. return *this;
  1463. }
  1464. //车道转换为string ','分割
  1465. std::string LaneLabelToString(bool com) const
  1466. {
  1467. std::string str;
  1468. if (com)
  1469. {
  1470. for (auto& it : com_set_lane_label)
  1471. {
  1472. str += std::to_string(it) + ",";
  1473. }
  1474. }
  1475. else
  1476. {
  1477. for (auto& it : set_lane_label)
  1478. {
  1479. str += std::to_string(it) + ",";
  1480. }
  1481. }
  1482. return str;
  1483. }
  1484. //车道转换为二进制数
  1485. int LaneLabelToInt(bool com) const
  1486. {
  1487. int nValue = 0;
  1488. if (com)
  1489. {
  1490. for (auto& it : com_set_lane_label)
  1491. {
  1492. if (it == 0)
  1493. {
  1494. nValue = 0;
  1495. break;
  1496. }
  1497. nValue |= (int)pow(2, it);
  1498. }
  1499. }
  1500. else
  1501. {
  1502. for (auto& it : set_lane_label)
  1503. {
  1504. if (it == 0)
  1505. {
  1506. nValue = 0;
  1507. break;
  1508. }
  1509. nValue |= (int)pow(2, it);
  1510. }
  1511. }
  1512. return nValue;
  1513. }
  1514. //二进制数转换为车道
  1515. void IntToLaneLabel(bool com, int nValue)
  1516. {
  1517. if (nValue == 0xFF)
  1518. {
  1519. return;
  1520. }
  1521. if (com)
  1522. {
  1523. com_set_lane_label.clear();
  1524. if (nValue == 0)
  1525. {
  1526. com_set_lane_label.insert(0);
  1527. }
  1528. else
  1529. {
  1530. for (int i = 1; i < 10; i++)
  1531. {
  1532. auto k = (int)pow(2, i);
  1533. if ((nValue & k) > 0)
  1534. {
  1535. com_set_lane_label.insert(i);
  1536. }
  1537. }
  1538. }
  1539. }
  1540. else
  1541. {
  1542. set_lane_label.clear();
  1543. if (nValue == 0)
  1544. {
  1545. set_lane_label.insert(0);
  1546. }
  1547. else
  1548. {
  1549. for (int i = 1; i < 10; i++)
  1550. {
  1551. auto k = (int)pow(2, i);
  1552. if ((nValue & k) > 0)
  1553. {
  1554. set_lane_label.insert(i);
  1555. }
  1556. }
  1557. }
  1558. }
  1559. }
  1560. }VA_CONSTRUCTION_AREA;
  1561. // 复选框勾选
  1562. typedef struct tagCheckBox
  1563. {
  1564. VA_CONTROL_TYPE control_type = VA_CONTROL_TYPE::VBT_CHECK_BOX;
  1565. // 1bit 0 read or 1 set + 2bit checkbox type + 64bit taskname + 1bit value + 1bit result
  1566. uint8_t bSet; // 0获取或 1 设置
  1567. VA_CONFIG_CHECKBOX_TYPE checkbox_type; // 复选框类型
  1568. char taskName[64] = { 0 }; // 通道名
  1569. uint8_t value; // 值:1 勾选 0 不勾选
  1570. uint8_t result = 0; // 处理结果 0: 失败 1:成功
  1571. uint16_t r = 0;
  1572. }CHECK_BOX, * LPCHECK_BOX;
  1573. // 摄像机状态
  1574. typedef struct tagCamerAStatus
  1575. {
  1576. char id[13]; // 13bit 设备ID
  1577. uint8_t status; // 1bit 状态
  1578. char ip[16]; // 16bit 摄像头IP
  1579. uint8_t rr[32] = { 0 };
  1580. }CAMERA_STATUS, * LPCAMERA_STATUS;
  1581. // 报警确认信息 //505
  1582. typedef struct tagAlarmConfirm
  1583. {
  1584. char taskName[64] = { 0 }; // 通道名
  1585. char eventID[37] = { 0 }; // 事件编号
  1586. SYSTEMTIME alarmTime = { 0 }; // 报警时间
  1587. char strMark[200] = { 0 };
  1588. int result = 0; //处理结果 1. 正确. 2 误报 3. 其他 ... 详情见文档
  1589. int level = 0; // 报警等级 1. 严重 2. 重要 3. 警告 4. 提示
  1590. char strServiceAddr[32] = { 0 };
  1591. char strFullName[50] = { 0 }; //处理人姓名
  1592. E_FILTER filter_result = E_FILTER::FILTER_NO; //误报原因
  1593. char otherReason[20] = { 0 }; // 其他 58100
  1594. uint8_t rr[29] = { 0 };
  1595. //kafka 施工信息
  1596. DWORD dwEventStatus = 0;
  1597. int nDirection = 0;
  1598. int nBeginMilestone = 0;
  1599. int nEndMilestone = 0;
  1600. char szJeeves[32] = { 0 };
  1601. //end
  1602. }ALARM_CONFIRM, * LPALARM_CONFIRM;
  1603. #pragma pack(pop)
  1604. enum class VA_PIC_LIST_TYPE : uint8_t
  1605. {
  1606. VPLT_LIST = 0x00, //巡查列表
  1607. VPLT_NORMAL = 0x01, //已巡查
  1608. VPLT_GREEN = 0x02, //绿化修整列表
  1609. VPLT_LENS = 0x03, //镜头问题列表
  1610. VPLT_CONFIG = 0x04, //镜头偏移,需要重新配置
  1611. VPLT_USERS = 99, //自定义
  1612. };
  1613. class CHjDataConver {
  1614. public:
  1615. static int conver_sendpack(LPBYTE dest, LPBYTE src, WORD srclen, BYTE subno, DWORD packno, BYTE protocol, BYTE ver = 0x01)
  1616. {
  1617. HJDATAHEAD head;
  1618. memset(&head, 0, sizeof(HJDATAHEAD));
  1619. head.head = DATA_HEAD;
  1620. head.subno = subno;
  1621. *((WORD*)head.len) = htons(srclen);
  1622. head.packno = htonl(packno);
  1623. head.protocol = protocol;
  1624. head.ver = ver;
  1625. BYTE check = 0;
  1626. int j = 0;
  1627. // memcpy(dest, &head, sizeof(HJDATAHEAD2));
  1628. // j += sizeof(HJDATAHEAD2);
  1629. LPBYTE pHead = (LPBYTE)&head + 1;
  1630. dest[j++] = DATA_HEAD;
  1631. for (int i = 0; i < sizeof(head) - 1; i++) {
  1632. check ^= pHead[i];
  1633. if (pHead[i] == DATA_HEADTAIL || pHead[i] == DATA_CONVER) //转义
  1634. {
  1635. dest[j++] = DATA_CONVER;
  1636. dest[j++] = pHead[i] ^ 0x20;
  1637. }
  1638. else
  1639. dest[j++] = pHead[i];
  1640. }
  1641. for (int i = 0; i < srclen; i++)
  1642. {
  1643. check ^= src[i];
  1644. if (src[i] == DATA_HEADTAIL || src[i] == DATA_CONVER) //转义
  1645. {
  1646. dest[j++] = DATA_CONVER;
  1647. dest[j++] = src[i] ^ 0x20;
  1648. }
  1649. else
  1650. dest[j++] = src[i];
  1651. }
  1652. //转义校验值
  1653. if (check == DATA_HEADTAIL || check == DATA_CONVER)
  1654. {
  1655. dest[j++] = DATA_CONVER;
  1656. dest[j++] = check ^ 0x20;
  1657. }
  1658. else
  1659. dest[j++] = check;
  1660. //加上尾
  1661. dest[j++] = DATA_HEADTAIL;
  1662. return j;
  1663. }
  1664. //新协议
  1665. static int conver_sendpack2(LPBYTE dest, LPBYTE src, DWORD srclen, BYTE subno, DWORD packno, BYTE protocol, BYTE ver = 0x01)
  1666. {
  1667. static DWORD64 headid = 0xABAAAAAAAAAAAAAA;
  1668. if (dest == nullptr) return (sizeof(HJDATAHEAD2) + srclen + 2);
  1669. HJDATAHEAD2 head;
  1670. memset(&head, 0, sizeof(HJDATAHEAD2));
  1671. memcpy(&head.head, &headid, sizeof(DWORD64));
  1672. head.subno = subno;
  1673. head.len = htonl(srclen);
  1674. head.packno = htonl(packno);
  1675. head.protocol = protocol;
  1676. head.ver = ver;
  1677. int j = 0;
  1678. memcpy(dest, &head, sizeof(HJDATAHEAD2));
  1679. j += sizeof(HJDATAHEAD2);
  1680. if (src) memcpy(dest + j, src, srclen);
  1681. j += srclen;
  1682. //check
  1683. dest[j++] = 0x00;
  1684. //end
  1685. dest[j++] = 0xab;
  1686. return j;
  1687. }
  1688. //calculate check,纯数据,有长度(已经包含校验位)无校验
  1689. static int conver_sendpack_check(LPBYTE dest, LPBYTE src, int len)
  1690. {
  1691. BYTE check = 0;
  1692. int j = 0;
  1693. dest[j++] = DATA_HEADTAIL;
  1694. for (int i = 0; i < len - 1; i++)
  1695. {
  1696. check ^= src[i];
  1697. if (src[i] == DATA_HEADTAIL || src[i] == DATA_CONVER) //转义
  1698. {
  1699. dest[j++] = DATA_CONVER;
  1700. dest[j++] = src[i] ^ 0x20;
  1701. }
  1702. else
  1703. dest[j++] = src[i];
  1704. }
  1705. //转义校验值
  1706. if (check == DATA_HEADTAIL || check == DATA_CONVER)
  1707. {
  1708. dest[j++] = DATA_CONVER;
  1709. dest[j++] = check ^ 0x20;
  1710. }
  1711. else
  1712. dest[j++] = check;
  1713. //加上尾
  1714. dest[j++] = DATA_HEADTAIL;
  1715. return j;
  1716. }
  1717. //收到一个完整数据包后解析数据
  1718. static bool conver_recvpack(LPBYTE pBuf, int& len)
  1719. {
  1720. if (pBuf == NULL) return false;
  1721. BYTE* pb = (BYTE*)pBuf;
  1722. if ((pb[0] != DATA_HEADTAIL) || (pb[len - 1] != DATA_HEADTAIL)) return false;
  1723. BYTE check = 0;
  1724. int i = 0;
  1725. for (i = 1; i < len && pb[i] != DATA_HEADTAIL; i++)
  1726. {
  1727. if (pb[i] == DATA_CONVER)
  1728. {
  1729. pb[i] = pb[i + 1] ^ 0x20;
  1730. memmove(&pb[i + 1], &pb[i + 2], len - i - 2);
  1731. }
  1732. check ^= pb[i];
  1733. }
  1734. len = i + 1;
  1735. return check == 0;
  1736. }
  1737. //收到一个完整数据包后校验数据
  1738. static bool conver_recvpack2(LPBYTE pBuf, int& len)
  1739. {
  1740. if (pBuf == NULL) return false;
  1741. if (len < sizeof(HJDATAHEAD2)) return false;
  1742. static DWORD64 headid = 0xABAAAAAAAAAAAAAA;
  1743. if ((*(DWORD64*)pBuf) != headid) return false;
  1744. if (pBuf[len - 1] != 0xab) return false;
  1745. static BYTE check = 0x00;
  1746. if (pBuf[len - 2] != check) return false;
  1747. auto pHead = (HJDATAHEAD2*)pBuf;
  1748. //pHead->len = htonl(pHead->len); 还原, 不对包做出改变.
  1749. //pHead->packno = htonl(pHead->packno);
  1750. return true;
  1751. BYTE* pb = (BYTE*)pBuf;
  1752. if ((pb[0] != DATA_HEADTAIL) || (pb[len - 1] != DATA_HEADTAIL)) return false;
  1753. int i = 0;
  1754. for (i = 1; i < len && pb[i] != DATA_HEADTAIL; i++)
  1755. {
  1756. //不转义
  1757. /*
  1758. if(pb[i]==DATA_CONVER)
  1759. {
  1760. pb[i] = pb[i+1]^0x20;
  1761. memmove(&pb[i+1],&pb[i+2],len-i-2);
  1762. }
  1763. */
  1764. check ^= pb[i];
  1765. }
  1766. len = i + 1;
  1767. return check == 0;
  1768. }
  1769. };
  1770. #endif