tomek-o / tSIP-plugin-HidPhone

tSIP plugin for interacting with buttons and LEDs of USB devices supporting HID Telephony page (0xB)
1 stars 0 forks source link

USB HP Internet Handset support #1

Open NetviperZ opened 10 months ago

NetviperZ commented 10 months ago

Hello i can't get my USB HP Internet Handset working using this plugin (Vendor ID : 0x03F0 Product ID : 0x1C07)

Log:

[HidPhone.dll] Error opening USB device (USB VID 0x0000, PID 0x0000, usage page 0xB): Device not found
[HidPhone.dll] Error opening USB device (USB VID 0x0000, PID 0x0000, usage page 0xB): Device not found
tomek-o commented 10 months ago

HidPhone.dll is only for telephony devices (Jabra headset, Gigaset Ion, Mairdi were tested) and it is very likely that HP Internet Handset is not implementing telephony usage page, 0xB (despite its appearance). I've seen few similar devices (starting with "Skype" EX-03 phone) and I believe they all might require custom configuration. They are shipped with custom software for Skype integration and they are using some custom protocol. HidControl plugin would be more suitable starting point for this handset, but creating configuration would require hands-on experimenting with this headset - basically catching HID reports that device is sending and assigning actions (scripts) to them. If this device is stateful or has hardware ring then original Skype plugin might be helpful to determine what commands should be sent to it.

NetviperZ commented 10 months ago

Update: It worked, but only when I specify usbUsagePage and leave usbPid and usbPid empty. When I put values for usbPid and usbPid, it says, "Error opening USB device (USB VID 0x0000, PID 0x0000, usage page 0xB): Device not found."

Working:
      "usbPid" : 0,
      "usbUsagePage" : 12,
      "usbVid" : 0
