コード例 #1
0
ファイル: TmsiAmplifier.cpp プロジェクト: jampekka/trajexp
TmsiAmplifier::TmsiAmplifier(const char * address, int type, const char * r_address, const char* dump_file /* = NULL */) {
    //printf("TmsiAmplifier writing to: %s\n", address);
    //if (r_address!=NULL)
    //    printf(" reading from: %s",r_address);
    //if (dump_file!=NULL)
    //    printf(" dumping amplifier output to: %s",dump_file);
    //printf("\n");
    if (tmsiAmplifierInstance!=NULL)
        fprintf(stderr,"Warning: multiple tmsiAmplifier instances!!\n");
    tmsiAmplifierInstance = this;
    dev.Channel = NULL;
    vli.SampDiv = NULL;
    channel_data = NULL;
    channel_data_index=0;
    digi_channels=0;
    read_errors=0;
    mode=type;
    if (type == USB_AMPLIFIER)
        fd = connect_usb(address);
    else
        fd = connect_bluetooth(address);
    if (r_address != NULL)
        read_fd = open(r_address, O_RDONLY);
    else
        read_fd = fd;
    if (dump_file!=NULL)
        dump_fd = open(dump_file, O_WRONLY|O_CREAT|O_TRUNC);
    else
        dump_fd=-1;
    debug("Descriptors: %d %d", fd, read_fd);
    if (fd <= 0) {
        perror("DEVICE OPEN ERROR");
        exit(-1);
        return;
    }
    refreshInfo();

}
コード例 #2
0
ファイル: picAPI.cpp プロジェクト: ArchangeGabriel/mac-gyver
//------------------------------------------------------------------------------
void* pic1_handle_msg(void *)
{
  if(!WANT_PIC1)
    while(true) usleep(100000);

  char *_msg;
  
  while(true)
  {
    if(connect_usb(PIC1)<0)
    {
      fprintf(stderr,"Connection failed PIC1, retrying...\n");
      sleep(1);
      continue;
    }     
    if(callbackOnReconnectPIC1)
      callbackOnReconnectPIC1();
    
    fprintf(stderr,"Listen to PIC1...\n");  fflush(stdout);  
    
    while((_msg=read_usb(PIC1)))
    {
      if(_msg==NULL)
        break;
      
      //printf("Recv PIC1: %d\n",get_msg_type(_msg));
      switch(get_msg_type(_msg))
      {
        case EMPTY_MSG:
        #ifdef SIMULATION            
        fprintf(stderr,"<picInterface.cpp> PIC1: Connexion réinitialisée.\n");
        fflush(stdout); 
        if(callbackRecvReset)
          callbackRecvReset();
        #endif
        break;      
        case CODER:   
        #ifdef SIMULATION
        picSendInfo();
        #endif        
        if(callbackRecvCoder)
        {
          MSG_INT2_t *msg = (MSG_INT2_t *)_msg;
          #ifdef SIMULATION
          callbackRecvCoder(msg->value1, msg->value2);
          #else
          callbackRecvCoder(msg->value2, -msg->value1);
          #endif
        }
        break;
        case PRINTF:
        {
          MSG_INT1_t *msg = (MSG_INT1_t *)_msg;          
          printf("from pic %d: %d\n",1,msg->value);
        }
        break;        
        default:
        fprintf(stderr,"<picInterface.cpp> PIC1: Unknown message type %d.\n",get_msg_type(_msg));
        fflush(stdout);            
        break;      
      }   
      delete _msg;    
    }
    fprintf(stderr,"Connection closed PIC1...\n");
    fflush(stdout);
    usleep(10000);
    break;
  }
  return NULL;
}
コード例 #3
0
ファイル: picAPI.cpp プロジェクト: ArchangeGabriel/mac-gyver
//------------------------------------------------------------------------------
void* pic2_handle_msg(void *)
{  
  if(!WANT_PIC2)
    while(true) usleep(100000);
  
  char *_msg; 

  while(true)
  {
    if(connect_usb(PIC2)<0)
    {
      fprintf(stderr,"Connection failed PIC2, retrying...\n");
      sleep(1);
      continue;
    }
       
    picBegin();

    if(callbackOnReconnectPIC2)
      callbackOnReconnectPIC2();
    
    fprintf(stderr,"Listen to PIC2...\n");  fflush(stdout); 
            
    while((_msg=read_usb(PIC2)))
    {
      if(_msg==NULL)
        break;
      
      //printf("Recv PIC2: %d\n",get_msg_type(_msg));     
      switch(get_msg_type(_msg))
      {
        case EMPTY_MSG:
        #ifdef SIMULATION        
        
        fprintf(stderr,"<picInterface.cpp> PIC2: Connexion réinitialisée.\n");
        fflush(stdout); 
        if(callbackRecvReset)
          callbackRecvReset();
        #endif
        break;
        #ifdef SIMULATION
        case WEBCAM:
        {
          MSG_INT1_t *msg = (MSG_INT1_t *)_msg;            
          int size = msg->value;
          int *ptr = &msg->value;
          ptr++;
          *((char**)webcam_data) = new char[size];
          memcpy(*((char**)webcam_data),ptr,size);         
          pthread_mutex_unlock(mut_webcam);      
          mut_webcam = NULL;             
        }
        break;
        #endif
        case BEGIN:
        break;
        case JACK:
        {
          callbackOnJack();
          #ifdef SIMULATION
          int buf = JACK;
          if(write_usb(PIC2, &buf, sizeof(int))<0) break;
          #else
          unsigned char buf = JACK;
          if(write_usb(PIC2, &buf, sizeof(buf))<0) break;
          #endif          
        }
        break;  
        case PRINTF:
        {
          MSG_INT1_t *msg = (MSG_INT1_t *)_msg;          
          printf("from pic %d: %d\n",2,msg->value);
        }
        break;
        case VPOS:
        if(mut_vpos)
        {
          if(true /*msg->msg_id == msg_id_vpos*/)
          {            
            msg_id_vpos = 0;
            pthread_mutex_unlock(mut_vpos);              
            mut_vpos = NULL;              
          }
        }
        else
          fprintf(stderr,"<picInterface.cpp> PIC2: Unmatched ACK VPOS.\n");
          fflush(stdout);             
        break;
        case HPOS:
        if(mut_hpos)
        {            
          if(true /*msg->msg_id == msg_id_hpos*/)
          {
            msg_id_hpos = 0;
            pthread_mutex_unlock(mut_hpos);              
            mut_hpos = NULL;              
          } 
        }
        else
          fprintf(stderr,"<picInterface.cpp> PIC2: Unmatched ACK HPOS.\n");
          fflush(stdout);             
        break;
        case CLAMP:
        /*if(mut_clamp)
        {            
          if(msg->msg_id == msg_id_clamp)
          {    
            msg_id_clamp = 0;
            pthread_mutex_unlock(mut_clamp);              
            mut_clamp = NULL;            
          }   
        }
        else
          printf("<picInterface.cpp> PIC2: Unmatched ACK CLAMP.\n");
          fflush(stdout); */            
        break;                            
        case DIST:
        if(callbackRecvDistCaptors)
        {
          MSG_INTn_t *msg = (MSG_INTn_t *)_msg;
          float *tab;
          if(msg->n == 0)
            tab = NULL;
          else
            tab = new float[msg->n];
          int *values = &msg->n;
          values++;         
          for(int i=0; i<msg->n; i++)
          {
            tab[i] = COEFF_A_DIST * pow(COEFF_B_DIST, ((double)(values[i]>>6)));
            if(tab[i]<0.) tab[i] = 0.;
          }
          #ifdef SIMULATION
          float tmp = tab[1];
          values[1] = tab[2];
          values[2] = tmp;  
          #endif
          
          callbackRecvDistCaptors(msg->n, tab);
          
          if(tab != NULL)
            delete tab;
        }
        break;
        case COUL:
        if(callbackRecvCoulCaptors)
        {
          MSG_INTn_t *msg = (MSG_INTn_t *)_msg;
          float *tab = new float[msg->n];
          int *values = &msg->n;
          values++;                      
          for(int i=0; i<msg->n; i++)
            tab[i] = ((float)values[i]);
          callbackRecvCoulCaptors(msg->n, tab);
          delete tab;
        }
        break;        
        
        default:
        fprintf(stderr,"<picInterface.cpp> PIC2: Unknown message type %d.\n",get_msg_type(_msg));
        fflush(stdout);            
        break;      
      }
      delete _msg;        
    }
    fprintf(stderr,"Connection closed PIC2...\n");
    fflush(stdout);
    usleep(10000);  
    break;  
  }
  return NULL;
}