diff --git a/startup.lua b/startup.lua index c42c0c7..ff5aeb2 100644 --- a/startup.lua +++ b/startup.lua @@ -263,44 +263,72 @@ local function MonitorRemoteIris() utils.log("ALERT: Remote iris moving: " .. remoteIrisState .. "%") end - -- If remote has computer and iris just became fully closed, wait for password request + -- If remote has computer and iris just became fully closed, check for password request if state.remoteHasComputer and remoteIrisState == 100 and (not lastIrisState or lastIrisState < 100) then - utils.log("Remote iris closed and computer detected - waiting for password request") + utils.log("Remote iris closed and computer detected - checking for password request") - -- Wait briefly for password request message - local function WaitForPasswordRequest() - sleep(2) -- Wait up to 2 seconds for password request - return nil - end + -- Check if password was already requested during initial connection + if state.remotePasswordRequired then + utils.log("Password already requested - showing password prompt") - local result = parallel.waitForAny(GetMessage, WaitForPasswordRequest) - if result == 1 then - local message = state.lastReceivedMessage - state.lastReceivedMessage = nil + local password = HandlePasswordEntry() - -- Only show password panel if explicitly requested - if message == "IRIS_PASSWORD_REQUIRED" then - utils.log("Password requested by remote gate - showing password prompt") + -- Wait for response + local function WaitForResponse() + sleep(3) -- Wait up to 3 seconds for response + return nil + end - local password = HandlePasswordEntry() - - -- Wait for response - local function WaitForResponse() - sleep(3) -- Wait up to 3 seconds for response - return nil + local result = parallel.waitForAny(GetMessage, WaitForResponse) + if result == 1 then + local response = state.lastReceivedMessage + state.lastReceivedMessage = nil + if response == "IRIS_OPEN" then + display.showPasswordResult(true) + utils.log("Password accepted - iris opened") + -- Continue monitoring, iris state will update + elseif response == "IRIS_DENIED" then + display.showPasswordResult(false) + utils.log("Password rejected") end + end + else + -- Wait briefly for password request message if not already received + utils.log("Waiting for password request message") + local function WaitForPasswordRequest() + sleep(2) -- Wait up to 2 seconds for password request + return nil + end - result = parallel.waitForAny(GetMessage, WaitForResponse) - if result == 1 then - local response = state.lastReceivedMessage - state.lastReceivedMessage = nil - if response == "IRIS_OPEN" then - display.showPasswordResult(true) - utils.log("Password accepted - iris opened") - -- Continue monitoring, iris state will update - elseif response == "IRIS_DENIED" then - display.showPasswordResult(false) - utils.log("Password rejected") + local result = parallel.waitForAny(GetMessage, WaitForPasswordRequest) + if result == 1 then + local message = state.lastReceivedMessage + state.lastReceivedMessage = nil + + -- Only show password panel if explicitly requested + if message == "IRIS_PASSWORD_REQUIRED" then + utils.log("Password requested by remote gate - showing password prompt") + + local password = HandlePasswordEntry() + + -- Wait for response + local function WaitForResponse() + sleep(3) -- Wait up to 3 seconds for response + return nil + end + + result = parallel.waitForAny(GetMessage, WaitForResponse) + if result == 1 then + local response = state.lastReceivedMessage + state.lastReceivedMessage = nil + if response == "IRIS_OPEN" then + display.showPasswordResult(true) + utils.log("Password accepted - iris opened") + -- Continue monitoring, iris state will update + elseif response == "IRIS_DENIED" then + display.showPasswordResult(false) + utils.log("Password rejected") + end end end end @@ -707,7 +735,7 @@ local function handleOutgoingDial() end print("DEBUG: Message collection complete. remoteHasComputer=" .. - tostring(state.remoteHasComputer) .. ", remotePasswordRequired=" .. tostring(state.remotePasswordRequired)) + tostring(state.remoteHasComputer) .. ", remotePasswordRequired=" .. tostring(state.remotePasswordRequired)) -- Check if remote iris is closed using transceiver local remoteIrisState = nil