// Update a aio device void aio_update(aio_t *aio) { // Update the device subscription if (rtk_menuitem_ischecked(aio->subscribe_item)) { if (!aio->proxy->info.subscribed) if (playerc_aio_subscribe(aio->proxy, PLAYER_OPEN_MODE) != 0) PRINT_ERR1("libplayerc error: %s", playerc_error_str()); } else { if (aio->proxy->info.subscribed) if (playerc_aio_unsubscribe(aio->proxy) != 0) PRINT_ERR1("libplayerc error: %s", playerc_error_str()); } rtk_menuitem_check(aio->subscribe_item, aio->proxy->info.subscribed); if (aio->proxy->info.subscribed) { // Draw in the aio scan if it has been changed. if (aio->proxy->info.datatime != aio->datatime) { aio_draw(aio); aio->datatime = aio->proxy->info.datatime; } } else { // Dont draw the aio. rtk_fig_show(aio->fig, 0); } }
// Destroy a aio device void aio_destroy(aio_t *aio) { if (aio->proxy->info.subscribed) playerc_aio_unsubscribe(aio->proxy); playerc_aio_destroy(aio->proxy); rtk_fig_destroy(aio->fig); free(aio->drivername); free(aio); return; }
// Just read from a aio device. int test_aio(playerc_client_t *client, int index) { int t; void *rdevice; playerc_aio_t *device; printf("device [aio] index [%d]\n", index); device = playerc_aio_create(client, index); TEST("subscribing (read/write)"); if (playerc_aio_subscribe(device, PLAYER_OPEN_MODE) < 0) { FAIL(); return -1; } PASS(); for (t = 0; t < 5; t++) { TEST1("reading data (attempt %d)", t); do rdevice = playerc_client_read(client); while (rdevice == client); if (rdevice == device) { PASS(); printf("aio: [%8.3f] AI0,...,AI7: [%5.3f] [%5.3f] [%5.3f] [%5.3f] [%5.3f] [%5.3f] [%5.3f] [%5.3f]\n", device->info.datatime, device->voltages[0], device->voltages[1],device->voltages[2],device->voltages[3],device->voltages[4],device->voltages[5],device->voltages[6],device->voltages[7]); } else { //printf("error: %s", playerc_error_str()); FAIL(); break; } } TEST("unsubscribing"); if (playerc_aio_unsubscribe(device) != 0) { FAIL(); return -1; } PASS(); playerc_aio_destroy(device); return 0; }