Jump to content

Recommended Posts

Posted (edited)

Hi Mark

 

Modify your /boot/dtb/allwinner/overlay/openvfd.dts .

 

You need to change the display-type. I can't really tell by the image you took which chip the display is using. If you can check again. It's the chip beside the LED display.

https://github.com/arthur-liberman/vfd-configurations/?tab=readme-ov-file#display-type

 

Try this see what happens... ( ID=01, A display like on the Sunvell T95m. It is similar to T95U, but the icons are positioned differently, and the digits are "upside down".)

 

openvfd_display_type = <0x01000000>;

Edited by Nick A
<
Posted (edited)
20 hours ago, Nick A said:

openvfd_display_type = <0x01000000>;

 Hi Nick,

 

that didn't work but thanks for the suggestion.

 

I now have a clock of sorts just showing the basic 12:15 format with a flashing cursor but I do not get the WIFI, ETHERNET, OR BOOT

 

Where I was going wrong was that I should have recompiled the dts file after making any changes and then rebooting the box

 

/boot/dtb/allwinner/overlay/openvfd.dts

 

recompile using this command

armbian-add-overlay /boot/dtb/allwinner/overlay/openvfd.dts

 and then reboot

 

My contents of 

/boot/dtb/allwinner/overlay/openvfd.dts

 

/dts-v1/;
/plugin/;
/ {
   fragment@0 {
      target-path = "/";
      __overlay__ {
         openvfd {
                compatible = "open,vfd";
                dev_name = "openvfd";
                openvfd_gpio_clk = <&pio 8 11 0>;
                openvfd_gpio_dat = <&pio 8 12 0>;
                vfd_gpio_chip_name = "0300b000.pinctrl";
                openvfd_chars = [03 01 02 03 04];
                openvfd_dot_bits = [00 01 02 03 04 05 06];
                openvfd_display_type = <0x03000001>;
                status = "okay";
         };
      };
   };
};

 

I don't understand the logic of :

openvfd_Characters =

openvfd_dot_bits =

openvdf_display type =

 

It seems to have a mind of its own,

 

I think this gives me a display.type = 1, display.controller = 3

 

openvfd_display_type = <0x03000001>;

 

 

I can't get my head around the logic

 

#chars:
# < DHHMM > Order of display chars (D=dots, represented by a single char)

vfd_chars='0,4,3,2,1'
  
#dot_bits:
# Order of dot bits. Typical configurations:
# Display Type 0, 1 usually has Alarm, USB, Play, Pause, Col, Ethernet, Wifi dots
# Alarm = 0, USB = 1, Play = 2, Pause = 3, Col = 4, Eth = 5, Wifi = 6
# Display Type 2 usually has APPS, USB, SETUP, CARD, Col, HDMI, CVBS dots
# APPS = 0, USB = 1, SETUP = 2, CARD = 3, Col = 4, HDMI = 5, CVBS = 6
# Display Type 3 Power, LAN, Col, Low Wifi, High Wifi
# N/A = 0, N/A = 1, Power = 2, LAN = 3, Col = 4, Low Wifi = 5, High Wifi = 6

vfd_dot_bits='0,1,2,3,4,5,6'

#display_type:
# [0] - Display type.
# [1] - Reserved - must be 0..
# [2] - Flags. (bit 0 = '1' - Common Anode display)
# [3] - Controller.

vfd_display_type='0x01,0x00,0x00,0x03'

 

I assume the other characters can be shown but I cannot work that out at the moment - and I am assuming the word "Boot" is loaded to the screen - How it achieves that I don't know - I would have thought that would have been contrrolled by the driver.

 

I may be out on a limb on that theory.

 

Ah well a little more progress today...

Edited by Mark Waples
Posted (edited)

Can you look for the display controller chip on your board. This will at least give us a starting point. Then we can find other boards with a similar chip. Also, a picture of your front display would help.

 

This README describes the values better.

 https://github.com/arthur-liberman/vfd-configurations/blob/master/README.md

 

