Skip to content

Commit

Permalink
Changed redis key errors to warnings. Added nonces and counters editor.
Browse files Browse the repository at this point in the history
  • Loading branch information
iegomez committed Apr 30, 2019
1 parent 028e959 commit b1fabf4
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 7 deletions.
61 changes: 59 additions & 2 deletions device.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,18 @@ import (
"github.com/iegomez/lds/lds"
"github.com/inkyblackness/imgui-go"
log "github.com/sirupsen/logrus"
"strconv"
)

var ulFcntEdit int
var dlFcntEdit int
var devNonceEdit int
var joinNonceEdit int
var ulFcntEditS string
var dlFcntEditS string
var devNonceEditS string
var joinNonceEditS string

type device struct {
DevEUI string `toml:"eui"`
DevAddress string `toml:"address"`
Expand Down Expand Up @@ -97,12 +107,17 @@ func beginDeviceForm() {
if imgui.Button("Reset device") {
resetDevice = true
}
imgui.SameLine()
if imgui.Button("Set values") {
setRedisValues = true
}
}
beginReset()
beginRedisValues()
imgui.Separator()
if cDevice != nil {
imgui.Text(fmt.Sprintf("DlFCnt: %d - UlFCnt: %d", cDevice.DlFcnt, cDevice.UlFcnt))
imgui.Text(fmt.Sprintf("DevNonce: %d - JoinNonce: %d", cDevice.DevNonce, cDevice.JoinNonce))
imgui.Text(fmt.Sprintf("DlFCnt: %d - DevNonce: %d", cDevice.DlFcnt, cDevice.DevNonce))
imgui.Text(fmt.Sprintf("UlFCnt: %d - JoinNonce: %d", cDevice.UlFcnt, cDevice.JoinNonce))
}
imgui.End()
}
Expand Down Expand Up @@ -197,6 +212,14 @@ func setDevice() {
config.Device.SNwkSIntKey = lds.KeyToHex(cDevice.SNwkSIntKey)
config.Device.AppSKey = lds.KeyToHex(cDevice.AppSKey)
config.Device.DevAddress = lds.DevAddressToHex(cDevice.DevAddr)
ulFcntEdit = int(cDevice.UlFcnt)
ulFcntEditS = strconv.Itoa(ulFcntEdit)
dlFcntEdit = int(cDevice.DlFcnt)
dlFcntEditS = strconv.Itoa(dlFcntEdit)
devNonceEdit = int(cDevice.DevNonce)
devNonceEditS = strconv.Itoa(devNonceEdit)
joinNonceEdit = int(cDevice.JoinNonce)
joinNonceEditS = strconv.Itoa(joinNonceEdit)
} else {
cDevice.Reset()
}
Expand Down Expand Up @@ -239,6 +262,40 @@ func beginReset() {
}
}

func beginRedisValues() {
if setRedisValues {
imgui.OpenPopup("Set counters and nonces")
setRedisValues = false
}
imgui.SetNextWindowPos(imgui.Vec2{X: float32(windowWidth-170) / 2, Y: float32(windowHeight-70) / 2})
imgui.SetNextWindowSize(imgui.Vec2{X: 420, Y: 220})
imgui.PushItemWidth(250.0)
if imgui.BeginPopupModal("Set counters and nonces") {

imgui.PushTextWrapPos()
imgui.Text("Warning: this will only work when device is activated; when not, values will be reset on program start. Modifying these values may result in failure of communication.")
imgui.InputTextV(fmt.Sprintf("DlFcnt ##dlFcntEdit"), &dlFcntEditS, imgui.InputTextFlagsCharsDecimal|imgui.InputTextFlagsCallbackAlways, handleInt(dlFcntEditS, 10, &dlFcntEdit))
imgui.InputTextV(fmt.Sprintf("UlFcnt ##ulFcntEdit"), &ulFcntEditS, imgui.InputTextFlagsCharsDecimal|imgui.InputTextFlagsCallbackAlways, handleInt(ulFcntEditS, 10, &ulFcntEdit))
imgui.InputTextV(fmt.Sprintf("DevNonce ##devNonceEdit"), &devNonceEditS, imgui.InputTextFlagsCharsDecimal|imgui.InputTextFlagsCallbackAlways, handleInt(devNonceEditS, 10, &devNonceEdit))
imgui.InputTextV(fmt.Sprintf("JoinNonce ##joinNonceEdit"), &joinNonceEditS, imgui.InputTextFlagsCharsDecimal|imgui.InputTextFlagsCallbackAlways, handleInt(joinNonceEditS, 10, &joinNonceEdit))
imgui.Separator()
if imgui.Button("Cancel") {
imgui.CloseCurrentPopup()
}
imgui.SameLine()
if imgui.Button("Save") {
//Set values.
err := cDevice.SetValues(ulFcntEdit, dlFcntEdit, devNonceEdit, joinNonceEdit)
if err != nil {
log.Errorln(err)
}
imgui.CloseCurrentPopup()
//Close popup.
}
imgui.EndPopup()
}
}

