diff --git a/Android/Gradle/app/src/main/res/xml/usb_devices.xml b/Android/Gradle/app/src/main/res/xml/usb_devices.xml
index 0ed0f7ab9..61f789f1f 100644
--- a/Android/Gradle/app/src/main/res/xml/usb_devices.xml
+++ b/Android/Gradle/app/src/main/res/xml/usb_devices.xml
@@ -340,6 +340,11 @@
+
+
+
+
+
diff --git a/Autostart/AppStream/org.a11y.brltty.metainfo.xml b/Autostart/AppStream/org.a11y.brltty.metainfo.xml
index 295b13729..b8dcab0ef 100644
--- a/Autostart/AppStream/org.a11y.brltty.metainfo.xml
+++ b/Autostart/AppStream/org.a11y.brltty.metainfo.xml
@@ -375,6 +375,11 @@
usb:v1C71pC124*
+
+
+
+ usb:v1C71pC131*
+
diff --git a/Autostart/Hotplug/brltty.usermap b/Autostart/Hotplug/brltty.usermap
index 26070adfe..31b4706af 100644
--- a/Autostart/Hotplug/brltty.usermap
+++ b/Autostart/Hotplug/brltty.usermap
@@ -355,6 +355,11 @@ brltty 0x0003 0x1c71 0xc121
# HumanWare [Humanware BrailleOne (serial protocol)]
brltty 0x0003 0x1c71 0xc124
+# Device: 1C71:C131
+# HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.0)]
+# HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.1)]
+brltty 0x0003 0x1c71 0xc131
+
# Device: 1C71:CE01
# HumanWare [NLS eReader (HID protocol, firmware 1.0)]
# HumanWare [NLS eReader (HID protocol, firmware 1.1)]
diff --git a/Autostart/Udev/device.rules.in b/Autostart/Udev/device.rules.in
index 8cbc2cafc..8f095edff 100644
--- a/Autostart/Udev/device.rules.in
+++ b/Autostart/Udev/device.rules.in
@@ -364,6 +364,11 @@ ENV{PRODUCT}=="1c71/c121/*", ENV{BRLTTY_BRAILLE_DRIVER}="hw", GOTO="brltty_usb_r
# HumanWare [Humanware BrailleOne (serial protocol)]
ENV{PRODUCT}=="1c71/c124/*", ENV{BRLTTY_BRAILLE_DRIVER}="hw", GOTO="brltty_usb_run"
+# Device: 1C71:C131
+# HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.0)]
+# HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.1)]
+ENV{PRODUCT}=="1c71/c131/*", ENV{BRLTTY_BRAILLE_DRIVER}="hw", GOTO="brltty_usb_run"
+
# Device: 1C71:CE01
# HumanWare [NLS eReader (HID protocol, firmware 1.0)]
# HumanWare [NLS eReader (HID protocol, firmware 1.1)]
diff --git a/Autostart/Windows/brltty-libusb-1.0.inf b/Autostart/Windows/brltty-libusb-1.0.inf
index 33a268e79..4bf6917cc 100644
--- a/Autostart/Windows/brltty-libusb-1.0.inf
+++ b/Autostart/Windows/brltty-libusb-1.0.inf
@@ -288,6 +288,9 @@ HKR,,Icon,,-20
; Device: 1C71:C124
"LibUSB-1.0: HumanWare [Humanware BrailleOne (serial protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C124
+; Device: 1C71:C131
+"LibUSB-1.0: HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.0)], HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.1)]"=LIBUSB_DEV, USB\VID_1C71&PID_C131
+
; Device: 1C71:CE01
"LibUSB-1.0: HumanWare [NLS eReader (HID protocol, firmware 1.0)], HumanWare [NLS eReader (HID protocol, firmware 1.1)]"=LIBUSB_DEV, USB\VID_1C71&PID_CE01
@@ -647,6 +650,9 @@ HKR,,Icon,,-20
; Device: 1C71:C124
"LibUSB-1.0: HumanWare [Humanware BrailleOne (serial protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C124
+; Device: 1C71:C131
+"LibUSB-1.0: HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.0)], HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.1)]"=LIBUSB_DEV, USB\VID_1C71&PID_C131
+
; Device: 1C71:CE01
"LibUSB-1.0: HumanWare [NLS eReader (HID protocol, firmware 1.0)], HumanWare [NLS eReader (HID protocol, firmware 1.1)]"=LIBUSB_DEV, USB\VID_1C71&PID_CE01
diff --git a/Autostart/Windows/brltty-libusb.inf b/Autostart/Windows/brltty-libusb.inf
index 63ea0d736..95c828664 100644
--- a/Autostart/Windows/brltty-libusb.inf
+++ b/Autostart/Windows/brltty-libusb.inf
@@ -375,6 +375,9 @@ ServiceBinary = %12%\libusb0_x64.sys
; Device: 1C71:C124
"LibUSB-Win32: HumanWare [Humanware BrailleOne (serial protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C124
+; Device: 1C71:C131
+"LibUSB-Win32: HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.0)], HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.1)]"=LIBUSB_DEV, USB\VID_1C71&PID_C131
+
; Device: 1C71:CE01
"LibUSB-Win32: HumanWare [NLS eReader (HID protocol, firmware 1.0)], HumanWare [NLS eReader (HID protocol, firmware 1.1)]"=LIBUSB_DEV, USB\VID_1C71&PID_CE01
@@ -734,6 +737,9 @@ ServiceBinary = %12%\libusb0_x64.sys
; Device: 1C71:C124
"LibUSB-Win32: HumanWare [Humanware BrailleOne (serial protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C124
+; Device: 1C71:C131
+"LibUSB-Win32: HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.0)], HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.1)]"=LIBUSB_DEV, USB\VID_1C71&PID_C131
+
; Device: 1C71:CE01
"LibUSB-Win32: HumanWare [NLS eReader (HID protocol, firmware 1.0)], HumanWare [NLS eReader (HID protocol, firmware 1.1)]"=LIBUSB_DEV, USB\VID_1C71&PID_CE01
@@ -1093,6 +1099,9 @@ ServiceBinary = %12%\libusb0_x64.sys
; Device: 1C71:C124
"LibUSB-Win32: HumanWare [Humanware BrailleOne (serial protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C124
+; Device: 1C71:C131
+"LibUSB-Win32: HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.0)], HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.1)]"=LIBUSB_DEV, USB\VID_1C71&PID_C131
+
; Device: 1C71:CE01
"LibUSB-Win32: HumanWare [NLS eReader (HID protocol, firmware 1.0)], HumanWare [NLS eReader (HID protocol, firmware 1.1)]"=LIBUSB_DEV, USB\VID_1C71&PID_CE01
diff --git a/Drivers/Braille/HumanWare/Makefile.in b/Drivers/Braille/HumanWare/Makefile.in
index a1f9a3a1e..9b5c7743c 100644
--- a/Drivers/Braille/HumanWare/Makefile.in
+++ b/Drivers/Braille/HumanWare/Makefile.in
@@ -18,7 +18,7 @@
DRIVER_CODE = hw
DRIVER_NAME = HumanWare
-DRIVER_COMMENT = Brailliant BI 14/32/40, Brailliant B 80, BrailleNote Touch, BrailleOne, APH Chameleon 20, APH Mantis Q40, NLS eReader
+DRIVER_COMMENT = Brailliant BI 14/32/40, Brailliant B 80, BrailleNote Touch, BrailleOne, APH Chameleon 20, APH Mantis Q40, NLS eReader, Brailliant BI 40X
DRIVER_VERSION =
DRIVER_DEVELOPERS = Dave Mielke
include $(SRC_TOP)braille.mk
diff --git a/Drivers/Braille/HumanWare/braille.c b/Drivers/Braille/HumanWare/braille.c
index 1feb40fd0..c758474aa 100644
--- a/Drivers/Braille/HumanWare/braille.c
+++ b/Drivers/Braille/HumanWare/braille.c
@@ -90,6 +90,14 @@ BEGIN_KEY_NAME_TABLES(BI40)
KEY_NAME_TABLE(command),
END_KEY_NAME_TABLES
+BEGIN_KEY_NAME_TABLES(BI40X)
+ KEY_NAME_TABLE(routing),
+ KEY_NAME_TABLE(thumb),
+ KEY_NAME_TABLE(braille),
+ KEY_NAME_TABLE(command),
+END_KEY_NAME_TABLES
+
+
BEGIN_KEY_NAME_TABLES(B80)
KEY_NAME_TABLE(routing),
KEY_NAME_TABLE(thumb),
@@ -128,6 +136,7 @@ END_KEY_NAME_TABLES
DEFINE_KEY_TABLE(BI14)
DEFINE_KEY_TABLE(BI32)
DEFINE_KEY_TABLE(BI40)
+DEFINE_KEY_TABLE(BI40X)
DEFINE_KEY_TABLE(B80)
DEFINE_KEY_TABLE(touch)
DEFINE_KEY_TABLE(C20)
@@ -139,6 +148,7 @@ BEGIN_KEY_TABLE_LIST
&KEY_TABLE_DEFINITION(BI14),
&KEY_TABLE_DEFINITION(BI32),
&KEY_TABLE_DEFINITION(BI40),
+ &KEY_TABLE_DEFINITION(BI40X),
&KEY_TABLE_DEFINITION(B80),
&KEY_TABLE_DEFINITION(touch),
&KEY_TABLE_DEFINITION(C20),
@@ -179,6 +189,14 @@ static const ModelEntry modelEntry_BI40 = {
.keyTableDefinition = &KEY_TABLE_DEFINITION(BI40)
};
+static const ModelEntry modelEntry_BI40X = {
+ .modelName = "Brailliant BI 40X",
+ .modelIdentifier = HW_MODEL_HW_BI40X,
+ .hasBrailleKeys = 1,
+ .hasCommandKeys = 1,
+ .keyTableDefinition = &KEY_TABLE_DEFINITION(BI40X)
+};
+
static const ModelEntry modelEntry_B80 = {
.modelName = "Brailliant B 80",
.hasCommandKeys = 1,
@@ -224,6 +242,7 @@ static const ModelEntry *modelTable[] = {
&modelEntry_BI14,
&modelEntry_BI32,
&modelEntry_BI40,
+ &modelEntry_BI40X,
&modelEntry_B80,
&modelEntry_touch,
&modelEntry_C20,
@@ -840,6 +859,11 @@ static const ResourceData resourceData_serial_one = {
.protocol = &serialProtocol
};
+static const ResourceData resourceData_serial_BI40X = {
+ .model = &modelEntry_BI40X,
+ .protocol = &serialProtocol
+};
+
static const ResourceData resourceData_HID = {
.protocol = &hidProtocol
};
@@ -869,6 +893,11 @@ static const ResourceData resourceData_HID_one = {
.protocol = &hidProtocol
};
+static const ResourceData resourceData_HID_BI40X = {
+ .model = &modelEntry_BI40X,
+ .protocol = &hidProtocol
+};
+
static int
connectResource (BrailleDisplay *brl, const char *identifier) {
static const SerialParameters serialParameters = {
@@ -1017,6 +1046,27 @@ connectResource (BrailleDisplay *brl, const char *identifier) {
.data = &resourceData_HID_one,
.resetDevice = 1
},
+
+ { /* Humanware Brailliant BI 40X (HID protocol, firmware 1.0) */
+ .vendor=0X1C71, .product=0XC131,
+ .configuration=1, .interface=1, .alternative=0,
+ .inputEndpoint=4, .outputEndpoint=5,
+ .verifyInterface = 1,
+ .data = &resourceData_HID_BI40X,
+ .resetDevice = 1
+ },
+
+ { /* Humanware Brailliant BI 40X (HID protocol, firmware 1.1) */
+ .vendor=0X1C71, .product=0XC131,
+ .configuration=1, .interface=0, .alternative=0,
+ .inputEndpoint=1, .outputEndpoint=2,
+ .verifyInterface = 1,
+ .data = &resourceData_HID_BI40X,
+ .resetDevice = 1
+ },
+
+
+
END_USB_CHANNEL_DEFINITIONS
GioDescriptor descriptor;
diff --git a/Drivers/Braille/HumanWare/brldefs-hw.h b/Drivers/Braille/HumanWare/brldefs-hw.h
index 3c09bc450..e38be3465 100644
--- a/Drivers/Braille/HumanWare/brldefs-hw.h
+++ b/Drivers/Braille/HumanWare/brldefs-hw.h
@@ -45,6 +45,7 @@ typedef enum {
HW_MODEL_APH_MANTIS_Q40 = 0X12,
HW_MODEL_NLS_EREADER = 0X13,
HW_MODEL_HW_BRAILLE_ONE = 0X14,
+ HW_MODEL_HW_BI40X = 0X15,
} HW_ModelIdentifier;
typedef union {
diff --git a/Programs/bluetooth_names.c b/Programs/bluetooth_names.c
index be73a5eaa..15d783150 100644
--- a/Programs/bluetooth_names.c
+++ b/Programs/bluetooth_names.c
@@ -97,6 +97,13 @@ const BluetoothNameEntry bluetoothNameTable[] = {
// HumanWare: Brailliant BI
BLUETOOTH_NAME_ENTRY("Brailliant BI", "hw"),
+
+ // HumanWare: Brailliant BI 20X
+ BLUETOOTH_NAME_ENTRY("Brailliant BI 20X", "hw"),
+
+ // HumanWare: Brailliant BI 40X
+ BLUETOOTH_NAME_ENTRY("Brailliant BI 40X", "hw"),
+
// HumanWare: Brailliant BI 14
BLUETOOTH_NAME_ENTRY("Brailliant 14", "hw"),
diff --git a/Programs/usb_devices.c b/Programs/usb_devices.c
index 2d8f9b654..23df42bdd 100644
--- a/Programs/usb_devices.c
+++ b/Programs/usb_devices.c
@@ -364,6 +364,11 @@ USB_DEVICE_ENTRY(0X1C71, 0XC121, "hw"),
// HumanWare [Humanware BrailleOne (serial protocol)]
USB_DEVICE_ENTRY(0X1C71, 0XC124, "hw"),
+// Device: 1C71:C131
+// HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.0)]
+// HumanWare [Humanware Brailliant BI 40X (HID protocol, firmware 1.1)]
+USB_DEVICE_ENTRY(0X1C71, 0XC131, "hw"),
+
// Device: 1C71:CE01
// HumanWare [NLS eReader (HID protocol, firmware 1.0)]
// HumanWare [NLS eReader (HID protocol, firmware 1.1)]
diff --git a/Tables/Input/hw/BI40X.ktb b/Tables/Input/hw/BI40X.ktb
new file mode 100644
index 000000000..d65ad1024
--- /dev/null
+++ b/Tables/Input/hw/BI40X.ktb
@@ -0,0 +1,24 @@
+###############################################################################
+# BRLTTY - A background process providing access to the console screen (when in
+# text mode) for a blind person using a refreshable braille display.
+#
+# Copyright (C) 1995-2021 by The BRLTTY Developers.
+#
+# BRLTTY comes with ABSOLUTELY NO WARRANTY.
+#
+# This is free software, placed under the terms of the
+# GNU Lesser General Public License, as published by the Free Software
+# Foundation; either version 2.1 of the License, or (at your option) any
+# later version. Please see the file LICENSE-LGPL for details.
+#
+# Web Page: http://brltty.app/
+#
+# This software is maintained by Dave Mielke .
+###############################################################################
+
+title HumanWare Brailliant BI 40X
+
+include thumb.kti
+include braille.kti
+include command.kti
+include routing.kti