The following example demonstrates how a flink device can be opened and a subdevice selected. The subdevice is of type GPIO
. One of it's channels is configured as output and set to true
.
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <unistd.h> #include <flinklib.h> #include <types.h> int main(void) { char* DEFAULT_DEV = (char*)"/dev/flink0"; flink_dev* dev; flink_subdev* subdev; char* dev_name = DEFAULT_DEV; uint32_t subdevice_id = 0x12705002; uint32_t channel = 0; int error = 0; // Open flink device dev = flink_open(DEFAULT_DEV); if(dev == NULL) { fprintf(stderr, "Failed to open device %s!\n", dev_name); return -1; } // Get a pointer to the choosen subdevice subdev = flink_get_subdevice_by_unique_id(dev, subdevice_id ); if(subdev == NULL) { fprintf(stderr, "Illegal subdevice id %d!\n", subdevice_id); return -1; } // Set I/O direction to output uint8_t out = true; uint32_t offset = HEADER_SIZE + SUBHEADER_SIZE + (channel / (REGISTER_WITH * 8)) * REGISTER_WITH; uint8_t bit = channel % (REGISTER_WITH * 8); if(flink_write_bit(subdev, offset, bit, &out)) { fprintf(stderr, "Configuring GPIO direction failed!\n"); return -1; } // toggle an output for 20s offset = HEADER_SIZE + SUBHEADER_SIZE + ((subdev->nof_channels - 1) / (REGISTER_WITH * 8) + 1) * REGISTER_WITH + (channel / (REGISTER_WITH * 8)) * REGISTER_WITH; bit = channel % (REGISTER_WITH * 8); out = 1; for (int count = 0; count < 200; count++) { if(flink_write_bit(subdev, offset, bit, &out)) { fprintf(stderr, "Writing GPIO value failed!\n"); return -1; } usleep(100000); out = !out; } // Close flink device flink_close(dev); return EXIT_SUCCESS; }