Files
djhackersdev_bemanitools/src/main/aciodrv-proc/panb.h
T
CrazyRedMachine 4ea1397af2 aciodrv: add PANB support (+ aciotest handler)
add aciodrv-proc module

explanation : PANB works differently from other acio devices ; you send
one "start auto input" command without expecting a reply, and then the
piano keeps spamming "recv poll" commands on the acio bus and never replies
to any other commands.. failure to process these messages quickly enough
will saturate the serial buffer and cause checksum errors after a while.

for this reason, aciodrv-proc module was added in order to create a
thread which manages these recv poll commands and keeps the latest
known button state in memory so that it can be retrieved easily.
2021-05-03 20:14:21 +02:00

32 lines
1.1 KiB
C

#ifndef ACIODRV_PROC_PANB_H
#define ACIODRV_PROC_PANB_H
#include "aciodrv/panb.h"
/**
* Initialize a PANB device. This will take care of setting up the auto-poll and processing
* the poll messages in a separate thread (this is necessary as failing to process messages
* fast enough will cause the device to malfunction).
*
* @param device Context of opened device
* @return True if successful, false on error.
* @note This function spawns a thread. Caller must call aciodrv_proc_panb_fini to properly
* terminate.
*/
bool aciodrv_proc_panb_init(struct aciodrv_device_ctx *device);
/**
* Retrieve latest known button state from the PANB device.
*
* @param button_state 28 cell array to store button state
* (mandatory, upon calling the array contains values between 0 to 15 indicating the keys velocity).
* @return True on success, false on error.
*/
bool aciodrv_proc_panb_get_state(uint8_t *button_state);
/**
* Properly terminate the thread and reset the device (this is the only way to stop the auto polling).
*/
void aciodrv_proc_panb_fini(struct aciodrv_device_ctx *device);
#endif