diff --git a/car_srv/kotlinSrv/src/McTransport.kt b/car_srv/kotlinSrv/src/McTransport.kt index c17dff73dc4..558c39f848d 100644 --- a/car_srv/kotlinSrv/src/McTransport.kt +++ b/car_srv/kotlinSrv/src/McTransport.kt @@ -23,19 +23,20 @@ class McTransport() { fun initStreams(pathToFile: String) { writeStream = fs.createWriteStream(pathToFile); readStream = fs.createReadStream(pathToFile) - readStream.on("readable", { + readStream.on("readable", fun() { val data = readStream.read() - if (data != null) { - var messageLength = getBodyLength(resultBytes) - for (i in 0..data.length - 1) { - resultBytes.add(data[i]) - if (messageLength != -1 && messageLength + protoHeaderLength == resultBytes.size) { + if (data == null) { + return + } + var messageLength = getBodyLength(resultBytes) - callback.invoke(resultBytes.toByteArray()) - resultBytes.clear() - } else if (messageLength == -1) { - messageLength = getBodyLength(resultBytes) - } + for (i in 0..data.length - 1) { + resultBytes.add(data[i]) + if (messageLength != -1 && messageLength + protoHeaderLength == resultBytes.size) { + callback.invoke(resultBytes.toByteArray()) + resultBytes.clear() + } else if (messageLength == -1) { + messageLength = getBodyLength(resultBytes) } } }) diff --git a/car_srv/kotlinSrv/src/MicroController.kt b/car_srv/kotlinSrv/src/MicroController.kt index aa632b35996..29fd1484fdd 100644 --- a/car_srv/kotlinSrv/src/MicroController.kt +++ b/car_srv/kotlinSrv/src/MicroController.kt @@ -79,7 +79,7 @@ class MicroController private constructor() { throw RcControlException() } val sid = (Math.random() * 100000).toInt() - this.rcSid = sid; + this.rcSid = sid rcHeartBeat(sid) return sid } diff --git a/car_srv/kotlinSrv/src/carControl/RouteExecutorToUsb.kt b/car_srv/kotlinSrv/src/carControl/RouteExecutorToUsb.kt index 3f55fa3e1b6..03a5671b80f 100644 --- a/car_srv/kotlinSrv/src/carControl/RouteExecutorToUsb.kt +++ b/car_srv/kotlinSrv/src/carControl/RouteExecutorToUsb.kt @@ -4,27 +4,45 @@ import RouteRequest import mcTransport import CodedOutputStream -/** - * Created by user on 8/17/16. - */ +fun encode(i: Int): ByteArray { + val result = ByteArray(4) + result[0] = i.shr(24).toByte() + result[1] = i.shr(16).toByte() + result[2] = i.shr(8).toByte() + result[3] = i.toByte() + + return result +} + +fun decode(bytes: ByteArray): Int { + var result = 0 + result += bytes[3] + result += bytes[2].toInt().shl(8) + result += bytes[1].toInt().shl(16) + result += bytes[0].toInt().shl(24) + return result +} + +fun encodeRouteRequest(route: RouteRequest): ByteArray { + val protoSize = route.getSizeNoTag() + val routeBytes = ByteArray(protoSize) + + route.writeTo(CodedOutputStream(routeBytes)) + return routeBytes +} + class RouteExecutorToUsb : RouteExecutor { override fun executeRoute(route: RouteRequest) { + println("Execute Route:") + val size = encode(route.getSizeNoTag()) + val routeBytes = encodeRouteRequest(route) - val protoSize = route.getSizeNoTag() - val routeBytes = ByteArray(protoSize) - route.writeTo(CodedOutputStream(routeBytes)) - - val fullBytes = ByteArray(route.getSizeNoTag() + 4) - - for (i in 0..routeBytes.size - 1) { - fullBytes[i + 4] = routeBytes[i] + mcTransport.setCallBack { bytes -> + println("Read $bytes; decoded: ${decode(bytes)}") } - fullBytes[0] = protoSize.shr(24).toByte() - fullBytes[1] = protoSize.shr(16).toByte() - fullBytes[2] = protoSize.shr(8).toByte() - fullBytes[3] = protoSize.toByte() - mcTransport.writeToFile(fullBytes) + mcTransport.writeToFile(size) + mcTransport.writeToFile(routeBytes) } -} \ No newline at end of file +}