I’m sorry, thought I had edited this a few hours ago. With go installed, I got the GitHub repository with go get
command.
I have tried many things, as I saw different ways to use a function outside its package, but this is what I have now:
First thing I tried (as I said, not experienced) was copying the content of func ExamplePHYPayload_lorawan10Decode()
in a ´main.go´ archive with imports in phypayload_test.go
and main package. At that point, log reported non-declaration statement outside function body. Then I was told by a colleague to do as follows:
- Execute
go init github.com/brocaar/lorawan
inside $PATH
folder which is /home/go/bin
- Then
go tidy
.
- Execute main.go file, which right now looks like this:
package main
import (
"database/sql/driver"
"encoding/base64"
"encoding/hex"
"fmt"
"testing"
. "github.com/smartystreets/goconvey/convey"
)
func ExamplePHYPayload_lorawan10Decode() {
nwkSKey := [16]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
appSKey := [16]byte{16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1}
var phy PHYPayload
// use use UnmarshalBinary when decoding a byte-slice
if err := phy.UnmarshalText([]byte("gAQDAgEDAAAGcwcK4mTU9+EX0sA=")); err != nil {
panic(err)
}
ok, err := phy.ValidateUplinkDataMIC(LoRaWAN1_0, 0, 0, 0, nwkSKey, AES128Key{})
if err != nil {
panic(err)
}
if !ok {
panic("invalid mic")
}
if err := phy.DecodeFOptsToMACCommands(); err != nil {
panic(err)
}
phyJSON, err := phy.MarshalJSON()
if err != nil {
panic(err)
}
if err := phy.DecryptFRMPayload(appSKey); err != nil {
panic(err)
}
macPL, ok := phy.MACPayload.(*MACPayload)
if !ok {
panic("*MACPayload expected")
}
pl, ok := macPL.FRMPayload[0].(*DataPayload)
if !ok {
panic("*DataPayload expected")
}
fmt.Println(string(phyJSON))
fmt.Println(pl.Bytes)
// Output:
// {"mhdr":{"mType":"ConfirmedDataUp","major":"LoRaWANR1"},"macPayload":{"fhdr":{"devAddr":"01020304","fCtrl":{"adr":false,"adrAckReq":false,"ack":false,"fPending":false,"classB":false},"fCnt":0,"fOpts":[{"cid":"DevStatusReq","payload":{"battery":115,"margin":7}}]},"fPort":10,"frmPayload":[{"bytes":"4mTU9w=="}]},"mic":"e117d2c0"}
// [1 2 3 4]
}
func main(){
ExamplePHYPayload_lorawan10Decode()
}
I get undefined PHYPayload, LoRaWAN1_0 and AES128Key
and I don’t know how to declare those variables, or If we need to do any change on the code, which I don’t think so because of other examples I’ve been reading.
Also, I see imported but not used
for the imports, but I don’t know If that’s relevant.
I thing something related to GOBIN or GOPATH could be happening.
Again, sorry for my lack of experience, both my colleague and I are new in this whole project and also with Go language.