Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 3 additions & 8 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,11 @@ jobs:
image: ghcr.io/tillitis/tkey-builder:5rc2
steps:
- name: checkout
uses: actions/checkout@v4
uses: actions/checkout@v7
with:
# fetch-depth: 0
persist-credentials: false

- name: fix
# https://github.com/actions/runner-images/issues/6775
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"

# Ubuntu has stopped publishing packages we use in
# tkey-builder:4 so we can't do this right now. Kept for a later
# update.
Expand All @@ -39,9 +34,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v7

- name: REUSE Compliance Check
uses: fsfe/reuse-action@v4
uses: fsfe/reuse-action@v6
with:
args: lint
4 changes: 2 additions & 2 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ jobs:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
- uses: actions/checkout@v7
- uses: actions/setup-go@v7
with:
go-version: '1.23'
cache: false
Expand Down
4 changes: 2 additions & 2 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,12 @@ linters:
- gocheckcompilerdirectives
- gochecksumtype
- gocritic
- gocyclo
- godox
- gomoddirectives
- gomodguard
- gosec
- gosmopolitan
- loggercheck
- maintidx
- makezero
- misspell
- musttag
Expand Down Expand Up @@ -53,7 +51,9 @@ linters:
- exhaustruct
- funlen
- gocognit
- gocyclo
- godot
- maintidx
- nestif
- perfsprint
- noctx
Expand Down
3 changes: 1 addition & 2 deletions cmd/tkey-runapp/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ go 1.23.0

require (
github.com/spf13/pflag v1.0.5
github.com/tillitis/tkeyclient v1.3.1
github.com/tillitis/tkeyclient v1.3.2-0.20260916070257-8a6c73692db2
github.com/tillitis/tkeyutil v0.0.9
)

