aboutsummaryrefslogtreecommitdiff
path: root/mavigator-uav/src/main/scala/mavigator/uav/Uav.scala
blob: 06a8f004e0952b517bc1c9396bab59964a56bfca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package mavigator
package uav

import java.lang.IllegalArgumentException
import mock._
import akka._
import akka.actor._
import akka.util._
import akka.stream.scaladsl._

class Uav(system: ExtendedActorSystem) extends Extension {

  private lazy val config = system.settings.config.getConfig("mavigator.uav")
  private lazy val tpe = config.getString("type")
  private lazy val componentId = config.getInt("componentId").toByte
  private lazy val heartbeat = config.getInt("heartbeat")
  private lazy val connection = config.getConfig(tpe)

  lazy val source = tpe match {
    case "mock" =>
      new MockConnection(
        connection.getInt("remote_system_id").toByte,
        componentId,
        connection.getDouble("prescaler")
      )

    case "serial" => ???

    case _ => throw new IllegalArgumentException(s"Unsupported connection type: $tpe")
  }

  def connect(): Flow[ByteString, ByteString, NotUsed] = {
    Flow.fromSinkAndSource(
      Sink.ignore,
      (new MockConnection(0,0,1)).data
    )
  }

}

object Uav extends ExtensionId[Uav] with ExtensionIdProvider {

  override def lookup = Uav

  override def createExtension(system: ExtendedActorSystem) = new Uav(system)

  def apply()(implicit system: ActorSystem) = super.apply(system)

}