void invocation(const ComType com, const uint8_t *data) {
	switch(((StandardMessage*)data)->header.fid) {
		case FID_SET_CONFIGURATION: {
			set_configuration(com, (SetConfiguration*)data);
			return;
		}

		case FID_GET_CONFIGURATION: {
			get_configuration(com, (GetConfiguration*)data);
			return;
		}

		case FID_SET_CALIBRATION: {
			set_calibration(com, (SetCalibration*)data);
			return;
		}

		case FID_GET_CALIBRATION: {
			get_calibration(com, (GetCalibration*)data);
			return;
		}

		default: {
			simple_invocation(com, data);
			break;
		}
	}

	if(((StandardMessage*)data)->header.fid > FID_LAST) {
		BA->com_return_error(data, sizeof(MessageHeader), MESSAGE_ERROR_CODE_NOT_SUPPORTED, com);
	}
}
Пример #2
0
Файл: ui.c Проект: russells/hc2
void ui_ctor(void)
{
	QActive_ctor((QActive*)(&ui), (QStateHandler)(&uiInitial));
	ui.ti = INVALIDTI;
	ui.cal = get_calibration();
	ui.deferredSignal = 0;
	ui.deferredParam = 0;
}
Пример #3
0
/* See http://www.pitt-pladdy.com/blog/_20110824-191017_0100_TEMPer_under_Linux_perl_with_Cacti/ */
static float raw_to_c(char *busport, int rawtemp)
{
	float temp_c = rawtemp * (125.0 / 32000.0);
	
	temper1_calibration cal = get_calibration(busport);
	temp_c = (temp_c * (cal.scale == 0 ? 1.0 : cal.scale)) + cal.offset;
	return temp_c;
}
Пример #4
0
void
Joystick::write(XMLWriter& out)
{
  out.start_section("joystick");
  out.write("name",   name);
  out.write("device", filename);
  
  { // write CalibrationData
    std::vector<CalibrationData> data = get_calibration();

    out.start_section("calibration");
    for(std::vector<CalibrationData>::iterator i = data.begin(); i != data.end(); ++i)
      {
        out.start_section("axis");
        //out.write("id",         i - data.begin());
        out.write("calibrate",  i->calibrate);
        out.write("center-min", i->center_min);
        out.write("center-max", i->center_max);
        out.write("range-min",  i->range_min);
        out.write("range-max",  i->range_max);
        out.write("invert",     i->invert);
        out.end_section("axis");
      }
    out.end_section("calibration");
  }

  {
    std::vector<int> mapping = get_axis_mapping();
    out.start_section("axis-map");
    for(std::vector<int>::iterator i = mapping.begin(); i != mapping.end(); ++i)
      {
        out.write("axis", abs2str(*i));
      }
    out.end_section("axis-map");
  }

  {
    std::vector<int> mapping = get_button_mapping();
    out.start_section("button-map");
    for(std::vector<int>::iterator i = mapping.begin(); i != mapping.end(); ++i)
      {
        out.write("button", btn2str(*i));
      }   
    out.end_section("button-map");
  }

  out.end_section("joystick");
}
Пример #5
0
void
Joystick::correct_calibration(const std::vector<int>& mapping_old, const std::vector<int>& mapping_new)
{
  int axes[ABS_MAX + 1]; // axes[name] -> old_idx
  for(std::vector<int>::const_iterator i = mapping_old.begin(); i != mapping_old.end(); ++i)
    {
      axes[*i] = i - mapping_old.begin();
    }

  std::vector<CalibrationData> callib_old = get_calibration();
  std::vector<CalibrationData> callib_new;
  for(std::vector<int>::const_iterator i = mapping_new.begin(); i != mapping_new.end(); ++i)
    {
      callib_new.push_back(callib_old[axes[*i]]);
    }
  
  set_calibration(callib_new);
}
Пример #6
0
Joystick::Joystick(const std::string& filename_)
  : filename(filename_)
{
  if ((fd = open(filename.c_str(), O_RDONLY)) < 0)
    {
      std::ostringstream str;
      str << filename << ": " << strerror(errno);
      throw std::runtime_error(str.str());
    }
  else
    {
      // ok
      uint8_t num_axis   = 0;
      uint8_t num_button = 0;
      ioctl(fd, JSIOCGAXES,    &num_axis);
      ioctl(fd, JSIOCGBUTTONS, &num_button);
      axis_count   = num_axis;
      button_count = num_button;

      // Get Name 
      char name_c_str[1024];
      if (ioctl(fd, JSIOCGNAME(sizeof(name_c_str)), name_c_str) < 0)
        {
          std::ostringstream str;
          str << filename << ": " << strerror(errno);
          throw std::runtime_error(str.str());          
        }
      else
        {
          orig_name = name_c_str;
          try {
            name = Glib::convert_with_fallback(name_c_str, "UTF-8", "ISO-8859-1");
          } catch(Glib::ConvertError& err) {
            std::cout << err.what() << std::endl;
          }
        }

      axis_state.resize(axis_count);
    }

  orig_calibration_data = get_calibration();
  
  connection = Glib::signal_io().connect(sigc::mem_fun(this, &Joystick::on_in), fd, Glib::IO_IN);
}
Пример #7
0
void _ExecCalibration(void) {
  int x,y;
  uint16_t data[6];
  uint16_t get_data[6];
  int ax_Phys[2],ay_Phys[2];
/* calculate log. Positions */
  int ax[2] = { 15, LCD_XSIZE -1-15};
//  const int ay[2] = { 15, LCD_YSIZE-1-15};
  int ay[2] = { LCD_YSIZE-1-15, 15};
  GUI_TOUCH_SetDefaultCalibration();
/* _Calibrate upper left */
  GUI_SetBkColor(GUI_RED);  
  GUI_Clear();
  GUI_SetColor(GUI_WHITE);  GUI_FillCircle(ax[0], ay[0], 10);
  GUI_SetColor(GUI_RED);    GUI_FillCircle(ax[0], ay[0], 5);
  GUI_SetColor(GUI_WHITE);
  GUI_DispStringAt("Press here", ax[0]+20, ay[0]);
  do {

#if 0
    GUI_PID_STATE State;
    GUI_TOUCH_GetState(&State);
	 if (State.Pressed) {
#endif

#if 1
  x = TPReadX();
  y = TPReadY();
  if ((x>=3700)&&(y>=3400)&&(x<3800)&&(y<3600)) {

#endif
      ax_Phys[0] = GUI_TOUCH_GetxPhys();
      ay_Phys[0] = GUI_TOUCH_GetyPhys();
      break;
    }
    GUI_Delay (3000);
  } while (1);
/* Tell user to release */
  GUI_Clear();
  GUI_DispStringAt("OK", ax[0]+20, ay[0]);
  do {
    GUI_PID_STATE State;
    GUI_TOUCH_GetState(&State);
    if (State.Pressed == 0) {
      break;
    }
    GUI_Delay (100);
  } while (1);
/* _Calibrate lower right */
  GUI_SetBkColor(GUI_RED);  
  GUI_Clear();
  GUI_SetColor(GUI_WHITE);  GUI_FillCircle(ax[1], ay[1], 10);
  GUI_SetColor(GUI_RED);    GUI_FillCircle(ax[1], ay[1], 5);
  GUI_SetColor(GUI_WHITE);
  GUI_SetTextAlign(GUI_TA_RIGHT);
  GUI_DispStringAt("Press here", ax[1]-20, ay[1]);
  do {

#if 1
  x = TPReadX();
  y = TPReadY();
  if ((y>450)&&(y<620)&&(x>350)&&(x<450)) {
#endif

#if 0
	GUI_PID_STATE State;
  	GUI_TOUCH_GetState(&State);
	if (State.Pressed) {
#endif

      ax_Phys[1] = GUI_TOUCH_GetxPhys();
      ay_Phys[1] = GUI_TOUCH_GetyPhys();
      break;
    }
    GUI_Delay (3000);
  } while (1);
  GUI_TOUCH_Calibrate(GUI_COORD_X, ax[0], ax[1], ax_Phys[0], ax_Phys[1]);
  GUI_TOUCH_Calibrate(GUI_COORD_Y, ay[0], ay[1], ay_Phys[0], ay_Phys[1]);
  { /* calculate and display values for configuration file */
    int x0, x1;
    int y0, y1;
    GUI_Clear();
    _Calibrate(GUI_COORD_X, ax[0], ax[1], ax_Phys[0], ax_Phys[1], &x0, &x1);
    _Calibrate(GUI_COORD_Y, ay[0], ay[1], ay_Phys[0], ay_Phys[1], &y0, &y1);
    GUI_DispStringAt("x0: ", 0, 0); GUI_DispDec(x0, 4); GUI_DispNextLine();
    GUI_DispString  ("x1: ");       GUI_DispDec(x1, 4); GUI_DispNextLine();
    GUI_DispString  ("y0: ");       GUI_DispDec(y0, 4); GUI_DispNextLine();
    GUI_DispString  ("y1: ");       GUI_DispDec(y1, 4); GUI_DispNextLine();
    GUI_DispString  ("Please touch display to continue...");
    GUI_Delay(1000);

	data[0]=  CAL_READY;
	data[1]= ax_Phys[0];
	data[2]= ay_Phys[0];
	data[3]= ax_Phys[1];
	data[4]= ay_Phys[1];

	#if 1
	save_calibrate_to_flash(data);
	get_calibrate_data(get_data);

	GUI_DispStringAt("x0: ", 100, 0); GUI_DispDec(get_data[1], 4); GUI_DispNextLine();
    GUI_DispString  ("x1: ");       GUI_DispDec(get_data[2], 4); GUI_DispNextLine();
    GUI_DispString  ("y0: ");       GUI_DispDec(get_data[3], 4); GUI_DispNextLine();
    GUI_DispString  ("y1: ");       GUI_DispDec(get_data[4], 4); GUI_DispNextLine();
	GUI_DispString  ("state: ");       GUI_DispDec(get_data[0], 4); GUI_DispNextLine();
	#endif

    do {
      GUI_PID_STATE State;
      GUI_TOUCH_GetState(&State);
      if (State.Pressed)
      break;
      GUI_Delay (10);
    } while (1);
  }
}



int run_cal(void)
{
  if(get_calibrate_state()== CAL_READY)
  {
  	get_calibration();
  }else{
	#if 1
  	 _ExecCalibration();
	#endif	

	#if 0
	Calibration();
	#endif
  }
}

int get_calibration(void)
{
  uint16_t cal_data[5];
  int ax_Phys[2],ay_Phys[2];
  int ax[2] = { 15, LCD_XSIZE -1-15};
  int ay[2] = { LCD_YSIZE-1-15, 15};

  get_calibrate_data(cal_data);

  ax_Phys[0] = cal_data[1];
  ay_Phys[0] = cal_data[2];
  
  ax_Phys[1] = cal_data[3];
  ay_Phys[1] = cal_data[4];
  
  GUI_TOUCH_Calibrate(GUI_COORD_X, ax[0], ax[1], ax_Phys[0], ax_Phys[1]);
  GUI_TOUCH_Calibrate(GUI_COORD_Y, ay[0], ay[1], ay_Phys[0], ay_Phys[1]);
}


#if 0			

void myAD2XY( int *adx , int *ady ){
 float f_dat;
 int dat1;

 f_dat = (float)(*ady - admy)/(float)(*adx - admx);
 if(f_dat>0){
  if( *adx>admx && admk[2] >=f_dat) dat1 = 1;
  else if( *adx>admx && admk[2] < f_dat ) dat1 =2;//2
  else if( *adx<admx && admk[0] >=f_dat ) dat1 =0;
  else if( *adx<admx && admk[0] < f_dat ) dat1 =3;//0
  else{ dat1 =0; }//*adx =0;*ady =0; }
 }else{
  if( *adx>admx && admk[1] >=f_dat) dat1 = 0;
  else if( *adx>admx && admk[1] < f_dat ) dat1 =1;//1
  else if( *adx<admx && admk[3] >=f_dat ) dat1 =3;
  else if( *adx<admx && admk[3] < f_dat ) dat1 =2;//3
  else{ dat1 =0; }//*adx =0;*ady =0; }
 }
 *adx = (int)(Factors[dat1][0].a*(*adx)+Factors[dat1][0].b*(*ady)+Factors[dat1][0].c); 
 *ady = (int)(Factors[dat1][1].a*(*adx)+Factors[dat1][1].b*(*ady)+Factors[dat1][1].c);
}
#include "headers/get_calibration.h"

int get_calibration_factor()
{

	std::string file_path = "/home/josh/Dropbox/Stony\ Brook\ Research\ Team\ Folder/LabVIEW/DATA_Gaussmeter/DataFile_160726_133846.txt";

	double calibration_factor = get_calibration(file_path);
	if (calibration_factor == 0) 
	{
		cerr << "Calibration Not Found" << endl;
		return -1;
	}

	cout << endl << "The Calibration Factor for this setup is: " << TMath::Abs(calibration_factor) << " mT/mV" << endl;
	cout << "Consult the shunt resistor you are using for the mV<->A conversion factor (most commonly 1:1)" << endl;

	return 0;
}
void test_above_bounds(void)
{
	calibration_set_data(calibration_data);
	TEST_ASSERT_EQUAL(0, get_calibration(201));
}
void test_last_point(void)
{
	calibration_set_data(calibration_data);
	TEST_ASSERT_EQUAL(400, get_calibration(200));
}
void test_interpolation(void)
{
	calibration_set_data(calibration_data);
	TEST_ASSERT_EQUAL(142, get_calibration(42));
}
void test_middle_point(void)
{
	calibration_set_data(calibration_data);
	TEST_ASSERT_EQUAL(200, get_calibration(100));
}
void test_first_point(void)
{
	calibration_set_data(calibration_data);
	TEST_ASSERT_EQUAL(100, get_calibration(0));
}
void test_below_bounds(void)
{
	calibration_set_data(calibration_data);
	TEST_ASSERT_EQUAL(0, get_calibration(-10));
}
void test_empty(void)
{
	calibration_set_data(calibration_empty_data);
	TEST_ASSERT_EQUAL(0, get_calibration(10));
}