Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    PfSense on a Celestix S-X MSA 4000

    Scheduled Pinned Locked Moved Hardware
    61 Posts 17 Posters 21.1k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      cii
      last edited by

      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…?

      1 Reply Last reply Reply Quote 0
      • stephenw10S
        stephenw10 Netgate Administrator
        last edited by

        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

        1 Reply Last reply Reply Quote 0
        • C
          cii
          last edited by

          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…

          1 Reply Last reply Reply Quote 0
          • stephenw10S
            stephenw10 Netgate Administrator
            last edited by

            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.

            1 Reply Last reply Reply Quote 0
            • C
              cii
              last edited by

              Actually it's just a single USB device (combined keyboard and LCD).  The problem is there doesn't seem to be any standard way to interface with displays over HID, so without a working system to sniff it is next to impossible to reverse engineer the protocol they have used on the cypress microprocessor.

              Probably the easiest solution, certainly time wise, would be to replace the microprocessor with something LCDproc does support, such as an FTDI FT232 chip.  This would probably mean losing the jog wheel, though there should be a pin spare for the activity LED at least…

              1 Reply Last reply Reply Quote 0
              • C
                cii
                last edited by

                On another subject I've been tinkering with different CPUs as the P4 3GHz mine came with by standard isn't the most energy efficient chip, and I know that some of the higher spec MSA boxes come with core 2 duo chips (E6420 I believe).  I've tested the following:

                Core2duo E6420 SLA4T (2.13GHz, 1066 FSB, 4M) - boots but unstable
                Core2duo E6320 SLA4U (1.86MHz, 1066 FSB, 4M) - boots but unstable
                Core2duo E4400 SLA98 (2.00GHz, 800 FSB, 2M) - boots, stable, BIOS reports incorrect speed?

                The E4400 gets reported at the BIOS as 50x10 = 500MHz!  This is also reported in the OS I'm using to test (Ubuntu) but performance suggests it's actually running at the 2GHz.  Doesn't look like it will be possible to run powerd in this sort of state however.  You can set the FSB in the BIOS but this seems to get divided down by 4 for some reason with the E4400.

                Not quite sure why the E6x20 1066 FSB chips aren't stable.  It does take a lot to make them crash, I've been running memtest, mprime torture tests but the 'stress' command seems to reliably kill them given a few cycles.  When they crash the system just halts, no input or output but the display remains frozen, very odd.  The E4400 has been running with both mprime and the odd stress command for several hours now stable and has topped out at a core temp of 66c.  All were tested with known good 2x 1Gb and 2x512Mb PC5300.

                The stress command I have been using is

                stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s
                

                All these oddities suggest to me a BIOS issue, though I cannot find an update for it (perhaps unsurprisingly, it being a custom motherboard).  If time permits I may try to extract the existing BIOS and see if there is anything that can be unlocked settings wise.

                1 Reply Last reply Reply Quote 0
                • M
                  mppkll
                  last edited by

                  I found the datasheets for the display they indicates that the module is using a "NT3881 or equivalent" display driver chip.  on the LCDproc hardware page it indicates that that controller is compatible and supported under the hd44780.

                  http://media.digikey.com/pdf/Data%20Sheets/Varitronix%20PDFs/MDLS40263-01%20Specification.pdf
                  http://lcdproc.omnipotent.net/hardware.php3
                  http://media.digikey.com/pdf/Data%20Sheets/Varitronix%20PDFs/MDL(S)40263.pdf
                  http://media.digikey.com/pdf/Data%20Sheets/Varitronix%20PDFs/Varitronix%20LCD%20Initialization%20Instructions.pdf

                  1 Reply Last reply Reply Quote 0
                  • stephenw10S
                    stephenw10 Netgate Administrator
                    last edited by

                    Controlling the LCD itself is probably not a problem, there are drivers already in LCDproc for various hd44780 modes. The problem is controlling whatever it is connected to. It appears as a single USB device that does the leds and control wheel as well as the LCD.

                    Steve

                    1 Reply Last reply Reply Quote 0
                    • _Adrian__
                      _Adrian_
                      last edited by

                      Following…

                      If it ain't broken, fix it till it is :P

                      1 Reply Last reply Reply Quote 0
                      • P
                        pkirkovsky
                        last edited by

                        Here's the pinout of the LCD module:

                        
                        +--------------------+    PIN   FUNCTION                                            
                        | 02  04  06  08  10 |   +---+ +--------+                                           
                        |                    |     01   USB 5v                                              
                        | 01  03  05  07  09 |     02   USB D-                                              
                        +--------|  |--------+     03   USB D+                                              
                                                   04   USB GND                                             
                           Connector on PCB        05   LED Green (Power)                                   
                                                   06   LED Red (Fault)                                     
                                                   07   LED Ambert (Disk)                                   
                                  ++               08   System Power (short to GND to boot machine)         
                        +--------------------+     09   3v                                                  
                        | 01  03  05  07  09 |     10   State detect ("System On" -> "System Ready")        
                        |                    |                                                              
                        | 02  04  06  08  10 |     USB is only enabled when "Ready" state is achieved       
                        +--------------------+     When module is outside of system, short pin 10 to any LED
                                                   to force "Ready" state and USB communication             
                          Connector on cable                                                                
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • ?
                          Guest
                          last edited by

                          If you want to replace the Cavium Nitrox miniPCI card you could go by using a
                          Soekris vpn1411 miniPCI card that is supported by pfSense.

                          1 Reply Last reply Reply Quote 0
                          • P
                            pkirkovsky
                            last edited by

                            I have a couple of Celestix boxes with intact stock software. Will be posting USB captures soon, stay tuned…

                            1 Reply Last reply Reply Quote 0
                            • H
                              HammyHavoc
                              last edited by

                              @pkirkovsky:

                              I have a couple of Celestix boxes with intact stock software. Will be posting USB captures soon, stay tuned…

                              How's this going? I received my MSA 4000 today, put pfSense on it, would like to get the front panel running and help where possible. ;- )
                              Also noticed a red LED flashes above the exclamation symbol, does this happen on yours too?

                              1 Reply Last reply Reply Quote 0
                              • R
                                rudelerius
                                last edited by

                                I have one of these boxes as well as 2 x RSA Securid boxes (Celestix Scorpio) with the same LCD/jog wheel combo.  It would be nice to have it all working nicely with lcdproc/pfsense.  Nice work so far.  : )

                                Following.

                                1 Reply Last reply Reply Quote 0
                                • R
                                  rudelerius
                                  last edited by

                                  Of any help: https://www.astaro.org/19475-post1.html ?

                                  1 Reply Last reply Reply Quote 0
                                  • stephenw10S
                                    stephenw10 Netgate Administrator
                                    last edited by

                                    Looks like a binary Linux driver they're using. Not much use in pfSense/FreeBSD.

                                    Steve

                                    1 Reply Last reply Reply Quote 0
                                    • R
                                      rudelerius
                                      last edited by

                                      Ok.  I feel like I've seen a (possibly Windows) driver for this before in searching around the web when I first got the box.

                                      I think that I still have an in-tact system drive from the original appliance ,and I was able to find the driver details for the display/wheel in Windows, then research it online to find more information.  I didn't know what to do with it once I found it, so I think I've long since deleted whatever it was I found.  But if I found it once, I might possibly be able to find it again.

                                      I'll have to dig up the drive that has the original Win2K3 install on it and see if I can find the driver info.  If I can find the .inf file would that be of any help?

                                      1 Reply Last reply Reply Quote 0
                                      • R
                                        rudelerius
                                        last edited by

                                        The device is listed in Win2K3 as a Jungo lcd.  The driver is windrvr6.sys.  Googlefu: http://www.jungo.com/st/products/windriver/

                                        Not sure if that helps or not.  Let me know if I can provide anything else.

                                        1 Reply Last reply Reply Quote 0
                                        • R
                                          rudelerius
                                          last edited by

                                          Oops/

                                          Celestix S-X MSA 4000 Windows LCD driver info:


                                          …
                                          Manufacturer: Varitronix
                                          Model: MDLS-40263-LV-B-LED
                                          Product: LCD Character Display Modules
                                          Character Count x Line: 40 x 2

                                          1 Reply Last reply Reply Quote 0
                                          • Y
                                            yeyus
                                            last edited by

                                            I been doing some research on the same hardware that seems to be used by celestix all across it's product line.

                                            For now I've been able to fetch some characteristics about the device:

                                            • It's a composite USB HID device (Keyboard + Alphanumeric LCD pages)
                                            • It will output 8 fields (1 bit each) when a keyboard event occurs.
                                            • The input for the LCD is a 88 byte array probably some 8 byte control preamble followed to up to 80 characters (40x2 chars)

                                            HID table for those interested:

                                            
                                            USAGE_PAGE (Generic Desktop Controls)
                                            USAGE (Keyboard)
                                            COLLECTION (Application)
                                              REPORT_ID(1)
                                              USAGE_PAGE (Keyboard)
                                              USAGE_MINIMUM(Control Left)
                                              USAGE_MAXIMUM(GUI Right)
                                              LOGICAL_MINIMUM(0)
                                              LOGICAL_MAXIMUM(1)
                                              REPORT_SIZE(1)
                                              REPORT_COUNT(8)
                                              INPUT(Data, Var, Absolute, No Wrap, Linear, Preferred_State, No_Null_Position,Non_Volatile, Bitfield)
                                              REPORT_SIZE(8)
                                              REPORT_COUNT(1)
                                              LOGICAL_MINIMUM(0)
                                              LOGICAL_MAXIMUM(104)
                                              USAGE_PAGE (Keyboard)
                                              USAGE_MINIMUM(0)
                                              USAGE_MAXIMUM(104)
                                              INPUT(Data, Array, Absolute, No Wrap, Linear, Preferred_State, No_Null_Position,Non_Volatile, Bitfield)
                                            END COLLECTION
                                            USAGE_PAGE (Alphanumeric Display)
                                            USAGE (Alphanumeric Display)
                                            COLLECTION (Application)
                                              REPORT_ID(2)
                                              USAGE(Display Data)
                                              LOGICAL_MINIMUM(128)
                                              LOGICAL_MAXIMUM(127)
                                              REPORT_SIZE(8)
                                              REPORT_COUNT(88)
                                              OUTPUT(Data, Var, Absolute, No Wrap, Linear, Preferred_State, No_Null_Position,Non_Volatile, Bitfield)
                                            END COLLECTION
                                            
                                            

                                            If any of you have access to binaries (either windows or linux) please let me know because they can be very helpful in decoding the command schema for the LCD operation.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.