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.
    • T
      twisted2k3
      last edited by

      The alert LED is GPIO. Here's the linux source. Please share back if anyone can get it to work on FreeBSD.

      #include <stdio.h>#include <stdlib.h>#include <sys io.h="">/* for outb() and inb() */

      #define IOADDR 0x50e

      void usage()
      {
          printf("ngled [0|1|2]\n");
          printf("            0 : off  \n");
          printf("            1 : on  \n");
          printf("            2 : blink  \n");
          printf("\nShows status if no command is passed.\n");
          exit(1);
      }

      int main(int argc, char **argv)
      {
        if (iopl(3) < 0) {
              printf("iopl fail\n");
              return;
      }

      if (argc < 2)
      {
        if ( inb(0x51a) == 0x84 ) printf("2\n");
        else if ( inb(IOADDR) == 0x7b ) printf("0\n");
        else printf("1\n");
        return;
      } else if ( argc > 2 ) usage();

      switch (*argv[1])
      {
        case '0':
      /fprintf(stderr, "OFF!!");/
      outb(inb(0x50e)&0x7f,IOADDR);
      outb(0x4,0x51a);
        break;

      case '1':
      /fprintf(stderr, "ON!!");/
      outb(inb(0x51a)&0x7f,0x51a);
      outb(inb(0x50e)|0x80,IOADDR);
      break;
        case '2':
      outb(inb(0x50e)&0x7f,IOADDR);
      outb(inb(0x51a)|0x80,0x51a);
      break;
        default:
      usage();
      }

      return 0;
      }</sys></stdlib.h></stdio.h>

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

        @HammyHavoc:

        @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. ;- )

        Sorry this took so long!

        Here is a ZIP file containing captures of LCD and jogdial activity:
        https://kirkovsky.com/junkbin/celestix.zip

        This activity was captured on the stock Windows system that comes with these boxes. Included in the ZIP is USBLyzer (Windows only AFAIK) format, HTML & CSV export from USBLyzer, and standard pcap USB capture format (should be Wireshark compatible). Hope this helps!

        @HammyHavoc:

        Also noticed a red LED flashes above the exclamation symbol, does this happen on yours too?

        Yes, this happens on mine too. It looks like there's some kind of watchdog function that allows the OS to tell the LCD module not to flash that LED, but if no signal is being sent it flashes constantly.

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

          @yeyus:

          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.

          I have default/stock system images for both Windows and Linux (recovery partition) of the ScorpioX machines (the Celestix MSA/WSA/etc and certain RSA-branded boxes all share the same base platform).

          The Linux recovery partition has some control binaries and kernel modules (a module for the LCD + jogdial and a module for the alert LED). The Windows side has basically the same setup, but the display/jogdial/LED are all rolled into one driver binary.

          I don't want to widely distribute these due to copyright concerns. PM me for further details.

          1 Reply Last reply Reply Quote 0
          • B
            brmiller
            last edited by

            @yeyus:

            Got it working!

            Was this Linux or FreeBSD?

            EDIT: Must be Linux; hidtest-hidraw appears to be a https://github.com/signal11/hidapi utility.  I'm curious what the equivalent FreeBSD approach is - when I looked at LCDProc, the [pfSense] config asked a lot of questions I didn't know!

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

              @twisted2k3:

              The alert LED is GPIO. Here's the linux source….

              @stephenw10 - your WGXepc program set GPIO values for the arm/disarm LED on the WG FB boxes, didn't it?  (I don't know much about this….)  Could the program be used in similar way to probe the GPIO for the LCD/Keyboard controls of this device?

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

                Here are the kernel modules and utility scripts for the LCD and warning LED from the Linux restore partition on my Celestix device. Running strings suggests that these are under GPL, so I'm putting them here:

                https://kirkovsky.com/junkbin/MSA2000i_ScorpioX.zip

                1 Reply Last reply Reply Quote 0
                • N
                  NightShaman
                  last edited by

                  Any progress on this? I would love to see it working. Just picked up a wsa-4200, and all that is left is the LCD :)

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

                    Waiting on this too, would be great if we could get it working.

                    Also, anybody know how to make this thing any more quiet? Different fans? Mulling over swapping out the motherboard, just not sure how the daughter board of NICs connects.

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

                      Has anybody gotten the screens to work under pfSense? I just picked one up, got it installed, and would love for the LCD / Jog to do something other than –------------ SYSTEM READY -------------

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

                        @yeyus:

                        Got it working!

                        Hi yeyus,

                        Would it be possible to post the code you used to get the display working please?

                        Thanks!

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

                          @twisted2k3:

                          The alert LED is GPIO. Here's the linux source. Please share back if anyone can get it to work on FreeBSD.

                          Hi twisted2k3,

                          How did you determine the IOADDR (base address?) of the GPIO controller?  I am trying to recompile for Linux with an WSA-4200 which has a different motherboard to the MSA…

                          Thanks!

                          1 Reply Last reply Reply Quote 0
                          • K
                            kendalja
                            last edited by

                            Sorry to bring back an older thread but did you guys ever get this working?

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

                              Yeah so in Linux it is recognised and creates /dev/hidraw0. That doesn't happen in FreeBSD so you would need to address the USB device directly or create some other driver.

                              The GPIO LED is probably controllable though.

                              Steve

                              1 Reply Last reply Reply Quote 0
                              • K
                                kendalja
                                last edited by

                                I was able to find this out there not sure if it would help:

                                https://github.com/camerongray1515/Celestix-Scorpio-X-LCD

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

                                  Unfortunately it doesn't. It still uses the same Linux driver:

                                  def lcd_display(message, line=1):
                                      message = str(message)
                                      line_selection = "\x00" if line == 1 else "\x01"
                                      preamble = "\x02\x00\x00{0}\x28\x00\x00\x00".format(line_selection)
                                      endpad = "\x20"*(40-len(message))
                                  
                                      data = preamble + message + endpad
                                      with open("/dev/hidraw0", "w") as lcd:
                                  lcd.write(data)
                                  

                                  Addresses /dev/hidraw0.

                                  Interesting that that driver is in VyOS though…. if it's a standard Linux driver we might be able to see some clues.

                                  Steve

                                  1 Reply Last reply Reply Quote 0
                                  • K
                                    kendalja
                                    last edited by

                                    dmesg on system yields:

                                    ukbd0: <vendor 0="" 2="" 0x0cb6="" keyboard="" +="" lcd,="" class="" 0,="" rev="" 1.10="" 1.00,="" addr="">on usbus1</vendor>

                                    1 Reply Last reply Reply Quote 0
                                    • F
                                      fmertz
                                      last edited by

                                      Looks like there is something testable with the information published this far.

                                      The Python code shows a sequence of hex codes

                                      The device is known

                                      The BSD shell has the printf built-in, and it accepts codes on octal format.

                                      So, to hexadecimal 0x20 becomes octal \40

                                      Try something like this:

                                      printf "\02\00\00\61\50\00\00\00Some Message" > /dev/ukbd0
                                      

                                      Try this for line 2:

                                      printf "\02\00\00\62\50\00\00\00Some Message" > /dev/ukbd0
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • K
                                        kendalja
                                        last edited by

                                        So something interesting happened. I rebooted the machine and now dmesg shows:

                                        ukbd1: <vendor 0="" 2="" 0x0cb6="" keyboard="" +="" lcd,="" class="" 0,="" rev="" 1.10="" 1.00,="" addr="">on usbus1

                                        This is what I get while running the printf command

                                        [2.3.5-RELEASE][root@pfSense.geek.local]/: printf "\02\00\00\61\50\00\00\00Some Message" > /dev/ukbd1
                                        /dev/ukbd1: Device busy.</vendor>

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

                                          Hmm, that's not good. Changing device names makes it that much harder to work with even we could get it to accept any input.  :-\

                                          Steve

                                          1 Reply Last reply Reply Quote 0
                                          • F
                                            fmertz
                                            last edited by

                                            Good reading here:

                                            https://www.freebsd.org/cgi/man.cgi?query=ukbd&sektion=4

                                            Seems like we would need that character device. Once it shows as /dev/kbd1, that printf should be directed to it. Worth a try…

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