Support new braille display model: Activator

Change-Id: I3e90d23b719cced7f3b86d101758790071850e8e
diff --git a/Drivers/Braille/HID/braille.c b/Drivers/Braille/HID/braille.c
index ab3fb4d..9617e7f 100644
--- a/Drivers/Braille/HID/braille.c
+++ b/Drivers/Braille/HID/braille.c
@@ -158,12 +158,15 @@
           inputReportBit += reportSize * reportCount;
           continue;
         }
-        // Fail if we get a usage of unexpected type or size
-        if (reportSize != 1) {
-          logMessage(LOG_ERR, "Unexpected input item input size %u != 1",
-                     reportSize);
-          parsingError = 1;
-          break;
+        // Ignore INPUT for the "Number of Braille Cells" usage.
+        // The display may send this INPUT message to indicate how many Braille
+        // cells we are allowed to write to at the moment, but this driver
+        // does not currently respect that request and always uses all Braille
+        // cells indicated by the OUTPUT report.
+        if (usagePage == HID_UPG_Braille &&
+          usages[0] == HID_USG_BRL_CellCount) {
+          inputReportBit += reportSize * reportCount;
+          continue;
         }
         if ((item.value.u & HID_USG_FLG_VARIABLE) != HID_USG_FLG_VARIABLE) {
           logMessage(LOG_ERR, "Unexpected non-variable input item");
diff --git a/Drivers/Braille/HID/brldefs-hid.h b/Drivers/Braille/HID/brldefs-hid.h
index ae0c998..534aa15 100644
--- a/Drivers/Braille/HID/brldefs-hid.h
+++ b/Drivers/Braille/HID/brldefs-hid.h
@@ -23,7 +23,9 @@
   HID_KEY_Dot7,
   HID_KEY_Dot8,
   HID_KEY_Space,
-
+  HID_KEY_SpaceLeft,
+  HID_KEY_SpaceRight,
+  
   HID_KEY_PanLeft,
   HID_KEY_PanRight,
 
@@ -35,7 +37,14 @@
 
   HID_KEY_RockerUp,
   HID_KEY_RockerDown,
+  HID_KEY_RockerPress,
 
+  HID_KEY_JoystickCenter,
+  HID_KEY_JoystickUp,
+  HID_KEY_JoystickDown,
+  HID_KEY_JoystickLeft,
+  HID_KEY_JoystickRight,
+  
   HID_KEY_ROUTING,
 } HID_Keys;
 
@@ -50,6 +59,8 @@
     {HID_USG_BRL_KeyboardDot7, HID_KEY_Dot7},
     {HID_USG_BRL_KeyboardDot8, HID_KEY_Dot8},
     {HID_USG_BRL_KeyboardSpace, HID_KEY_Space},
+    {HID_USG_BRL_KeyboardLeftSpace, HID_KEY_SpaceLeft},
+    {HID_USG_BRL_KeyboardRightSpace, HID_KEY_SpaceRight},
     {HID_USG_BRL_PanLeft, HID_KEY_PanLeft},
     {HID_USG_BRL_PanRight, HID_KEY_PanRight},
     {HID_USG_BRL_DPadUp, HID_KEY_DPadUp},
@@ -59,6 +70,12 @@
     {HID_USG_BRL_DPadCenter, HID_KEY_DPadCenter},
     {HID_USG_BRL_RockerUp, HID_KEY_RockerUp},
     {HID_USG_BRL_RockerDown, HID_KEY_RockerDown},
+    {HID_USG_BRL_RockerPress, HID_KEY_RockerPress},
+    {HID_USG_BRL_JoystickCenter, HID_KEY_JoystickCenter},
+    {HID_USG_BRL_JoystickUp, HID_KEY_JoystickUp},
+    {HID_USG_BRL_JoystickDown, HID_KEY_JoystickDown},
+    {HID_USG_BRL_JoystickLeft, HID_KEY_JoystickLeft},
+    {HID_USG_BRL_JoystickRight, HID_KEY_JoystickRight},
     // Router keys are handled separately.
 };
 int KEY_MAP_COUNT = sizeof(KEY_MAP) / sizeof(KEY_MAP[0]);
@@ -76,6 +93,8 @@
     {.value.number = HID_KEY_Dot7, .name = "Dot7"},
     {.value.number = HID_KEY_Dot8, .name = "Dot8"},
     {.value.number = HID_KEY_Space, .name = "Space"},
