void menuGeneralDiagAna(uint8_t event) { SIMPLE_MENU(STR_MENUANA, menuTabGeneral, e_Ana, 1); STICK_SCROLL_DISABLE(); for (int i=0; i<NUM_STICKS+NUM_POTS; i++) { #if (NUM_STICKS+NUM_POTS) > 9 coord_t y = MENU_HEADER_HEIGHT + 1 + (i/3)*FH; const uint8_t x_coord[] = {0, 70, 154}; uint8_t x = x_coord[i%3]; lcd_outdezNAtt(x, y, i+1, LEADING0|LEFT, 2); lcd_putc(x+2*FW-2, y, ':'); #else coord_t y = MENU_HEADER_HEIGHT + 1 + (i/2)*FH; uint8_t x = i&1 ? 64+5 : 0; putsStrIdx(x, y, PSTR("A"), i+1); lcd_putc(lcdNextPos, y, ':'); #endif lcd_outhex4(x+3*FW-1, y, anaIn(i)); lcd_outdez8(x+10*FW-1, y, (int16_t)calibratedStick[CONVERT_MODE(i)]*25/256); } lcd_putsLeft(MENU_HEADER_HEIGHT+1+5*FH, STR_BATT_CALIB); static int32_t adcBatt; adcBatt = ((adcBatt * 7) + anaIn(TX_VOLTAGE)) / 8; uint32_t batCalV = (adcBatt + (adcBatt*g_eeGeneral.txVoltageCalibration)/128) * BATT_SCALE; batCalV >>= 11; batCalV += 2; // because of the diode putsVolts(LEN_CALIB_FIELDS*FW+4*FW, MENU_HEADER_HEIGHT+1+5*FH, batCalV, s_editMode > 0 ? BLINK|INVERS : INVERS); if (s_editMode > 0) CHECK_INCDEC_GENVAR(event, g_eeGeneral.txVoltageCalibration, -127, 127); }
void menuGeneralDiagAna(uint8_t event) { #if defined(TX_CAPACITY_MEASUREMENT) #define ANAS_ITEMS_COUNT 4 #else #define ANAS_ITEMS_COUNT 2 #endif SIMPLE_MENU(STR_MENUANA, menuTabGeneral, e_Ana, ANAS_ITEMS_COUNT); STICK_SCROLL_DISABLE(); for (uint8_t i=0; i<NUM_STICKS+NUM_POTS; i++) { #if (NUM_STICKS+NUM_POTS) > 9 coord_t y = MENU_HEADER_HEIGHT + 1 + (i/3)*FH; const uint8_t x_coord[] = {0, 70, 154}; uint8_t x = x_coord[i%3]; lcdDrawNumberNAtt(x, y, i+1, LEADING0|LEFT, 2); lcdDrawChar(x+2*FW-2, y, ':'); #else coord_t y = MENU_HEADER_HEIGHT + 1 + (i/2)*FH; uint8_t x = i&1 ? 64+5 : 0; lcdDrawStringWithIndex(x, y, PSTR("A"), i+1); lcdDrawChar(lcdNextPos, y, ':'); #endif lcd_outhex4(x+3*FW-1, y, anaIn(i)); lcd_outdez8(x+10*FW-1, y, (int16_t)calibratedStick[CONVERT_MODE(i)]*25/256); } // Display raw BandGap result (debug) lcdDrawText(64+5, MENU_HEADER_HEIGHT+1+3*FH, STR_BG); lcdDrawNumberAttUnit(64+5+6*FW-3, 1+4*FH, BandGap, 0); #if defined(PCBGRUVIN9X) lcdDrawTextLeft(6*FH-2, STR_BATT_CALIB); // Gruvin wants 2 decimal places and instant update of volts calib field when button pressed static uint16_t adcBatt; adcBatt = ((adcBatt * 7) + anaIn(TX_VOLTAGE)) / 8; // running average, sourced directly (to avoid unending debate :P) uint32_t batCalV = ((uint32_t)adcBatt*1390 + (10*(int32_t)adcBatt*g_eeGeneral.txVoltageCalibration)/8) / BandGap; lcdDrawNumberNAtt(LEN_CALIB_FIELDS*FW+4*FW, 6*FH-2, batCalV, PREC2|(menuVerticalPosition==1 ? INVERS : 0)); #else lcdDrawTextLeft(6*FH-2, STR_BATT_CALIB); lcdPutsVolts(LEN_CALIB_FIELDS*FW+4*FW, 6*FH-2, g_vbat100mV, (menuVerticalPosition==1 ? INVERS : 0)); #endif if (menuVerticalPosition==1) CHECK_INCDEC_GENVAR(event, g_eeGeneral.txVoltageCalibration, -127, 127); #if defined(TX_CAPACITY_MEASUREMENT) lcdDrawTextLeft(6*FH+1, STR_CURRENT_CALIB); lcdPutsValueWithUnit(LEN_CALIB_FIELDS*FW+4*FW, 6*FH+1, getCurrent(), UNIT_MILLIAMPS, (menuVerticalPosition==2 ? INVERS : 0)) ; if (menuVerticalPosition==2) CHECK_INCDEC_GENVAR(event, g_eeGeneral.txCurrentCalibration, -49, 49); #endif }
void menuProcStatistic2(uint8_t event) { TITLE("STAT2"); switch(event) { case EVT_KEY_FIRST(KEY_MENU): g_tmr1Latency_min = 0xff; g_tmr1Latency_max = 0; g_timeMain = 0; // g_time_per10 = 0; beepKey(); break; case EVT_KEY_FIRST(KEY_DOWN): chainMenu(menuProcStatistic); break; case EVT_KEY_FIRST(KEY_UP): case EVT_KEY_FIRST(KEY_EXIT): chainMenu(menuMainView); break; } lcd_puts_P( 0*FW, 1*FH, PSTR("tmr1Lat max us")); lcd_outdez8(15*FW , 1*FH, g_tmr1Latency_max/2 ); lcd_puts_P( 0*FW, 2*FH, PSTR("tmr1Lat min us")); lcd_outdez8(15*FW , 2*FH, g_tmr1Latency_min/2 ); lcd_puts_P( 0*FW, 3*FH, PSTR("tmr1 Jitter us")); lcd_outdez8(15*FW , 3*FH, (g_tmr1Latency_max - g_tmr1Latency_min) /2 ); lcd_puts_P( 0*FW, 4*FH, PSTR("tmain max ms")); lcd_outdezAtt(15*FW, 4*FH, (g_timeMain*100)/16, PREC2); lcd_puts_P( 0*FW, 5*FH, PSTR("t10ms us")); lcd_outdez8(15*FW , 5*FH, g_time_per10/2 ); #ifndef SIMU lcd_puts_P( 0*FW, 6*FH, PSTR("Free Stack min b")); lcd_outdezAtt(18*FW-1, 6*FH, stack_free() ) ; #endif lcd_puts_P( 3*FW, 7*FH, PSTR("[MENU] to reset")); }
void menuGeneralVersion(uint8_t event) { SIMPLE_MENU(STR_MENUVERSION, menuTabDiag, e_Vers, 1); lcd_putsLeft(2*FH, stamp1); lcd_putsLeft(3*FH, stamp2); lcd_putsLeft(4*FH, stamp3); #if defined(PCBSKY9X) && !defined(REVA) if (Coproc_valid == 1) { lcd_putsLeft(5*FH, PSTR("CoPr:")); lcd_outdez8(10*FW, 5*FH, Coproc_read); } else { lcd_putsLeft(5*FH, PSTR("CoPr: ---")); } #endif lcd_putsLeft(7*FH, eeprom_stamp); }
void menuGeneralDiagAna(uint8_t event) { #if defined(PCBSKY9X) && !defined(REVA) #define ANAS_ITEMS_COUNT 4 #elif defined(PCBSKY9X) #define ANAS_ITEMS_COUNT 3 #else #define ANAS_ITEMS_COUNT 2 #endif SIMPLE_MENU(STR_MENUANA, menuTabDiag, e_Ana, ANAS_ITEMS_COUNT); STICK_SCROLL_DISABLE(); for (uint8_t i=0; i<NUM_STICKS+NUM_POTS; i++) { uint8_t y = 1+FH+(i/2)*FH; uint8_t x = i&1 ? 64+5 : 0; putsStrIdx(x, y, PSTR("A"), i+1); lcd_putc(x+2*FWNUM, y, ':'); lcd_outhex4(x+3*FW-1, y, anaIn(i)); lcd_outdez8(x+10*FW-1, y, (int16_t)calibratedStick[CONVERT_MODE(i+1)-1]*25/256); } #if !defined(CPUARM) // Display raw BandGap result (debug) lcd_puts(64+5, 1+4*FH, STR_BG); lcd_outdezAtt(64+5+6*FW-3, 1+4*FH, BandGap, 0); #endif #if defined(PCBTARANIS) lcd_putsLeft(6*FH+1, STR_BATT_CALIB); static int32_t adcBatt; adcBatt = ((adcBatt * 7) + anaIn(8)) / 8; uint32_t batCalV = (adcBatt + (adcBatt*g_eeGeneral.vBatCalib)/128) * BATT_SCALE; batCalV >>= 11; batCalV += 2; // because of the diode putsVolts(LEN_CALIB_FIELDS*FW+4*FW, 6*FH+1, batCalV, (m_posVert==1 ? INVERS : 0)); #elif defined(PCBSKY9X) lcd_putsLeft(5*FH+1, STR_BATT_CALIB); static int32_t adcBatt; adcBatt = ((adcBatt * 7) + anaIn(7)) / 8; uint32_t batCalV = (adcBatt + adcBatt*(g_eeGeneral.vBatCalib)/128) * 4191; batCalV /= 55296; putsVolts(LEN_CALIB_FIELDS*FW+4*FW, 5*FH+1, batCalV, (m_posVert==1 ? INVERS : 0)); #elif defined(PCBGRUVIN9X) lcd_putsLeft(6*FH-2, STR_BATT_CALIB); // Gruvin wants 2 decimal places and instant update of volts calib field when button pressed static uint16_t adcBatt; adcBatt = ((adcBatt * 7) + anaIn(7)) / 8; // running average, sourced directly (to avoid unending debate :P) uint32_t batCalV = ((uint32_t)adcBatt*1390 + (10*(int32_t)adcBatt*g_eeGeneral.vBatCalib)/8) / BandGap; lcd_outdezNAtt(LEN_CALIB_FIELDS*FW+4*FW, 6*FH-2, batCalV, PREC2|(m_posVert==1 ? INVERS : 0)); #else lcd_putsLeft(6*FH-2, STR_BATT_CALIB); putsVolts(LEN_CALIB_FIELDS*FW+4*FW, 6*FH-2, g_vbat100mV, (m_posVert==1 ? INVERS : 0)); #endif if (m_posVert==1) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatCalib, -127, 127); #if defined(PCBSKY9X) && !defined(REVA) lcd_putsLeft(6*FH+1, STR_CURRENT_CALIB); putsTelemetryValue(LEN_CALIB_FIELDS*FW+4*FW, 6*FH+1, getCurrent(), UNIT_MILLIAMPS, (m_posVert==2 ? INVERS : 0)) ; if (m_posVert==2) CHECK_INCDEC_GENVAR(event, g_eeGeneral.currentCalib, -49, 49); #endif #if defined(PCBSKY9X) lcd_putsLeft(7*FH+1, STR_TEMP_CALIB); putsTelemetryValue(LEN_CALIB_FIELDS*FW+4*FW, 7*FH+1, getTemperature(), UNIT_DEGREES, (m_posVert==3 ? INVERS : 0)) ; if (m_posVert==3) CHECK_INCDEC_GENVAR(event, g_eeGeneral.temperatureCalib, -100, 100); #endif }
void menuStatisticsDebug(uint8_t event) { TITLE(STR_MENUDEBUG); switch(event) { #if defined(CPUARM) case EVT_KEY_LONG(KEY_ENTER): g_eeGeneral.mAhUsed = 0; g_eeGeneral.globalTimer = 0; eeDirty(EE_GENERAL); #if defined(PCBSKY9X) Current_used = 0; #endif sessionTimer = 0; killEvents(event); AUDIO_KEYPAD_UP(); break; #endif case EVT_KEY_FIRST(KEY_ENTER): #if !defined(CPUARM) g_tmr1Latency_min = 0xff; g_tmr1Latency_max = 0; #endif #if defined(LUA) maxLuaInterval = 0; maxLuaDuration = 0; #endif maxMixerDuration = 0; AUDIO_KEYPAD_UP(); break; case EVT_KEY_FIRST(KEY_DOWN): chainMenu(menuStatisticsView); return; case EVT_KEY_FIRST(KEY_EXIT): chainMenu(menuMainView); return; } #if defined(PCBSKY9X) if ((ResetReason&RSTC_SR_RSTTYP) == (2<<8)) { lcd_puts(LCD_W-8*FW, 0*FH, "WATCHDOG"); } else if (unexpectedShutdown) { lcd_puts(LCD_W-13*FW, 0*FH, "UNEXP.SHTDOWN"); } #endif #if defined(PCBSKY9X) && !defined(REVA) // current lcd_putsLeft(1*FH, STR_CPU_CURRENT); putsTelemetryValue(MENU_DEBUG_COL1_OFS, 1*FH, getCurrent(), UNIT_MILLIAMPS, LEFT); uint32_t current_scale = 488 + g_eeGeneral.currentCalib; lcd_putc(MENU_DEBUG_COL2_OFS, 1*FH, '>'); putsTelemetryValue(MENU_DEBUG_COL2_OFS+FW+1, 1*FH, Current_max*10*current_scale/8192, UNIT_RAW, LEFT); // consumption lcd_putsLeft(2*FH, STR_CPU_MAH); putsTelemetryValue(MENU_DEBUG_COL1_OFS, 2*FH, g_eeGeneral.mAhUsed + Current_used*current_scale/8192/36, UNIT_MAH, LEFT|PREC1); putsTimer(MENU_DEBUG_COL2_OFS, 2*FH, g_eeGeneral.globalTimer + sessionTimer, LEFT, 0); #endif #if defined(PCBSKY9X) lcd_putsLeft(3*FH, STR_CPU_TEMP); putsTelemetryValue(MENU_DEBUG_COL1_OFS, 3*FH, getTemperature(), UNIT_TEMPERATURE, LEFT); lcd_putc(MENU_DEBUG_COL2_OFS, 3*FH, '>'); putsTelemetryValue(MENU_DEBUG_COL2_OFS+FW+1, 3*FH, maxTemperature+g_eeGeneral.temperatureCalib, UNIT_TEMPERATURE, LEFT); #endif #if defined(COPROCESSOR) lcd_putsLeft(4*FH, STR_COPROC_TEMP); if (Coproc_read==0) { lcd_putsAtt(MENU_DEBUG_COL1_OFS, 4*FH, PSTR("Co Proc NACK"),INVERS); } else if (Coproc_read==0x81) { lcd_putsAtt(MENU_DEBUG_COL1_OFS, 4*FH, PSTR("Inst.TinyApp"),INVERS); } else if (Coproc_read<3) { lcd_putsAtt(MENU_DEBUG_COL1_OFS, 4*FH, PSTR("Upgr.TinyApp"),INVERS); } else { putsTelemetryValue(MENU_DEBUG_COL1_OFS, 4*FH, Coproc_temp, UNIT_TEMPERATURE, LEFT); putsTelemetryValue(MENU_DEBUG_COL2_OFS, 4*FH, Coproc_maxtemp, UNIT_TEMPERATURE, LEFT); } #endif #if defined(PCBTARANIS) && !defined(SIMU) lcd_putsLeft(3*FH, "Free Mem"); lcd_outdezAtt(MENU_DEBUG_COL1_OFS, 3*FH, 0x20020000 - (unsigned int)heap, LEFT); #endif #if defined(LUA) lcd_putsLeft(4*FH, "Lua scripts"); lcd_putsAtt(MENU_DEBUG_COL1_OFS-1, 4*FH+1, "[Duration]", SMLSIZE); lcd_outdezAtt(lcdLastPos, 4*FH, 10*maxLuaDuration, LEFT); lcd_putsAtt(lcdLastPos+2, 4*FH+1, "[Interval]", SMLSIZE); lcd_outdezAtt(lcdLastPos, 4*FH, 10*maxLuaInterval, LEFT); #endif #if defined(CPUARM) lcd_putsLeft(5*FH, STR_TMIXMAXMS); lcd_outdezAtt(MENU_DEBUG_COL1_OFS, 5*FH, DURATION_MS_PREC2(maxMixerDuration), PREC2|LEFT); lcd_puts(lcdLastPos, 5*FH, "ms"); lcd_putsLeft(6*FH, STR_FREESTACKMINB); #if LCD_W >= 212 lcd_putsAtt(MENU_DEBUG_COL1_OFS-1, 6*FH+1, "[Main]", SMLSIZE); lcd_outdezAtt(lcdLastPos, 6*FH, stack_free(0), UNSIGN|LEFT); lcd_putsAtt(lcdLastPos+2, 6*FH+1, "[Mix]", SMLSIZE); lcd_outdezAtt(lcdLastPos, 6*FH, stack_free(1), UNSIGN|LEFT); lcd_putsAtt(lcdLastPos+2, 6*FH+1, "[Audio]", SMLSIZE); lcd_outdezAtt(lcdLastPos, 6*FH, stack_free(2), UNSIGN|LEFT); #else lcd_outdezAtt(MENU_DEBUG_COL1_OFS, 6*FH, stack_free(0), UNSIGN|LEFT); lcd_puts(lcdLastPos, 6*FH, "/"); lcd_outdezAtt(lcdLastPos, 6*FH, stack_free(1), UNSIGN|LEFT); lcd_puts(lcdLastPos, 6*FH, "/"); lcd_outdezAtt(lcdLastPos, 6*FH, stack_free(2), UNSIGN|LEFT); #endif #else lcd_putsLeft(1*FH, STR_TMR1LATMAXUS); lcd_outdez8(MENU_DEBUG_COL1_OFS , 1*FH, g_tmr1Latency_max/2 ); lcd_putsLeft(2*FH, STR_TMR1LATMINUS); lcd_outdez8(MENU_DEBUG_COL1_OFS , 2*FH, g_tmr1Latency_min/2 ); lcd_putsLeft(3*FH, STR_TMR1JITTERUS); lcd_outdez8(MENU_DEBUG_COL1_OFS , 3*FH, (g_tmr1Latency_max - g_tmr1Latency_min) /2 ); lcd_putsLeft(4*FH, STR_TMIXMAXMS); lcd_outdezAtt(MENU_DEBUG_COL1_OFS, 4*FH, DURATION_MS_PREC2(maxMixerDuration), PREC2); lcd_putsLeft(5*FH, STR_FREESTACKMINB); lcd_outdezAtt(14*FW, 5*FH, stack_free(), UNSIGN) ; #endif lcd_puts(3*FW, 7*FH+1, STR_MENUTORESET); lcd_status_line(); }