make sonar request and response

This commit is contained in:
MaximZaitsev
2016-08-22 14:52:35 +03:00
parent 627c8641ee
commit 189cdf5293
9 changed files with 105 additions and 61 deletions
-1
View File
@@ -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("")) {
+81 -53
View File
@@ -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
}
+6
View File
@@ -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)
+2
View File
@@ -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))
+2 -1
View File
@@ -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)
}
}