mirror of
https://github.com/preble/libpinproc
synced 2026-02-22 18:15:25 +01:00
Merge branch 'master' of git@github.com:preble/P-ROC
This commit is contained in:
@@ -11,17 +11,17 @@ PRBumpers:
|
||||
- slingR
|
||||
PRSwitches:
|
||||
flipperLwR:
|
||||
number: 1
|
||||
number: SF2
|
||||
flipperLwL:
|
||||
number: 3
|
||||
number: SF4
|
||||
flipperUpR:
|
||||
number: 5
|
||||
number: SF6
|
||||
flipperUpL:
|
||||
number: 7
|
||||
number: SF8
|
||||
slingL:
|
||||
number: 96
|
||||
number: S34
|
||||
slingR:
|
||||
number: 97
|
||||
number: S35
|
||||
PRCoils:
|
||||
flipperLwRMain:
|
||||
number: 32
|
||||
@@ -40,9 +40,17 @@ PRCoils:
|
||||
flipperUpLHold:
|
||||
number: 39
|
||||
slingL:
|
||||
number: 54
|
||||
number: C11
|
||||
slingR:
|
||||
number: 55
|
||||
number: C10
|
||||
slotKickout:
|
||||
number: C01
|
||||
rocketKickout:
|
||||
number: C02
|
||||
outhole:
|
||||
number: C08
|
||||
ballRelease:
|
||||
number: C09
|
||||
PRLamps:
|
||||
doorTheCamera:
|
||||
number: 80
|
||||
number: L11
|
||||
@@ -28,6 +28,7 @@
|
||||
*/
|
||||
#include "pinproctest.h"
|
||||
|
||||
PRMachineType machineType = kPRMachineInvalid;
|
||||
|
||||
/** Demonstration of the custom logging callback. */
|
||||
void TestLogger(PRLogLevel level, const char *text)
|
||||
@@ -147,7 +148,6 @@ int main(int argc, const char **argv)
|
||||
return 1;
|
||||
}
|
||||
|
||||
PRMachineType machineType = kPRMachineInvalid;
|
||||
std::string machineTypeString;
|
||||
yamlDoc["PRGame"]["machineType"] >> machineTypeString;
|
||||
if (machineTypeString == "wpc")
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
*/
|
||||
#include "pinproctest.h"
|
||||
|
||||
extern PRMachineType machineType;
|
||||
|
||||
typedef struct SwitchStatus {
|
||||
PREventType state;
|
||||
uint32_t lastEventTime;
|
||||
@@ -96,15 +98,16 @@ void ConfigureBumperRule (PRHandle proc, int swNum, int coilNum, int pulseTime)
|
||||
void ConfigureSwitchRules(PRHandle proc, YAML::Node& yamlDoc)
|
||||
{
|
||||
// WPC Flippers
|
||||
std::string numStr;
|
||||
const YAML::Node& flippers = yamlDoc[kFlippersSection];
|
||||
for (YAML::Iterator flippersIt = flippers.begin(); flippersIt != flippers.end(); ++flippersIt)
|
||||
{
|
||||
int swNum, coilMain, coilHold;
|
||||
std::string flipperName;
|
||||
*flippersIt >> flipperName;
|
||||
yamlDoc[kSwitchesSection][flipperName][kNumberField] >> swNum;
|
||||
yamlDoc[kCoilsSection][flipperName + "Main"][kNumberField] >> coilMain;
|
||||
yamlDoc[kCoilsSection][flipperName + "Hold"][kNumberField] >> coilHold;
|
||||
yamlDoc[kSwitchesSection][flipperName][kNumberField] >> numStr; swNum = PRDecode(machineType, numStr.c_str());
|
||||
yamlDoc[kCoilsSection][flipperName + "Main"][kNumberField] >> numStr; coilMain = PRDecode(machineType, numStr.c_str());
|
||||
yamlDoc[kCoilsSection][flipperName + "Hold"][kNumberField] >> numStr; coilHold = PRDecode(machineType, numStr.c_str());
|
||||
ConfigureWPCFlipperSwitchRule (proc, swNum, coilMain, coilHold, kFlipperPulseTime);
|
||||
}
|
||||
|
||||
@@ -115,8 +118,8 @@ void ConfigureSwitchRules(PRHandle proc, YAML::Node& yamlDoc)
|
||||
// WPC Slingshots
|
||||
std::string bumperName;
|
||||
*bumpersIt >> bumperName;
|
||||
yamlDoc[kSwitchesSection][bumperName][kNumberField] >> swNum;
|
||||
yamlDoc[kCoilsSection][bumperName][kNumberField] >> coilNum;
|
||||
yamlDoc[kSwitchesSection][bumperName][kNumberField] >> numStr; swNum = PRDecode(machineType, numStr.c_str());
|
||||
yamlDoc[kCoilsSection][bumperName][kNumberField] >> numStr; coilNum = PRDecode(machineType, numStr.c_str());
|
||||
ConfigureBumperRule (proc, swNum, coilNum, kBumperPulseTime);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,6 +243,13 @@ PR_EXPORT void PRDriverStateSchedule(PRDriverState *driverState, uint32_t schedu
|
||||
*/
|
||||
PR_EXPORT void PRDriverStatePatter(PRDriverState *driverState, uint16_t millisecondsOn, uint16_t millisecondsOff, uint16_t originalOnTime);
|
||||
|
||||
/**
|
||||
* @brief Converts a coil, lamp, switch, or GI string into a P-ROC driver number.
|
||||
* The following formats are accepted: Cxx (coil), Lxx (lamp), Sxx (matrix switch), SFx (flipper grounded switch), or SDx (dedicated grounded switch).
|
||||
* If the string does not match this format it will be converted into an integer using atoi().
|
||||
*/
|
||||
PR_EXPORT uint16_t PRDecode(PRMachineType machineType, const char *str);
|
||||
|
||||
/** @} */ // End of Drivers
|
||||
|
||||
// Switches
|
||||
|
||||
@@ -231,6 +231,49 @@ PR_EXPORT void PRDriverStatePatter(PRDriverState *driver, uint16_t millisecondsO
|
||||
driver->patterEnable = true;
|
||||
}
|
||||
|
||||
PR_EXPORT uint16_t PRDecode(PRMachineType machineType, const char *str)
|
||||
{
|
||||
if (str == NULL)
|
||||
return 0;
|
||||
if (strlen(str) != 3)
|
||||
return atoi(str);
|
||||
uint16_t x = (str[1]-'0') * 10 + (str[2]-'0');
|
||||
|
||||
if (machineType == kPRMachineWPC)
|
||||
{
|
||||
switch (str[0])
|
||||
{
|
||||
case 'L':
|
||||
case 'l':
|
||||
return 80 + 8 * ((x / 10) - 1) + ((x % 10) -1);
|
||||
case 'C':
|
||||
case 'c':
|
||||
if (x <= 28)
|
||||
return x + 39;
|
||||
else
|
||||
return x + 7;
|
||||
case 'G':
|
||||
case 'g':
|
||||
return x + 71;
|
||||
case 'S':
|
||||
case 's':
|
||||
{
|
||||
switch (str[1])
|
||||
{
|
||||
case 'D':
|
||||
case 'd':
|
||||
return 8 + ((str[2]-'0') - 1);
|
||||
case 'F':
|
||||
case 'f':
|
||||
return (str[2]-'0') - 1;
|
||||
default:
|
||||
return 32 + 16 * ((x / 10) - 1) + ((x % 10) - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return atoi(str);
|
||||
}
|
||||
|
||||
// Switches
|
||||
|
||||
|
||||
Reference in New Issue
Block a user