Exemplo n.º 1
0
static int aac_sensor_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos)
{
    struct sensor_device *dev;
    //sensors_vec_t vec[ID_MAX];
    int x=0,y=0,z=0,temp;
	char data[255],*curr;
    char bit;

    int event;

    int result;
    
    dev=&sensor_priv;

	event=wait_for_completion_timeout(&dev->data_comp,get_poll_time());
    result = aac_sensor_query(dev,event);  //get new data

    down(&sensor_data_mutex);

    curr=data;

    if(result == 0){
        if(event){
            bit=GET_BITS(dev->values[MMA_TILT],MMA_TILT_ALERT);
            if(!bit){
                bit=GET_BITS(dev->values[3],MMA_TILT_POLA);

               // board e2
              #if defined(CONFIG_BOARD_E2)  
                if(bit==POLA_LEFT){           
                    x=180;
                }else if(bit==POLA_RIGHT){
                    x=0;
                }else if(bit==POLA_UP){
                    x=270;
                }else if(bit==POLA_DOWN){
                    x=90;
                }else{
                    event=0;
                }
              #endif
                //board 3e
              #if defined(CONFIG_BOARD_E3)  
                if(bit==POLA_LEFT){          
                    x=0;
                }else if(bit==POLA_RIGHT){
                    x=180;
                }else if(bit==POLA_UP){
                    x=270;
                }else if(bit==POLA_DOWN){
                    x=90;
                }else{
                    event=0;
                }
              #endif               
                //board g0
              #if defined(CONFIG_BOARD_G0)||defined(CONFIG_BOARD_G0_3G)   
                if(bit==POLA_LEFT){           
                    x=90;
                }else if(bit==POLA_RIGHT){
                    x=270;
                }else if(bit==POLA_UP){
                    x=180;
                }else if(bit==POLA_DOWN){
                    x=0;
                }else{
                    event=0;
                }          
              #endif
                //board h0
              #if defined(CONFIG_BOARD_H0)    
                if(bit==POLA_LEFT){           
                    x=180;
                }else if(bit==POLA_RIGHT){
                    x=0;
                }else if(bit==POLA_UP){
                    x=90;
                }else if(bit==POLA_DOWN){
                    x=270;
                }else{
                    event=0;
                }          
              #endif              
                //board i0
              #if defined(CONFIG_BOARD_I0)||defined(CONFIG_BOARD_K0)
                if(bit==POLA_LEFT){           
                    x=270;
                }else if(bit==POLA_RIGHT){
                    x=90;
                }else if(bit==POLA_UP){
                    x=0;
                }else if(bit==POLA_DOWN){
                    x=180;
                }else{
                    event=0;
                }          
              #endif
                //board j0
              #if defined(CONFIG_BOARD_J0)||defined(CONFIG_BOARD_L0)
                if(bit==POLA_LEFT){           
                    x=270;
                }else if(bit==POLA_RIGHT){
                    x=90;
                }else if(bit==POLA_UP){
                    x=180;
                }else if(bit==POLA_DOWN){
                    x=0;
                }else{
                    event=0;
                }          
              #endif              
                if(x==dev->orientation){
                    event=0;
                }else{
                    dev->orientation=x;
                }
            }else{
                event=0;
            }
        }

        //ID_ACCELERATION
        if(event==0){
            x=dev->axis[0];
            y=dev->axis[1];
            z=dev->axis[2];

            //board e2
          #if defined(CONFIG_BOARD_E2)    
            temp=x;
            x=y;y=temp;z=-z;
          #endif

            //board e3
          #if defined(CONFIG_BOARD_E3)    
            temp=x;
            x=x;y=y;z=-z;
          #endif
            // board g0
          #if defined(CONFIG_BOARD_G0)||defined(CONFIG_BOARD_G0_3G)
            temp=x;
            x=y;y=temp;z=-z;
          #endif
            // board h0
          #if defined(CONFIG_BOARD_H0)
            temp=x;
            x=y;y=temp;z=-z;
          #endif            
          #if defined(CONFIG_BOARD_I0)||defined(CONFIG_BOARD_K0)
            temp=x;
            x=y;y=temp;z=-z;
          #endif 
          #if defined(CONFIG_BOARD_J0)||defined(CONFIG_BOARD_L0)
            temp=x;
            x=y;y=-temp;z=-z;
          #endif           
        	sprintf(curr,"%s:%d:%d:%d ",
        	    SENSER_NAME_AAC,
        	    x,y,z);
            curr+=strlen(curr);
        //ID_ORIENTATION    
        }else {
            y=z=0;
            sprintf(curr,"%s:%d:%d:%d ",
                SENSER_NAME_ORI,
                x,y,z);
                
            curr+=strlen(curr);
        }
        if(event){
            sensor_debug("event %d x=%d y=%d z=%d\n",event,x,y,z);
            sensor_debug("read data: %s (%d) x %d y %d z %d  filt 0x%x  status 0x%x\n",data,count,
                dev->axis[0],dev->axis[1],dev->axis[2],
                dev->values[MMA_TILT],
                dev->values[MMA_INTSU]);
            
        }
    }
    //time
	sprintf(curr,"sync:%lld",
	    time_to_ns());
  
	count=strlen(data);

	up(&sensor_data_mutex);
	
	if (copy_to_user(buf, data, count)) {
		return -EFAULT;
	}
	
	return count;
}
Exemplo n.º 2
0
uint64_t odp_time_to_ns(odp_time_t time)
{
	return time_to_ns(time);
}