mirror of
https://github.com/preble/libpinproc
synced 2026-02-24 18:25:23 +01:00
yaml: remove yaml-cpp dependency
`pinproctest` now takes machineType as it's command-line parameter.
This commit is contained in:
committed by
Gerry Stellenberg
parent
65044e31ed
commit
40b0d86be2
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user