| 
									
										
										
										
											2023-09-08 14:33:13 +02:00
										 |  |  | local Log, menuLib, modelLib, DEBUG_ON, SIMULATION_ON = ... -- Get DebugON from parameters | 
					
						
							| 
									
										
										
										
											2023-12-17 11:12:14 +01:00
										 |  |  | local MAIN_MENU_LIB_VERSION = "0.56" | 
					
						
							| 
									
										
										
										
											2023-09-08 14:33:13 +02:00
										 |  |  | local MODEL     = modelLib.MODEL | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | local PHASE     = menuLib.PHASE | 
					
						
							|  |  |  | local LINE_TYPE = menuLib.LINE_TYPE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | local lastGoodMenu=0     | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | -- Creates the menus to Render with the GUI | 
					
						
							|  |  |  | local function ST_LoadMenu(menuId) | 
					
						
							|  |  |  |     local ctx = menuLib.DSM_Context | 
					
						
							|  |  |  |     menuLib.clearMenuLines() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (menuId==0x1000) then -- MAIN MENU | 
					
						
							|  |  |  |         ctx.Menu = { MenuId = 0x1000, Text = "Main Menu ("..MODEL.modelName..")", PrevId = 0, NextId = 0, BackId = 0, TextId=0 } | 
					
						
							|  |  |  |         ctx.MenuLines[0] = { Type = LINE_TYPE.MENU, Text = "Model Setup", ValId = 0xFFF3,TextId=0 } | 
					
						
							|  |  |  |         | 
					
						
							|  |  |  |         if (SIMULATION_ON) then | 
					
						
							|  |  |  |             ctx.MenuLines[4] = { Type = LINE_TYPE.MENU, Text = "RX Simulator (GUI dev only)", ValId = 0xFFF1, TextId=0 } -- Menu 0xFFF2 to SIMULATOR   | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, Text = "Forward Programming RX", ValId = 0xFFF2, TextId=0 }  -- Menu 0xFFF2 to Real RX  | 
					
						
							|  |  |  |         ctx.SelLine = 6  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         lastGoodMenu = menuId | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         --print("NOT IMPLEMENTED") | 
					
						
							|  |  |  |         ctx.Menu = { MenuId = 0x0002, Text = "NOT IMPLEMENTED", TextId = 0, PrevId = 0, NextId = 0, BackId = lastGoodMenu } | 
					
						
							|  |  |  |         ctx.SelLine = menuLib.BACK_BUTTON | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     menuLib.PostProcessMenu() | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | local function Main_Send_Receive() | 
					
						
							|  |  |  |     local ctx = menuLib.DSM_Context | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if ctx.Phase == PHASE.RX_VERSION then  -- Just Init RX Version | 
					
						
							|  |  |  |         ctx.RX.Name = "Main Menu" | 
					
						
							|  |  |  |         ctx.RX.Version = MAIN_MENU_LIB_VERSION | 
					
						
							|  |  |  |         ctx.Phase = PHASE.MENU_TITLE | 
					
						
							|  |  |  |         ctx.Menu.MenuId = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ctx.Refresh_Display = true         | 
					
						
							|  |  |  |     elseif ctx.Phase == PHASE.WAIT_CMD then  | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |     elseif ctx.Phase == PHASE.MENU_TITLE then -- request menu title | 
					
						
							|  |  |  |         if ctx.Menu.MenuId == 0 then  -- First time loading a menu ? | 
					
						
							|  |  |  |             ST_LoadMenu(0x01000) | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             ST_LoadMenu(ctx.Menu.MenuId) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         ctx.Phase = PHASE.WAIT_CMD | 
					
						
							|  |  |  |         ctx.Refresh_Display = true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     elseif ctx.Phase == PHASE.VALUE_CHANGING then -- send value | 
					
						
							|  |  |  |         local line = ctx.MenuLines[ctx.SelLine] -- Updated Value of SELECTED line | 
					
						
							|  |  |  |         --if (DEBUG_ON) then Log.LOG_write("%3.3f %s: ", menuLib.getElapsedTime(), menuLib.phase2String(ctx.Phase)) end | 
					
						
							|  |  |  |         --if (DEBUG_ON) then Log.LOG_write("SEND SIM_updateMenuValue(ValueId=0x%X Text=\"%s\" Value=%s)\n", line.ValId, line.Text, menuLib.lineValue2String(line)) end | 
					
						
							|  |  |  |         ctx.Phase = PHASE.VALUE_CHANGING_WAIT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     elseif ctx.Phase == PHASE.VALUE_CHANGING_WAIT then | 
					
						
							|  |  |  |         local line = ctx.MenuLines[ctx.SelLine] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     elseif ctx.Phase == PHASE.VALUE_CHANGE_END then -- send value | 
					
						
							|  |  |  |         local line = ctx.MenuLines[ctx.SelLine] -- Updated Value of SELECTED line | 
					
						
							|  |  |  |         --if (DEBUG_ON) then Log.LOG_write("%3.3f %s: ", menuLib.getElapsedTime(), menuLib.phase2String(ctx.Phase)) end | 
					
						
							|  |  |  |         --if (DEBUG_ON) then Log.LOG_write("SEND SIM_updateMenuValue(ValueId=0x%X Text=\"%s\" Value=%s)\n", line.ValId, line.Text, menuLib.lineValue2String(line)) end | 
					
						
							|  |  |  |         --if (DEBUG_ON) then Log.LOG_write("SEND SIM_validateMenuValue(ValueId=0x%X Text=\"%s\" Value=%s)\n", line.ValId, line.Text, menuLib.lineValue2String(line)) end | 
					
						
							|  |  |  |         ctx.Phase = PHASE.WAIT_CMD | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     elseif ctx.Phase == PHASE.EXIT then | 
					
						
							|  |  |  |        ctx.Phase=PHASE.EXIT_DONE | 
					
						
							|  |  |  |        return 1 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | local function Main_Init() | 
					
						
							|  |  |  |     local ctx = menuLib.DSM_Context | 
					
						
							|  |  |  |     ctx.Phase = PHASE.RX_VERSION | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | local function Main_Done() | 
					
						
							|  |  |  |     local ctx = menuLib.DSM_Context | 
					
						
							|  |  |  |     ctx.Phase = PHASE.EXIT_DONE | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | return { init=Main_Init, run=Main_Send_Receive, done=Main_Done } |