Hi Takashi,
On Sat, 2018-10-06 at 18:07 +0900, Takashi Sakamoto wrote:
Hi Scott,
Thanks for your report. I have additional information from today investigation. In detail, please read the end of this message.
Your findings match mine.
I think it reasonable to take kernel-land driver emits events for quadlet 05-15 to userspace applications, then let SndTscm object in libhinawa. (Extra care is required for the value of monitor-knob). Additionally, SndTscm object produces API to retrieve current value of fader, knob and so on.
Anyway, initial value should be reported to userspace, mmm...
======== 8< --------
00: fader2 fader1 01: fader4 fader3 02: fader6 fader5 03: fader8 fader7 04: solo-knob fader9(=master)
The value of fader is between 0x0000 and 0x03ff (2byte). The value of solo-knob (FW-1884 only) is between 0x0000 and 0x03ff (2byte).
05: op-mode+fader-sense monitor-knob
op-mode is 7 bits in MSB side.
- 0x00: computer mode
- 0xfe: midi-ctl/mon-mix modes
The value of fader-sense consists of bitflags in which a bit becomes zero during user touches corresponding fader. This is next 9 bits in MSB side.
- 0x0100: for fader 9 (=master)
- 0x0080: for fader 8 ...
- 0x0001: for fader 1
The value of monitor-knob is between 0x0000 and 0x03ff. But the lowest bits becomes frequently without handy operation.
I notice the same unstable low bits with the Solo knob as well.
06: bitflags 07: bitflags 08: bitflags 09: bitflags
These bitflags consists two states:
- During corresponding button is pressed, bit becomes zero.
- some sets of 2 bits represent current value of corresponding knob.
The 2 bits are actually the raw encoder bits from the knobs. This is a "quadrature output" [1] showing the velocity and direction of the encoder as it spins. This bits can also be unstable and fluctuate when there is no movement depending on the position of the encoder knob. If used, some form of filtering would need to be done to avoid triggering false updates.
The FW-1884 also tracks the absolute position of the encoders as 16 bit values similar to the dial-value. They are tracked at quadlets 10-15.
The position is largely different depending on FW-1884/FW-1082.
I have all the buttons of the FW-1884 mapped out to the bitflags. See the end of this email.
10: unknown unknown 11: unknown unknown 12: unknown unknown 13: unknown unknown 14: unknown unknown
10: encoder2 encoder1 11: encoder4 encoder3 12: encoder6 encoder5 13: encoder8 encoder7 14: Freq Gain
15: dial-value unknown
15: dial-value Q
The value of dial is between 0x0000 and 0xffff, accumulated clockwise. At overflow it resets to 0x0000.
16: analog-in-1 17: analog-in-2 18: analog-in-3 19: analog-in-4 20: analog-in-5 21: analog-in-6 22: analog-in-7 23: analog-in-8 24: adat-in-1 25: adat-in-2 26: adat-in-3 27: adat-in-4 28: adat-in-5 29: adat-in-6 30: adat-in-7 31: adat-in-8 32: s/pdif-in-1 33: s/pdif-in-2 34: analog-out-1 35: analog-out-2 36: analog-out-3 37: analog-out-4 38: analog-out-5 39: analog-out-6 40: analog-out-7 41: analog-out-8 42: adat-out-1 43: adat-out-2 44: adat-out-3 45: adat-out-4 46: adat-out-5 47: adat-out-6 48: adat-out-7 49: adat-out-8
The value of level is between 0x00000000 and 0x7fffff00.
50: (unknown) 51: (unknown)
I expect them for spdif-out-1/2 but actually they're not.
52: clock-status clock-config
As Scott investigated, but configuration of clock source is not necessarily effective in bits of clock-status.
53: (unknown) 54: monitor-mix-1 (enabled at INPUT/BOTH modes) 55: monitor-mix-2 (enabled at INPUT/BOTH modes) 56: (unknown) 57: analog-in-mix-1 58: analog-in-mix-2
59: 0:COMPUTER, 1:INPUTS, 2:BOTH
At monitor mix mode, the above selections are available.
60: (unknown) 61: (unknown) 62: (unknown) 63: (unknown)
======== 8< --------
Button Mapping:
Quadlet 6 =========
Bit Button --- -------------- 1 unknown 2 unknown 3 unknown 4 unknown
5 unknown 6 unknown 7 unknown 8 unknown
9 unknown 10 unknown 11 unknown 12 unknown
13 unknown 14 unknown 15 unknown 16 unknown
17 Sel Channel 1 18 Sel Channel 2 19 Sel Channel 3 20 Sel Channel 4
21 Sel Channel 5 22 Sel Channel 6 23 Sel Channel 7 24 Sel Channel 8
25 Solo Channel 1 26 Solo Channel 2 27 Solo Channel 3 28 Solo Channel 4
29 Solo Channel 5 30 Solo Channel 6 31 Solo Channel 7 32 Solo Channel 8
Quadlet 7 =========
Bit Button --- -------------- 1 Mute Channel 1 2 Mute Channel 2 3 Mute Channel 3 4 Mute Channel 4
5 Mute Channel 5 6 Mute Channel 6 7 Mute Channel 7 8 Mute Channel 8
9 Aux5 10 Aux7 11 Aux6 12 Aux8
13 unknown 14 unknown 15 unknown 16 unknown
17 Flip 18 Aux1 19 Aux3 20 Pan
21 Aux2 22 Aux4 23 unknown 24 unknown
25 Control Panel 26 Save 27 All Save 28 Marker
29 Cut 30 Copy 31 Alt 32 Shift
Quadlet 8 =========
Bit Button --- -------------- 1 Revert 2 Clr Solo 3 Loop 4 Del
5 Paste 6 Undo 7 Ctrl 8 unknown
9 Foot Switch 10 unknown 11 unknown 12 unknown
13 unknown 14 unknown 15 unknown 16 unknown
17 unknown 18 unknown 19 unknown 20 unknown
21 unknown 22 unknown 23 unknown 24 unknown
25 unknown 26 unknown 27 unknown 28 unknown
29 Clock 30 Route 31 unknown 32 unknown
Quadlet 9 =========
Bit Button --- -------------- 1 F7 2 F8 3 F9 4 F10
5 Read 6 Wrt 7 Tch 8 Latch
9 High 10 Hi-Mid 11 Hi-Low 12 Low
13 Up 14 Left 15 Down 16 Right
17 Rec 18 Nudge Left 19 Nudge Right 20 Bank Left
21 Bank Right 22 Locate Left 23 Locate Right 24 Shtl
25 Set 26 In 27 Out 28 REW
29 F.FWD 30 STOP 31 PLAY 32 REC
===============
[1] https://en.wikipedia.org/wiki/Incremental_encoder
-Scott