[BRLTTY] BRLTTY in GRUB

Nicolas Pitre nico at fluxnic.net
Fri Mar 16 14:49:40 EDT 2012


On Fri, 16 Mar 2012, Dave Mielke wrote:

> [quoted lines by Vladimir 'φ-coder/phcoder' Serbinenko on 2012/03/16 at 17:56 +0100]
> 
> >The only problem is relatively important dependencies (On Debian sudo
> >aptitude build-dep grub-pc). 
> 
> My systems aren't Debian. I guess this'll be a problem.

Fedora builds and ships grub too, so all the prerequisites are 
available.  The INSTALL file says:

|GRUB depends on some software packages installed into your system. If
|you don't have any of them, please obtain and install them before
|configuring the GRUB.
|
|* GCC 4.1.3 or later
|* GNU Make
|* GNU Bison 2.3 or later
|* GNU gettext 0.17 or later
|* GNU binutils 2.9.1.0.23 or later
|* Flex 2.5.35 or later
|* Other standard GNU/Unix tools
|
|On GNU/Linux, you also need:
|
|* libdevmapper 1.02.34 or later (recommended)
|
|To build grub-emu, you need:
|
|* ncurses
|* libusb (recommended)
|* SDL (recommended)
|
|To build GRUB's graphical terminal (gfxterm), you need:
|
|* FreeType 2 or later
|* GNU Unifont
|
|If you use a development snapshot or want to hack on GRUB you may
|need the following.
|
|* Python 2.5.2 or later
|* Autoconf 2.60 or later
|* Automake 1.10.1 or later
|* Autogen 5.10 or later
|
|Prerequisites for make-check:
|
|* qemu, specifically the binary 'qemu-system-i386'

But to get you started quickly, you may only have to do:

	yum-builddep grub


Nicolas









For instance, I had to install the following packages (using yum install 
as usual):

	autogen