Not working:
       "usbPid" : 0x1c07,
      "usbUsagePage" : 12,
      "usbVid" : 0x03f0
      Log: 
      [HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x37 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x35 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x43 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x41 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
tomek-o commented 10 months ago

When I put values for usbPid and usbPid, it says, "Error opening USB device (USB VID 0x0000, PID 0x0000, usage page 0xB): Device not found."

If you want/have to specify PID/VID (though this should not be needed if you have only one device with 0xB usage page) you have to convert them from hex to decimal when placing in cfg file - JSON is not supporting hexadecimal. Probably not all the keys are working at the moment, reportActions might still need to be defined for numeric keys.

NetviperZ commented 10 months ago

Decimal working as expcted indeed, btw i couldn't find its original integration software, but I managed to read the key presses and bind them with other key inputs using Python and AHK as well. What I'm looking for is if there's a way to make its internal ringer ring for example. I would also like to control its LEDs; currently I can only toggle the mute LED button by sending the virtual key mute to the device.

PS: can we remap input key with HidControl plugin ?

tomek-o commented 10 months ago

What I'm looking for is if there's a way to make its internal ringer ring for example.

I'm not sure at the moment if this handset has separate physical ringer (some kind of buzzer?) or if this was just software playing audio through regular speaker. I would speculate that if ring LED is on (is it?) then physical ringer should be activated same time.

I would also like to control its LEDs; currently I can only toggle the mute LED button by sending the virtual key mute to the device.

It looks like currently I'm not passing this event to plugins. If you need it I probably would have to test it first with Jabra when I'll come back from vacation.

PS: can we remap input key with HidControl plugin ?

I believe it should be flexible enough - it is just comparing reports byte by byte and executes script on match. If this handset is working is working with HidPhone.dll though, I would recommend staying with it as HidControl.dll might not work with devices that are stateful.

NetviperZ commented 10 months ago

I'm not sure at the moment if this handset has separate physical ringer (some kind of buzzer?) or if this was just software playing audio through regular speaker. I would speculate that if ring LED is on (is it?) then physical ringer should be activated same time.

Apparently it's some kind of buzzer according to the technical specifications of the phone:

image

It looks like currently I'm not passing this event to plugins. If you need it I probably would have to test it first with Jabra when I'll come back from vacation.

That would be really great! There's also another guy @arkygeek I'm currently in contact with who got the same handset and we're both very interested in maximizing the potential of this device for fun and profit xD Have a great vacation!

HP Internet Handset Manual : HP Internet Handset

tomek-o commented 10 months ago

Attached set might work with Mute LED. Jabra Evolve 65 plays "muted"/"unmuted" voice messages on these events. HidPhone_mute.zip I'm not seeing this handset on the local market and without hands-on testing I probably won't be able to do much.

NetviperZ commented 10 months ago

Attached set might work with Mute LED. Jabra Evolve 65 plays "muted"/"unmuted" voice messages on these events. HidPhone_mute.zip I'm not seeing this handset on the local market and without hands-on testing I probably won't be able to do much.

Unfortunately this handset is very old and has not been available in stores for over a decade now, I tried your attached and it seems that there's no difference since it hangup calls with any pressed key. Here is the log:


Callback::CALL_STATE, call uid = 1, state = 1
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x47 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Delaying offHook0 script - setting call reject flag
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x45 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script for call reject
[HidPhone.dll] Running mute0 script
rejecting incoming call from sip:xxx@sip.com (486 Busy Here)
Callback::CALL_STATE, call uid = 1, state = 0
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x47 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x45 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
tomek-o commented 10 months ago

Are there any incoming reports (HID REPORT_IN logs) from this handset if there is no call but buttons are pressed (would this handset be stateless)? Are they consistent and different for different buttons? What buttons were pressed above (0x00 0x00 0x47 and 0x00 0x00 0x45 sequences)?

NetviperZ commented 10 months ago

Are there any incoming reports (HID REPORT_IN) from this handset if there is no call but buttons are pressed? Are they consistent and different for different buttons?

Yes indeed, every key has its own both HID keycodes ,pressed and released.

What buttons were pressed above (0x00 0x00 0x47 and 0x00 0x00 0x45 sequences)?

0x47 is Mute keycode Pressed, 0x45 Released :

[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x47 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x45 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
Some other keys:

[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x31 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x2F 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x2D 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x2B 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x29 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x27 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x25 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x23 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x21 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x1B 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x19 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x17 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
[HidPhone.dll] HID REPORT_IN received 3 B: 0x00 0x00 0x15 
[HidPhone.dll] Received 0 usage(s)
[HidPhone.dll] Parsed report: offHook 0, mute 0, redial 0, lineBusy 0, flash 0
[HidPhone.dll] Running offHook0 script
[HidPhone.dll] Running mute0 script
tomek-o commented 10 months ago

For the start, this is HidPhone.cfg opened (while plugin is not loaded or softphone is not running) in JSONedit:

HidPhone cfg

I've filled usbVid and usbPid with decimal values. Just in case I've made a mistake - keep a backup of your file.

I've removed default scripts (scriptOffHook0, scriptOffHook1, etc.) intended for devices actually supporting telephony usage page (automatic report parsing is returning only zeros, that's why calls are disconnected on any button press). At the moment I've disabled controlling Mute LED - this most likely would need much more guesswork for this type of handset.

Knowing that 0x00 0x00 0x47 is "Mute" pressed on the handset, I've added entry to "reportActions" with three bytes to match (0, 0, 71 array, decimal) and script ProgrammableButtonClick(25). Unfortunately I do not have "Mute" function in Lua at the moment so this action needs defining "Mute" button in softphone first (I've chosen button #25 for this - in default configuration the bottom one from first column of expanded console, but using e.g. button #4 would probably be more practical here). Lua function works as if this button was clicked.

If you can give me description of other keys / reports (which is which) I can follow this up. Scripting might be not obvious.

zipped HidPhone.cfg

NetviperZ commented 10 months ago

After changing "usbUsagePage": 11 to "usbUsagePage": 12, the handset mute key can trigger the ProgrammableButtonClick(25) which I defined as mute. I noticed that the mute function in your tSIP doesn't operate like other apps such as Whatsapp Desktop for example which directly mutes the microphone in the Windows microphone . Therefore, I can toggle the mute LED on my handset with Whatsapp Desktop but not with your app. for example I can toggle it the LED using this AHK code:

SoundSetMute -1,, "Microphone" So the handset itself detects out the box when microphone is muted and the LED reacts accordingly

Here is the Rawkey Mapping for the keys and some additional information about the handset:

"""
Bus 003 Device 010: ID 03f0:1c07 HP, Inc HP Internet Handset

Keys:      hex
      1
        00 07 (pressed)
        00 05 (released)
      2
        00 0b (pressed)
        00 09 (released)
      3
        00 0f (pressed)
        00 0d (released)
      4
        00 13 (pressed)
        00 11 (released)
      5
        00 17 (pressed)
        00 15 (released)
      6
        00 1b (pressed)
        00 19 (released)
      7
        00 1f (pressed)
        00 1d (released)
      8
        00 23 (pressed)
        00 21 (released)
      9
        00 27 (pressed)
        00 25 (released)
      0
        00 2f (pressed)
        00 2d (released)
      *
        00 2b (pressed)
        00 29 (released)
      #
        00 33 (pressed)
        00 31 (released)
      contacts
        00 53 (pressed)
        00 51 (released)
      mute
        00 47 (pressed)
        00 45 (released)
      green dial
        00 37 (pressed)
        00 35 (released)
      red hangup
        00 43 (pressed)
        00 41 (released)
      handset is placed into cradle
        00 40
      handset is removed from cradle
        00 41
      big handset N button (handset off cradle)
        00 3f (pressed)
        00 3d (released)
      handset up inner hold button
        00 4b (pressed)
        00 49 (released)
      big handset N button (handset down)
        00 3e (pressed)
        00 3c (released)

Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x03f0 HP, Inc
  idProduct          0x1c07
  bcdDevice            0.09
  iManufacturer           1 Hewlett-Packard
  iProduct                2 HP Internet Handset
  iSerial                 4 0000000001
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x012e
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          3 G9 v1.0.0.0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              200mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      1 Control Device
      bInterfaceProtocol      0
      iInterface              0
      AudioControl Interface Descriptor:
        bLength                10
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength       0x0067
        bInCollection           2
        baInterfaceNr(0)        1
        baInterfaceNr(1)        2
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID            13
        wTerminalType      0x0201 Microphone
        bAssocTerminal          0
        bNrChannels             1
        wChannelConfig     0x0000
        iChannelNames           0
        iTerminal               0
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      6 (FEATURE_UNIT)
        bUnitID                 6
        bSourceID              13
        bControlSize            1
        bmaControls(0)       0x03
          Mute Control
          Volume Control
        bmaControls(1)       0x00
        iFeature                0
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID            12
        wTerminalType      0x0101 USB Streaming
        bAssocTerminal          0
        bNrChannels             2
        wChannelConfig     0x0003
          Left Front (L)
          Right Front (R)
        iChannelNames           0
        iTerminal               0
      AudioControl Interface Descriptor:
        bLength                13
        bDescriptorType        36
        bDescriptorSubtype      4 (MIXER_UNIT)
        bUnitID                 9
        bNrInPins               2
        baSourceID(0)          12
        baSourceID(1)           6
        bNrChannels             2
        wChannelConfig     0x0003
          Left Front (L)
          Right Front (R)
        iChannelNames           0
        bmControls(0)        0x00
        iMixer                  0
      AudioControl Interface Descriptor:
        bLength                13
        bDescriptorType        36
        bDescriptorSubtype      6 (FEATURE_UNIT)
        bUnitID                 1
        bSourceID               9
        bControlSize            2
        bmaControls(0)     0x0155
          Mute Control
          Bass Control
          Treble Control
          Automatic Gain Control
          Bass Boost Control
        bmaControls(1)     0x0002
          Volume Control
        bmaControls(2)     0x0002
          Volume Control
        iFeature                0
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (OUTPUT_TERMINAL)
        bTerminalID            14
        wTerminalType      0x0301 Speaker
        bAssocTerminal          0
        bSourceID               1
        iTerminal               0
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      6 (FEATURE_UNIT)
        bUnitID                 2
        bSourceID              13
        bControlSize            1
        bmaControls(0)       0x03
          Mute Control
          Volume Control
        bmaControls(1)       0x00
        iFeature                0
      AudioControl Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      5 (SELECTOR_UNIT)
        bUnitID                 8
        bNrInPins               1
        baSourceID(0)           2
        iSelector               0
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (OUTPUT_TERMINAL)
        bTerminalID            10
        wTerminalType      0x0101 USB Streaming
        bAssocTerminal          0
        bSourceID               8
        iTerminal               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0
      iInterface              0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0
      iInterface              0
      AudioStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink          12
        bDelay                  0 frames
        wFormatTag         0x0001 PCM
      AudioStreaming Interface Descriptor:
        bLength                14
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bNrChannels             2
        bSubframeSize           2
        bBitResolution         16
        bSamFreqType            0 Continuous
        tLowerSamFreq        6400
        tUpperSamFreq       48000
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes           13
          Transfer Type            Isochronous
          Synch Type               Synchronous
          Usage Type               Data
        wMaxPacketSize     0x00c0  1x 192 bytes
        bInterval               1
        bRefresh                0
        bSynchAddress           0
        AudioStreaming Endpoint Descriptor:
          bLength                 7
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x01
            Sampling Frequency
          bLockDelayUnits         2 Decoded PCM samples
          wLockDelay         0x0001
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       2
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0
      iInterface              0
      AudioStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink          12
        bDelay                  0 frames
        wFormatTag         0x0001 PCM
      AudioStreaming Interface Descriptor:
        bLength                14
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bNrChannels             1
        bSubframeSize           2
        bBitResolution         16
        bSamFreqType            0 Continuous
        tLowerSamFreq        6400
        tUpperSamFreq       48000
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes           13
          Transfer Type            Isochronous
          Synch Type               Synchronous
          Usage Type               Data
        wMaxPacketSize     0x0060  1x 96 bytes
        bInterval               1
        bRefresh                0
        bSynchAddress           0
        AudioStreaming Endpoint Descriptor:
          bLength                 7
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x01
            Sampling Frequency
          bLockDelayUnits         2 Decoded PCM samples
          wLockDelay         0x0001
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0
      iInterface              0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0
      iInterface              0
      AudioStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink          10
        bDelay                  0 frames
        wFormatTag         0x0001 PCM
      AudioStreaming Interface Descriptor:
        bLength                14
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bNrChannels             1
        bSubframeSize           2
        bBitResolution         16
        bSamFreqType            0 Continuous
        tLowerSamFreq        6400
        tUpperSamFreq       48000
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes           13
          Transfer Type            Isochronous
          Synch Type               Synchronous
          Usage Type               Data
        wMaxPacketSize     0x0060  1x 96 bytes
        bInterval               1
        bRefresh                0
        bSynchAddress           0
        AudioStreaming Endpoint Descriptor:
          bLength                 7
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x01
            Sampling Frequency
          bLockDelayUnits         2 Decoded PCM samples
          wLockDelay         0x0001
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              0
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.00
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      59
         Report Descriptors:
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0002  1x 2 bytes
        bInterval               8
Device Status:     0x0000
  (Bus Powered)

"""
tomek-o commented 10 months ago

Here is an update then with usage page = 12 and most of the other button handlers filled. I'm not sure what "big handset N button" (duplicated cradle switches? some other handset model? maybe "handset is placed into cradle" is a state and second one is an event?) and "handset up inner hold" are. Might contain typos and bugs. HidPhone.zip

I have no idea how to control LEDs. On the handset I'm using daily (EX-03 "Skype") HID reports to control display and ring seem pretty random. It could be sniffed from USB communication with original software if anyone could find it. Another way might be bruteforcing it with try and error, but it might be time consuming and cannot be easily automated (one have to look at LEDs or listen for ring).

arkygeek commented 10 months ago

My handset was rebranded for Nortel I think so the big button on the outside of the handset is an N not HP 😉

Did you have any luck with VOP? Did it make anything work?

Jason

--

Jason S. Jorgenson, Ph.D @.***

On Mon, Jan 8, 2024, 2:31 p.m. Tomasz Ostrowski @.***> wrote:

Here is an update then with usage page = 12 and most of the other button handlers filled. I'm not sure what "big handset N button" (duplicated cradle switches?) and "handset up inner hold" are. Might contain typos. HidPhone.zip https://github.com/tomek-o/tSIP-plugin-HidPhone/files/13866369/HidPhone.zip

I have no idea how to control LEDs. On the handset I'm using HID reports to control display and ring seem pretty random. It could be sniffed from USB communication with original software if anyone could find it. Another way might be bruteforcing it with try and error, but it might be time consuming and cannot be easily automated (one have to look at LEDs or listen for ring).

— Reply to this email directly, view it on GitHub https://github.com/tomek-o/tSIP-plugin-HidPhone/issues/1#issuecomment-1881853377, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAO2E6WX727PSMV6N2AZCL3YNRQT7AVCNFSM6AAAAABBOZZTS6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQOBRHA2TGMZXG4 . You are receiving this because you were mentioned.Message ID: @.***>

tomek-o commented 10 months ago

@arkygeek I'm not able to test it, but buttons should work, LEDs and/or internal buzzer (if it is really present) would be more problematic. I doubt this would work with Mac/Wine though (I'm seeing key description above comes from https://github.com/arkygeek/voipHandset).