Compare commits

...

2 commits

Author SHA1 Message Date
Lephenixnoir
b7803a6aed
libfxlink: add some sync-like transfer functions 2025-03-08 23:25:40 +01:00
Lephenixnoir
a98bbff1c9
fxlink: don't list non-CASIO devices in TUI 2025-03-08 23:25:23 +01:00
3 changed files with 41 additions and 0 deletions

View file

@ -113,6 +113,9 @@ static void TUI_render_status(void)
struct fxlink_device *fdev = &TUI.devices.devices[i];
struct fxlink_calc *calc = fdev->calc;
if(fdev->idVendor != 0x07cf)
continue;
if(fdev->status == FXLINK_FDEV_STATUS_CONNECTED) {
wattron(win, fmt_to_ncurses_attr(FMT_BGSELECTED));
mvwhline(win, y, 0, ' ', w);

View file

@ -632,6 +632,29 @@ bool fxlink_device_start_bulk_OUT(struct fxlink_device *fdev,
return true;
}
bool fxlink_device_has_bulk_OUT(struct fxlink_device *fdev)
{
struct fxlink_comm *comm = fdev->comm;
return comm && comm->claimed && comm->ftransfer_OUT;
}
void fxlink_device_wait_bulk_OUT(
libusb_context *ctx, struct fxlink_device *fdev)
{
while(fxlink_device_has_bulk_OUT(fdev))
libusb_handle_events(ctx);
}
bool fxlink_device_send_bulk_OUT(
libusb_context *ctx, struct fxlink_device *fdev,
char const *app, char const *type, void const *data, int size)
{
if(!fxlink_device_start_bulk_OUT(fdev, app, type, data, size, false))
return false;
fxlink_device_wait_bulk_OUT(ctx, fdev);
return true;
}
//---
// Polled file descriptor tracking
//---

View file

@ -235,6 +235,21 @@ bool fxlink_device_start_bulk_OUT(struct fxlink_device *fdev,
char const *app, char const *type, void const *data, int size,
bool own_data);
/* Check whether a device currently has an ongoing OUT transfer. */
bool fxlink_device_has_bulk_OUT(struct fxlink_device *fdev);
/* Wait for an ongoing OUT transfer to finish. If there is no such transfer
ongoing, this function is a no-op. */
void fxlink_device_wait_bulk_OUT(
libusb_context *ctx, struct fxlink_device *fdev);
/* Run an OUT transfer on the device and wait for its completion. Note that if
the calculator does not properly receive the data for whatever reason, this
function will never return. */
bool fxlink_device_send_bulk_OUT(
libusb_context *ctx, struct fxlink_device *fdev,
char const *app, char const *type, void const *data, int size);
/* Interrupt any active transfers on the device. */
void fxlink_device_interrupt_transfers(struct fxlink_device *fdev);