001// Copyright (c) FIRST and other WPILib contributors. 002// Open Source Software; you can modify and/or share it under the terms of 003// the WPILib BSD license file in the root directory of this project. 004 005package edu.wpi.first.wpilibj.simulation; 006 007import edu.wpi.first.hal.simulation.NotifyCallback; 008import edu.wpi.first.hal.simulation.RoboRioDataJNI; 009 010/** A utility class to control a simulated RoboRIO. */ 011public final class RoboRioSim { 012 private RoboRioSim() { 013 // Utility class 014 } 015 016 /** 017 * Register a callback to be run when the FPGA button state changes. 018 * 019 * @param callback the callback 020 * @param initialNotify whether to run the callback with the initial state 021 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 022 * this object so GC doesn't cancel the callback. 023 */ 024 public static CallbackStore registerFPGAButtonCallback( 025 NotifyCallback callback, boolean initialNotify) { 026 int uid = RoboRioDataJNI.registerFPGAButtonCallback(callback, initialNotify); 027 return new CallbackStore(uid, RoboRioDataJNI::cancelFPGAButtonCallback); 028 } 029 030 /** 031 * Query the state of the FPGA button. 032 * 033 * @return the FPGA button state 034 */ 035 public static boolean getFPGAButton() { 036 return RoboRioDataJNI.getFPGAButton(); 037 } 038 039 /** 040 * Define the state of the FPGA button. 041 * 042 * @param fpgaButton the new state 043 */ 044 public static void setFPGAButton(boolean fpgaButton) { 045 RoboRioDataJNI.setFPGAButton(fpgaButton); 046 } 047 048 /** 049 * Register a callback to be run whenever the Vin voltage changes. 050 * 051 * @param callback the callback 052 * @param initialNotify whether to call the callback with the initial state 053 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 054 * this object so GC doesn't cancel the callback. 055 */ 056 public static CallbackStore registerVInVoltageCallback( 057 NotifyCallback callback, boolean initialNotify) { 058 int uid = RoboRioDataJNI.registerVInVoltageCallback(callback, initialNotify); 059 return new CallbackStore(uid, RoboRioDataJNI::cancelVInVoltageCallback); 060 } 061 062 /** 063 * Measure the Vin voltage. 064 * 065 * @return the Vin voltage 066 */ 067 public static double getVInVoltage() { 068 return RoboRioDataJNI.getVInVoltage(); 069 } 070 071 /** 072 * Define the Vin voltage. 073 * 074 * @param vInVoltage the new voltage 075 */ 076 public static void setVInVoltage(double vInVoltage) { 077 RoboRioDataJNI.setVInVoltage(vInVoltage); 078 } 079 080 /** 081 * Register a callback to be run whenever the Vin current changes. 082 * 083 * @param callback the callback 084 * @param initialNotify whether the callback should be called with the initial value 085 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 086 * this object so GC doesn't cancel the callback. 087 */ 088 public static CallbackStore registerVInCurrentCallback( 089 NotifyCallback callback, boolean initialNotify) { 090 int uid = RoboRioDataJNI.registerVInCurrentCallback(callback, initialNotify); 091 return new CallbackStore(uid, RoboRioDataJNI::cancelVInCurrentCallback); 092 } 093 094 /** 095 * Measure the Vin current. 096 * 097 * @return the Vin current 098 */ 099 public static double getVInCurrent() { 100 return RoboRioDataJNI.getVInCurrent(); 101 } 102 103 /** 104 * Define the Vin current. 105 * 106 * @param vInCurrent the new current 107 */ 108 public static void setVInCurrent(double vInCurrent) { 109 RoboRioDataJNI.setVInCurrent(vInCurrent); 110 } 111 112 /** 113 * Register a callback to be run whenever the 6V rail voltage changes. 114 * 115 * @param callback the callback 116 * @param initialNotify whether the callback should be called with the initial value 117 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 118 * this object so GC doesn't cancel the callback. 119 */ 120 public static CallbackStore registerUserVoltage6VCallback( 121 NotifyCallback callback, boolean initialNotify) { 122 int uid = RoboRioDataJNI.registerUserVoltage6VCallback(callback, initialNotify); 123 return new CallbackStore(uid, RoboRioDataJNI::cancelUserVoltage6VCallback); 124 } 125 126 /** 127 * Measure the 6V rail voltage. 128 * 129 * @return the 6V rail voltage 130 */ 131 public static double getUserVoltage6V() { 132 return RoboRioDataJNI.getUserVoltage6V(); 133 } 134 135 /** 136 * Define the 6V rail voltage. 137 * 138 * @param userVoltage6V the new voltage 139 */ 140 public static void setUserVoltage6V(double userVoltage6V) { 141 RoboRioDataJNI.setUserVoltage6V(userVoltage6V); 142 } 143 144 /** 145 * Register a callback to be run whenever the 6V rail current changes. 146 * 147 * @param callback the callback 148 * @param initialNotify whether the callback should be called with the initial value 149 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 150 * this object so GC doesn't cancel the callback. 151 */ 152 public static CallbackStore registerUserCurrent6VCallback( 153 NotifyCallback callback, boolean initialNotify) { 154 int uid = RoboRioDataJNI.registerUserCurrent6VCallback(callback, initialNotify); 155 return new CallbackStore(uid, RoboRioDataJNI::cancelUserCurrent6VCallback); 156 } 157 158 /** 159 * Measure the 6V rail current. 160 * 161 * @return the 6V rail current 162 */ 163 public static double getUserCurrent6V() { 164 return RoboRioDataJNI.getUserCurrent6V(); 165 } 166 167 /** 168 * Define the 6V rail current. 169 * 170 * @param userCurrent6V the new current 171 */ 172 public static void setUserCurrent6V(double userCurrent6V) { 173 RoboRioDataJNI.setUserCurrent6V(userCurrent6V); 174 } 175 176 /** 177 * Register a callback to be run whenever the 6V rail active state changes. 178 * 179 * @param callback the callback 180 * @param initialNotify whether the callback should be called with the initial state 181 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 182 * this object so GC doesn't cancel the callback. 183 */ 184 public static CallbackStore registerUserActive6VCallback( 185 NotifyCallback callback, boolean initialNotify) { 186 int uid = RoboRioDataJNI.registerUserActive6VCallback(callback, initialNotify); 187 return new CallbackStore(uid, RoboRioDataJNI::cancelUserActive6VCallback); 188 } 189 190 /** 191 * Get the 6V rail active state. 192 * 193 * @return true if the 6V rail is active 194 */ 195 public static boolean getUserActive6V() { 196 return RoboRioDataJNI.getUserActive6V(); 197 } 198 199 /** 200 * Set the 6V rail active state. 201 * 202 * @param userActive6V true to make rail active 203 */ 204 public static void setUserActive6V(boolean userActive6V) { 205 RoboRioDataJNI.setUserActive6V(userActive6V); 206 } 207 208 /** 209 * Register a callback to be run whenever the 5V rail voltage changes. 210 * 211 * @param callback the callback 212 * @param initialNotify whether the callback should be called with the initial value 213 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 214 * this object so GC doesn't cancel the callback. 215 */ 216 public static CallbackStore registerUserVoltage5VCallback( 217 NotifyCallback callback, boolean initialNotify) { 218 int uid = RoboRioDataJNI.registerUserVoltage5VCallback(callback, initialNotify); 219 return new CallbackStore(uid, RoboRioDataJNI::cancelUserVoltage5VCallback); 220 } 221 222 /** 223 * Measure the 5V rail voltage. 224 * 225 * @return the 5V rail voltage 226 */ 227 public static double getUserVoltage5V() { 228 return RoboRioDataJNI.getUserVoltage5V(); 229 } 230 231 /** 232 * Define the 5V rail voltage. 233 * 234 * @param userVoltage5V the new voltage 235 */ 236 public static void setUserVoltage5V(double userVoltage5V) { 237 RoboRioDataJNI.setUserVoltage5V(userVoltage5V); 238 } 239 240 /** 241 * Register a callback to be run whenever the 5V rail current changes. 242 * 243 * @param callback the callback 244 * @param initialNotify whether the callback should be called with the initial value 245 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 246 * this object so GC doesn't cancel the callback. 247 */ 248 public static CallbackStore registerUserCurrent5VCallback( 249 NotifyCallback callback, boolean initialNotify) { 250 int uid = RoboRioDataJNI.registerUserCurrent5VCallback(callback, initialNotify); 251 return new CallbackStore(uid, RoboRioDataJNI::cancelUserCurrent5VCallback); 252 } 253 254 /** 255 * Measure the 5V rail current. 256 * 257 * @return the 5V rail current 258 */ 259 public static double getUserCurrent5V() { 260 return RoboRioDataJNI.getUserCurrent5V(); 261 } 262 263 /** 264 * Define the 5V rail current. 265 * 266 * @param userCurrent5V the new current 267 */ 268 public static void setUserCurrent5V(double userCurrent5V) { 269 RoboRioDataJNI.setUserCurrent5V(userCurrent5V); 270 } 271 272 /** 273 * Register a callback to be run whenever the 5V rail active state changes. 274 * 275 * @param callback the callback 276 * @param initialNotify whether the callback should be called with the initial state 277 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 278 * this object so GC doesn't cancel the callback. 279 */ 280 public static CallbackStore registerUserActive5VCallback( 281 NotifyCallback callback, boolean initialNotify) { 282 int uid = RoboRioDataJNI.registerUserActive5VCallback(callback, initialNotify); 283 return new CallbackStore(uid, RoboRioDataJNI::cancelUserActive5VCallback); 284 } 285 286 /** 287 * Get the 5V rail active state. 288 * 289 * @return true if the 5V rail is active 290 */ 291 public static boolean getUserActive5V() { 292 return RoboRioDataJNI.getUserActive5V(); 293 } 294 295 /** 296 * Set the 5V rail active state. 297 * 298 * @param userActive5V true to make rail active 299 */ 300 public static void setUserActive5V(boolean userActive5V) { 301 RoboRioDataJNI.setUserActive5V(userActive5V); 302 } 303 304 /** 305 * Register a callback to be run whenever the 3.3V rail voltage changes. 306 * 307 * @param callback the callback 308 * @param initialNotify whether the callback should be called with the initial value 309 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 310 * this object so GC doesn't cancel the callback. 311 */ 312 public static CallbackStore registerUserVoltage3V3Callback( 313 NotifyCallback callback, boolean initialNotify) { 314 int uid = RoboRioDataJNI.registerUserVoltage3V3Callback(callback, initialNotify); 315 return new CallbackStore(uid, RoboRioDataJNI::cancelUserVoltage3V3Callback); 316 } 317 318 /** 319 * Measure the 3.3V rail voltage. 320 * 321 * @return the 3.3V rail voltage 322 */ 323 public static double getUserVoltage3V3() { 324 return RoboRioDataJNI.getUserVoltage3V3(); 325 } 326 327 /** 328 * Define the 3.3V rail voltage. 329 * 330 * @param userVoltage3V3 the new voltage 331 */ 332 public static void setUserVoltage3V3(double userVoltage3V3) { 333 RoboRioDataJNI.setUserVoltage3V3(userVoltage3V3); 334 } 335 336 /** 337 * Register a callback to be run whenever the 3.3V rail current changes. 338 * 339 * @param callback the callback 340 * @param initialNotify whether the callback should be called with the initial value 341 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 342 * this object so GC doesn't cancel the callback. 343 */ 344 public static CallbackStore registerUserCurrent3V3Callback( 345 NotifyCallback callback, boolean initialNotify) { 346 int uid = RoboRioDataJNI.registerUserCurrent3V3Callback(callback, initialNotify); 347 return new CallbackStore(uid, RoboRioDataJNI::cancelUserCurrent3V3Callback); 348 } 349 350 /** 351 * Measure the 3.3V rail current. 352 * 353 * @return the 3.3V rail current 354 */ 355 public static double getUserCurrent3V3() { 356 return RoboRioDataJNI.getUserCurrent3V3(); 357 } 358 359 /** 360 * Define the 3.3V rail current. 361 * 362 * @param userCurrent3V3 the new current 363 */ 364 public static void setUserCurrent3V3(double userCurrent3V3) { 365 RoboRioDataJNI.setUserCurrent3V3(userCurrent3V3); 366 } 367 368 /** 369 * Register a callback to be run whenever the 3.3V rail active state changes. 370 * 371 * @param callback the callback 372 * @param initialNotify whether the callback should be called with the initial state 373 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 374 * this object so GC doesn't cancel the callback. 375 */ 376 public static CallbackStore registerUserActive3V3Callback( 377 NotifyCallback callback, boolean initialNotify) { 378 int uid = RoboRioDataJNI.registerUserActive3V3Callback(callback, initialNotify); 379 return new CallbackStore(uid, RoboRioDataJNI::cancelUserActive3V3Callback); 380 } 381 382 /** 383 * Get the 3.3V rail active state. 384 * 385 * @return true if the 3.3V rail is active 386 */ 387 public static boolean getUserActive3V3() { 388 return RoboRioDataJNI.getUserActive3V3(); 389 } 390 391 /** 392 * Set the 3.3V rail active state. 393 * 394 * @param userActive3V3 true to make rail active 395 */ 396 public static void setUserActive3V3(boolean userActive3V3) { 397 RoboRioDataJNI.setUserActive3V3(userActive3V3); 398 } 399 400 /** 401 * Register a callback to be run whenever the 6V rail number of faults changes. 402 * 403 * @param callback the callback 404 * @param initialNotify whether the callback should be called with the initial value 405 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 406 * this object so GC doesn't cancel the callback. 407 */ 408 public static CallbackStore registerUserFaults6VCallback( 409 NotifyCallback callback, boolean initialNotify) { 410 int uid = RoboRioDataJNI.registerUserFaults6VCallback(callback, initialNotify); 411 return new CallbackStore(uid, RoboRioDataJNI::cancelUserFaults6VCallback); 412 } 413 414 /** 415 * Get the 6V rail number of faults. 416 * 417 * @return number of faults 418 */ 419 public static int getUserFaults6V() { 420 return RoboRioDataJNI.getUserFaults6V(); 421 } 422 423 /** 424 * Set the 6V rail number of faults. 425 * 426 * @param userFaults6V number of faults 427 */ 428 public static void setUserFaults6V(int userFaults6V) { 429 RoboRioDataJNI.setUserFaults6V(userFaults6V); 430 } 431 432 /** 433 * Register a callback to be run whenever the 5V rail number of faults changes. 434 * 435 * @param callback the callback 436 * @param initialNotify whether the callback should be called with the initial value 437 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 438 * this object so GC doesn't cancel the callback. 439 */ 440 public static CallbackStore registerUserFaults5VCallback( 441 NotifyCallback callback, boolean initialNotify) { 442 int uid = RoboRioDataJNI.registerUserFaults5VCallback(callback, initialNotify); 443 return new CallbackStore(uid, RoboRioDataJNI::cancelUserFaults5VCallback); 444 } 445 446 /** 447 * Get the 5V rail number of faults. 448 * 449 * @return number of faults 450 */ 451 public static int getUserFaults5V() { 452 return RoboRioDataJNI.getUserFaults5V(); 453 } 454 455 /** 456 * Set the 5V rail number of faults. 457 * 458 * @param userFaults5V number of faults 459 */ 460 public static void setUserFaults5V(int userFaults5V) { 461 RoboRioDataJNI.setUserFaults5V(userFaults5V); 462 } 463 464 /** 465 * Register a callback to be run whenever the 3.3V rail number of faults changes. 466 * 467 * @param callback the callback 468 * @param initialNotify whether the callback should be called with the initial value 469 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 470 * this object so GC doesn't cancel the callback. 471 */ 472 public static CallbackStore registerUserFaults3V3Callback( 473 NotifyCallback callback, boolean initialNotify) { 474 int uid = RoboRioDataJNI.registerUserFaults3V3Callback(callback, initialNotify); 475 return new CallbackStore(uid, RoboRioDataJNI::cancelUserFaults3V3Callback); 476 } 477 478 /** 479 * Get the 3.3V rail number of faults. 480 * 481 * @return number of faults 482 */ 483 public static int getUserFaults3V3() { 484 return RoboRioDataJNI.getUserFaults3V3(); 485 } 486 487 /** 488 * Set the 3.3V rail number of faults. 489 * 490 * @param userFaults3V3 number of faults 491 */ 492 public static void setUserFaults3V3(int userFaults3V3) { 493 RoboRioDataJNI.setUserFaults3V3(userFaults3V3); 494 } 495 496 /** 497 * Register a callback to be run whenever the Brownout voltage changes. 498 * 499 * @param callback the callback 500 * @param initialNotify whether to call the callback with the initial state 501 * @return the {@link CallbackStore} object associated with this callback. Save a reference to 502 * this object so GC doesn't cancel the callback. 503 */ 504 public static CallbackStore registerBrownoutVoltageCallback( 505 NotifyCallback callback, boolean initialNotify) { 506 int uid = RoboRioDataJNI.registerBrownoutVoltageCallback(callback, initialNotify); 507 return new CallbackStore(uid, RoboRioDataJNI::cancelBrownoutVoltageCallback); 508 } 509 510 /** 511 * Measure the Brownout voltage. 512 * 513 * @return the Brownout voltage 514 */ 515 public static double getBrownoutVoltage() { 516 return RoboRioDataJNI.getBrownoutVoltage(); 517 } 518 519 /** 520 * Define the Brownout voltage. 521 * 522 * @param vInVoltage the new voltage 523 */ 524 public static void setBrownoutVoltage(double vInVoltage) { 525 RoboRioDataJNI.setBrownoutVoltage(vInVoltage); 526 } 527 528 /** 529 * Get the serial number. 530 * 531 * @return The serial number. 532 */ 533 public static String getSerialNumber() { 534 return RoboRioDataJNI.getSerialNumber(); 535 } 536 537 /** 538 * Set the serial number. 539 * 540 * @param serialNumber The serial number. 541 */ 542 public static void setSerialNumber(String serialNumber) { 543 RoboRioDataJNI.setSerialNumber(serialNumber); 544 } 545 546 /** Reset all simulation data. */ 547 public static void resetData() { 548 RoboRioDataJNI.resetData(); 549 } 550}