mirror of
https://github.com/RoganDawes/P4wnP1_aloa.git
synced 2025-03-17 21:31:56 +01:00
667 lines
20 KiB
Go
667 lines
20 KiB
Go
// +build js
|
|
|
|
package main
|
|
|
|
import (
|
|
"github.com/gopherjs/gopherjs/js"
|
|
pb "github.com/mame82/P4wnP1_aloa/proto/gopherjs"
|
|
"github.com/mame82/hvue"
|
|
"strconv"
|
|
)
|
|
|
|
type triggerType int
|
|
type actionType int
|
|
const (
|
|
TriggerServiceStarted = triggerType(0)
|
|
TriggerUsbGadgetConnected = triggerType(1)
|
|
TriggerUsbGadgetDisconnected = triggerType(2)
|
|
TriggerWifiAPStarted = triggerType(3)
|
|
TriggerWifiConnectedAsSta = triggerType(4)
|
|
TriggerSshLogin = triggerType(5)
|
|
TriggerDhcpLeaseGranted = triggerType(6)
|
|
TriggerGPIOIn = triggerType(7)
|
|
TriggerGroupReceive = triggerType(8)
|
|
TriggerGroupReceiveMulti = triggerType(9)
|
|
|
|
ActionLog = actionType(0)
|
|
ActionHidScript = actionType(1)
|
|
ActionDeploySettingsTemplate = actionType(2)
|
|
ActionBashScript = actionType(3)
|
|
ActionGPIOOut = actionType(4)
|
|
ActionGroupSend = actionType(5)
|
|
)
|
|
var triggerNames = map[triggerType]string{
|
|
TriggerServiceStarted: "service started",
|
|
TriggerUsbGadgetConnected: "USB gadget connected to host",
|
|
TriggerUsbGadgetDisconnected: "USB Gadget disconnected from host",
|
|
TriggerWifiAPStarted: "WiFi Access Point is up",
|
|
TriggerWifiConnectedAsSta: "joined existing WiFi",
|
|
TriggerSshLogin: "SSH user login",
|
|
TriggerDhcpLeaseGranted: "DHCP lease issued",
|
|
TriggerGPIOIn: "input on GPIO",
|
|
TriggerGroupReceive: "a value on a group channel",
|
|
TriggerGroupReceiveMulti: "multiple values on a group channel",
|
|
}
|
|
var actionNames = map[actionType]string{
|
|
ActionLog: "write log entry",
|
|
ActionHidScript: "start a HIDScript",
|
|
ActionDeploySettingsTemplate: "load and deploy settings template",
|
|
ActionBashScript: "run a bash script",
|
|
ActionGPIOOut: "set output on GPIO",
|
|
ActionGroupSend: "send a value to a group channel",
|
|
}
|
|
var availableTriggers = []triggerType{
|
|
TriggerServiceStarted,
|
|
TriggerUsbGadgetConnected,
|
|
TriggerUsbGadgetDisconnected,
|
|
TriggerWifiAPStarted,
|
|
TriggerWifiConnectedAsSta,
|
|
TriggerDhcpLeaseGranted,
|
|
TriggerGPIOIn,
|
|
TriggerSshLogin,
|
|
TriggerGroupReceive,
|
|
TriggerGroupReceiveMulti,
|
|
}
|
|
var availableActions = []actionType {
|
|
ActionLog,
|
|
ActionBashScript,
|
|
ActionHidScript,
|
|
ActionDeploySettingsTemplate,
|
|
ActionGPIOOut,
|
|
ActionGroupSend,
|
|
}
|
|
|
|
type jsTriggerAction struct {
|
|
*js.Object
|
|
|
|
Id uint32 `js:"Id"`
|
|
OneShot bool `js:"OneShot"`
|
|
IsActive bool `js:"IsActive"`
|
|
Immutable bool `js:"Immutable"`
|
|
|
|
|
|
TriggerType triggerType `js:"TriggerType"`
|
|
ActionType actionType `js:"ActionType"`
|
|
|
|
TriggerData *js.Object `js:"TriggerData"`
|
|
ActionData *js.Object `js:"ActionData"`
|
|
}
|
|
|
|
func (dst *jsTriggerAction) fromGo(src *pb.TriggerAction) {
|
|
dst.IsActive = src.IsActive
|
|
dst.Immutable = src.Immutable
|
|
dst.OneShot = src.OneShot
|
|
dst.Id = src.Id
|
|
|
|
// convert action
|
|
switch srcAction := src.Action.(type) {
|
|
case *pb.TriggerAction_Log:
|
|
dst.ChangeActionType(ActionLog)
|
|
case *pb.TriggerAction_HidScript:
|
|
dst.ChangeActionType(ActionHidScript)
|
|
dstAction := &jsActionStartHIDScript{Object: dst.ActionData}
|
|
dstAction.ScriptName = srcAction.HidScript.ScriptName
|
|
case *pb.TriggerAction_DeploySettingsTemplate:
|
|
dst.ChangeActionType(ActionDeploySettingsTemplate)
|
|
dstAction := &jsActionDeploySettingsTemplate{Object: dst.ActionData}
|
|
dstAction.TemplateName = srcAction.DeploySettingsTemplate.TemplateName
|
|
dstAction.Type = TemplateType(srcAction.DeploySettingsTemplate.Type)
|
|
case *pb.TriggerAction_BashScript:
|
|
dst.ChangeActionType(ActionBashScript)
|
|
dstAction := &jsActionStartBashScript{Object: dst.ActionData}
|
|
dstAction.ScriptName = srcAction.BashScript.ScriptName
|
|
case *pb.TriggerAction_GpioOut:
|
|
dst.ChangeActionType(ActionGPIOOut)
|
|
dstAction := &jsActionGPIOOut{Object: dst.ActionData}
|
|
dstAction.Value = GPIOOutValue(srcAction.GpioOut.Value)
|
|
dstAction.GpioName = srcAction.GpioOut.GpioName
|
|
case *pb.TriggerAction_GroupSend:
|
|
dst.ChangeActionType(ActionGroupSend)
|
|
dstAction := &jsActionGroupSend{Object: dst.ActionData}
|
|
dstAction.Value = srcAction.GroupSend.Value
|
|
dstAction.GroupName = srcAction.GroupSend.GroupName
|
|
default:
|
|
// do nothing
|
|
// Note: no default case, we don't change any values of jsTriggerAction if there isn't a type match
|
|
}
|
|
|
|
// convert trigger
|
|
switch srcTrigger := src.Trigger.(type) {
|
|
case *pb.TriggerAction_SshLogin:
|
|
dst.ChangeTriggerType(TriggerSshLogin)
|
|
dstTrigger := &jsTriggerSSHLogin{Object: dst.TriggerData}
|
|
dstTrigger.LoginUser = srcTrigger.SshLogin.LoginUser
|
|
case *pb.TriggerAction_DhcpLeaseGranted:
|
|
dst.ChangeTriggerType(TriggerDhcpLeaseGranted)
|
|
case *pb.TriggerAction_WifiAPStarted:
|
|
dst.ChangeTriggerType(TriggerWifiAPStarted)
|
|
case *pb.TriggerAction_WifiConnectedAsSta:
|
|
dst.ChangeTriggerType(TriggerWifiConnectedAsSta)
|
|
case *pb.TriggerAction_UsbGadgetConnected:
|
|
dst.ChangeTriggerType(TriggerUsbGadgetConnected)
|
|
case *pb.TriggerAction_UsbGadgetDisconnected:
|
|
dst.ChangeTriggerType(TriggerUsbGadgetDisconnected)
|
|
case *pb.TriggerAction_ServiceStarted:
|
|
dst.ChangeTriggerType(TriggerServiceStarted)
|
|
case *pb.TriggerAction_GpioIn:
|
|
dst.ChangeTriggerType(TriggerGPIOIn)
|
|
dstTrigger := &jsTriggerGPIOIn{Object: dst.TriggerData}
|
|
dstTrigger.GpioName = srcTrigger.GpioIn.GpioName
|
|
dstTrigger.Edge = GPIOInEdge(srcTrigger.GpioIn.GpioInEdge)
|
|
dstTrigger.PullUpDown = GPIOInPullUpDown(srcTrigger.GpioIn.PullUpDown)
|
|
dstTrigger.DebounceMillis = srcTrigger.GpioIn.DebounceMillis
|
|
case *pb.TriggerAction_GroupReceive:
|
|
dst.ChangeTriggerType(TriggerGroupReceive)
|
|
dstTrigger := &jsTriggerGroupReceive{Object: dst.TriggerData}
|
|
dstTrigger.GroupName = srcTrigger.GroupReceive.GroupName
|
|
dstTrigger.Value = srcTrigger.GroupReceive.Value
|
|
case *pb.TriggerAction_GroupReceiveMulti:
|
|
dst.ChangeTriggerType(TriggerGroupReceiveMulti)
|
|
dstTrigger := &jsTriggerGroupReceiveMulti{Object: dst.TriggerData}
|
|
dstTrigger.GroupName = srcTrigger.GroupReceiveMulti.GroupName
|
|
dstTrigger.Values = srcTrigger.GroupReceiveMulti.Values
|
|
dstTrigger.Type = GroupReceiveMultiType(srcTrigger.GroupReceiveMulti.Type)
|
|
default:
|
|
// change nothing
|
|
}
|
|
}
|
|
|
|
|
|
func (ta *jsTriggerAction) toGo() (res *pb.TriggerAction) {
|
|
res = &pb.TriggerAction{
|
|
OneShot: ta.OneShot,
|
|
Immutable: ta.Immutable,
|
|
IsActive: ta.IsActive,
|
|
Id: ta.Id,
|
|
}
|
|
|
|
// Convert action
|
|
switch ta.ActionType {
|
|
case ActionLog:
|
|
res.Action = &pb.TriggerAction_Log{
|
|
Log: &pb.ActionLog{},
|
|
}
|
|
case ActionHidScript:
|
|
actionData := &jsActionStartHIDScript{Object: ta.ActionData}
|
|
res.Action = &pb.TriggerAction_HidScript{
|
|
HidScript: &pb.ActionStartHIDScript{
|
|
ScriptName: actionData.ScriptName,
|
|
},
|
|
}
|
|
case ActionDeploySettingsTemplate:
|
|
actionData := &jsActionDeploySettingsTemplate{Object: ta.ActionData}
|
|
res.Action = &pb.TriggerAction_DeploySettingsTemplate{
|
|
DeploySettingsTemplate: &pb.ActionDeploySettingsTemplate{
|
|
Type: pb.ActionDeploySettingsTemplate_TemplateType(actionData.Type),
|
|
TemplateName: actionData.TemplateName,
|
|
},
|
|
}
|
|
case ActionBashScript:
|
|
actionData := &jsActionStartBashScript{Object: ta.ActionData}
|
|
res.Action = &pb.TriggerAction_BashScript {
|
|
BashScript: &pb.ActionStartBashScript{
|
|
ScriptName: actionData.ScriptName,
|
|
},
|
|
}
|
|
case ActionGPIOOut:
|
|
actionData := &jsActionGPIOOut{Object: ta.ActionData}
|
|
res.Action = &pb.TriggerAction_GpioOut{
|
|
GpioOut: &pb.ActionGPIOOut{
|
|
GpioName: actionData.GpioName,
|
|
Value: pb.GPIOOutValue(actionData.Value),
|
|
},
|
|
}
|
|
case ActionGroupSend:
|
|
actionData := &jsActionGroupSend{Object: ta.ActionData}
|
|
res.Action = &pb.TriggerAction_GroupSend{
|
|
GroupSend: &pb.ActionGroupSend{
|
|
GroupName: actionData.GroupName,
|
|
Value: actionData.Value,
|
|
},
|
|
}
|
|
default:
|
|
println("Unknown action type")
|
|
res.Action = nil
|
|
}
|
|
|
|
// convert trigger
|
|
switch ta.TriggerType {
|
|
case TriggerSshLogin:
|
|
triggerData := &jsTriggerSSHLogin{Object: ta.TriggerData}
|
|
res.Trigger = &pb.TriggerAction_SshLogin{
|
|
SshLogin: &pb.TriggerSSHLogin{
|
|
LoginUser: triggerData.LoginUser,
|
|
},
|
|
}
|
|
case TriggerDhcpLeaseGranted:
|
|
//triggerData := &jsTriggerDHCPLeaseGranted{Object: ta.TriggerData}
|
|
res.Trigger = &pb.TriggerAction_DhcpLeaseGranted{
|
|
DhcpLeaseGranted: &pb.TriggerDHCPLeaseGranted{},
|
|
}
|
|
case TriggerWifiAPStarted:
|
|
res.Trigger = &pb.TriggerAction_WifiAPStarted{
|
|
WifiAPStarted: &pb.TriggerWifiAPStarted{},
|
|
}
|
|
case TriggerWifiConnectedAsSta:
|
|
res.Trigger = &pb.TriggerAction_WifiConnectedAsSta{
|
|
WifiConnectedAsSta: &pb.TriggerWifiConnectedAsSta{},
|
|
}
|
|
case TriggerUsbGadgetConnected:
|
|
res.Trigger = &pb.TriggerAction_UsbGadgetConnected{
|
|
UsbGadgetConnected: &pb.TriggerUSBGadgetConnected{},
|
|
}
|
|
case TriggerUsbGadgetDisconnected:
|
|
res.Trigger = &pb.TriggerAction_UsbGadgetDisconnected{
|
|
UsbGadgetDisconnected: &pb.TriggerUSBGadgetDisconnected{},
|
|
}
|
|
case TriggerServiceStarted:
|
|
res.Trigger = &pb.TriggerAction_ServiceStarted{
|
|
ServiceStarted: &pb.TriggerServiceStarted{},
|
|
}
|
|
case TriggerGPIOIn:
|
|
triggerData := &jsTriggerGPIOIn{Object: ta.TriggerData}
|
|
res.Trigger = &pb.TriggerAction_GpioIn{
|
|
GpioIn: &pb.TriggerGPIOIn{
|
|
GpioName: triggerData.GpioName,
|
|
PullUpDown: pb.GPIOInPullUpDown(triggerData.PullUpDown),
|
|
GpioInEdge: pb.GPIOInEdge(triggerData.Edge),
|
|
DebounceMillis: triggerData.DebounceMillis,
|
|
},
|
|
}
|
|
case TriggerGroupReceive:
|
|
triggerData := &jsTriggerGroupReceive{Object: ta.TriggerData}
|
|
res.Trigger = &pb.TriggerAction_GroupReceive{
|
|
GroupReceive: &pb.TriggerGroupReceive {
|
|
GroupName: triggerData.GroupName,
|
|
Value: triggerData.Value,
|
|
},
|
|
}
|
|
case TriggerGroupReceiveMulti:
|
|
triggerData := &jsTriggerGroupReceiveMulti{Object: ta.TriggerData}
|
|
res.Trigger = &pb.TriggerAction_GroupReceiveMulti{
|
|
GroupReceiveMulti: &pb.TriggerGroupReceiveMulti {
|
|
GroupName: triggerData.GroupName,
|
|
Values: triggerData.Values,
|
|
Type: pb.GroupReceiveMultiType(triggerData.Type),
|
|
},
|
|
}
|
|
default:
|
|
println("Unknown trigger type")
|
|
res.Trigger = nil
|
|
}
|
|
|
|
|
|
return res
|
|
}
|
|
|
|
|
|
func (ta *jsTriggerAction) ChangeActionType(newAt actionType) {
|
|
var data *js.Object
|
|
switch newAt {
|
|
case ActionLog:
|
|
d := &jsActionLog{Object:O()}
|
|
data = d.Object
|
|
case ActionHidScript:
|
|
d := &jsActionStartHIDScript{Object:O()}
|
|
d.ScriptName = ""
|
|
data = d.Object
|
|
case ActionDeploySettingsTemplate:
|
|
d := &jsActionDeploySettingsTemplate{Object:O()}
|
|
d.TemplateName = ""
|
|
d.Type = availableTemplateTypes[0]
|
|
data = d.Object
|
|
case ActionBashScript:
|
|
d := &jsActionStartBashScript{Object:O()}
|
|
d.ScriptName = ""
|
|
data = d.Object
|
|
case ActionGPIOOut:
|
|
d := &jsActionGPIOOut{Object:O()}
|
|
d.GpioName = ""
|
|
d.Value = GPIOOutValueHigh
|
|
data = d.Object
|
|
case ActionGroupSend:
|
|
d := &jsActionGroupSend{Object:O()}
|
|
d.GroupName = "Group1"
|
|
d.Value = 1
|
|
data = d.Object
|
|
default:
|
|
println("Unknown action type")
|
|
data = O()
|
|
}
|
|
|
|
ta.ActionData = data
|
|
ta.ActionType = newAt
|
|
}
|
|
|
|
func (ta *jsTriggerAction) IsActionLog() bool {
|
|
return ta.ActionType == ActionLog
|
|
}
|
|
|
|
func (ta *jsTriggerAction) IsActionBashScript() bool {
|
|
return ta.ActionType == ActionBashScript
|
|
}
|
|
|
|
func (ta *jsTriggerAction) IsActionHidScript() bool {
|
|
return ta.ActionType == ActionHidScript
|
|
}
|
|
|
|
func (ta *jsTriggerAction) IsActionDeploySettingsTemplate() bool {
|
|
return ta.ActionType == ActionDeploySettingsTemplate
|
|
}
|
|
func (ta *jsTriggerAction) IsActionGroupSend() bool {
|
|
return ta.ActionType == ActionGroupSend
|
|
}
|
|
func (ta *jsTriggerAction) IsActionGPIOOut() bool {
|
|
return ta.ActionType == ActionGPIOOut
|
|
}
|
|
|
|
func (ta *jsTriggerAction) ChangeTriggerType(newTt triggerType) {
|
|
var data *js.Object
|
|
switch newTt {
|
|
case TriggerSshLogin:
|
|
d := &jsTriggerSSHLogin{Object:O()}
|
|
d.LoginUser = "root"
|
|
data = d.Object
|
|
case TriggerDhcpLeaseGranted:
|
|
d := &jsTriggerDHCPLeaseGranted{Object:O()}
|
|
data = d.Object
|
|
case TriggerWifiAPStarted:
|
|
d := &jsTriggerWifiAPStarted{Object:O()}
|
|
data = d.Object
|
|
case TriggerWifiConnectedAsSta:
|
|
d := &jsTriggerWifiConnectedAsSta{Object:O()}
|
|
data = d.Object
|
|
case TriggerUsbGadgetConnected:
|
|
d := &jsTriggerUSBGadgetConnected{Object:O()}
|
|
data = d.Object
|
|
case TriggerUsbGadgetDisconnected:
|
|
d := &jsTriggerUSBGadgetDisconnected{Object:O()}
|
|
data = d.Object
|
|
case TriggerServiceStarted:
|
|
d := &jsTriggerServiceStarted{Object:O()}
|
|
data = d.Object
|
|
case TriggerGPIOIn:
|
|
d := &jsTriggerGPIOIn{Object:O()}
|
|
d.Edge = GPIOInEdgeRising
|
|
d.GpioName = ""
|
|
d.PullUpDown = GPIOInPullUp
|
|
d.DebounceMillis = 0
|
|
data = d.Object
|
|
case TriggerGroupReceive:
|
|
d := &jsTriggerGroupReceive{Object:O()}
|
|
d.GroupName = "Group1"
|
|
d.Value = 0
|
|
data = d.Object
|
|
case TriggerGroupReceiveMulti:
|
|
d := &jsTriggerGroupReceiveMulti{Object: O()}
|
|
d.GroupName = "Group1"
|
|
d.Type = GroupReceiveMultiType_SEQUENCE
|
|
d.Values = []int32{1,2}
|
|
data = d.Object
|
|
default:
|
|
println("Unknown trigger type")
|
|
data = O()
|
|
}
|
|
|
|
ta.TriggerData = data
|
|
ta.TriggerType = newTt
|
|
}
|
|
|
|
func (ta *jsTriggerAction) IsTriggerServiceStarted() bool {
|
|
return ta.TriggerType == TriggerServiceStarted
|
|
}
|
|
func (ta *jsTriggerAction) IsTriggerSshLogin() bool {
|
|
return ta.TriggerType == TriggerSshLogin
|
|
}
|
|
func (ta *jsTriggerAction) IsTriggerDhcpLeaseGranted() bool {
|
|
return ta.TriggerType == TriggerDhcpLeaseGranted
|
|
}
|
|
func (ta *jsTriggerAction) IsTriggerWifiAPStarted() bool {
|
|
return ta.TriggerType == TriggerWifiAPStarted
|
|
}
|
|
func (ta *jsTriggerAction) IsTriggerWifiConnectedAsSta() bool {
|
|
return ta.TriggerType == TriggerWifiConnectedAsSta
|
|
}
|
|
func (ta *jsTriggerAction) IsTriggerUsbGadgetConnected() bool {
|
|
return ta.TriggerType == TriggerUsbGadgetConnected
|
|
}
|
|
func (ta *jsTriggerAction) IsTriggerUsbGadgetDisconnected() bool {
|
|
return ta.TriggerType == TriggerUsbGadgetDisconnected
|
|
}
|
|
func (ta *jsTriggerAction) IsTriggerGPIOIn() bool {
|
|
return ta.TriggerType == TriggerGPIOIn
|
|
}
|
|
func (ta *jsTriggerAction) IsTriggerGroupReceive() bool {
|
|
return ta.TriggerType == TriggerGroupReceive
|
|
}
|
|
func (ta *jsTriggerAction) IsTriggerGroupReceiveMulti() bool {
|
|
return ta.TriggerType == TriggerGroupReceiveMulti
|
|
}
|
|
|
|
|
|
func NewTriggerAction() *jsTriggerAction {
|
|
ta := &jsTriggerAction{Object: O()}
|
|
ta.Id = 0
|
|
ta.IsActive = true
|
|
ta.Immutable = false
|
|
ta.OneShot = false
|
|
ta.ActionData = O()
|
|
ta.TriggerData = O()
|
|
ta.TriggerType = availableTriggers[0]
|
|
ta.ActionType = availableActions[0]
|
|
return ta
|
|
}
|
|
|
|
type jsTriggerServiceStarted struct {
|
|
*js.Object
|
|
}
|
|
|
|
type jsTriggerUSBGadgetConnected struct {
|
|
*js.Object
|
|
}
|
|
|
|
type jsTriggerUSBGadgetDisconnected struct {
|
|
*js.Object
|
|
}
|
|
|
|
type jsTriggerWifiAPStarted struct {
|
|
*js.Object
|
|
}
|
|
type jsTriggerWifiConnectedAsSta struct {
|
|
*js.Object
|
|
}
|
|
type jsTriggerSSHLogin struct {
|
|
*js.Object
|
|
LoginUser string `js:"LoginUser"`
|
|
}
|
|
type jsTriggerDHCPLeaseGranted struct {
|
|
*js.Object
|
|
}
|
|
type jsTriggerGroupReceive struct {
|
|
*js.Object
|
|
GroupName string `js:"GroupName"`
|
|
Value int32 `js:"Value"`
|
|
}
|
|
|
|
type jsTriggerGroupReceiveMulti struct {
|
|
*js.Object
|
|
GroupName string `js:"GroupName"`
|
|
Type GroupReceiveMultiType `js:"Type"`
|
|
Values []int32 `js:"Values"`
|
|
}
|
|
type GroupReceiveMultiType int
|
|
const (
|
|
GroupReceiveMultiType_SEQUENCE GroupReceiveMultiType = 0
|
|
GroupReceiveMultiType_AND GroupReceiveMultiType = 1
|
|
GroupReceiveMultiType_OR GroupReceiveMultiType = 2
|
|
GroupReceiveMultiType_EXACT_SEQUENCE GroupReceiveMultiType = 3
|
|
)
|
|
var groupReceiveMultiNames = map[GroupReceiveMultiType]string{
|
|
GroupReceiveMultiType_SEQUENCE: "Ordered Sequence (out-of-oreder values allowed)",
|
|
GroupReceiveMultiType_AND: "All (logical AND)",
|
|
GroupReceiveMultiType_OR: "One of (logical OR)",
|
|
GroupReceiveMultiType_EXACT_SEQUENCE: "Exact ordered sequence",
|
|
}
|
|
var availableGroupReceiveMulti = []GroupReceiveMultiType{GroupReceiveMultiType_SEQUENCE, GroupReceiveMultiType_EXACT_SEQUENCE, GroupReceiveMultiType_AND, GroupReceiveMultiType_OR}
|
|
|
|
|
|
|
|
type jsTriggerGPIOIn struct {
|
|
*js.Object
|
|
GpioName string `js:"GpioName"`
|
|
PullUpDown GPIOInPullUpDown `js:"PullUpDown"` //PullUp resistor, pull down otherwise
|
|
Edge GPIOInEdge `js:"Edge"` // 0 == GPIO.RISING, 1 == GPIO.FALLING, every value > 1 == GPIO.BOTH
|
|
DebounceMillis int64 `js:"DebounceMillis"`
|
|
}
|
|
type GPIOInPullUpDown int
|
|
const GPIOInPullUp = GPIOInPullUpDown(0)
|
|
const GPIOInPullDown = GPIOInPullUpDown(1)
|
|
const GPIOInPullOff = GPIOInPullUpDown(2)
|
|
var gpioInPullUpDownNames = map[GPIOInPullUpDown]string{
|
|
GPIOInPullUp: "Pull-up",
|
|
GPIOInPullDown: "Pull-down",
|
|
GPIOInPullOff: "Off",
|
|
}
|
|
var availableGPIOInPullUpDowns = []GPIOInPullUpDown{GPIOInPullUp, GPIOInPullDown, GPIOInPullOff}
|
|
|
|
type GPIOInEdge int
|
|
const GPIOInEdgeRising = GPIOInEdge(0)
|
|
const GPIOInEdgeFalling = GPIOInEdge(1)
|
|
const GPIOInEdgeBoth = GPIOInEdge(2)
|
|
var gpioInEdgeNames = map[GPIOInEdge]string{
|
|
GPIOInEdgeRising: "Rising edge",
|
|
GPIOInEdgeFalling: "Falling edge",
|
|
GPIOInEdgeBoth: "Rising or Falling edge",
|
|
}
|
|
var availableGPIOInEdges = []GPIOInEdge{GPIOInEdgeRising, GPIOInEdgeFalling, GPIOInEdgeBoth}
|
|
|
|
type jsActionStartBashScript struct {
|
|
*js.Object
|
|
ScriptName string `js:"ScriptName"`
|
|
}
|
|
type jsActionStartHIDScript struct {
|
|
*js.Object
|
|
ScriptName string `js:"ScriptName"`
|
|
}
|
|
type jsActionDeploySettingsTemplate struct {
|
|
*js.Object
|
|
TemplateName string `js:"TemplateName"`
|
|
Type TemplateType `js:"Type"`
|
|
}
|
|
type jsActionGPIOOut struct {
|
|
*js.Object
|
|
GpioName string `js:"GpioName"`
|
|
Value GPIOOutValue `js:"Value"` //PullUp resistor, pull down otherwise
|
|
}
|
|
type GPIOOutValue int
|
|
const GPIOOutValueLow = GPIOOutValue(0)
|
|
const GPIOOutValueHigh = GPIOOutValue(1)
|
|
const GPIOOutValueToggle = GPIOOutValue(2)
|
|
var gpioOutValueNames = map[GPIOOutValue]string{
|
|
GPIOOutValueLow: "Low",
|
|
GPIOOutValueHigh: "High",
|
|
GPIOOutValueToggle: "Toggle",
|
|
}
|
|
var availableGPIOOutValues = []GPIOOutValue{GPIOOutValueLow, GPIOOutValueHigh, GPIOOutValueToggle}
|
|
|
|
|
|
type jsActionGroupSend struct {
|
|
*js.Object
|
|
GroupName string `js:"GroupName"`
|
|
Value int32 `js:"Value"`
|
|
}
|
|
type jsActionLog struct {
|
|
*js.Object
|
|
}
|
|
|
|
|
|
type TemplateType int
|
|
const TemplateTypeFullSettings = TemplateType(pb.ActionDeploySettingsTemplate_FULL_SETTINGS)
|
|
const TemplateTypeNetwork = TemplateType(pb.ActionDeploySettingsTemplate_NETWORK)
|
|
const TemplateTypeWifi = TemplateType(pb.ActionDeploySettingsTemplate_WIFI)
|
|
const TemplateTypeUSB = TemplateType(pb.ActionDeploySettingsTemplate_USB)
|
|
const TemplateTypeBluetooth = TemplateType(pb.ActionDeploySettingsTemplate_BLUETOOTH)
|
|
const TemplateTypeTriggerActions = TemplateType(pb.ActionDeploySettingsTemplate_TRIGGER_ACTIONS)
|
|
var templateTypeNames = map[TemplateType]string{
|
|
TemplateTypeFullSettings: "Overall settings",
|
|
TemplateTypeNetwork: "Network interface settings",
|
|
TemplateTypeWifi: "WiFi settings",
|
|
TemplateTypeUSB: "USB settings",
|
|
TemplateTypeBluetooth: "Bluetooth settings",
|
|
TemplateTypeTriggerActions: "Stored TriggerAction set",
|
|
}
|
|
var availableTemplateTypes = []TemplateType{
|
|
TemplateTypeFullSettings,
|
|
TemplateTypeNetwork,
|
|
TemplateTypeWifi,
|
|
TemplateTypeUSB,
|
|
TemplateTypeBluetooth,
|
|
TemplateTypeTriggerActions,
|
|
}
|
|
|
|
|
|
|
|
/* TriggerActions */
|
|
type jsTriggerActionSet struct {
|
|
*js.Object
|
|
Name string `js:"Name"`
|
|
TriggerActions *js.Object `js:"TriggerActions"`
|
|
}
|
|
|
|
func NewTriggerActionSet() *jsTriggerActionSet {
|
|
tal := &jsTriggerActionSet{Object: O()}
|
|
tal.TriggerActions = O()
|
|
tal.Name = "default_ta_set"
|
|
return tal
|
|
}
|
|
|
|
func (tal *jsTriggerActionSet) UpdateEntry(ta *jsTriggerAction) {
|
|
key := strconv.Itoa(int(ta.Id))
|
|
|
|
//Check if job exists, update existing one if already present
|
|
var updateTa *jsTriggerAction
|
|
if res := tal.TriggerActions.Get(key); res == js.Undefined {
|
|
updateTa = &jsTriggerAction{Object: O()}
|
|
} else {
|
|
updateTa = &jsTriggerAction{Object: res}
|
|
}
|
|
|
|
//Create job object
|
|
updateTa.Id = ta.Id
|
|
updateTa.IsActive = ta.IsActive
|
|
updateTa.Immutable = ta.Immutable
|
|
updateTa.OneShot = ta.OneShot
|
|
updateTa.ActionType = ta.ActionType
|
|
updateTa.TriggerType = ta.TriggerType
|
|
updateTa.TriggerData = ta.TriggerData
|
|
updateTa.ActionData = ta.ActionData
|
|
|
|
hvue.Set(tal.TriggerActions, key, updateTa)
|
|
}
|
|
|
|
func (tal *jsTriggerActionSet) DeleteEntry(id uint32) {
|
|
tal.TriggerActions.Delete(strconv.Itoa(int(id))) //JS version
|
|
//delete(jl.Jobs, strconv.Itoa(int(id)))
|
|
}
|
|
|
|
func (tas *jsTriggerActionSet) Flush() {
|
|
tas.TriggerActions = O()
|
|
//delete(jl.Jobs, strconv.Itoa(int(id)))
|
|
}
|
|
|
|
func (src jsTriggerActionSet) toGo() (target *pb.TriggerActionSet) {
|
|
js_ta_array := js.Global.Get("Object").Call("values", src.TriggerActions)
|
|
count := js_ta_array.Length()
|
|
// println("tal len:", count)
|
|
// iterate over array
|
|
target = &pb.TriggerActionSet{
|
|
Name: src.Name,
|
|
}
|
|
target.TriggerActions = make([]*pb.TriggerAction, count)
|
|
for i:=0;i<count;i++ {
|
|
jsTa := &jsTriggerAction{Object: js_ta_array.Index(i)}
|
|
target.TriggerActions[i] = jsTa.toGo()
|
|
}
|
|
//println("Go TAS: ", target )
|
|
return
|
|
} |