docs: public static void main(String args[]) throws InterruptedException, IOException, PlatformAlreadyAssignedException {
  
          // ####################################################################
          //
          // !!!!! ATTENTION !!!!!  ALL GPIO PINS ON ODROID-XU4 ARE 1.8VDC.
          //                        INCLUDING THE SERIAL/UART PINS
          //
          // THIS MEANS THAT YOU MUST USE A LEVEL SHIFTER IF USING WITH A 3.3VDC/5VDC CIRCUIT.
          // YOU CAN USE THE OPTIONAL ODROID XU4-SHIFTER SHIELD TO PERFORM THE LEVEL SHIFTING:
          //  http://www.hardkernel.com/main/products/prdt_info.php?g_code=G143556253995
          //
          // ####################################################################
  
          // ####################################################################
          //
          // since we are not using the default Raspberry Pi platform, we should
          // explicitly assign the platform as the Odroid platform.
          //
          // ####################################################################
          PlatformManager.setPlatform(Platform.ODROID);
  
          // create Pi4J console wrapper/helper
          // (This is a utility class to abstract some of the boilerplate code)
          final Console console = new Console();
  
          // print program title/header
          console.title("<-- The Pi4J Project -->", "Serial Communication Example");
  
          // allow for user to exit program using CTRL-C
          console.promptForExit();
  
          // create an instance of the serial communications class
          final Serial serial = SerialFactory.createInstance();
  
          // create and register the serial data listener
          serial.addListener(new SerialDataEventListener() {
              @Override
              public void dataReceived(SerialDataEvent event) {
  
                  // NOTE! - It is extremely important to read the data received from the
                  // serial port.  If it does not get read from the receive buffer, the
                  // buffer will continue to grow and consume memory.
  
                  // print out the data received to the console
                  try {
                      console.println("[HEX DATA]   " + event.getHexByteString());
                      console.println("[ASCII DATA] " + event.getAsciiString());
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          });
  
          try {
              // create serial config object
              SerialConfig config = new SerialConfig();
  
              // set default serial settings (device, baud rate, flow control, etc)
              //
              // by default, use the DEFAULT com port on the Odroid XU4 (exposed on GPIO header)
              // see 'OdroidSerial' for constant definitions for Odroid XU4 Serial Port addresses.
              //
              // NOTE: this utility method will determine the default serial port for the
              //       detected platform and board/model.
              config.device(OdroidSerial.DEFAULT_COM_PORT_XU)
                      .baud(Baud._38400)
                      .dataBits(DataBits._8)
                      .parity(Parity.NONE)
                      .stopBits(StopBits._1)
                      .flowControl(FlowControl.NONE);
  
              // parse optional command argument options to override the default serial settings.
              if(args.length > 0){
                  config = CommandArgumentParser.getSerialConfig(config, args);
              }
  
              // display connection details
              console.box(" Connecting to: " + config.toString(),
                      " We are sending ASCII data on the serial port every 1 second.",
                      " Data received on serial port will be displayed below.");
  
  
              // open the default serial device/port with the configuration settings
              serial.open(config);
  
              // continuous loop to keep the program running until the user terminates the program
              while(console.isRunning()) {
                  try {
                      // write a formatted string to the serial transmit buffer
                      serial.write("CURRENT TIME: " + new Date().toString());
  
                      // write a individual bytes to the serial transmit buffer
                      serial.write((byte) 13);
                      serial.write((byte) 10);
  
                      // write a simple string to the serial transmit buffer
                      serial.write("Second Line");
  
                      // write a individual characters to the serial transmit buffer
                      serial.write('\r');
                      serial.write('\n');
  
                      // write a string terminating with CR+LF to the serial transmit buffer
                      serial.writeln("Third Line");
                  }
                  catch(IllegalStateException ex){
                      ex.printStackTrace();
                  }
  
                  // wait 1 second before continuing
                  Thread.sleep(1000);
              }
  
          }
          catch(IOException ex) {
              console.println(" ==>> SERIAL SETUP FAILED : " + ex.getMessage());
              return;
          }
      }