+    {.value.number = HID_KEY_SpaceLeft, .name = "SpaceLeft"},
+    {.value.number = HID_KEY_SpaceRight, .name = "SpaceRight"},
     {.value.number = HID_KEY_PanLeft, .name = "PanLeft"},
     {.value.number = HID_KEY_PanRight, .name = "PanRight"},
     {.value.number = HID_KEY_DPadUp, .name = "DPadUp"},
@@ -85,6 +104,12 @@
     {.value.number = HID_KEY_DPadCenter, .name = "DPadCenter"},
     {.value.number = HID_KEY_RockerUp, .name = "RockerUp"},
     {.value.number = HID_KEY_RockerDown, .name = "RockerDown"},
+    {.value.number = HID_KEY_RockerPress, .name = "RockerPress"},
+    {.value.number = HID_KEY_JoystickCenter, .name = "JoystickCenter"},
+    {.value.number = HID_KEY_JoystickUp, .name = "JoystickUp"},
+    {.value.number = HID_KEY_JoystickDown, .name = "JoystickDown"},
+    {.value.number = HID_KEY_JoystickLeft, .name = "JoystickLeft"},
+    {.value.number = HID_KEY_JoystickRight, .name = "JoystickRight"},
     {.value = {.group = HID_GRP_RoutingKeys, .number = KTB_KEY_ANY},
      .name = "RoutingKey"},
     {.name = NULL}};
diff --git a/Tables.brailleback/hid/HID.ktb b/Tables.brailleback/hid/HID.ktb
index 9b62d39..6ed66af 100644
--- a/Tables.brailleback/hid/HID.ktb
+++ b/Tables.brailleback/hid/HID.ktb
@@ -5,32 +5,42 @@
 
 bind RoutingKey ROUTE:ROUTE+128
 map Space SPACE
+map SpaceLeft SPACE
+map SpaceRight SPACE
 
 note Panning and Rocker keys
 note     PanLeft/RockerUp move the Braille cell window left
 note     PanRight/RockerDown move the Braille cell window right
-assign panLeft PanLeft
-bind \{panLeft} FWINLT
-assign panRight PanRight
-bind \{panRight} FWINRT
-assign rockerUp RockerUp
-bind \{rockerUp} FWINLT
-assign rockerDown RockerDown
-bind \{rockerDown} FWINRT
+bind PanLeft FWINLT
+bind PanRight FWINRT
+bind RockerUp FWINLT
+bind RockerDown FWINRT
+bind RockerPress KEY_ENTER
 
 note D-Pad
 note     DPadLeft moves to previous item, DPadRight moves to next item
 note     DPadUp moves up a line, DPadDown moves down a line
 note     DPadCenter is KEY_ENTER
-assign dpadLeft DPadLeft
-bind \{dpadLeft} CHRLT
-assign dpadRight DPadRight
-bind \{dpadRight} CHRRT
-assign dpadLeft DPadUp
-bind \{dpadLeft} LNUP
-assign dpadRight DPadDown
-bind \{dpadRight} LNDN
-assign dpadCenter DPadCenter
-bind \{dpadCenter} KEY_ENTER
+bind DPadLeft CHRLT
+bind DPadRight CHRRT
+bind DPadUp LNUP
+bind DPadDown LNDN
+bind DPadCenter KEY_ENTER
 
-include ../android-chords.kti
\ No newline at end of file
+note Joystick
+note     JoystickLeft moves the Braille cell window left, JoystickRight move the Braille cell window right
+note     JoystickUp moves up a line, JoystickDown moves down a line
+note     JoystickCenter is KEY_ENTER
+bind JoystickUp LNUP
+bind JoystickDown LNDN
+bind JoystickLeft FWINLT
+bind JoystickRight FWINRT
+bind JoystickCenter KEY_ENTER
+
+assign chord Space
+include ../android-chords.kti
+assign chord SpaceLeft
+include ../android-chords.kti
+assign chord SpaceRight
+
+include ../android-chords.kti
diff --git a/Tables.brailleback/ht/ac4.ktb b/Tables.brailleback/ht/ac4.ktb
index cc1d6da..0ee71c4 100644
--- a/Tables.brailleback/ht/ac4.ktb
+++ b/Tables.brailleback/ht/ac4.ktb
@@ -51,3 +51,23 @@
 
 include ../bm/display6.kti
 include ../bm/routing6.kti
+
+
+########################
+# BrailleBack Bindings #
+########################
+
+# ROUTE+128 is a long-press on the routing key.
+bind RoutingKey ROUTE:ROUTE+128
+
+assign space SpaceLeft
+include dots.kti
+
+assign space SpaceRight
+include dots.kti
+
+assign space SpaceLeft
+include input.kti
+
+assign space SpaceRight
+include input.kti