Blame view

gui/tp_audine_elec/main.cpp 18.1 KB
63a793df   aklotz   TP CCD
1
/*
a965774e   aklotz   Fix bugs C code
2
3
 * Title: Code C de pilotage de camera Audine avec Raspberry
 * Author: A. Klotz. Universite de Toulouse
63a793df   aklotz   TP CCD
4
 *
a965774e   aklotz   Fix bugs C code
5
6
7
8
9
10
 * To install the GPIO access library BCM2835 for Ubuntu:
 * Some infos: http://www.airspayce.com/mikem/bcm2835/
 * Install procedure: https://raspberry-projects.com/pi/programming-in-c/io-pins/bcm2835-by-mike-mccauley
 * Do not forget to change the rights of the driver:
 * $ sudo chown user:user /dev/gpiomem
 * $ sudo crontab -e   and add the line @reboot chown user:user /dev/gpiomem
63a793df   aklotz   TP CCD
11
 *
a965774e   aklotz   Fix bugs C code
12
13
14
 * Code::Blocks configuration to use the GPIO library BCM2835 in C code:
 * Menu Settings -> Compiler...
 * Tab "Linker Settings", "Link libraries" [Add] bcm2835 [OK]
63a793df   aklotz   TP CCD
15
16
 */

63a793df   aklotz   TP CCD
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <bcm2835.h>

#define PHI_V1 RPI_BPLUS_GPIO_J8_11
#define PHI_V2 RPI_BPLUS_GPIO_J8_13
#define PHI_H1 RPI_BPLUS_GPIO_J8_15
#define PHI_R  RPI_BPLUS_GPIO_J8_16
#define PHI_CL RPI_BPLUS_GPIO_J8_18
#define PHI_SC RPI_BPLUS_GPIO_J8_22
#define PHI_SB RPI_BPLUS_GPIO_J8_32
#define PHI_SN RPI_BPLUS_GPIO_J8_36

#define BIT_0  RPI_BPLUS_GPIO_J8_29
#define BIT_1  RPI_BPLUS_GPIO_J8_31
#define BIT_2  RPI_BPLUS_GPIO_J8_33
#define BIT_3  RPI_BPLUS_GPIO_J8_35

#define DELAY  RPI_BPLUS_GPIO_J8_40

#define LEVEL_HIGH 0
#define LEVEL_LOW 1

a965774e   aklotz   Fix bugs C code
42
// -- Structure of camera informations
63a793df   aklotz   TP CCD
43
struct camprop {
63a793df   aklotz   TP CCD
44
45
46
47
48
49
50
51
52
53
54
55
56
57
   char msg[2048];
   float exptime;
   int binx, biny;
   int x1, y1, x2, y2;
   int w, h;
   double celldimx;
   double celldimy;
   int overscanindex;
   int nb_deadbeginphotox;
   int nb_deadendphotox;
   int nb_deadbeginphotoy;
   int nb_deadendphotoy;
   int nb_photox;
   int nb_photoy;
a965774e   aklotz   Fix bugs C code
58
   float *p;
63a793df   aklotz   TP CCD
59
60
};

a965774e   aklotz   Fix bugs C code
61
62
// -- Declaration of functions
int tp_acquisition_fullframe(struct camprop *cam);
63a793df   aklotz   TP CCD
63
static int tp_fast_vidage(struct camprop *cam);
a965774e   aklotz   Fix bugs C code
64
65
static int tp_read_frame(struct camprop *cam);
static void tp_sleep(float us);
63a793df   aklotz   TP CCD
66
67
static int tp_zi_zh(struct camprop *cam);
static int tp_read_pel_fast2(struct camprop *cam);
63a793df   aklotz   TP CCD
68
69
int tp_fast_line(struct camprop *cam);

63a793df   aklotz   TP CCD
70
/*
a965774e   aklotz   Fix bugs C code
71
 * Wait in micro-seconds.
63a793df   aklotz   TP CCD
72
 */
a965774e   aklotz   Fix bugs C code
73
void tp_sleep(float us)
63a793df   aklotz   TP CCD
74
75
76
77
78
79
80
81
{
   int i,n;
   n = (int)(us*10);
   for (i=0; i<n ; i++) {
      bcm2835_gpio_write (DELAY, 1) ;
   }
}