I forgot about the command armbian-add-overlay. When I was playing with openvfd I didn't use an overlay file. I added the openvfd node directly to my boards dts. I didn't need to make any changes because I used the original openvfd settings.   

Edited by Nick A
Posted
12 hours ago, Nick A said:

Can you look for the display controller chip on your board. This will at least give us a starting point. Then we can find other boards with a similar chip. Also, a picture of your front display would help.

 

This README describes the values better.

 https://github.com/arthur-liberman/vfd-configurations/blob/master/README.md

 

I forgot about the command armbian-add-overlay. When I was playing with openvfd I didn't use an overlay file. I added the openvfd node directly to my boards dts. I didn't need to make any changes because I used the original openvfd settings.   

 

 

Hi Nick,

 

thank you for the reply.

 

The LED driver chip is a AIP650E0 and here is the LED Display - wifi/network - clock - USB

 

Display.thumb.jpg.dddfd70043d6083f40dcab1eab2fe805.jpg

Posted (edited)

I'm pretty sure your controller is FD650 ID=3. 

 

I found this forum thread. Someone had a similar LED Display like yours. HAV's posted a few pictures of his display. I don't think he had PLAY/PAUSE icons because there's not enough room on his display. "The only icon that doesn’t work now is the play/pause one. I also can’t test the wifi because it doesn’t work." 

https://discourse.coreelec.org/t/how-to-configure-vfd/427/924

 

If we still have issues after playing around with the dot_bits. We might need to add another Display Type with only WIFI, Ethernet, Col, USB icons.

https://github.com/arthur-liberman/linux_openvfd/blob/master/driver/controllers/fd650.c

static void fd650_set_icon(const char *name, unsigned char state)
{
	struct vfd_dtb_config *dtb = &dev->dtb_active;
	switch (dtb->display.type) {
	case DISPLAY_TYPE_5D_7S_NORMAL:
	case DISPLAY_TYPE_5D_7S_T95:
	case DISPLAY_TYPE_5D_7S_G9SX:
		if (strncmp(name,"alarm",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_ALARM]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_ALARM]);
		} else if (strncmp(name,"usb",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_USB]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_USB]);
		} else if (strncmp(name,"play",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_PLAY]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_PLAY]);
		} else if (strncmp(name,"pause",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_PAUSE]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_PAUSE]);
		} else if (strncmp(name,"colon",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_SEC]);
		} else if (strncmp(name,"eth",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_ETH]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_ETH]);
		} else if (strncmp(name,"wifi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_WIFI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_WIFI]);
		}
		break;
	case DISPLAY_TYPE_5D_7S_X92:
		if (strncmp(name,"apps",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_APPS]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_APPS]);
		} else if (strncmp(name,"setup",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_SETUP]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_SETUP]);
		} else if (strncmp(name,"usb",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_USB]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_USB]);
		} else if (strncmp(name,"sd",2) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_CARD]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_CARD]);
		} else if (strncmp(name,"colon",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_SEC]);
		} else if (strncmp(name,"hdmi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_HDMI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_HDMI]);
		} else if (strncmp(name,"cvbs",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_CVBS]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_CVBS]);
		}
		break;
	case DISPLAY_TYPE_5D_7S_ABOX:
		if (strncmp(name,"power",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_POWER]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_POWER]);
		} else if (strncmp(name,"eth",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_LAN]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_LAN]);
		} else if (strncmp(name,"colon",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_SEC]);
		} else if (strncmp(name,"wifi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_WIFIHI] | dtb->led_dots[LED_DOT3_WIFILO]) : (dev->status_led_mask & ~(dtb->led_dots[LED_DOT3_WIFIHI] | dtb->led_dots[LED_DOT3_WIFILO]));
		}
		break;
	case DISPLAY_TYPE_5D_X96_X9:
		if (strncmp(name,"apps",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_APPS]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT5_APPS]);
		} else if (strncmp(name,"usb",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_USB]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT5_USB]);
		} else if (strncmp(name,"sd",2) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_CARD]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT5_CARD]);
		} else if (strncmp(name,"colon",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT5_SEC]);
		} else if (strncmp(name,"eth",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_ETH]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT5_ETH]);
		} else if (strncmp(name,"wifi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_WIFIHI] | dtb->led_dots[LED_DOT5_WIFILO]) : (dev->status_led_mask & ~(dtb->led_dots[LED_DOT5_WIFIHI] | dtb->led_dots[LED_DOT5_WIFILO]));
		}
		break;
	case DISPLAY_TYPE_5D_7S_M9_PRO:
		if (strncmp(name,"b-t",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_BT]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_BT]);
		} else if (strncmp(name,"eth",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_ETH]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_ETH]);
		} else if (strncmp(name,"wifi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_WIFI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_WIFI]);
		} else if (strncmp(name,"spdif",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_SPDIF]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_SPDIF]);
		} else if (strncmp(name,"colon",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_SEC]);
		} else if (strncmp(name,"hdmi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_HDMI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_HDMI]);
		} else if (strncmp(name,"cvbs",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_AV]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_AV]);
		}
		break;
	default:
		if (strncmp(name,"colon",5) == 0)
			dev->status_led_mask = state ? (dev->status_led_mask | ledDots[LED_DOT_SEC]) : (dev->status_led_mask & ~ledDots[LED_DOT_SEC]);
		break;
	}
}

 

