| /* |
| * 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-2023 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 <dave@mielke.cc>. |
| */ |
| |
| typedef struct { |
| unsigned char modelIdentifier; |
| unsigned char protocolRevision; |
| const char *modelName; |
| const KeyTableDefinition *keyTableDefinition; |
| |
| uint8_t textColumns; |
| uint8_t frontKeys; |
| uint8_t hasBar; |
| uint8_t leftSwitches; |
| uint8_t rightSwitches; |
| uint8_t leftKeys; |
| uint8_t rightKeys; |
| uint8_t statusCount; |
| } ModelEntry; |
| |
| #define PM_MODEL_IDENTITY(identifier, model, name, protocol) \ |
| .modelIdentifier = identifier, \ |
| .modelName = name, \ |
| .protocolRevision = protocol, \ |
| .keyTableDefinition = &KEY_TABLE_DEFINITION(model) |
| |
| #define PM_CELL_COUNTS(columns, status) \ |
| .textColumns = columns, \ |
| .statusCount = status |
| |
| #define PM_FRONT_KEYS(front) \ |
| .frontKeys = front |
| |
| #define PM_BAR(ls, rs, lk, rk) \ |
| .hasBar = 1, \ |
| .leftSwitches = ls, \ |
| .rightSwitches = rs, \ |
| .leftKeys = lk, \ |
| .rightKeys = rk |
| |
| |
| BEGIN_KEY_NAME_TABLE(bar) |
| BRL_KEY_NAME_ENTRY(PM, BAR, Left1, "BarLeft1"), |
| BRL_KEY_NAME_ENTRY(PM, BAR, Left2, "BarLeft2"), |
| BRL_KEY_NAME_ENTRY(PM, BAR, Right1, "BarRight1"), |
| BRL_KEY_NAME_ENTRY(PM, BAR, Right2, "BarRight2"), |
| BRL_KEY_NAME_ENTRY(PM, BAR, Up1, "BarUp1"), |
| BRL_KEY_NAME_ENTRY(PM, BAR, Up2, "BarUp2"), |
| BRL_KEY_NAME_ENTRY(PM, BAR, Down1, "BarDown1"), |
| BRL_KEY_NAME_ENTRY(PM, BAR, Down2, "BarDown2"), |
| END_KEY_NAME_TABLE |
| |
| BEGIN_KEY_NAME_TABLE(switches) |
| BRL_KEY_NAME_ENTRY(PM, SWT, LeftSwitchRear, "LeftSwitchRear"), |
| BRL_KEY_NAME_ENTRY(PM, SWT, LeftSwitchFront, "LeftSwitchFront"), |
| BRL_KEY_NAME_ENTRY(PM, SWT, RightSwitchRear, "RightSwitchRear"), |
| BRL_KEY_NAME_ENTRY(PM, SWT, RightSwitchFront, "RightSwitchFront"), |
| END_KEY_NAME_TABLE |
| |
| BEGIN_KEY_NAME_TABLE(keys) |
| BRL_KEY_NAME_ENTRY(PM, SWT, LeftKeyRear, "LeftKeyRear"), |
| BRL_KEY_NAME_ENTRY(PM, SWT, LeftKeyFront, "LeftKeyFront"), |
| BRL_KEY_NAME_ENTRY(PM, SWT, RightKeyRear, "RightKeyRear"), |
| BRL_KEY_NAME_ENTRY(PM, SWT, RightKeyFront, "RightKeyFront"), |
| END_KEY_NAME_TABLE |
| |
| BEGIN_KEY_NAME_TABLE(front9) |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 0, "Function"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 1, "Cursor"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 2, "Backward"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 3, "Up"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 4, "Home"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 5, "Down"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 6, "Forward"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 7, "Braille"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 8, "Attribute"), |
| END_KEY_NAME_TABLE |
| |
| BEGIN_KEY_NAME_TABLE(front13) |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 0, "Dot7"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 1, "Dot3"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 2, "Dot2"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 3, "Dot1"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 4, "Up"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 5, "Home"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 6, "Shift"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 7, "End"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 8, "Down"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 9, "Dot4"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 10, "Dot5"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 11, "Dot6"), |
| BRL_KEY_NUMBER_ENTRY(PM, FK1, 12, "Dot8"), |
| END_KEY_NAME_TABLE |
| |
| BEGIN_KEY_NAME_TABLE(keyboard) |
| BRL_KEY_NAME_ENTRY(PM, KBD, Dot1, "Dot1"), |
| BRL_KEY_NAME_ENTRY(PM, KBD, Dot2, "Dot2"), |
| BRL_KEY_NAME_ENTRY(PM, KBD, Dot3, "Dot3"), |
| BRL_KEY_NAME_ENTRY(PM, KBD, Dot4, "Dot4"), |
| BRL_KEY_NAME_ENTRY(PM, KBD, Dot5, "Dot5"), |
| BRL_KEY_NAME_ENTRY(PM, KBD, Dot6, "Dot6"), |
| BRL_KEY_NAME_ENTRY(PM, KBD, Dot7, "Dot7"), |
| BRL_KEY_NAME_ENTRY(PM, KBD, Dot8, "Dot8"), |
| |
| BRL_KEY_NAME_ENTRY(PM, KBD, Space, "Space"), |
| BRL_KEY_NAME_ENTRY(PM, KBD, LeftSpace, "LeftSpace"), |
| BRL_KEY_NAME_ENTRY(PM, KBD, RightSpace, "RightSpace"), |
| BRL_KEY_NAME_ENTRY(PM, KBD, LeftThumb, "LeftThumb"), |
| BRL_KEY_NAME_ENTRY(PM, KBD, RightThumb, "RightThumb"), |
| END_KEY_NAME_TABLE |
| |
| BEGIN_KEY_NAME_TABLE(routingKeys1) |
| BRL_KEY_GROUP_ENTRY(PM, RK1, "RoutingKey1"), |
| END_KEY_NAME_TABLE |
| |
| BEGIN_KEY_NAME_TABLE(routingKeys2) |
| BRL_KEY_GROUP_ENTRY(PM, RK2, "RoutingKey2"), |
| END_KEY_NAME_TABLE |
| |
| BEGIN_KEY_NAME_TABLE(statusKeys1) |
| BRL_KEY_GROUP_ENTRY(PM, SK1, "Status"), |
| END_KEY_NAME_TABLE |
| |
| BEGIN_KEY_NAME_TABLE(statusKeys2) |
| BRL_KEY_GROUP_ENTRY(PM, SK2, "StatusKey2"), |
| END_KEY_NAME_TABLE |
| |
| |
| BEGIN_KEY_NAME_TABLES(c_486) |
| KEY_NAME_TABLE(front9), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(2d_l) |
| KEY_NAME_TABLE(front9), |
| KEY_NAME_TABLE(statusKeys1), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(c) |
| KEY_NAME_TABLE(front9), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(2d_s) |
| KEY_NAME_TABLE(front13), |
| KEY_NAME_TABLE(statusKeys1), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(ib_80) |
| KEY_NAME_TABLE(front9), |
| KEY_NAME_TABLE(statusKeys1), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el_2d_40) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(switches), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(statusKeys1), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el_2d_66) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(switches), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(statusKeys1), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el_80) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(switches), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(statusKeys1), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el_2d_80) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(switches), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(statusKeys1), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el_40_p) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(switches), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(elba_32) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(switches), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(elba_20) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(switches), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el40s) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el80_ii) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(statusKeys1), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el66s) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| KEY_NAME_TABLE(routingKeys2), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el80s) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| KEY_NAME_TABLE(routingKeys2), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(trio) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(keyboard), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el70s) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| KEY_NAME_TABLE(routingKeys2), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el2d_80s) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(statusKeys1), |
| KEY_NAME_TABLE(routingKeys1), |
| KEY_NAME_TABLE(routingKeys2), |
| KEY_NAME_TABLE(statusKeys2), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(elb_tr_20) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(elb_tr_32) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el40c) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| KEY_NAME_TABLE(routingKeys2), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el60c) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| KEY_NAME_TABLE(routingKeys2), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(el80c) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(routingKeys1), |
| KEY_NAME_TABLE(routingKeys2), |
| END_KEY_NAME_TABLES |
| |
| BEGIN_KEY_NAME_TABLES(live) |
| KEY_NAME_TABLE(bar), |
| KEY_NAME_TABLE(keys), |
| KEY_NAME_TABLE(keyboard), |
| KEY_NAME_TABLE(routingKeys1), |
| END_KEY_NAME_TABLES |
| |
| DEFINE_KEY_TABLE(c_486) |
| DEFINE_KEY_TABLE(2d_l) |
| DEFINE_KEY_TABLE(c) |
| DEFINE_KEY_TABLE(2d_s) |
| DEFINE_KEY_TABLE(ib_80) |
| DEFINE_KEY_TABLE(el_2d_40) |
| DEFINE_KEY_TABLE(el_2d_66) |
| DEFINE_KEY_TABLE(el_80) |
| DEFINE_KEY_TABLE(el_2d_80) |
| DEFINE_KEY_TABLE(el_40_p) |
| DEFINE_KEY_TABLE(elba_32) |
| DEFINE_KEY_TABLE(elba_20) |
| DEFINE_KEY_TABLE(el40s) |
| DEFINE_KEY_TABLE(el80_ii) |
| DEFINE_KEY_TABLE(el66s) |
| DEFINE_KEY_TABLE(el80s) |
| DEFINE_KEY_TABLE(trio) |
| DEFINE_KEY_TABLE(el70s) |
| DEFINE_KEY_TABLE(el2d_80s) |
| DEFINE_KEY_TABLE(elb_tr_20) |
| DEFINE_KEY_TABLE(elb_tr_32) |
| DEFINE_KEY_TABLE(el40c) |
| DEFINE_KEY_TABLE(el60c) |
| DEFINE_KEY_TABLE(el80c) |
| DEFINE_KEY_TABLE(live) |
| |
| BEGIN_KEY_TABLE_LIST |
| &KEY_TABLE_DEFINITION(c_486), |
| &KEY_TABLE_DEFINITION(2d_l), |
| &KEY_TABLE_DEFINITION(c), |
| &KEY_TABLE_DEFINITION(2d_s), |
| &KEY_TABLE_DEFINITION(ib_80), |
| &KEY_TABLE_DEFINITION(el_2d_40), |
| &KEY_TABLE_DEFINITION(el_2d_66), |
| &KEY_TABLE_DEFINITION(el_80), |
| &KEY_TABLE_DEFINITION(el_2d_80), |
| &KEY_TABLE_DEFINITION(el_40_p), |
| &KEY_TABLE_DEFINITION(elba_32), |
| &KEY_TABLE_DEFINITION(elba_20), |
| &KEY_TABLE_DEFINITION(el40s), |
| &KEY_TABLE_DEFINITION(el80_ii), |
| &KEY_TABLE_DEFINITION(el66s), |
| &KEY_TABLE_DEFINITION(el80s), |
| &KEY_TABLE_DEFINITION(trio), |
| &KEY_TABLE_DEFINITION(el70s), |
| &KEY_TABLE_DEFINITION(el2d_80s), |
| &KEY_TABLE_DEFINITION(elb_tr_20), |
| &KEY_TABLE_DEFINITION(elb_tr_32), |
| &KEY_TABLE_DEFINITION(el40c), |
| &KEY_TABLE_DEFINITION(el60c), |
| &KEY_TABLE_DEFINITION(el80c), |
| &KEY_TABLE_DEFINITION(live), |
| END_KEY_TABLE_LIST |
| |
| |
| static const ModelEntry modelTable[] = { |
| { PM_MODEL_IDENTITY(0, c_486, "BrailleX Compact 486", 1), |
| PM_CELL_COUNTS(40, 0), |
| PM_FRONT_KEYS(9) |
| }, |
| |
| { PM_MODEL_IDENTITY(1, 2d_l, "BrailleX 2D Lite (plus)", 1), |
| PM_CELL_COUNTS(40, 13), |
| PM_FRONT_KEYS(9) |
| }, |
| |
| { PM_MODEL_IDENTITY(2, c, "BrailleX Compact/Tiny", 1), |
| PM_CELL_COUNTS(40, 0), |
| PM_FRONT_KEYS(9) |
| }, |
| |
| { PM_MODEL_IDENTITY(3, 2d_s, "BrailleX 2D Screen Soft", 1), |
| PM_CELL_COUNTS(80, 22), |
| PM_FRONT_KEYS(13) |
| }, |
| |
| { PM_MODEL_IDENTITY(6, ib_80, "BrailleX IB 80 CR Soft", 1), |
| PM_CELL_COUNTS(80, 4), |
| PM_FRONT_KEYS(9) |
| }, |
| |
| { PM_MODEL_IDENTITY(64, el_2d_40, "BrailleX EL 2D-40", 1), |
| PM_CELL_COUNTS(40, 13), |
| PM_BAR(1, 1, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(65, el_2d_66, "BrailleX EL 2D-66", 1), |
| PM_CELL_COUNTS(66, 13), |
| PM_BAR(1, 1, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(66, el_80, "BrailleX EL 80", 1), |
| PM_CELL_COUNTS(80, 2), |
| PM_BAR(1, 1, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(67, el_2d_80, "BrailleX EL 2D-80", 1), |
| PM_CELL_COUNTS(80, 20), |
| PM_BAR(1, 1, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(68, el_40_p, "BrailleX EL 40 P", 1), |
| PM_CELL_COUNTS(40, 0), |
| PM_BAR(1, 1, 1, 0) |
| }, |
| |
| { PM_MODEL_IDENTITY(69, elba_32, "BrailleX Elba 32", 1), |
| PM_CELL_COUNTS(32, 0), |
| PM_BAR(1, 1, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(70, elba_20, "BrailleX Elba 20", 1), |
| PM_CELL_COUNTS(20, 0), |
| PM_BAR(1, 1, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(85, el40s, "BrailleX EL40s", 1), |
| PM_CELL_COUNTS(40, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(86, el80_ii, "BrailleX EL80-II", 1), |
| PM_CELL_COUNTS(80, 2), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(87, el66s, "BrailleX EL66s", 1), |
| PM_CELL_COUNTS(66, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(88, el80s, "BrailleX EL80s", 1), |
| PM_CELL_COUNTS(80, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(89, trio, "BrailleX Trio", 2), |
| PM_CELL_COUNTS(40, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(90, el70s, "BrailleX EL70s", 1), |
| PM_CELL_COUNTS(70, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(91, el2d_80s, "BrailleX EL2D-80s", 1), |
| PM_CELL_COUNTS(80, 20), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(92, elb_tr_20, "BrailleX Elba (Trio 20)", 2), |
| PM_CELL_COUNTS(20, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(93, elb_tr_32, "BrailleX Elba (Trio 32)", 2), |
| PM_CELL_COUNTS(32, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(95, el40c, "BrailleX EL40c", 1), |
| PM_CELL_COUNTS(40, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(96, el60c, "BrailleX EL60c", 1), |
| PM_CELL_COUNTS(60, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(97, el80c, "BrailleX EL80c", 1), |
| PM_CELL_COUNTS(80, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(98, live, "BrailleX Live 40", 2), |
| PM_CELL_COUNTS(40, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(99, live, "BrailleX Live+ 40", 2), |
| PM_CELL_COUNTS(40, 0), |
| PM_BAR(0, 0, 1, 1) |
| }, |
| |
| { PM_MODEL_IDENTITY(100, live, "BrailleX Live 20", 2), |
| PM_CELL_COUNTS(20, 0), |
| PM_BAR(0, 0, 1, 1) |
| } |
| }; |
| |
| static const unsigned int modelCount = ARRAY_COUNT(modelTable); |