grab.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include <stdio.h>
  2. #include <pcilib.h>
  3. #include <pcilib/error.h>
  4. #include <ipecamera.h>
  5. int main() {
  6. int err;
  7. pcilib_event_id_t evid;
  8. ipecamera_event_info_t info;
  9. ipecamera_t *ipecamera;
  10. size_t size;
  11. void *data;
  12. FILE *f;
  13. pcilib_t *pcilib = pcilib_open("/dev/fpga0", "ipecamera");
  14. if (!pcilib) pcilib_error("Error opening device");
  15. ipecamera = (ipecamera_t*)pcilib_get_event_engine(pcilib);
  16. if (!ipecamera) pcilib_error("Failed to get ipecamera event engine");
  17. err = ipecamera_set_buffer_size(ipecamera, 8);
  18. if (err) pcilib_error("Error (%i) setting buffer size", err);
  19. err = pcilib_start(pcilib, PCILIB_EVENTS_ALL, PCILIB_EVENT_FLAGS_DEFAULT);
  20. if (err) pcilib_error("Error (%i) starting event engine", err);
  21. err = pcilib_trigger(pcilib, PCILIB_EVENT0, 0, NULL);
  22. if (err) pcilib_error("Error (%i) triggering event", err);
  23. err = pcilib_get_next_event(pcilib, 100000, &evid, sizeof(info), (pcilib_event_info_t*)&info);
  24. if (err) pcilib_error("Error (%i) while waiting for event", err);
  25. data = pcilib_get_data(pcilib, evid, PCILIB_EVENT_DATA, &size);
  26. if (!data) pcilib_error("Error getting event data");
  27. printf("Writting %zu bytes to /dev/null\n", size);
  28. f = fopen("/dev/null", "w");
  29. if (f) {
  30. fwrite(data, 1, size, f);
  31. fclose(f);
  32. }
  33. err = pcilib_return_data(pcilib, evid, PCILIB_EVENT_DATA, data);
  34. if (err) pcilib_error("Error returning data, data is possibly corrupted");
  35. pcilib_stop(pcilib, PCILIB_EVENT_FLAGS_DEFAULT);
  36. }