blob: 37eb2c54442560dbffd05e6100c425047d41bca6 [file] [view]
# BRLTTY in Chrome OS
Chrome OS uses the open-source [BRLTTY](http://mielke.cc/brltty/)
library to provide support for refreshable braille displays.
We typically ship with a stable release build of BRLTTY plus some
cherry-picked patches.
## Updating BRLTTY or adding a patch
First, follow the public
[Chromium OS Developer Guide](http://www.chromium.org/chromium-os/developer-guide) to check out the source.
At a minimum you'll need to create a chroot.
You do not need to build everything from source.
You do need to start the devserver.
Next, flash your device to a very recent test build. Internally at Google
you can do this with the following command when the dev server is running,
where CHROMEBOOK_IP_ADDRESS is the IP address of your Chromebook already
in developer mode, and $BOARD is your Chromebook's board name.
```cros flash ssh://CHROMEBOOK_IP_ADDRESS xbuddy://remote/$BOARD/latest-dev/test```
The BRLTTY files can be found in this directory:
```third_party/chromiumos-overlay/app-accessibility/brltty```
The first thing you'll need to do is edit the ebuild symlink to change the
revision number. The real file is something like brltty-5.4.ebuild,
but the revision will be something like brltty-5.4-r5.ebuild. You'll need
to increment it.
To increment it from r5 to r6, you'd do something like this:
```
rm brltty-5.4-r5.ebuild
ln -s brltty-5.4.ebuild brltty-5.4-r6.ebuild
git add brltty-5.4-r6.ebuild
```
The changes we make are all patches against a stable release of brltty.
To add a new patch, put it in the files/ directory and reference it in
brltty.bashrc
Once you're done adding patches or making other changes, flash it to your
device like this:
```
emerge-$BOARD brltty
cros deploy CHROMEBOOK_IP_ADDRESS brltty
```
After that, reboot your Chromebook and verify that brltty works.
To upload a change, use repo, something like this:
```
repo start <branch_name> .
git commit -a
BUG=chromium:12345
TEST=Write what you tested here
repo upload .
```
Note that you shouldn't need to run cros_workon.
## Uprevving Brltty
This section outlines the process to upgrade Brltty to a major release.
### Prerequisites
First, download the latest brltty release tarball
http://mielke.cc/brltty/archive
E.g.
brltty-5.6.tar.gz
The server holding all Chrome OS source packages is Google Cloud Storage. In
order to update Brltty, you will need to first get started with GCS.
[Google-internal only](https://sites.google.com/a/google.com/chromeos/resources/engineering/releng/localmirror)
If you follow the alternative cli workflow, you should have the ability to
list the Chrome OS GCS bucket:
```gsutil ls gs://chromeos-localmirror/```
for example:
gs://chromeos-localmirror/distfiles/brltty-5.6.tar.gz
is the latest release as of writing.
It will also be handy to checkout brltty.
```Git clone http://github.com/brltty/brltty```
And follow the instructions in the readme to configure/build.
### Upload the latest stable release of brltty.
You can do this via ```gsutil cp```.
After copying, you will likely want the package to be world readable:
```
gsutil acl ch -u AllUsers:R gs://chromeos-localmirror/distfiles/brltty-5.6.tar.gz
```
### Upreving
Next, you will need to uprev the ebuild. Do this by renaming all files from the previous version to the new one.
E.g.
Brltty-5.4.ebuild -> brltty-5.6.ebuild
Note: Manifest has various checksums computed based on the release you uploaded to GCS. Each of these will need to be replaced/updated.
This should be enough to kick off a build. It is likely patches won’t apply cleanly.
Apply patches
It is often much easier to apply patches to your local checkout of brltty from github, an build there.
```git tags```
Will ensure you find the right release. You can then checkout that release via
```Git checkout tags/<tag_name>```
### Testing
Once you have a build deployed on a machine, here are a few useful things
to check:
* Routing keys within a text field
* Routing keys on a link
* Basic braille output
* Chorded commands (e.g. space + s to toggle speech)
* Typing (e.g. dots 1-2-3 within a text field)
* Display specific hardware keys
* Unload ChromeVox (ctrl+alt+z), plug in a display; ChromeVox should auto
start
Try to test with at least two displays.