67 lines
1.6 KiB
Swift
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)
|
|
}
|
|
|
|
}
|
|
}
|