25
24
#include "ipecamera/model.h"
28
static void pcilib_print_error(const char *msg, ...) {
37
void (*pcilib_error)(const char *msg, ...) = pcilib_print_error;
38
void (*pcilib_warning)(const char *msg, ...) = pcilib_print_error;
40
int pcilib_set_error_handler(void (*err)(const char *msg, ...), void (*warn)(const char *msg, ...)) {
41
if (err) pcilib_error = err;
42
else pcilib_error = pcilib_print_error;
43
if (warn) pcilib_warning = warn;
44
else pcilib_warning = pcilib_print_error;
47
27
pcilib_t *pcilib_open(const char *device, pcilib_model_t model) {
48
28
pcilib_t *ctx = malloc(sizeof(pcilib_t));
99
79
pcilib_model_t pcilib_get_model(pcilib_t *ctx) {
100
80
if (ctx->model == PCILIB_MODEL_DETECT) {
101
unsigned short vendor_id;
102
unsigned short device_id;
81
// unsigned short vendor_id;
82
// unsigned short device_id;
104
84
//return PCILIB_MODEL_PCI;
423
403
int pcilib_read(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, size_t size, void *buf) {
427
406
pcilib_detect_address(ctx, &bar, &addr, size);
428
407
data = pcilib_map_bar(ctx, bar);
430
409
pcilib_memcpy(buf, data + addr, size);
432
pcilib_unmap_bar(ctx, bar, data);
411
pcilib_unmap_bar(ctx, bar, data);
435
416
int pcilib_write(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, size_t size, void *buf) {
439
419
pcilib_detect_address(ctx, &bar, &addr, size);
440
420
data = pcilib_map_bar(ctx, bar);
442
422
pcilib_memcpy(data + addr, buf, size);
444
pcilib_unmap_bar(ctx, bar, data);
424
pcilib_unmap_bar(ctx, bar, data);
448
430
int pcilib_read_fifo(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, uint8_t fifo_size, size_t n, void *buf) {
452
434
pcilib_detect_address(ctx, &bar, &addr, fifo_size);
453
435
data = pcilib_map_bar(ctx, bar);
455
437
for (i = 0; i < n; i++) {
456
438
pcilib_memcpy(buf + i * fifo_size, data + addr, fifo_size);
459
pcilib_unmap_bar(ctx, bar, data);
441
pcilib_unmap_bar(ctx, bar, data);
462
446
int pcilib_write_fifo(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, uint8_t fifo_size, size_t n, void *buf) {
470
454
pcilib_memcpy(data + addr, buf + i * fifo_size, fifo_size);
473
pcilib_unmap_bar(ctx, bar, data);
457
pcilib_unmap_bar(ctx, bar, data);