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") val data: String = fs.readFileSync(configFileName, "utf8")
println("reader $data")
data.split("\n").forEach { line -> data.split("\n").forEach { line ->
val keyValue = line.split(":") val keyValue = line.split(":")
if (!line.equals("")) { 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 { fun <T> encodeProtoBuf(protoMessage: T): ByteArray {
val routeBytes: ByteArray val routeBytes: ByteArray
println(protoMessage.toString()) println(protoMessage.toString())
if (protoMessage is LocationResponse) { when (protoMessage) {
val protoSize = protoMessage.getSizeNoTag() is LocationResponse -> {
routeBytes = ByteArray(protoSize) val protoSize = protoMessage.getSizeNoTag()
val codedOutput = CodedOutputStream(routeBytes) routeBytes = ByteArray(protoSize)
protoMessage.writeTo(codedOutput) val codedOutput = CodedOutputStream(routeBytes)
} else if (protoMessage is UploadResult) { protoMessage.writeTo(codedOutput)
val protoSize = protoMessage.getSizeNoTag() }
routeBytes = ByteArray(protoSize) is UploadResult -> {
val codedOutput = CodedOutputStream(routeBytes) val protoSize = protoMessage.getSizeNoTag()
protoMessage.writeTo(codedOutput) routeBytes = ByteArray(protoSize)
} else if (protoMessage is DebugResponseMemoryStats) { val codedOutput = CodedOutputStream(routeBytes)
val protoSize = protoMessage.getSizeNoTag() protoMessage.writeTo(codedOutput)
routeBytes = ByteArray(protoSize) }
val codedOutput = CodedOutputStream(routeBytes) is DebugResponseMemoryStats -> {
protoMessage.writeTo(codedOutput) val protoSize = protoMessage.getSizeNoTag()
} else if (protoMessage is DebugRequest) { routeBytes = ByteArray(protoSize)
val protoSize = protoMessage.getSizeNoTag() val codedOutput = CodedOutputStream(routeBytes)
routeBytes = ByteArray(protoSize) protoMessage.writeTo(codedOutput)
val codedOutput = CodedOutputStream(routeBytes) }
protoMessage.writeTo(codedOutput)
} else if (protoMessage is DirectionResponse) { is DebugRequest -> {
val protoSize = protoMessage.getSizeNoTag() val protoSize = protoMessage.getSizeNoTag()
routeBytes = ByteArray(protoSize) routeBytes = ByteArray(protoSize)
val codedOutput = CodedOutputStream(routeBytes) val codedOutput = CodedOutputStream(routeBytes)
protoMessage.writeTo(codedOutput) protoMessage.writeTo(codedOutput)
} else if (protoMessage is RouteResponse) { }
val protoSize = protoMessage.getSizeNoTag()
routeBytes = ByteArray(protoSize) is DirectionResponse -> {
val codedOutput = CodedOutputStream(routeBytes) val protoSize = protoMessage.getSizeNoTag()
protoMessage.writeTo(codedOutput) routeBytes = ByteArray(protoSize)
} else if (protoMessage is RouteRequest) { val codedOutput = CodedOutputStream(routeBytes)
val protoSize = protoMessage.getSizeNoTag() protoMessage.writeTo(codedOutput)
routeBytes = ByteArray(protoSize) }
val codedOutput = CodedOutputStream(routeBytes)
protoMessage.writeTo(codedOutput) is RouteResponse -> {
} else if (protoMessage is TaskRequest) { val protoSize = protoMessage.getSizeNoTag()
val protoSize = protoMessage.getSizeNoTag() routeBytes = ByteArray(protoSize)
routeBytes = ByteArray(protoSize) val codedOutput = CodedOutputStream(routeBytes)
val codedOutput = CodedOutputStream(routeBytes) protoMessage.writeTo(codedOutput)
protoMessage.writeTo(codedOutput) }
} else if (protoMessage is RouteDoneRequest) {
val protoSize = protoMessage.getSizeNoTag() is RouteRequest -> {
routeBytes = ByteArray(protoSize) val protoSize = protoMessage.getSizeNoTag()
val codedOutput = CodedOutputStream(routeBytes) routeBytes = ByteArray(protoSize)
protoMessage.writeTo(codedOutput) val codedOutput = CodedOutputStream(routeBytes)
} else if (protoMessage is SonarResponse) { protoMessage.writeTo(codedOutput)
val protoSize = protoMessage.getSizeNoTag() }
routeBytes = ByteArray(protoSize)
val codedOutput = CodedOutputStream(routeBytes) is TaskRequest -> {
protoMessage.writeTo(codedOutput) val protoSize = protoMessage.getSizeNoTag()
} else { routeBytes = ByteArray(protoSize)
println("PROTO MESSAGE DON'T ENCODE!") val codedOutput = CodedOutputStream(routeBytes)
routeBytes = ByteArray(0) 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 return routeBytes
} }
+6
View File
@@ -24,6 +24,12 @@ class McTransport() : MCConnectObserver<String> {
sendBytes(encodeProtoBuf(message)) sendBytes(encodeProtoBuf(message))
} }
fun sendProtoBuf(message: SonarRequest) {
val typeMessage = getProtoBufTypeMessage(TaskRequest.Type.SONAR)
sendProtoBufType(typeMessage)
sendBytes(encodeProtoBuf(message))
}
fun sendProtoBuf(message: RouteRequest) { fun sendProtoBuf(message: RouteRequest) {
val typeMessage = getProtoBufTypeMessage(TaskRequest.Type.ROUTE) val typeMessage = getProtoBufTypeMessage(TaskRequest.Type.ROUTE)
sendProtoBufType(typeMessage) sendProtoBufType(typeMessage)
+2
View File
@@ -1,4 +1,5 @@
import control.car.ControllerToUsb import control.car.ControllerToUsb
import control.emulator.ControllerEmulator
import net.Client import net.Client
import net.server.handlers.AbstractHandler import net.server.handlers.AbstractHandler
import net.server.handlers.debug.Memory import net.server.handlers.debug.Memory
@@ -21,6 +22,7 @@ fun main(args: Array<String>) {
val handlers: MutableMap<String, AbstractHandler> = mutableMapOf() val handlers: MutableMap<String, AbstractHandler> = mutableMapOf()
val carController = ControllerToUsb() val carController = ControllerToUsb()
handlers.put("/rc/control", Control()) handlers.put("/rc/control", Control())
handlers.put("/loadBin", LoadBin()) handlers.put("/loadBin", LoadBin())
handlers.put("/sonar", GetSonarData(carController)) handlers.put("/sonar", GetSonarData(carController))
+2 -1
View File
@@ -1,11 +1,12 @@
package control package control
import RouteRequest import RouteRequest
import SonarRequest
interface Controller { interface Controller {
fun executeRoute(route: RouteRequest, callBack: (ByteArray) -> Unit) 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 RouteRequest
import control.Controller import control.Controller
import mcTransport import mcTransport
import SonarRequest
class ControllerToUsb : Controller { class ControllerToUsb : Controller {
@@ -16,7 +17,11 @@ class ControllerToUsb : Controller {
mcTransport.sendProtoBuf(route) mcTransport.sendProtoBuf(route)
} }
override fun executeRequestSensorData(angles: IntArray, callBack: (ByteArray) -> Unit) { override fun executeRequestSensorData(sonarRequest: SonarRequest, callBack: (ByteArray) -> Unit) {
//todo make after connect sensor to car println("sonar data")
mcTransport.setCallBack { bytes ->
callBack.invoke(bytes)
}
mcTransport.sendProtoBuf(sonarRequest)
} }
} }
@@ -10,6 +10,7 @@ import room.Data
import room.Line import room.Line
import setTimeout import setTimeout
import kotlin.Pair import kotlin.Pair
import SonarRequest
class ControllerEmulator : Controller { class ControllerEmulator : Controller {
@@ -45,8 +46,9 @@ class ControllerEmulator : Controller {
executeCommand(commands, 0, callBack) 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 xSensor0 = CarState.instance.x
val ySensor0 = CarState.instance.y val ySensor0 = CarState.instance.y
val carAngle = CarState.instance.angle val carAngle = CarState.instance.angle
@@ -103,11 +105,12 @@ class ControllerEmulator : Controller {
distance = currentDistance distance = currentDistance
} }
} }
println("dist " + distance.toString())
//Math.random() return double in [0,1) //Math.random() return double in [0,1)
val delta = getRandomIntFrom(IntArray(5, { x -> x - 2 }))//return one of -2 -1 0 1 or 2 val delta = getRandomIntFrom(IntArray(5, { x -> x - 2 }))//return one of -2 -1 0 1 or 2
distances.add(distance + delta) distances.add(distance + delta)
} }
val responseMessage = SonarResponse.BuilderSonarResponse(distances.toIntArray()) val responseMessage = SonarResponse.BuilderSonarResponse(distances.toIntArray()).build()
val bytesMessage = encodeProtoBuf(responseMessage) val bytesMessage = encodeProtoBuf(responseMessage)
callBack.invoke(bytesMessage) callBack.invoke(bytesMessage)
} }
@@ -30,6 +30,7 @@ class GetSonarData : AbstractHandler {
callback.invoke(encodeProtoBuf(responseMessage)) callback.invoke(encodeProtoBuf(responseMessage))
return return
} }
controller.executeRequestSensorData(message.angles, callback) println("sonar")
controller.executeRequestSensorData(message, callback)
} }
} }
@@ -31,5 +31,4 @@ class SetRoute : AbstractHandler {
} }
controller.executeRoute(message, callback) controller.executeRoute(message, callback)
} }
} }