a965774e   aklotz   Fix bugs C code
82
int tp_acquisition_fullframe(struct camprop *cam)
63a793df   aklotz   TP CCD
83
84
{
   int i;
a965774e   aklotz   Fix bugs C code
85
   int nb_vidages = 2;
63a793df   aklotz   TP CCD
86
87
88
   /* =============================================== */
   /* === Etape de rincage de la matrice CCD      === */
   /* =============================================== */
a965774e   aklotz   Fix bugs C code
89
   // Vidage de la matrice
63a793df   aklotz   TP CCD
90
91
92
93
94
95
   for (i = 0; i < nb_vidages; i++) {
      tp_fast_vidage(cam);
   }
   /* =============================================== */
   /* === Integration de l'image (attente)        === */
   /* =============================================== */
a965774e   aklotz   Fix bugs C code
96
97
   // Delais du temps de pose (en micro-secondes)
   tp_sleep((int) (1e6 * cam->exptime));
63a793df   aklotz   TP CCD
98
99
100
   /* =============================================== */
   /* === Etape de lecture de la matrice CCD      === */
   /* =============================================== */
a965774e   aklotz   Fix bugs C code
101
   // Parametres de dimensions pour allouer le pointeur image
63a793df   aklotz   TP CCD
102
103
   cam->w = cam->nb_photox / cam->binx;
   cam->h = cam->nb_photoy / cam->biny;
a965774e   aklotz   Fix bugs C code
104
105
106
107
   // Allocation memoire du pointeur image
   cam->p = (float *) calloc(cam->w*cam->h, sizeof(float));
   // Lecture et num�risation de l'image vers le pointeur p
   tp_read_frame(cam);
63a793df   aklotz   TP CCD
108
109
110
111
112
113
114
115
116
117
118
119
120
   return 0;
}

/*
fast_vidage(struct camprop *cam) --
  Vidage rapide de la matrice. Le decalage des lignes s'effectue
  ici par groupe de 20. C'est le seul parametre a regler ici.
*/
int tp_fast_vidage(struct camprop *cam)
{
   int i, j;
   int imax, jmax, decaligne;

a965774e   aklotz   Fix bugs C code
121
   // -- Nombre total de photocellules dans le registre horizontal.
63a793df   aklotz   TP CCD
122
123
   imax = cam->nb_photox + cam->nb_deadbeginphotox + cam->nb_deadendphotox;

a965774e   aklotz   Fix bugs C code
124
   // -- Nombre total de photocellules dans une colonne de la matrice.
63a793df   aklotz   TP CCD
125
126
   jmax = cam->nb_photoy + cam->nb_deadbeginphotoy + cam->nb_deadendphotoy;

a965774e   aklotz   Fix bugs C code
127
   // -- Nombre de lignes decalees a chaque boucle sur l'axe vertical.
63a793df   aklotz   TP CCD
128
129
   decaligne = 20;

a965774e   aklotz   Fix bugs C code
130
   // -- Nombre total de boucles sur l'axe vertical.
63a793df   aklotz   TP CCD
131
132
   jmax = (int) ceil (1. * jmax / decaligne) ;

a965774e   aklotz   Fix bugs C code
133
   // -- Boucle sur les paquets de lignes.
63a793df   aklotz   TP CCD
134
   for (j = 0; j < jmax; j++) {
a965774e   aklotz   Fix bugs C code
135
      // -- Decalage d'un paquet de 'decaligne' lignes.
63a793df   aklotz   TP CCD
136
137
138
      for (i = 0; i < decaligne; i++) {
         tp_zi_zh(cam);
      }
a965774e   aklotz   Fix bugs C code
139
      // -- Lecture du registre horizontal sans reset
63a793df   aklotz   TP CCD
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
      for (i = 0; i < imax; i++) {
         tp_read_pel_fast2(cam);
      }
   }
   return 0;
}


