Files
picar/SwiftyCar/Sources/SwiftyCar/main.swift
2020-07-10 22:55:32 +09:30

67 lines
1.6 KiB
Swift

//
// main.swift
//
//
// Created by Michael Pivato on 8/5/20.
//
import NIO
import GRPC
import SwiftRPLidar
import SwiftSerial
func doServer() throws {
// Copied from examples
// Create an event loop group for the server to run on.
let group = MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount)
defer {
try! group.syncShutdownGracefully()
}
// Create a provider using the features we read.
let provider = try MotorProvider(vehicle: getVehicle2D())
let trackingProvider = LidarProvider(lidar: createLidar())
// Start the server and print its address once it has started.
let server = Server.insecure(group: group)
.withServiceProviders([provider, trackingProvider])
.bind(host: "localhost", port: 0)
server.map {
$0.channel.localAddress
}.whenSuccess { address in
print("server started on port \(address!.port!)")
}
// Wait on the server's `onClose` future to stop the program from exiting.
_ = try server.flatMap {
$0.onClose
}.wait()
}
func createLidar() -> SwiftRPLidar{
return try! SwiftRPLidar(onPort: SerialPort(path: "/dev/cu.usbserial0001"))
}
// Entry-Point to the Swift Car Controller
print("Starting Server")
do{
try doServer()
}
catch{
print("Server failed")
}
extension SerialPort: LidarSerial{
public func setBaudrate(baudrate: Int) {
// TODO: handle different baudrates. Only need this for now.
switch baudrate{
default:
setSettings(receiveRate: .baud115200, transmitRate: .baud115200, minimumBytesToRead: 1)
}
}
}