https://github.com/arthur-liberman/linux_openvfd/blob/master/driver/openvfd_drv.h

enum {
	DISPLAY_TYPE_5D_7S_NORMAL,	// T95U
	DISPLAY_TYPE_5D_7S_T95,		// T95K is different.
	DISPLAY_TYPE_5D_7S_X92,
	DISPLAY_TYPE_5D_7S_ABOX,
	DISPLAY_TYPE_FD620_REF,
	DISPLAY_TYPE_4D_7S_COL,
	DISPLAY_TYPE_5D_7S_M9_PRO,
	DISPLAY_TYPE_5D_7S_G9SX,
	DISPLAY_TYPE_4D_7S_FREESATGTC,
	DISPLAY_TYPE_5D_7S_TAP1,
	DISPLAY_TYPE_5D_X96_X9,
	DISPLAY_TYPE_MAX,
};

enum {
	LED_DOT1_ALARM,
	LED_DOT1_USB,
	LED_DOT1_PLAY,
	LED_DOT1_PAUSE,
	LED_DOT1_SEC,
	LED_DOT1_ETH,
	LED_DOT1_WIFI,
	LED_DOT1_MAX
};

enum {
	LED_DOT2_APPS,
	LED_DOT2_SETUP,
	LED_DOT2_USB,
	LED_DOT2_CARD,
	LED_DOT2_SEC,
	LED_DOT2_HDMI,
	LED_DOT2_CVBS,
	LED_DOT2_MAX
};

enum {
	LED_DOT3_UNUSED1,
	LED_DOT3_UNUSED2,
	LED_DOT3_POWER,
	LED_DOT3_LAN,
	LED_DOT3_SEC,
	LED_DOT3_WIFIHI,
	LED_DOT3_WIFILO,
	LED_DOT3_MAX
};

enum {
	LED_DOT4_BT,
	LED_DOT4_ETH,
	LED_DOT4_WIFI,
	LED_DOT4_SPDIF,
	LED_DOT4_SEC,
	LED_DOT4_HDMI,
	LED_DOT4_AV,
	LED_DOT4_MAX
};

enum {
	LED_DOT5_APPS,
	LED_DOT5_ETH,
	LED_DOT5_USB,
	LED_DOT5_CARD,
	LED_DOT5_SEC,
	LED_DOT5_WIFIHI,
	LED_DOT5_WIFILO,
	LED_DOT5_MAX
};

 

Edited by Nick A
Posted (edited)
18 hours ago, Nick A said:

If we still have issues after playing around with the dot_bits. We might need to add another Display Type with only WIFI, Ethernet, Col, USB icons.

 