require (
github.com/ccoveille/go-safecast v1.5.0 // indirect
github.com/ccoveille/go-safecast/v2 v2.0.0 // indirect
github.com/creack/goselect v0.1.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
Expand Down
10 changes: 2 additions & 8 deletions cmd/tkey-runapp/go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
github.com/ccoveille/go-safecast v1.5.0 h1:cT/3uVQ/i5PTiJvhvkSU81HeKNurtyQtBndXEH3hDg4=
github.com/ccoveille/go-safecast v1.5.0/go.mod h1:QqwNjxQ7DAqY0C721OIO9InMk9zCwcsO7tnRuHytad8=
github.com/ccoveille/go-safecast/v2 v2.0.0 h1:+5eyITXAUj3wMjad6cRVJKGnC7vDS55zk0INzJagub0=
github.com/ccoveille/go-safecast/v2 v2.0.0/go.mod h1:JIYA4CAR33blIDuE6fSwCp2sz1oOBahXnvmdBhOAABs=
github.com/creack/goselect v0.1.2 h1:2DNy14+JPjRBgPzAd1thbQp4BSIihxcBf0IXhQXDRa0=
Expand All @@ -22,12 +20,8 @@ github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PK
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af h1:6yITBqGTE2lEeTPG04SN9W+iWHCRyHqlVYILiSXziwk=
github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af/go.mod h1:4F09kP5F+am0jAwlQLddpoMDM+iewkxxt6nxUQ5nq5o=
github.com/tillitis/tkeyclient v1.2.0 h1:X/PjUPK061EFNmf3V4knb20wTfcIuUH13VSC/0VFaYo=
github.com/tillitis/tkeyclient v1.2.0/go.mod h1:4TiEj0qUwaffmOODPZro6cUBaw+Gb6F5EFd6tcH7UXE=
github.com/tillitis/tkeyclient v1.3.0 h1:fUlghD+xvtL+qoajgrsetCC7KPwSfpjDDgqxMOBA2VU=
github.com/tillitis/tkeyclient v1.3.0/go.mod h1:7VtzyEjm08Wf+1zdrs20HsvM+WzhyztinvGG2/HY+Is=
github.com/tillitis/tkeyclient v1.3.1 h1:IouMAtwwXewhXLmcySBmXuyFuI4WoAw8NQj+gFWlLaw=
github.com/tillitis/tkeyclient v1.3.1/go.mod h1:7VtzyEjm08Wf+1zdrs20HsvM+WzhyztinvGG2/HY+Is=
github.com/tillitis/tkeyclient v1.3.2-0.20260916070257-8a6c73692db2 h1:EJlxe5+EdURwXBg0I9jffFUdl3Yez+EyTSZ0B6C/5Ao=
github.com/tillitis/tkeyclient v1.3.2-0.20260916070257-8a6c73692db2/go.mod h1:7VtzyEjm08Wf+1zdrs20HsvM+WzhyztinvGG2/HY+Is=
github.com/tillitis/tkeyutil v0.0.9 h1:WWF4Emxch32TczYjjYwl45GMtxsD9l8432mZaX6u8mw=
github.com/tillitis/tkeyutil v0.0.9/go.mod h1:+vxU9HmwR2pdPRYg1YlmWW46h2XADdSAhCGUQCryzJg=
go.bug.st/serial v1.6.2 h1:kn9LRX3sdm+WxWKufMlIRndwGfPWsH1/9lCWXQCasq8=
Expand Down
58 changes: 53 additions & 5 deletions cmd/tkey-runapp/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package main

import (
"bytes"
"errors"
"fmt"
"log"
"os"
Expand Down Expand Up @@ -44,7 +45,8 @@ func main() {
desc := fmt.Sprintf(`Usage: %[1]s [flags...] FILE

%[1]s loads an application binary from FILE onto Tillitis TKey
and starts it.
and starts it. Tries a reset if an app is already loaded, and the TKey
supports reset.

Exit status code is 0 if the app is both successfully loaded and started. Exit
code is non-zero if anything goes wrong, for example if TKey is already
Expand Down Expand Up @@ -142,16 +144,48 @@ running some app.`, os.Args[0])
}
handleSignals(func() { exit(1) }, os.Interrupt, syscall.SIGTERM)

var isFirmware bool
nameVer, err := tk.GetNameVersion()
if err != nil {

if errors.Is(err, tkeyclient.ErrResponseStatusNotOK) {
// Not firmware, try a reset
isFirmware = false
} else if err != nil {
le.Printf("GetNameVersion failed: %v\n", err)
le.Printf("If the serial port is correct, then the TKey might not be in firmware-\n" +
"mode, and have an app running already. Please unplug and plug it in again.\n")
le.Printf("Cannot communicate with TKey, is the port correct?\n")
exit(1)
}

if !isFirmware {
if !tk.CanRemoteClose {
le.Printf("TKey does not support reset, unplug and insert TKey again.\n")
exit(1)
}

le.Printf("Not in firmware mode, trying to reset ...\n")
nextAppData := tkeyclient.NewNextAppDataFromSlice([]byte{0})
err = tk.Reset(tkeyclient.RstTypeStartClient, nextAppData)
if err != nil {
le.Printf("Reset failed: %v\n", err)
exit(1)
}

err = reconnect(tk)
if err != nil {
le.Printf("Failed to reconnect: %v\n", err)
exit(1)
}

nameVer, err = tk.GetNameVersion()
if err != nil {
le.Printf("GetNameVersion failed: %v\n", err)
le.Printf("Cannot communicate with TKey, is the port correct?\n")
exit(1)
}
}

le.Printf("Firmware name0:'%s' name1:'%s' version:%d\n",
nameVer.Name0, nameVer.Name1, nameVer.Version)

udi, err := tk.GetUDI()
if err != nil {
le.Printf("GetUDI failed: %v\n", err)
Expand Down Expand Up @@ -186,6 +220,20 @@ running some app.`, os.Args[0])
exit(0)
}

func reconnect(tk *tkeyclient.TillitisKey) error {
err := tk.WaitClosed()
if err != nil {
return fmt.Errorf("expected port close: %w", err)
}

err = tk.Reconnect()
if err != nil {
return fmt.Errorf("couldn't reconnect: %w", err)
}

return nil
}

func notice() {
fmt.Printf("--------------------------------------------------------------------------------\n")
fmt.Printf("tkey-runapp %v\n", version)
Expand Down