Compare commits

..

No commits in common. "f604c1c8f2cf33de02b736f12732c128bf86b2b6" and "6ede5e69bb80fbca50bcce93e1afe947ccaf1ebf" have entirely different histories.

14 changed files with 385 additions and 367 deletions

View File

@ -402,7 +402,6 @@ export interface SYSSET {
}
export interface ProjectRoads {
param_3?: string[]
param_4?: string[]
@ -412,7 +411,7 @@ export interface ProjectRoads {
param_12?: string[]
}
export interface MAPPOINT {
interface MAPPOINT {
point_no: number,
gps_e: number,
gps_n: number,
@ -426,7 +425,7 @@ export interface MAPPOINT {
passed: number
}
export interface MAPITEMPOINTITEM {
interface MAPITEMPOINTITEM {
point_no: number,
itemno: number,
itemno1: number,
@ -487,7 +486,7 @@ export interface JudgeUI {
defaultTabIndex: number
isDwztRight: boolean
draw: boolean
lane: LANE
lane: JudgeLane
sd: string
dw: string
}
@ -709,6 +708,11 @@ export interface JudgeSoundB {
type: 0 | 1
}
export interface JudgeLane {
road: string
num: number
count: number
}
export interface JudgeNonGPS {
type: 0 | 1 | 2 | 3 | 4
@ -776,7 +780,7 @@ export interface JudgeCallBackData {
xmqx: JudgeKSXM
sound: JudgeSound
mndg: string
lane: LANE
lane: JudgeLane
precast: JudgeKSXM
nongps: JudgeNonGPS
}
@ -829,181 +833,3 @@ 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,13 +10,14 @@ 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,
@ -24,25 +25,20 @@ 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';
@ -64,6 +60,8 @@ struct Index {
@State endPopupVisible: boolean = false
//等待弹窗(考试及格,考试不及格使用)
@State loadingPopupVisible: boolean = false
//实时轨迹弹窗
@State signDisplayComVisible: boolean = false
@State isDdxk: boolean = false;
@State time: string = ''
//考试用时
@ -451,12 +449,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;
@ -948,6 +946,7 @@ struct Index {
// type: 1,
// name: 'button_media.wav'
// })
// this.signDisplayComVisible = true
this.signalTrajectoryDialog.open()
})
@ -1050,6 +1049,7 @@ 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,6 +1076,31 @@ 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') {
@ -1179,14 +1204,19 @@ 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,44 +1,15 @@
import SignalDisplayComponent from '../compontents/SignalDisplay'
import TabComponent from '../compontents/Tab'
@CustomDialog
export default struct SignalTrajectoryDialog {
@State active: number = 0
private controller?: CustomDialogController
build() {
// 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)
Row() {
SignalDisplayComponent()
}.width(1200).height(1200).border({
width: 1,
color: "red"
})
}
}

View File

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

View File

@ -1,9 +1,8 @@
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
@ -20,6 +19,8 @@ export default struct SignalDisplayComponent {
@State rawData: string = "$GPS,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
// 车道信息
@State laneSignal: PerLane = InitialPerLane
// 是否现实轨迹
@State isShowTrajectory: boolean = false
aboutToAppear(): void {
DifferentialAndSignal.onMsg((data: string) => {
@ -110,27 +111,29 @@ export default struct SignalDisplayComponent {
Text(this.rawData).fontSize(20).fontColor("#fff")
}.backgroundColor("#282828").width("100%").height("100%")
} else {
// 轨迹查看
Flex() {
Column() {
CoordinateComponent({
isItHorizontal: false,
heightNum: 40,
data: this.GPSColum
})
}.width("20%")
if (this.isShowTrajectory) {
// 轨迹查看
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,7 +50,6 @@ struct TabItemComponent {
topLeft: 20,
topRight: 20,
})
.backgroundColor("#262420")
.border({
width: { top: 1, left: 1, right: 1 },
color: this.active ? "#ECAD5C" : "#DDCBAC"

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

@ -0,0 +1,232 @@
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,17 +3,33 @@ 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';
@ -43,7 +59,6 @@ import {
JudgeXMJS,
Km3JudgeInitConfig,
KmItem,
LANE,
MarkRule,
Plc,
ProjectInfo,
@ -55,20 +70,6 @@ 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'
@ -1191,7 +1192,7 @@ export default class Judge {
judgeTask.addTask(async () => {
console.info(judgeTag, '考试结束 start')
AppStorage.setOrCreate('isJudge', false)
await handEndExam()
await handEndExam(ksjs)
})
// TODO待修改
// clearInterval(globalThis.judgeTimer)
@ -1317,7 +1318,7 @@ export default class Judge {
}
}
// 处理考试结束
public handEndExam = async () => {
public handEndExam = async (ksjs: KSJS) => {
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, LANE, Plc, Radar, Vision } from '../../../model/Judge';
import { DefaultJudgeConfigObj, Gps, JudgeLane, Plc, Radar, Vision } from '../../../model/Judge';
interface Extend {}
@ -98,7 +98,7 @@ export function getKmProjectVoice(
// 1:项目开始 2:项目结束
type: 1 | 2,
judgeConfig: object,
lane: LANE,
lane: JudgeLane,
xmxh: string
) {
const carInfo = AppStorage.get<CarInfoType>('carInfo')!;
@ -110,8 +110,9 @@ export function getKmProjectVoice(
console.info('surenjun => param544Str.length', param544Str.length)
const num: number = lane?.num
const count: number = lane?.count
const num = lane.num
const count = lane.count
const road = lane.road
if (examSubject == '2') {
return projectCode
}

View File

@ -0,0 +1,43 @@
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,9 +3,6 @@ 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) => {
@ -20,11 +17,6 @@ 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) => {
@ -43,11 +35,6 @@ 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) => {
@ -62,11 +49,6 @@ 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

@ -1,72 +0,0 @@
// 串口业务逻辑
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();