/*
tp_zi_zh(struct camprop *cam) --
  Decalage vertical de toutes les lignes d'un cran vers le bas.
  La premiere ligne du bas est donc transferee dans le registre
  horizontal.
*/
int tp_zi_zh(struct camprop *cam)
{
   float tphiV=2.0;
   float tphiHS=1.0;
   // ---
a965774e   aklotz   Fix bugs C code
159
160
161
162
163
164
165
166
167
168
   bcm2835_gpio_write (PHI_V1, LEVEL_HIGH);
   tp_sleep(tphiV);
   bcm2835_gpio_write (PHI_V1, LEVEL_LOW);
   bcm2835_gpio_write (PHI_V2, LEVEL_HIGH);
   tp_sleep(tphiV);
   bcm2835_gpio_write (PHI_V1, LEVEL_HIGH);
   bcm2835_gpio_write (PHI_V2, LEVEL_LOW);
   tp_sleep(tphiV);
   bcm2835_gpio_write (PHI_V1, LEVEL_LOW);
   tp_sleep(tphiHS);
63a793df   aklotz   TP CCD
169
170
171
   return 0;
}

63a793df   aklotz   TP CCD
172
173
/*
tp_read_pel_fast2(struct camprop *cam) --
a965774e   aklotz   Fix bugs C code
174
  Lecture rapide d'une photocellule : decalage du registre horizontal
63a793df   aklotz   TP CCD
175
176
177
178
179
180
  sans Reset, mais sans lecture du CAN,
*/
int tp_read_pel_fast2(struct camprop *cam)
{
   float tphiPIX=0.25;
   // ---
a965774e   aklotz   Fix bugs C code
181
182
183
184
   bcm2835_gpio_write (PHI_H1, LEVEL_LOW);
   tp_sleep(tphiPIX);
   bcm2835_gpio_write (PHI_H1, LEVEL_HIGH);
   tp_sleep(tphiPIX);
63a793df   aklotz   TP CCD
185
186
187
188
189
   return 0;
}

/*
tp_read_pel_fast(struct camprop *cam) --
a965774e   aklotz   Fix bugs C code
190
  Lecture rapide d'une photocellule : decalage du registre horizontal
63a793df   aklotz   TP CCD
191
192
193
194
195
196
197
  avec Reset, mais sans lecture du CAN,
*/
int tp_read_pel_fast(struct camprop *cam)
{
   float tphiPIX=0.25;
   float tphiR=0.020;
   // ---
a965774e   aklotz   Fix bugs C code
198
199
200
201
202
203
204
205
   bcm2835_gpio_write (PHI_R, LEVEL_HIGH);
   tp_sleep(tphiR);
   bcm2835_gpio_write (PHI_R, LEVEL_LOW);
   tp_sleep(tphiR);
   bcm2835_gpio_write (PHI_H1, LEVEL_LOW);
   tp_sleep(tphiPIX);
   bcm2835_gpio_write (PHI_H1, LEVEL_HIGH);
   tp_sleep(tphiPIX);
63a793df   aklotz   TP CCD
206
207
208
209
210
   return 0;
}

/*
tp_fast_line_() --
a965774e   aklotz   Fix bugs C code
211
  Lecture rapide du registre horizontal, avec la fonction tp_read_pel_fast.
63a793df   aklotz   TP CCD
212
213
214
215
*/
int tp_fast_line(struct camprop *cam)
{
   int i, imax;
a965774e   aklotz   Fix bugs C code
216
   // Nombre total de photocellules dans le registre horizontal.
63a793df   aklotz   TP CCD
217
218
219
220
221
222
223
   imax = cam->nb_photox + cam->nb_deadbeginphotox + cam->nb_deadendphotox;
   for (i = 0; i < imax; i++) {
      tp_read_pel_fast(cam);
   }
   return 0;
}

