PfSense on a Celestix S-X MSA 4000
-
Hey everyone,
Just enquiring if anybody has any success in installing pfSense on Celestix MSA Security Appliance MSA4000 device with a working 40x2 character LCD display + Jog Dial?
Celestix MSA4000 Specifications:
OS Provided OS Provided Microsoft Windows Server 2003Processor / Memory / Storage
Processors Installed Intel Pentium Dual Core
RAM Installed ( Max ) 2 GB DDR2 SDRAM
Hard Drive Standard - 80 GB x 1 - Serial ATA-300Expansion / Connectivity / Interfaces
6 x network - Ethernet 10Base-T/100Base-TX/1000Base-T - RJ-45
2 x serial - 9 pin D-Sub (DB-9)
3 x USB - 4 pin USB Type A
1 x VGANetworking
Form Factor Rack-mountable
Ports Qty 6
Connectivity Technology Wired
Data Transfer Rate 1 Gbps
Data Link Protocol Ethernet, Fast Ethernet, Gigabit Ethernet
Remote Management Protocol HTTP
Capacity Concurrent VPN tunnels : 500
Features Firewall protection, auto-sensing per device, VPN support, load balancing, Stateful Packet Inspection (SPI), content filtering, manageable, Intrusion Detection System (IDS)Thanks in advance.
-
Looks like an interesting box. I see it has a CF slot, flash a card and put it in there. Try it and see. :)
Looks like it might be possible: http://forum.pfsense.org/index.php/topic,44034.msg287034.html#msg287034
Steve
-
@stephenw10 Thanks for that info.
Finally managed to get pfSense amd64 version 2.1 up and running from the CompactFlash.
These units have a lot of potential because the BIOS is full read and write access so no BIOS flashing required, plenty of I/O available, SVGA, IDE, SATA, CF, mini-PCI slot, USB and com ports.
[2.1-RELEASE][root@pfSense.localdomain]/root(1): dmesg Copyright (c) 1992-2012 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 8.3-RELEASE-p11 #0: Wed Sep 11 19:29:56 EDT 2013 root@snapshots-8_3-amd64.builders.pfsense.org:/usr/obj.pfSense/usr/pfSensesrc/src/sys/pfSense_wrap.8.amd64 amd64 Timecounter "i8254" frequency 1193182 Hz quality 0 CPU: Intel(R) Pentium(R) D CPU 3.00GHz (2990.34-MHz K8-class CPU) Origin = "GenuineIntel" Id = 0xf65 Family = f Model = 6 Stepping = 5 Features=0xbfebfbff <fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,htt,tm,pbe>Features2=0xe49d <sse3,dtes64,mon,ds_cpl,est,cnxt-id,cx16,xtpr,pdcm>AMD Features=0x20100800 <syscall,nx,lm>AMD Features2=0x1 <lahf>TSC: P-state invariant real memory = 4294967296 (4096 MB) avail memory = 3340812288 (3186 MB) ACPI APIC Table: <intelr awrdacpi="">FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs FreeBSD/SMP: 1 package(s) x 2 core(s) cpu0 (BSP): APIC ID: 0 cpu1 (AP): APIC ID: 1 ioapic0: Changing APIC ID to 4 ioapic0 <version 2.0="">irqs 0-23 on motherboard wlan: mac acl policy registered ipw_bss: You need to read the LICENSE file in /usr/share/doc/legal/intel_ipw/. ipw_bss: If you agree with the license, set legal.intel_ipw.license_ack=1 in /boot/loader.conf. module_register_init: MOD_LOAD (ipw_bss_fw, 0xffffffff8041ca10, 0) error 1 ipw_ibss: You need to read the LICENSE file in /usr/share/doc/legal/intel_ipw/. ipw_ibss: If you agree with the license, set legal.intel_ipw.license_ack=1 in /boot/loader.conf. module_register_init: MOD_LOAD (ipw_ibss_fw, 0xffffffff8041cab0, 0) error 1 ipw_monitor: You need to read the LICENSE file in /usr/share/doc/legal/intel_ipw/. ipw_monitor: If you agree with the license, set legal.intel_ipw.license_ack=1 in /boot/loader.conf. module_register_init: MOD_LOAD (ipw_monitor_fw, 0xffffffff8041cb50, 0) error 1 cryptosoft0: <software crypto="">on motherboard padlock0: No ACE support. acpi0: <intelr awrdacpi="">on motherboard acpi0: [ITHREAD] acpi0: Power Button (fixed) acpi0: reservation of 0, a0000 (3) failed acpi0: reservation of 100000, cf5e0000 (3) failed Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000 acpi_timer0: <24-bit timer at 3.579545MHz> port 0x408-0x40b on acpi0 cpu0: <acpi cpu="">on acpi0 cpu1: <acpi cpu="">on acpi0 acpi_button0: <power button="">on acpi0 pcib0: <acpi host-pci="" bridge="">port 0xcf8-0xcff on acpi0 pci0: <acpi pci="" bus="">on pcib0 vgapci0: <vga-compatible display="">port 0xff00-0xff07 mem 0xfdf00000-0xfdf7ffff,0xd0000000-0xdfffffff,0xfdf80000-0xfdfbffff irq 16 at device 2.0 on pci0 pcib1: <acpi pci-pci="" bridge="">irq 16 at device 28.0 on pci0 pci1: <acpi pci="" bus="">on pcib1 em0: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0x8f00-0x8f1f mem 0xfd6e0000-0xfd6fffff irq 16 at device 0.0 on pci1 em0: Using an MSI interrupt em0: [FILTER] pcib2: <acpi pci-pci="" bridge="">irq 17 at device 28.1 on pci0 pci2: <acpi pci="" bus="">on pcib2 em1: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0x7f00-0x7f1f mem 0xfd2e0000-0xfd2fffff irq 17 at device 0.0 on pci2 em1: Using an MSI interrupt em1: [FILTER] pcib3: <acpi pci-pci="" bridge="">irq 18 at device 28.2 on pci0 pci3: <acpi pci="" bus="">on pcib3 em2: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0xdf00-0xdf1f mem 0xfdee0000-0xfdefffff irq 18 at device 0.0 on pci3 em2: Using an MSI interrupt em2: [FILTER] pcib4: <acpi pci-pci="" bridge="">irq 19 at device 28.3 on pci0 pci4: <acpi pci="" bus="">on pcib4 em3: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0xcf00-0xcf1f mem 0xfdce0000-0xfdcfffff irq 19 at device 0.0 on pci4 em3: Using an MSI interrupt em3: [FILTER] pcib5: <acpi pci-pci="" bridge="">irq 16 at device 28.4 on pci0 pci5: <acpi pci="" bus="">on pcib5 em4: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0xaf00-0xaf1f mem 0xfdae0000-0xfdafffff irq 16 at device 0.0 on pci5 em4: Using an MSI interrupt em4: [FILTER] pcib6: <acpi pci-pci="" bridge="">irq 17 at device 28.5 on pci0 pci6: <acpi pci="" bus="">on pcib6 em5: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0x9f00-0x9f1f mem 0xfd8e0000-0xfd8fffff irq 17 at device 0.0 on pci6 em5: Using an MSI interrupt em5: [FILTER] uhci0: <intel 82801g="" (ich7)="" usb="" controller="" usb-a="">port 0xfe00-0xfe1f irq 23 at device 29.0 on pci0 uhci0: [ITHREAD] usbus0: <intel 82801g="" (ich7)="" usb="" controller="" usb-a="">on uhci0 uhci1: <intel 82801g="" (ich7)="" usb="" controller="" usb-b="">port 0xfd00-0xfd1f irq 19 at device 29.1 on pci0 uhci1: [ITHREAD] usbus1: <intel 82801g="" (ich7)="" usb="" controller="" usb-b="">on uhci1 uhci2: <intel 82801g="" (ich7)="" usb="" controller="" usb-c="">port 0xfc00-0xfc1f irq 18 at device 29.2 on pci0 uhci2: [ITHREAD] usbus2: <intel 82801g="" (ich7)="" usb="" controller="" usb-c="">on uhci2 uhci3: <intel 82801g="" (ich7)="" usb="" controller="" usb-d="">port 0xfb00-0xfb1f irq 16 at device 29.3 on pci0 uhci3: [ITHREAD] usbus3: <intel 82801g="" (ich7)="" usb="" controller="" usb-d="">on uhci3 ehci0: <intel 82801gb="" r="" (ich7)="" usb="" 2.0="" controller="">mem 0xfdfff000-0xfdfff3ff irq 23 at device 29.7 on pci0 ehci0: [ITHREAD] usbus4: EHCI version 1.0 usbus4: <intel 82801gb="" r="" (ich7)="" usb="" 2.0="" controller="">on ehci0 pcib7: <acpi pci-pci="" bridge="">at device 30.0 on pci0 pci7: <acpi pci="" bus="">on pcib7 pci7: <encrypt decrypt,="" network="" computer="" crypto="">at device 2.0 (no driver attached) isab0: <pci-isa bridge="">at device 31.0 on pci0 isa0: <isa bus="">on isab0 atapci0: <intel ich7="" udma100="" controller="">port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xf800-0xf80f at device 31.1 on pci0 ata0: <ata channel="">at channel 0 on atapci0 ata0: [ITHREAD] atapci1: <intel ich7="" sata300="" controller="">port 0xf700-0xf707,0xf600-0xf603,0xf500-0xf507,0xf400-0xf403,0xf300-0xf30f mem 0xfdffc000-0xfdffc3ff irq 19 at device 31.2 on pci0 atapci1: [ITHREAD] ata2: <ata channel="">at channel 0 on atapci1 ata2: [ITHREAD] ata3: <ata channel="">at channel 1 on atapci1 ata3: [ITHREAD] pci0: <serial bus,="" smbus="">at device 31.3 (no driver attached) acpi_tz0: <thermal zone="">on acpi0 atrtc0: <at realtime="" clock="">port 0x70-0x73 irq 8 on acpi0 uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0 uart0: [FILTER] uart0: console (9600,n,8,1) uart1: <16550 or compatible> port 0x2f8-0x2ff irq 3 on acpi0 uart1: [FILTER] orm0: <isa option="" rom="">at iomem 0xef000-0xeffff on isa0 ppc0: cannot reserve I/O port range acpi_perf0: <acpi cpu="" frequency="" control="">on cpu0 Timecounters tick every 10.000 msec IPsec: Initialized Security Association Processing. usbus0: 12Mbps Full Speed USB v1.0 usbus1: 12Mbps Full Speed USB v1.0 ugen0.1: <intel>at usbus0 uhub0: <intel 1="" 9="" uhci="" root="" hub,="" class="" 0,="" rev="" 1.00="" 1.00,="" addr="">on usbus0 ugen1.1: <intel>at usbus1 uhub1: <intel 1="" 9="" uhci="" root="" hub,="" class="" 0,="" rev="" 1.00="" 1.00,="" addr="">on usbus1 usbus2: 12Mbps Full Speed USB v1.0 usbus3: 12Mbps Full Speed USB v1.0 ugen2.1: <intel>at usbus2 uhub2: <intel 1="" 9="" uhci="" root="" hub,="" class="" 0,="" rev="" 1.00="" 1.00,="" addr="">on usbus2 ugen3.1: <intel>at usbus3 uhub3: <intel 1="" 9="" uhci="" root="" hub,="" class="" 0,="" rev="" 1.00="" 1.00,="" addr="">on usbus3 usbus4: 480Mbps High Speed USB v2.0 ad0: 3823MB <ts4gcf133 20110407="">at ata0-master PIO4 ugen4.1: <intel>at usbus4 uhub4: <intel 1="" 9="" ehci="" root="" hub,="" class="" 0,="" rev="" 2.00="" 1.00,="" addr="">on usbus4 uhub0: 2 ports with 2 removable, self powered SMP: AP CPU #1 Launched! uhub1: 2 ports with 2 removable, self powered uhub2: 2 ports with 2 removable, self powered uhub3: 2 ports with 2 removable, self powered Root mount waiting for: usbus4 Root mount waiting for: usbus4 Root mount waiting for: usbus4 Root mount waiting for: usbus4 uhub4: 8 ports with 8 removable, self powered Trying to mount root from ufs:/dev/ufs/pfsense0 ugen1.2: <vendor 0x0cb6="">at usbus1 em5: link state changed to UP pflog0: promiscuous mode enabled [2.1-RELEASE][root@pfSense.localdomain]/root(2):</vendor></intel></intel></ts4gcf133></intel></intel></intel></intel></intel></intel></intel></intel></acpi></isa></at></thermal></serial></ata></ata></intel></ata></intel></isa></pci-isa></encrypt></acpi></acpi></intel></intel></intel></intel></intel></intel></intel></intel></intel></intel></intel(r)></acpi></acpi></intel(r)></acpi></acpi></intel(r)></acpi></acpi></intel(r)></acpi></acpi></intel(r)></acpi></acpi></intel(r)></acpi></acpi></vga-compatible></acpi></acpi></power></acpi></acpi></intelr></software></version></intelr></lahf></syscall,nx,lm></sse3,dtes64,mon,ds_cpl,est,cnxt-id,cx16,xtpr,pdcm></fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,htt,tm,pbe>
Just need to get the LCD display to work, does anybody know how to translate this into config for pfSense?
ugen1.2: <vendor 0x0cb6="">at usbus1
ukbd1: <vendor 0="" 2="" 0x0cb6="" keyboard="" +="" lcd,="" class="" 0,="" rev="" 1.10="" 1.00,="" addr="">on usbus1Also, I know the mini-PCI encryption card is not supported, is that down to the lack of drivers?
pci7: <acpi pci="" bus="">on pcib7
pci7: <encrypt decrypt,="" network="" computer="" crypto="">at device 2.0 (no driver attached) -
6 em NICs nice. :)
Yes there's no driver for any of the cavium encryption chips. They only released any specs or drivers under NDAs and such so any driver for FreeBSD would have to be completely reverse engineered.I would start investigating the LCD by adding the lcdproc-dev package and trying some drivers. You may end up having to customize a driver to get the dial working.
Steve
-
Thanks, I will follow your advice and try some USB LCD drivers.
Regarding Cavium encryption chips, I’ve found the drivers for Windows 2003 server and they match the ones installed on my device.
Check out the ftp site below and you see a Linux folder, I’ve extracted the contents and found some reference to BSD and FreeBSD but I don’t know what I’m looking at, it’s beyond my knowledge. :-[
[url=http://ftp://ftp.supermicro.com/CDR-X6_1.13_for_Intel_X6_platform/CAVIUM/]ftp://ftp.supermicro.com/CDR-X6_1.13_for_Intel_X6_platform/CAVIUM/
-
I don't see any reference to FreeBSD drivers there. :(
It's possible though: https://plus.google.com/104092656004159577193/posts/f7y8btzZBbW
Steve
-
I don't see any reference to FreeBSD drivers there. :(
Sorry my bad.
Celestix S-X MSA 4000 Windows LCD driver info:
Celestix S-X MSA 4000 example LCD messages under Window OS:
Celestix S-X MSA 4000 display module:
Manufacturer: Varitronix
Model: MDLS-40263-LV-B-LED
Product: LCD Character Display Modules
Character Count x Line: 40 x 2 -
The LCD module looks pretty standard, the board it's mounted on looks more custom. It has the LEDs and the jog dial connected to it? The chip seems to be this:
http://www.simkits.com/downloads/documents/CY7C63743.pdf
If the USB to the LCD is just passed through then getting that going with lcdproc may not be too tricky.
The fact that the device is detected as a USB device with Vendor ID 0cb6 is not good as that's Celestix themselves.What is the state of support for the Varitronix display in lcdproc?
Steve
-
What is the state of support for the Varitronix display in lcdproc?
I think that’s part of the problem in that I don’t see any support for Varitronix display in lcdproc. :'(
In LCDproc file what would be the settings for:
ugen1.2: <vendor 0x0cb6="">at usbus1
ukbd0: <vendor 0="" 2="" 0x0cb6="" keyboard="" +="" lcd,="" class="" 0,="" rev="" 1.10="" 1.00,="" addr="">on usbus1Device=/dev/ugen1.2
I hope i've this correct?
Here is all the USB info i can find ;)
[2.1-RELEASE][root@pfSense.localdomain]/dev(2): ls acpi crypto fd mem ttyu0.init ttyv8 ugen3.1 ad4 ctty fido nfslock ttyu0.lock ttyv9 ugen4.1 ad4s1 cuau0 geom.ctl null ttyu1 ttyva ukbd0 ad4s1a cuau0.init io pci ttyu1.init ttyvb urandom ad4s1b cuau0.lock kbd0 pf ttyu1.lock ttyvc usb agpgart cuau1 kbd1 ptmx ttyv0 ttyvd usbctl ata cuau1.init kbd2 random ttyv1 ttyve xpt0 atkbd0 cuau1.lock kbdmux0 speaker ttyv2 ttyvf zero audit dcons klog stderr ttyv3 ufsid zfs bpf devctl kmem stdin ttyv4 ugen0.1 bpf0 devstat led stdout ttyv5 ugen1.1 console dgdb md0 sysmouse ttyv6 ugen1.2 consolectl dumpdev mdctl ttyu0 ttyv7 ugen2.1 [2.1-RELEASE][root@pfSense.localdomain]/dev(3): 2.1-RELEASE][root@pfSense.localdomain]/dev(3): dmesg | grep usb usbus0: <intel 82801g="" (ich7)="" usb="" controller="" usb-a="">on uhci0 usbus1: <intel 82801g="" (ich7)="" usb="" controller="" usb-b="">on uhci1 usbus2: <intel 82801g="" (ich7)="" usb="" controller="" usb-c="">on uhci2 usbus3: <intel 82801g="" (ich7)="" usb="" controller="" usb-d="">on uhci3 usbus4: EHCI version 1.0 usbus4: <intel 82801gb="" r="" (ich7)="" usb="" 2.0="" controller="">on ehci0 usbus0: 12Mbps Full Speed USB v1.0 usbus1: 12Mbps Full Speed USB v1.0 usbus2: 12Mbps Full Speed USB v1.0 usbus3: 12Mbps Full Speed USB v1.0 usbus4: 480Mbps High Speed USB v2.0 ugen0.1: <intel>at usbus0 uhub0: <intel 1="" 9="" uhci="" root="" hub,="" class="" 0,="" rev="" 1.00="" 1.00,="" addr="">on usbus0 ugen1.1: <intel>at usbus1 uhub1: <intel 1="" 9="" uhci="" root="" hub,="" class="" 0,="" rev="" 1.00="" 1.00,="" addr="">on usbus1 ugen2.1: <intel>at usbus2 uhub2: <intel 1="" 9="" uhci="" root="" hub,="" class="" 0,="" rev="" 1.00="" 1.00,="" addr="">on usbus2 ugen3.1: <intel>at usbus3 uhub3: <intel 1="" 9="" uhci="" root="" hub,="" class="" 0,="" rev="" 1.00="" 1.00,="" addr="">on usbus3 ugen4.1: <intel>at usbus4 uhub4: <intel 1="" 9="" ehci="" root="" hub,="" class="" 0,="" rev="" 2.00="" 1.00,="" addr="">on usbus4 Root mount waiting for: usbus4 usbus3 usbus2 usbus1 usbus0 Root mount waiting for: usbus4 Root mount waiting for: usbus4 ugen1.2: <vendor 0x0cb6="">at usbus1 ukbd0: <vendor 0="" 2="" 0x0cb6="" keyboard="" +="" lcd,="" class="" 0,="" rev="" 1.10="" 1.00,="" addr="">on usbus1 [2.1-RELEASE][root@pfSense.localdomain]/dev(4): [2.1-RELEASE][root@pfSense.localdomain]/dev(5): pciconf -lv uhci0@pci0:0:29:0: class=0x0c0300 card=0x27c88086 chip=0x27c88086 rev=0x01 hdr=0x00 class = serial bus subclass = USB uhci1@pci0:0:29:1: class=0x0c0300 card=0x27c98086 chip=0x27c98086 rev=0x01 hdr=0x00 class = serial bus subclass = USB uhci2@pci0:0:29:2: class=0x0c0300 card=0x27ca8086 chip=0x27ca8086 rev=0x01 hdr=0x00 class = serial bus subclass = USB uhci3@pci0:0:29:3: class=0x0c0300 card=0x27ca8086 chip=0x27cb8086 rev=0x01 hdr=0x00 class = serial bus subclass = USB ehci0@pci0:0:29:7: class=0x0c0320 card=0x27cc8086 chip=0x27cc8086 rev=0x01 hdr=0x00 class = serial bus subclass = USB [2.1-RELEASE][root@pfSense.localdomain]/dev(6): [2.1-RELEASE][root@pfSense.localdomain]/dev(6): usbconfig ugen0.1: <uhci root="" hub="" intel="">at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE ugen1.1: <uhci root="" hub="" intel="">at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE ugen2.1: <uhci root="" hub="" intel="">at usbus2, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE ugen3.1: <uhci root="" hub="" intel="">at usbus3, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE ugen4.1: <ehci root="" hub="" intel="">at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE ugen1.2: <keyboard +="" lcd="" vendor="" 0x0cb6="">at usbus1, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON [2.1-RELEASE][root@pfSense.localdomain]/dev(7): [2.1-RELEASE][root@pfSense.localdomain]/dev(7): pciconf -l -cv uhci0@pci0:0:29:0: class=0x0c0300 card=0x27c88086 chip=0x27c88086 rev=0x01 hdr=0x00 class = serial bus subclass = USB uhci1@pci0:0:29:1: class=0x0c0300 card=0x27c98086 chip=0x27c98086 rev=0x01 hdr=0x00 class = serial bus subclass = USB uhci2@pci0:0:29:2: class=0x0c0300 card=0x27ca8086 chip=0x27ca8086 rev=0x01 hdr=0x00 class = serial bus subclass = USB uhci3@pci0:0:29:3: class=0x0c0300 card=0x27ca8086 chip=0x27cb8086 rev=0x01 hdr=0x00 class = serial bus subclass = USB ehci0@pci0:0:29:7: class=0x0c0320 card=0x27cc8086 chip=0x27cc8086 rev=0x01 hdr=0x00 class = serial bus subclass = USB cap 01[50] = powerspec 2 supports D0 D3 current D0 [2.1-RELEASE][root@pfSense.localdomain]/dev(8):</keyboard></ehci></uhci></uhci></uhci></uhci></vendor></vendor></intel></intel></intel></intel></intel></intel></intel></intel></intel></intel></intel></intel></intel></intel></intel> ```</vendor></vendor>
-
Hmm tricky. The datasheet for the Varitronix MDLS40263, PDF, appears to show that the onbaord controller chip requires some custom 8bit data protocol. May be less custom than I think, most LCDs seem to use something like this. I think it will all depend on how much custom code Celestix have put on the chip on their board. If it's all passed through and done in the driver then there is always a chance. If it's custom code in the chip then we have no idea how to talk to it.
Edit: The LCDproc HD44780 driver appears to support the NT3881D IC in that display:
@http://lcdproc.omnipotent.net/hardware.php3:hd44780 All displays using HD44780 and compatible controllers (like KS0066, KS0070, KS0076, LC7985, NT3881, SED1278, ST7066)
It's likely a matter of figuring how the chip on the Celestix board separates the various devices, control knob, LEDs, lcd data lines.
It seems other manufacturers have used that microcontroller for similar purposes. Google throws up some interesting results.
Steve
Edit: This looks promising:
http://www.freebsd.org/cgi/man.cgi?query=ucycom&apropos=0&sektion=4&manpath=FreeBSD+8.3-RELEASE&arch=default&format=html
It would require some mods to make it recognise the USB IDs. -
Hello, just bought a couple of celestix appliances on an auction. I just spend a few minutes to start one of them with a VGA monitor connected. I noticed That the system is booting up by first going into a GRUB bootloader. In this boot menu one can choose an recovery option. Choosing the recovery option the system boots into linux, with on the screen just a USB device driver. The lcd with jog dial shows a menu for the last good configuration or a restore of a Windows server 2003.
So to me it Seems there should be a linux driver for the LCD/jog module on the hard disk.
Good luck
Marc
-
Interesting. The Linux driver's probably not much good to us in freebsd but if they're using lcdproc it will give some good clues.
Steve
-
I think LCDProc i's not needed. it looks if they are only using shell scripts for the whole IO communication with the display.
These scripts in /etc/init.d are calling a function "lcd_functions" in /etc/hardware/current where current is a variable ScorpioII Scorpio X ( al versions of the celestix appliances. And as a big suprise the function itself is not a compiled programm but a sh script!!!
Ok this scripts calls a program in the Bin directory (Scorpio_readkey) that is communicating to a /dev/ttyX and has been compiled in GCC: (GNU) 3.2.2 20030109 (Debian prerelease)
–---------------
DEV="/dev/usb/scorpioLCD1"
chvt 2lcd_write()
{
STR1=echo $* | cut -b1-80
LASTSTR=$STR1
STR=printf "%-80s" "$STR1"
echo -n "$STR" > $DEV
}format_line()
{
INSTR=$1
INHILITE=$2if [ -n "$INSTR" ]
then
LEN=echo $INSTR | wc -m
Check if string is longer than 36 characters
if [ $LEN -gt 36 ]
then
START=$(($LEN-16))
P1=echo $INSTR | cut -b 1-17
P2=echo $INSTR | cut -b $START-
STR="$P1…$P2"
else
STRx=echo $INSTR | cut -b 1-36
STR=printf "%-36s" "$STRx"
fiif [ $INHILITE -eq 1 ]
then
STR="$STR <<"
else
STR="$STR "
fi
else
STR=printf "%40s" " "
fi
echo -n "$STR"
}draw_menu()
{
TOPx=$1
shiftHILITE=$1
shiftwhile [ $TOPx -gt 0 ]
do
shift
TOPx=$(($TOPx-1))
doneY=1
lcd_clsif [ $HILITE -eq 1 ]
then
STR1=format_line "$1" 1
STR2=format_line "$2" 0
else
STR1=format_line "$1" 0
STR2=format_line "$2" 1
fiecho -n "${STR1}${STR2}" > $DEV
}lcd_menu()
{
DEF=1
HILITE=1
TOP=0
NUM=$#MENUSTR=
while [ -n "$1" ]
do
MENUSTR="$MENUSTR "$1""
shift
donewhile [ 1 ]
do
eval draw_menu $TOP $HILITE $MENUSTRKEY=
/bin/scorpio_readkey -1
case $KEY in
right)
if [ $DEF -gt 1 ]
then
DEF=$(($DEF-1))
if [ $DEF -le $TOP ]
then
TOP=$(($TOP-1))
fi
fi
HILITE=1
;;push)
break
;;left)
if [ $DEF -lt $NUM ]
then
DEF=$(($DEF+1))
if [ $HILITE -eq 2 ]
then
TOP=$(($TOP+1))
fi
fi
HILITE=2
;;
esac
done
echo $DEF
}lcd_cls()
{
STR=printf "%80s" " "
echo -n "$STR" > $DEV
}lcd_msg()
{
msg=echo "$1" | cut -b1-4
if [ ${#LASTSTR} -gt 74 ]
then
LASTSTR=echo -n $LASTSTR | cut -b1-74
STR="$LASTSTR[$msg]"
else
N=$((80 - ${#LASTSTR} - 6))
STR=printf "$LASTSTR%${N}s[$msg]" " "
fi
echo -n "$STR" > $DEV
}lcd_ok()
{
lcd_msg " OK "
}lcd_fail()
{
printf "\a"
lcd_msg "FAIL"
}lcd_wait()
{
lcd_msg "WAIT"
}
–-------------------------------
Confirm_restore.orig script#!/bin/sh
###############################
Confirm Restore
###############################
if [ -f "/etc/hardware/current/lcd_functions" ]
then
. /etc/hardware/current/lcd_functions
fiif [ -f "/etc/product.spec" ]
then
. /etc/product.spec
fiif grep -q "LGVSAVE" /proc/cmdline ; then
/etc/init.d/last_good_version_save
reboot
fiif grep -q "LGVRESTORE" /proc/cmdline ; then
/etc/init.d/last_good_version_restore
reboot
fiLGVAVAIL=
ls /rescue/LGV* 2>/dev/null | grep -q LGV && echo YES
confirmation() {
# Shows a Proceed prompt,
# Args: 1 (Yes - Default then No),
# 2 (No - Default then Yes),
# Others: 2 Assumed
# Returns: TRUE (0) if Default is selected, else FALSE (1)
OPTION=$1
DEFAULT="Proceed? "
OTHERLN=" "
if [ "$OPTION" = "1" ] ; then
DEFAULT="${DEFAULT}Yes"
OTHERLN="${OTHERLN} No"
else
DEFAULT="${DEFAULT} No"
OTHERLN="${OTHERLN}Yes"
fi
choice=lcd_menu "$DEFAULT" "$OTHERLN"
if [ "X$choice" = "X1" ] ; then
return 0
else
return 1
fi
}restore_menu_default() {
choice=lcd_menu "Cancel Restore" "Restore System"
if [ "X$choice" = "X1" ] ; then
operation_cancelled "Restore"
else
/etc/init.d/partimage
fi
}operation_cancelled() {
lcd_write "$* is Cancelled. Rebooting in 3 seconds."
sleep 3
reboot
exit 1
}restore_menu_full() {
# Now we check to see if there are extra images that we can
# install
if [ -z "$EXTRAIMAGES" ] ; then
restore_menu_default
else
# There are spare items that we can install
# Check installable items
IMAGES=""
for f in $EXTRAIMAGES ; do
if echo $f | grep -q -e ".000$" ; then
IMAGES="$IMAGES $f"
fi
done
if [ -z "$IMAGES" ] ; then
restore_menu_default
else
/etc/init.d/partimage $IMAGES
fi
fi
}grep -q "noprompt" /proc/cmdline
if [ "X$?" != "X0" ]
then
choice=lcd_menu "Cancel Backup/Restore" "Backup System" "Restore System"
if [ "X$choice" = "X1" ]
then
operation_cancelled "Backup/Restore"
elif [ "X$choice" = "X2" ] ; then
lcd_write "Backing up system"
/etc/init.d/last_good_version_save
reboot
exit 1
elif [ "X$choice" = "X3" ] ; then
if [ "$LGVAVAIL" = "YES" ] ; then
choice=lcd_menu "Cancel Restore" "Restore Last Good Version" "Restore System"
if [ "X$choice" = "X1" ] ; then
operation_cancelled "Restore"
elif [ "X$choice" = "X2" ] ; then
lcd_write "Restoring system"
/etc/init.d/last_good_version_restore
reboot
exit 1
else
restore_menu_full
fi
else
restore_menu_full
fi
fi
else
/etc/init.d/partimage
fi
–-------------------------------------Next to this all it seems that they load load two specific drivers:
Mount proc
if [ ! -f /proc/cpuinfo ]
then
mount -t proc none /proc
fiLoad USB Driver
echo Loading USB Driver
#modprobe usbcore
#modprobe usb-uhci
#modprobe input
#modprobe hidLoad LCD Driver
modprobe scorpioLCD
modprobe led
#sleep 3Load Keyboard Driver
#modprobe keybdev
Load Network Driver
#modprobe e1000
Load File System Driver
#modprobe jbd
#modprobe ext3Seems that there are some posibilities.
Marc
-
Ah, nice investigative work. :)
Its a shame they're not using lcdproc. That way we would know exactly how the driver has to work.
Interesting that they have separated the lcd and led drivers.Interesting that the keydriver appears to be using a serial port. The chip they are using seems to be commonly used as a USB-serial converter so that could make sense. It is recognised as a keyboard by freebsd already though.
ukbd0: <vendor 0="" 2="" 0x0cb6="" keyboard="" +="" lcd,="" class="" 0,="" rev="" 1.10="" 1.00,="" addr=""> on usbus1</vendor>
I guess a good test would be to just read ukbd0 while operating the knob and see what happens.
Steve
-
Excellent work guys,
I almost had given up on getting the LCD to work, but there could be light at the end of the tunnel. :)just read ukbd0 while operating the knob and see what happens.
Could you suggest how to go about that and I’ll give it ago?
Another good feature of these devices is the speed of the fans are controlled by the CPU temperature, unlike some WatchGuard Firebox boxes. ;)
On another note, does anybody know how to remap the network interface ports so they match the front panel?
em0: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0x8f00-0x8f1f mem 0xfd6e0000-0xfd6fffff irq 16 at device 0.0 on pci1 em0: Using an MSI interrupt em0: [FILTER] pcib2: <acpi pci-pci="" bridge="">irq 17 at device 28.1 on pci0 pci2: <acpi pci="" bus="">on pcib2 em1: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0x7f00-0x7f1f mem 0xfd2e0000-0xfd2fffff irq 17 at device 0.0 on pci2 em1: Using an MSI interrupt em1: [FILTER] pcib3: <acpi pci-pci="" bridge="">irq 18 at device 28.2 on pci0 pci3: <acpi pci="" bus="">on pcib3 em2: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0xdf00-0xdf1f mem 0xfdee0000-0xfdefffff irq 18 at device 0.0 on pci3 em2: Using an MSI interrupt em2: [FILTER] pcib4: <acpi pci-pci="" bridge="">irq 19 at device 28.3 on pci0 pci4: <acpi pci="" bus="">on pcib4 em3: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0xcf00-0xcf1f mem 0xfdce0000-0xfdcfffff irq 19 at device 0.0 on pci4 em3: Using an MSI interrupt em3: [FILTER] pcib5: <acpi pci-pci="" bridge="">irq 16 at device 28.4 on pci0 pci5: <acpi pci="" bus="">on pcib5 em4: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0xaf00-0xaf1f mem 0xfdae0000-0xfdafffff irq 16 at device 0.0 on pci5 em4: Using an MSI interrupt em4: [FILTER] pcib6: <acpi pci-pci="" bridge="">irq 17 at device 28.5 on pci0 pci6: <acpi pci="" bus="">on pcib6 em5: <intel(r) 1000="" pro="" network="" connection="" 7.3.2="">port 0x9f00-0x9f1f mem 0xfd8e0000-0xfd8fffff irq 17 at device 0.0 on pci6 em5: Using an MSI interrupt em5: [FILTER]</intel(r)></acpi></acpi></intel(r)></acpi></acpi></intel(r)></acpi></acpi></intel(r)></acpi></acpi></intel(r)></acpi></acpi></intel(r)>
This is what I am after:-
ifconfig em5 name em0
ifconfig em4 name em1
ifconfig em3 name em2
ifconfig em2 name em3
ifconfig em1 name em4
ifconfig em0 name em5Also tried, Create file /etc/rc.conf.local
ifconfig_em0_name="LAN"
ifconfig_em1_name="WAN"
ifconfig_em2_name="DMZ1"
ifconfig_em3_name="DMZ2"
ifconfig_em4_name="DMZ3"
ifconfig_em5_name="DMZ4"This doesn’t appear to work unless I’m doing something wrong!
Thanks in advance for your help.
-
You can just rename the interfaces in the webgui.
You can't use normal FreeBSD conf files in pfSense. All the configuration is stored in a single file, config.xml. At boot scripts use that information to write out the various config files, if you manually modify then they will be overwritten the next make you make a change. You can edit the config.xml file directly to make a series of changes but it's open to errors which could cause you all sorts of problems. ;)The keyboard is an interesting question, I've never tried. You appear to have three keyboards detected on that box. In /dev you have kbd0-2. My boxes here have no keyboards. Do you actually have a real keyboard attached? It appears you can get some info from each using the kbdcontrol command:
kbdcontrol -i < /dev/kbd1
Some useful tests here: http://people.freebsd.org/~yokota/ukbd-howto.txt
Steve
-
Have just got my hands on a MSA3000 and I'm also interested in getting the LCD/jog wheel running with pfSense. Sadly my unit arrived without HDD so I don't have a working Windows system to drive the LCD otherwise I could have hooked up a logic analyser to see what messages the driver receives from the PC.
nanobot do you still have access to the executables and kernel modules? I wonder if we might be able to decompile the scorpioLCD and led kernel modules and get a bit of information as to how the PC talks to the LCD driver…?
-
It's very unlikely that the Celestix engineers designed a completely new custom protocol and display for their box. It's probably using common protocols and likely off the shelf components. It may have some custom firmware to drive the control wheel and leds.
At least some of the hardware appears to be using standard USB-serial converters so the first thing I would try would be to recompile the USB-Serial driver to recognise the USB IDs of the hardware in the box and see if you can talk to it from a terminal or read anything it's sending.Steve
-
I agree it's probably nothing too complicated or proprietary. It enumerates as a USB HID device, the jog wheel sends out key codes when it's rotated or clicked - that's the easy bit! This is what Ubuntu makes of the device:
Bus 003 Device 002: ID 0cb6:0002 Celestix Networks, Pte., Ltd Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x0cb6 Celestix Networks, Pte., Ltd idProduct 0x0002 bcdDevice 1.00 iManufacturer 1 CELESTIX NETWORKS iProduct 2 KEYBOARD + LCD iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 34 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 50mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 1 Boot Interface Subclass bInterfaceProtocol 1 Keyboard iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.00 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 62 Report Descriptor: (length is 62) Item(Global): Usage Page, data= [ 0x01 ] 1 Generic Desktop Controls Item(Local ): Usage, data= [ 0x06 ] 6 Keyboard Item(Main ): Collection, data= [ 0x01 ] 1 Application Item(Global): Report ID, data= [ 0x01 ] 1 Item(Global): Usage Page, data= [ 0x07 ] 7 Keyboard Item(Local ): Usage Minimum, data= [ 0xe0 ] 224 Control Left Item(Local ): Usage Maximum, data= [ 0xe7 ] 231 GUI Right Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0x01 ] 1 Item(Global): Report Size, data= [ 0x01 ] 1 Item(Global): Report Count, data= [ 0x08 ] 8 Item(Main ): Input, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Global): Report Size, data= [ 0x08 ] 8 Item(Global): Report Count, data= [ 0x01 ] 1 Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0x68 ] 104 Item(Global): Usage Page, data= [ 0x07 ] 7 Keyboard Item(Local ): Usage Minimum, data= [ 0x00 ] 0 No Event Item(Local ): Usage Maximum, data= [ 0x68 ] 104 F13 Item(Main ): Input, data= [ 0x00 ] 0 Data Array Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Main ): End Collection, data=none Item(Global): Usage Page, data= [ 0x14 ] 20 Alphanumeric Display Item(Local ): Usage, data= [ 0x01 ] 1 Alphanumeric Display Item(Main ): Collection, data= [ 0x01 ] 1 Application Item(Global): Report ID, data= [ 0x02 ] 2 Item(Local ): Usage, data= [ 0x2c ] 44 Display Data Item(Global): Logical Minimum, data= [ 0x80 ] 128 Item(Global): Logical Maximum, data= [ 0x7f ] 127 Item(Global): Report Size, data= [ 0x08 ] 8 Item(Global): Report Count, data= [ 0x58 ] 88 Item(Main ): Output, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Main ): End Collection, data=none Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Device Status: 0x0000 (Bus Powered)
There seem to be very few LCDs using a Cypress driver, I saw that the IOWarrior did and that's supported within LCDProc, I tried recompiling it to match the USB VID:PID of the Celestix device but it did not work. I guess that would have been too easy!
So I'm at a little bit of a loss at the moment, I haven't done any USB driver development before. I can't imagine the driver is that complex, but at the same time I don't know how to send character / raw data to a USB HID device. I've started looking at pyusb but it's very low level stuff…
-
What I would do I were trying to design this…..
Use a standard keyboard controller IC for the jog wheel and LEDs (num,caps and scroll lock).
Use a standard USB-serial converter and connect that to a serial LCD.You have two USB devices there yes? One is detected as a keyboard already. There are programs in existence that use keyboard LEDs as indicators, it must be possible to try setting them manually. That should be an easy enough test.
The other USB device seen as ugen1.2 in the first posts here is probably the serial converter. I would try to recompile the cypress driver to recognise the USB vendor and product IDs used by it. If that works then try various LCDproc settings to talk to the LCD across it.Steve
Edit: I can't find a FreeBSD equivalent but in Ubuntu you can try using the setleds command.