Skip to content

Commit 8e9e281

Browse files
author
luoweiyuan
committed
board: Add access code for fire board.
Signed-off-by: luoweiyuan <luoweiyuan@m5stack.com>
1 parent fbfea38 commit 8e9e281

7 files changed

Lines changed: 95 additions & 145 deletions

File tree

10.3 KB
Loading
-440 Bytes
Loading
19.8 KB
Loading

m5stack/modules/startup/fire/apps/app_run.py

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,6 @@
1212
import time
1313
from .. import res
1414

15-
try:
16-
import M5Things
17-
18-
_HAS_SERVER = True
19-
except ImportError:
20-
_HAS_SERVER = False
21-
2215

2316
class RunApp(app_base.AppBase):
2417
def __init__(self, icos: dict, data=None) -> None:
@@ -28,7 +21,7 @@ def on_install(self):
2821
M5.Lcd.drawImage(res.APPRUN_UNSELECTED_IMG, 5 + 62 * 2, 0)
2922

3023
def on_launch(self):
31-
self._mtime_text, self._account_text, self._ver_text = self._get_file_info("main.py")
24+
self._mtime_text, self._ver_text = self._get_file_info("main.py")
3225

3326
def on_view(self):
3427
M5.Lcd.drawImage(res.APPRUN_SELECTED_IMG, 5 + 62 * 2, 0)
@@ -58,21 +51,10 @@ def on_view(self):
5851
)
5952
self._mtime_label.set_text(self._mtime_text)
6053

61-
self._account_label = widgets.Label(
62-
"Account: XXABC",
63-
4 + 10 + 8,
64-
(56 + 4) + 4 + 20 + 6 + 18,
65-
w=312,
66-
fg_color=0x000000,
67-
bg_color=0xDCDDDD,
68-
font="/system/common/font/Montserrat-Medium-16.vlw",
69-
)
70-
self._account_label.set_text(self._account_text)
71-
7254
self._ver_label = widgets.Label(
7355
"Ver: UIFLOW2.0 a18",
7456
4 + 10 + 8,
75-
(56 + 4) + 4 + 20 + 6 + 18 + 18,
57+
(56 + 4) + 4 + 20 + 6 + 18,
7658
w=312,
7759
fg_color=0x000000,
7860
bg_color=0xDCDDDD,
@@ -88,7 +70,7 @@ def on_hide(self):
8870

8971
def on_exit(self):
9072
M5.Lcd.drawImage(res.APPRUN_UNSELECTED_IMG, 5 + 62 * 2, 0)
91-
del self._name_label, self._mtime_label, self._account_label, self._ver_label
73+
del self._name_label, self._mtime_label, self._ver_label
9274

9375
async def _btna_event_handler(self, fw):
9476
pass
@@ -106,7 +88,6 @@ async def _btnc_event_handler(self, fw):
10688
@staticmethod
10789
def _get_file_info(path):
10890
mtime = None
109-
account = None
11091
ver = f"Ver: UIFLOW2 {esp32.firmware_info()[3]}"
11192

11293
try:
@@ -124,17 +105,8 @@ def _get_file_info(path):
124105

125106
with open(path, "r") as f:
126107
for line in f:
127-
if line.find("Account") != -1:
128-
account = line.split(":")[1].strip()
129108
if line.find("Ver") != -1:
130109
ver = line.split(":")[1].strip()
131-
if account is not None and ver is not None:
132110
break
133111

134-
if account is None and _HAS_SERVER and M5Things.status() == 2:
135-
infos = M5Things.info()
136-
account = "Account: None" if len(infos[1]) == 0 else "Account: {:s}".format(infos[1])
137-
else:
138-
account = "Account: None"
139-
140-
return (mtime, account, ver)
112+
return (mtime, ver)

m5stack/modules/startup/fire/apps/dev.py

Lines changed: 84 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
import M5
77
import widgets
88
import asyncio
9-
import requests
109
from .. import res
11-
import os
1210
import binascii
1311
import machine
1412
import network
@@ -49,6 +47,13 @@ class CloudStatus:
4947
CloudStatus.DISCONNECTED: res.SERVER_ERROR_IMG,
5048
}
5149

