24
27
//static pcilib_register_value_t ipecamera_bit_mask[9] = { 0, 1, 3, 7, 15, 31, 63, 127, 255 };
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];
29
32
struct timeval start;//, cur;
30
33
int retries = RETRIES;
34
const pcilib_register_bank_description_t *bank = bank_ctx->bank;
32
36
assert(addr < 128);
52
56
ipecamera_datacpy(wr, &val, bank);
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 */
66
70
gettimeofday(&start, NULL);
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);
72
76
#else /* IPECAMERA_MULTIREAD */
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;
79
83
ipecamera_datacpy(&val, rd, bank);
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];
119
123
struct timeval start;//, cur;
120
124
int retries = RETRIES;
125
const pcilib_register_bank_description_t *bank = bank_ctx->bank;
122
127
assert(addr < 128);
123
128
assert(value < 256);
142
147
ipecamera_datacpy(wr, &val, bank);
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 */
156
161
gettimeofday(&start, NULL);
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);
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;
168
173
ipecamera_datacpy(&val, rd, bank);