разделены DPO и MDO опции
подправлены описания
This commit is contained in:
		
							parent
							
								
									8a91973100
								
							
						
					
					
						commit
						d9934b51fe
					
				| @ -44,9 +44,13 @@ enum MenuState { | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| const char* modelList[] = { "MDO5", "MDO4", "MDO3", "MDO2", "MDO1", "DPO5", "DPO4", "DPO3", "DPO2", "DPO1" }; | ||||
| const char* modelList[] = { "DPO4", "DPO3", "DPO2", "DPO1", "MDO4", "MDO3", "MDO2", "MDO1"}; | ||||
| const uint8_t modelCount = sizeof(modelList) / sizeof(modelList[0]); | ||||
| 
 | ||||
| // Фильтрация опций по модели
 | ||||
| uint8_t filteredOptionIndexes[50]; | ||||
| uint8_t filteredOptionCount = 0; | ||||
| 
 | ||||
| const char* optionList[] = { | ||||
|   "BND",    // Bundle (all-in-one)
 | ||||
|   "AERO",   // Aerospace serial buses
 | ||||
| @ -63,38 +67,107 @@ const char* optionList[] = { | ||||
|   "PWR",    // Power analysis
 | ||||
|   "SA",     // Spectrum Analyzer
 | ||||
|   "SA3",     // Spectrum Analyzer
 | ||||
|   "SA3T6",     // Spectrum Analyzer
 | ||||
|   "SA6",     // Spectrum Analyzer
 | ||||
|   "SEC",    // Security extension
 | ||||
|   "TRIG",   // RF Power Level Trigger
 | ||||
|   "USB",    // USB analysis
 | ||||
|   "VID"     // Video signal triggering
 | ||||
| }; | ||||
| const uint8_t optionCount = sizeof(optionList) / sizeof(optionList[0]); | ||||
| 
 | ||||
| const char* optionDescriptions[] = { | ||||
|   "Include all available options in one", | ||||
|   "Aerospace buses: MIL-STD-1553, ARINC 429", | ||||
|   "Aerospace buses: MIL-STD-1553", | ||||
|   "Waveform generator for custom signals", | ||||
|   "Audio buses: I2S, TDM, LJ, RJ", | ||||
|   "Cars buses: CAN FD, CAN, LIN", | ||||
|   "Cars buses: CAN FD, CAN, LIN, FlexRay", | ||||
|   "Computer buses: SPI, I2C, RS-232, PS/2", | ||||
|   "Embedded protocols: I2C, SPI, UART, GPIO", | ||||
|   "Ethernet: 10/100/1000BASE-T", | ||||
|   "Audio buses: I2S, LJ, RJ, TDM", | ||||
|   "Cars buses: CAN, CAN FD, LIN", | ||||
|   "Cars buses: CAN, CAN FD, LIN, FlexRay", | ||||
|   "Computer buses: RS-232/422/485, UART", | ||||
|   "Embedded protocols: I2C, SPI", | ||||
|   "Ethernet: 10BASE-T, 100BASE-TX", | ||||
|   "Cars bus FlexRay", | ||||
|   "Limit and mask testing: Go/No-Go", | ||||
|   "Mixed Signal Oscill: analog + digital", | ||||
|   "Power analysis: efficiency, ripple, Bode", | ||||
|   "Power: efficiency, ripple, dI/dt, dV/dt", | ||||
|   "Spectrum analysis: RF, high-frequency", | ||||
|   "Spectr analysis (3 MHz): RF, high-frequency", | ||||
|   "SA3 extention to 6 MHz for MDO4000C", | ||||
|   "Spectr analysis (6 MHz): RF, high-frequency", | ||||
|   "Security extension: access control", | ||||
|   "RF power level triggering", | ||||
|   "USB decoding: USB 1.x/2.0/3.x", | ||||
|   "Video triggering: HDMI, VGA, analog" | ||||
|   "USB decoding: USB LS, FS, HS", | ||||
|   "Video triggering: HDTV" | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| const uint8_t optionCount = sizeof(optionList) / sizeof(optionList[0]); | ||||
| bool isOptionForDPO[] = { | ||||
|   true,   // BND     → DPO4BND
 | ||||
|   true,   // AERO    → DPO4AERO
 | ||||
|   false,  // AFG     → (не используется в DPO)
 | ||||
|   true,   // AUDIO   → DPO4AUDIO
 | ||||
|   true,   // AUTO    → DPO4AUTO
 | ||||
|   true,   // AUTOMAX → нет в DPO
 | ||||
|   true,   // COMP    → DPO4COMP
 | ||||
|   true,   // EMBD    → DPO4EMBD
 | ||||
|   true,   // ENET    → DPO4ENET
 | ||||
|   true,   // FLEX    → нет упоминания, но оставим
 | ||||
|   true,   // LMT     → DPO4LMT
 | ||||
|   false,  // MSO     → только для MDO (MDO4MSO)
 | ||||
|   true,   // PWR     → DPO4PWR
 | ||||
|   false,  // SA      → только MDO
 | ||||
|   false,  // SA3     → только MDO
 | ||||
|   false,  // SA3T6   → только MDO
 | ||||
|   false,  // SA6     → только MDO
 | ||||
|   false,  // SEC     → только MDO (MDO4SEC)
 | ||||
|   false,  // TRIG    → только MDO (MDO4TRIG)
 | ||||
|   true,   // USB     → DPO4USB
 | ||||
|   true    // VID     → DPO4VID
 | ||||
| }; | ||||
| 
 | ||||
| bool isOptionForMDO[] = { | ||||
|   false,  // BND     → нет прямого MDO4BND
 | ||||
|   false,  // AERO
 | ||||
|   true,   // AFG     → MDO4AFG
 | ||||
|   false,  // AUDIO
 | ||||
|   false,  // AUTO
 | ||||
|   false,  // AUTOMAX → пусть будет для MDO
 | ||||
|   false,  // COMP
 | ||||
|   false,  // EMBD
 | ||||
|   false,  // ENET
 | ||||
|   false,  // FLEX
 | ||||
|   false,  // LMT
 | ||||
|   true,   // MSO     → MDO4MSO
 | ||||
|   false,  // PWR
 | ||||
|   true,   // SA      → MDO4SA3/MDO4SA6
 | ||||
|   true,   // SA3     → MDO4SA3
 | ||||
|   true,   // SA3     → MDO4SA3T6
 | ||||
|   true,   // SA6     → MDO4SA6
 | ||||
|   true,   // SEC     → MDO4SEC
 | ||||
|   true,   // TRIG    → MDO4TRIG
 | ||||
|   false,  // USB
 | ||||
|   false   // VID
 | ||||
| }; | ||||
| 
 | ||||
| void filterOptionsForModel(const char* modelName) { | ||||
|   filteredOptionCount = 0; | ||||
| 
 | ||||
|   bool isMDO = strstr(modelName, "MDO") != nullptr; | ||||
|   bool isDPO = strstr(modelName, "DPO") != nullptr; | ||||
| 
 | ||||
|   for (uint8_t i = 0; i < optionCount; ++i) { | ||||
|     if ((isMDO && isOptionForMDO[i]) || (isDPO && isOptionForDPO[i])) { | ||||
|       filteredOptionIndexes[filteredOptionCount++] = i; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   // Подстраховка
 | ||||
|   if (filteredOptionCount == 0) { | ||||
|     for (uint8_t i = 0; i < sizeof(optionList); ++i) | ||||
|       filteredOptionIndexes[filteredOptionCount++] = i; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| uint8_t selectedModel = 0; | ||||
| uint8_t selectedOption = 0; | ||||
| @ -312,8 +385,10 @@ void updateMenuDisplay() { | ||||
|     u8g2.setFont(FONT);  // основной шрифт
 | ||||
|     u8g2.drawStr(0, LINE_SPACING * 1, "Option:"); | ||||
| 
 | ||||
|     if (cursorPos >= filteredOptionCount) cursorPos = filteredOptionCount - 1; | ||||
| 
 | ||||
|     char line[20]; | ||||
|     uint8_t optIndex = cursorPos % optionCount; | ||||
|     uint8_t optIndex = filteredOptionIndexes[cursorPos]; | ||||
|     snprintf(line, sizeof(line), ">%s", optionList[optIndex]); | ||||
|     u8g2.drawStr(0, LINE_SPACING * 2, line); | ||||
| 
 | ||||
| @ -399,11 +474,12 @@ void handleOk() { | ||||
| 
 | ||||
|   } else if (currentMenu == MENU_SELECT_MODEL) { | ||||
|     selectedModel = cursorPos % modelCount; | ||||
|     filterOptionsForModel(modelList[selectedModel]);  // ← ВАЖНО!
 | ||||
|     cursorPos = 0; | ||||
|     currentMenu = MENU_SELECT_OPTION; | ||||
| 
 | ||||
|   } else if (currentMenu == MENU_SELECT_OPTION) { | ||||
|     selectedOption = cursorPos % optionCount; | ||||
|     selectedOption = filteredOptionIndexes[cursorPos];; | ||||
| 
 | ||||
|     char fullModule[32]; | ||||
|     snprintf(fullModule, sizeof(fullModule), "%s%s", modelList[selectedModel], optionList[selectedOption]); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user