50+
_BG_COLOR = 0xEEEEEF
51+
_LABEL_COLOR = 0x008FD7
52+
_VALUE_COLOR = 0x000000
53+
_LABEL_FONT = "/system/common/font/Montserrat-Medium-14.vlw"
54+
_VALUE_FONT = "/system/common/font/Montserrat-Medium-18.vlw"
55+
_TEXT_PANEL_W = 181
56+
5257

5358
class DevApp(app_base.AppBase):
5459
def __init__(self, icos: dict, data=None) -> None:
@@ -60,9 +65,7 @@ def on_install(self):
6065
M5.Lcd.drawImage(res.DEVELOP_UNSELECTED_IMG, 5 + 62 * 1, 0)
6166

6267
def on_launch(self):
63-
self._mac_text = self._get_mac()
64-
self._account_text = self._get_account()
65-
self._bg_src = self._get_bg_src()
68+
self._state = self._collect_state()
6669
self._status_bar_src = self._get_bar_src()
6770
self._network_status = self._get_network_status()
6871
self._cloud_status = self._get_cloud_status()
@@ -72,7 +75,6 @@ def on_launch(self):
7275
M5.Power.getBatteryLevel(), M5.Power.isCharging()
7376
)
7477
self._battery_text = self._get_battery_text(M5.Power.getBatteryLevel())
75-
self._avatar_src = self._get_avatar()
7678

7779
def on_view(self):
7880
M5.Lcd.drawImage(res.DEVELOP_SELECTED_IMG, 5 + 62 * 1, 0)
@@ -83,38 +85,16 @@ def on_view(self):
8385
self._bg_img = widgets.Image(use_sprite=False, parent=self._lcd)
8486
self._bg_img.set_pos(4, 4)
8587
self._bg_img.set_size(312, 156)
86-
self._bg_img.set_src(self._bg_src)
87-
88-
self._mac_label = widgets.Label(
89-
"aabbcc112233",
90-
4 + 6,
91-
4 + 57,
92-
w=177,
93-
fg_color=0x000000,
94-
bg_color=0xEEEEEF,
95-
font="/system/common/font/Montserrat-Medium-18.vlw",
96-
parent=self._lcd,
97-
)
98-
self._mac_label.set_text(self._mac_text)
99-
100-
self._account_label = widgets.Label(
101-
"XXABC",
102-
4 + 6,
103-
4 + 57 + 40,
104-
w=110,
105-
h=60,
106-
fg_color=0x000000,
107-
bg_color=0xEEEEEF,
108-
font="/system/common/font/Montserrat-Medium-18.vlw",
109-
parent=self._lcd,
110-
)
111-
self._account_label.set_text(self._account_text)
88+
self._bg_img.set_src(res.DEVELOP_BG_IMG)
89+
self._lcd.fillRect(4, 4, _TEXT_PANEL_W, 156, _BG_COLOR)
11290

113-
self._avatar_img = widgets.Image(use_sprite=False, parent=self._lcd)
114-
self._avatar_img.set_pos(130, 100)
115-
self._avatar_img.set_size(56, 56)
116-
self._avatar_img.set_scale(0.28, 0.28)
117-
self._avatar_img.set_src(self._avatar_src)
91+
self._mac_label, self._mac_value = self._create_row("Device MAC:", 8)
92+
self._code_label, self._code_value = self._create_row("Access Code:", 59)
93+
self._nick_label, self._nick_value = self._create_row("Nickname:", 110)
94+
95+
self._set_value(self._mac_value, self._state.get("mac", "-"))
96+
self._set_value(self._code_value, self._state.get("pair_code", ""), fallback="")
97+
self._set_value(self._nick_value, self._state.get("nick_name", ""), fallback="")
11898

11999
self._bar_img = widgets.Image(use_sprite=False, parent=self._lcd)
120100
self._bar_img.set_pos(0, 164)
@@ -154,30 +134,17 @@ async def on_run(self):
154134
refresh_bg = False
155135
refresh_bar = False
156136
while True:
157-
t = self._get_bg_src()
158-
if t != self._bg_src:
159-
self._bg_src = t
160-
self._bg_img.set_src(self._bg_src)
161-
refresh_bg = True
137+
new_state = self._collect_state()
162138

