[sim] Ignore incoming websocket DS/Joystick when real DS connected

This commit is contained in:
Peter Johnson
2020-09-03 21:11:16 -07:00
parent 8f87c56312
commit 5e54e13140
2 changed files with 24 additions and 0 deletions

View File

@@ -8,8 +8,10 @@
#include "WSProvider_DriverStation.h"
#include <algorithm>
#include <atomic>
#include <hal/DriverStation.h>
#include <hal/Extensions.h>
#include <hal/Ports.h>
#include <hal/simulation/DriverStationData.h>
#include <wpi/raw_ostream.h>
@@ -25,7 +27,19 @@
namespace wpilibws {
std::atomic<bool>* gDSSocketConnected{nullptr};
void HALSimWSProviderDriverStation::Initialize(WSRegisterFunc webRegisterFunc) {
static bool registered = false;
if (!registered) {
registered = true;
HAL_RegisterExtensionListener(
nullptr, [](void*, const char* name, void* data) {
if (wpi::StringRef{name} == "ds_socket") {
gDSSocketConnected = static_cast<std::atomic<bool>*>(data);
}
});
}
CreateSingleProvider<HALSimWSProviderDriverStation>("DriverStation",
webRegisterFunc);
}
@@ -106,6 +120,9 @@ void HALSimWSProviderDriverStation::DoCancelCallbacks() {
}
void HALSimWSProviderDriverStation::OnNetValueChanged(const wpi::json& json) {
// ignore if DS connected
if (gDSSocketConnected && *gDSSocketConnected) return;
wpi::json::const_iterator it;
if ((it = json.find(">enabled")) != json.end()) {
HALSIM_SetDriverStationEnabled(it.value());

View File

@@ -7,11 +7,15 @@
#include "WSProvider_Joystick.h"
#include <atomic>
#include <hal/Ports.h>
#include <hal/simulation/DriverStationData.h>
namespace wpilibws {
extern std::atomic<bool>* gDSSocketConnected;
void HALSimWSProviderJoystick::Initialize(WSRegisterFunc webregisterFunc) {
CreateProviders<HALSimWSProviderJoystick>("Joystick", HAL_kMaxJoysticks,
webregisterFunc);
@@ -71,6 +75,9 @@ void HALSimWSProviderJoystick::DoCancelCallbacks() {
}
void HALSimWSProviderJoystick::OnNetValueChanged(const wpi::json& json) {
// ignore if DS connected
if (gDSSocketConnected && *gDSSocketConnected) return;
wpi::json::const_iterator it;
if ((it = json.find(">axes")) != json.end()) {
HAL_JoystickAxes axes{};