blob: 24666decd52f2653cce27bf8a93f0fc523c05433 (
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
package vfd.frontend
import scala.scalajs.js
import scala.scalajs.js.Any.fromFunction1
import scala.scalajs.js.Any.fromString
import org.mavlink.Packet
import org.mavlink.Parser
import org.scalajs.dom
import rx.Rx
import rx.Var
import rx.Var
import scalatags.JsDom.all.`class`
import scalatags.JsDom.all.div
import scalatags.JsDom.all.stringAttr
import vfd.frontend.ui.Panels
import vfd.frontend.util.Application
class Main(socketUrl: String)(implicit app: Application) {
def main() = {
//websocket conveying mavlink data
val connection = new dom.WebSocket(socketUrl)
//reactive propagation of mavlink events
val packet: Var[Packet] = Var(Packet.Empty)
val crcErrors: Var[Int] = Var(0)
val parser = new Parser(
p => {
Rx { packet() = p }
dom.console.log("got packet: seq " + (p.seq.toInt & 0xff) + ", mid " + (p.messageId.toInt & 0xff))
},
() => {
//Rx{crcErrors() += 1}
dom.console.log("crc error")
})
connection.binaryType = "arraybuffer";
connection.onmessage = (e: dom.MessageEvent) => {
val buffer = e.data.asInstanceOf[js.typedarray.ArrayBuffer]
val dv = new js.typedarray.DataView(buffer)
for (i <- 0 until dv.byteLength) {
parser.push(dv.getInt8(i))
}
}
val element = div(`class` := "container-fluid")(
div(`class` := "row")(
div(`class` := "col-xs-12")(
div(`class` := "panel panel-default")(
div(`class` := "panel-body")(
Panels.autopilot)))),
div(`class` := "row")(
div(`class` := "col-xs-4")(
div(`class` := "panel panel-default")(
div(`class` := "panel-body")(
Panels.secondary()))),
div(`class` := "col-xs-5")(
div(`class` := "panel panel-default")(
div(`class` := "panel-body")(
//Panels.primary(input)
Panels.mavlink(packet, crcErrors)))),
div(`class` := "col-xs-3")(
div(`class` := "panel panel-default")(
div(`class` := "panel-body")(
Panels.eicas())))))
app.root.appendChild(element.render)
}
/*
def alert() = {
val image = "/assets/images/leds/led.svg"
val off = "#782121"
val on = "#ff0000"
val controls = div(
`object`("data".attr := image, `type` := "image/svg+xml", width:= "32px")(
"Cannot load"
),
audio(
"autoplay".attr:="true",
source(src:="/assets/audio/alarm.ogg", `type`:="audio/ogg")
)
).render
controls
}*/
}
|