a965774e   aklotz   Fix bugs C code
224
int tp_read_frame(struct camprop *cam)
63a793df   aklotz   TP CCD
225
226
227
228
229
230
231
{

   int i, j;
   int k, l;
   int imax, jmax;
   int cx1, cx2, cy1;
   unsigned short buffer[2048];
a965774e   aklotz   Fix bugs C code
232
   unsigned short x;
63a793df   aklotz   TP CCD
233

a965774e   aklotz   Fix bugs C code
234
   // -- Dimensions de l'image a digitaliser
63a793df   aklotz   TP CCD
235
236
   imax = cam->w;
   jmax = cam->h;
a965774e   aklotz   Fix bugs C code
237
   // -- Nombre de photocellules de debut de ligne a ne pas digitaliser
63a793df   aklotz   TP CCD
238
   cx1 = cam->nb_deadbeginphotox;
a965774e   aklotz   Fix bugs C code
239
   // -- Nombre de photocellules de fin de ligne a ne pas digitaliser
63a793df   aklotz   TP CCD
240
   cx2 = cam->nb_deadendphotox;
a965774e   aklotz   Fix bugs C code
241
   // -- Nombre de lignes de debut a ne pas digitaliser
63a793df   aklotz   TP CCD
242
243
   cy1 = cam->nb_deadbeginphotoy;

a965774e   aklotz   Fix bugs C code
244
   // -- On supprime les cy1 premieres lignes
63a793df   aklotz   TP CCD
245
246
247
248
   for (i = 0; i < cy1; i++) {
      tp_zi_zh(cam);
   }

a965774e   aklotz   Fix bugs C code
249
   // -- On nettoie le registre horizontal
63a793df   aklotz   TP CCD
250
251
252
253
   for (i = 0; i < 1; i++) {
      tp_fast_line(cam);
   }

a965774e   aklotz   Fix bugs C code
254
   // -- Boucle sur le transfert vertical
63a793df   aklotz   TP CCD
255
256
   for (i = 0; i < jmax; i++) {

a965774e   aklotz   Fix bugs C code
257
      // -- Boucle de binning vertical
63a793df   aklotz   TP CCD
258
259
260
261
      for (k = 0; k < cam->biny; k++) {
         tp_zi_zh(cam);
      }

a965774e   aklotz   Fix bugs C code
262
      // -- On retire les cx1 premieres photocellules avec reset
63a793df   aklotz   TP CCD
263
264
265
266
      for (j = 0; j < cx1; j++) {
         tp_read_pel_fast(cam);
      }

a965774e   aklotz   Fix bugs C code
267
      // -- Boucle sur le transfert horizontal
63a793df   aklotz   TP CCD
268
      for (j = 0; j < imax; j++) {
b355c4be   aklotz   Fix bugs C code
269
         float tphiR=2.0; //0.020;
63a793df   aklotz   TP CCD
270
271
272
         float tRef1=4.0;
         float tRef2=1.0;
         float tRef3=1.0;
b355c4be   aklotz   Fix bugs C code
273
         float tphiPIX=1.0; // 0.25
63a793df   aklotz   TP CCD
274
         float tVid1=4.0;
a965774e   aklotz   Fix bugs C code
275
276
277
278
         float tVid2=1.0;
         float tSel=1.0;

         // -- Palier de reset
63a793df   aklotz   TP CCD
279
         bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ;
a965774e   aklotz   Fix bugs C code
280
281
         bcm2835_gpio_write (PHI_R,  LEVEL_HIGH) ;
         tp_sleep(tphiR);
63a793df   aklotz   TP CCD
282
         bcm2835_gpio_write (PHI_R,  LEVEL_LOW) ;
a965774e   aklotz   Fix bugs C code
283
284
285

         // -- Palier de reference
         tp_sleep(tRef1);
63a793df   aklotz   TP CCD
286
         bcm2835_gpio_write (PHI_CL, LEVEL_HIGH) ;
a965774e   aklotz   Fix bugs C code
287
         tp_sleep(tRef2);
63a793df   aklotz   TP CCD
288
         bcm2835_gpio_write (PHI_CL, LEVEL_LOW) ;
a965774e   aklotz   Fix bugs C code
289
         tp_sleep(tRef3);
63a793df   aklotz   TP CCD
290

a965774e   aklotz   Fix bugs C code
291
         // -- Boucle de binning horizontal
63a793df   aklotz   TP CCD
292
293
         for (l = 0; l < cam->binx; l++) {
            bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ;
a965774e   aklotz   Fix bugs C code
294
            tp_sleep(tphiPIX);
63a793df   aklotz   TP CCD
295
            bcm2835_gpio_write (PHI_H1, LEVEL_HIGH) ;
a965774e   aklotz   Fix bugs C code
296
            tp_sleep(tphiPIX);
63a793df   aklotz   TP CCD
297
298
         }

a965774e   aklotz   Fix bugs C code
299
300
         // -- Palier video
         tp_sleep(tVid1);
63a793df   aklotz   TP CCD
301
         bcm2835_gpio_write (PHI_SC, LEVEL_HIGH) ;
a965774e   aklotz   Fix bugs C code
302
         tp_sleep(tVid2);
63a793df   aklotz   TP CCD
303

a965774e   aklotz   Fix bugs C code
304
         // -- Recupere le nibble _ _ _ _  _ _ _ _  _ _ _ _ 3 2 1 0
63a793df   aklotz   TP CCD
305
306
307
308
         // SB = Select Byte      <---- SB=1 ----> <---- SB=0 ---->
         // SN = Select Nibble    <SN=1 >  <SN=0 > <SN=1 >  <SN=0 >
         bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ;
         bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;
a965774e   aklotz   Fix bugs C code
309
310
311
312
313
         tp_sleep(tSel);
         x  = (unsigned short)bcm2835_gpio_lev(BIT_0) ;
         x += (unsigned short)bcm2835_gpio_lev(BIT_1) << 1;
         x += (unsigned short)bcm2835_gpio_lev(BIT_2) << 2;
         x += (unsigned short)bcm2835_gpio_lev(BIT_3) << 3;
63a793df   aklotz   TP CCD
314

a965774e   aklotz   Fix bugs C code
315
         // -- Recupere le nibble _ _ _ _  _ _ _ _  3 2 1 0  _ _ _ _
63a793df   aklotz   TP CCD
316
317
         bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ;
         bcm2835_gpio_write (PHI_SN, LEVEL_HIGH) ;
a965774e   aklotz   Fix bugs C code
318
319
320
321
322
         tp_sleep(tSel);
         x += (unsigned short)bcm2835_gpio_lev(BIT_0) << 4;
         x += (unsigned short)bcm2835_gpio_lev(BIT_1) << 5;
         x += (unsigned short)bcm2835_gpio_lev(BIT_2) << 6;
         x += (unsigned short)bcm2835_gpio_lev(BIT_3) << 7;
63a793df   aklotz   TP CCD
323

a965774e   aklotz   Fix bugs C code
324
         // -- Recupere le nibble _ _ _ _  3 2 1 0  _ _ _ _  _ _ _ _
63a793df   aklotz   TP CCD
325
326
         bcm2835_gpio_write (PHI_SB, LEVEL_HIGH) ;
         bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;
a965774e   aklotz   Fix bugs C code
327
328
329
330
331
         tp_sleep(tSel);
         x += (unsigned short)bcm2835_gpio_lev(BIT_0) << 8;
         x += (unsigned short)bcm2835_gpio_lev(BIT_1) << 9;
         x += (unsigned short)bcm2835_gpio_lev(BIT_2) << 10;
         x += (unsigned short)bcm2835_gpio_lev(BIT_3) << 11;
63a793df   aklotz   TP CCD
332

a965774e   aklotz   Fix bugs C code
333
         // -- Recupere le nibble 3 2 1 0  _ _ _ _  _ _ _ _  _ _ _ _
63a793df   aklotz   TP CCD
334
335
         bcm2835_gpio_write (PHI_SB, LEVEL_HIGH) ;
         bcm2835_gpio_write (PHI_SN, LEVEL_HIGH) ;
a965774e   aklotz   Fix bugs C code
336
337
338
339
340
         tp_sleep(tSel);
         x += (unsigned short)bcm2835_gpio_lev(BIT_0) << 12;
         x += (unsigned short)bcm2835_gpio_lev(BIT_1) << 13;
         x += (unsigned short)bcm2835_gpio_lev(BIT_2) << 14;
         x += (unsigned short)bcm2835_gpio_lev(BIT_3) << 15;
63a793df   aklotz   TP CCD
341

a965774e   aklotz   Fix bugs C code
342
         // -- Remises aux niveaux bas
63a793df   aklotz   TP CCD
343
344
345
346
         bcm2835_gpio_write (PHI_SC, LEVEL_LOW) ;
         bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ;
         bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;

a965774e   aklotz   Fix bugs C code
347
348
         // -- Stockage du pixel dans un buffer de ligne
         buffer[j] = x;
63a793df   aklotz   TP CCD
349
350
351

      }

a965774e   aklotz   Fix bugs C code
352
      // -- On retire cx2 photocellules a la fin
63a793df   aklotz   TP CCD
353
354
355
356
      for (j = 0; j < cx2; j++) {
         tp_read_pel_fast(cam);
      }

a965774e   aklotz   Fix bugs C code
357
      // -- On transfere le buffer de ligne vers la matrice image
63a793df   aklotz   TP CCD
358
      if (i != 0) {
a965774e   aklotz   Fix bugs C code
359
         cam->p[(i - 1) * imax] = (float)buffer[0];
63a793df   aklotz   TP CCD
360
361
      }
      for (j = 1; j < imax; j++) {
a965774e   aklotz   Fix bugs C code
362
         cam->p[(i + 1) * imax - j] = (float)buffer[j];
63a793df   aklotz   TP CCD
363
364
365
366
367
368
      }

   }
   return 0;
}

