Skip to content

Commit d958ecb

Browse files
committed
Merge branch 'atomic'
2 parents 0bc64fb + 89d6c99 commit d958ecb

File tree

8 files changed

+209
-111
lines changed

8 files changed

+209
-111
lines changed

api/firmware/bluetooth.go

+35-37
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ import (
1919
"github.com/BitBoxSwiss/bitbox02-api-go/util/errp"
2020
)
2121

22-
// queryBluetooth is like query, but nested one level deeper for Bluetooth.
23-
func (device *Device) queryBluetooth(request *messages.BluetoothRequest) (*messages.BluetoothResponse, error) {
22+
// nonAtomicQueryBluetooth is like query, but nested one level deeper for Bluetooth.
23+
func (device *Device) nonAtomicQueryBluetooth(request *messages.BluetoothRequest) (*messages.BluetoothResponse, error) {
2424
if !device.SupportsBluetooth() {
2525
return nil, errp.New("this device does not support Bluetooth")
2626
}
27-
response, err := device.query(&messages.Request{
27+
response, err := device.nonAtomicQuery(&messages.Request{
2828
Request: &messages.Request_Bluetooth{
2929
Bluetooth: request,
3030
},
@@ -41,44 +41,42 @@ func (device *Device) queryBluetooth(request *messages.BluetoothRequest) (*messa
4141

4242
// BluetoothUpgrade attempts an upgrade of the Bluetooth firmware.
4343
func (device *Device) BluetoothUpgrade(firmware []byte) error {
44-
// Send initial upgrade request
45-
initReq := &messages.BluetoothUpgradeInitRequest{
46-
FirmwareLength: uint32(len(firmware)),
47-
}
48-
req := &messages.BluetoothRequest{
49-
Request: &messages.BluetoothRequest_UpgradeInit{
50-
UpgradeInit: initReq,
51-
},
52-
}
53-
54-
currentResponse, err := device.queryBluetooth(req)
55-
if err != nil {
56-
return err
57-
}
44+
return device.atomicQueries(func() error {
45+
currentResponse, err := device.nonAtomicQueryBluetooth(&messages.BluetoothRequest{
46+
Request: &messages.BluetoothRequest_UpgradeInit{
47+
UpgradeInit: &messages.BluetoothUpgradeInitRequest{
48+
FirmwareLength: uint32(len(firmware)),
49+
},
50+
},
51+
})
52+
if err != nil {
53+
return err
54+
}
5855

59-
for {
60-
switch resp := currentResponse.Response.(type) {
61-
case *messages.BluetoothResponse_RequestChunk:
62-
chunkReq := resp.RequestChunk
63-
chunkData := firmware[chunkReq.Offset : chunkReq.Offset+chunkReq.Length]
56+
for {
57+
switch resp := currentResponse.Response.(type) {
58+
case *messages.BluetoothResponse_RequestChunk:
59+
chunkReq := resp.RequestChunk
60+
chunkData := firmware[chunkReq.Offset : chunkReq.Offset+chunkReq.Length]
6461

65-
currentResponse, err = device.queryBluetooth(&messages.BluetoothRequest{
66-
Request: &messages.BluetoothRequest_Chunk{
67-
Chunk: &messages.BluetoothChunkRequest{
68-
Data: chunkData,
62+
currentResponse, err = device.nonAtomicQueryBluetooth(&messages.BluetoothRequest{
63+
Request: &messages.BluetoothRequest_Chunk{
64+
Chunk: &messages.BluetoothChunkRequest{
65+
Data: chunkData,
66+
},
6967
},
70-
},
71-
})
72-
if err != nil {
73-
return err
74-
}
68+
})
69+
if err != nil {
70+
return err
71+
}
7572

76-
case *messages.BluetoothResponse_Success:
77-
// Upgrade complete
78-
return nil
73+
case *messages.BluetoothResponse_Success:
74+
// Upgrade complete
75+
return nil
7976

80-
default:
81-
return errp.New("unexpected response type during bluetooth upgrade")
77+
default:
78+
return errp.New("unexpected response type during bluetooth upgrade")
79+
}
8280
}
83-
}
81+
})
8482
}

0 commit comments

Comments
 (0)