mirror of
https://github.com/preble/libpinproc
synced 2026-02-24 18:25:23 +01:00
Added future pulse support.
This commit is contained in:
@@ -204,6 +204,7 @@ typedef struct PRDriverState {
|
|||||||
uint8_t patterOnTime;
|
uint8_t patterOnTime;
|
||||||
uint8_t patterOffTime;
|
uint8_t patterOffTime;
|
||||||
bool_t patterEnable;
|
bool_t patterEnable;
|
||||||
|
bool_t futureEnable;
|
||||||
} PRDriverState;
|
} PRDriverState;
|
||||||
|
|
||||||
typedef struct PRDriverAuxCommand {
|
typedef struct PRDriverAuxCommand {
|
||||||
@@ -256,6 +257,11 @@ PINPROC_API PRResult PRDriverDisable(PRHandle handle, uint8_t driverNum);
|
|||||||
* This function is provided for convenience. See PRDriverStatePulse() for a full description.
|
* This function is provided for convenience. See PRDriverStatePulse() for a full description.
|
||||||
*/
|
*/
|
||||||
PINPROC_API PRResult PRDriverPulse(PRHandle handle, uint8_t driverNum, uint8_t milliseconds);
|
PINPROC_API PRResult PRDriverPulse(PRHandle handle, uint8_t driverNum, uint8_t milliseconds);
|
||||||
|
/**
|
||||||
|
* Pulses the given driver for a number of milliseconds when the hardware reaches a specific timestamp.
|
||||||
|
* This function is provided for convenience. See PRDriverStatePulse() for a full description.
|
||||||
|
*/
|
||||||
|
PINPROC_API PRResult PRDriverFuturePulse(PRHandle handle, uint8_t driverNum, uint8_t milliseconds, uint32_t futureTime);
|
||||||
/**
|
/**
|
||||||
* Assigns a repeating schedule to the given driver.
|
* Assigns a repeating schedule to the given driver.
|
||||||
* This function is provided for convenience. See PRDriverStateSchedule() for a full description.
|
* This function is provided for convenience. See PRDriverStateSchedule() for a full description.
|
||||||
@@ -316,6 +322,13 @@ PINPROC_API void PRDriverStateDisable(PRDriverState *driverState);
|
|||||||
* @note The driver state structure must be applied using PRDriverUpdateState() or linked to a switch rule using PRSwitchUpdateRule() to have any effect.
|
* @note The driver state structure must be applied using PRDriverUpdateState() or linked to a switch rule using PRSwitchUpdateRule() to have any effect.
|
||||||
*/
|
*/
|
||||||
PINPROC_API void PRDriverStatePulse(PRDriverState *driverState, uint8_t milliseconds);
|
PINPROC_API void PRDriverStatePulse(PRDriverState *driverState, uint8_t milliseconds);
|
||||||
|
/**
|
||||||
|
* Changes the given #PRDriverState to reflect a future scheduled pulse state.
|
||||||
|
* @param milliseconds Number of milliseconds to pulse the driver for.
|
||||||
|
* @param futureTime Value indicating at which HW timestamp the pulse should occur. Currently only the low 10-bits are used.
|
||||||
|
* @note The driver state structure must be applied using PRDriverUpdateState() or linked to a switch rule using PRSwitchUpdateRule() to have any effect.
|
||||||
|
*/
|
||||||
|
PINPROC_API void PRDriverStateFuturePulse(PRDriverState *driverState, uint8_t milliseconds, uint32_t futureTime);
|
||||||
/**
|
/**
|
||||||
* Changes the given #PRDriverState to reflect a scheduled state.
|
* Changes the given #PRDriverState to reflect a scheduled state.
|
||||||
* Assigns a repeating schedule to the given driver.
|
* Assigns a repeating schedule to the given driver.
|
||||||
|
|||||||
@@ -142,7 +142,8 @@ int32_t CreateDriverUpdateBurst ( uint32_t * burst, PRDriverState *driver) {
|
|||||||
burst[2] = (driver->timeslots >> P_ROC_DRIVER_CONFIG_TIMESLOT_SHIFT) |
|
burst[2] = (driver->timeslots >> P_ROC_DRIVER_CONFIG_TIMESLOT_SHIFT) |
|
||||||
(driver->patterOnTime << P_ROC_DRIVER_CONFIG_PATTER_ON_TIME_SHIFT) |
|
(driver->patterOnTime << P_ROC_DRIVER_CONFIG_PATTER_ON_TIME_SHIFT) |
|
||||||
(driver->patterOffTime << P_ROC_DRIVER_CONFIG_PATTER_OFF_TIME_SHIFT) |
|
(driver->patterOffTime << P_ROC_DRIVER_CONFIG_PATTER_OFF_TIME_SHIFT) |
|
||||||
(driver->patterEnable << P_ROC_DRIVER_CONFIG_PATTER_ENABLE_SHIFT);
|
(driver->patterEnable << P_ROC_DRIVER_CONFIG_PATTER_ENABLE_SHIFT) |
|
||||||
|
(driver->futureEnable << P_ROC_DRIVER_CONFIG_FUTURE_ENABLE_SHIFT);
|
||||||
return kPRSuccess;
|
return kPRSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -178,6 +178,7 @@ const uint32_t P_ROC_DRIVER_CONFIG_TIMESLOT_SHIFT = 16;
|
|||||||
const uint32_t P_ROC_DRIVER_CONFIG_PATTER_ON_TIME_SHIFT = 16;
|
const uint32_t P_ROC_DRIVER_CONFIG_PATTER_ON_TIME_SHIFT = 16;
|
||||||
const uint32_t P_ROC_DRIVER_CONFIG_PATTER_OFF_TIME_SHIFT = 23;
|
const uint32_t P_ROC_DRIVER_CONFIG_PATTER_OFF_TIME_SHIFT = 23;
|
||||||
const uint32_t P_ROC_DRIVER_CONFIG_PATTER_ENABLE_SHIFT = 30;
|
const uint32_t P_ROC_DRIVER_CONFIG_PATTER_ENABLE_SHIFT = 30;
|
||||||
|
const uint32_t P_ROC_DRIVER_CONFIG_FUTURE_ENABLE_SHIFT = 31;
|
||||||
|
|
||||||
const uint32_t P_ROC_DRIVER_CONFIG_TABLE_DRIVER_NUM_SHIFT = 1;
|
const uint32_t P_ROC_DRIVER_CONFIG_TABLE_DRIVER_NUM_SHIFT = 1;
|
||||||
|
|
||||||
|
|||||||
@@ -193,6 +193,13 @@ PRResult PRDriverPulse(PRHandle handle, uint8_t driverNum, uint8_t milliseconds)
|
|||||||
PRDriverStatePulse(&driver, milliseconds);
|
PRDriverStatePulse(&driver, milliseconds);
|
||||||
return handleAsDevice->DriverUpdateState(&driver);
|
return handleAsDevice->DriverUpdateState(&driver);
|
||||||
}
|
}
|
||||||
|
PRResult PRDriverFuturePulse(PRHandle handle, uint8_t driverNum, uint8_t milliseconds, uint32_t futureTime)
|
||||||
|
{
|
||||||
|
PRDriverState driver;
|
||||||
|
handleAsDevice->DriverGetState(driverNum, &driver);
|
||||||
|
PRDriverStateFuturePulse(&driver, milliseconds, futureTime);
|
||||||
|
return handleAsDevice->DriverUpdateState(&driver);
|
||||||
|
}
|
||||||
PRResult PRDriverSchedule(PRHandle handle, uint8_t driverNum, uint32_t schedule, uint8_t cycleSeconds, bool_t now)
|
PRResult PRDriverSchedule(PRHandle handle, uint8_t driverNum, uint32_t schedule, uint8_t cycleSeconds, bool_t now)
|
||||||
{
|
{
|
||||||
PRDriverState driver;
|
PRDriverState driver;
|
||||||
@@ -279,6 +286,7 @@ void PRDriverStateDisable(PRDriverState *driver)
|
|||||||
driver->patterOnTime = 0;
|
driver->patterOnTime = 0;
|
||||||
driver->patterOffTime = 0;
|
driver->patterOffTime = 0;
|
||||||
driver->patterEnable = false;
|
driver->patterEnable = false;
|
||||||
|
driver->futureEnable = false;
|
||||||
}
|
}
|
||||||
void PRDriverStatePulse(PRDriverState *driver, uint8_t milliseconds)
|
void PRDriverStatePulse(PRDriverState *driver, uint8_t milliseconds)
|
||||||
{
|
{
|
||||||
@@ -289,6 +297,18 @@ void PRDriverStatePulse(PRDriverState *driver, uint8_t milliseconds)
|
|||||||
driver->patterOnTime = 0;
|
driver->patterOnTime = 0;
|
||||||
driver->patterOffTime = 0;
|
driver->patterOffTime = 0;
|
||||||
driver->patterEnable = false;
|
driver->patterEnable = false;
|
||||||
|
driver->futureEnable = false;
|
||||||
|
}
|
||||||
|
void PRDriverStateFuturePulse(PRDriverState *driver, uint8_t milliseconds, uint32_t futureTime)
|
||||||
|
{
|
||||||
|
driver->state = 1;
|
||||||
|
driver->timeslots = futureTime;
|
||||||
|
driver->waitForFirstTimeSlot = false;
|
||||||
|
driver->outputDriveTime = milliseconds;
|
||||||
|
driver->patterOnTime = 0;
|
||||||
|
driver->patterOffTime = 0;
|
||||||
|
driver->patterEnable = false;
|
||||||
|
driver->futureEnable = true;
|
||||||
}
|
}
|
||||||
void PRDriverStateSchedule(PRDriverState *driver, uint32_t schedule, uint8_t cycleSeconds, bool_t now)
|
void PRDriverStateSchedule(PRDriverState *driver, uint32_t schedule, uint8_t cycleSeconds, bool_t now)
|
||||||
{
|
{
|
||||||
@@ -299,6 +319,7 @@ void PRDriverStateSchedule(PRDriverState *driver, uint32_t schedule, uint8_t cyc
|
|||||||
driver->patterOnTime = 0;
|
driver->patterOnTime = 0;
|
||||||
driver->patterOffTime = 0;
|
driver->patterOffTime = 0;
|
||||||
driver->patterEnable = false;
|
driver->patterEnable = false;
|
||||||
|
driver->futureEnable = false;
|
||||||
}
|
}
|
||||||
void PRDriverStatePatter(PRDriverState *driver, uint8_t millisecondsOn, uint8_t millisecondsOff, uint8_t originalOnTime)
|
void PRDriverStatePatter(PRDriverState *driver, uint8_t millisecondsOn, uint8_t millisecondsOff, uint8_t originalOnTime)
|
||||||
{
|
{
|
||||||
@@ -309,6 +330,7 @@ void PRDriverStatePatter(PRDriverState *driver, uint8_t millisecondsOn, uint8_t
|
|||||||
driver->patterOnTime = millisecondsOn;
|
driver->patterOnTime = millisecondsOn;
|
||||||
driver->patterOffTime = millisecondsOff;
|
driver->patterOffTime = millisecondsOff;
|
||||||
driver->patterEnable = true;
|
driver->patterEnable = true;
|
||||||
|
driver->futureEnable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PRDriverStatePulsedPatter(PRDriverState *driver, uint8_t millisecondsOn, uint8_t millisecondsOff, uint8_t patterTime)
|
void PRDriverStatePulsedPatter(PRDriverState *driver, uint8_t millisecondsOn, uint8_t millisecondsOff, uint8_t patterTime)
|
||||||
@@ -320,6 +342,7 @@ void PRDriverStatePulsedPatter(PRDriverState *driver, uint8_t millisecondsOn, ui
|
|||||||
driver->patterOnTime = millisecondsOn;
|
driver->patterOnTime = millisecondsOn;
|
||||||
driver->patterOffTime = millisecondsOff;
|
driver->patterOffTime = millisecondsOff;
|
||||||
driver->patterEnable = true;
|
driver->patterEnable = true;
|
||||||
|
driver->futureEnable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t PRDecode(PRMachineType machineType, const char *str)
|
uint16_t PRDecode(PRMachineType machineType, const char *str)
|
||||||
|
|||||||
Reference in New Issue
Block a user