Skip to content

Commit

Permalink
Workaround for Go Client to Server handling
Browse files Browse the repository at this point in the history
Go client cannot handle setting of array values towards KUKSA Server
  • Loading branch information
erikbosch committed Jul 24, 2023
1 parent be11622 commit 9cd8c12
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 40 deletions.
4 changes: 3 additions & 1 deletion kuksa-client/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ This is an example showing how some of the commands can be used:

### Syntax for specifying data in the command line interface

Values used as argument to for example `setValue` shall match the type given. Quotes (single and double) are
Values used as argument to for example `setValue` shall match the type given. Quotes (single and double) are
generally not needed, except in a few special cases. A few valid examples on setting float is shown below:

```
Expand Down Expand Up @@ -254,6 +254,8 @@ Example 3: First item should be `hello, 'there'`
setValue Vehicle.OBD.DTCList "['hello, \'there\'',def]"
```

*Note: When communicating with KUKSA Server some limitations apply. All string/boolean values inside the array must be quoted with double quotes!*

### Updating VSS Structure

Using the test client, it is also possible to update and extend the VSS data structure.
Expand Down
82 changes: 43 additions & 39 deletions kuksa_go_client/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,53 +85,57 @@ func main() {
}
}

err = backend.SetValueFromKuksaVal("Vehicle.OBD.DTCList", "[dtc1, dtc2, dtc3]", "value")
if err != nil {
log.Printf("Set Value Error: %v", err)
} else {
log.Printf("Vehicle.OBD.DTCList Set: [dtc1, dtc2, dtc3]")
}
// Go client does not support setting of array values for Websocket
// Reason is SetValueFromKuksaVal where we set the JSON array we get as onput as string,
// so it gets quoted and considered as a string on server side and cause error
if *protocol == "grpc" {
err = backend.SetValueFromKuksaVal("Vehicle.OBD.DTCList", "[dtc1, dtc2, dtc3]", "value")
if err != nil {
log.Printf("Set Value Error: %v", err)
} else {
log.Printf("Vehicle.OBD.DTCList Set: [dtc1, dtc2, dtc3]")
}

values, err = backend.GetValueFromKuksaVal("Vehicle.OBD.DTCList", "value")
if err != nil {
log.Printf("Get Value Error: %v", err)
} else {
for _, value := range values {
if *protocol == "grpc" {
log.Println("Vehicle.OBD.DTCList: " + value.(*v1.DataEntry).String())
} else {
log.Println("Vehicle.OBD.DTCList: " + value.(string))
values, err = backend.GetValueFromKuksaVal("Vehicle.OBD.DTCList", "value")
if err != nil {
log.Printf("Get Value Error: %v", err)
} else {
for _, value := range values {
if *protocol == "grpc" {
log.Println("Vehicle.OBD.DTCList: " + value.(*v1.DataEntry).String())
} else {
log.Println("Vehicle.OBD.DTCList: " + value.(string))
}
}
}
}

// set string with "" and \"
// Expected result is 4 items in the list
// dtc1, dtc2
// dtc2
// dtc3, dtc3
// dtc4
var valstr = "['dtc1, dtc2', dtc2, \"dtc3, dtc3\", dtc4]"
err = backend.SetValueFromKuksaVal("Vehicle.OBD.DTCList", valstr, "value")
if err != nil {
log.Printf("Set Value Error: %v", err)
} else {
log.Printf("Vehicle.OBD.DTCList Set: " + valstr)
}
// set string with "" and \"
// Expected result is 4 items in the list
// dtc1, dtc2
// dtc2
// dtc3, dtc3
// dtc4
var valstr = "['dtc1, dtc2', dtc2, \"dtc3, dtc3\", dtc4]"
err = backend.SetValueFromKuksaVal("Vehicle.OBD.DTCList", valstr, "value")
if err != nil {
log.Printf("Set Value Error: %v", err)
} else {
log.Printf("Vehicle.OBD.DTCList Set: " + valstr)
}

values, err = backend.GetValueFromKuksaVal("Vehicle.OBD.DTCList", "value")
if err != nil {
log.Printf("Get Value Error: %v", err)
} else {
for _, value := range values {
if *protocol == "grpc" {
log.Println("Vehicle.OBD.DTCList: " + value.(*v1.DataEntry).String())
} else {
log.Println("Vehicle.OBD.DTCList: " + value.(string))
values, err = backend.GetValueFromKuksaVal("Vehicle.OBD.DTCList", "value")
if err != nil {
log.Printf("Get Value Error: %v", err)
} else {
for _, value := range values {
if *protocol == "grpc" {
log.Println("Vehicle.OBD.DTCList: " + value.(*v1.DataEntry).String())
} else {
log.Println("Vehicle.OBD.DTCList: " + value.(string))
}
}
}
}

err = backend.SetValueFromKuksaVal("Vehicle.ADAS.ABS.IsEnabled", "true", "targetValue")
if err != nil {
log.Printf("Set Value Error: %v", err)
Expand Down

0 comments on commit 9cd8c12

Please sign in to comment.