1
0
mirror of https://github.com/peterantypas/maiana.git synced 2025-05-27 21:00:24 -07:00

Can detect DFU mode upon connecting

This commit is contained in:
Peter Antypas 2022-01-30 15:32:28 -08:00
parent e536b5b597
commit 83b4f5946c
3 changed files with 41 additions and 7 deletions

View File

@ -3,8 +3,14 @@ import sys
import glob
import time
import re
from enum import Enum
class MaianaStatus(Enum):
UNKNOWN = 0
RUNNING = 1
DFU = 2
class MaianaClient:
VESSEL_TYPES = [30, 34, 36, 37]
@ -38,6 +44,23 @@ class MaianaClient:
pass
return result
@staticmethod
def determineStatus(port):
port.flushInput()
port.flushOutput()
s = port.readline().strip()
port.write(b'\r\n')
for i in range(5):
s = port.readline().strip()
if s.find(b"bootloader") > -1:
return MaianaStatus.DFU
else:
tokens = s.decode('utf-8').split(',')
if (tokens[0][0] == '$' or tokens[0][0] == '!') and len(tokens) >= 2:
return MaianaStatus.RUNNING
return MaianaStatus.UNKNOWN
@staticmethod
def sendCmdWithResponse(port, cmd, resp):
port.flushInput()

View File

@ -1,5 +1,5 @@
from mainframe import MainFrame
from model import MaianaClient
from maianaclient import MaianaClient, MaianaStatus
import serial
import wx
from fwUpdateThread import *
@ -24,13 +24,23 @@ class MainWindow(MainFrame):
wx.MessageBox(b'Unable to open port, it may be in use', 'Error', wx.OK | wx.ICON_ERROR)
return
self.port.flushInput()
self.port.flushOutput()
self.m_SerialBtn.SetLabel(b'Disconnect')
self.enableUI()
if self.refreshSys():
self.refreshStation()
status = MaianaClient.determineStatus(self.port)
if status == MaianaStatus.UNKNOWN:
pass
elif status == MaianaStatus.DFU:
wx.MessageBox(b'MAIANA is currently in firmware update mode. This is the only task you can perform.',
'DFU warning', wx.OK)
self.enableUI()
self.m_SerialBtn.SetLabel(b'Disconnect')
self.m_StationSaveBtn.Disable()
else:
#Assuming status is RUNNING
self.m_SerialBtn.SetLabel(b'Disconnect')
self.enableUI()
if self.refreshSys():
self.refreshStation()
self.m_StationSaveBtn.Disable()
else:
self.port.close()
self.port = None
@ -78,6 +88,7 @@ class MainWindow(MainFrame):
self.m_FWProgress.SetValue(0)
self.m_FWUpdateStatusLbl.SetLabel("Transfer completed")
self.refreshSys()
self.refreshStation()
elif evt.eventType == EventType.ERROR:
self.m_FWUpdateStatusLbl.SetLabel(evt.data)