Looking at the logs again, perhaps I've figured out what's happening.
Phone Call 1 1) Phone Rings
2) Accept via PhonerLite answer button
15:21:35,430: Connect Active Response
15:21:35,430: Connect B3 Request: 0D 00 01 00 82 80 1B 20 01 01 00 00 00
15:21:35,430: Connect B3 Request
15:21:35,431: HID out: [LED] Ring = 0
15:21:35,431: HID out: [LED] Hook = 1
15:21:35,435: Connect B3 Indication: 0D 00 01 00 82 82 60 86 01 01 01 00 00
15:21:35,435: Connect B3 Indication
...
15:21:35,456: Facility Confirm: 11 00 01 00 80 81 1C 20 01 00 00 00 00 00 01 00 00
15:21:35,456: Facility Confirm (DTMF)
15:21:35,456: Facility Confirm: 11 00 01 00 80 81 1D 20 01 00 00 00 00 00 01 00 00
15:21:35,456: Facility Confirm (DTMF)
15:21:35,456: HID in: [TEL] Hook = 1
Can see above that PhonerLite sets the Ring to 0 and Hook to 1 as now on a call. For whatever reason, reports HID in too (though no buttons pressed).
3) End call using PhonerLite hangup button:
15:21:38,364: Disconnect B3 Request: 0D 00 01 00 84 80 AE 20 01 01 01 00 00
15:21:38,364: Disconnect B3 Request
15:21:38,366: HID out: [LED] Hook = 0
15:21:38,366: Disconnect B3 Confirm: 12 00 01 00 84 81 AE 20 01 01 01 00 00 00 00 00 00 00
15:21:38,366: Disconnect B3 Confirm
As can see from the above, PhonerLite specifies Hook = 1 when on a call and Hook = 0 when off a call.
Phone Call 2 I then made another call to myself and answered.
1) Pressed the mute button on the headset while the call LED was correctly illuminated.
The headset correctly muted and this shows in the PhonerLite UI with the mute icon beside the microphone. This appears in the log:
15:27:09,226: HID in: [TEL] Hook = 1
15:27:09,227: HID in: [TEL] Phone Mute = 1
So can see when mute is pressed, the headset reports Mute = 1 and Hook = 1. Both seem logically correct as the hook button is still illuminated. All that's changed is Mute from 0 to 1.
3) I press the mute button again on the headset and the call is dropped. Here's what was in the log:
15:32:38,666: HID in: [TEL] Hook = 1
15:32:38,671: Disconnect B3 Request: 0D 00 01 00 84 80 B7 21 01 01 01 00 00
15:32:38,671: Disconnect B3 Request
15:32:38,671: HID out: [LED] Hook = 0
15:32:38,671: HID in: [TEL] Phone Mute = 0
15:32:38,672: Disconnect B3 Confirm: 12 00 01 00 84 81 B7 21 01 01 01 00 00 00 00 00 00 00
15:32:38,672: Disconnect B3 Confirm
Here is where the problem lies: the HID in reports Mute = 0 and Hook = 1. Again this seems correct. The hook is still on, but mute has changed from 1 to 0. Rather than PhonerLite reading the current state of buttons (i.e. hook still on, but mute off), it seems PhonerLite instead toggles the current state. You can see after PhonerLite toggles the state of Hook, it disconnects from the call and sends an HID out signal to the headset to turn off the hook.
So to summarise, it seems PhonerLite is toggling the state when buttons are pressed, rather than reading the current state of the buttons.
What do you think?