/[PAMELA software]/yoda/techmodel/forroutines/anticounter/AC.c
ViewVC logotype

Diff of /yoda/techmodel/forroutines/anticounter/AC.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2.4 by kusanagi, Mon Dec 20 14:15:15 2004 UTC revision 2.5 by kusanagi, Tue Dec 21 16:51:17 2004 UTC
# Line 1  Line 1 
1  /*******************************v1.0********************************  /*******************************v1.1********************************
2    
3  Functions to read AC physics data (ACphysics) and AC calibration  Functions to read AC physics data (ACphysics) and AC calibration
4  data (ACcalib).  data (ACcalib).
5  Author: Petter Hofverberg, petter@particle.kth.se  Author: Petter Hofverberg, petter@particle.kth.se
6    
7  0410 v1.0 alive  0410 v1.0 alive
8    0412 v1.1 fixed problem with found, and changed headers
9    
10  Errors: (returned to the main program as the variable "err")  Errors: (returned to the main program as the variable "err")
11  err=  err=
# Line 18  err= Line 19  err=
19  #include <stdio.h>  #include <stdio.h>
20  #include "AC.h"  #include "AC.h"
21    
22  int i,found,j;  int i,j,found;
23  unsigned short buffer[1000];  unsigned short buffer[1000];
24  unsigned short tmp1,tmp2;  unsigned short tmp1,tmp2;
25  unsigned char err;  unsigned char err;
# Line 67  void fillcalib(int k,unsigned short *buf Line 68  void fillcalib(int k,unsigned short *buf
68    printf("tail:CRC > %hx:%hx\n",buff[8255],buff[8256]);    printf("tail:CRC > %hx:%hx\n",buff[8255],buff[8256]);
69  }  }
70    
   
71  unsigned char ACphysics(int length,unsigned char* datapointer,struct physicsstruct* physicspointer)  unsigned char ACphysics(int length,unsigned char* datapointer,struct physicsstruct* physicspointer)
72  {  {
73    
74   int iter=2;    err=0;
75    physicspointer[0]=physicsdata[0];    found=0;
76    physicspointer[1]=physicsdata[1];    int iter=2;
77      for(i=0;i<1000;i++)
78        buffer[i]=0;
79      fillphys(0,&buffer[0]);
80      fillphys(1,&buffer[0]);
81    
82      
83    
84    //look for top header ACAC, then unpack data to main card buffer or extra card buffer depending on the subheader    //look for top header ACAC, then unpack data to main card buffer or extra card buffer depending on the subheader
85    //AC11 for main, AC22 for extra    //AC11 for main, AC22 for extra
# Line 84  unsigned char ACphysics(int length,unsig Line 90  unsigned char ACphysics(int length,unsig
90    
91        if(tmp1 == 0xACAC && ((tmp2 == 0xAC11 && (err&0xF0)==0x0) || (tmp2 == 0xAC22 && (err&0x0F)==0x0)))        if(tmp1 == 0xACAC && ((tmp2 == 0xAC11 && (err&0xF0)==0x0) || (tmp2 == 0xAC22 && (err&0x0F)==0x0)))
92          {          {
           
93            for(i=0;i<64;i++)            for(i=0;i<64;i++)
94              {              {
95                buffer[i]=((*datapointer) << 8) | *(datapointer+1);                buffer[i]=((*datapointer) << 8) | *(datapointer+1);
# Line 106  unsigned char ACphysics(int length,unsig Line 111  unsigned char ACphysics(int length,unsig
111          datapointer++;          datapointer++;
112          iter=iter+1;}          iter=iter+1;}
113      }      }
114      physicspointer[0]=physicsdata[0];
115      physicspointer[1]=physicsdata[1];
116    return err;    return err;
117    
118  }  }
# Line 115  unsigned char ACphysics(int length,unsig Line 121  unsigned char ACphysics(int length,unsig
121  unsigned char ACcalib(int length, unsigned char* datapointer, struct calibstruct* calibpointer)  unsigned char ACcalib(int length, unsigned char* datapointer, struct calibstruct* calibpointer)
122  {  {
123    
124      err=0;
125      found=0;
126    int iter=2;    int iter=2;
127                  for(i=0;i<1000;i++)
128        buffer[i]=0;
129      fillcalib(0,&buffer[0]);
130      fillcalib(1,&buffer[0]);
131    
132    //point struct-pointer to calibdata    //point struct-pointer to calibdata
133    calibpointer[0]=calibdata[0];  //card1    
   calibpointer[1]=calibdata[1];  //card2  
134    
135    //look for the top header 0xACCA, then the subheaders 0xAC11 and 0xAC22, and unpack the data    //look for the top header 0xACCA, then the subheaders 0xAC11 and 0xAC22, and unpack the data
136    //to each card depending on these.    //to each card depending on these.
# Line 128  unsigned char ACcalib(int length, unsign Line 139  unsigned char ACcalib(int length, unsign
139        tmp1 = ((*datapointer) << 8) | *(datapointer+1);        tmp1 = ((*datapointer) << 8) | *(datapointer+1);
140        tmp2 = ((*(datapointer+2)) << 8) | *(datapointer+3);        tmp2 = ((*(datapointer+2)) << 8) | *(datapointer+3);
141    
142        if(tmp1 == 0xACCA && ((tmp2 == 0xAC11 && (err&0xF0)==0x0) || (tmp2 == 0xAC22 && (err&0x0F)==0x0)))        if(tmp1 == 0xACCA && ((tmp2 == 0xAC11 && (err&0xF0)==0x0) || (tmp2 == 0xACA2 && (err&0x0F)==0x0)))
143          {          {
144            for(i=0;i<8258;i++)            for(i=0;i<8258;i++)
145              {              {
# Line 151  unsigned char ACcalib(int length, unsign Line 162  unsigned char ACcalib(int length, unsign
162          datapointer++;          datapointer++;
163          iter=iter+1;}          iter=iter+1;}
164      }      }
165      calibpointer[0]=calibdata[0];  //card1
166      calibpointer[1]=calibdata[1];  //card2
167    return err;    return err;
168  }  }
169    

Legend:
Removed from v.2.4  
changed lines
  Added in v.2.5

  ViewVC Help
Powered by ViewVC 1.1.23