163-
refresh_bg and self._mac_label.set_text(self._mac_text)
164-
165-
t = self._get_account()
166-
if t != self._account_text or refresh_bg:
167-
self._account_text = t
168-
self._account_label.set_text(self._account_text)
169-
self._lcd.push(self._origin_x, self._origin_y)
139+
if new_state["pair_code"] != self._state.get("pair_code"):
140+
self._state["pair_code"] = new_state["pair_code"]
141+
self._set_value(self._code_value, new_state["pair_code"], fallback="")
142+
refresh_bg = True
170143

171-
t = self._get_avatar()
172-
if t != self._avatar_src:
173-
self._avatar_src = t
174-
try:
175-
os.stat(self._avatar_src)
176-
self._avatar_img.set_src(self._avatar_src)
177-
except OSError:
178-
self._dl_task = asyncio.create_task(self._dl_avatar(self._avatar_src))
179-
elif refresh_bg:
180-
self._avatar_img._draw(False)
144+
if new_state["nick_name"] != self._state.get("nick_name"):
145+
self._state["nick_name"] = new_state["nick_name"]
146+
self._set_value(self._nick_value, new_state["nick_name"], fallback="")
147+
refresh_bg = True
181148

182149
t = self._get_bar_src()
183150
if t != self._status_bar_src:
@@ -219,13 +186,12 @@ async def on_run(self):
219186
await asyncio.sleep_ms(1500)
220187

221188
def on_hide(self):
222-
if hasattr(self, "_dl_task"):
223-
self._dl_task.cancel()
224189
self._task.cancel()
225190

226191
def on_exit(self):
227192
M5.Lcd.drawImage(res.DEVELOP_UNSELECTED_IMG, 5 + 62 * 1, 0)
228-
del self._bg_img, self._mac_label, self._account_label, self._avatar_img
193+
del self._bg_img, self._mac_label, self._mac_value
194+
del self._code_label, self._code_value, self._nick_label, self._nick_value
229195
del self._bar_img, self._network_img, self._cloud_img, self._battery_img
230196
del self._battery_label
231197

@@ -238,58 +204,69 @@ async def _btnb_event_handler(self, fw):
238204
async def _btnc_event_handler(self, fw):
239205
pass
240206

241-
async def _dl_avatar(self, dst):
242-
if _HAS_SERVER is True and M5Things.status() == 2:
243-
infos = M5Things.info()
244-
if len(infos[4]) == 0:
245-
self._avatar_img.set_src("/system/common/img/avatar.jpg")
246-
else:
247-
try:
248-
rsp = requests.get("https://community.m5stack.com" + str(infos[4]))
249-
f = open(dst, "wb")
250-
f.write(rsp.content)
251-
f.close()
252-
rsp.close()
253-
self._avatar_img.set_src(dst)
254-
except:
255-
self._avatar_img.set_src("/system/common/img/avatar.jpg")
256-
finally:
257-
self._lcd.push(self._origin_x, self._origin_y)
258-
else:
259-
self._avatar_img.set_src("/system/common/img/avatar.jpg")
207+
def _create_row(self, label_text, y):
208+
label = widgets.Label(
209+
label_text,
210+
12,
211+
y,
212+
w=_TEXT_PANEL_W - 18,
213+
h=20,
214+
fg_color=_LABEL_COLOR,
215+
bg_color=_BG_COLOR,
216+
font=_LABEL_FONT,
217+
parent=self._lcd,
218+
)
219+
label.set_text(label_text)
220+
221+
value = widgets.Label(
222+
"",
223+
12,
224+
y + 22,
225+
w=_TEXT_PANEL_W - 18,
226+
h=26,
227+
fg_color=_VALUE_COLOR,
228+
bg_color=_BG_COLOR,
229+
font=_VALUE_FONT,
230+
parent=self._lcd,
231+
)
232+
value.set_long_mode(widgets.Label.LONG_DOT)
233+
return label, value
260234

261235
@staticmethod
262-
def _get_mac():
263-
return binascii.hexlify(machine.unique_id()).upper()
236+
def _set_value(label, text, fallback="-"):
237+
text = fallback if text is None or text == "" else str(text)
238+
label.set_text(text)
264239

