VFD only shows CE4 rather than time

Hi,
I’m trying to get the VFD working on my device. Once I add the correct vfd.conf file, the display just shows CE4.
After some digging, I noticed in the /usr/sbin/OpenVFDService/openvfd-start file, the command that starts the openvfd service shows the CoreElec version:
/usr/sbin/OpenVFDService $OS_SPLASH_OPT ${clock_12h_format:+-12h}

If I can remove the $OS_SPLASH_OPT parameter, this will work fine, but this file resides in a readonly part of the filesystem. Is there a way I can fix this in order to display the time correctly?

I´m having the exact same problem, I have read somewhere that the CE version is supposed to be displayed for some seconds on boot and then the clock must be displayed, but for some reason it is not working that way.

I have the exact same problem in a S905X box and in a S905X3 box with proven VFD archives.

OK - have a workaround.
In /storage/.config/system.d I created an openvfd.service file

In that file, I added the following:

[Unit]
Description=OpenVFD Service
ConditionPathExists=/proc/device-tree/openvfd/
After=local-fs.target

[Service]
ExecStart=/storage/.config/openvfd-start
ExecStop=/bin/kill -TERM $MAINPID
ExecStopPost=-/usr/sbin/rmmod openvfd
RemainAfterExit=yes

[Install]
WantedBy=basic.target

I then created this file /storage/.config/openvfd-start, with the following content:

#!/bin/sh
OSRELEASEFILE="/etc/os-release"
USRCONFFILE="/storage/.config/vfd.conf"
SYSCONFDIR="/etc/openvfd.conf.d"
PROC_DT="/proc/device-tree"
DT_ID=$(dtname)

case $DT_ID in 
  *odroid_hc4*)
    SYSCONFFILE="$SYSCONFDIR/hc4.conf"
    ;;
esac                                                                                                                                                                                                                                            
if [ "$(tr -d '\0' < $PROC_DT/openvfd/compatible)" = "open,vfd" ]; then
  if [ -f "$USRCONFFILE" ]; then
    source "$USRCONFFILE"
  elif [ -f "$SYSCONFFILE" ]; then
    source "$SYSCONFFILE"
  else
    exit 0
  fi
  OS_SPLASH_OPT=""
  if [ -f "$OSRELEASEFILE" ]; then
    source "$OSRELEASEFILE"
    OS_SPLASH_OPT="-s CE${VERSION_ID%%.*}"
  fi
  /sbin/modprobe openvfd vfd_gpio_clk=${vfd_gpio_clk} \
                 vfd_gpio_dat=${vfd_gpio_dat} \
                 vfd_gpio_stb=${vfd_gpio_stb:-0,0,0xFF} \
                 vfd_gpio0=${vfd_gpio0:-0,0,0xFF} \
                 vfd_gpio1=${vfd_gpio1:-0,0,0xFF} \
                 vfd_gpio2=${vfd_gpio2:-0,0,0xFF} \
                 vfd_gpio3=${vfd_gpio3:-0,0,0xFF} \
                 vfd_gpio_protocol=${vfd_gpio_protocol:-0,0} \
                 vfd_chars=${vfd_chars} vfd_dot_bits=${vfd_dot_bits} \
                 vfd_display_type=${vfd_display_type}
  /usr/sbin/OpenVFDService ${clock_12h_format:+-12h}
fi    

This works around the read only aspects of the main filesystem, and allows you to customise services

1 Like

Binaries in /emuelec/bin and /emuelec/sbin should take priority before those in /usr/sbin, and they’re in writable partitions.

Also, systemd units in /storage/.config/system.d (maybe wrong folder name, don’t remember correctly) should take priority than those in /usr/lib/systemd/system, so you can copy the service that provides it and edit it in the writable /storage/.config/system.d

This.
I posted a solution just before - just waiting for the spam filter to unblock it :wink:

1 Like

It works!!!
Thank you very much

P.D: It´s working in EE4.6 and in the new EE4.6 HybridELEC. Thanks for the update @7Ji

1 Like

Mine is S905X4 with 4.6 Version as this ways can not work , these two files "openvfd.service"and “openvfd-start” just need creat that with notepad++ ? and what is the format it is ? .sh files or .conf files ? thank you so much

thanks so much can not wrok now

@LEOH keep the file extensions as they are. Are you saying it now works or does not work still?

Still not work friend still shows the CE 4

Hi, I have registered only to share my hotfix.
You just need to kill OpenVFDService that includes $OS_SPLASH_OPT ${clock_12h_format:+-12h} and launch a new service with only ${clock_12h_format:+-12h}. You can do this through custom_start.sh file located in \emuelec\Configfiles adding the next lines anywhere:

killall OpenVFDService
OpenVFDService ${clock_12h_format:+-12h}

I prefer to add them at the end, just after the line # Any commands that you want to run after the frontend has started goes here so emuelec has time enought to connect to wifi and take the right local time before showing it in the display.
With this solution emuelec 4.6 still boots showing CE4 but once you are in ES you should see the local time in your Vontar x3 display.