#include "debug_tools.h" #include "IQmathLib.h" static int getDebugVar(DebugVar_t *var, long *int_var, float *float_var); static int convertDebugVarToIQx(DebugVar_t *var, long *ret_var, DebugVarIQType_t iq_type_final); DebugVarIQType_t dbg_type = t_iq24; long Debug_ReadVar(DebugVar_t *var, DebugVarIQType_t iq_type_final) { long tmp_var; if((var->ptr_type == pt_struct) || (var->ptr_type == pt_union) || (var->ptr_type == pt_unknown)) return; convertDebugVarToIQx(var, &tmp_var, dbg_type); return tmp_var; } static int convertDebugVarToIQx(DebugVar_t *var, long *ret_var, DebugVarIQType_t iq_type_final) { long iq_numb, iq_united, iq_final; float float_numb; if(getDebugVar(var, &iq_numb, &float_numb) == 1) return 1; // приведение к одному IQ switch(var->iq_type) { case t_iq_none: if(var->ptr_type == pt_float) { iq_united = _IQ(float_numb); } else { iq_united = _IQ(iq_numb); } break; case t_iq1: iq_united = _IQ1toIQ(iq_numb); break; case t_iq2: iq_united = _IQ2toIQ(iq_numb); break; case t_iq3: iq_united = _IQ3toIQ(iq_numb); break; case t_iq4: iq_united = _IQ4toIQ(iq_numb); break; case t_iq5: iq_united = _IQ5toIQ(iq_numb); break; case t_iq6: iq_united = _IQ6toIQ(iq_numb); break; case t_iq7: iq_united = _IQ7toIQ(iq_numb); break; case t_iq8: iq_united = _IQ8toIQ(iq_numb); break; case t_iq9: iq_united = _IQ9toIQ(iq_numb); break; case t_iq10: iq_united = _IQ10toIQ(iq_numb); break; case t_iq11: iq_united = _IQ11toIQ(iq_numb); break; case t_iq12: iq_united = _IQ12toIQ(iq_numb); break; case t_iq13: iq_united = _IQ13toIQ(iq_numb); break; case t_iq14: iq_united = _IQ14toIQ(iq_numb); break; case t_iq15: iq_united = _IQ15toIQ(iq_numb); break; case t_iq16: iq_united = _IQ16toIQ(iq_numb); break; case t_iq17: iq_united = _IQ17toIQ(iq_numb); break; case t_iq18: iq_united = _IQ18toIQ(iq_numb); break; case t_iq19: iq_united = _IQ19toIQ(iq_numb); break; case t_iq20: iq_united = _IQ20toIQ(iq_numb); break; case t_iq21: iq_united = _IQ21toIQ(iq_numb); break; case t_iq22: iq_united = _IQ22toIQ(iq_numb); break; case t_iq23: iq_united = _IQ23toIQ(iq_numb); break; case t_iq24: iq_united = _IQ24toIQ(iq_numb); break; case t_iq25: iq_united = _IQ25toIQ(iq_numb); break; case t_iq26: iq_united = _IQ26toIQ(iq_numb); break; case t_iq27: iq_united = _IQ27toIQ(iq_numb); break; case t_iq28: iq_united = _IQ28toIQ(iq_numb); break; case t_iq29: iq_united = _IQ29toIQ(iq_numb); break; case t_iq30: iq_united = _IQ30toIQ(iq_numb); break; } // приведение общего IQ к запрашиваемому switch(iq_type_final) { case t_iq_none: iq_final = (int)_IQtoF(iq_united); break; case t_iq1: iq_final = _IQtoIQ1(iq_united); break; case t_iq2: iq_final = _IQtoIQ2(iq_united); break; case t_iq3: iq_final = _IQtoIQ3(iq_united); break; case t_iq4: iq_final = _IQtoIQ4(iq_united); break; case t_iq5: iq_final = _IQtoIQ5(iq_united); break; case t_iq6: iq_final = _IQtoIQ6(iq_united); break; case t_iq7: iq_final = _IQtoIQ7(iq_united); break; case t_iq8: iq_final = _IQtoIQ8(iq_united); break; case t_iq9: iq_final = _IQtoIQ9(iq_united); break; case t_iq10: iq_final = _IQtoIQ10(iq_united); break; case t_iq11: iq_final = _IQtoIQ11(iq_united); break; case t_iq12: iq_final = _IQtoIQ12(iq_united); break; case t_iq13: iq_final = _IQtoIQ13(iq_united); break; case t_iq14: iq_final = _IQtoIQ14(iq_united); break; case t_iq15: iq_final = _IQtoIQ15(iq_united); break; case t_iq16: iq_final = _IQtoIQ16(iq_united); break; case t_iq17: iq_final = _IQtoIQ17(iq_united); break; case t_iq18: iq_final = _IQtoIQ18(iq_united); break; case t_iq19: iq_final = _IQtoIQ19(iq_united); break; case t_iq20: iq_final = _IQtoIQ20(iq_united); break; case t_iq21: iq_final = _IQtoIQ21(iq_united); break; case t_iq22: iq_final = _IQtoIQ22(iq_united); break; case t_iq23: iq_final = _IQtoIQ23(iq_united); break; case t_iq24: iq_final = _IQtoIQ24(iq_united); break; case t_iq25: iq_final = _IQtoIQ25(iq_united); break; case t_iq26: iq_final = _IQtoIQ26(iq_united); break; case t_iq27: iq_final = _IQtoIQ27(iq_united); break; case t_iq28: iq_final = _IQtoIQ28(iq_united); break; case t_iq29: iq_final = _IQtoIQ29(iq_united); break; case t_iq30: iq_final = _IQtoIQ30(iq_united); break; } *ret_var = iq_final; return 0; } static int getDebugVar(DebugVar_t *var, long *int_var, float *float_var) { if (!var || !int_var || !float_var) return 1; // ошибка: null указатель switch (var->ptr_type) { case pt_int8: // signed char *int_var = *((signed char *)var->Ptr); break; case pt_int16: // int *int_var = *((int *)var->Ptr); break; case pt_int32: // long *int_var = *((long *)var->Ptr); break; case pt_uint8: // unsigned char *int_var = *((unsigned char *)var->Ptr); break; case pt_uint16: // unsigned int *int_var = *((unsigned int *)var->Ptr); break; case pt_uint32: // unsigned long *int_var = *((unsigned long *)var->Ptr); break; case pt_float: // float *float_var = *((float *)var->Ptr); break; // для указателей и массивов не поддерживается чтение // case pt_ptr_int8: // case pt_ptr_int16: // case pt_ptr_int32: // case pt_ptr_uint8: // case pt_ptr_uint16: // case pt_ptr_uint32: // case pt_arr_int8: // case pt_arr_int16: // case pt_arr_int32: // case pt_arr_uint8: // case pt_arr_uint16: // case pt_arr_uint32: default: return 1; } return 0; // успех }