265240
@staticmethod
266-
def _get_account():
267-
if _HAS_SERVER is True and M5Things.status() == 2:
268-
infos = M5Things.info()
269-
return "None" if len(infos[1]) == 0 else infos[1]
270-
else:
271-
return "None"
241+
def _get_mac():
242+
return binascii.hexlify(machine.unique_id()).decode("utf-8").upper()
272243

273244
@staticmethod
274-
def _get_avatar():
275-
if _HAS_SERVER is True and M5Things.status() == 2:
276-
infos = M5Things.info()
277-
if len(infos[4]) == 0:
278-
return "/system/common/img/avatar.jpg"
279-
else:
280-
return "/system/common/img/" + str(infos[4]).split("/")[-1]
281-
else:
282-
return "/system/common/img/avatar.jpg"
245+
def _get_pair_code():
246+
if _HAS_SERVER is True:
247+
try:
248+
if M5Things.status() == 2:
249+
return M5Things.paircode() or ""
250+
except Exception:
251+
pass
252+
return ""
283253

284-
def _get_bg_src(self):
285-
if _HAS_SERVER is True and M5Things.status() == 2:
286-
infos = M5Things.info()
287-
if infos[0] == 0:
288-
return "/system/fire/developPrivate.png"
289-
elif infos[0] in (1, 2):
290-
return "/system/fire/developPublic.png"
291-
else:
292-
return "/system/fire/developPrivate.png"
254+
@staticmethod
255+
def _get_nick_name():
256+
if _HAS_SERVER is True:
257+
try:
258+
if M5Things.status() == 2:
259+
return M5Things.nick_name() or ""
260+
except Exception:
261+
pass
262+
return ""
263+
264+
def _collect_state(self):
265+
return {
266+
"mac": self._get_mac(),
267+
"pair_code": self._get_pair_code(),
268+
"nick_name": self._get_nick_name(),
269+
}
293270

294271
def _get_bar_src(self):
295272
if _HAS_SERVER is True and M5Things.status() == 2:

m5stack/modules/startup/fire/apps/settings.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ def on_view(self):
3636

3737
self._ssid_label = widgets.Label(
3838
"ssid",
39-
self._origin_x + 98,
39+
self._origin_x + 56 + 2,
4040
self._origin_y + 12,
41-
w=144,
41+
w=180,
4242
font_align=widgets.Label.LEFT_ALIGNED,
4343
fg_color=0x000000,
4444
bg_color=0xFEFEFE,
@@ -50,9 +50,9 @@ def on_view(self):
5050

5151
self._psk_label = widgets.Label(
5252
"pwd",
53-
self._origin_x + 98,
53+
self._origin_x + 56 + 2,
5454
self._origin_y + 12 + 35,
55-
w=144,
55+
w=180,
5656
font_align=widgets.Label.LEFT_ALIGNED,
5757
fg_color=0x000000,
5858
bg_color=0xFEFEFE,
@@ -67,9 +67,9 @@ def on_view(self):
6767

6868
self._server_label = widgets.Label(
6969
"server",
70-
self._origin_x + 98,
70+
self._origin_x + 56 + 2,
7171
self._origin_y + 12 + 35 + 34,
72-
w=144,
72+
w=190,
7373
font_align=widgets.Label.LEFT_ALIGNED,
7474
fg_color=0x000000,
7575
bg_color=0xFEFEFE,

m5stack/modules/startup/fire/res.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
"BOOT_YES_IMG": "/system/fire/boot_Yes.png",
3838
"DEVELOP_SELECTED_IMG": "/system/fire/develop_selected.png",
3939
"DEVELOP_UNSELECTED_IMG": "/system/fire/develop_unselected.png",
40+
"DEVELOP_BG_IMG": "/system/fire/develop_bg.jpg",
4041
"DEVELOP_PRIVATE_IMG": "/system/fire/developPrivate.png",
4142
"DEVELOP_PUBLIC_IMG": "/system/fire/developPublic.png",
4243
"EZDATA_SELECTED_IMG": "/system/fire/ezdata_selected.png",

0 commit comments

Comments
 (0)