001package jmri.jmrix.can.cbus; 002 003/** 004 * CbusConstants.java 005 * 006 * Constants to represent CBUS protocol 007 * 008 * @author Andrew Crosland Copyright (C) 2008, 2021 009 */ 010public final class CbusConstants { 011 012 // Class only supplies static methods 013 private CbusConstants(){} 014 015 /** 016 * Handle used by service mode programmer 017 */ 018 public static final int SERVICE_HANDLE = 255; 019 020 public static final int DEFAULT_STANDARD_ID = 0x7a; 021 public static final int DEFAULT_EXTENDED_ID = 0x7a; 022 023 /** 024 * Get a String Array of valid CBUS CAN IDs for use with fixed IDs. 025 * CBUS dev guide 6b was 120-127, 6c is 100-127. 026 * @return list of CAN IDs from 100 to 127 027 */ 028 public static String[] getValidFixedCanIds() { 029 final byte MAX = 28; 030 String[] result = new String[MAX]; 031 for (int i = 0; i < MAX; i++) { 032 result[i] = String.valueOf(i + 100); 033 } 034 return result; 035 } 036 037 /** 038 * Get the Default JMRI CAN ID for new CBUS connections, 126, in String format. 039 */ 040 public static final String DEFAULT_JMRI_CAN_ID_STRING = "126"; 041 042 /** 043 * CBUS Manufacturer definitions 044 * Where the manufacturer already has an NMRA code, this is used 045 */ 046 public static final int MANU_DEV = 13; 047 public static final int SPROG_DCC = 44; // http://www.merg.co.uk 048 public static final int MANU_ROCRAIL = 70; // http://www.rocrail.net 049 public static final int MANU_SPECTRUM = 80; // http://animatedmodeler.com (Spectrum Engineering) 050 public static final int MANU_MERG = 165; // http://www.merg.co.uk 051 public static final int MANU_RME = 248; 052 public static final int MANU_SYSPIXIE = 249; 053 public static final int MANU_VLCB = 250; 054 055 /** 056 * SPROG DCC module types 057 * 058 * Must agree with firmware cbusdefs.h include file from MERGDEV repo 059 */ 060 public static final int MTYP_CANPiSPRG3 = 1; // Pi-SPROG 3 (not v2) firmware on Pi-SPROG One hardware 061 public static final int MTYP_CANSPROG3P = 2; // Sprog 3 Plus, Pi-SPROG 3v2 and Pi-SPROG 3 Plus common firmware 062 public static final int MTYP_CANSPROG = 3; 063 public static final int MTYP_SBOOST = 4; 064 //public static final int Unsupported = 5; 065 public static final int MTYP_CANSOLNOID = 8; // Servo I/O module similar to MERG CANSOLIIO 066 public static final int MTYP_CANSERVOIO = 50; // Servo I/O module similar to MERG CANMIO-SVO 067 public static final int MTYP_CANISB = 100; 068 public static final int MTYP_CANSOLIO = 101; // Solenoid I/O module with inputs 069 070 /** 071 * CBUS Opcodes 072 */ 073 // Opcodes with no data 074 public static final int CBUS_ACK = 0x00; 075 public static final int CBUS_NAK = 0x01; 076 public static final int CBUS_HLT = 0x02; 077 public static final int CBUS_BON = 0x03; 078 public static final int CBUS_TOF = 0x04; 079 public static final int CBUS_TON = 0x05; 080 public static final int CBUS_ESTOP = 0x06; 081 public static final int CBUS_ARST = 0x07; 082 public static final int CBUS_RTOF = 0x08; 083 public static final int CBUS_RTON = 0x09; 084 public static final int CBUS_RESTP = 0x0A; 085 086 public static final int CBUS_RSTAT = 0x0C; 087 public static final int CBUS_QNN = 0x0D; 088 089 public static final int CBUS_RQNP = 0x10; 090 public static final int CBUS_RQMN = 0x11; 091 092 // Opcodes with 1 data 093 public static final int CBUS_KLOC = 0x21; 094 public static final int CBUS_QLOC = 0x22; 095 public static final int CBUS_DKEEP = 0x23; 096 097 public static final int CBUS_DBG1 = 0x30; 098 099 public static final int CBUS_EXTC = 0x3F; 100 101 // Opcodes with 2 data 102 public static final int CBUS_RLOC = 0x40; 103 public static final int CBUS_QCON = 0x41; 104 public static final int CBUS_SNN = 0x42; 105 public static final int CBUS_ALOC = 0x43; 106 public static final int CBUS_STMOD = 0x44; 107 public static final int CBUS_PCON = 0x45; 108 public static final int CBUS_KCON = 0x46; 109 public static final int CBUS_DSPD = 0x47; 110 public static final int CBUS_DFLG = 0x48; 111 public static final int CBUS_DFNON = 0x49; 112 public static final int CBUS_DFNOF = 0x4A; 113 public static final int CBUS_SSTAT = 0x4C; 114 public static final int CBUS_NNRSM = 0x4F; 115 public static final int CBUS_RQNN = 0x50; 116 public static final int CBUS_NNREL = 0x51; 117 public static final int CBUS_NNACK = 0x52; 118 public static final int CBUS_NNLRN = 0x53; 119 public static final int CBUS_NNULN = 0x54; 120 public static final int CBUS_NNCLR = 0x55; 121 public static final int CBUS_NNEVN = 0x56; 122 public static final int CBUS_NERD = 0x57; 123 public static final int CBUS_RQEVN = 0x58; 124 public static final int CBUS_WRACK = 0x59; 125 public static final int CBUS_RQDAT = 0x5A; 126 public static final int CBUS_RQDDS = 0x5B; 127 public static final int CBUS_BOOTM = 0x5C; 128 public static final int CBUS_ENUM = 0x5D; 129 public static final int CBUS_NNRST = 0x5E; 130 public static final int CBUS_EXTC1 = 0x5F; 131 132 // Opcodes with 3 data 133 public static final int CBUS_DFUN = 0x60; 134 public static final int CBUS_GLOC = 0x61; 135 public static final int CBUS_ERR = 0x63; 136 137 public static final int CBUS_CMDERR = 0x6F; 138 139 public static final int CBUS_EVNLF = 0x70; 140 public static final int CBUS_NVRD = 0x71; 141 public static final int CBUS_NENRD = 0x72; 142 public static final int CBUS_RQNPN = 0x73; 143 public static final int CBUS_NUMEV = 0x74; 144 public static final int CBUS_CANID = 0x75; 145 146 public static final int CBUS_EXTC2 = 0x7F; 147 148 // Opcodes with 4 data 149 public static final int CBUS_RDCC3 = 0x80; 150 public static final int CBUS_WCVO = 0x82; 151 public static final int CBUS_WCVB = 0x83; 152 public static final int CBUS_QCVS = 0x84; 153 public static final int CBUS_PCVS = 0x85; 154 155 public static final int CBUS_ACON = 0x90; 156 public static final int CBUS_ACOF = 0x91; 157 public static final int CBUS_AREQ = 0x92; 158 public static final int CBUS_ARON = 0x93; 159 public static final int CBUS_AROF = 0x94; 160 public static final int CBUS_EVULN = 0x95; 161 public static final int CBUS_NVSET = 0x96; 162 public static final int CBUS_NVANS = 0x97; 163 public static final int CBUS_ASON = 0x98; 164 public static final int CBUS_ASOF = 0x99; 165 public static final int CBUS_ASRQ = 0x9A; 166 public static final int CBUS_PARAN = 0x9B; 167 public static final int CBUS_REVAL = 0x9C; 168 public static final int CBUS_ARSON = 0x9D; 169 public static final int CBUS_ARSOF = 0x9E; 170 public static final int CBUS_EXTC3 = 0x9F; 171 172 // OPcodes with 5 data 173 public static final int CBUS_RDCC4 = 0xA0; 174 public static final int CBUS_WCVS = 0xA2; 175 public static final int CBUS_VCVS = 0xA4; 176 177 public static final int CBUS_ACON1 = 0xB0; 178 public static final int CBUS_ACOF1 = 0xB1; 179 public static final int CBUS_REQEV = 0xB2; 180 public static final int CBUS_ARON1 = 0xB3; 181 public static final int CBUS_AROF1 = 0xB4; 182 public static final int CBUS_NEVAL = 0xB5; 183 public static final int CBUS_PNN = 0xB6; 184 public static final int CBUS_ASON1 = 0xB8; 185 public static final int CBUS_ASOF1 = 0xB9; 186 public static final int CBUS_ARSON1 = 0xBD; 187 public static final int CBUS_ARSOF1 = 0xBE; 188 public static final int CBUS_EXTC4 = 0xBF; 189 190 // Opcodes with 6 data 191 public static final int CBUS_RDCC5 = 0xC0; 192 public static final int CBUS_WCVOA = 0xC1; 193 public static final int CBUS_CABDAT = 0xC2; 194 public static final int CBUS_FCLK = 0xCF; 195 196 public static final int CBUS_ACON2 = 0xD0; 197 public static final int CBUS_ACOF2 = 0xD1; 198 public static final int CBUS_EVLRN = 0xD2; 199 public static final int CBUS_EVANS = 0xD3; 200 public static final int CBUS_ARON2 = 0xD4; 201 public static final int CBUS_AROF2 = 0xD5; 202 203 public static final int CBUS_ASON2 = 0xD8; 204 public static final int CBUS_ASOF2 = 0xD9; 205 206 public static final int CBUS_ARSON2 = 0xDD; 207 public static final int CBUS_ARSOF2 = 0xDE; 208 public static final int CBUS_EXTC5 = 0xDF; 209 210 // Opcodes with 7 data 211 public static final int CBUS_RDCC6 = 0xE0; 212 public static final int CBUS_PLOC = 0xE1; 213 public static final int CBUS_NAME = 0xE2; 214 public static final int CBUS_STAT = 0xE3; 215 216 public static final int CBUS_PARAMS = 0xEF; 217 218 public static final int CBUS_ACON3 = 0xF0; 219 public static final int CBUS_ACOF3 = 0xF1; 220 public static final int CBUS_ENRSP = 0xF2; 221 public static final int CBUS_ARON3 = 0xF3; 222 public static final int CBUS_AROF3 = 0xF4; 223 public static final int CBUS_EVLRNI = 0xF5; 224 public static final int CBUS_ACDAT = 0xF6; 225 public static final int CBUS_ARDAT = 0xF7; 226 public static final int CBUS_ASON3 = 0xF8; 227 public static final int CBUS_ASOF3 = 0xF9; 228 public static final int CBUS_DDES = 0xFA; 229 public static final int CBUS_DDRS = 0xFB; 230 public static final int CBUS_DDWS = 0xFC; 231 232 public static final int CBUS_ARSON3 = 0xFD; 233 public static final int CBUS_ARSOF3 = 0xFE; 234 public static final int CBUS_EXTC6 = 0xFF; 235 236 /** 237 * Extended opcodes, currently only used by the bootloader 238 * <p> 239 * These are all responses from the bootloader 240 */ 241 public static final int CBUS_EXT_BOOT_ERROR = 0x00; 242 public static final int CBUS_EXT_BOOT_OK = 0x01; 243 public static final int CBUS_EXT_BOOTC = 0x02; 244 public static final int CBUS_EXT_BOOT_OUT_OF_RANGE = 0x03; 245 public static final int CBUS_EXT_DEVID = 0x05; 246 public static final int CBUS_EXT_BOOTID = 0x06; 247 248 /** 249 * Bootloader commands 250 * 251 * These are used in the data payload of bootloader control frames. 252 */ 253 public static final int CBUS_BOOT_NOP = 0x00; 254 public static final int CBUS_BOOT_RESET = 0x01; 255 public static final int CBUS_BOOT_INIT = 0x02; 256 public static final int CBUS_BOOT_CHECK = 0x03; 257 public static final int CBUS_BOOT_TEST = 0x04; 258 public static final int CBUS_BOOT_DEVID = 0x05; 259 public static final int CBUS_BOOT_BOOTID = 0x06; 260 public static final int CBUS_BOOT_ENABLES = 0x07; 261 262 /** 263 * Bootloader protocol 264 * 265 * These define options for the bootloader mode 266 */ 267 public static final int CBUS_BOOT_MODE_WRT_UNLCK = 0x01; // Unlock write and erase 268 public static final int CBUS_BOOT_MODE_ERASE_ONLY = 0x02; // Erase without write 269 public static final int CBUS_BOOT_MODE_AUTO_ERASE = 0x04; // Enable auto erase before write 270 public static final int CBUS_BOOT_MODE_AUTO_INC = 0x08; // Enable auto inc the address 271 public static final int CBUS_BOOT_MODE_ACK = 0x10; // Acknowledge mode 272 273 /** 274 * Programming modes 275 */ 276 public static final int CBUS_PROG_DIRECT_BYTE = 0; 277 public static final int CBUS_PROG_DIRECT_BIT = 1; 278 public static final int CBUS_PROG_PAGED = 2; 279 public static final int CBUS_PROG_REGISTER = 3; 280 public static final int CBUS_PROG_ADDRESS = 4; 281 public static final int CBUS_OPS_BYTE = 5; 282 283 /** 284 * Error codes returned by CBUS_ERR 285 */ 286 public static final int ERR_LOCO_STACK_FULL = 1; 287 public static final int ERR_LOCO_ADDRESS_TAKEN = 2; 288 public static final int ERR_SESSION_NOT_PRESENT = 3; 289 public static final int ERR_CONSIST_EMPTY = 4; 290 public static final int ERR_LOCO_NOT_FOUND = 5; 291 public static final int ERR_CAN_BUS_ERROR = 6; 292 public static final int ERR_INVALID_REQUEST = 7; 293 public static final int ERR_SESSION_CANCELLED = 8; 294 295 /** 296 * Status codes for OPC_SSTAT 297 */ 298 public static final int SSTAT_NO_ACK = 1; 299 public static final int SSTAT_OVLD = 2; 300 public static final int SSTAT_WR_ACK = 3; 301 public static final int SSTAT_BUSY = 4; 302 public static final int SSTAT_CV_ERROR = 5; 303 304 /** 305 * Event types 306 */ 307 public static final int EVENT_ON = 0; 308 public static final int EVENT_OFF = 1; 309 public static final int EVENT_EITHER = 2; 310 public static final int EVENT_NEITHER = 3; 311 312 /** 313 * Event directions 314 */ 315 public static final int EVENT_DIR_UNSET = 0; 316 public static final int EVENT_DIR_IN = 1; 317 public static final int EVENT_DIR_OUT = 2; 318 public static final int EVENT_DIR_EITHER = 3; 319 320 /** 321 * CBUS Priorities 322 */ 323 public static final int DEFAULT_DYNAMIC_PRIORITY = 2; 324 public static final int DEFAULT_MINOR_PRIORITY = 3; 325 326 /** 327 * Function bits for group1 328 */ 329 public static final int CBUS_F0 = 16; 330 public static final int CBUS_F1 = 1; 331 public static final int CBUS_F2 = 2; 332 public static final int CBUS_F3 = 4; 333 public static final int CBUS_F4 = 8; 334 335 /** 336 * Function bits for group2 337 */ 338 public static final int CBUS_F5 = 1; 339 public static final int CBUS_F6 = 2; 340 public static final int CBUS_F7 = 4; 341 public static final int CBUS_F8 = 8; 342 343 /** 344 * Function bits for group3 345 */ 346 public static final int CBUS_F9 = 1; 347 public static final int CBUS_F10 = 2; 348 public static final int CBUS_F11 = 4; 349 public static final int CBUS_F12 = 8; 350 351 /** 352 * Function bits for group4 353 */ 354 public static final int CBUS_F13 = 1; 355 public static final int CBUS_F14 = 2; 356 public static final int CBUS_F15 = 4; 357 public static final int CBUS_F16 = 8; 358 public static final int CBUS_F17 = 0x10; 359 public static final int CBUS_F18 = 0x20; 360 public static final int CBUS_F19 = 0x40; 361 public static final int CBUS_F20 = 0x80; 362 363 /** 364 * Function bits for group5 365 */ 366 public static final int CBUS_F21 = 1; 367 public static final int CBUS_F22 = 2; 368 public static final int CBUS_F23 = 4; 369 public static final int CBUS_F24 = 8; 370 public static final int CBUS_F25 = 0x10; 371 public static final int CBUS_F26 = 0x20; 372 public static final int CBUS_F27 = 0x40; 373 public static final int CBUS_F28 = 0x80; 374 375 /** 376 * Function bits for group6 377 */ 378 public static final int CBUS_F29 = 1; 379 public static final int CBUS_F30 = 2; 380 public static final int CBUS_F31 = 4; 381 public static final int CBUS_F32 = 8; 382 public static final int CBUS_F33 = 16; 383 public static final int CBUS_F34 = 32; 384 public static final int CBUS_F35 = 64; 385 public static final int CBUS_F36 = 128; 386 387 static final int[] CBUS_FUNCTION_BITS = new int[]{ CBUS_F0, 388 CBUS_F1, CBUS_F2, CBUS_F3, CBUS_F4, CBUS_F5, CBUS_F6, CBUS_F7, 389 CBUS_F8, CBUS_F9, CBUS_F10, CBUS_F11, CBUS_F12, CBUS_F13, CBUS_F14, 390 CBUS_F15, CBUS_F16, CBUS_F17, CBUS_F18, CBUS_F19, CBUS_F20, CBUS_F21, 391 CBUS_F22, CBUS_F23, CBUS_F24, CBUS_F25, CBUS_F26, CBUS_F27, CBUS_F28, 392 CBUS_F29, CBUS_F30, CBUS_F31, CBUS_F32, CBUS_F33, CBUS_F34, CBUS_F35, CBUS_F36 }; 393 394 /** 395 * Throttle modes 396 */ 397 public static final int CBUS_SS_128 = 0; 398 public static final int CBUS_SS_14 = 1; 399 public static final int CBUS_SS_28_INTERLEAVE = 2; 400 public static final int CBUS_SS_28 = 3; 401 402 /** 403 * Number of function buttons on a throttle 404 */ 405 public static int MAX_FUNCTIONS = 32; 406 407 /** 408 * Number of slots supported by the command station 409 */ 410 public static final int CBUS_MAX_SLOTS = 32; 411}