On Sat, Apr 1, 2023 at 3:55 PM Shawn Lindberg <shawn.lindberg@xxxxxxxxx> wrote: > > On Sat, Apr 1, 2023 at 3:17 AM Hans Verkuil <hverkuil@xxxxxxxxx> wrote: > > > > On 31/03/2023 22:23, Shawn Lindberg wrote: > > > On Wed, Mar 29, 2023 at 2:56 PM Shawn Lindberg <shawn.lindberg@xxxxxxxxx> wrote: > > >> > > >> On Tue, Mar 28, 2023 at 2:58 AM Hans Verkuil <hverkuil@xxxxxxxxx> wrote: > > >>> > > >>>> cec-ctl -d0 --tv --cec-version-1.4 > > >>> > > >>> That's wrong, the RPi is a Playback device, not a TV. So use --playback instead. > > >>> > > >>> You should also add this line to the config.txt: > > >>> > > >>> hdmi_ignore_cec=1 > > >>> > > >>> otherwise the RPi's firmware tries to process CEC messages as well. > > >> > > >> Oh, I thought that the TV/playback command was indicating what sort of > > >> device the connected device is. This wasn't clear from the man page, > > >> either. Thank you for that. I made the change to config.txt and > > >> strangely when the RPi rebooted (I have it set to do this > > >> automatically once a day) the projector automatically turned on. I > > >> have never experienced this before. > > > > > > Further update on this. I continue to see the projector automatically > > > power on every time the RPi does its daily reboot, so I think I may > > > have to remove the hdmi_ignore_cec from the config.txt. Especially > > > since I can't figure out how to reliably shut the projector back off > > > again. > > > > From what I can tell, the Raspberry Pi doesn't transmit anything over CEC > > at boot time, regardless of whether hdmi_ignore_cec is present or not. > > That's with a Raspberry Pi 4B. It might be different for an RPi 3. > > That is strange. I am also using a Raspberry Pi 4B. I do have the > following changes to my config.txt: > > # uncomment if hdmi display is not detected and composite is being output > hdmi_force_hotplug=1 > > # uncomment to force a specific HDMI mode (this will force VGA) > hdmi_group=1 > hdmi_mode=16 > > # Additional line added to prevent firmware from processing CEC messages. > hdmi_ignore_cec=1 > > > > >>>> During this time, if I try to poll the projector, it will succeed. > > >>>> However, if I monitor events, after a significant amount of time > > >>>> (appears to be greater than 20 minutes, although this is difficult to > > >>>> verify because of how long it takes) I go will eventually see the > > >>>> following: > > >>>> > > >>>> Event: State Change: PA: 1.0.0.0, LA mask: 0x0000, Conn Info: yes > > >>>> Timestamp: 30981.428s > > >>> > > >>> Now it appears to be able to read the EDID again and it has a valid > > >>> physical address. > > >>> > > >>>> Transmitted by Specific to Specific (14 to 14): POLL > > >>>> Tx, Not Acknowledged (4), Max Retries > > >>>> Sequence: 21 Tx Timestamp: 30981.561s Tx, Not Acknowledged (4), Max Retries > > >>>> > > >>>> Event: State Change: PA: 1.0.0.0, LA mask: 0x4000, Conn Info: yes > > >>>> Timestamp: 30981.561s > > >>>> Transmitted by Specific to all (14 to 15): REPORT_PHYSICAL_ADDR (0x84): > > >>>> phys-addr: 1.0.0.0 > > >>>> prim-devtype: tv (0x00) > > >>>> Sequence: 22 Tx Timestamp: 30981.696s > > >>>> Transmitted by Specific to all (14 to 15): DEVICE_VENDOR_ID (0x87): > > >>>> vendor-id: 3075 (0x00000c03) > > >>>> Sequence: 23 Tx Timestamp: 30981.835s > > >>>> Received from TV to Specific (0 to 14): FEATURE_ABORT (0x00): > > >>>> abort-msg: 132 (0x84, REPORT_PHYSICAL_ADDR) > > >>>> reason: invalid-op (0x03) > > >>>> Sequence: 0 Rx Timestamp: 30981.949s > > >>>> Received from TV to Specific (0 to 14): GIVE_OSD_NAME (0x46) > > >>>> Sequence: 0 Rx Timestamp: 30982.026s > > >>>> Transmitted by Specific to TV (14 to 0): SET_OSD_NAME (0x47): > > >>>> name: TV > > >>>> Sequence: 24 Tx Timestamp: 30982.137s > > >>>> > > >>>> After this point in time the standby command will succeed and the > > >>>> projector will turn off. It's quite inconvenient to have to wait over > > >>>> 20 minutes to turn the projector back off again. Any idea how I can > > >>>> shorten this delay? > > >>> > > >>> There is something weird about your setup and EDID. I can't really tell > > >>> what it is. > > >> > > >> After making the above changes and retesting, the behavior didn't > > >> change. I still get the device not connected message and the invalid > > >> physical address when I try to do standby. I should also note that one > > >> way around this issue is to reboot the RPi. For some reason that seems > > >> to get around the long delay in getting the physical address. > > >> > > >> I don't know what would be strange about my set up other than the > > >> projector itself and a couple of lines I uncommented in the config.txt > > >> to set the RPi to use HDMI even if the projector is not on at the time > > >> of booting. Is there more information I can provide that would allow > > >> us to figure out what's going on? If you are correct that for some > > >> reason it is just not reading the EDID, is there a way to manually > > >> provide that? I don't know much about it, but it's a static property > > >> of the device (the projector in this case), right? > > > > > > Since I noticed that the physical address is populated properly when > > > the RPi is booted while the projector is turned on, I did that and > > > then tried using the get-edid utility to see if I could read the EDID > > > block and save it to a file. Unfortunately, this didn't work, as the > > > utility reports that there was no EDID available on any of the buses. > > > So once again I am out of ideas. > > > > The EDID also appears in /sys: > > > > /sys/devices/platform/gpu/drm/card1/card1-HDMI-A-1/edid > > /sys/devices/platform/gpu/drm/card1/card1-HDMI-A-2/edid > > > > get-edid works fine on my RPi 4B, so if that doesn't work, then it really > > looks like there is something weird going on with your projector. > > Thank you for that. Based on this information with the projector on > during boot, I was able to get the following output from parse-edid. I > did not copy the entire output, just a snippet to indicate that it is > able to get a valid EDID at boot time. > > cat /sys/devices/platform/gpu/drm/card1/card1-HDMI-A-1/edid | parse-edid > Checksum Correct > > Section "Monitor" > Identifier "LG PROJECTOR" > ModelName "LG PROJECTOR" > VendorName "GSM" > # Monitor Manufactured week 33 of 2017 > # EDID version 1.3 > # Digital Display > DisplaySize 1600 900 > Gamma 2.20 > Option "DPMS" "false" > Horizsync 30-83 > VertRefresh 58-62 > # Maximum pixel clock is 160MHz > #Not giving standard mode: 640x480, 60Hz > > In summary, it seems that at boot time and after waiting an extended > amount of time after turning on the projector using the image-view-on > command, the EDID file is available and valid. So although my > projector may be strange, I am guessing that there must be a way to > manually provide the EDID file, force the physical address, or some > other workaround/solution. However, I'm certainly no expert in this > area so I would defer to those of you who are. I finally found some more time to experiment with this, and I tried saving a copy of the EDID while it was available after the machine rebooted and the projector automatically turned on. Unsurprisingly, after I turned the projector off using standby and then turned it back on using image-view-on, the EDID was not available from /sys/devices/platform/gpu/drm/card1/card1-HDMI-A-1/edid. So I tried the following command to see if I could get the physical address to update from the saved EDID. cec-ctl -d0 -t0 -T --phys-addr-from-edid projector_edid CEC_ADAP_G_CAPS returned 0 (Success) The CEC adapter doesn't allow setting the physical address manually, ignore this option. CEC_ADAP_S_PHYS_ADDR returned -1 (Inappropriate ioctl for device) CEC_ADAP_G_PHYS_ADDR returned 0 (Success) CEC_ADAP_G_LOG_ADDRS returned 0 (Success) CEC_ADAP_G_CONNECTOR_INFO returned 0 (Success) I'm not really sure why this would be the case.