Ooh, maybe I spoke too soon. I don't think matrix inputs for OPP were ever implemented in MPF!
Each solenoid is configured using three bytes. The first byte is the type of solenoid which is a bit field.
(0x01 - USE_SWITCH, 0x02 - AUTO_CLR, 0x04 - ON_OFF_SOL, 0x08 - DLY_KICK_SOL, 0x10 –
USE_MATRIX_INP, and 0x20 - CAN_CANCEL). If the solenoid is configured to use the switch
input, when the switch input is closed, the solenoid fires. If the solenoid is configured to auto clear, the
host can kick the solenoid using the kick which is automatically cleared, and the solenoid can be
kicked another time without sending a command to clear the kick. If the solenoid is configured as an
ON/OFF solenoid, it will be driven at 100% when the input is active (used for dual wound flippers). If
the solenoid is configured as a delay kick solenoid, the third byte determines the delay after the switch
is active before kicking the solenoid. If the solenoid is configured to use a matrix input to kick the
solenoid, the the third byte is used to indicate the 8x8 switch matrix input on this board that activates
the solenoid. If the solenoid is configured as can cancel, the initial kick can be canceled to provide a
shorter pulse to enable things like flipper tap passing.
A search revealed that USE_MATRIX_INP is defined, but never used in MPF. Furthermore, the Set Solenoid Input command (0x17) that is used in your log is only stated to accept a value from 0-31 but we are sending it 81:
7.23 Set Solenoid Input, 0x17
CardAddr + 0x17 + InputIndex + SolIndex (1 byte) + CRC8
Change a solenoid to be triggered or not triggered by an input. The input index contains the index of
the input [0-31]. The solenoid index contains the index of the solenoid [0 – 15]. If the msb of the
SolIndex is set (0x80), the solenoid will stop using the input switch.