<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2026-10-16T11:17:21Z</updated>
  <generator>https://njump.me</generator>

  <title>Nostr notes by Alfonso Siciliano (Unofficial)</title>
  <author>
    <name>Alfonso Siciliano (Unofficial)</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://njump.me/npub13txf6qpp6w2lmxxp3s68w08uykmczc9207s2pqu4yf5ye28p06jsjks06y.rss" />
  <link href="https://njump.me/npub13txf6qpp6w2lmxxp3s68w08uykmczc9207s2pqu4yf5ye28p06jsjks06y" />
  <id>https://njump.me/npub13txf6qpp6w2lmxxp3s68w08uykmczc9207s2pqu4yf5ye28p06jsjks06y</id>
  <icon>https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f58b.png</icon>
  <logo>https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f58b.png</logo>




  <entry>
    <id>https://njump.me/nevent1qqsv57fcnnhhawuae9c0y5sx9l77r55am594mmq6el4k2s32s538zlszyz9ve8gqy8fetlvccxxrgaeulsjm0qtq4fl6pgyrj53xsn9gu9l229tjt7c</id>
    
      <title type="html">Exploring the HumanWare BrailleNote Apex with FreeBSD Posted on ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsv57fcnnhhawuae9c0y5sx9l77r55am594mmq6el4k2s32s538zlszyz9ve8gqy8fetlvccxxrgaeulsjm0qtq4fl6pgyrj53xsn9gu9l229tjt7c" />
    <content type="html">
      Exploring the HumanWare BrailleNote Apex with FreeBSD&lt;br/&gt;&lt;br/&gt;Posted on&lt;br/&gt;October 15, 2026&lt;br/&gt;Recently, I received a used HumanWare BrailleNote Apex BT 32 from the United&lt;br/&gt;States.&lt;br/&gt;This blog post is a collection of personal notes about connecting the device&lt;br/&gt;to my laptop running FreeBSD 16.0-CURRENT (main).&lt;br/&gt;The post includes images and tables.&lt;br/&gt;If you have difficulty accessing it, I can provide a plain-text version by email&lt;br/&gt;or through the FreeBSD accessibility mailing list.&lt;br/&gt;This is not yet about using the Apex as a real Braille display.&lt;br/&gt;These are just the first steps to:&lt;br/&gt;Establish communication between the device and FreeBSD.&lt;br/&gt;Receive characters from the device and read them on FreeBSD.&lt;br/&gt;Send characters from the laptop to the device.&lt;br/&gt;In the future, I will use this device to investigate and hopefully develop a&lt;br/&gt;Braille display subsystem for FreeBSD as part of the&lt;br/&gt;Vision Accessibility&lt;br/&gt;project, thanks to the sponsorship of the&lt;br/&gt;FreeBSD Foundation.&lt;br/&gt;The HumanWare BrailleNote Apex&lt;br/&gt;The device is a BrailleNote Apex from the&lt;br/&gt;BrailleNote family, developed by&lt;br/&gt;HumanWare.&lt;br/&gt;The&lt;br/&gt;original HumanWare store page&lt;br/&gt;is still available through the Internet Archive and describes the device’s&lt;br/&gt;features.&lt;br/&gt;Top view&lt;br/&gt;The device has six Braille input keys, corresponding to dots 1-6, a BACKSPACE&lt;br/&gt;key, a SPACE key and an ENTER key.&lt;br/&gt;A Scroll Wheel sits in the middle, with a button and the ability to turn the&lt;br/&gt;wheel to the right and to the left.&lt;br/&gt;The display has 32 Braille cells, and each cell has 8 dots.&lt;br/&gt;The two additional dots at the bottom are used for computer features.&lt;br/&gt;For example, they could indicate the cursor position or the text selected for a&lt;br/&gt;copy and paste.&lt;br/&gt;Built-in speakers for audio output are available.&lt;br/&gt;They provide sound output in addition to the tactile Braille output.&lt;br/&gt;Front view&lt;br/&gt;There are 4 thumb keys: PREVIOUS, BACK, ADVANCE and NEXT.&lt;br/&gt;Rear view&lt;br/&gt;Left side&lt;br/&gt;Right side&lt;br/&gt;There is one mini USB 2.0 port, the one I use to connect the device to the&lt;br/&gt;laptop running FreeBSD.&lt;br/&gt;The device is much more than a Braille display used as a peripheral for&lt;br/&gt;reading and writing Braille.&lt;br/&gt;The Apex is what is commonly known as a Braille notetaker.&lt;br/&gt;It runs its own operating system and provides a collection of applications&lt;br/&gt;similar to those found on a laptop, but without a conventional graphical user&lt;br/&gt;interface.&lt;br/&gt;Instead, users interact with the device through speech and Braille.&lt;br/&gt;The Apex runs Windows CE 6.0 and uses KeySoft as its main software&lt;br/&gt;environment.&lt;br/&gt;KeySoft provides a text-based, menu-driven interface and several&lt;br/&gt;applications, including a word processor, an email client, a web browser, a chat&lt;br/&gt;application, and other utilities.&lt;br/&gt;Braille&lt;br/&gt;To use the device effectively, you need to know Braille.&lt;br/&gt;Both the keys used for writing and the dots used for reading are based on&lt;br/&gt;Braille.&lt;br/&gt;Learn Braille&lt;br/&gt;Personally, I used a smartphone app to learn Braille.&lt;br/&gt;After a couple of hours, I had completed the lessons and challenges, and I&lt;br/&gt;was able to start reading the Braille cells on the Apex.&lt;br/&gt;To practice further and improve my Braille skills, I also created and used&lt;br/&gt;LearnBraille.&lt;br/&gt;It is a simple Lua script that generates quizzes for&lt;br/&gt;practicing Braille characters using&lt;br/&gt;/devel/liblouis.&lt;br/&gt;% ./learnbraille.lua&lt;br/&gt;LearnBraille 0.0.1&lt;br/&gt;Conversion table: --forward unicode.dis,it-it-comp6.utb&lt;br/&gt;Black chars: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&lt;br/&gt;Repeat a char: 2&lt;br/&gt;Question [1/124]: |⠨⠇|? y&lt;br/&gt;Error! The char is: L&lt;br/&gt;Question [2/125]: |⠨⠓|? H&lt;br/&gt;Correct!&lt;br/&gt;Question [3/125]: |⠨⠛|? G&lt;br/&gt;Correct!&lt;br/&gt;Question [4/125]: |⠨⠝|?&lt;br/&gt;...&lt;br/&gt;I also used the Apex’s Word Processor to practice writing.&lt;br/&gt;We will see some screenshots later in this post.&lt;br/&gt;Notation&lt;br/&gt;I cannot assume that every reader has a Braille font installed.&lt;br/&gt;If you want to check how Braille patterns (characters) are represented,&lt;br/&gt;you can refer to the&lt;br/&gt;Wikipedia Braille Patterns page&lt;br/&gt;or the&lt;br/&gt;ISO Braille Patterns pdf.&lt;br/&gt;For this reason, I will not use Unicode Braille characters in this post.&lt;br/&gt;Instead, I will represent each character using its corresponding dot&lt;br/&gt;numbers enclosed in braces, along with the relevant keys on the Apex&lt;br/&gt;keyboard.&lt;br/&gt;For example:&lt;br/&gt;t {2345}&lt;br/&gt;v {1236}&lt;br/&gt;Main Menu: SPACE &#43; {123456}&lt;br/&gt;Option: SPACE &#43; o {135}&lt;br/&gt;Commands to be executed in the FreeBSD terminal will be preceded by %&lt;br/&gt;or #, as usual:&lt;br/&gt;% command 1&lt;br/&gt;# command 2&lt;br/&gt;VGA Output&lt;br/&gt;One particularly interesting feature of the Apex is its VGA output.&lt;br/&gt;By connecting an external monitor, you can see what is happening on the device,&lt;br/&gt;including the information shown on the Braille cells or spoken by the speech&lt;br/&gt;synthesizer.&lt;br/&gt;This is useful for sighted people who want to follow what the user is doing,&lt;br/&gt;such as teachers and support staff.&lt;br/&gt;I used the VGA output to better understand how the device works and to configure&lt;br/&gt;its Braille settings.&lt;br/&gt;In particular, I changed the English Braille setting from Grade 2, which uses&lt;br/&gt;contracted Braille, to Grade 1, which displays each letter individually.&lt;br/&gt;I prefer Grade 1 because it makes the full spelling of English words easier for&lt;br/&gt;me to read.&lt;br/&gt;Enabling the VGA output&lt;br/&gt;First, connect the Apex to an external monitor using a VGA cable.&lt;br/&gt;There are then two ways to enable the output.&lt;br/&gt;1. Navigating through the menus&lt;br/&gt;Press SPACE &#43; {123456} to open the Main Menu.&lt;br/&gt;Press Next Thumb or SPACE repeatedly until you reach Options Menu.&lt;br/&gt;Press ENTER to open the Options Menu.&lt;br/&gt;Press Next Thumb or SPACE repeatedly until you reach Visual Display.&lt;br/&gt;Press ENTER to check the current setting.&lt;br/&gt;If the current setting is Visual Display off, press v {1236} to enable the&lt;br/&gt;VGA output.&lt;br/&gt;The Apex announces Visual Display VGA.&lt;br/&gt;Press ENTER to confirm and return to the Main Menu.&lt;br/&gt;2. Using shortcuts&lt;br/&gt;Press SPACE &#43; {123456} to open the Main Menu.&lt;br/&gt;Press SPACE &#43; o {135} to open the Options Menu.&lt;br/&gt;Press v {1236} to check the current VGA status.&lt;br/&gt;If the current setting is Visual Display off, press v {1236} again to&lt;br/&gt;enable the VGA output.&lt;br/&gt;The Apex announces Visual Display VGA.&lt;br/&gt;Press ENTER to confirm and return to the Main Menu.&lt;br/&gt;In my case, I also had to open the monitor’s on-screen menu and change its input&lt;br/&gt;source from HDMI to Analog.&lt;br/&gt;The following screenshot shows the Apex connected to an external monitor with&lt;br/&gt;the Word Processor open.&lt;br/&gt;Using the Apex as a Braille display with FreeBSD&lt;br/&gt;For the Vision Accessibility project, what interests us is making the device&lt;br/&gt;work as a “simple” Braille display.&lt;br/&gt;In this mode, the Apex communicates with an external computer and acts as a&lt;br/&gt;terminal for a screen reader:&lt;br/&gt;It receives text from the computer and “writes” it on the Braille cells.&lt;br/&gt;It sends the computer the text typed on its keys.&lt;br/&gt;However, this first exploration has a narrower goal.&lt;br/&gt;At this stage, I am not writing a driver or a complete screen-reader solution:&lt;br/&gt;I am simply trying to understand how the device communicates and how to send and&lt;br/&gt;receive data.&lt;br/&gt;The goal for now is to connect the Apex to FreeBSD and exchange raw byte&lt;br/&gt;messages.&lt;br/&gt;This groundwork will be useful later, when I design a subsystem for Braille&lt;br/&gt;displays.&lt;br/&gt;The Apex driver will be its first use case.&lt;br/&gt;Setting up the Apex&lt;br/&gt;Fortunately, the Apex provides a mode designed specifically to work as a&lt;br/&gt;“simple” Braille display: the Screen Reader Terminal.&lt;br/&gt;There are two ways to enable the Screen Reader Terminal.&lt;br/&gt;1. Navigating through the menus&lt;br/&gt;Press SPACE &#43; {123456} to open the Main Menu.&lt;br/&gt;Press Next Thumb or SPACE repeatedly until you reach Terminal for&lt;br/&gt;Screen Reader.&lt;br/&gt;Press ENTER to check the current setting.&lt;br/&gt;If the current setting is Braille Terminal port currently USB client,&lt;br/&gt;press s {234} to select serial communication via USB.&lt;br/&gt;The Apex announces USB Serial.&lt;br/&gt;Press ENTER to confirm.&lt;br/&gt;2. Using shortcuts&lt;br/&gt;Press SPACE &#43; {123456} to open the Main Menu.&lt;br/&gt;Press t {2345} to go directly to the Terminal for Screen Reader setting&lt;br/&gt;and hear the current value.&lt;br/&gt;If the current setting is Braille Terminal port currently USB client,&lt;br/&gt;press s {234} to select serial communication via USB.&lt;br/&gt;The Apex announces USB Serial.&lt;br/&gt;Press ENTER to confirm.&lt;br/&gt;Attaching the Apex to FreeBSD&lt;br/&gt;Connect the Apex to your FreeBSD laptop via USB.&lt;br/&gt;Now run dmesg(8):&lt;br/&gt;...&lt;br/&gt;ugen0.5: &amp;lt;Generic Manufacturer (PROTOTYPE--Remember to change idVendor) Generic Serial (PROTOTYPE--Remember to change idVendor)&amp;gt; at usbus0&lt;br/&gt;uipaq0 on uhub1&lt;br/&gt;uipaq0: &amp;lt;Generic Manufacturer (PROTOTYPE--Remember to change idVendor) Generic Serial (PROTOTYPE--Remember to change idVendor), class 0/0, rev 2.00/0.00, addr 4&amp;gt; on usbus0&lt;br/&gt;FreeBSD recognizes the device and attaches it to the uipaq(4) driver.&lt;br/&gt;This makes sense, since the Apex runs Windows CE 6.0.&lt;br/&gt;The driver source code is in sys/dev/usb/serial/uipaq.c.&lt;br/&gt;We can also inspect the device with sysctl(8):&lt;br/&gt;% sysctl dev.uipaq&lt;br/&gt;dev.uipaq.0.ttyports: 1&lt;br/&gt;dev.uipaq.0.ttyname: U0&lt;br/&gt;dev.uipaq.0.%iommu:&lt;br/&gt;dev.uipaq.0.%parent: uhub1&lt;br/&gt;dev.uipaq.0.%pnpinfo: vendor=0x045e product=0x00ce devclass=0x00 devsubclass=0x00 devproto=0x00 sernum=&amp;#34;28171312-0031-0000-0000-000000000000&amp;#34; release=0x0000 mode=host intclass=0xff intsubclass=0xff intprotocol=0xff ttyname=U0 ttyports=1&lt;br/&gt;dev.uipaq.0.%location: bus=0 hubaddr=1 port=2 devaddr=5 interface=0 ugen=ugen0.5&lt;br/&gt;dev.uipaq.0.%driver: uipaq&lt;br/&gt;dev.uipaq.0.%desc: Generic Manufacturer (PROTOTYPE--Remember to change idVendor) Generic Serial (PROTOTYPE--Remember to change idVendor), class 0/0, rev 2.00/0.00, addr 4&lt;br/&gt;dev.uipaq.%parent:&lt;br/&gt;The same information is available with devinfo -rv | grep uipaq.&lt;br/&gt;The uipaq(4) manual page tells us that data transfer with the device goes&lt;br/&gt;through the ucom(4) interface.&lt;br/&gt;Indeed, listing the device nodes shows the serial device:&lt;br/&gt;% ls -l /dev/cuaU* /dev/ttyU*&lt;br/&gt;crw-rw---- 1 uucp dialer 0x1a5 Oct 12 23:44 /dev/cuaU0&lt;br/&gt;crw-rw---- 1 uucp dialer 0x1a6 Oct 12 23:44 /dev/cuaU0.init&lt;br/&gt;crw-rw---- 1 uucp dialer 0x1a7 Oct 12 23:44 /dev/cuaU0.lock&lt;br/&gt;crw------- 1 root wheel 0x1a2 Oct 12 23:44 /dev/ttyU0&lt;br/&gt;crw------- 1 root wheel 0x1a3 Oct 12 23:44 /dev/ttyU0.init&lt;br/&gt;crw------- 1 root wheel 0x1a4 Oct 12 23:44 /dev/ttyU0.lock&lt;br/&gt;The device node we will use is /dev/cuaU0.&lt;br/&gt;It belongs to the dialer group, so a regular user needs to be a member of that&lt;br/&gt;group to open it.&lt;br/&gt;# pw groupmod dialer -m &amp;lt;user&amp;gt;&lt;br/&gt;Inspecting the USB descriptors&lt;br/&gt;Every USB device describes itself to the host with a set of descriptors.&lt;br/&gt;Reading them tells us who the device is, which interfaces and endpoints it&lt;br/&gt;exposes, and which driver owns them.&lt;br/&gt;This is the information we need to understand how to talk to the Apex.&lt;br/&gt;The dmesg output gave us the device name, ugen0.5.&lt;br/&gt;First, we confirm it with usbconfig(8):&lt;br/&gt;# usbconfig list&lt;br/&gt;...&lt;br/&gt;ugen0.5: &amp;lt;Generic PPC Flash device Microsoft Corp.&amp;gt; at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (0mA)&lt;br/&gt;The Apex is ugen0.5 and it is connected at high speed (480 Mbps).&lt;br/&gt;“Generic PPC Flash device Microsoft Corp.” is the name FreeBSD associates with&lt;br/&gt;its vendor and product ID.&lt;br/&gt;Next, we read the device descriptor to identify the device:&lt;br/&gt;# usbconfig -d ugen0.5 dump_device_desc&lt;br/&gt;ugen0.5: &amp;lt;Generic PPC Flash device Microsoft Corp.&amp;gt; at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (0mA)&lt;br/&gt;bLength = 0x0012&lt;br/&gt;bDescriptorType = 0x0001&lt;br/&gt;bcdUSB = 0x0200&lt;br/&gt;bDeviceClass = 0x0000 &amp;lt;Probed by interface class&amp;gt;&lt;br/&gt;bDeviceSubClass = 0x0000&lt;br/&gt;bDeviceProtocol = 0x0000&lt;br/&gt;bMaxPacketSize0 = 0x0040&lt;br/&gt;idVendor = 0x045e&lt;br/&gt;idProduct = 0x00ce&lt;br/&gt;bcdDevice = 0x0000&lt;br/&gt;iManufacturer = 0x0001 &amp;lt;Generic Manufacturer (PROTOTYPE--Remember to change idVendor)&amp;gt;&lt;br/&gt;iProduct = 0x0002 &amp;lt;Generic Serial (PROTOTYPE--Remember to change idVendor)&amp;gt;&lt;br/&gt;iSerialNumber = 0x0003 &amp;lt;28171312-0031-0000-0000-000000000000&amp;gt;&lt;br/&gt;bNumConfigurations = 0x0001&lt;br/&gt;The device is USB 2.0 (bcdUSB = 0x0200).&lt;br/&gt;Its vendor ID is 0x045e (Microsoft) and its product ID is 0x00ce.&lt;br/&gt;The manufacturer and product strings look like placeholders left by the&lt;br/&gt;manufacturer.&lt;br/&gt;The device class is defined by the interface, not by the device, and there is a&lt;br/&gt;single configuration.&lt;br/&gt;Then we read the configuration descriptor to see interfaces and endpoints:&lt;br/&gt;# usbconfig -d ugen0.5 dump_curr_config_desc&lt;br/&gt;ugen0.5: &amp;lt;Generic PPC Flash device Microsoft Corp.&amp;gt; at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (0mA)&lt;br/&gt;Configuration index 0&lt;br/&gt;bLength = 0x0009&lt;br/&gt;bDescriptorType = 0x0002&lt;br/&gt;wTotalLength = 0x0020&lt;br/&gt;bNumInterfaces = 0x0001&lt;br/&gt;bConfigurationValue = 0x0001&lt;br/&gt;iConfiguration = 0x0000 &amp;lt;no string&amp;gt;&lt;br/&gt;bmAttributes = 0x00c0&lt;br/&gt;bMaxPower = 0x0000&lt;br/&gt;Interface 0&lt;br/&gt;bLength = 0x0009&lt;br/&gt;bDescriptorType = 0x0004&lt;br/&gt;bInterfaceNumber = 0x0000&lt;br/&gt;bAlternateSetting = 0x0000&lt;br/&gt;bNumEndpoints = 0x0002&lt;br/&gt;bInterfaceClass = 0x00ff &amp;lt;Vendor specific&amp;gt;&lt;br/&gt;bInterfaceSubClass = 0x00ff&lt;br/&gt;bInterfaceProtocol = 0x00ff&lt;br/&gt;iInterface = 0x0000 &amp;lt;no string&amp;gt;&lt;br/&gt;Endpoint 0&lt;br/&gt;bLength = 0x0007&lt;br/&gt;bDescriptorType = 0x0005&lt;br/&gt;bEndpointAddress = 0x0081 &amp;lt;IN&amp;gt;&lt;br/&gt;bmAttributes = 0x0002 &amp;lt;BULK&amp;gt;&lt;br/&gt;wMaxPacketSize = 0x0200&lt;br/&gt;bInterval = 0x0000&lt;br/&gt;bRefresh = 0x0000&lt;br/&gt;bSynchAddress = 0x0000&lt;br/&gt;Endpoint 1&lt;br/&gt;bLength = 0x0007&lt;br/&gt;bDescriptorType = 0x0005&lt;br/&gt;bEndpointAddress = 0x0002 &amp;lt;OUT&amp;gt;&lt;br/&gt;bmAttributes = 0x0002 &amp;lt;BULK&amp;gt;&lt;br/&gt;wMaxPacketSize = 0x0200&lt;br/&gt;bInterval = 0x0000&lt;br/&gt;bRefresh = 0x0000&lt;br/&gt;bSynchAddress = 0x0000&lt;br/&gt;The device has a single interface, whose class, subclass and protocol are all&lt;br/&gt;0xff (vendor specific).&lt;br/&gt;It has two bulk endpoints: one IN (0x81) and one OUT (0x02), both with&lt;br/&gt;512-byte packets.&lt;br/&gt;The device is also self-powered (bmAttributes = 0xc0, bMaxPower = 0).&lt;br/&gt;Other usbconfig commands do not add new information.&lt;br/&gt;usbconfig -d ugen0.5 dump_info prints only the header line already shown by&lt;br/&gt;the other commands.&lt;br/&gt;usbconfig -d ugen0.5 dump_all_config_desc and&lt;br/&gt;usbconfig -d ugen0.5 dump_all_desc repeat the descriptors already shown,&lt;br/&gt;because the device has a single configuration.&lt;br/&gt;Finally, we check which driver owns the interface.&lt;br/&gt;The show_ifdrv command shows the driver attached to each interface:&lt;br/&gt;# usbconfig -d ugen0.5 show_ifdrv&lt;br/&gt;ugen0.5: &amp;lt;Generic PPC Flash device Microsoft Corp.&amp;gt; at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (0mA)&lt;br/&gt;ugen0.5.0: uipaq0: &amp;lt;Generic Manufacturer (PROTOTYPE--Remember to change idVendor) Generic Serial (PROTOTYPE--Remember to change idVendor),&lt;br/&gt;Interface 0 of ugen0.5 is claimed by uipaq(4), which confirms what we saw in&lt;br/&gt;dmesg.&lt;br/&gt;Serial port settings&lt;br/&gt;Since the Apex appears as a serial device, we should also inspect the port&lt;br/&gt;settings before using it:&lt;br/&gt;% stty -f /dev/cuaU0 -a&lt;br/&gt;speed 9600 baud; 0 rows; 0 columns;&lt;br/&gt;lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl&lt;br/&gt;-echoprt -altwerase -noflsh -tostop -flusho -pendin -nokerninfo&lt;br/&gt;-extproc&lt;br/&gt;iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel -ignbrk&lt;br/&gt;brkint -inpck -ignpar -parmrk iutf8&lt;br/&gt;oflags: opost onlcr -ocrnl tab0 -onocr -onlret&lt;br/&gt;cflags: cread cs8 -parenb -parodd hupcl clocal -cstopb -crtscts -dsrflow&lt;br/&gt;-dtrflow -mdmbuf rtsdtr&lt;br/&gt;cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = &amp;lt;undef&amp;gt;;&lt;br/&gt;eol2 = &amp;lt;undef&amp;gt;; erase = ^?; erase2 = ^H; intr = ^C; kill = ^U;&lt;br/&gt;lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q;&lt;br/&gt;status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W;&lt;br/&gt;These are the default settings FreeBSD applies to a serial device:&lt;br/&gt;9600 baud, 8 data bits, no parity, no hardware flow control,&lt;br/&gt;canonical input mode, echo, and CR/NL translation.&lt;br/&gt;They are provided by FreeBSD and should not be assumed to reflect the&lt;br/&gt;Apex’s own configuration.&lt;br/&gt;Section 2.7.3.1, Connecting a Terminal to the Serial Port, of the Apex&lt;br/&gt;manual specifies the following settings for a USB Client serial connection:&lt;br/&gt;bit rate: 38400 bps.&lt;br/&gt;parity: none.&lt;br/&gt;data bits: 8.&lt;br/&gt;stop bits: 1.&lt;br/&gt;However, these settings are not necessarily applicable to USB serial&lt;br/&gt;communication with FreeBSD.&lt;br/&gt;I tried changing the baud rate to 1200 using cu -l /dev/cuaU0 -s 1200,&lt;br/&gt;and usbdump showed the same bytes received from the Apex as with the other&lt;br/&gt;speeds.&lt;br/&gt;One possible explanation is that the data is handled by the USB subsystem&lt;br/&gt;rather than by a conventional hardware UART, so changing the baud rate may not&lt;br/&gt;affect the actual transfer speed.&lt;br/&gt;This is only a hypothesis, however, and would require further investigation,&lt;br/&gt;in particular for the transmit direction.&lt;br/&gt;In most of my tests with the Apex I left the default FreeBSD settings unchanged.&lt;br/&gt;Occasionally, problems appeared when starting the communication,&lt;br/&gt;especially when sending data.&lt;br/&gt;A possible temporary solution is described below.&lt;br/&gt;Troubleshooting&lt;br/&gt;Note (to investigate).&lt;br/&gt;If, after a few seconds, dmesg reports that the device has disconnected:&lt;br/&gt;ugen0.5: &amp;lt;Generic Manufacturer (PROTOTYPE--Remember to change idVendor) Generic Serial (PROTOTYPE--Remember to change idVendor)&amp;gt; at usbus0 (disconnected)&lt;br/&gt;uipaq0: at uhub1, port 2, addr 4 (disconnected)&lt;br/&gt;uipaq0: detached&lt;br/&gt;set the serial terminal again on the Apex:&lt;br/&gt;Main Menu SPACE &#43; {123456} -&amp;gt; t {2345} -&amp;gt; s {234} -&amp;gt; ENTER.&lt;br/&gt;Tip.&lt;br/&gt;If dmesg shows a device other than “uipaq0 on uhub1”, set USB serial again on&lt;br/&gt;the Apex wi&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://alfonsosiciliano.gitlab.io/posts/2026-10-15-freebsd-apex.html&#34;&gt;https://alfonsosiciliano.gitlab.io/posts/2026-10-15-freebsd-apex.html&lt;/a&gt;&lt;br/&gt; &lt;img src=&#34;https://alfonsosiciliano.gitlab.io/images/apextop.png&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://alfonsosiciliano.gitlab.io/images/apexfront.png&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://alfonsosiciliano.gitlab.io/images/apexbehind.png&#34;&gt; 
    </content>
    <updated>2026-10-16T02:46:07Z</updated>
  </entry>

</feed>