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); } }
void ui_ctor(void) { QActive_ctor((QActive*)(&ui), (QStateHandler)(&uiInitial)); ui.ti = INVALIDTI; ui.cal = get_calibration(); ui.deferredSignal = 0; ui.deferredParam = 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; }
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"); }
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); }
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); }
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)); }