Hi NIck,

 

I have tried all manner of combinations of dot-bits - to the point I must have re-booted about 100 times!!! :D

 

I'm pretty sure your controller is FD650 ID=3. 

 

I think you are correct

 

With this thread below I think they have updated their own resources but not fed that back to the original github for Openvfd https://github.com/arthur-liberman/linux_openvfd

 

I found this forum thread. Someone had a similar LED Display like yours. HAV's posted a few pictures of his display. I don't think he had PLAY/PAUSE icons because there's not enough room on his display. "The only icon that doesn’t work now is the play/pause one. I also can’t test the wifi because it doesn’t work." 

https://discourse.coreelec.org/t/how-to-configure-vfd/427/924

 

 

I have contacted Arthur-liberman for his comments:

 

https://github.com/arthur-liberman/vfd-configurations/issues/20

 

let's see what comes back and if needs be I am prepared to have a go at adding a new type of LED.

 

I guess it will have to be recompiled after changes are made to the source code.

 

Kind regards,

 

Mark

Edited by Mark Waples
Posted (edited)

I found another thread 

https://discourse.coreelec.org/t/how-to-configure-vfd/427/726

 

If you read the reply here. 

Quote

Thanks. I’ll have to think what can be done to enable the icons, it’s going to require driver changes. So it may take time.

https://discourse.coreelec.org/t/how-to-configure-vfd/427/732

 

 

Try these settings for chars and dot_bits.. This was the config they used. They didn't give us any details on the changes they made to the driver sources. Maybe the current driver already has the changes? We could message TheCoolest and ask him.

https://discourse.coreelec.org/uploads/short-url/6Lof0boBxj2HuBDGQ32mKN5Rka7.conf

# This file must be renamed to vfd.conf and placed in the /storage/.config/ folder.
#
# Tanix TX3 Mini - S905L configuration
#--------------------
#gpio_xxx:
# [0] 0 = &gpio, 1 = &gpio_ao.
# [1] pin number - https://github.com/openSUSE/kernel/blob/master/include/dt-bindings/gpio/meson-gxl-gpio.h
# [0] Reserved - must be 0.

vfd_gpio_clk='1,9,0'
vfd_gpio_dat='1,6,0'
vfd_gpio_stb='0,0,0xFF'

#chars:
# < DHHMM > Order of display chars (D=dots, represented by a single char)

vfd_chars='2,4,3,2,1'

#dot_bits:
# Order of dot bits. Typical configurations:
# Display Type 0, 1 usually has Alarm, USB, Play, Pause, Col, Ethernet, Wifi dots
# Alarm = 0, USB = 1, Play = 2, Pause = 3, Col = 4, Eth = 5, Wifi = 6
# Display Type 2 usually has APPS, USB, SETUP, CARD, Col, HDMI, CVBS dots
# APPS = 0, USB = 1, SETUP = 2, CARD = 3, Col = 4, HDMI = 5, CVBS = 6
# Display Type 3 Power, LAN, Col, Low Wifi, High Wifi
# N/A = 0, N/A = 1, Power = 2, LAN = 3, Col = 4, Low Wifi = 5, High Wifi = 6

# Position:   0 1 2 3 4 5 6
vfd_dot_bits='0,1,4,5,6,2,3'

#display_type:
# [0] - Display type.
# [1] - Reserved - must be 0..
# [2] - Flags. (bit 0 = '1' - Common Anode display)
# [3] - Controller.

vfd_display_type='0x01,0x00,0x00,0x03'

 

Edited by Nick A
Posted (edited)

Hi Nick,

 

that didn't work but thanks for the suggestion.

 

I think Coolest is the same person as arthur or is using the same url?

 

The Coreelc plugin is written in Python I think

 

I have attached a copy that I grabbed from the git

 

 

 

 

service.openvfd-1.0.6.tar

Edited by Mark Waples
Posted

Hi Nick, sorry for joining the conversation with a kinda unrelated topic,

 