a965774e   aklotz   Fix bugs C code
369
void tp_savefits(struct camprop *cam, char *filename)
63a793df   aklotz   TP CCD
370
371
372
{
   FILE *f;
   char line[1024],car;
a965774e   aklotz   Fix bugs C code
373
   short value0;
63a793df   aklotz   TP CCD
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
   char *cars0;
   int k,k0;
   long one= 1;
   int big_endian;
   f=fopen(filename,"wb");
   strcpy(line,"SIMPLE  =                    T / file does conform to FITS standard             ");
   fwrite(line,80,sizeof(char),f);
   strcpy(line,"BITPIX  =                   16 / number of bits per data pixel                  ");
   fwrite(line,80,sizeof(char),f);
   strcpy(line,"NAXIS   =                    2 / number of data axes                            ");
   fwrite(line,80,sizeof(char),f);
   sprintf(line,"NAXIS1  =                  %3d / length of data axis 1                          ",cam->w);
   fwrite(line,80,sizeof(char),f);
   sprintf(line,"NAXIS2  =                  %3d / length of data axis 2                          ",cam->h);
   fwrite(line,80,sizeof(char),f);
a965774e   aklotz   Fix bugs C code
389
   strcpy(line,"BZERO   =                32768 / uint16 32768                                   ");
63a793df   aklotz   TP CCD
390
   fwrite(line,80,sizeof(char),f);
a965774e   aklotz   Fix bugs C code
391
   strcpy(line,"BSCALE  =                    1 / uint16 1                                       ");
63a793df   aklotz   TP CCD
392
393
394
395
396
397
398
399
   fwrite(line,80,sizeof(char),f);
   k0=9;
   strcpy(line,"END                                                                             ");
   fwrite(line,80,sizeof(char),f);
   strcpy(line,"                                                                                ");
   for (k=k0;k<=36;k++) {
      fwrite(line,80,sizeof(char),f);
   }
a965774e   aklotz   Fix bugs C code
400
   // -- Byte order test
63a793df   aklotz   TP CCD
401
402
403
404
405
   if (!(*((char *)(&one)))) {
      big_endian=1;
   } else {
      big_endian=0;
   }
a965774e   aklotz   Fix bugs C code
406
   // -- Write data
63a793df   aklotz   TP CCD
407
   for (k=0;k<cam->h*cam->w;k++) {
a965774e   aklotz   Fix bugs C code
408
      value0 = cam->p[k]-32768;
63a793df   aklotz   TP CCD
409
410
411
412
413
414
      if (big_endian==0) {
         cars0=(char*)&value0;
         car=cars0[0];
         cars0[0]=cars0[1];
         cars0[1]=car;
      }
a965774e   aklotz   Fix bugs C code
415
      fwrite(&value0,1,sizeof(short),f);
63a793df   aklotz   TP CCD
416
   }
811f0a5f   aklotz   Add methods for T...
417
   int n= (cam->h*cam->w) % 2880 -1;
63a793df   aklotz   TP CCD
418
419
420
421
422
423
424
425
   value0=(float)0.;
   for (k=0;k<n;k++) {
      if (big_endian==0) {
         cars0=(char*)&value0;
         car=cars0[0];
         cars0[0]=cars0[1];
         cars0[1]=car;
      }
a965774e   aklotz   Fix bugs C code
426
      fwrite(&value0,1,sizeof(short),f);
63a793df   aklotz   TP CCD
427
428
429
430
   }
   fclose(f);
}

