On 03/22/2017 12:45 AM, Eric Nelson wrote: > Hi Hans, > > On 03/21/2017 02:29 PM, Hans Verkuil wrote: >> On 03/21/2017 09:03 PM, Eric Nelson wrote: >>> On 03/21/2017 11:46 AM, Hans Verkuil wrote: >>>> On 03/21/2017 07:23 PM, Eric Nelson wrote: >>>>> On 03/21/2017 10:44 AM, Eric Nelson wrote: >>>>>> On 03/21/2017 10:05 AM, Hans Verkuil wrote: >>>>>>> On 03/21/2017 05:49 PM, Eric Nelson wrote: >>>>> > > <snip> > >>>>> I think this is the culprit: >>>>> cec-uinput: L8: << 10:8e:00 >>>>> >>>>> The 1.3 spec says this about the 8E message: >>>>> >>>>> "If Menu State indicates activated, TV enters ‘Device Menu Active’ >>>>> state and forwards those Remote control commands, shown in >>>>> Table 26, to the initiator. If deactivated, TV enters ‘Device Menu Inactive’ >>>>> state and stops forwarding remote control commands". >>>>> >>>>> In section 13.12.2, it also says this: >>>>> >>>>> "The TV may initiate a device’s menu by sending a <Menu Request> >>>>> [“Activate”] command. It may subsequently remove the menu by sending >>>>> a <Menu Request> [“Deactivate”] message. The TV may also query a >>>>> devices menu status by sending a <Menu Request> [“Query”]. The >>>>> menu device shall always respond with a <Menu Status> command >>>>> when it receives a <Menu Request>." >>>>> >>>> >>>> That sounds plausible. When you tested with my CEC framework, did you also >>>> run the cec-follower utility? That emulates a CEC follower. >>>> >>> >>> Yes. I'm running it with no arguments. >>> >>>> Note: you really need to use the --cec-version-1.4 option when configuring >>>> the i.MX6 CEC adapter since support for <Menu Request> is only enabled with >>>> CEC version 1.4. It is no longer supported with 2.0. >>>> >>> >>> I'm not sure what I did in my previous attempt, but I'm now seeing >>> both the arrow and function key sets being received by cec-ctl and >>> cec-follower with --cec-version-1.4. >>> >>> Or not. Removing the --cec-version-1.4 parameter still shows these >>> events, but after a re-boot and re-selection of the proper source >>> on my TV shows that they're no longer coming up with or without >>> the parameter. >>> >>> Further testing showed that by running the older driver and libCEC >>> code, then re-booting into the new kernel (with cec-ctl) shows the >>> messages with or without the flag. >>> >>> In other words, the TV seems to retain some state from the >>> execution of the Pulse8/libCEC code. >>> >>> Is there a way to send a raw message to the television using cec-ctl? >>> >>> Never mind, I found it and after a bunch of messing around, >>> confirmed that I can get the menu keys to be passed from my >>> TV by sending the 0x8e command with a payload of 0x00 to >>> the television: >>> >>> ~/# cec-ctl --custom-command=cmd=0x8e,payload=0x00 --to=0 >> >> Or more elegantly: >> >> cec-ctl --menu-status=menu-state=activated -t0 >> >> See also: cec-ctl --help-device-menu-control >> > > My first RTFM for this subsystem! > >> But cec-follower should receive a menu-request message and reply with >> menu-status(activated). >> >> If you run cec-ctl -M, do you see the menu-request message arriving and the >> proper reply? >> > > After a re-boot with the CEC input clear on my television, I don't see it > during the initial startup of cec-ctl: > > ~# cec-ctl --record --cec-version-1.4 -M > Driver Info: > Driver Name : dwhdmi-imx > Adapter Name : dw_hdmi > Capabilities : 0x00000016 > Logical Addresses > Transmit > Remote Control Support > Driver version : 4.10.0 > Available Logical Addresses: 4 > Physical Address : 1.0.0.0 > Logical Address Mask : 0x0002 > CEC Version : 1.4 > Vendor ID : 0x000c03 (HDMI) > OSD Name : 'Record' > Logical Addresses : 1 (Allow RC Passthrough) > Logical Address : 1 (Recording Device 1) > Primary Device Type : Record > Logical Address Type : Record > > Monitor All mode is not supported, falling back to regular monitoring > > Event: State Change: PA: 1.0.0.0, LA mask: 0x0002 > Transmitted by Recording Device 1 to all (1 to 15): > CEC_MSG_REPORT_PHYSICAL_ADDR (0x84): > phys-addr: 1.0.0.0 > prim-devtype: record (0x01) > Received from TV to Recording Device 1 (0 to 1): > CEC_MSG_GIVE_DEVICE_VENDOR_ID (0x8c) > Transmitted by Recording Device 1 to all (1 to 15): > CEC_MSG_DEVICE_VENDOR_ID (0x87): > vendor-id: 3075 (0x00000c03) > Received from TV to Recording Device 1 (0 to 1): CEC_MSG_GIVE_OSD_NAME > (0x46) > Transmitted by Recording Device 1 to TV (1 to 0): CEC_MSG_SET_OSD_NAME > (0x47): > name: Record > Received from TV to Recording Device 1 (0 to 1): > CEC_MSG_VENDOR_COMMAND_WITH_ID: > vendor-id: 240 (0x000000f0) > vendor-specific-data: 0x23 > Transmitted by Recording Device 1 to TV (1 to 0): CEC_MSG_FEATURE_ABORT > (0x00): > abort-msg: 160 (0xa0) > reason: unrecognized-op (0x00) > Received from TV to Recording Device 1 (0 to 1): CEC_MSG_GET_CEC_VERSION > (0x9f) > Transmitted by Recording Device 1 to TV (1 to 0): CEC_MSG_CEC_VERSION > (0x9e): > cec-version: version-1-4 (0x05) > > But when I switch to the CEC source, I do see a set of state queries, > including the MENU_REQUEST > message. > > Received from TV to Recording Device 1 (0 to 1): > CEC_MSG_GIVE_DEVICE_POWER_STATUS (0x8f) > Transmitted by Recording Device 1 to TV (1 to 0): > CEC_MSG_REPORT_POWER_STATUS (0x90): > pwr-state: on (0x00) > Received from TV to Recording Device 1 (0 to 1): > CEC_MSG_GIVE_PHYSICAL_ADDR (0x83) > Transmitted by Recording Device 1 to all (1 to 15): > CEC_MSG_REPORT_PHYSICAL_ADDR (0x84): > phys-addr: 1.0.0.0 > prim-devtype: record (0x01) > Received from TV to all (0 to 15): CEC_MSG_SET_STREAM_PATH (0x86): > phys-addr: 1.0.0.0 > Transmitted by Recording Device 1 to all (1 to 15): > CEC_MSG_ACTIVE_SOURCE (0x82): > phys-addr: 1.0.0.0 > Received from TV to Recording Device 1 (0 to 1): CEC_MSG_MENU_REQUEST > (0x8d): > menu-req: query (0x02) > Transmitted by Recording Device 1 to TV (1 to 0): CEC_MSG_MENU_STATUS > (0x8e): > menu-state: activated (0x00) > Received from TV to Recording Device 1 (0 to 1): > CEC_MSG_GIVE_DECK_STATUS (0x1a): > status-req: on (0x01) > Transmitted by Recording Device 1 to TV (1 to 0): CEC_MSG_FEATURE_ABORT > (0x00): > abort-msg: 26 (0x1a) > reason: unrecognized-op (0x00) > > As shown, the menu state returned is activated and I am seeing > > I suspect that this failed earlier because I already had the source set > to this input (logical address?) and the television didn't update things. > >> Again, you must configure the cec adapter with: >> >> cec-ctl --record --cec-version-1.4 >> > > Right. The same sequence as above but without the --cec-version-1.4 flag > generates a FEATURE_ABORT message: > > Received from TV to Recording Device 1 (0 to 1): CEC_MSG_MENU_REQUEST > (0x8d): > menu-req: query (0x02) > Transmitted by Recording Device 1 to TV (1 to 0): CEC_MSG_FEATURE_ABORT > (0x00): > abort-msg: 141 (0x8d) > reason: unrecognized-op (0x00) > > And it doesn't allow the arrow or function keys through. > > Re-running cec-ctl with the 1.4 flag and forcing a routing switch does > cause a repeat of the MENU_REQUEST query, but it's still rejected unless > I also restart cec-follower: That's correct: cec-follower reads the adapter configuration when it is started and will not see later configuration changes. > > Received from TV to Recording Device 1 (0 to 1): CEC_MSG_MENU_REQUEST > (0x8d): > menu-req: query (0x02) > Transmitted by Recording Device 1 to TV (1 to 0): CEC_MSG_FEATURE_ABORT > (0x00): > abort-msg: 141 (0x8d) > reason: unrecognized-op (0x00) > >> otherwise it won't work (I'm not sure that's correct since the TV isn't >> CEC 2.0, I'll have to read up on that). I'll look into this. The follower code currently checks if the CEC adapter uses a CEC version < 2.0, but I think it should only fail if both the remote AND the local CEC devices have CEC version 2.0. > > Thanks again for your help. My pleasure. Let me know if you find more issues, Also take a look at cec-compliance: it is by no means a complete compliance test since we - Cisco - focused on the parts we need and made only very light coverage of the other parts. So patches improving it are welcome. It's a very new little subsystem, so it is certainly possible that there are bugs or missing features, either in the kernel or in the utilities. Regards, Hans