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")
|
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("")) {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user