/*----------------------------------------------------------------------------*/ /* Copyright (c) 2017-2020 FIRST. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in the root directory of */ /* the project. */ /*----------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "HALSimWSServer.h" using namespace std::placeholders; using namespace wpilibws; // Currently, robots never terminate, so we keep static objects that are // never properly released or cleaned up. static ProviderContainer providers; static HALSimWSProviderSimDevices simDevices(providers); extern "C" { #if defined(WIN32) || defined(_WIN32) __declspec(dllexport) #endif int HALSIM_InitExtension(void) { wpi::outs() << "Websocket Simulator Initializing.\n"; auto hsw = std::make_shared(providers, simDevices); HALSimWeb::SetInstance(hsw); if (!hsw->Initialize()) { return -1; } WSRegisterFunc registerFunc = [&](auto key, auto provider) { providers.Add(key, provider); }; HALSimWSProviderAnalogIn::Initialize(registerFunc); HALSimWSProviderAnalogOut::Initialize(registerFunc); HALSimWSProviderDIO::Initialize(registerFunc); HALSimWSProviderDigitalPWM::Initialize(registerFunc); HALSimWSProviderDriverStation::Initialize(registerFunc); HALSimWSProviderEncoder::Initialize(registerFunc); HALSimWSProviderJoystick::Initialize(registerFunc); HALSimWSProviderPWM::Initialize(registerFunc); HALSimWSProviderRelay::Initialize(registerFunc); HALSimWSProviderRoboRIO::Initialize(registerFunc); simDevices.Initialize(hsw->GetLoop()); HAL_SetMain(nullptr, HALSimWeb::Main, HALSimWeb::Exit); wpi::outs() << "Websocket Simulator Initialized!\n"; return 0; } } // extern "C"