func join() {
if mqttClient == nil {
err := connectClient()
Expand Down
2 changes: 1 addition & 1 deletion imgui.ini
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Collapsed=0

[Window][Data]
Pos=400,285
Size=780,355
Size=781,354
Collapsed=0

[Window][Debug##Default]
Expand Down
45 changes: 41 additions & 4 deletions lds/lds.go
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,43 @@ func (d *Device) Reset() error {
return oErr
}

//SetValues sets counters and nonces manually.
func (d *Device) SetValues(ulFcnt, dlFcnt, devNonce, joinNonce int) error {
dlFcntKey := fmt.Sprintf("dl-fcnt-%s", d.DevEUI[:])
ulFcntKey := fmt.Sprintf("ul-fcnt-%s", d.DevEUI[:])
joinNonceKey := fmt.Sprintf("join-nonce-%s", d.DevEUI[:])
devNonceKey := fmt.Sprintf("dev-nonce-%s", d.DevEUI[:])
d.UlFcnt = uint32(ulFcnt)
d.DlFcnt = uint32(dlFcnt)
d.DevNonce = lorawan.DevNonce(devNonce)
d.JoinNonce = lorawan.JoinNonce(joinNonce)

dlRes := redisClient.Set(dlFcntKey, d.DlFcnt, 0)
_, err := dlRes.Result()
if err != nil {
return err
}

ulRes := redisClient.Set(ulFcntKey, d.UlFcnt, 0)
_, err = ulRes.Result()
if err != nil {
return err
}

jnRes := redisClient.Set(joinNonceKey, uint16(d.JoinNonce), 0)
_, err = jnRes.Result()
if err != nil {
return err
}

dnRes := redisClient.Set(devNonceKey, uint16(d.DevNonce), 0)
_, err = dnRes.Result()
if err != nil {
return err
}
return nil
}

//GetInfo retrieves device info stored in Redis.
func (d *Device) GetInfo() bool {
ulFcntKey := fmt.Sprintf("ul-fcnt-%s", d.DevEUI[:])
Expand All @@ -582,7 +619,7 @@ func (d *Device) GetInfo() bool {
d.UlFcnt = 0
}
} else {
log.Errorf("redis get key error: %s", err)
log.Warningf("[redis] missing ulFcnt key: %s", err)
}
dlFcntKey := fmt.Sprintf("dl-fcnt-%s", d.DevEUI[:])
df, err := redisClient.Get(dlFcntKey).Result()
Expand All @@ -595,7 +632,7 @@ func (d *Device) GetInfo() bool {
d.DlFcnt = 0
}
} else {
log.Errorf("redis get key error: %s", err)
log.Warningf("[redis] missing dlFcnt key: %s", err)
}
joinNonceKey := fmt.Sprintf("join-nonce-%s", d.DevEUI[:])
sjn, err := redisClient.Get(joinNonceKey).Result()
Expand All @@ -608,7 +645,7 @@ func (d *Device) GetInfo() bool {
d.JoinNonce = 0
}
} else {
log.Errorf("redis get key error: %s", err)
log.Warningf("[redis] missing join nonce key: %s", err)
}
devNonceKey := fmt.Sprintf("dev-nonce-%s", d.DevEUI[:])
sdn, err := redisClient.Get(devNonceKey).Result()
Expand All @@ -621,7 +658,7 @@ func (d *Device) GetInfo() bool {
d.DevNonce = 0
}
} else {
log.Errorf("redis get key error: %s", err)
log.Warningf("[redis] missing dev nonce key: %s", err)
}
//Check for dev addr and keys in case we were already joined.
//Set devAddr and keys at redis so we can override those from a file when we were already joined.
Expand Down
1 change: 1 addition & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ var files []os.FileInfo
var saveFile bool
var saveFilename string
var resetDevice bool
var setRedisValues bool
var windowWidth = 1200
var windowHeight = 920
var dumpHistory bool
Expand Down

0 comments on commit b1fabf4

Please sign in to comment.