Compare commits

...

3 Commits

Author SHA1 Message Date
wangzhongjie
f604c1c8f2 fix: 优化评判结构 2025-06-20 16:42:34 +08:00
wangzhongjie
0be3e1b970 fix: 优化考试过程信号查看的界面 2025-06-20 16:00:50 +08:00
wangzhongjie
ee0b96125c fix: 串口获取档位 2025-06-20 15:27:22 +08:00
14 changed files with 367 additions and 385 deletions

View File

@ -402,6 +402,7 @@ export interface SYSSET {
}
export interface ProjectRoads {
param_3?: string[]
param_4?: string[]
@ -411,7 +412,7 @@ export interface ProjectRoads {
param_12?: string[]
}
interface MAPPOINT {
export interface MAPPOINT {
point_no: number,
gps_e: number,
gps_n: number,
@ -425,7 +426,7 @@ interface MAPPOINT {
passed: number
}
interface MAPITEMPOINTITEM {
export interface MAPITEMPOINTITEM {
point_no: number,
itemno: number,
itemno1: number,
@ -486,7 +487,7 @@ export interface JudgeUI {
defaultTabIndex: number
isDwztRight: boolean
draw: boolean
lane: JudgeLane
lane: LANE
sd: string
dw: string
}
@ -708,11 +709,6 @@ export interface JudgeSoundB {
type: 0 | 1
}
export interface JudgeLane {
road: string
num: number
count: number
}
export interface JudgeNonGPS {
type: 0 | 1 | 2 | 3 | 4
@ -780,7 +776,7 @@ export interface JudgeCallBackData {
xmqx: JudgeKSXM
sound: JudgeSound
mndg: string
lane: JudgeLane
lane: LANE
precast: JudgeKSXM
nongps: JudgeNonGPS
}
@ -833,3 +829,181 @@ export interface ProjectItemType {
code: ProjectDataType
status: string
}
export interface Project {
//项目名称
name: string
//项目代码
projectCode: string
//无锡所项目代码
projectCodeCenter: string
//项目简写
abbreviation?: string
//项目状态:未做 正在做 及格 不及格 有扣分
type?: '1' | '2' | '3' | '4' | '5'
//
isEnd: boolean,
isUpload: boolean
}
export interface KF {
//项目名称
xmmcStr: string,
xmdm: string | number,
//扣分描述
desc: string,
//扣分
score: string
//无锡所扣分代码
markcatalog: string
markserial: string
kfxh: string
type: 0 | 1 | 2
}
export interface SYSTEMPARMARROBJ {
'no1': number,
'no2': number,
'no3': number,
'txt1': string,
'txt2': string,
'txt3': string,
}
export interface EXAMDATA {
//1:项目开始 2:项目结束 3:扣分 4:考车状态 5:考试结束 6:项目取消 7:语音播放和提示 8:模拟灯光事件 9:车道信息事件 10:预进项目事件 11:差分事件
event: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
//时间
sj: number
//考车状态 -1:后退 0:停车 1:前进
carzt: -1 | 0 | 1
//项目开始
xmks: xmksType
//项目结束
xmjs: xmjsType
//扣分
kf: kfType
//考试结束
ksjs: ksjxType
//项目取消
xmqx: xmqxType
sound: soundType
//模拟灯光
mndg: string
lane: LANE
type: number
//预进项目
precast: precastType
nongps: nongpsType
}
interface xmksType {
//项目代码 项目子序号
xmdm: number,
xmxh: string
}
interface xmjsType {
//项目代码 项目子序号 项目是否合格
xmdm: number,
xmxh: string,
xmhg: 1 | 0
}
interface kfType {
//项目代码
xmdm: number,
//扣分代码
kfdm: string,
//无锡所扣分代码
markcatalog: string
// 0评判自动扣分 1本地人工扣分 2远程人工扣分
type: 0 | 1 | 2
}
interface ksjxType {
//前进距离
qjjl: number,
//倒车距离
dcjl: number,
d1: number
d2: number
d3: number
d4: number
d5: number
d6: number
}
interface xmqxType {
//项目代码 项目子序号
xmdm: number,
xmxh: string
}
interface soundType {
xmdm: number,
//语音播放文件代码
code: string,
type: number
}
interface precastType {
xmdm: number,
xmxh: string
}
interface nongpsType {
type: 0 | 1 | 2 | 3 | 4
}
export interface KSJS {
//0自动结束1手动结束
type: 0 | 1
qjjl: number,
dcjl: number,
d1: number,
d2: number,
d3: number,
d4: number,
d5: number,
d6: number,
}
export interface MAPPOINTITEM {}
export interface SOUND {
//项目代码
xmdm: number
//语音播放提示代码
code: string,
//0:普通1:模拟灯光
type: number
}
export interface LANE {
//当前路段号 如果road为空字符串””说明当前在未测绘得道路上或者不在差分状态
road: string
/*当前基准天线所在车道号
num等于0或者count等于0说明当前未在测绘路段或者不在差分状态。
num等于1的时候表示在最右侧车道
num等于count的时候的表示在最左侧车道
*/
num: number
//当前基准天线共有几股车道
count: number
}

View File

@ -10,14 +10,13 @@ import { defaultJudgeConfigObj } from './judgeSDK/utils//judgeCommon';
import { uploadExamMileage } from '../api/judge';
import DwztErrorPopup from './compontents/judge/DwztErrorPopup';
import MsgPopup from './compontents/judge/MsgPopup';
import { CARINFO, CDSBInfo, LANE, MAPITEMPOINTITEM, MAPPOINT, Project, SYSTEMPARMARR } from './judgeSDK/api/judgeSDK.d';
import { JudgeConfig } from '../config';
import SignDisplayCom from './compontents/SignDisplayCom';
import {
AmplifyItem,
CARINFO,
CarInfoType,
CDSBInfo,
CDSBInfos,
DefaultJudgeConfigObj,
ES_CARINFOType,
@ -25,20 +24,25 @@ import {
JudgeBeginObj,
JudgeCallBacData,
JudgeInitObj,
LANE,
MA_CDSBINFOType,
MA_ITEMINFOType,
MA_MAP_POINT_ITEMType,
MA_MAP_POINTType,
MA_SYSTEMPARMType,
MAPITEMPOINTITEM,
MAPPOINT,
MarkRule,
MarkRules,
MASYSSETTableType,
Project,
ProjectInfo,
ProjectInfos,
ProjectRoads,
RouteParamsType,
SYSSET,
SyssetConfig,
SYSTEMPARMARR,
User
} from '../model';
import { GetSyncData } from '../utils/table/Operation';
@ -60,8 +64,6 @@ struct Index {
@State endPopupVisible: boolean = false
//等待弹窗(考试及格,考试不及格使用)
@State loadingPopupVisible: boolean = false
//实时轨迹弹窗
@State signDisplayComVisible: boolean = false
@State isDdxk: boolean = false;
@State time: string = ''
//考试用时
@ -449,12 +451,12 @@ struct Index {
}
this.systemparmArr.push({
'NO1': Number(systemParm.no1),
'NO2': Number(systemParm.no2),
'NO3': Number(systemParm.no3),
'TXT1': decodeURIComponent(systemParm.txt1 || ""),
'TXT2': decodeURIComponent(systemParm.txt2 || ""),
'TXT3': decodeURIComponent(systemParm.txt3 || ""),
NO1: Number(systemParm.no1),
NO2: Number(systemParm.no2),
NO3: Number(systemParm.no3),
TXT1: decodeURIComponent(systemParm.txt1 || ""),
TXT2: decodeURIComponent(systemParm.txt2 || ""),
TXT3: decodeURIComponent(systemParm.txt3 || ""),
})
})
const projects = this.projects;
@ -946,7 +948,6 @@ struct Index {
// type: 1,
// name: 'button_media.wav'
// })
// this.signDisplayComVisible = true
this.signalTrajectoryDialog.open()
})
@ -1049,7 +1050,6 @@ struct Index {
//科目三人工扣分弹窗
if (this.isDeductedPopShow && this.examSubject == '3' && Reflect.get(this.judgeConfigObj, '342') == '0') {
DeductedPopup({
defaultTabIndex: this.defaultTabIndex,
// currentItems: Reflect.ownKeys(this.projectsObj).map(projectKey => {
@ -1076,31 +1076,6 @@ struct Index {
})
}
if (this.signDisplayComVisible) {
Column() {
SignDisplayCom({
showBack: false,
scaleNum: 1.8,
msgStr: this.judge.plcStr || '',
showTrajectory: this.singlePlay ? true : (this.syssetParam623),
}).margin({ top: 100 })
Row() {
}
.width(240)
.height(240)
.position({ x: '81%', y: 80 })
.backgroundImage($rawfile('judge/close.png'), ImageRepeat.NoRepeat)
.backgroundImageSize({ width: '33.33%', height: '33.33%' })
.onClick(() => {
// this.vocObj.playAudio({
// type: 1,
// name: 'button_media.wav'
// })
this.signDisplayComVisible = false
})
}.width('100%').height('100%').position({ y: 0 }).backgroundColor('rgba(0,0,0,0.6)')
}
//科目三人工项目确认框
if (this.isAmplifyPopShow && this.examSubject == '3') {
@ -1204,19 +1179,14 @@ struct Index {
switch (type) {
case '1':
return '#E6DECF';
break;
case '2':
return '#FFAD33';
break;
case '3':
return '#ff109d0a';
break;
case '4':
return '#FF7566';
break;
default:
return '#E6DECF';
break;
}
}

View File

@ -1,5 +1,5 @@
import libJudgeSdk from 'libjudgesdk.so';
import { JudgeBeginObj, JudgeInitObj, Plc } from '../../../model';
import { JudgeBeginObj, JudgeInitObj, Plc } from '../../model';
/**
* 苏仁君

View File

@ -1,15 +1,44 @@
import SignalDisplayComponent from '../compontents/SignalDisplay'
import TabComponent from '../compontents/Tab'
@CustomDialog
export default struct SignalTrajectoryDialog {
@State active: number = 0
private controller?: CustomDialogController
build() {
Row() {
SignalDisplayComponent()
}.width(1200).height(1200).border({
width: 1,
color: "red"
})
// Scroll() {
Column() {
Flex(
{
justifyContent: FlexAlign.SpaceBetween,
alignItems: ItemAlign.Center
}
) {
TabComponent({
isShowTrajectory: true,
activeIndex: this.active,
onchange: (index: number) => {
this.active = index
}
})
// 关闭按钮
Image($rawfile('judge/close.png')).height(50).onClick(() => {
this.controller?.close()
})
}
Scroll() {
Column() {
SignalDisplayComponent({
active: this.active
})
}.height(890)
}.width("100%")
.height(700)
}.width(1500)
// }.width(1200).height(900)
}
}

View File

@ -25,7 +25,6 @@ struct SignDisplayPage {
right: 10
})
TabComponent({
isShowTrajectory: true,
activeIndex: this.active,
onchange: (index: number) => {
this.active = index
@ -42,8 +41,7 @@ struct SignDisplayPage {
}.width("100%").height(100)
SignalDisplayComponent({
active: this.active,
isShowTrajectory: true
active: this.active
})
}
.width('100%')

View File

@ -1,8 +1,9 @@
import { GPSData, InitialPerLane, SignalData } from '../../mock'
import { EnvironmentConfigurationType, PerLane, RoadDataType, SignalDataType, WorkerBackMessage } from '../../model'
import apiJudgeSdk from 'libJudgeSdk.so'
import { examJudgeMapSetScaling } from '../judgeSDK/api'
import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker'
import { examJudgeMapSetScaling } from '../Judge/JudgeUtils'
@Component
@ -19,8 +20,6 @@ export default struct SignalDisplayComponent {
@State rawData: string = "$GPS,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
// 车道信息
@State laneSignal: PerLane = InitialPerLane
// 是否现实轨迹
@State isShowTrajectory: boolean = false
aboutToAppear(): void {
DifferentialAndSignal.onMsg((data: string) => {
@ -111,29 +110,27 @@ export default struct SignalDisplayComponent {
Text(this.rawData).fontSize(20).fontColor("#fff")
}.backgroundColor("#282828").width("100%").height("100%")
} else {
if (this.isShowTrajectory) {
// 轨迹查看
Flex() {
Column() {
CoordinateComponent({
isItHorizontal: false,
heightNum: 40,
data: this.GPSColum
})
}.width("20%")
// 轨迹查看
Flex() {
Column() {
CoordinateComponent({
isItHorizontal: false,
heightNum: 40,
data: this.GPSColum
})
}.width("20%")
Column() {
LaneComponent({
laneSignal: this.laneSignal
})
}.width("20%")
Column() {
LaneComponent({
laneSignal: this.laneSignal
})
}.width("20%")
Column() {
trajectoryComponent()
}.height("100%").width("60%")
Column() {
trajectoryComponent()
}.height("100%").width("60%")
}.backgroundColor("#282828").width("100%").height("100%")
}
}.backgroundColor("#282828").width("100%").height("100%")
}
}
.width("100%")

View File

@ -50,6 +50,7 @@ struct TabItemComponent {
topLeft: 20,
topRight: 20,
})
.backgroundColor("#262420")
.border({
width: { top: 1, left: 1, right: 1 },
color: this.active ? "#ECAD5C" : "#DDCBAC"

View File

@ -1,232 +0,0 @@
export interface Project {
//项目名称
name: string
//项目代码
projectCode: string
//无锡所项目代码
projectCodeCenter: string
//项目简写
abbreviation?: string
//项目状态:未做 正在做 及格 不及格 有扣分
type?: '1' | '2' | '3' | '4' | '5'
//
isEnd: boolean,
isUpload: boolean
}
export interface MarkRule {
itemno?: number
markcatalog?: string
markshow?: string
markserial?: string
markstandard?: number,
markreal?: number
kfxh?: string
onlyoneid?: number
OnlyOneKind?: number
nocancelid?: number
NoCancelId?: number
gps_sid?: number,
GPS_SID?: boolean
score?: number
xmmcStr?: string
desc?: string
xmdm?: number
type?: 0 | 1 | 2
}
export interface KF {
//项目名称
xmmcStr: string,
xmdm: string | number,
//扣分描述
desc: string,
//扣分
score: string
//无锡所扣分代码
markcatalog: string
markserial: string
kfxh: string
type: 0 | 1 | 2
}
export interface SYSTEMPARMARR {
'NO1': number,
'NO2': number,
'NO3': number,
'TXT1': string,
'TXT2': string,
'TXT3': string,
}
export interface SYSTEMPARMARROBJ {
'no1': number,
'no2': number,
'no3': number,
'txt1': string,
'txt2': string,
'txt3': string,
[k: string]: string | number
}
export interface CARINFO {
CARID: string,
IPADDR: string,
CARCLASS: string,
KSCX: string,
CARNAME: string,
FLAG: string,
BK1: string,
BK2: string
}
export interface MAPPOINT {
point_no: number,
gps_e: number,
gps_n: number,
point_no_f: number,
point_type: number,
road_code: string,
gps_e_Location: number
gps_n_Location: number
f_gps_e: number,
f_gps_n: number,
passed: number
}
export interface MAPITEMPOINTITEM {
point_no: number,
itemno: number,
itemno1: number,
subname: string
}
export interface EXAMDATA {
//1:项目开始 2:项目结束 3:扣分 4:考车状态 5:考试结束 6:项目取消 7:语音播放和提示 8:模拟灯光事件 9:车道信息事件 10:预进项目事件 11:差分事件
event: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
//时间
sj: number
//考车状态 -1:后退 0:停车 1:前进
carzt: -1 | 0 | 1
//项目开始
xmks: {
//项目代码 项目子序号
xmdm: number,
xmxh: string
}
//项目结束
xmjs: {
//项目代码 项目子序号 项目是否合格
xmdm: number,
xmxh: string,
xmhg: 1 | 0
},
//扣分
kf: {
//项目代码
xmdm: number,
//扣分代码
kfdm: string,
//无锡所扣分代码
markcatalog: string
// 0评判自动扣分 1本地人工扣分 2远程人工扣分
type: 0 | 1 | 2
},
//考试结束
ksjs: {
//前进距离
qjjl: number,
//倒车距离
dcjl: number,
d1: number
d2: number
d3: number
d4: number
d5: number
d6: number
},
//项目取消
xmqx: {
//项目代码 项目子序号
xmdm: number,
xmxh: string
},
sound: {
xmdm: number,
//语音播放文件代码
code: string,
type: number
},
//模拟灯光
mndg: string,
lane: LANE,
type: number
//预进项目
precast: {
xmdm: number,
xmxh: string
}
nongps: {
type: 0 | 1 | 2 | 3 | 4
}
}
export interface KSJS {
//0自动结束1手动结束
type: 0 | 1
qjjl: number,
dcjl: number,
d1: number,
d2: number,
d3: number,
d4: number,
d5: number,
d6: number,
}
export interface MAPPOINTITEM {}
export interface CDSBInfo {}
export interface SOUND {
//项目代码
xmdm: number
//语音播放提示代码
code: string,
//0:普通1:模拟灯光
type: number
}
export interface SYSSET {
v_no: string,
v_name: string,
v_value: string
}
export interface LANE {
//当前路段号 如果road为空字符串””说明当前在未测绘得道路上或者不在差分状态
road: string
/*线
num等于0或者count等于0说明当前未在测绘路段
num等于1的时候表示在最右侧车道
num等于count的时候的表示在最左侧车道
*/
num: number
//当前基准天线共有几股车道
count: number
}
export interface ProjectObj {
[k: string]: Project
}

View File

@ -3,33 +3,17 @@ import router from '@ohos.router';
import util from '@ohos.util';
import buffer from '@ohos.buffer';
import { testKm2Items, testKm3Items } from './dataTest/index';
import { KSJS } from './api/judgeSDK';
import VoiceAnnounce from './utils/voiceAnnouncements';
import FileModel from './utils/fileModel';
import FilePhoto from './utils/filePhoto';
import FileLog from './utils/fileLog';
import JudgeTask from './utils/judgeTask';
import { JudgeConfig } from '../../config';
import { LANE } from '../judgeSDK/api/judgeSDK.d';
import { GetSyncData, SqlInsertTable } from '../../utils/table/Operation';
import { getCarStatus, getCenterProjectStatus, plcStrToJson, plcStrToWXJson, promptWxCode } from './utils/judgeCommon';
import {
examCalcGpsDistance,
examJudgeArtificialItem,
examJudgeArtificialMark,
examJudgeBeginExam,
examJudgeEndExam,
examJudgeInit,
examJudgeRealExam,
examJudgeSetLogCallback,
examJudgeSetPerformCallback,
examJudgeSetRealExamCallback,
examJudgeSoundEnd,
examJudgeVersion
} from './api/index';
import { uploadExamProgressData, writeObjectOut } from '../../api/judge';
import { endRecordVideo, saveStartRecordVideo } from '../../utils/Video';
import common from '@ohos.app.ability.common';
@ -59,6 +43,7 @@ import {
JudgeXMJS,
Km3JudgeInitConfig,
KmItem,
LANE,
MarkRule,
Plc,
ProjectInfo,
@ -70,6 +55,20 @@ import {
WR
} from '../../model';
import { DrivingDataStorage } from '../../utils/business/DrivingDataStorage';
import {
examCalcGpsDistance,
examJudgeArtificialItem,
examJudgeArtificialMark,
examJudgeBeginExam,
examJudgeEndExam,
examJudgeInit,
examJudgeRealExam,
examJudgeSetLogCallback,
examJudgeSetPerformCallback,
examJudgeSetRealExamCallback,
examJudgeSoundEnd,
examJudgeVersion
} from '../Judge/JudgeUtils';
const judgeTag = 'SURENJUN_JUDGE'
@ -1192,7 +1191,7 @@ export default class Judge {
judgeTask.addTask(async () => {
console.info(judgeTag, '考试结束 start')
AppStorage.setOrCreate('isJudge', false)
await handEndExam(ksjs)
await handEndExam()
})
// TODO待修改
// clearInterval(globalThis.judgeTimer)
@ -1318,7 +1317,7 @@ export default class Judge {
}
}
// 处理考试结束
public handEndExam = async (ksjs: KSJS) => {
public handEndExam = async () => {
this.judgeUI.loadingPopupVisible = true;
this.judgeUI.endPopupVisible = false;
this.judgeUI.isDeductedPopShow = false;

View File

@ -4,7 +4,7 @@ import { ArrayToByteArray, NumberToByteArray } from '../../../utils/Common';
import systemTime from '@ohos.systemDateTime';
import { CarInfoType } from '../../../model';
import { DefaultJudgeConfigObj, Gps, JudgeLane, Plc, Radar, Vision } from '../../../model/Judge';
import { DefaultJudgeConfigObj, Gps, LANE, Plc, Radar, Vision } from '../../../model/Judge';
interface Extend {}
@ -98,7 +98,7 @@ export function getKmProjectVoice(
// 1:项目开始 2:项目结束
type: 1 | 2,
judgeConfig: object,
lane: JudgeLane,
lane: LANE,
xmxh: string
) {
const carInfo = AppStorage.get<CarInfoType>('carInfo')!;
@ -110,9 +110,8 @@ export function getKmProjectVoice(
console.info('surenjun => param544Str.length', param544Str.length)
const num = lane.num
const count = lane.count
const road = lane.road
const num: number = lane?.num
const count: number = lane?.count
if (examSubject == '2') {
return projectCode
}

View File

@ -1,43 +0,0 @@
import FileUtils from '../../../utils/FileUtils';
import { examJudgeMapSetParam, examJudgeMapSetScaling } from '../api/index';
import FileModel from './fileModel';
const judgeTag = 'SURENJUN_JUDGE'
export default class JudgeImg {
private judgeUI
private modelPath: string
private fileModel: FileModel
private fileUtil: FileUtils
// private plcData: any
constructor(judgeUI) {
this.modelPath = 'models/model_enc'
this.judgeUI = judgeUI
this.fileUtil = new FileUtils(judgeUI.context)
this.fileModel = new FileModel(judgeUI.context)
this.init()
}
async init() {
const isJudgeInitBool = AppStorage.get<boolean>('isJudgeInitBool');
const { judgeUI } = this;
//TODO 临时处理
setTimeout(async () => {
console.info(judgeTag, '1.进入评判入口')
await examJudgeMapSetParam(640, 480); //设置参数宽、高
await examJudgeMapSetScaling(100); //设置缩放比例一般默认填100就是100%的意思) 数字越大视野越大数字越小视野越小不能为0
})
judgeUI.draw = true
}
//获取评判初始化数据
getInitInfo = () => {
}
}

View File

@ -3,6 +3,9 @@ import HiSerialSDK from '@ohos.hiserialsdk';
import { SerialPortTag } from '../config';
// 打开串口工具
/*
* @param serialPort 串口名称
*/
export const OpenSerialPort = (serialPort: string) => {
return new Promise<number>((resolve, reject) => {
testNapi.SerialOpenAsync(serialPort, (value: number) => {
@ -17,6 +20,11 @@ export const OpenSerialPort = (serialPort: string) => {
}
//初始化串口数据
/*
* @param fd 串口文件描述符
* @param speed 波特率
* @returns Promise<boolean> 成功返回true失败返回false
*/
export const InitSerialPortData =
async (fd: number, speed: number) => {
return new Promise<boolean>((resolve, reject) => {
@ -35,6 +43,11 @@ export const InitSerialPortData =
}
//发送数据
/*
* @param fd 串口文件描述符
* @param data 要发送的数据数组
* @returns Promise<number> 成功返回发送的字节数,失败返回-1
*/
export const SendSerialPortData = (fd: number, data: number[]) => {
console.log(SerialPortTag, "wzj-----发送数据")
return new Promise<number>((resolve, reject) => {
@ -49,6 +62,11 @@ export const SendSerialPortData = (fd: number, data: number[]) => {
}
// 接受数据
/*
* @param fd 串口文件描述符
* @param timeout 超时时间,单位毫秒
* @returns Promise<HiSerialSDK.receiveInfo> 成功返回接收到的数据,失败返回-1
*/
export const ReceiveSerialPortData = (fd: number, timeout: number,) => {
console.log(SerialPortTag, "wzj-----接受数据")
return new Promise<HiSerialSDK.receiveInfo>((resolve) => {

View File

@ -16,8 +16,8 @@ import UdpClient from '../UdpUtils';
import { CenterUDPBusinessInstance } from './CenterUdpBusiness';
import { ObtainUdpBusinessInstance } from './ObtainUdpBusiness';
import systemTime from '@ohos.systemDateTime';
import { examCalcGpsDistance } from '../../pages/judgeSDK/api';
import { SerialNumberInstance } from '../SerialNumber';
import { examCalcGpsDistance } from '../../pages/Judge/JudgeUtils';
class JudgeUdpBusiness {

View File

@ -0,0 +1,72 @@
// 串口业务逻辑
import {
CancelReceiveSerialPortData,
InitSerialPortData,
OpenSerialPort,
ReceiveSerialPortDataBySelf
} from '../SerialPort';
import Prompt from '@system.prompt';
import { SerialPortTag } from '../../config';
class serialPortService {
private fd: number = -1
private serialPort: string = "/dev/ttyS3"
// 波特率
private baudRate: string = "115200"
private events: Array<Function> = []
// 尝试次数
private tryCount: number = 0
async init() {
const res = await OpenSerialPort(this.serialPort)
if (res === -1) {
Prompt.showToast({
message: "串口打开失败"
})
// 失败了重试,最大次数为5次
this.tryCount++;
if (this.tryCount < 5) {
console.log(SerialPortTag, "串口打开失败,尝试第", this.tryCount, "次重试")
setTimeout(() => {
this.init();
}, 1000);
return;
} else {
console.error(SerialPortTag, "串口打开失败,重试次数已达上限")
return;
}
} else {
this.fd = res;
}
}
async canInit() {
if (this.fd !== -1) {
await InitSerialPortData(this.fd, Number(this.baudRate))
ReceiveSerialPortDataBySelf(this.fd, (res1: number, res2: number, res3: number[]) => {
this.events.forEach((callback) => {
callback(res3);
});
})
}
}
onMsg(callback: Function) {
if (this.events.indexOf(callback) === -1) {
this.events.push(callback);
}
}
async closed() {
const res = await CancelReceiveSerialPortData(this.fd);
this.events = [];
if (res) {
console.log(SerialPortTag, "串口关闭成功")
} else {
console.error(SerialPortTag, "串口关闭失败")
}
}
}
export const SerialPortService = new serialPortService();