I tried your image (24.11.0) in the transpeed h618 tv box and it worked without any issue however wifi doesnt seem to work.

 

I have to say that i havent tried much other than trying the desktop and server images, installing the network manager, etc.

 

Is there anything in particular that i need to do in order to get wifi working?, thanks in advance.

Posted (edited)

Hi AlexYMo99

Your transpeed box has a different wifi chip. Maybe this will help. Check your dmesg it will tell you which firmware you need. It's probably already included in armbian. Just needs a name change.

 

 

Edited by Nick A
Posted

Hi Nick

It just so happened that i stumbled uppon a comment of yours mentioning that, so i did exactly that (the only difference being that i did it by renaming and copying the files from the Libreelec github instead of just renaming them) and it worked!.

 

I was even able to flash it to the EMMC with no issues at the moment, the only thing is that the tv box seems to power on randomly after a couple of secconds or gives power to the usb after a while, but i thing that is not related to armbian.

 

Im planning to use it for klipper so it was amazing being able to make it work, you are amazing, really appreciate you man!

Posted (edited)

HI Nick

 

23 hours ago, Nick A said:

Hi Mark

 

It looks like that python script might be using these commands. Try these commands maybe they'll work for you. 

 

https://github.com/arthur-liberman/linux_openvfd/blob/9264588ba27a964a1e56346202901dd17f9e133d/led_control.txt

 

I think that when I compile linux_openvfd it performs a cleanup and removes the *ko files

 

clean:                    
	        rm -rf  *.o *.ko .tmp_versions *.mod.c modules.order  Module.symvers ssd253x-ts.* 

 

 

The instructions state:

 

Execution instructions:
insmod openvfd.ko
./OpenVFDService &	(run OpenVFDService Daemon to show time)
./OpenVFDService -t &	(run OpenVFDService Daemon in test mode)

Turn led indicators on/off:

1. Alarm led:
echo alarm > /sys/class/leds/openvfd/led_on
echo alarm > /sys/class/leds/openvfd/led_off

2. WiFi led:
echo wifi > /sys/class/leds/openvfd/led_on
echo wifi > /sys/class/leds/openvfd/led_off

3. Ethernet led:
echo eth > /sys/class/leds/openvfd/led_on
echo eth > /sys/class/leds/openvfd/led_off

4. Pause led:
echo pause > /sys/class/leds/openvfd/led_on
echo pause > /sys/class/leds/openvfd/led_off

5. Play led:
echo play > /sys/class/leds/openvfd/led_on
echo play > /sys/class/leds/openvfd/led_off

6. USB led:
echo usb > /sys/class/leds/openvfd/led_on
echo usb > /sys/class/leds/openvfd/led_off

7. Apps led:
echo apps > /sys/class/leds/openvfd/led_on
echo apps > /sys/class/leds/openvfd/led_off

8. Setup led:
echo setup > /sys/class/leds/openvfd/led_on
echo setup > /sys/class/leds/openvfd/led_off

9. Card led:
echo sd > /sys/class/leds/openvfd/led_on
echo sd > /sys/class/leds/openvfd/led_off

10. HDMI led:
echo hdmi > /sys/class/leds/openvfd/led_on
echo hdmi > /sys/class/leds/openvfd/led_off

11. CVBS led:
echo cvbs > /sys/class/leds/openvfd/led_on
echo cvbs > /sys/class/leds/openvfd/led_off

Note: Some displays have indicators 1 - 6, and others 6 - 11.
There is no overlap, and you can't trigger an indicator that
does not exist on your display type.

 

If I try and install the module into the kernal as per instructions as Insmod openvfd.ko

 

root@transpeed-8k618-t:~# insmod openvfd.ko
insmod: ERROR: could not load module openvfd.ko: No such file or directory

 

And the useage is vague?

 

I guess each icon is a number - but how you would call that out, unless it's controlled by the dts configuration?

 

Kind regards,

 

Mark

Edited by Mark Waples

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines