logo.png

Carte Arm

Alims

Chassis

Big, Zora et Emilie

Star controller

ctrlSecurity

GPS

Triger L2

Console

Switchs

Home Up


Contents



1 Introduction

Ce document décrit la gestion des pixels de la caméra.
Les pixels peuvent être éteind

  • suite à la détection d'un voltage trop élevé
  • ou en prévention.
Il faut par ailleurs rallumer les pixels éteints.


2 Code HESS1

Figure: Schéma des threads des serveurs Hess2
\begin{figure}\centering
\includeImage[scale=0.8]{threads}
\end{figure}

Dans HESS1, Le code utilitaire de gestion des pixels est appellé au niveau du scheduleur du serveur de socket et de l'acquisition.

  • Sdaq/Server/Daqd/VERSION_0.00/src/acq_camera.c :
    This process is real time acquisition of the HESS telescope camera on interrupt from the IO register board
    void *thread_inbuf (void *arg) {
     /* block all signals */
     while(1) {
      sigwait(&ensemble, &num);
      if(sig_monitoring == SIG_CAMERA_HTMON) {
       headp = (Event_Header_t *) &cbuff[inbuff];
       Do_Slc ((Event_Header_t *) &cbuff[inbuff],...)
    
       //get present time
       if(!DrawerConfig) {
        drawer_ptr = (unsigned short *) &cbuff[inbuff] + header_size;
        while(i < headp->data_size)
         DrawerSurvey(drawer_ptr + i, papat_desc, 0xf, 0xf, 0x3b, time_of_endread.tv_sec);
    }}}}
    
    int main(int argc, char *argv[]) 
    {
     tcam_desc = open("/dev/camera", O_RDWR);
     common_def.des_camera = tcam_desc; // pass camera-device desc
    
     status = pthread_create(&thr_inbuf, &thread_attr, thread_inbuf, NULL);
     ...
     status = pthread_join(thr_inbuf, &thread_result);
     exit(0);
    }
    
  • Sdaq/Server/Slcd/VERSION_3.00/Consumer/Task_DATA_Consumer.c :
    Scan FIFO_Buffer and search for slow control or DAQ event Check header and tailer of the block, block identificator and corresponding size.
    Store data in DATA_Buffer to be read end send by other consumers
    void Task_DATA_Consumer(void *mytask){...
    do{...
     /* Store locale GPS/CPU time stamp */
     locate_time_sec = *(int *)(pDATA+10);
    
     /* check online star monitoring prediction if PM are not in transition state 
     SurveyStars(locate_time_sec, slcd.pattern);
    
     /* Loop on all 4xFIFO */
     for(ii=0; ii<4; ii++)
      /* If high voltage is on then check the behaviour of photo multipliers */
      err = DrawerSurvey(pDATA_save,...)
    
    } while (task->_status & TASK_STATUS_CREATED);
    pthread_exit(0);
    }
    
  • Sdaq/Server/Slcd/VERSION_3.00/Util/Warning.c
    int SwitchOffPixel(int drawer, int pixel, int fifo, int pattern, char *reason){
     Config[drawer].cntrl_ht_16.HV_status &= ~(0x1<<pixel);
     ierr = cPCI_FIFO_Write_Block(fifo, (short *)&Config[drawer].cntrl_ht_16, pattern);
    }
    
    int SwitchOnPixel(int drawer, int pixel, int fifo, int pattern, char *reason){
     Config[drawer].cntrl_ht_16.HV_status |= 0x1<<pixel;
     ierr = cPCI_FIFO_Write_Block(fifo, (short *)&Config[drawer].cntrl_ht_16, pattern);
    }
    
    int SurveyStars(unsigned long long int time, unsigned int pattern){
     while(1){
      if (!ioctl(common_def.des_camera, SURVEY_STAR_CHECK, &star)) break;
      drawer_num = DrawerId2Number(star.drawer);
    
      switch(star.InOrOut){
      case 1: " Star enter (drawer 0x%X : HT=0x%X)"
      SwitchOffPixel(...)
      case 0: " Star leave (drawer 0x%X : HT=0x%X)"
      SwitchOffPixel(...)
      }
    
      ioctl(common_def.des_camera, SURVEY_STAR_REMOVE, star.id);
    }}
    
    int DrawerSurvey(short *pDATA,...){
     /* Check limit on HTI value */
     SwitchOffPixel(drawer_num, pixel, fifo, pattern, message);
     /* Check HT value send for this drawer */
     SwitchOffPixel(drawer_num, pixel, fifo, pattern, message);
     /* Check noise intensity - HTI vs HTV */
     SwitchOffPixel(drawer_num, pixel, fifo, pattern, message);
    }
    
  • Sdaq/Server/Slcd/VERSION_3.00/src/SURVEYControl.c :
    Control sun, moon and star
    int SURVEYControl(char *Buffer){
     if (!Look4Key(local_buffer,"SUN",3))...
     else if (!Look4Key(local_buffer,"MOON",4))...
     else if (!Look4Key(local_buffer,"STAR",4))...
     else if (!Look4Key(local_buffer, "CLEAR", 5))...
     else if (!Look4Key(local_buffer,"DUMP",4))...
    }
    
  • Sdaq/Driver/tcamera/drv_camera.c :
    Linux driver for the HESS telescope camera this is a logical driver, no hardware is directly involved
        case SURVEY_SET_SUN:       Run.survey.sun  = *(Solar_t *)ioctl_param;        break;
        case SURVEY_SET_MOON:      Run.survey.moon = *(Solar_t *)ioctl_param;        break;
        case SURVEY_STAR_ADD:
          if (!(star = kmalloc(sizeof(struct star_t), GFP_KERNEL))) return(ENOMEM);
          *star = *(Star_t *)ioctl_param;
          /* gestion de liste ... */
          Run.survey.nbStars++;
          return(star->id);
        case SURVEY_STAR_REMOVE:
        case SURVEY_STAR_CHECK:
        case SURVEY_GET_STAR_ID:
        case SURVEY_GET_STAR_NUMBER:
        case SURVEY_GET_SUN: 
        case SURVEY_GET_MOON:   
        case SURVEY_GET_NUMBER_OF_STARS:
    

Question: Où se trouve le code du star controller ?


3 Extinction préventive

Grammaire donnée par le controler :

/* star survey */
  else if (!Look4Key(local_buffer,"STAR",4)) 
    {
      local_buffer +=5;
      if (sscanf(local_buffer,"IN %2c%02d %Ld",drawer,&pixel,&val) == 3) 
      ...
      else if (sscanf(local_buffer,"OUT %2c%02d %Ld",drawer,&pixel,&val) == 3)

On simulera le Star Controller par un fichier à l'aide de la commande date.
Question: s'agit-il d'autre chose que du controleur ?


4 Voltage trop élevé

int DrawerSurvey(short *pDATA,...)
{
   ...
   SwitchOffPixel(...);
}

Question: à implémenter dans Task_Drawer_Monitoring.c ?


5 Ré-allumage des pixels

Il faut élaborer la liste des pixels éteints.
Tableau des pixels :

typedef struct 
{
  ...
  Drawer_HV_16_t           cntrl_ht_16;
  ...
} Slc_config_16;

SEXTERN Slc_config_16 Config[__NUMBER_OF_DRAWERS];

Réaction :

  • 4 à 6 pixels étends : étoiles (pas grave)
  • 6 à 120 pixels étends : étoile filante (pas grave)
  • > 120 : voiture ou éclairs (on stop l'acquisition)

question: à implémenter dans une nouvelle tâche du squeduler ?

Home Up

This document is also available in PDF and PostScript format.



2016-02-15