make sonar request and response
This commit is contained in:
@@ -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("")) {
|
||||
|
||||
@@ -7,59 +7,87 @@ fun setTimeout(callBack: () -> Unit, ms: Int): dynamic = noImpl
|
||||
fun <T> 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
|
||||
}
|
||||
@@ -24,6 +24,12 @@ class McTransport() : MCConnectObserver<String> {
|
||||
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)
|
||||
|
||||
@@ -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<String>) {
|
||||
val handlers: MutableMap<String, AbstractHandler> = mutableMapOf()
|
||||
|
||||
val carController = ControllerToUsb()
|
||||
|
||||
handlers.put("/rc/control", Control())
|
||||
handlers.put("/loadBin", LoadBin())
|
||||
handlers.put("/sonar", GetSonarData(carController))
|
||||
|
||||
@@ -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)
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ class GetSonarData : AbstractHandler {
|
||||
callback.invoke(encodeProtoBuf(responseMessage))
|
||||
return
|
||||
}
|
||||
controller.executeRequestSensorData(message.angles, callback)
|
||||
println("sonar")
|
||||
controller.executeRequestSensorData(message, callback)
|
||||
}
|
||||
}
|
||||
@@ -31,5 +31,4 @@ class SetRoute : AbstractHandler {
|
||||
}
|
||||
controller.executeRoute(message, callback)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user