diff --git a/entry/build-profile.json5 b/entry/build-profile.json5 index 40ce1cd..2581189 100644 --- a/entry/build-profile.json5 +++ b/entry/build-profile.json5 @@ -3,7 +3,8 @@ "buildOption": { sourceOption: { "workers": [ - './src/main/ets/workers/DifferentialCorrection.ets' + './src/main/ets/workers/DifferentialCorrection.ets', + './src/main/ets/workers/Log.ets' ] } }, diff --git a/entry/src/main/ets/model/Common.ets b/entry/src/main/ets/model/Common.ets index 434cc27..f2ee943 100644 --- a/entry/src/main/ets/model/Common.ets +++ b/entry/src/main/ets/model/Common.ets @@ -143,6 +143,12 @@ export interface EnvironmentConfigurationType { centerIp?: string, centerPort?: string, terType?: string + // 几代机1 | 2 | 3 | 4 + rearMachineModel?: string + // 是否开启日志 + isOpenLog?: string + // 板卡类型 1|2 + boardType?: string } //全局配置 @@ -194,4 +200,5 @@ interface FourInOneScreenType { gpsDigit: number } -interface SystemParamConfigType {} \ No newline at end of file +interface SystemParamConfigType {} + diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 4c93fe9..105c612 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -17,7 +17,7 @@ import CardComponent from './Index/Card'; import BottomMessageComponent from './Index/BottomMessage'; import LoadingComponent from './Index/Loading'; import Prompt from '@system.prompt'; -import { DifferentialAndSignal } from '../utils/business/DifferentialAndSignal'; +import { DifferentialAndSignal } from '../utils/business/DifferentialAndSignalWorker'; @Entry diff --git a/entry/src/main/ets/pages/Settings.ets b/entry/src/main/ets/pages/Settings.ets index 76e6d86..53e7ef6 100644 --- a/entry/src/main/ets/pages/Settings.ets +++ b/entry/src/main/ets/pages/Settings.ets @@ -41,7 +41,7 @@ struct Index { // type: 1, // name: 'button_media.wav' // }) - this.url = 'pages/TerminalInfos' + this.url = 'pages/TerminalInfo' router.pushUrl({ url: this.url, }, router.RouterMode.Single); diff --git a/entry/src/main/ets/pages/TerminalInfo.ets b/entry/src/main/ets/pages/TerminalInfo.ets new file mode 100644 index 0000000..886c0c5 --- /dev/null +++ b/entry/src/main/ets/pages/TerminalInfo.ets @@ -0,0 +1,291 @@ +import HeaderComponent from './compontents/Header'; +import { EnvironmentConfigurationType } from '../model'; +import common from '@ohos.app.ability.common'; +import FileUtils from '../utils/FileUtils'; +import { GlobalConfig } from '../config'; +import ethernet from '@ohos.net.ethernet'; +import { BusinessError } from '@ohos.base'; +import Prompt from '@system.prompt'; + +@Entry +@Component +struct TerminalInfoPage { + @State config: EnvironmentConfigurationType = {} + private fileUtil!: FileUtils + private context = getContext(this) as common.UIAbilityContext; + + async aboutToAppear() { + this.fileUtil = new FileUtils(this.context) + const data = await this.fileUtil.readFile(GlobalConfig.commonFileWriteAddress + '/config/ipConfig.txt'); + console.log("data", data) + if (data) { + this.config = JSON.parse(data) + AppStorage.setOrCreate("EnvironmentConfiguration", this.config) + } + } + + build() { + Flex({ + justifyContent: FlexAlign.Center, + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + }) { + HeaderComponent({ + shortLogo: true, + shouBackArea: true + }) + // TODO + // 差分是否开启 + // 车型 + // 大车需要UDP两个端口 + Column() { + Column() { + Flex({ + wrap: FlexWrap.Wrap, + }) { + blockComponent({ + value: this.config.tcpOppositeIp, + change: (value: string) => { + this.config.tcpOppositeIp = value; + } + }) + blockComponent({ + label: "响应端口", + value: this.config.tcpOppositePort, + change: (value: string) => { + this.config.tcpOppositePort = value; + } + }) + blockComponent({ + label: "中心服务器IP", + value: this.config.centerIp, + change: (value: string) => { + this.config.centerIp = value; + } + }) + blockComponent({ + label: "响应端口", + value: this.config.centerPort, + change: (value: string) => { + this.config.centerPort = value; + } + }) + blockComponent({ + label: "后置机IP", + value: this.config.udpOppositeIp, + change: (value: string) => { + this.config.udpOppositeIp = value; + } + }) + blockComponent({ + label: "响应端口", + value: this.config.udpOppositeIpPort, + change: (value: string) => { + this.config.udpOppositeIpPort = value; + } + }) + blockComponent({ + label: "前置机IP", + value: this.config.udplocalIp, + change: (value: string) => { + this.config.udplocalIp = value; + this.config.tcplocalIp = value + } + }) + blockComponent({ + label: "后置机UDP本地端口", + value: this.config.udplocalIpPort, + change: (value: string) => { + this.config.udplocalIpPort = value; + } + }) + // blockComponent({ + // label: "TCP本地端口", + // value: this.config.tcplocalIpPort, + // change: (value: string) => { + // this.config.tcplocalIpPort = value; + // } + // }) + blockComponent({ + label: "子网掩码", + value: this.config.netMask, + change: (value: string) => { + this.config.netMask = value; + } + }) + blockComponent({ + label: "默认网关", + value: this.config.gateway, + change: (value: string) => { + this.config.gateway = value; + } + }) + blockComponent({ + label: "DNS", + value: this.config.dnsServers, + change: (value: string) => { + this.config.dnsServers = value; + } + }) + blockComponent({ + label: "后置机类型", + type: 1, + value: (Number(this.config.rearMachineModel) - 1).toString(), + change: (value: string) => { + this.config.rearMachineModel = (Number(value) + 1).toString(); + } + }) + blockComponent({ + label: "是否开启日志", + type: 2, + value: this.config.isOpenLog, + change: (value: string) => { + this.config.isOpenLog = value; + } + }) + blockComponent({ + label: "板卡类型", + type: 3, + value: (Number(this.config.boardType) - 1).toString(), + change: (value: string) => { + this.config.boardType = (Number(value) + 1).toString(); + } + }) + } + .backgroundColor("#282828") + .height(500) + .borderRadius(20) + .margin(20) + .padding({ + top: 10 + }) + + Row() { + Image($r('app.media.bc')).height(80).objectFit(ImageFit.Contain).onClick(() => { + console.log("保存配置", JSON.stringify(this.config)) + AppStorage.setOrCreate("EnvironmentConfiguration", this.config) + this.fileUtil.addFile(GlobalConfig.commonFileWriteAddress + '/config/ipConfig.txt', JSON.stringify(this.config)) + ethernet.setIfaceConfig("eth0", { + mode: ethernet.IPSetMode.STATIC, + ipAddr: this.config.udplocalIp, + route: "0.0.0.0", + gateway: this.config.gateway, //value.gateway网关 + netMask: this.config.netMask, //value.netMask网络掩码 + dnsServers: this.config.dnsServers, + domain: "" + }, (error: BusinessError) => { + if (error) { + Prompt.showToast({ + message: '设置失败' + JSON.stringify(error), + duration: 3000 + }); + } else { + Prompt.showToast({ + message: '设置成功', + duration: 3000 + }); + } + }); + }) + } + .width("100%") + .height(120) + .backgroundColor("#CAC4B8") + .justifyContent(FlexAlign.Center) + .alignItems(VerticalAlign.Center) + .borderRadius({ + bottomLeft: 20, + bottomRight: 20 + }) + } + .width(1500) + .height(660) + .backgroundColor("#fff") + .borderRadius(20) + } + .width("100%") + .height("100%") + .alignItems(HorizontalAlign.Center) + .justifyContent(FlexAlign.Center) + }.width("100%") + .height("100%") + .backgroundImage($r('app.media.index_bg')) + .backgroundImageSize({ + width: "100%", + height: "100%" + }) + } +} + +@Component +struct blockComponent { + @State label: string = "差分服务器IP" + @Prop value: string + change?: (value: string) => void + // 0 -输入框,1 -后置机类型,2 -日志开关,3 -板卡类型 + @State type: number = 0 + // '一型机', '二型机', '三型机', '一体机' + @State rearMachineModelList: string[] = ['一型机', '二型机', '三型机', '一体机'] + @State boardList: string[] = ['北云', '天宝MB2'] + @State logList: string[] = ['关', '开'] + + build() { + Row() { + Row() { + Text(this.label + ":").fontSize(20).fontColor("#E5CBA1") + }.width("40%").padding({ + left: 15 + }) + + Row() { + // 输入框 + if (this.type === 0) { + TextInput({ + text: this.value, + }) + .type(InputType.Normal) + .borderRadius(0) + .fontSize(20) + .height(50) + .backgroundColor("#4C473E") + .fontColor("#FFF5E5") + .border({ + width: 1, + color: "#E6E0D8" + }) + .margin({ left: 15, right: 15 }) + .onChange((value) => { + this.value = value; + this.change?.(value); + }) + } else { + ForEach(this.type === 1 ? this.rearMachineModelList : + this.type === 2 ? this.logList : + this.boardList, (item: string, index) => { + Radio({ value: item, group: 'terRadioGroup' + this.type }) + .borderColor('#E5CBA1') + .checked(index.toString() === this.value ? true : false) + .onChange((value: boolean) => { + if (value) { + this.value = index.toString(); + this.change?.(index.toString()); + } + }) + Text(item).fontSize(20).fontColor('#FFF') + }) + } + + }.width("60%").padding({ + right: 15 + }) + } + .width("50%") + .height(50) + .justifyContent(FlexAlign.Center) + .alignItems(VerticalAlign.Center) + .margin({ + top: 10, + bottom: 10 + }) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/TerminalInfos.ets b/entry/src/main/ets/pages/TerminalInfos.ets deleted file mode 100644 index e1b7265..0000000 --- a/entry/src/main/ets/pages/TerminalInfos.ets +++ /dev/null @@ -1,186 +0,0 @@ -import TopLogo from './compontents/TopLogo'; -import ethernet from '@ohos.net.ethernet'; - -import common from '@ohos.app.ability.common'; -import { GlobalConfig } from '../config'; -import Prompt from '@system.prompt'; -import FileUtils from '../utils/FileUtils'; -import { EnvironmentConfigurationType } from '../model/Common'; -import { BusinessError } from '@ohos.base'; - - -@Entry -@Component -struct Index { - @State textList1: string[] = - ['差分服务器Ip', '响应端口', '中心服务器IP', '响应端口', '子网掩码', '默认网关', 'dns', '后置机IP ', '响应端口', - '前置机IP', '本地端口'] - @State ratio: number = 1700 / 960 - @State inputFontSize: number = 12 - @State inputTextList1: string[] = - ['172.37.55.191', '18782', '172.37.55.191', '8082', '255.255.255.0', '192.168.7.1', '114.114.114.114', - '192.168.7.124', '20022', '192.168.7.170', '20122'] - @State @Watch('outClick') outFlag: boolean = false; - scroller: Scroller = new Scroller() - private fileUtil!: FileUtils - private context = getContext(this) as common.UIAbilityContext; - - build() { - Column() { - TopLogo({ outFlag: $outFlag }) - Column() { - Column() { - Scroll(this.scroller) { - Flex({ 'wrap': FlexWrap.Wrap }) { - ForEach(this.textList1, (item: string, index: number) => { - Row() { - Text(item) - .width('40%') - .height('100%') - .fontColor('#E5CBA1') - .padding({ 'left': '35px' }) - .fontSize(this.inputFontSize * this.ratio) - TextInput({ text: this.inputTextList1[index] ? this.inputTextList1[index] : '' }) - .width('50%') - .height('60%') - .fontColor('#fff') - .borderColor('#E6E0D8') - .borderRadius('10px') - .borderWidth('2px') - .defaultFocus(false) - .fontSize(this.inputFontSize * this.ratio) - .padding({ top: 0, bottom: 0 }) - .linearGradient({ - angle: 0, - colors: [[0x403C36, 0.0], [0x4D473D, 0.34], [0x3D3A34, 1.0]] - }) - .onChange((value: string) => { - this.inputTextList1[index] = value - - }) - } - .width('50%') - .height('16.7%') - }) - - } - } - .width('95%') - .height('90%') - .margin({ 'top': '2%' }) - .backgroundColor('#282828') - .borderRadius('15px') - } - .width('100%') - .height('80%') - .borderRadius('25px') - - Column() { - Image($r('app.media.terminal_save')).width('20.5%').height('74%').onClick(async () => { - const folderPath = await this.fileUtil.initFolder(`/config`); - const param: EnvironmentConfigurationType = { - udplocalIp: this.inputTextList1[9], - udplocalIpPort: this.inputTextList1[10], - udpOppositeIp: this.inputTextList1[7], - udpOppositeIpPort: this.inputTextList1[8], - tcplocalIp: this.inputTextList1[9], - tcplocalIpPort: '8088', - tcpOppositeIp: this.inputTextList1[0], - tcpOppositePort: this.inputTextList1[1], - netMask: this.inputTextList1[4], - gateway: this.inputTextList1[5], - dnsServers: this.inputTextList1[6], - centerIp: this.inputTextList1[2], - centerPort: this.inputTextList1[3] - } - console.log("保存参数", JSON.stringify(param)) - this.fileUtil.addFile(`${folderPath}/ipConfig.txt`, JSON.stringify(param)) - AppStorage.setOrCreate("EnvironmentConfiguration", param) - const host = `http://${param.centerIp}:${param.centerPort}` - console.log("中心host", host) - AppStorage.setOrCreate("host", host) - ethernet.setIfaceConfig("eth0", { - mode: ethernet.IPSetMode.STATIC, - ipAddr: this.inputTextList1[9], - route: "0.0.0.0", - gateway: this.inputTextList1[5], //value.gateway网关 - netMask: this.inputTextList1[4], //value.netMask网络掩码 - dnsServers: this.inputTextList1[6], - domain: "" - }, (error: BusinessError) => { - if (error) { - Prompt.showToast({ - message: '设置失败' + JSON.stringify(error), - duration: 3000 - }); - } else { - Prompt.showToast({ - message: '设置成功', - duration: 3000 - }); - } - }); - - }) - } - .backgroundColor('#CCC4B8') - .width('100%') - .height('20%') - .borderRadius({ 'bottomLeft': '25px', 'bottomRight': '25px' }) - .justifyContent(FlexAlign.SpaceAround) - } - .width('75%') - .height('69.4%') - .backgroundColor('#E6E3DF') - .borderRadius('25px') - .margin({ 'top': '7%' }) - .justifyContent(FlexAlign.SpaceAround) - - } - .width('100%') - .height('100%') - .backgroundImagePosition({ x: 0, y: 0 }) - .backgroundImage($r('app.media.index_bg')) - .backgroundImageSize({ width: '100%', height: '100%' }) - } - - async aboutToAppear() { - this.fileUtil = new FileUtils(this.context) - const data = await this.fileUtil.readFile(GlobalConfig.commonFileWriteAddress + '/config/ipConfig.txt'); - if (data === '' || data === undefined) { - } else { - const result: EnvironmentConfigurationType = JSON.parse(data) - AppStorage.setOrCreate("EnvironmentConfiguration", result) - this.inputTextList1[9] = result.udplocalIp ?? '' - this.inputTextList1[10] = result.udplocalIpPort ?? '' - this.inputTextList1[7] = result.udpOppositeIp ?? '' - this.inputTextList1[8] = result.udpOppositeIpPort ?? '' - this.inputTextList1[0] = result.tcpOppositeIp ?? '' - this.inputTextList1[1] = result.tcpOppositePort ?? '' - this.inputTextList1[5] = result.gateway ?? '' - this.inputTextList1[4] = result.netMask ?? '' - this.inputTextList1[6] = result.dnsServers ?? '' - this.inputTextList1[2] = result.centerIp ?? '' - this.inputTextList1[3] = result.centerPort ?? '' - } - - ethernet.getIfaceConfig("eth0").then(value => { - console.log("boot_up getIp_new callback ipAddr = " + JSON.stringify(value.ipAddr)); // - console.log(" boot_up getIp_new callback mode = " + JSON.stringify(value.mode)); - console.log("boot_up getIp_new callback route = " + JSON.stringify(value.route)); - console.log("boot_up getIp_new callback gateway = " + JSON.stringify(value.gateway)); - console.log("boot_up getIp_new callback netMask = " + JSON.stringify(value.netMask)); - console.log("boot_up getIp_new callback dnsServers = " + JSON.stringify(value.dnsServers)); - }).catch((error: BusinessError) => { - console.log("boot_up getIp_new callback error = " + JSON.stringify(error)); - }) - } - - onPageShow() { - console.info('Index onPageShow'); - } - - outClick() { - - } -} \ No newline at end of file diff --git a/entry/src/main/ets/pages/compontents/SignDisplayCom.ets b/entry/src/main/ets/pages/compontents/SignDisplayCom.ets index f0aecb2..f35fd35 100644 --- a/entry/src/main/ets/pages/compontents/SignDisplayCom.ets +++ b/entry/src/main/ets/pages/compontents/SignDisplayCom.ets @@ -3,7 +3,8 @@ import RealTime from '../compontents/judge/RealTime'; import { GPSData, SignalData } from '../../mock'; import { SignalDataType, WorkerBackMessage } from '../../model'; import { ObtainUdpBusinessInstance } from '../../utils/business/ObtainUdpBusiness'; -import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignal'; +import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker'; + @Component export default struct SignDisplayCom { diff --git a/entry/src/main/ets/pages/compontents/SignalDisplay.ets b/entry/src/main/ets/pages/compontents/SignalDisplay.ets index fe364c4..7fa99d5 100644 --- a/entry/src/main/ets/pages/compontents/SignalDisplay.ets +++ b/entry/src/main/ets/pages/compontents/SignalDisplay.ets @@ -1,9 +1,9 @@ import router from '@ohos.router' import { GPSData, InitialPerLane, SignalData } from '../../mock' import { EnvironmentConfigurationType, PerLane, RoadDataType, SignalDataType, WorkerBackMessage } from '../../model' -import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignal' import apiJudgeSdk from 'libJudgeSdk.so' import { examJudgeMapSetScaling } from '../judgeSDK/api' +import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker' @Component diff --git a/entry/src/main/ets/utils/TcpUtils.ets b/entry/src/main/ets/utils/TcpUtils.ets index a1e091e..9ca38ba 100644 --- a/entry/src/main/ets/utils/TcpUtils.ets +++ b/entry/src/main/ets/utils/TcpUtils.ets @@ -79,6 +79,8 @@ export default class TcpClient { this.tcp.on("message", value => { let data = new DataView(value.message) this.events.forEach(cb => { + // TODO + // 一体机不需要截取 cb(value.message.slice(5, data.byteLength)) }) }) diff --git a/entry/src/main/ets/utils/business/DifferentialAndSignal.ets b/entry/src/main/ets/utils/business/DifferentialAndSignalWorker.ets similarity index 100% rename from entry/src/main/ets/utils/business/DifferentialAndSignal.ets rename to entry/src/main/ets/utils/business/DifferentialAndSignalWorker.ets diff --git a/entry/src/main/ets/utils/business/LogWorker.ets b/entry/src/main/ets/utils/business/LogWorker.ets new file mode 100644 index 0000000..2580233 --- /dev/null +++ b/entry/src/main/ets/utils/business/LogWorker.ets @@ -0,0 +1,23 @@ +class logWorker { + // 正常日志 + log(msg: string) { + console.log(msg) + } + + // 信息日志 + info(msg: string) { + console.info(msg) + } + + // 调试日志 + warn(msg: string) { + console.warn(msg) + } + + // 错误日志 + error(msg: string) { + console.error(msg) + } +} + +export const dConsole = new logWorker(); \ No newline at end of file diff --git a/entry/src/main/ets/workers/DifferentialCorrection.ets b/entry/src/main/ets/workers/DifferentialCorrection.ets index 5025618..3d5cefd 100644 --- a/entry/src/main/ets/workers/DifferentialCorrection.ets +++ b/entry/src/main/ets/workers/DifferentialCorrection.ets @@ -39,7 +39,6 @@ function initFn(result: WorkerMessage) { CenterUDPBusinessInstance.startHeartBeat() // 初始化考试过程UDP // JudgeUdpBusinessInstance.init(result.config, result.carInfo, result?.singlePlay || false, result.otherMessage.lsh) - } function getDataFn() { @@ -47,7 +46,7 @@ function getDataFn() { DifferentialSignal.getData((data: ArrayBuffer) => { console.log(WorkerTag, "Received differential signal data:", data.byteLength, "bytes") // TCP拿到差分改正数发给后置机 - // ObtainUdpBusinessInstance.sendData(data) + ObtainUdpBusinessInstance.sendData(data) }) // 后置机回执PLC和GPS ObtainUdpBusinessInstance.onMsg((data: string) => { diff --git a/entry/src/main/ets/workers/Log.ets b/entry/src/main/ets/workers/Log.ets new file mode 100644 index 0000000..e0350dc --- /dev/null +++ b/entry/src/main/ets/workers/Log.ets @@ -0,0 +1,30 @@ +import worker, { ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@ohos.worker'; + +const workerPort: ThreadWorkerGlobalScope = worker.workerPort; + +/** + * Defines the event handler to be called when the worker thread receives a message sent by the host thread. + * The event handler is executed in the worker thread. + * + * @param e message data + */ +workerPort.onmessage = (e: MessageEvents) => { +} + +/** + * Defines the event handler to be called when the worker receives a message that cannot be deserialized. + * The event handler is executed in the worker thread. + * + * @param e message data + */ +workerPort.onmessageerror = (e: MessageEvents) => { +} + +/** + * Defines the event handler to be called when an exception occurs during worker execution. + * The event handler is executed in the worker thread. + * + * @param e error message + */ +workerPort.onerror = (e: ErrorEvent) => { +} \ No newline at end of file diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json index b641324..a4efa85 100644 --- a/entry/src/main/resources/base/profile/main_pages.json +++ b/entry/src/main/resources/base/profile/main_pages.json @@ -6,7 +6,7 @@ "pages/UserInfo", "pages/Register", "pages/Settings", - "pages/TerminalInfos", + "pages/TerminalInfo", "pages/VideoConfig", "pages/SignDisplay", "pages/Roads",