Browse Source

dtu 改为mote

master
lihua 5 years ago
parent
commit
dcfed9c2b3
  1. 4
      LoRaMoteConf.json
  2. 186
      LoRaMoteMock.go
  3. BIN
      LoRaMoteMock.ico
  4. 0
      LoRaMoteMock.json
  5. 0
      LoRaMoteMock.manifest
  6. BIN
      dot.ico
  7. 2
      go.mod
  8. 56
      go.sum
  9. 2
      json_model.go
  10. 28
      model.go
  11. BIN
      rsrc.syso
  12. 2
      syso.bat
  13. 2
      utils.go

4
LoRaDTUConf.json → LoRaMoteConf.json

@ -7,6 +7,6 @@
"appSKey": "2bc9217655160b2c1229b5ecb469242f",
"nwkSKey": "4f862983a453cc50336284fd3c62aba5",
"fPort": 2,
"fCnt": 1,
"freq": 470.3
"fCnt": 6,
"freq": 914.7
}

186
LoRaDTUMock.go → LoRaMoteMock.go

@ -1,7 +1,7 @@
package main
import (
"LoRaDTUMock/packets"
"LoRaMoteMock/packets"
"bytes"
"encoding/hex"
"encoding/json"
@ -21,10 +21,10 @@ import (
"time"
)
type DTUMainWindow struct {
type MoteMainWindow struct {
*walk.MainWindow
mqttClient paho.Client
model *DTUModel
model *MoteModel
tv *walk.TableView
jsonView *walk.TreeView
host,username,password *walk.LineEdit
@ -34,19 +34,21 @@ type DTUMainWindow struct {
msg,data *walk.TextEdit
ssl,timeSend *walk.CheckBox
connConf ConnectConfig
dtuConf DTUConfig
moteConf MoteConfig
connConfFileName string
dtuConfFileName string
moteConfFileName string
icon *walk.Icon
}
func main() {
mw := &DTUMainWindow{model: NewDTUModel()}
mw := &MoteMainWindow{model: NewMoteModel()}
mw.icon,_ = walk.NewIconFromResourceId(3)
maxWidth := int(win.GetSystemMetrics(win.SM_CXSCREEN)) - 200
maxHeight := int(win.GetSystemMetrics(win.SM_CYSCREEN)) - 100
err := MainWindow{
AssignTo: &mw.MainWindow,
Title: "LoRaDTUMock",
//Icon: "test.ico",
Title: "LoRaMoteMock",
Icon: mw.icon,
Size: Size{maxWidth,maxHeight },
Layout: VBox{},
Children: []Widget{
@ -65,7 +67,7 @@ func main() {
PushButton{Text:"断开连接", AssignTo:&mw.disconnect, Enabled:false, OnClicked: mw.Disconnect},
CheckBox{Text:"开启SSL/TLS",AssignTo:&mw.ssl,OnClicked:mw.SSL},
PushButton{Text:"证书配置",Enabled:false,AssignTo:&mw.caConf,OnClicked: mw.ConnectConfig},
PushButton{Text:"终端配置",OnClicked: mw.DTUConfig},
PushButton{Text:"终端配置",OnClicked: mw.MoteConfig},
PushButton{Text:"清空数据",OnClicked: mw.Clean},
},
},
@ -140,13 +142,13 @@ func main() {
},
}.Create()
if err != nil {
panic("LoRaDTUMock窗口创建失败")
panic("LoRaMoteMock窗口创建失败")
}
_ = mw.port.SetValue(1883)
_ = mw.sendInterval.SetValue(1000)
mw.ascii.SetChecked(true)
dir,_ := os.Getwd()
mw.connConfFileName = dir + "/LoRaDTUMock.json"
mw.connConfFileName = dir + "/LoRaMoteMock.json"
data, err := ioutil.ReadFile(mw.connConfFileName)
if err == nil {
err = json.Unmarshal(data, &mw.connConf)
@ -160,10 +162,10 @@ func main() {
_ = mw.username.SetText(mw.connConf.Username)
_ = mw.password.SetText(mw.connConf.Password)
}
mw.dtuConfFileName = dir + "/LoRaDTUConf.json"
data, err = ioutil.ReadFile(mw.dtuConfFileName)
mw.moteConfFileName = dir + "/LoRaMoteConf.json"
data, err = ioutil.ReadFile(mw.moteConfFileName)
if err == nil {
err = json.Unmarshal(data, &mw.dtuConf)
err = json.Unmarshal(data, &mw.moteConf)
if err != nil {
msg := "配置文件格式错误:" + err.Error()
walk.MsgBox(mw, "错误", msg, walk.MsgBoxIconError)
@ -174,7 +176,7 @@ func main() {
}
func (mw *DTUMainWindow) Connect() {
func (mw *MoteMainWindow) Connect() {
go func() {
if mw.host.Text() != "" && mw.port.Value() > 0 {
opts := paho.NewClientOptions()
@ -235,7 +237,7 @@ func (mw *DTUMainWindow) Connect() {
}()
}
func (mw *DTUMainWindow) Disconnect() {
func (mw *MoteMainWindow) Disconnect() {
mw.connect.SetEnabled(true)
mw.host.SetEnabled(true)
mw.port.SetEnabled(true)
@ -246,14 +248,15 @@ func (mw *DTUMainWindow) Disconnect() {
mw.mqttClient.Disconnect(0)
}
func (mw *DTUMainWindow) DTUConfig() {
func (mw *MoteMainWindow) MoteConfig() {
var dlg *walk.Dialog
var otaa *walk.CheckBox
var gatewayId,devEUI,devAddr,appKey,appSKey,nwkSKey *walk.LineEdit
var fPort,fCnt,freq *walk.NumberEdit
var acceptPB, cancelPB *walk.PushButton
_ = Dialog{
Title: "DTU配置",
Title: "终端配置",
Icon: mw.icon,
Layout: VBox{},
AssignTo: &dlg,
DefaultButton: &acceptPB,
@ -306,21 +309,21 @@ func (mw *DTUMainWindow) DTUConfig() {
AssignTo: &acceptPB,
Text: "确定",
OnClicked: func() {
mw.dtuConf.OTAA = otaa.Checked()
mw.dtuConf.GatewayId = gatewayId.Text()
mw.dtuConf.DevEui = devEUI.Text()
mw.dtuConf.DevAddr = devAddr.Text()
mw.dtuConf.AppKey = appKey.Text()
mw.dtuConf.AppSKey = appSKey.Text()
mw.dtuConf.NwkSKey = nwkSKey.Text()
mw.dtuConf.FPort = uint8(fPort.Value())
mw.dtuConf.FCnt = uint32(fCnt.Value())
mw.dtuConf.Freq = freq.Value()
mw.moteConf.OTAA = otaa.Checked()
mw.moteConf.GatewayId = gatewayId.Text()
mw.moteConf.DevEui = devEUI.Text()
mw.moteConf.DevAddr = devAddr.Text()
mw.moteConf.AppKey = appKey.Text()
mw.moteConf.AppSKey = appSKey.Text()
mw.moteConf.NwkSKey = nwkSKey.Text()
mw.moteConf.FPort = uint8(fPort.Value())
mw.moteConf.FCnt = uint32(fCnt.Value())
mw.moteConf.Freq = freq.Value()
var confData bytes.Buffer
d,_ := json.Marshal(&mw.dtuConf)
d,_ := json.Marshal(&mw.moteConf)
_ = json.Indent(&confData, d, "", "\t")
_ = ioutil.WriteFile(mw.dtuConfFileName,confData.Bytes(),0644)
_ = ioutil.WriteFile(mw.moteConfFileName,confData.Bytes(),0644)
dlg.Accept()
},
},
@ -334,25 +337,25 @@ func (mw *DTUMainWindow) DTUConfig() {
},
}.Create(mw)
otaa.SetChecked(mw.dtuConf.OTAA)
_ = gatewayId.SetText(mw.dtuConf.GatewayId)
_ = devEUI.SetText(mw.dtuConf.DevEui)
_ = devAddr.SetText(mw.dtuConf.DevAddr)
_ = appKey.SetText(mw.dtuConf.AppKey)
_ = appSKey.SetText(mw.dtuConf.AppSKey)
_ = nwkSKey.SetText(mw.dtuConf.NwkSKey)
_ = fPort.SetValue(float64(mw.dtuConf.FPort))
_ = fCnt.SetValue(float64(mw.dtuConf.FCnt))
_ = freq.SetValue(mw.dtuConf.Freq)
otaa.SetChecked(mw.moteConf.OTAA)
_ = gatewayId.SetText(mw.moteConf.GatewayId)
_ = devEUI.SetText(mw.moteConf.DevEui)
_ = devAddr.SetText(mw.moteConf.DevAddr)
_ = appKey.SetText(mw.moteConf.AppKey)
_ = appSKey.SetText(mw.moteConf.AppSKey)
_ = nwkSKey.SetText(mw.moteConf.NwkSKey)
_ = fPort.SetValue(float64(mw.moteConf.FPort))
_ = fCnt.SetValue(float64(mw.moteConf.FCnt))
_ = freq.SetValue(mw.moteConf.Freq)
dlg.Run()
}
func (mw *DTUMainWindow) Clean() {
mw.model.Items = []*DTU{}
func (mw *MoteMainWindow) Clean() {
mw.model.Items = []*Mote{}
mw.model.PublishRowsReset()
_ = mw.tv.SetSelectedIndexes([]int{})
}
func (mw *DTUMainWindow) SSL() {
func (mw *MoteMainWindow) SSL() {
if mw.ssl.Checked() {
mw.caConf.SetEnabled(true)
}else{
@ -360,12 +363,13 @@ func (mw *DTUMainWindow) SSL() {
}
}
func (mw *DTUMainWindow) ConnectConfig() {
func (mw *MoteMainWindow) ConnectConfig() {
var dlg *walk.Dialog
var caCert,tlsCert,tlsKey *walk.LineEdit
var acceptPB, cancelPB *walk.PushButton
_ = Dialog{
Title: "连接配置",
Icon: mw.icon,
Layout: VBox{},
AssignTo: &dlg,
DefaultButton: &acceptPB,
@ -445,7 +449,7 @@ func (mw *DTUMainWindow) ConnectConfig() {
dlg.Run()
}
func (mw *DTUMainWindow) HandleData(client paho.Client, message paho.Message){
func (mw *MoteMainWindow) HandleData(client paho.Client, message paho.Message){
var downlinkFrame gw.DownlinkFrame
err := proto.Unmarshal(message.Payload(),&downlinkFrame)
if err == nil {
@ -465,11 +469,11 @@ func (mw *DTUMainWindow) HandleData(client paho.Client, message paho.Message){
var origData bytes.Buffer
jsonData,_ := phy.MarshalJSON()
_ = json.Indent(&origData, jsonData, "", " ")
dd := &DTU{
dd := &Mote{
Index: mw.model.Len() + 1,
Direction:"downlink",
DevEUI: mw.dtuConf.DevEui,
DevAddr: mw.dtuConf.DevAddr,
DevEUI: mw.moteConf.DevEui,
DevAddr: mw.moteConf.DevAddr,
MType: phy.MHDR.MType.String(),
GatewayID: hex.EncodeToString(downlinkFrame.TxInfo.GatewayId),
Time:time.Now().Format("2006-01-02 15:04:05"),
@ -495,8 +499,8 @@ func (mw *DTUMainWindow) HandleData(client paho.Client, message paho.Message){
}
}
func (mw *DTUMainWindow) HandleJoinAccept(phy *lorawan.PHYPayload){
key := mw.dtuConf.AppKey
func (mw *MoteMainWindow) HandleJoinAccept(phy *lorawan.PHYPayload){
key := mw.moteConf.AppKey
var aseKey lorawan.AES128Key
_ = aseKey.UnmarshalText([]byte(key))
err := phy.DecryptJoinAcceptPayload(aseKey)
@ -507,36 +511,36 @@ func (mw *DTUMainWindow) HandleJoinAccept(phy *lorawan.PHYPayload){
if !ok {
fmt.Println("lorawan: MACPayload must be of type *JoinAcceptPayload")
}
mw.dtuConf.DevAddr = jap.DevAddr.String()
dn := mw.dtuConf.devNonce
mw.moteConf.DevAddr = jap.DevAddr.String()
dn := mw.moteConf.devNonce
appSKey,err := getAppSKey(aseKey,jap.HomeNetID,jap.JoinNonce,dn)
if err == nil {
mw.dtuConf.AppSKey = appSKey.String()
fmt.Println(mw.dtuConf.AppSKey)
mw.moteConf.AppSKey = appSKey.String()
fmt.Println(mw.moteConf.AppSKey)
}
nwkSKey,err := getNwkSKey(aseKey,jap.HomeNetID,jap.JoinNonce,dn)
if err == nil {
mw.dtuConf.NwkSKey = nwkSKey.String()
fmt.Println(mw.dtuConf.NwkSKey)
mw.moteConf.NwkSKey = nwkSKey.String()
fmt.Println(mw.moteConf.NwkSKey)
}
}
func (mw *DTUMainWindow) HandleDataDown(phy *lorawan.PHYPayload){
func (mw *MoteMainWindow) HandleDataDown(phy *lorawan.PHYPayload){
mpl := phy.MACPayload.(*lorawan.MACPayload)
key := mw.dtuConf.AppSKey
key := mw.moteConf.AppSKey
if mpl.FPort != nil && *mpl.FPort == 0 {
key = mw.dtuConf.NwkSKey
key = mw.moteConf.NwkSKey
}
var aseKey lorawan.AES128Key
_ = aseKey.UnmarshalText([]byte(key))
err := phy.DecryptFRMPayload(aseKey)
if err == nil {
mw.dtuConf.DevAddr = mpl.FHDR.DevAddr.String()
mw.moteConf.DevAddr = mpl.FHDR.DevAddr.String()
}
}
func (mw *DTUMainWindow) PushData(gatewayEUI string,event string, msg proto.Message) {
func (mw *MoteMainWindow) PushData(gatewayEUI string,event string, msg proto.Message) {
topic := fmt.Sprintf("gateway/%s/event/%s",gatewayEUI,event)
b, err := proto.Marshal(msg)
if err != nil {
@ -549,26 +553,26 @@ func (mw *DTUMainWindow) PushData(gatewayEUI string,event string, msg proto.Mess
fmt.Println("mqtt message error")
}
}
func (mw *DTUMainWindow) sendMsg() error{
func (mw *MoteMainWindow) sendMsg() error{
if mw.mqttClient == nil || !mw.mqttClient.IsConnected() {
msg := "请先连接服务器"
walk.MsgBox(mw, "错误", msg, walk.MsgBoxIconError)
return errors.New("请先连接服务器")
}
if mw.dtuConf.OTAA && mw.dtuConf.DevAddr == ""{
mw.dtuConf.devNonce = lorawan.DevNonce(rand.Uint32())
if mw.moteConf.OTAA && mw.moteConf.DevAddr == ""{
mw.moteConf.devNonce = lorawan.DevNonce(rand.Uint32())
appEui := "0807060504030201"
packet,phy,_ := BuildJoin(mw.dtuConf.GatewayId,appEui,mw.dtuConf.DevEui,mw.dtuConf.AppKey,
5,2,mw.dtuConf.Freq,7,-51, mw.dtuConf.devNonce)
packet,phy,_ := BuildJoin(mw.moteConf.GatewayId,appEui,mw.moteConf.DevEui,mw.moteConf.AppKey,
5,2,mw.moteConf.Freq,7,-51, mw.moteConf.devNonce)
var origData bytes.Buffer
jsonData,_ := phy.MarshalJSON()
_ = json.Indent(&origData, jsonData, "", " ")
du := &DTU{
du := &Mote{
Index:mw.model.Len() + 1,
Direction:"uplink",
DevEUI:mw.dtuConf.DevEui,
DevEUI:mw.moteConf.DevEui,
MType:phy.MHDR.MType.String(),
GatewayID:mw.dtuConf.GatewayId,
GatewayID:mw.moteConf.GatewayId,
Rssi:packet.Payload.RXPK[0].RSSI,
LoRaSNR:packet.Payload.RXPK[0].LSNR,
Frequency:packet.Payload.RXPK[0].Freq,
@ -580,13 +584,13 @@ func (mw *DTUMainWindow) sendMsg() error{
_ = mw.tv.SetSelectedIndexes([]int{})
frames,_:= packet.GetUplinkFrames(true,false)
for j := range frames {
mw.PushData(mw.dtuConf.GatewayId,"up",&frames[j])
mw.PushData(mw.moteConf.GatewayId,"up",&frames[j])
}
fmt.Println("push join ")
for cnt := 0;mw.dtuConf.DevAddr == "" && cnt < 5;cnt ++ {
for cnt := 0;mw.moteConf.DevAddr == "" && cnt < 5;cnt ++ {
time.Sleep(time.Second)
}
if mw.dtuConf.DevAddr != "" {
if mw.moteConf.DevAddr != "" {
fmt.Println("join ok")
}else{
fmt.Println("join failed")
@ -607,29 +611,29 @@ func (mw *DTUMainWindow) sendMsg() error{
}
var fCtrl lorawan.FCtrl
_ = fCtrl.UnmarshalBinary([]byte{128})
key := mw.dtuConf.AppSKey
if mw.dtuConf.FPort == 0 {
key = mw.dtuConf.NwkSKey
key := mw.moteConf.AppSKey
if mw.moteConf.FPort == 0 {
key = mw.moteConf.NwkSKey
}
packet,phy,_ := BuildUpData(mw.dtuConf.GatewayId,mw.dtuConf.DevAddr,key,
mw.dtuConf.NwkSKey,mw.dtuConf.FCnt,mw.dtuConf.FPort,5,2,mw.dtuConf.Freq,7,
packet,phy,_ := BuildUpData(mw.moteConf.GatewayId,mw.moteConf.DevAddr,key,
mw.moteConf.NwkSKey,mw.moteConf.FCnt,mw.moteConf.FPort,5,2,mw.moteConf.Freq,7,
lorawan.UnconfirmedDataUp,fCtrl,-51,bmsg)
var origData bytes.Buffer
jsonData,_ := phy.MarshalJSON()
_ = json.Indent(&origData, jsonData, "", " ")
du := &DTU{
du := &Mote{
Index:mw.model.Len() + 1,
Direction:"uplink",
DevEUI:mw.dtuConf.DevEui,
DevAddr:mw.dtuConf.DevAddr,
DevEUI:mw.moteConf.DevEui,
DevAddr:mw.moteConf.DevAddr,
MType:phy.MHDR.MType.String(),
GatewayID:mw.dtuConf.GatewayId,
GatewayID:mw.moteConf.GatewayId,
Rssi:packet.Payload.RXPK[0].RSSI,
LoRaSNR:packet.Payload.RXPK[0].LSNR,
Frequency:packet.Payload.RXPK[0].Freq,
FCnt:mw.dtuConf.FCnt,
FPort:mw.dtuConf.FPort,
FCnt:mw.moteConf.FCnt,
FPort:mw.moteConf.FPort,
HexData:hex.EncodeToString(bmsg),
AsciiData:BytesToString(bmsg),
Time:time.Now().Format("2006-01-02 15:04:05"),
@ -640,20 +644,20 @@ func (mw *DTUMainWindow) sendMsg() error{
_ = mw.tv.SetSelectedIndexes([]int{})
frames,_:= packet.GetUplinkFrames(true,false)
for j := range frames {
mw.PushData(mw.dtuConf.GatewayId,"up",&frames[j])
mw.PushData(mw.moteConf.GatewayId,"up",&frames[j])
}
mw.dtuConf.FCnt ++
mw.moteConf.FCnt ++
var confData bytes.Buffer
d,_ := json.Marshal(&mw.dtuConf)
d,_ := json.Marshal(&mw.moteConf)
_ = json.Indent(&confData, d, "", "\t")
_ = ioutil.WriteFile(mw.dtuConfFileName,confData.Bytes(),0644)
_ = ioutil.WriteFile(mw.moteConfFileName,confData.Bytes(),0644)
return nil
}
func (mw *DTUMainWindow) SendMsg() {
func (mw *MoteMainWindow) SendMsg() {
go mw.sendMsg()
}
func (mw *DTUMainWindow) SetSend() {
func (mw *MoteMainWindow) SetSend() {
if mw.timeSend.Checked() {
mw.ascii.SetEnabled(false)
mw.noAscii.SetEnabled(false)
@ -669,7 +673,7 @@ func (mw *DTUMainWindow) SetSend() {
}
}
func (mw *DTUMainWindow) TimeSend() {
func (mw *MoteMainWindow) TimeSend() {
if mw.sendInterval.Value() <= 0 {
msg := "时间间隔需大于0"
walk.MsgBox(mw, "错误", msg, walk.MsgBoxIconError)
@ -690,7 +694,7 @@ func (mw *DTUMainWindow) TimeSend() {
}
}()
}
func (mw *DTUMainWindow) tvItemActivated() {
func (mw *MoteMainWindow) tvItemActivated() {
msg := ""
for _, i := range mw.tv.SelectedIndexes() {
msg += mw.model.Items[i].OrigData + "\n"

BIN
LoRaMoteMock.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

0
LoRaDTUMock.json → LoRaMoteMock.json

0
LoRaDTUMock.manifest → LoRaMoteMock.manifest

BIN
dot.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

2
go.mod

@ -1,4 +1,4 @@
module LoRaDTUMock
module LoRaMoteMock
go 1.12

56
go.sum

@ -1,36 +1,27 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0=
github.com/Azure/azure-amqp-common-go v1.1.4/go.mod h1:FhZtXirFANw40UXI2ntweO+VOkfaw8s6vZxUiRhLYW8=
github.com/Azure/azure-amqp-common-go/v2 v2.1.0/go.mod h1:R8rea+gJRuJR6QxTir/XuEd+YuKoUiazDC/N96FiDEU=
github.com/Azure/azure-sdk-for-go v21.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/azure-sdk-for-go v27.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/azure-sdk-for-go v29.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/azure-sdk-for-go v30.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/azure-service-bus-go v0.5.1/go.mod h1:Tctgev//M0s8G6mdA+ZH9esoIXuiq7qEkxoDLZwfCrA=
github.com/Azure/azure-service-bus-go v0.9.1/go.mod h1:yzBx6/BUGfjfeqbRZny9AQIbIe3AcV9WZbAdpkoXOa0=
github.com/Azure/go-autorest v11.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest v11.1.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest v12.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvdeRAgDr0izn4z5Ij88=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/NickBall/go-aes-key-wrap v0.0.0-20170929221519-1c3aa3e4dfc5/go.mod h1:w5D10RxC0NmPYxmQ438CC1S07zaC1zpvuNW7s5sUk2Q=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/apex/log v1.1.0/go.mod h1:yA770aXIDQrhVOIGurT/pVdfCpSq1GQV/auzMN5fzvY=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/aws/aws-sdk-go v1.15.64/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM=
@ -38,18 +29,10 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI=
github.com/brocaar/loraserver v0.0.0-20190729122155-2f0bb9c308bc h1:bum9Ye6oZBx+H1yHqZhlNy9V7CDf/fBCYadMpV9xcng=
github.com/brocaar/loraserver v0.0.0-20190729122155-2f0bb9c308bc/go.mod h1:nu05fgUCXdcEJQ7KJHMw5lHO5Efxq7j+g4r5g9PryhY=
github.com/brocaar/loraserver v0.0.0-20190917115647-c4da45f52f2b h1:iYgmTmf69flRZY5Xb1WxKNzymSSzfY9LHc6eYQYuSjA=
github.com/brocaar/loraserver v0.0.0-20190917115647-c4da45f52f2b/go.mod h1:JTmS0Kk2inKluT1limjm4Xk5FcD70/WV63DMN2lJfVk=
github.com/brocaar/loraserver v2.5.0+incompatible h1:Fna4CF0jW2Vl4UpjLIhR5ifW4g+oZD/w3Dq09TiJ8Z8=
github.com/brocaar/loraserver v2.5.0+incompatible/go.mod h1:VBTim0YtfWAKehjJ6k17jCnG44DzXVdL4iu+hwxg2ik=
github.com/brocaar/lorawan v0.0.0-20190709091804-c3a80883a8fa h1:UcT94Q1RMA+lTAD0kxDY5RjkhagJgcoAjIKlKvs7A8o=
github.com/brocaar/lorawan v0.0.0-20190709091804-c3a80883a8fa/go.mod h1:Fm+51pxK6mZoAQjIaWJqPmnRuXecozsM5Mf9c+kr/ko=
github.com/brocaar/lorawan v0.0.0-20190814113539-8eb2a8d6da09 h1:hV+axbeTsoTCa1tEkXzDjucdg1GPSX9j1fn95saTKBo=
github.com/brocaar/lorawan v0.0.0-20190814113539-8eb2a8d6da09/go.mod h1:Fm+51pxK6mZoAQjIaWJqPmnRuXecozsM5Mf9c+kr/ko=
github.com/brocaar/lorawan v0.0.0-20191115102621-6095d473cf60 h1:jecx8QFcsUAWZojNIqOZaoAWFwkBbd3VOHZ3kv6FQxE=
github.com/brocaar/lorawan v0.0.0-20191115102621-6095d473cf60/go.mod h1:VgyRGAJ/wl1JfqZZmNlCTM8fyaIKF11YvYAGIVtedL8=
github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw=
github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo=
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@ -57,7 +40,6 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
@ -74,9 +56,6 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dustin/go-humanize v0.0.0-20180713052910-9f541cc9db5d/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/eclipse/paho.mqtt.golang v1.2.0 h1:1F8mhG9+aO5/xpdtFkW4SxOJB67ukuDC3t2y2qayIX0=
github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts=
github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
@ -261,7 +240,6 @@ github.com/gobuffalo/x v0.0.0-20181007152206-913e47c59ca7/go.mod h1:9rDPXaB3kXdK
github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@ -273,7 +251,6 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@ -290,6 +267,7 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20190328170749-bb2674552d8f h1:4Gslotqbs16iAg+1KR/XdabIfq8TlAWHdwS5QJFksLc=
github.com/gopherjs/gopherjs v0.0.0-20190328170749-bb2674552d8f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4=
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/goreleaser/goreleaser v0.106.0/go.mod h1:YCWszXb4t6HZ7gzeg5TcbPJC2Ad8cFvsknUS0CwS3yY=
github.com/goreleaser/nfpm v0.11.0/go.mod h1:F2yzin6cBAL9gb+mSiReuXdsfTrOQwDMsuSpULof+y4=
@ -350,12 +328,13 @@ github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f26
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lxn/walk v0.0.0-20191113135339-bf589de20b3c h1:4pJw1uBKndwiBBJpcbqP1Bf90YfqTJUsHG9DVoAfIQ8=
github.com/lxn/walk v0.0.0-20191113135339-bf589de20b3c/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ=
@ -405,35 +384,27 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W
github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.0.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
@ -458,6 +429,7 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3 h1:hBSHahWMEgzwRyS6dRpxY0XyjZsHyQ61s084wo5PJe0=
github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8=
github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
@ -485,11 +457,9 @@ github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/unrolled/secure v0.0.0-20180918153822-f340ee86eb8b/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA=
@ -499,11 +469,8 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0=
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
@ -550,10 +517,8 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20181207154023-610586996380/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190322120337-addf6b3196f6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190328230028-74de082e2cca h1:hyA6yiAgbUwuWqtscNvWAI7U1CtlaD1KilQ6iudt1aI=
golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@ -593,7 +558,6 @@ golang.org/x/sys v0.0.0-20181030150119-7e31e0c00fa0/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20181106135930-3a76605856fd/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181206074257-70b957f3b65e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190102155601-82a175fd1598/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -608,7 +572,6 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190620070143-6f217b454f45/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd h1:DBH9mDw0zluJT/R+nGuV3jWFWLFaHyYZWD4tOT+cjn0=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -619,7 +582,6 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181003024731-2f84ea8ef872/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181006002542-f60d9635b16a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@ -657,7 +619,6 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw
golang.org/x/tools v0.0.0-20190708203411-c8855242db9c/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
gonum.org/v1/gonum v0.0.0-20190115205657-1b07048b32c6/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/netlib v0.0.0-20190219113230-9992c5f5eae4/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.6.0/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
@ -670,15 +631,12 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190620144150-6af8c5fc6601/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@ -689,6 +647,7 @@ gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
@ -700,14 +659,13 @@ gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
pack.ag/amqp v0.8.0/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4=
pack.ag/amqp v0.11.0/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4=
pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4=
pack.ag/amqp v0.12.1/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=

2
jsonModel.go → json_model.go

@ -62,7 +62,7 @@ func (d *Node) ChildAt(index int) walk.TreeItem {
}
func (d *Node) Image() interface{} {
icon,err := walk.NewIconFromResourceId(3)
icon,err := walk.NewIconFromResourceId(5)
if err != nil {
return ""
}

28
model.go

@ -16,7 +16,7 @@ type ConnectConfig struct {
TLSKey string `json:"tls_key"`
}
type DTUConfig struct {
type MoteConfig struct {
OTAA bool `json:"otaa"`
GatewayId string `json:"gatewayId"`
DevEui string `json:"devEui"`
@ -30,7 +30,7 @@ type DTUConfig struct {
devNonce lorawan.DevNonce
}
type DTU struct {
type Mote struct {
Index int
Direction string
DevEUI string
@ -49,19 +49,19 @@ type DTU struct {
OrigData string
}
type DTUModel struct {
type MoteModel struct {
walk.TableModelBase
walk.SorterBase
SortColumn int
SortOrder walk.SortOrder
Items []*DTU
Items []*Mote
}
func (m *DTUModel) RowCount() int {
func (m *MoteModel) RowCount() int {
return len(m.Items)
}
func (m *DTUModel) Value(row, col int) interface{} {
func (m *MoteModel) Value(row, col int) interface{} {
item := m.Items[row]
switch col {
@ -97,26 +97,26 @@ func (m *DTUModel) Value(row, col int) interface{} {
panic("unexpected col")
}
func (m *DTUModel) Checked(row int) bool {
func (m *MoteModel) Checked(row int) bool {
return m.Items[row].checked
}
func (m *DTUModel) SetChecked(row int, checked bool) error {
func (m *MoteModel) SetChecked(row int, checked bool) error {
m.Items[row].checked = checked
return nil
}
func (m *DTUModel) Sort(col int, order walk.SortOrder) error {
func (m *MoteModel) Sort(col int, order walk.SortOrder) error {
m.SortColumn, m.SortOrder = col, order
sort.Stable(m)
return m.SorterBase.Sort(col, order)
}
func (m *DTUModel) Len() int {
func (m *MoteModel) Len() int {
return len(m.Items)
}
func (m *DTUModel) Less(i, j int) bool {
func (m *MoteModel) Less(i, j int) bool {
a, b := m.Items[i], m.Items[j]
c := func(ls bool) bool {
if m.SortOrder == walk.SortAscending {
@ -141,10 +141,10 @@ func (m *DTUModel) Less(i, j int) bool {
}
}
func (m *DTUModel) Swap(i, j int) {
func (m *MoteModel) Swap(i, j int) {
m.Items[i], m.Items[j] = m.Items[j], m.Items[i]
}
func NewDTUModel() *DTUModel {
return new(DTUModel)
func NewMoteModel() *MoteModel {
return new(MoteModel)
}

BIN
rsrc.syso

Binary file not shown.

2
syso.bat

@ -1 +1 @@
rsrc -manifest LoRaDTUMock.manifest -ico dot.ico -o rsrc.syso
rsrc -manifest LoRaMoteMock.manifest -ico LoRaMoteMock.ico,dot.ico -o rsrc.syso

2
utils.go

@ -1,7 +1,7 @@
package main
import (
"LoRaDTUMock/packets"
"LoRaMoteMock/packets"
"crypto/aes"
"crypto/tls"
"crypto/x509"

Loading…
Cancel
Save