a965774e   aklotz   Fix bugs C code
431
// -- This is the start point of the program
63a793df   aklotz   TP CCD
432
433
434
int main(int argc, char* argv[])
{

a965774e   aklotz   Fix bugs C code
435
    // -- Decode la ligne de commandes. Exemple : tp_ccd.exe full_frame 0.5 1
a88e292a   aklotz   Add Combobox for ...
436
    char method[1024];
63a793df   aklotz   TP CCD
437
438
    float exptime = 0.5;
    int binning = 1;
a965774e   aklotz   Fix bugs C code
439
    strcpy(method,"full_frame");
a88e292a   aklotz   Add Combobox for ...
440
    if(argc < 3)
63a793df   aklotz   TP CCD
441
    {
811f0a5f   aklotz   Add methods for T...
442
        printf("ERR 1 : Not enough command line parameters\n: method exptime binningn");
a965774e   aklotz   Fix bugs C code
443
        return 1;
63a793df   aklotz   TP CCD
444
    } else {
811f0a5f   aklotz   Add methods for T...
445
446
447
        strcpy(method,argv[1]);
        exptime = atof(argv[2]);
        binning = atoi(argv[3]);
63a793df   aklotz   TP CCD
448
    }
a88e292a   aklotz   Add Combobox for ...
449
    printf("ERR 0 : %s %f %d\n", method, exptime, binning);
63a793df   aklotz   TP CCD
450

a965774e   aklotz   Fix bugs C code
451
   // -- Initialise la structure des donnees de la camera
63a793df   aklotz   TP CCD
452
   struct camprop cam;
63a793df   aklotz   TP CCD
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
   strcpy(cam.msg,"");
   cam.exptime=exptime; // sec
   cam.binx=binning;
   cam.biny=binning;
   cam.x1=1;
   cam.y1=1;
   cam.x2=768;
   cam.y2=512;
   cam.nb_photox=cam.x2-cam.x1+1;
   cam.nb_photoy=cam.y2-cam.y1+1;
   cam.celldimx=9e-6; // m
   cam.celldimy=9e-6; // m
   cam.overscanindex=0;
   cam.nb_deadbeginphotox=14;
   cam.nb_deadendphotox=14;
   cam.nb_deadbeginphotoy=4;
   cam.nb_deadendphotoy=4;
   cam.p=NULL;
a965774e   aklotz   Fix bugs C code
471
472

   // -- Initialise le GPIO
63a793df   aklotz   TP CCD
473
474
475
476
   if (!bcm2835_init()) {
       printf("Probleme bcm2835_init");
       return 1;
   }
a965774e   aklotz   Fix bugs C code
477
478

   // -- Set the pin to be an output
63a793df   aklotz   TP CCD
479
480
481
482
483
484
485
486
487
   bcm2835_gpio_fsel(PHI_V1, BCM2835_GPIO_FSEL_OUTP);
   bcm2835_gpio_fsel(PHI_V2, BCM2835_GPIO_FSEL_OUTP);
   bcm2835_gpio_fsel(PHI_H1, BCM2835_GPIO_FSEL_OUTP);
   bcm2835_gpio_fsel(PHI_R,  BCM2835_GPIO_FSEL_OUTP);
   bcm2835_gpio_fsel(PHI_CL, BCM2835_GPIO_FSEL_OUTP);
   bcm2835_gpio_fsel(PHI_SB, BCM2835_GPIO_FSEL_OUTP);
   bcm2835_gpio_fsel(PHI_SC, BCM2835_GPIO_FSEL_OUTP);
   bcm2835_gpio_fsel(PHI_SN, BCM2835_GPIO_FSEL_OUTP);
   bcm2835_gpio_fsel(DELAY,  BCM2835_GPIO_FSEL_OUTP); // special delay us
a965774e   aklotz   Fix bugs C code
488
489

   // -- Set the pin to be an input
63a793df   aklotz   TP CCD
490
491
492
493
   bcm2835_gpio_fsel(BIT_0, BCM2835_GPIO_FSEL_INPT);
   bcm2835_gpio_fsel(BIT_1, BCM2835_GPIO_FSEL_INPT);
   bcm2835_gpio_fsel(BIT_2, BCM2835_GPIO_FSEL_INPT);
   bcm2835_gpio_fsel(BIT_3, BCM2835_GPIO_FSEL_INPT);
a965774e   aklotz   Fix bugs C code
494
495

   // -- Set default values for outputs
63a793df   aklotz   TP CCD
496
497
498
499
500
501
502
503
   bcm2835_gpio_write (PHI_V1, LEVEL_LOW) ;
   bcm2835_gpio_write (PHI_V2, LEVEL_LOW) ;
   bcm2835_gpio_write (PHI_H1, LEVEL_HIGH) ;
   bcm2835_gpio_write (PHI_R,  LEVEL_LOW) ;
   bcm2835_gpio_write (PHI_CL, LEVEL_LOW) ;
   bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ;
   bcm2835_gpio_write (PHI_SC, LEVEL_LOW) ;
   bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;
a88e292a   aklotz   Add Combobox for ...
504

a965774e   aklotz   Fix bugs C code
505
   // -- Select the method to apply
a88e292a   aklotz   Add Combobox for ...
506
   if (strcmp(method, "full_frame")==0) {
a965774e   aklotz   Fix bugs C code
507
       tp_acquisition_fullframe(&cam);
63a793df   aklotz   TP CCD
508
509
       char filename[1024];
       strcpy(filename,"/home/user/Documents/image.fit");
a965774e   aklotz   Fix bugs C code
510
       tp_savefits(&cam, filename);
a88e292a   aklotz   Add Combobox for ...
511
512
513
514
   } else if (strcmp(method, "zi_zh")==0) {
      for (int i = 0; i <1; i++) {
         tp_zi_zh(&cam);
      }
811f0a5f   aklotz   Add methods for T...
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
   } else if (strcmp(method, "fast_line")==0) {
      for (int i = 0; i <1; i++) {
         tp_fast_line(&cam);
      }
   } else if (strcmp(method, "read_pel_fast")==0) {
      for (int i = 0; i <1; i++) {
         tp_read_pel_fast(&cam);
      }
   } else if (strcmp(method, "read_pel_fast2")==0) {
      for (int i = 0; i <1; i++) {
         tp_read_pel_fast2(&cam);
      }
   } else if (strcmp(method, "fast_vidage")==0) {
      for (int i = 0; i <1; i++) {
         tp_fast_vidage(&cam);
      }
a88e292a   aklotz   Add Combobox for ...
531
   } else if (strcmp(method, "square_signal")==0) {
63a793df   aklotz   TP CCD
532
533
534
535
536
537
538
539
540
541
542
543
       for (int i = 0; i < 100000; i++) {
           float tphiV=2.0;
           float tphiHS=1.0;
           // ---
           bcm2835_gpio_write (PHI_V1, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_V2, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_H1, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_R, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_CL, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_SB, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_SC, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_SN, LEVEL_HIGH) ;
a965774e   aklotz   Fix bugs C code
544
           tp_sleep(tphiV);
63a793df   aklotz   TP CCD
545
546
547
548
549
550
551
552
           bcm2835_gpio_write (PHI_V1, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_V2, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_R, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_CL, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_SC, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;
a965774e   aklotz   Fix bugs C code
553
           tp_sleep(tphiHS);
63a793df   aklotz   TP CCD
554
       }
a965774e   aklotz   Fix bugs C code
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
   } else if (strcmp(method, "set_255")==0) {
           bcm2835_gpio_write (PHI_V1, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_V2, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_H1, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_R, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_CL, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_SB, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_SC, LEVEL_HIGH) ;
           bcm2835_gpio_write (PHI_SN, LEVEL_HIGH) ;
           tp_sleep(5e6);
   } else if (strcmp(method, "set_0")==0) {
           bcm2835_gpio_write (PHI_V1, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_V2, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_R, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_CL, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_SC, LEVEL_LOW) ;
           bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;
63a793df   aklotz   TP CCD
574
575
576
577
   }
   printf("=== Termine\n");
   return 0;
}