> 
> >grub_dprintf by default discards the messages. If it's activated
> >(e.g. debug=brltty) it prints the messages on screen. Is there a risk
> >of this making brltty fall into loop over this?
> 
> I suppose the only problem would be if the number of lines on the rendered 
> screen isn't limited in some way to protect against memory being consumed.
> 
> Brltty itself should be okay. It knows which line of the screen it's on. Only 
> two things will cause it to move away from that line. One is direct user 
> request. The other is a feature it has called cursor tracking. If cursor 
> tracking is enabled, which is usually the case, then it automatically jumps to 
> where the cursor is whenever the cursor moves.
> 
> This reminds me that the rendered screen also needs to know which row and 
> column the cursor is at. Another helpful piece of information would be the 
> length of the longest line.
> 
> So, to collect all of this in one place, we have:
> 
> At the screen level:
>    The row and column of the cursor location.
>    The number of lines.
>    The length of the longest line.
> 
> For each line:
>    The length of the line.
>    The characters on the line.
> 
> For each character:
>    Its Unicode value.
>    Optionally, a VGA-style attributes byte.
> 
> For the highlighting, you could, of course, use something else which might be 
> more generic. Brltty could easily translate whatever you use into what it 
> needs. It's use of the VGA-style attributes byte is historical, and something 
> we've simply never updated to something more modern.
> 
> >Yes, GRUB does the same. It updates config only on an attempt to read
> >or write character.
> 
> That's exactly what brltty does.
> 
> >>I'm not sure what you mean by rescans.
> >I mean that you said that it handles hotplug. Does it do so by
> >re-enumerating all the devices on the bus?
> 
> Yes, in a logical sense. The portable usbFindChannel() ends up calling the 
> platform-specific usbFindDevice(), which usb_grub.c would need to implement. 
> Each platform-specific implementation of usbFindDevice() can, of course, cache 
> data in any way it wants to. I susepct that, for grub, caching wouldn't be 
> necessary. We do it in Linux because it saves a lot of open,read,close of files 
> under /proc and /sys. There's also usbForgetDevices(), which should clear the 
> cache, that the core calls when it knows it needs a fresh look.
> 
> >I'm actually now attempting to compile brltty.c + dependencies
> >without keyboard stub. Will see how much I have to modify.
> 
> Cool! Please let me know if I can make code changes which would resolve any 
> problems you encounter.
> 
> >Currently the most important additional change was to disable signals.
> 
> Yes, I can see the need for that. Maybe we should have a #define for 
> HAVE_SIGNALS.
> 
> >I will start with 160x24 or 80x24 then. While \infty x 24 is possible
> >it needs some code adjustments (disable wrapping, modify rendering,
> >...).
> 
> I'm fairly sure brltty is safe up to 255x255.
> 
> >How do you handle combining sequences (base codepoint + n combining
> >codepoints, n>=0)? 
> 
> We don't handle them as well as we should at the moment, but that's our 
> problem. We should fully support them, and we eventually will. The easiest 
> thing to do would probably be to always put the base character first, which 
> would then leave us free to fully incorporate the combining characters when 
> we're ready to do so.
> 
> >In GRUB a cell on the screen is occupied by a combining sequence with 
> >attributes (we do allow variations though, e.g. VGA strips all combining 
> >combining codepoints and restricts base one to a small subset).
> 
> There'd be no need to restrict the base characters.
> 
> >Colors are fully used by menu and editor modes if instructed to do so
> >(menu_color, menu_color_highlight) but falls back to
> >highlighted/non-highlighted version if color isn't available (e.g. on
> >some serial terminals).
> 
> Full colour would be difficult for brltty. The genereal structure could, of 
> course, still include it. If it's really only highlight versus normal, then a 
> simple flag would do. Maybe a "type of highlighting" field. In any event, the 
> general rendered structure could include both simple and complex colour 
> information so that an application can choose which one it wisehs to use.
> 
> While full colour doesn't make much sense in braille, brltty does have a 
> "describe character" function. It'd be cool if this functin could still give 
> the full colour information.
> 
> >Default upstream uses standard black/white for best contrast, Debian
> >though uses less accessible colors by default.
> >Color in GRUB brings no additional information compared to
> >highlighted/non-highlighted bit and are configurable for purely
> >esthetic reasons. Would it make sense to strip this useless and hard
> >to represent on braille info and just have highlight bit.
> 
> Brltty would likely only ever use the highlight indicator. As mentioned above, 
> though, you may still wish to include the full information in the general 
> structure for some other, as yet unconsidered, application. What I'm suggesting 
> is that the rendered structure be general in nature, rather than 
> brltty-specific, so that the work only need be done once.
> 
> >How is this bit represented? Vibrating dots? Since the complete
> >selected menu entry is highlighted does it create any discomfort by
> >reading it?
> 
> There are various options. My personal preference is to have the lowest row of 
> dots be briefly raised every second or so. Other users may configure it 
> differently. One option, of course, is to turn off such notification.
> 
> >Currently the problem is that the hint text is on the bottom and with
> >no limits it will be shown somewhere in the neighborhood of Andromeda
> >galaxy. So we need either to move it somewhere else (right after all
> >the entries?) or have limited number of lines. I think 160x24 will be
> >a good starting value and can be adjusted later.
> 
> :-) I think a blank line followed by the hint text, right after the last line 
> of data, would work. I guess it's all in how we define "bottom". Maybe, rather 
> than thinking in terms of infinity, we should think of the screen size as being 
> set to the number of required lines, which, of course, could change from one 
> rendering to the next.
> 
> >What if length of braille device isn't a divisor of length of line?
> >It seems it would be suboptimal.
> 
> Yes, but that happens all the time. Even with an 80-column screen, some braille 
> devices have 12, 20, 24, 32, or 70 cells. And, of course, in the graphical 
> world, a window can be any width. Brltty has ways to handle it.
> 
> -- 
> Dave Mielke           | 2213 Fox Crescent | The Bible is the very Word of God.
> Phone: 1-613-726-0014 | Ottawa, Ontario   | 2011 May 21 is the End of Salvation.
> EMail: dave at mielke.cc | Canada  K2A 1H7   | http://Mielke.cc/now.html
> http://FamilyRadio.com/                   | http://Mielke.cc/bible/
> _______________________________________________
> This message was sent via the BRLTTY mailing list.
> To post a message, send an e-mail to: BRLTTY at mielke.cc
> For general information, go to: http://mielke.cc/mailman/listinfo/brltty


More information about the BRLTTY mailing list