-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwidget.cpp
More file actions
1749 lines (1512 loc) · 67.4 KB
/
widget.cpp
File metadata and controls
1749 lines (1512 loc) · 67.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#include "widget.h"
#include "ui_widget.h"
#include "thread.h"
#include "ControlCAN.h"
#include <QStandardItemModel>
#define TEXT_COLOR_RED(STRING) "<font color=red>" STRING "</font>" "<font color=black> </font>"
#define TEXT_COLOR_BLUE(STRING) "<font color=blue>" STRING "</font>" "<font color=black> </font>"
#define TEXT_COLOR_GREEN(STRING) "<font color=green>" STRING "</font>" "<font color=black> </font>"
QStandardItemModel *model;
bool DEBUG = false;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle("RemoteControl学生端");//设置窗口名
/**CAN 相关参数初始化**/
qRegisterMetaType<VCI_CAN_OBJ>("VCI_CAN_OBJ");//注册can结构体
qRegisterMetaType<PVCI_CAN_OBJ>("PVCI_CAN_OBJ");//注册can结构体
m_connect = 0;
m_sendTimeout = 0;
/**CAN数据初始化**/
Steer_EN = 0;
Brake_EN = 0;
Gear_EN = 0;
Gas_EN = 0;
Park_EN = 0;
Light_EN = 0;
m_gear = 0;
m_park = 1;
m_gas = 0;
m_brake = 0;
m_steer = 0;
m_gradiant = 0;
m_turnlightleft = 0;
m_turnlightright = 0;
m_farheadlight = 0;
m_nearheadlight = 0;
m_flashlight = 0;
m_backlight = 0;
m_brakelight = 0;
m_trumpet = 0;
m_wiper = 0;
/**定时器线程相关**/
Timer1 = new QTimer(this);
connect(Timer1, &QTimer::timeout, this, &Widget::dealTimer1);
/**数据接收处理相关**/
CANTH = new CANThread(this);
CANTH->CAN_Para_Init();
connect(CANTH,&CANThread::DataReceiveDone,this, &Widget::dealReceiveData);
init();
}
Widget::~Widget()
{
delete ui;
}
//控件初始化
void Widget::init(){
logger(1,"欢迎使用RemoteControl客户端");
logger(1,"1.请连接车辆CAN总线");
logger(1,"2.然后开启CAN总线");
logger(1,"3.获取车辆控制授权");
//参照天隼自动驾驶汽车CAN通信规范
model = new QStandardItemModel(ui->treeView);//创建模型指定父类
ui->treeView->setModel(model);
model->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("C-CAN数据帧")<<QStringLiteral("帧参数")<<QStringLiteral("描述"));
//1 0x0C00D1D0
model->setItem(0,new QStandardItem("车辆授权"));
model->item(0)->setChild(0,0,new QStandardItem("授权命令"));
model->item(0)->setChild(0,1,new QStandardItem(""));
model->item(0)->setChild(0,2,new QStandardItem("0x00-本地授权 0x01-取消本地授权 0x40-查询授权状态 0x41-获取车辆编号"));
model->item(0)->setChild(1,0,new QStandardItem("授权码"));
model->item(0)->setChild(1,1,new QStandardItem(""));
model->item(0)->setChild(1,2,new QStandardItem("6字节授权码"));
//2 0x0C02D1D0
model->setItem(1,new QStandardItem("车辆配置"));
model->item(1)->setChild(0,0,new QStandardItem("配置项目"));
model->item(1)->setChild(0,1,new QStandardItem(""));
model->item(1)->setChild(0,2,new QStandardItem("0x01-转向总成配置 其他值无效"));
model->item(1)->setChild(1,0,new QStandardItem("配置命令"));
model->item(1)->setChild(1,1,new QStandardItem(""));
model->item(1)->setChild(1,2,new QStandardItem("0x01-设置方向盘当前角度为零度角 其他值无效"));
//3 0x0C08D1D0
model->setItem(2,new QStandardItem("车辆运动控制"));
model->item(2)->setChild(0,0,new QStandardItem("车辆控制模式"));
model->item(2)->setChild(0,1,new QStandardItem(""));
model->item(2)->setChild(0,2,new QStandardItem("0x0-手动模式 0x1-自动模式-部分 0x3-自动模式-完全"));
model->item(2)->setChild(1,0,new QStandardItem("转向控制模式"));
model->item(2)->setChild(1,1,new QStandardItem(""));
model->item(2)->setChild(1,2,new QStandardItem("0x0-手动模式 0x1-自动模式"));
model->item(2)->setChild(2,0,new QStandardItem("制动控制模式"));
model->item(2)->setChild(2,1,new QStandardItem(""));
model->item(2)->setChild(2,2,new QStandardItem("0x0-手动模式 0x1-自动模式"));
model->item(2)->setChild(3,0,new QStandardItem("档位控制模式"));
model->item(2)->setChild(3,1,new QStandardItem(""));
model->item(2)->setChild(3,2,new QStandardItem("0x0-手动模式 0x1-自动模式"));
model->item(2)->setChild(4,0,new QStandardItem("油门控制模式"));
model->item(2)->setChild(4,1,new QStandardItem(""));
model->item(2)->setChild(4,2,new QStandardItem("0x0-手动模式 0x1-自动模式"));
model->item(2)->setChild(5,0,new QStandardItem("驻车控制模式"));
model->item(2)->setChild(5,1,new QStandardItem(""));
model->item(2)->setChild(5,2,new QStandardItem("0x0-手动模式 0x1-自动模式"));
model->item(2)->setChild(6,0,new QStandardItem("灯光控制模式"));
model->item(2)->setChild(6,1,new QStandardItem(""));
model->item(2)->setChild(6,2,new QStandardItem("0x0-手动模式 0x1-自动模式"));
model->item(2)->setChild(7,0,new QStandardItem("目标挡位"));
model->item(2)->setChild(7,1,new QStandardItem(""));
model->item(2)->setChild(7,2,new QStandardItem("0x0-空档 0x1-前进档 0x2-后退档"));
model->item(2)->setChild(8,0,new QStandardItem("目标驻车"));
model->item(2)->setChild(8,1,new QStandardItem(""));
model->item(2)->setChild(8,2,new QStandardItem("0x0-释放驻车 0x1-使能驻车"));
model->item(2)->setChild(9,0,new QStandardItem("目标油门"));
model->item(2)->setChild(9,1,new QStandardItem(" %"));
model->item(2)->setChild(9,2,new QStandardItem("数据范围:0-100"));
model->item(2)->setChild(10,0,new QStandardItem("目标方向盘转角"));
model->item(2)->setChild(10,1,new QStandardItem(" °"));
model->item(2)->setChild(10,2,new QStandardItem("数据范围:-7100 - +7100 角度分辨率:0.1° 左转为正"));
model->item(2)->setChild(11,0,new QStandardItem("目标方向盘转速"));
model->item(2)->setChild(11,1,new QStandardItem(" °/s"));
model->item(2)->setChild(11,2,new QStandardItem("数据范围:0-250 转速范围[0°/s,500°/s]"));
model->item(2)->setChild(12,0,new QStandardItem("目标制动"));
model->item(2)->setChild(12,1,new QStandardItem(" MPa"));
model->item(2)->setChild(12,2,new QStandardItem("数据范围:0-15 制动压力范围[0 Mpa,7.5Mpa]"));
//4 0x0C09D1D0
model->setItem(3,new QStandardItem("电源管理"));
model->item(3)->setChild(0,0,new QStandardItem("激光雷达电源"));
model->item(3)->setChild(0,1,new QStandardItem(""));
model->item(3)->setChild(0,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(3)->setChild(1,0,new QStandardItem("RTK GPS电源"));
model->item(3)->setChild(1,1,new QStandardItem(""));
model->item(3)->setChild(1,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(3)->setChild(2,0,new QStandardItem("超声波雷达电源"));
model->item(3)->setChild(2,1,new QStandardItem(""));
model->item(3)->setChild(2,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(3)->setChild(3,0,new QStandardItem("摄像头电源"));
model->item(3)->setChild(3,1,new QStandardItem(""));
model->item(3)->setChild(3,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(3)->setChild(4,0,new QStandardItem("显示器电源"));
model->item(3)->setChild(4,1,new QStandardItem(""));
model->item(3)->setChild(4,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(3)->setChild(5,0,new QStandardItem("交换机电源"));
model->item(3)->setChild(5,1,new QStandardItem(""));
model->item(3)->setChild(5,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(3)->setChild(6,0,new QStandardItem("预留电源1"));
model->item(3)->setChild(6,1,new QStandardItem(""));
model->item(3)->setChild(6,2,new QStandardItem("0x0-关闭,0x1-打开"));
//5 0x0C0AD1D0
model->setItem(4,new QStandardItem("灯光管理"));
model->item(4)->setChild(0,0,new QStandardItem("左转向灯"));
model->item(4)->setChild(0,1,new QStandardItem(""));
model->item(4)->setChild(0,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(4)->setChild(1,0,new QStandardItem("右转向灯"));
model->item(4)->setChild(1,1,new QStandardItem(""));
model->item(4)->setChild(1,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(4)->setChild(2,0,new QStandardItem("远光灯"));
model->item(4)->setChild(2,1,new QStandardItem(""));
model->item(4)->setChild(2,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(4)->setChild(3,0,new QStandardItem("近光灯"));
model->item(4)->setChild(3,1,new QStandardItem(""));
model->item(4)->setChild(3,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(4)->setChild(4,0,new QStandardItem("危险报警灯光"));
model->item(4)->setChild(4,1,new QStandardItem(""));
model->item(4)->setChild(4,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(4)->setChild(5,0,new QStandardItem("倒车灯"));
model->item(4)->setChild(5,1,new QStandardItem(""));
model->item(4)->setChild(5,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(4)->setChild(6,0,new QStandardItem("刹车灯"));
model->item(4)->setChild(6,1,new QStandardItem(""));
model->item(4)->setChild(6,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(4)->setChild(7,0,new QStandardItem("喇叭"));
model->item(4)->setChild(7,1,new QStandardItem(""));
model->item(4)->setChild(7,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(4)->setChild(8,0,new QStandardItem("雨刮器"));
model->item(4)->setChild(8,1,new QStandardItem(""));
model->item(4)->setChild(8,2,new QStandardItem("0x0-关闭,0x1-打开"));
//6 0x1814D0D1
model->setItem(5,new QStandardItem("车辆授权回复"));
model->item(5)->setChild(0,0,new QStandardItem("回复命令"));
model->item(5)->setChild(0,1,new QStandardItem(""));
model->item(5)->setChild(0,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(5)->setChild(1,0,new QStandardItem("命令状态"));
model->item(5)->setChild(1,1,new QStandardItem(""));
model->item(5)->setChild(1,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(5)->setChild(2,0,new QStandardItem("车辆编号-字段1"));
model->item(5)->setChild(2,1,new QStandardItem(""));
model->item(5)->setChild(2,2,new QStandardItem("车辆编号字段1"));
model->item(5)->setChild(3,0,new QStandardItem("车辆编号-字段2"));
model->item(5)->setChild(3,1,new QStandardItem(""));
model->item(5)->setChild(3,2,new QStandardItem("车辆编号字段2"));
model->item(5)->setChild(4,0,new QStandardItem("车辆编号-字段3"));
model->item(5)->setChild(4,1,new QStandardItem(""));
model->item(5)->setChild(4,2,new QStandardItem("车辆编号字段3"));
//7 0x18F014D1
model->setItem(6,new QStandardItem("车辆状态 1#"));
model->item(6)->setChild(0,0,new QStandardItem("车辆工作模式"));
model->item(6)->setChild(0,1,new QStandardItem(""));
model->item(6)->setChild(0,2,new QStandardItem("0x00-断电模式 0x10-待机模式 0x20-工程模式 0x30-手动驾驶模式 0x40-自动驾驶模式 0x50-紧急停车模式"));
model->item(6)->setChild(1,0,new QStandardItem("转向控制模式"));
model->item(6)->setChild(1,1,new QStandardItem(""));
model->item(6)->setChild(1,2,new QStandardItem("0x0-手动控制模式 0x1-线控模式"));
model->item(6)->setChild(2,0,new QStandardItem("制动工作模式"));
model->item(6)->setChild(2,1,new QStandardItem(""));
model->item(6)->setChild(2,2,new QStandardItem("0x0-手动控制模式 0x1-线控模式"));
model->item(6)->setChild(3,0,new QStandardItem("挡位工作模式"));
model->item(6)->setChild(3,1,new QStandardItem(""));
model->item(6)->setChild(3,2,new QStandardItem("0x0-手动控制模式 0x1-线控模式"));
model->item(6)->setChild(4,0,new QStandardItem("油门工作模式"));
model->item(6)->setChild(4,1,new QStandardItem(""));
model->item(6)->setChild(4,2,new QStandardItem("0x0-手动控制模式 0x1-线控模式"));
model->item(6)->setChild(5,0,new QStandardItem("驻车工作模式"));
model->item(6)->setChild(5,1,new QStandardItem(""));
model->item(6)->setChild(5,2,new QStandardItem("0x0-手动控制模式 0x1-线控模式"));
model->item(6)->setChild(6,0,new QStandardItem("灯光工作模式"));
model->item(6)->setChild(6,1,new QStandardItem(""));
model->item(6)->setChild(6,2,new QStandardItem("0x0-手动控制模式 0x1-线控模式"));
model->item(6)->setChild(7,0,new QStandardItem("车辆故障代码"));
model->item(6)->setChild(7,1,new QStandardItem(""));
model->item(6)->setChild(7,2,new QStandardItem("详见车辆故障代码定义"));
model->item(6)->setChild(8,0,new QStandardItem("车辆授权状态"));
model->item(6)->setChild(8,1,new QStandardItem(""));
model->item(6)->setChild(8,2,new QStandardItem("0x00-未授权;0x01-已授权"));
model->item(6)->setChild(9,0,new QStandardItem("操作提示"));
model->item(6)->setChild(9,1,new QStandardItem(""));
model->item(6)->setChild(9,2,new QStandardItem("详见车辆操作提示定义"));
//8 0x18F015D1
model->setItem(7,new QStandardItem("车辆状态 2#"));
model->item(7)->setChild(0,0,new QStandardItem("档位开关状态"));
model->item(7)->setChild(0,1,new QStandardItem(""));
model->item(7)->setChild(0,2,new QStandardItem("0x0-空档;0x1-前进档;0x2-后退档"));
model->item(7)->setChild(1,0,new QStandardItem("实时挡位状态"));
model->item(7)->setChild(1,1,new QStandardItem(""));
model->item(7)->setChild(1,2,new QStandardItem("0x0-空档;0x1-前进档;0x2-后退档"));
model->item(7)->setChild(2,0,new QStandardItem("油门踏板状态"));
model->item(7)->setChild(2,1,new QStandardItem(" %"));
model->item(7)->setChild(2,2,new QStandardItem("数据范围:0-100 油门踏板有效范围[0%,100%]"));
model->item(7)->setChild(3,0,new QStandardItem("实时油门状态"));
model->item(7)->setChild(3,1,new QStandardItem(" %"));
model->item(7)->setChild(3,2,new QStandardItem("数据范围:0-100 油门有效范围[0%,100%]"));
model->item(7)->setChild(4,0,new QStandardItem("方向盘转角"));
model->item(7)->setChild(4,1,new QStandardItem(" °"));
model->item(7)->setChild(4,2,new QStandardItem("数据范围:-7100 - +7100 角度分辨率:0.1° 角度范围:[-710°,710°]"));
model->item(7)->setChild(5,0,new QStandardItem("方向盘转速"));
model->item(7)->setChild(5,1,new QStandardItem(" °/s"));
model->item(7)->setChild(5,2,new QStandardItem("数据范围:0-250 转速范围[0°/s,500°/s]"));
model->item(7)->setChild(6,0,new QStandardItem("方向盘扭矩"));
model->item(7)->setChild(6,1,new QStandardItem(""));
model->item(7)->setChild(6,2,new QStandardItem("数据范围:-127 - +127 扭矩范围:[-12.7Nm,12.7Nm] 向左转为正值,向右转为负值"));
//9 0x18F016D1
model->setItem(8,new QStandardItem("车辆状态 3#"));
model->item(8)->setChild(0,0,new QStandardItem("制动踏板状态"));
model->item(8)->setChild(0,1,new QStandardItem(" MPa"));
model->item(8)->setChild(0,2,new QStandardItem("数据范围:0-15 制动踏板压力范围[0 Mpa,7.5Mpa]"));
model->item(8)->setChild(1,0,new QStandardItem("实时制动压力"));
model->item(8)->setChild(1,1,new QStandardItem(" MPa"));
model->item(8)->setChild(1,2,new QStandardItem("数据范围:0-15 制动压力范围:[0 Mpa,7.5Mpa]"));
model->item(8)->setChild(2,0,new QStandardItem("驻车开关状态"));
model->item(8)->setChild(2,1,new QStandardItem(""));
model->item(8)->setChild(2,2,new QStandardItem("0x0-未使能 0x1-使能"));
model->item(8)->setChild(3,0,new QStandardItem("实时驻车状态"));
model->item(8)->setChild(3,1,new QStandardItem(""));
model->item(8)->setChild(3,2,new QStandardItem("0x0-未驻车 0x1-已驻车"));
model->item(8)->setChild(4,0,new QStandardItem("钥匙开关状态"));
model->item(8)->setChild(4,1,new QStandardItem(""));
model->item(8)->setChild(4,2,new QStandardItem("0x0-关闭 0x1-打开"));
model->item(8)->setChild(5,0,new QStandardItem("模式开关状态"));
model->item(8)->setChild(5,1,new QStandardItem(""));
model->item(8)->setChild(5,2,new QStandardItem("0x0-手动档位 0x1-自动档位"));
model->item(8)->setChild(6,0,new QStandardItem("启停开关状态"));
model->item(8)->setChild(6,1,new QStandardItem(""));
model->item(8)->setChild(6,2,new QStandardItem("0x0-停止 0x1-启动"));
model->item(8)->setChild(7,0,new QStandardItem("急停开关状态"));
model->item(8)->setChild(7,1,new QStandardItem(""));
model->item(8)->setChild(7,2,new QStandardItem("0x0-关闭 0x1-打开"));
model->item(8)->setChild(8,0,new QStandardItem("工控机关机请求"));
model->item(8)->setChild(8,1,new QStandardItem(""));
model->item(8)->setChild(8,2,new QStandardItem("0x0-无请求;0x1-请求关机 工控机接收到关机请求使能时,应开始进行关机,15 秒后系统开始断电"));
//10 0x18F01AD1
model->setItem(9,new QStandardItem("车辆里程信息"));
model->item(9)->setChild(0,0,new QStandardItem("车辆速度"));
model->item(9)->setChild(0,1,new QStandardItem(" Km/h"));
model->item(9)->setChild(0,2,new QStandardItem("数据范围:-5000 - +5000 范围:[-500Km/h, +500Km/h] 负值表示倒退"));
model->item(9)->setChild(1,0,new QStandardItem("小计里程"));
model->item(9)->setChild(1,1,new QStandardItem(" Km"));
model->item(9)->setChild(1,2,new QStandardItem("数据范围:0-FAFF 小计里程范围:[0km,6425.5km]"));
model->item(9)->setChild(2,0,new QStandardItem("总里程"));
model->item(9)->setChild(2,1,new QStandardItem(" Km"));
model->item(9)->setChild(2,2,new QStandardItem("数据范围:0-0xFAFFFF 总里程范围:[0km,1644953.5km]"));
//11 0x18F01CD1
model->setItem(10,new QStandardItem("车辆灯光状态"));
model->item(10)->setChild(0,0,new QStandardItem("左转向灯"));
model->item(10)->setChild(0,1,new QStandardItem(""));
model->item(10)->setChild(0,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(1,0,new QStandardItem("右转向灯"));
model->item(10)->setChild(1,1,new QStandardItem(""));
model->item(10)->setChild(1,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(2,0,new QStandardItem("远光灯"));
model->item(10)->setChild(2,1,new QStandardItem(""));
model->item(10)->setChild(2,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(3,0,new QStandardItem("近光灯"));
model->item(10)->setChild(3,1,new QStandardItem(""));
model->item(10)->setChild(3,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(4,0,new QStandardItem("双闪灯"));
model->item(10)->setChild(4,1,new QStandardItem(""));
model->item(10)->setChild(4,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(5,0,new QStandardItem("倒车灯"));
model->item(10)->setChild(5,1,new QStandardItem(""));
model->item(10)->setChild(5,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(6,0,new QStandardItem("刹车灯"));
model->item(10)->setChild(6,1,new QStandardItem(""));
model->item(10)->setChild(6,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(7,0,new QStandardItem("喇叭"));
model->item(10)->setChild(7,1,new QStandardItem(""));
model->item(10)->setChild(7,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(8,0,new QStandardItem("雨刮器"));
model->item(10)->setChild(8,1,new QStandardItem(""));
model->item(10)->setChild(8,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(9,0,new QStandardItem("左转向灯开关"));
model->item(10)->setChild(9,1,new QStandardItem(""));
model->item(10)->setChild(9,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(10,0,new QStandardItem("右转向灯开关"));
model->item(10)->setChild(10,1,new QStandardItem(""));
model->item(10)->setChild(10,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(11,0,new QStandardItem("右转向灯开关"));
model->item(10)->setChild(11,1,new QStandardItem(""));
model->item(10)->setChild(11,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(12,0,new QStandardItem("远光灯开关"));
model->item(10)->setChild(12,1,new QStandardItem(""));
model->item(10)->setChild(12,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(13,0,new QStandardItem("近光灯开关"));
model->item(10)->setChild(13,1,new QStandardItem(""));
model->item(10)->setChild(13,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(14,0,new QStandardItem("双闪灯开关"));
model->item(10)->setChild(14,1,new QStandardItem(""));
model->item(10)->setChild(14,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(15,0,new QStandardItem("倒车灯开关"));
model->item(10)->setChild(15,1,new QStandardItem(""));
model->item(10)->setChild(15,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(16,0,new QStandardItem("刹车灯开关"));
model->item(10)->setChild(16,1,new QStandardItem(""));
model->item(10)->setChild(16,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(17,0,new QStandardItem("喇叭开关"));
model->item(10)->setChild(17,1,new QStandardItem(""));
model->item(10)->setChild(17,2,new QStandardItem("0x0-关闭;0x1-打开"));
model->item(10)->setChild(18,0,new QStandardItem("雨刮器开关"));
model->item(10)->setChild(18,1,new QStandardItem(""));
model->item(10)->setChild(18,2,new QStandardItem("0x0-关闭;0x1-打开"));
//12 0x18F01ED1
model->setItem(11,new QStandardItem("车辆电源状态"));
model->item(11)->setChild(0,0,new QStandardItem("电源系统模式"));
model->item(11)->setChild(0,1,new QStandardItem(""));
model->item(11)->setChild(0,2,new QStandardItem("0x00-断电模式 0x01-待机模式 0x02-标准模式"));
model->item(11)->setChild(1,0,new QStandardItem("激光雷达电源"));
model->item(11)->setChild(1,1,new QStandardItem(""));
model->item(11)->setChild(1,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(11)->setChild(2,0,new QStandardItem("RTK GPS 电源"));
model->item(11)->setChild(2,1,new QStandardItem(""));
model->item(11)->setChild(2,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(11)->setChild(3,0,new QStandardItem("超声波雷达电源"));
model->item(11)->setChild(3,1,new QStandardItem(""));
model->item(11)->setChild(3,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(11)->setChild(4,0,new QStandardItem("摄像头电源"));
model->item(11)->setChild(4,1,new QStandardItem(""));
model->item(11)->setChild(4,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(11)->setChild(5,0,new QStandardItem("显示器电源"));
model->item(11)->setChild(5,1,new QStandardItem(""));
model->item(11)->setChild(5,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(11)->setChild(6,0,new QStandardItem("交换机电源"));
model->item(11)->setChild(6,1,new QStandardItem(""));
model->item(11)->setChild(6,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(11)->setChild(7,0,new QStandardItem("工控机电源"));
model->item(11)->setChild(7,1,new QStandardItem(""));
model->item(11)->setChild(7,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(11)->setChild(8,0,new QStandardItem("EHB 电源"));
model->item(11)->setChild(8,1,new QStandardItem(""));
model->item(11)->setChild(8,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(11)->setChild(9,0,new QStandardItem("SDM 电源"));
model->item(11)->setChild(9,1,new QStandardItem(""));
model->item(11)->setChild(9,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(11)->setChild(10,0,new QStandardItem("EPB 电源"));
model->item(11)->setChild(10,1,new QStandardItem(""));
model->item(11)->setChild(10,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(11)->setChild(11,0,new QStandardItem("LMU 电源"));
model->item(11)->setChild(11,1,new QStandardItem(""));
model->item(11)->setChild(11,2,new QStandardItem("0x0-关闭,0x1-打开"));
model->item(11)->setChild(12,0,new QStandardItem("预留电源 1"));
model->item(11)->setChild(12,1,new QStandardItem(""));
model->item(11)->setChild(12,2,new QStandardItem("0x0-关闭,0x1-打开"));
//13 0x18F020D1
model->setItem(12,new QStandardItem("电池状态 1#(48V 动力电池)"));
model->item(12)->setChild(0,0,new QStandardItem("电池状态"));
model->item(12)->setChild(0,1,new QStandardItem(""));
model->item(12)->setChild(0,2,new QStandardItem("0x00-无故障 其他值详见电池故障定义"));
model->item(12)->setChild(1,0,new QStandardItem("电池电量"));
model->item(12)->setChild(1,1,new QStandardItem(" %"));
model->item(12)->setChild(1,2,new QStandardItem("数据范围:0-100 表示范围[0%,100%]"));
model->item(12)->setChild(2,0,new QStandardItem("电池电压"));
model->item(12)->setChild(2,1,new QStandardItem(" V"));
model->item(12)->setChild(2,2,new QStandardItem("数据范围:0-10000 电压精度:0.1V "));
model->item(12)->setChild(3,0,new QStandardItem("电池电流"));
model->item(12)->setChild(3,1,new QStandardItem(" A"));
model->item(12)->setChild(3,2,new QStandardItem("0x00-无故障 其他值详见电池故障定义"));
model->item(12)->setChild(4,0,new QStandardItem("电池温度"));
model->item(12)->setChild(4,1,new QStandardItem(""));
model->item(12)->setChild(4,2,new QStandardItem("0x00-无故障 其他值详见电池故障定义"));
//14 0x18F021D1
model->setItem(13,new QStandardItem("电池状态 2#(12V 待机电池)"));
model->item(13)->setChild(0,0,new QStandardItem("电池状态"));
model->item(13)->setChild(0,1,new QStandardItem(""));
model->item(13)->setChild(0,2,new QStandardItem("0x00-无故障 其他值详见电池故障定义"));
model->item(13)->setChild(1,0,new QStandardItem("电池电量"));
model->item(13)->setChild(1,1,new QStandardItem(" %"));
model->item(13)->setChild(1,2,new QStandardItem("数据范围:0-100 表示范围[0%,100%]"));
model->item(13)->setChild(2,0,new QStandardItem("电池电压"));
model->item(13)->setChild(2,1,new QStandardItem(" V"));
model->item(13)->setChild(2,2,new QStandardItem("数据范围:0-10000 电压精度:0.1V "));
model->item(13)->setChild(3,0,new QStandardItem("电池电流"));
model->item(13)->setChild(3,1,new QStandardItem(" A"));
model->item(13)->setChild(3,2,new QStandardItem("0x00-无故障 其他值详见电池故障定义"));
model->item(13)->setChild(4,0,new QStandardItem("电池温度"));
model->item(13)->setChild(4,1,new QStandardItem(""));
model->item(13)->setChild(4,2,new QStandardItem("0x00-无故障 其他值详见电池故障定义"));
//车辆授权之后 禁用的按钮都会解除 即车辆全授权,但在此之前,关于车辆控制的控件都是禁用状态
ui->pushButtonRemote->setEnabled(false);
ui->pushButtonNear->setEnabled(false);
ui->pushButtonDF->setEnabled(false);
ui->pushButtonLF->setEnabled(false);
ui->pushButtonLL->setEnabled(false);
ui->pushButtonLR->setEnabled(false);
ui->pushButtonRI->setEnabled(false);
ui->pushButtonTZ->setEnabled(false);
// ui->pushButtonWP->setEnabled(false);
ui->pushButtonBEN->setEnabled(false);
ui->pushButtonYEN->setEnabled(false);
ui->pushButtonBack->setEnabled(false);
ui->pushButtonSound->setEnabled(false);
ui->horizontalSlider->setEnabled(false);
ui->verticalSlider->setEnabled(false);
}
void Widget::logger(uint level,QString message){
switch (level)
{
case 0://DEBUG Level
if(DEBUG)
{
ui->textBrowserMessage->append((QString)"<font color=\"#40E0D0\">[DEBUG][" + QDateTime::currentDateTime().toString("hh:mm:ss.zzz]:") + message + "\n</font>");
}
break;
case 1://INFO level
ui->textBrowserMessage->append((QString)"<font color=\"#000000\">[INFO][" + QDateTime::currentDateTime().toString("hh:mm:ss.zzz]:") + message + "\n</font>");
break;
case 2://WARN level
ui->textBrowserMessage->append((QString)"<font color=\"#FF8C00\">[WARN][" + QDateTime::currentDateTime().toString("hh:mm:ss.zzz]:") + message + "\n</font>");
break;
case 3://ERROR level
ui->textBrowserMessage->append((QString)"<font color=\"#FF0000\">[ERROR][" + QDateTime::currentDateTime().toString("hh:mm:ss.zzz]:") + message + "\n</font>");
break;
case 4://FATAL level
ui->textBrowserMessage->append((QString)"<font color=\"#FF0000\">[FATAL][" + QDateTime::currentDateTime().toString("hh:mm:ss.zzz]:") + message + "\n</font>");
break;
default://UNKNOWN
ui->textBrowserMessage->append((QString)"<font color=\"#000000\">[UNKNOWN][" + QDateTime::currentDateTime().toString("hh:mm:ss.zzz]:") + message + "\n</font>");
break;
}
}
void Widget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QStyleOption opt;
opt.initFrom(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
//窗口关闭事件 没什么必要
void Widget::closeEvent(QCloseEvent *event){
int connect = m_connect;
m_connect = 0;
if(connect)
{
VCI_CloseDevice(static_cast<DWORD>(CANTH->m_devtype),CANTH->m_devind); //关闭CAN设备
Timer1->stop(); //停止发送定时器
CANTH->setFlag(true); //设置线程退出标志
CANTH->quit(); //退出接收线程
CANTH->wait(); //阻塞线程
/**提示信息显示清除**/
ui->textBrowserMessage->clear();
ui->treeView->close();
}
//退出提示窗口
switch( QMessageBox::information( this, tr("CarTools提示"),tr("是否要退出CarTools程序?"),tr("确定"), tr("取消"), nullptr, 1 ) )
{
case 0:
event->accept();
break;
case 1:
default:
event->ignore();
break;
}
}
//点击连接按钮事件
void Widget::on_CANConnect_clicked()
{
//如果连接已经成功,将要关闭的话
if(m_connect == 1)
{
m_connect = 0;
ui->CANState->setChecked(false);
//配置CAN的四个选项设置为可选
ui->CANDevice->setEnabled(true);
ui->CANIndex->setEnabled(true);
ui->CANPort->setEnabled(true);
ui->CANBaud->setEnabled(true);
VCI_CloseDevice(static_cast<DWORD>(CANTH->m_devtype),CANTH->m_devind);
CANTH->setFlag(true); //设置线程退出标志
CANTH->quit(); //退出接收线程
CANTH->wait();
Timer1->stop(); //停止发送定时器
/**提示信息显示清除**/
ui->textBrowserMessage->clear();
return;
}
//如果没连接成功,那么开始连接
// qDebug()<<"canconnect";
VCI_INIT_CONFIG init_config;
int index, mode, cannum, baud, DevType;
/**设备选择,默认USBCAN_2E_U**/
DevType = ui->CANDevice->currentIndex();
if(0 == DevType)
{
DevType = 20;
}
else if (1 == DevType)
{
DevType = 21;
}
else if (2 == DevType)
{
DevType = 19;
}
else
{
DevType = 22;
}
CANTH->m_devtype=DevType;
/**索引选择,默认为0**/
index = ui->CANIndex->currentIndex();
CANTH->m_devind = static_cast<DWORD>(index);
/**CAN工作模式选择**/
mode = 0; //0:正常模式, 1:只听模式
/**CAN通道选择,默认为0**/
cannum = ui->CANPort->currentIndex();
CANTH->m_cannum = cannum;
/**波特率设置,默认500Kpbs**/
baud = ui->CANBaud->currentIndex();
if(baud == 0)
{
baud = 0x060003;
}
else if(baud == 1)
{
baud = 0x060004;
}
else if(baud == 2)
{
baud = 0x060007; //目前给设置为默认500Kpbs
}
else if(baud == 3)
{
baud = 0x1C0008;
}
else if(baud == 4)
{
baud = 0x1C0011;
}
else if(baud == 5)
{
baud = 0x160023;
}
else if(baud == 6)
{
baud = 0x1C002C;
}
else
{
baud = 0x1600B3;
}
/**初始化CAN配置**/
init_config.Mode = static_cast<uchar>(mode);
/**打开CAN设备**/
// qDebug()<<"index"<<index<<"M_devtype"<<CANTH->m_devtype;
if(VCI_OpenDevice(static_cast<DWORD>(CANTH->m_devtype),static_cast<DWORD>(index),0)!=STATUS_OK)
{
logger(3,"CAN总线与电脑连接失败,请检查CAN总线是否被其他程序占用或者CAN盒连接参数错误。");
QMessageBox::warning(this,"警告",QStringLiteral("CAN总线与电脑连接失败,请检查CAN总线\n是否被其他程序占用或者CAN盒连接参数错误。"));
return;
}
/**设置CAN波特率**/
if (VCI_SetReference(static_cast<DWORD>(CANTH->m_devtype),static_cast<DWORD>(index), static_cast<DWORD>(cannum), 0, &baud) != STATUS_OK)
{
logger(3,"设置波特率错误,打开设备失败!");
QMessageBox::warning(this,"警告",QStringLiteral("设置波特率错误,打开设备失败!"));
VCI_CloseDevice(static_cast<DWORD>(CANTH->m_devtype),static_cast<DWORD>(index));
return;
}
/**初始化CAN设备**/
if(VCI_InitCAN(static_cast<DWORD>(CANTH->m_devtype),static_cast<DWORD>(index), static_cast<DWORD>(cannum), &init_config)!=STATUS_OK)
{
logger(3,"初始化CAN失败!");
QMessageBox::warning(this,"警告",QStringLiteral("初始化CAN失败!"));
VCI_CloseDevice(static_cast<DWORD>(CANTH->m_devtype),static_cast<DWORD>(index));
return;
}
/**滤波设置目前省略,之后再配置**/
/**连接成功标志**/
m_connect = 1;
logger(1,"CAN设备连接成功!");
//CAN设备连接成功之后该怎么做
ui->CANState->setChecked(true);
ui->CANDevice->setEnabled(false);
ui->CANIndex->setEnabled(false);
ui->CANPort->setEnabled(false);
ui->CANBaud->setEnabled(false);
/**接收线程启动**/
CANTH->setFlag(false);
CANTH->start();
}
//点击启动按钮事件
void Widget::on_CANStart_clicked()
{
if(m_connect == 0)
{
QMessageBox::warning(this,"警告","CAN设备未连接,请先设置CAN连接参数\n连接CAN总线成功后在进行尝试");
logger(2,"CAN设备未连接,请先设置CAN连接参数");
return;
}
if(VCI_StartCAN(static_cast<DWORD>(CANTH->m_devtype),CANTH->m_devind,static_cast<DWORD>(CANTH->m_cannum)) == 1)
{
logger(1,"CAN设备启动成功!");
ui->POWERState->setChecked(true);
/**定时发送启动**/
if(Timer1->isActive() == false)
Timer1->start(50);
}
else
{
logger(3,"CAN设备启动失败!");
ui->POWERState->setChecked(false);
QMessageBox::warning(this,"警告","CAN设备启动失败");
}
}
//提示信息显示最后一行
void Widget::on_textBrowserMessage_textChanged()
{
ui->textBrowserMessage->moveCursor(QTextCursor::End);
}
QString str;
//定时器线程函数
void Widget::dealTimer1()
{
if(m_connect == 0)
return;
VCI_CAN_OBJ frameinforight;
frameinforight.ID = 0x0C00D1D0;
frameinforight.SendType = 0; //发送格式:0:正常发送 1:单次正常发送 2:自发自收 3.单次自发自收
frameinforight.RemoteFlag = 0; //帧格式:0:数据帧 1:远程帧
frameinforight.ExternFlag = 1; //帧类型:0:标准帧 1为扩展帧,29位ID
frameinforight.DataLen = 8;
frameinforight.Data[0] = 0x00;
frameinforight.Data[1] = 0x00;
frameinforight.Data[2] = 0x24;
frameinforight.Data[3] = 0x92;
frameinforight.Data[4] = 0xAB;
frameinforight.Data[5] = 0x41;
frameinforight.Data[6] = 0x79;
frameinforight.Data[7] = 0x5F;
m_sendTimeout = 1000;
VCI_SetReference(static_cast<DWORD>(CANTH->m_devtype),CANTH->m_devind,static_cast<DWORD>(CANTH->m_cannum),4,&m_sendTimeout);//设置发送超时
uint ret2 = VCI_Transmit(static_cast<DWORD>(CANTH->m_devtype),CANTH->m_devind,static_cast<DWORD>(CANTH->m_cannum),&frameinforight,1);
if(ret2==1)
{
ui->textBrowserMessage->insertPlainText("授权发送成功!\n");
}
else
{
ui->textBrowserMessage->insertPlainText("授权发送失败!\n");
}
VCI_CAN_OBJ frameinfo;
frameinfo.ID = 0x0C08D1D0;
frameinfo.SendType = 0; //发送格式:0:正常发送 1:单次正常发送 2:自发自收 3.单次自发自收
frameinfo.RemoteFlag = 0; //帧格式:0:数据帧 1:远程帧
frameinfo.ExternFlag = 1; //帧类型:0:标准帧 1为扩展帧,29位ID
frameinfo.DataLen = 8;
//车辆行驶模式
if(ui->radioButtonAA->isChecked()) Run_Mode = 3;
if(ui->radioButtonPA->isChecked()) Run_Mode = 1;
if(ui->radioButtonM->isChecked()) Run_Mode = 0;
Data08.TxData.runMode = Run_Mode;
//模块使能
Data08.TxData.steerEnable = Steer_EN;
Data08.TxData.brakeEnable = Brake_EN;
Data08.TxData.gearEnable = Gear_EN;
Data08.TxData.gasEnable = Gas_EN;
Data08.TxData.parkEnable = Park_EN;
Data08.TxData.lightEnable = Light_EN;
//挡位以及驻车
Data08.TxData.targetGear = m_gear;
Data08.TxData.targetPark = m_park;
//油门数据
Data08.TxData.targetGasValue = m_gas;
//转向数据
m_steer = ui->horizontalSlider->value()*10;
if(m_steer<0) m_steer = ~(-m_steer)+1;
Data08.TxData.target_steer_angle_value_H = m_steer>>8&0xff;
Data08.TxData.target_steer_angle_value_L = m_steer&0xff;
//转速设置
m_gradiant = ui->spinBoxTS->value()&0xff;
Data08.TxData.target_steer_angle_gradiant = m_gradiant;
// 制动数据
Data08.TxData.targetBrakePressure = m_brake/5;
// 循环计数
rolling_counter++;
if(rolling_counter>15)
rolling_counter = 0;
Data08.TxData.rolling_counter = rolling_counter;
Data08.TxData.res1 = 0;
for(uint i=0 ;i<8;i++)
{
frameinfo.Data[i] = Data08.UCData[i];
str += QString::number(frameinfo.Data[i],16)+" ";
}
// qDebug() << hex << frameinfo.ID;
// qDebug() << "数据" << str;
str = nullptr;
m_sendTimeout = 1000;
VCI_SetReference(static_cast<DWORD>(CANTH->m_devtype),CANTH->m_devind,static_cast<DWORD>(CANTH->m_cannum),4,&m_sendTimeout);//设置发送超时
uint ret = VCI_Transmit(static_cast<DWORD>(CANTH->m_devtype),CANTH->m_devind,static_cast<DWORD>(CANTH->m_cannum),&frameinfo,1);
if(ret==1){
logger(0,"CAN总线报文通信正常。");
}else{
logger(0,"CAN总线报文通信错误!");
}
VCI_CAN_OBJ frameinfolight;
frameinfolight.ID = 0x0C0AD1D0;
frameinfolight.SendType = 0; //发送格式:0:正常发送 1:单次正常发送 2:自发自收 3.单次自发自收
frameinfolight.RemoteFlag = 0; //帧格式:0:数据帧 1:远程帧
frameinfolight.ExternFlag = 1; //帧类型:0:标准帧 1为扩展帧,29位ID
frameinfolight.DataLen = 8;
Data0C.TxData.turnLightLeft = m_turnlightleft;
Data0C.TxData.turnLightRight = m_turnlightright;
Data0C.TxData.farHeadLight = m_farheadlight;
Data0C.TxData.nearHeadLight = m_nearheadlight;
Data0C.TxData.flashLight = m_flashlight;
Data0C.TxData.backLight = m_backlight;
Data0C.TxData.brakeLight = m_brakelight;
Data0C.TxData.trumpet = m_trumpet;
Data0C.TxData.wiper = m_wiper;
Data0C.TxData.res1 = 0x00;
Data0C.TxData.res2 = 0x00;
Data0C.TxData.res3 = 0x00;
Data0C.TxData.res4 = 0x00;
Data0C.TxData.res5 = 0x00;
Data0C.TxData.res6 = 0x00;
for(uint i=0 ;i<8;i++)
{
frameinfolight.Data[i] = Data0C.UCData[i];
}
// m_sendTimeout = 1000;
// VCI_SetReference(static_cast<DWORD>(CANTH->m_devtype),CANTH->m_devind,static_cast<DWORD>(CANTH->m_cannum),4,&m_sendTimeout);//设置发送超时
// uint ret1 = VCI_Transmit(static_cast<DWORD>(CANTH->m_devtype),CANTH->m_devind,static_cast<DWORD>(CANTH->m_cannum),&frameinfolight,1);
// if(ret1==1){
// }else{
// ui->textBrowserMessage->insertPlainText("灯光发送失败!\n");
// }
}
//接收数据处理函数 这里是车辆回传过来的实时信息
void Widget::dealReceiveData(PVCI_CAN_OBJ objs, uint length)
{
for(uint i=0;i<length;i++)
{
uint CAN_ID = objs[i].ID;
//CAN帧标识为# 1/14 0x0C00D1D0 车辆授权
if(CAN_ID == 0x0C00D1D0)
{
if(objs[i].RemoteFlag==0)
{
if(objs[i].DataLen>8)
objs[i].DataLen=8;
for(int j=0;j<objs[i].DataLen;j++)
{
Data20D1.UCData[j] = objs[i].Data[j];
}
}
}
//CAN帧标识为# 2/14 0x0C02D1D0 车辆配置
if(CAN_ID == 0x0C02D1D0)
{
if(objs[i].RemoteFlag==0)
{
if(objs[i].DataLen>8)
objs[i].DataLen=8;
for(int j=0;j<objs[i].DataLen;j++)
{
Data20D1.UCData[j] = objs[i].Data[j];
}
}
}
//CAN帧标识为# 3/14 0x0C02D1D0 车辆配置
if(CAN_ID == 0x0C02D1D0)
{
if(objs[i].RemoteFlag==0)
{
if(objs[i].DataLen>8)
objs[i].DataLen=8;
for(int j=0;j<objs[i].DataLen;j++)
{
Data20D1.UCData[j] = objs[i].Data[j];
}
}
}
//CAN帧标识为# 4/14 0x0C02D1D0 车辆配置
if(CAN_ID == 0x0C02D1D0)
{
if(objs[i].RemoteFlag==0)
{
if(objs[i].DataLen>8)
objs[i].DataLen=8;
for(int j=0;j<objs[i].DataLen;j++)
{
Data20D1.UCData[j] = objs[i].Data[j];
}
}
}
//CAN帧标识为# 5/14 0x0C02D1D0 车辆配置
if(CAN_ID == 0x0C02D1D0)
{
if(objs[i].RemoteFlag==0)
{
if(objs[i].DataLen>8)
objs[i].DataLen=8;
for(int j=0;j<objs[i].DataLen;j++)
{
Data20D1.UCData[j] = objs[i].Data[j];
}