diff --git a/car_srv/kotlinSrv/src/Udev.kt b/car_srv/kotlinSrv/src/Udev.kt index 55c0f2f6467..8cabde50867 100644 --- a/car_srv/kotlinSrv/src/Udev.kt +++ b/car_srv/kotlinSrv/src/Udev.kt @@ -13,24 +13,46 @@ class Udev { fun start() { val monitor = udev.monitor() - val microController = MicroController.instance monitor.on("add", { device -> - if (device.ID_VENDOR_ID == microController.vendorID && device.ID_MODEL_ID == microController.modelID && device.SUBSYSTEM == "tty") { - //mc connected - println("mc connected. transport file is " + device.DEVNAME) - microController.transportFilePath = device.DEVNAME; - mcTransport.initStreams(device.DEVNAME) - exec("stty -F ${MicroController.instance.transportFilePath} raw -echo -echoe -echok") + if (isOurMcDevice(device)) { + connectDevice(device) } }) monitor.on("remove", { device -> - if (device.ID_VENDOR_ID == microController.vendorID && device.ID_MODEL_ID == microController.modelID && device.SUBSYSTEM == "tty") { - //mc disconnected - println("mc disconnected") - microController.transportFilePath = "" - mcTransport.closeStreams() + if (isOurMcDevice(device)) { + disconnectDevice(device) } }) + + readFileIfMcConnected() + } + + fun isOurMcDevice(device: dynamic): Boolean { + val microController = MicroController.instance + return device.ID_VENDOR_ID == microController.vendorID && device.ID_MODEL_ID == microController.modelID && device.SUBSYSTEM == "tty" + } + + fun disconnectDevice(device: dynamic) { + println("mc disconnected") + MicroController.instance.transportFilePath = "" + mcTransport.closeStreams() + } + + fun connectDevice(device: dynamic) { + println("mc connected. transport file is " + device.DEVNAME) + MicroController.instance.transportFilePath = device.DEVNAME; + mcTransport.initStreams(device.DEVNAME) + exec("stty -F ${MicroController.instance.transportFilePath} raw -echo -echoe -echok") + } + + fun readFileIfMcConnected() { + val allTtyDevices = udev.list("tty") + for (device in allTtyDevices) { + if (isOurMcDevice(device)) { + connectDevice(device) + break + } + } } } \ No newline at end of file