From 189cdf5293544ca7785c772fa8b13fbd7de02fc1 Mon Sep 17 00:00:00 2001 From: MaximZaitsev Date: Mon, 22 Aug 2016 14:52:35 +0300 Subject: [PATCH] make sonar request and response --- car_srv/kotlinSrv/src/Config.kt | 1 - car_srv/kotlinSrv/src/JSImport.kt | 134 +++++++++++------- car_srv/kotlinSrv/src/MCConnection.kt | 6 + car_srv/kotlinSrv/src/Main.kt | 2 + car_srv/kotlinSrv/src/control/Controller.kt | 3 +- .../src/control/car/ControllerToUsb.kt | 9 +- .../control/emulator/ControllerEmulator.kt | 7 +- .../net/server/handlers/main/GetSonarData.kt | 3 +- .../src/net/server/handlers/main/SetRoute.kt | 1 - 9 files changed, 105 insertions(+), 61 deletions(-) diff --git a/car_srv/kotlinSrv/src/Config.kt b/car_srv/kotlinSrv/src/Config.kt index 94e4ea20e8a..7c37549b827 100644 --- a/car_srv/kotlinSrv/src/Config.kt +++ b/car_srv/kotlinSrv/src/Config.kt @@ -14,7 +14,6 @@ class Config(val configFileName: String = "config.cfg") { } val data: String = fs.readFileSync(configFileName, "utf8") - println("reader $data") data.split("\n").forEach { line -> val keyValue = line.split(":") if (!line.equals("")) { diff --git a/car_srv/kotlinSrv/src/JSImport.kt b/car_srv/kotlinSrv/src/JSImport.kt index 44bf325d78d..2f742a675ad 100644 --- a/car_srv/kotlinSrv/src/JSImport.kt +++ b/car_srv/kotlinSrv/src/JSImport.kt @@ -7,59 +7,87 @@ fun setTimeout(callBack: () -> Unit, ms: Int): dynamic = noImpl fun encodeProtoBuf(protoMessage: T): ByteArray { val routeBytes: ByteArray println(protoMessage.toString()) - if (protoMessage is LocationResponse) { - val protoSize = protoMessage.getSizeNoTag() - routeBytes = ByteArray(protoSize) - val codedOutput = CodedOutputStream(routeBytes) - protoMessage.writeTo(codedOutput) - } else if (protoMessage is UploadResult) { - val protoSize = protoMessage.getSizeNoTag() - routeBytes = ByteArray(protoSize) - val codedOutput = CodedOutputStream(routeBytes) - protoMessage.writeTo(codedOutput) - } else if (protoMessage is DebugResponseMemoryStats) { - val protoSize = protoMessage.getSizeNoTag() - routeBytes = ByteArray(protoSize) - val codedOutput = CodedOutputStream(routeBytes) - protoMessage.writeTo(codedOutput) - } else if (protoMessage is DebugRequest) { - val protoSize = protoMessage.getSizeNoTag() - routeBytes = ByteArray(protoSize) - val codedOutput = CodedOutputStream(routeBytes) - protoMessage.writeTo(codedOutput) - } else if (protoMessage is DirectionResponse) { - val protoSize = protoMessage.getSizeNoTag() - routeBytes = ByteArray(protoSize) - val codedOutput = CodedOutputStream(routeBytes) - protoMessage.writeTo(codedOutput) - } else if (protoMessage is RouteResponse) { - val protoSize = protoMessage.getSizeNoTag() - routeBytes = ByteArray(protoSize) - val codedOutput = CodedOutputStream(routeBytes) - protoMessage.writeTo(codedOutput) - } else if (protoMessage is RouteRequest) { - val protoSize = protoMessage.getSizeNoTag() - routeBytes = ByteArray(protoSize) - val codedOutput = CodedOutputStream(routeBytes) - protoMessage.writeTo(codedOutput) - } else if (protoMessage is TaskRequest) { - val protoSize = protoMessage.getSizeNoTag() - routeBytes = ByteArray(protoSize) - val codedOutput = CodedOutputStream(routeBytes) - protoMessage.writeTo(codedOutput) - } else if (protoMessage is RouteDoneRequest) { - val protoSize = protoMessage.getSizeNoTag() - routeBytes = ByteArray(protoSize) - val codedOutput = CodedOutputStream(routeBytes) - protoMessage.writeTo(codedOutput) - } else if (protoMessage is SonarResponse) { - val protoSize = protoMessage.getSizeNoTag() - routeBytes = ByteArray(protoSize) - val codedOutput = CodedOutputStream(routeBytes) - protoMessage.writeTo(codedOutput) - } else { - println("PROTO MESSAGE DON'T ENCODE!") - routeBytes = ByteArray(0) + when (protoMessage) { + is LocationResponse -> { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } + is UploadResult -> { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } + is DebugResponseMemoryStats -> { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } + + is DebugRequest -> { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } + + is DirectionResponse -> { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } + + is RouteResponse -> { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } + + is RouteRequest -> { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } + + is TaskRequest -> { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } + + is RouteDoneRequest -> { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } + + is SonarResponse -> { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } + + is SonarRequest -> { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } + + else -> { + println("PROTO MESSAGE DON'T ENCODE!") + routeBytes = ByteArray(0) + } + } return routeBytes } \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/MCConnection.kt b/car_srv/kotlinSrv/src/MCConnection.kt index 3534f13b21b..21c4a86783a 100644 --- a/car_srv/kotlinSrv/src/MCConnection.kt +++ b/car_srv/kotlinSrv/src/MCConnection.kt @@ -24,6 +24,12 @@ class McTransport() : MCConnectObserver { sendBytes(encodeProtoBuf(message)) } + fun sendProtoBuf(message: SonarRequest) { + val typeMessage = getProtoBufTypeMessage(TaskRequest.Type.SONAR) + sendProtoBufType(typeMessage) + sendBytes(encodeProtoBuf(message)) + } + fun sendProtoBuf(message: RouteRequest) { val typeMessage = getProtoBufTypeMessage(TaskRequest.Type.ROUTE) sendProtoBufType(typeMessage) diff --git a/car_srv/kotlinSrv/src/Main.kt b/car_srv/kotlinSrv/src/Main.kt index f2f3fe6ccad..2f915fe4127 100644 --- a/car_srv/kotlinSrv/src/Main.kt +++ b/car_srv/kotlinSrv/src/Main.kt @@ -1,4 +1,5 @@ import control.car.ControllerToUsb +import control.emulator.ControllerEmulator import net.Client import net.server.handlers.AbstractHandler import net.server.handlers.debug.Memory @@ -21,6 +22,7 @@ fun main(args: Array) { val handlers: MutableMap = mutableMapOf() val carController = ControllerToUsb() + handlers.put("/rc/control", Control()) handlers.put("/loadBin", LoadBin()) handlers.put("/sonar", GetSonarData(carController)) diff --git a/car_srv/kotlinSrv/src/control/Controller.kt b/car_srv/kotlinSrv/src/control/Controller.kt index d0e3c22cf37..32120dbbd77 100644 --- a/car_srv/kotlinSrv/src/control/Controller.kt +++ b/car_srv/kotlinSrv/src/control/Controller.kt @@ -1,11 +1,12 @@ package control import RouteRequest +import SonarRequest interface Controller { fun executeRoute(route: RouteRequest, callBack: (ByteArray) -> Unit) - fun executeRequestSensorData(angles: IntArray, callBack: (ByteArray) -> Unit) + fun executeRequestSensorData(sonarRequest: SonarRequest, callBack: (ByteArray) -> Unit) } \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/control/car/ControllerToUsb.kt b/car_srv/kotlinSrv/src/control/car/ControllerToUsb.kt index db08536896b..507de2a6b23 100644 --- a/car_srv/kotlinSrv/src/control/car/ControllerToUsb.kt +++ b/car_srv/kotlinSrv/src/control/car/ControllerToUsb.kt @@ -3,6 +3,7 @@ package control.car import RouteRequest import control.Controller import mcTransport +import SonarRequest class ControllerToUsb : Controller { @@ -16,7 +17,11 @@ class ControllerToUsb : Controller { mcTransport.sendProtoBuf(route) } - override fun executeRequestSensorData(angles: IntArray, callBack: (ByteArray) -> Unit) { - //todo make after connect sensor to car + override fun executeRequestSensorData(sonarRequest: SonarRequest, callBack: (ByteArray) -> Unit) { + println("sonar data") + mcTransport.setCallBack { bytes -> + callBack.invoke(bytes) + } + mcTransport.sendProtoBuf(sonarRequest) } } \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/control/emulator/ControllerEmulator.kt b/car_srv/kotlinSrv/src/control/emulator/ControllerEmulator.kt index 9461ca36e58..b47fcc0e23a 100644 --- a/car_srv/kotlinSrv/src/control/emulator/ControllerEmulator.kt +++ b/car_srv/kotlinSrv/src/control/emulator/ControllerEmulator.kt @@ -10,6 +10,7 @@ import room.Data import room.Line import setTimeout import kotlin.Pair +import SonarRequest class ControllerEmulator : Controller { @@ -45,8 +46,9 @@ class ControllerEmulator : Controller { executeCommand(commands, 0, callBack) } - override fun executeRequestSensorData(angles: IntArray, callBack: (ByteArray) -> Unit) { + override fun executeRequestSensorData(sonarRequest: SonarRequest, callBack: (ByteArray) -> Unit) { + val angles = sonarRequest.angles val xSensor0 = CarState.instance.x val ySensor0 = CarState.instance.y val carAngle = CarState.instance.angle @@ -103,11 +105,12 @@ class ControllerEmulator : Controller { distance = currentDistance } } + println("dist " + distance.toString()) //Math.random() return double in [0,1) val delta = getRandomIntFrom(IntArray(5, { x -> x - 2 }))//return one of -2 -1 0 1 or 2 distances.add(distance + delta) } - val responseMessage = SonarResponse.BuilderSonarResponse(distances.toIntArray()) + val responseMessage = SonarResponse.BuilderSonarResponse(distances.toIntArray()).build() val bytesMessage = encodeProtoBuf(responseMessage) callBack.invoke(bytesMessage) } diff --git a/car_srv/kotlinSrv/src/net/server/handlers/main/GetSonarData.kt b/car_srv/kotlinSrv/src/net/server/handlers/main/GetSonarData.kt index be7ab54a247..8baecfc7e73 100644 --- a/car_srv/kotlinSrv/src/net/server/handlers/main/GetSonarData.kt +++ b/car_srv/kotlinSrv/src/net/server/handlers/main/GetSonarData.kt @@ -30,6 +30,7 @@ class GetSonarData : AbstractHandler { callback.invoke(encodeProtoBuf(responseMessage)) return } - controller.executeRequestSensorData(message.angles, callback) + println("sonar") + controller.executeRequestSensorData(message, callback) } } \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt b/car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt index c3b80a3f7b2..5d8cef5fc0a 100644 --- a/car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt +++ b/car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt @@ -31,5 +31,4 @@ class SetRoute : AbstractHandler { } controller.executeRoute(message, callback) } - } \ No newline at end of file