1
0
mirror of https://github.com/preble/libpinproc synced 2026-02-22 18:15:25 +01:00

yaml: remove yaml-cpp dependency

`pinproctest` now takes machineType as it's command-line parameter.
This commit is contained in:
Tom Collins
2020-06-25 23:19:56 -07:00
committed by Gerry Stellenberg
parent 65044e31ed
commit 40b0d86be2
7 changed files with 50 additions and 127 deletions

View File

@@ -11,7 +11,7 @@ SRCS = pinproctest.cpp drivers.cpp dmd.cpp switches.cpp
OBJS := $(SRCS:.cpp=.o)
INCLUDES = ../../include/pinproc.h
LIBS = usb pinproc yaml-cpp
LIBS = usb pinproc
ifneq ($(uname_s),Windows) # not Windows
LIBS += ftdi
endif

View File

@@ -36,37 +36,6 @@ void TestLogger(PRLogLevel level, const char *text)
fprintf(stderr, "TEST: %s", text);
}
PRResult LoadConfiguration(YAML::Node& yamlDoc, const char *yamlFilePath)
{
try
{
std::ifstream fin(yamlFilePath);
if (fin.is_open() == false)
{
fprintf(stderr, "YAML file not found: %s\n", yamlFilePath);
return kPRFailure;
}
yamlDoc = YAML::Load(fin);
}
// catch (YAML::ParserException& ex)
// {
// fprintf(stderr, "YAML parse error at line=%d col=%d: %s\n", ex.line, ex.column, ex.msg.c_str());
// return kPRFailure;
// }
// catch (YAML::RepresentationException& ex)
// {
// fprintf(stderr, "YAML representation error at line=%d col=%d: %s\n", ex.line, ex.column, ex.msg.c_str());
// return kPRFailure;
// }
catch (...)
{
fprintf(stderr, "Unexpected exception while parsing YAML config.\n");
return kPRFailure;
}
return kPRSuccess;
}
void ConfigureAccelerometerMotion(PRHandle proc)
{
uint32_t readData[5];
@@ -312,6 +281,20 @@ void sigint(int)
printf("Exiting...\n");
}
const struct {
PRMachineType type;
const char *name;
} machine_types[] = {
{ kPRMachineCustom, "custom" },
{ kPRMachineWPCAlphanumeric, "wpcAlphanumeric" },
{ kPRMachineWPC, "wpc" },
{ kPRMachineWPC95, "wpc95" },
{ kPRMachineSternWhitestar, "sternWhitestar" },
{ kPRMachineSternSAM, "sternSAM" },
{ kPRMachinePDB, "pdb" },
};
#define MACHINE_TYPES (sizeof(machine_types) / sizeof(machine_types[0]))
int main(int argc, const char **argv)
{
int i;
@@ -320,39 +303,26 @@ int main(int argc, const char **argv)
signal(SIGINT, sigint);
startTime = time(NULL);
if (argc < 2)
{
fprintf(stderr, "Usage: %s <yaml machine description>\n", argv[0]);
if (argc < 2) {
printf("Usage: %s <machine_type>\n\nWhere machine_type is one of:\n ", argv[0]);
for (i = 0; i < MACHINE_TYPES; i++) {
printf("%s %s", i ? "," : "", machine_types[i].name);
}
return 1;
}
const char *yamlFilename = argv[1];
// Assign a custom logging callback to demonstrate capturing log information from P-ROC:
PRLogSetCallback(TestLogger);
YAML::Node yamlDoc;
if (LoadConfiguration(yamlDoc, yamlFilename) != kPRSuccess)
{
fprintf(stderr, "Failed to load configuration file %s\n", yamlFilename);
return 1;
for (i = 0; i < MACHINE_TYPES; i++) {
if (_strcmpi(argv[1], machine_types[i].name) == 0) {
machineType = machine_types[i].type;
break;
}
}
std::string machineTypeString = yamlDoc["PRGame"]["machineType"].as<std::string>();
if (machineTypeString == "wpc")
machineType = kPRMachineWPC;
else if (machineTypeString == "wpc95")
machineType = kPRMachineWPC95;
else if (machineTypeString == "wpcAlphanumeric")
machineType = kPRMachineWPCAlphanumeric;
else if(machineTypeString == "sternWhitestar")
machineType = kPRMachineSternWhitestar;
else if(machineTypeString == "sternSAM")
machineType = kPRMachineSternSAM;
else if(machineTypeString == "custom")
machineType = kPRMachineCustom;
else
{
fprintf(stderr, "Unknown machine type: %s\n", machineTypeString.c_str());
if (machineType == kPRMachineInvalid) {
printf("Unknown machine type: %s\n", argv[1]);
return 1;
}
@@ -371,8 +341,7 @@ int main(int argc, const char **argv)
// timing purposes.
ConfigureDMD(proc);
if (machineType == kPRMachineCustom) ConfigureDrivers(proc);
ConfigureSwitches(proc, yamlDoc); // Notify host for all debounced switch events.
ConfigureSwitchRules(proc, yamlDoc); // Flippers, slingshots
ConfigureSwitches(proc); // Notify host for all debounced switch events.
if (machineType == kPRMachineWPCAlphanumeric) UpdateAlphaDisplay(proc, 0);

View File

@@ -44,7 +44,6 @@
#include <cmath>
#include "pinproc.h" // Include libpinproc's header.
#include <fstream>
#include <yaml-cpp/yaml.h>
#ifdef _MSC_VER
#include <time.h>
@@ -72,8 +71,7 @@
void ConfigureDrivers(PRHandle proc);
void ConfigureSwitches(PRHandle proc, YAML::Node& yamlDoc);
void ConfigureSwitchRules(PRHandle proc, YAML::Node& yamlDoc);
void ConfigureSwitches(PRHandle proc);
void UpdateSwitchState (PREvent * event);
void LoadSwitchStates (PRHandle proc);

View File

@@ -33,7 +33,7 @@ typedef struct SwitchStatus {
static SwitchStatus switches[kPRSwitchPhysicalLast + 1];
void ConfigureSwitches(PRHandle proc, YAML::Node& yamlDoc)
void ConfigureSwitches(PRHandle proc)
{
// Configure switch controller registers (if the defaults aren't acceptable)
PRSwitchConfig switchConfig;
@@ -137,43 +137,6 @@ void ConfigureBumperRule (PRHandle proc, int swNum, int coilNum, int pulseTime)
PRSwitchUpdateRule(proc, swNum, kPREventTypeSwitchClosedDebounced, &sw, NULL, 0, false);
}
void ConfigureSwitchRules(PRHandle proc, YAML::Node& yamlDoc)
{
// WPC Flippers
std::string numStr;
const YAML::Node& flippers = yamlDoc[kFlippersSection];
for (YAML::const_iterator flippersIt = flippers.begin(); flippersIt != flippers.end(); ++flippersIt)
{
int swNum, coilMain, coilHold;
std::string flipperName = flippersIt->as<std::string>();
if (machineType == kPRMachineWPC)
{
numStr = yamlDoc[kSwitchesSection][flipperName][kNumberField].as<std::string>(); swNum = PRDecode(machineType, numStr.c_str());
numStr = yamlDoc[kCoilsSection][flipperName + "Main"][kNumberField].as<std::string>(); coilMain = PRDecode(machineType, numStr.c_str());
numStr = yamlDoc[kCoilsSection][flipperName + "Hold"][kNumberField].as<std::string>(); coilHold = PRDecode(machineType, numStr.c_str());
ConfigureWPCFlipperSwitchRule (proc, swNum, coilMain, coilHold, kFlipperPulseTime);
}
else if (machineType == kPRMachineSternWhitestar || machineType == kPRMachineSternSAM)
{
printf("hi\n");
numStr = yamlDoc[kSwitchesSection][flipperName][kNumberField].as<std::string>(); swNum = PRDecode(machineType, numStr.c_str());
numStr = yamlDoc[kCoilsSection][flipperName + "Main"][kNumberField].as<std::string>(); coilMain = PRDecode(machineType, numStr.c_str());
ConfigureSternFlipperSwitchRule (proc, swNum, coilMain, kFlipperPulseTime, kFlipperPatterOnTime, kFlipperPatterOffTime);
}
}
const YAML::Node& bumpers = yamlDoc[kBumpersSection];
for (YAML::const_iterator bumpersIt = bumpers.begin(); bumpersIt != bumpers.end(); ++bumpersIt)
{
int swNum, coilNum;
// WPC Slingshots
std::string bumperName = bumpersIt->as<std::string>();
numStr = yamlDoc[kSwitchesSection][bumperName][kNumberField].as<std::string>(); swNum = PRDecode(machineType, numStr.c_str());
numStr = yamlDoc[kCoilsSection][bumperName][kNumberField].as<std::string>(); coilNum = PRDecode(machineType, numStr.c_str());
ConfigureBumperRule (proc, swNum, coilNum, kBumperPulseTime);
}
}
void UpdateSwitchState( PREvent * event )
{
switches[event->value].state = event->type;