/alps/pcitool

To get this branch, use:
bzr branch http://suren.me/webbzr/alps/pcitool

« back to all changes in this revision

Viewing changes to apps/test_multithread.c

  • Committer: Suren A. Chilingaryan
  • Date: 2016-02-23 06:20:33 UTC
  • mfrom: (346.1.18 pcitool)
  • Revision ID: csa@suren.me-20160223062033-mz8qkpm1a2oioveb
Merge Python scripting support from Vasiliy Chernov

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <stdio.h>
 
2
#include <pthread.h>
 
3
#include "pcilib.h"
 
4
#include <stdlib.h>
 
5
 
 
6
const char* prop = "/registers/fpga/reg1";
 
7
char* reg;
 
8
int stop = 0;
 
9
 
 
10
void *get_prop(void *arg)
 
11
{
 
12
    pcilib_t *ctx = (pcilib_t*)arg;
 
13
 
 
14
    while(!stop)
 
15
    {
 
16
        int err;
 
17
        pcilib_value_t val = {0};
 
18
        err = pcilib_get_property(ctx, prop, &val);
 
19
        if(err)
 
20
        {
 
21
            printf("err pcilib_read_register\n");
 
22
            return NULL;
 
23
        }
 
24
        long value = pcilib_get_value_as_int(ctx, &val, &err);
 
25
        pcilib_clean_value(ctx, &val);
 
26
        if(err)
 
27
        {
 
28
            printf("err pcilib_get_value_as_int\n");
 
29
            return NULL;
 
30
        }
 
31
        printf("reg = %li\n", value);
 
32
    }
 
33
    return NULL;
 
34
}
 
35
 
 
36
void *read_reg(void *arg)
 
37
{
 
38
    pcilib_t *ctx = (pcilib_t*)arg;
 
39
 
 
40
    while(!stop)
 
41
    {
 
42
        int err;
 
43
        pcilib_register_value_t reg_val = {0};
 
44
        pcilib_value_t val = {0};
 
45
 
 
46
        err = pcilib_read_register(ctx, NULL, reg, &reg_val);
 
47
 
 
48
        if(err)
 
49
        {
 
50
            printf("err pcilib_read_register\n");
 
51
            return NULL;
 
52
        }
 
53
        err = pcilib_set_value_from_register_value(ctx, &val, reg_val);
 
54
        if(err)
 
55
        {
 
56
            printf("err pcilib_set_value_from_register_value\n");
 
57
            return NULL;
 
58
        }
 
59
        long value = pcilib_get_value_as_int(ctx, &val, &err);
 
60
        pcilib_clean_value(ctx, &val);
 
61
        if(err)
 
62
        {
 
63
            printf("err pcilib_get_value_as_int\n");
 
64
            return NULL;
 
65
        }
 
66
        printf("reg = %li\n", value);
 
67
    }
 
68
    return NULL;
 
69
}
 
70
 
 
71
int main(int argc, char *argv[])
 
72
{
 
73
    if (argc < 5) {
 
74
        printf("Usage:\n\t\t%s <device> <model> <register> <num_threads>\n", argv[0]);
 
75
        exit(0);
 
76
    }
 
77
 
 
78
    reg = argv[3];
 
79
    int threads = atoi( argv[4] );
 
80
 
 
81
    pcilib_t *ctx = pcilib_open(argv[1], argv[2]);
 
82
 
 
83
    for(int i = 0; i < threads; i++)
 
84
    {
 
85
        pthread_t pth;
 
86
        pthread_create(&pth, NULL, read_reg, ctx);
 
87
    }
 
88
 
 
89
    getchar();
 
90
    stop = 1;
 
91
    return 0;
 
92
}