/alps/ipecamera

To get this branch, use:
bzr branch http://darksoft.org/webbzr/alps/ipecamera

« back to all changes in this revision

Viewing changes to cmosis.c

  • Committer: Suren A. Chilingaryan
  • Date: 2015-04-27 00:28:57 UTC
  • Revision ID: csa@suren.me-20150427002857-82fk6r3e8rfgy4wr
First stand-alone ipecamera implementation

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
#include <unistd.h>
5
5
#include <assert.h>
6
6
 
7
 
#include "../tools.h"
8
 
#include "../error.h"
9
 
#include "model.h"
 
7
#include <pcilib.h>
 
8
#include <pcilib/tools.h>
 
9
#include <pcilib/error.h>
 
10
 
 
11
#include "cmosis.h"
 
12
#include "private.h"
10
13
 
11
14
#define ADDR_MASK 0x7F00
12
15
#define WRITE_BIT 0x8000
23
26
 
24
27
//static pcilib_register_value_t ipecamera_bit_mask[9] = { 0, 1, 3, 7, 15, 31, 63, 127, 255 };
25
28
 
26
 
int ipecamera_read(pcilib_t *ctx, pcilib_register_bank_description_t *bank, pcilib_register_addr_t addr, pcilib_register_value_t *value) {
 
29
int ipecamera_cmosis_read(pcilib_t *ctx, pcilib_register_bank_context_t *bank_ctx, pcilib_register_addr_t addr, pcilib_register_value_t *value) {
27
30
    uint32_t val, tmp[4];
28
31
    char *wr, *rd;
29
32
    struct timeval start;//, cur;
30
33
    int retries = RETRIES;
 
34
    const pcilib_register_bank_description_t *bank = bank_ctx->bank;
31
35
 
32
36
    assert(addr < 128);
33
37
    
52
56
    ipecamera_datacpy(wr, &val, bank);
53
57
 
54
58
#ifdef IPECAMERA_SIMPLIFIED_READOUT
55
 
    usleep(PCILIB_REGISTER_TIMEOUT);
56
 
//    ipecamera_datacpy(tmp, rd, bank);
57
 
//    usleep(PCILIB_REGISTER_TIMEOUT);
58
 
    ipecamera_datacpy(wr, &val, bank);
59
 
    usleep(PCILIB_REGISTER_TIMEOUT);
60
 
//    ipecamera_datacpy(tmp, rd, bank);
61
 
//    usleep(PCILIB_REGISTER_TIMEOUT);
62
 
    ipecamera_datacpy(wr, &val, bank);
63
 
    usleep(PCILIB_REGISTER_TIMEOUT);
 
59
    usleep(IPECAMERA_REGISTER_TIMEOUT);
 
60
//    ipecamera_datacpy(tmp, rd, bank);
 
61
//    usleep(IPECAMERA_REGISTER_TIMEOUT);
 
62
    ipecamera_datacpy(wr, &val, bank);
 
63
    usleep(IPECAMERA_REGISTER_TIMEOUT);
 
64
//    ipecamera_datacpy(tmp, rd, bank);
 
65
//    usleep(IPECAMERA_REGISTER_TIMEOUT);
 
66
    ipecamera_datacpy(wr, &val, bank);
 
67
    usleep(IPECAMERA_REGISTER_TIMEOUT);
64
68
#endif /* IPECAMERA_SIMPLIFIED_READOUT */
65
69
    
66
70
    gettimeofday(&start, NULL);
67
71
 
68
72
#ifdef IPECAMERA_MULTIREAD
69
 
    usleep(PCILIB_REGISTER_TIMEOUT);
 
73
    usleep(IPECAMERA_REGISTER_TIMEOUT);
70
74
    pcilib_datacpy(tmp, rd, 4, 4, bank->raw_endianess);
71
75
    val = tmp[0];
72
76
#else /* IPECAMERA_MULTIREAD */
74
78
 
75
79
    while ((val & READ_READY_BIT) == 0) {
76
80
        gettimeofday(&cur, NULL);
77
 
        if (((cur.tv_sec - start.tv_sec)*1000000 + (cur.tv_usec - start.tv_usec)) > PCILIB_REGISTER_TIMEOUT) break;
 
81
        if (((cur.tv_sec - start.tv_sec)*1000000 + (cur.tv_usec - start.tv_usec)) > IPECAMERA_REGISTER_TIMEOUT) break;
78
82
        
79
83
        ipecamera_datacpy(&val, rd, bank);
80
84
    }
113
117
    return 0;
114
118
}
115
119
 
116
 
int ipecamera_write(pcilib_t *ctx, pcilib_register_bank_description_t *bank, pcilib_register_addr_t addr, pcilib_register_value_t value) {
 
120
int ipecamera_cmosis_write(pcilib_t *ctx, pcilib_register_bank_context_t *bank_ctx, pcilib_register_addr_t addr, pcilib_register_value_t value) {
117
121
    uint32_t val, tmp[4];
118
122
    char *wr, *rd;
119
123
    struct timeval start;//, cur;
120
124
    int retries = RETRIES;
 
125
    const pcilib_register_bank_description_t *bank = bank_ctx->bank;
121
126
 
122
127
    assert(addr < 128);
123
128
    assert(value < 256);
142
147
    ipecamera_datacpy(wr, &val, bank);
143
148
 
144
149
#ifdef IPECAMERA_SIMPLIFIED_READOUT
145
 
    usleep(PCILIB_REGISTER_TIMEOUT);
146
 
//    ipecamera_datacpy(tmp, rd, bank);
147
 
//    usleep(PCILIB_REGISTER_TIMEOUT);
148
 
    ipecamera_datacpy(wr, &val, bank);
149
 
    usleep(PCILIB_REGISTER_TIMEOUT);
150
 
//    ipecamera_datacpy(tmp, rd, bank);
151
 
//    usleep(PCILIB_REGISTER_TIMEOUT);
152
 
    ipecamera_datacpy(wr, &val, bank);
153
 
    usleep(PCILIB_REGISTER_TIMEOUT);
 
150
    usleep(IPECAMERA_REGISTER_TIMEOUT);
 
151
//    ipecamera_datacpy(tmp, rd, bank);
 
152
//    usleep(IPECAMERA_REGISTER_TIMEOUT);
 
153
    ipecamera_datacpy(wr, &val, bank);
 
154
    usleep(IPECAMERA_REGISTER_TIMEOUT);
 
155
//    ipecamera_datacpy(tmp, rd, bank);
 
156
//    usleep(IPECAMERA_REGISTER_TIMEOUT);
 
157
    ipecamera_datacpy(wr, &val, bank);
 
158
    usleep(IPECAMERA_REGISTER_TIMEOUT);
154
159
#endif /* IPECAMERA_SIMPLIFIED_READOUT */
155
160
 
156
161
    gettimeofday(&start, NULL);
157
162
 
158
163
#ifdef IPECAMERA_MULTIREAD
159
 
    usleep(PCILIB_REGISTER_TIMEOUT);
 
164
    usleep(IPECAMERA_REGISTER_TIMEOUT);
160
165
    pcilib_datacpy(tmp, rd, 4, 4, bank->raw_endianess);
161
166
    val = tmp[0];
162
167
#else /* IPECAMERA_MULTIREAD */
163
168
    ipecamera_datacpy(&val, rd, bank);
164
169
    while ((val & READ_READY_BIT) == 0) {
165
170
        gettimeofday(&cur, NULL);
166
 
        if (((cur.tv_sec - start.tv_sec)*1000000 + (cur.tv_usec - start.tv_usec)) > PCILIB_REGISTER_TIMEOUT) break;
 
171
        if (((cur.tv_sec - start.tv_sec)*1000000 + (cur.tv_usec - start.tv_usec)) > IPECAMERA_REGISTER_TIMEOUT) break;
167
172
        
168
173
        ipecamera_datacpy(&val, rd, bank);
169
174
    }