Skip to content

Commit fbfea38

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

3 files changed

Lines changed: 107 additions & 147 deletions

File tree

17 KB
Loading

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

Lines changed: 12 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@
1111
import os
1212
import time
1313

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

2215
class RunApp(app_base.AppBase):
2316
def __init__(self, icos: dict, data=None) -> None:
@@ -28,7 +21,7 @@ def on_install(self):
2821
self.descriptor = app_base.Descriptor(x=5 + 62 + 62, y=20 + 4, w=62, h=56)
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("/system/tough/Selection/appRun_selected.png", 5 + 62 + 62, 20 + 4)
@@ -56,21 +49,10 @@ def on_view(self):
5649
)
5750
self._mtime_label.set_text(self._mtime_text)
5851

59-
self._account_label = widgets.Label(
60-
"Account: XXABC",
61-
4 + 10 + 8,
62-
(20 + 4 + 56 + 4) + 4 + 20 + 6 + 18,
63-
w=312,
64-
fg_color=0x000000,
65-
bg_color=0xDCDDDD,
66-
font="/system/common/font/Montserrat-Medium-16.vlw",
67-
)
68-
self._account_label.set_text(self._account_text)
69-
7052
self._ver_label = widgets.Label(
7153
"Ver: UIFLOW2.0 a18",
7254
4 + 10 + 8,
73-
(20 + 4 + 56 + 4) + 4 + 20 + 6 + 18 + 18,
55+
(20 + 4 + 56 + 4) + 4 + 20 + 6 + 18,
7456
w=312,
7557
fg_color=0x000000,
7658
bg_color=0xDCDDDD,
@@ -97,7 +79,7 @@ def on_hide(self):
9779

9880
def on_exit(self):
9981
M5.Lcd.drawImage("/system/tough/Selection/appRun_unselected.png", 5 + 62 + 62, 20 + 4)
100-
del self._name_label, self._mtime_label, self._account_label, self._ver_label
82+
del self._name_label, self._mtime_label, self._ver_label
10183

10284
async def _click_event_handler(self, x, y, fw):
10385
for button in self._buttons:
@@ -117,7 +99,6 @@ def _handle_run_always(self, fw):
11799
@staticmethod
118100
def _get_file_info(path):
119101
mtime = None
120-
account = None
121102
ver = f"Ver: UIFLOW2 {esp32.firmware_info()[3]}"
122103

123104
try:
@@ -133,19 +114,13 @@ def _get_file_info(path):
133114
mtime[0], mtime[1], mtime[2], mtime[3], mtime[4], mtime[5]
134115
)
135116

136-
with open(path, "r") as f:
137-
for line in f:
138-
if line.find("Account") != -1:
139-
account = line.split(":")[1].strip()
140-
if line.find("Ver") != -1:
141-
ver = line.split(":")[1].strip()
142-
if account is not None and ver is not None:
143-
break
144-
145-
if account is None and _HAS_SERVER and M5Things.status() == 2:
146-
infos = M5Things.info()
147-
account = "Account: None" if len(infos[1]) == 0 else "Account: {:s}".format(infos[1])
148-
else:
149-
account = "Account: None"
117+
try:
118+
with open(path, "r") as f:
119+
for line in f:
120+
if line.find("Ver") != -1:
121+
ver = line.split(":")[1].strip()
122+
break
123+
except OSError:
124+
pass
150125

151-
return (mtime, account, ver)
126+
return (mtime, ver)

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

Lines changed: 95 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import M5
77
import widgets
88
import asyncio
9-
import requests
10-
import os
119
import binascii
1210
import machine
1311

@@ -34,6 +32,15 @@ class CloudStatus:
3432
DISCONNECTED = 2
3533

3634

35+
_BG_COLOR = 0xEEEEEF
36+
_LABEL_COLOR = 0x008FD7
37+
_VALUE_COLOR = 0x000000
38+
_LABEL_FONT = "/system/common/font/Montserrat-Medium-14.vlw"
39+
_VALUE_FONT = "/system/common/font/Montserrat-Medium-18.vlw"
40+
_BG_SRC = "/system/tough/Develop/bg.png"
41+
_TEXT_PANEL_W = 181
42+
43+
3744
class DevApp(app_base.AppBase):
3845
def __init__(self, icos: dict, data=None) -> None:
3946
self._lcd = icos
@@ -45,97 +52,64 @@ def on_install(self):
4552
self.descriptor = app_base.Descriptor(x=5 + 62, y=20 + 4, w=62, h=56)
4653

4754
def on_launch(self):
48-
self._mac_text = self._get_mac()
49-
self._account_text = self._get_account()
50-
self._bg_src = self._get_bg_src()
51-
self._avatar_src = self._get_avatar()
55+
self._state = self._collect_state()
5256

5357
def on_view(self):
5458
M5.Lcd.drawImage("/system/tough/Selection/develop_selected.png", 5 + 62, 20 + 4)
5559
self._origin_x = 0
5660
self._origin_y = 80
57-
self._lcd.clear()
61+
self._lcd.clear(_BG_COLOR)
5862

5963
self._bg_img = widgets.Image(use_sprite=False, parent=self._lcd)
6064
self._bg_img.set_pos(4, 4)
6165
self._bg_img.set_size(312, 156)
62-
self._bg_img.set_src(self._bg_src)
63-
64-
self._mac_label = widgets.Label(
65-
"aabbcc112233",
66-
4 + 6,
67-
4 + 57,
68-
w=177,
69-
fg_color=0x000000,
70-
bg_color=0xEEEEEF,
71-
font="/system/common/font/Montserrat-Medium-18.vlw",
72-
parent=self._lcd,
73-
)
74-
self._mac_label.set_text(self._mac_text)
75-
76-
self._account_label = widgets.Label(
77-
"XXABC",
78-
4 + 6,
79-
4 + 57 + 40,
80-
w=110,
81-
h=60,
82-
fg_color=0x000000,
83-
bg_color=0xEEEEEF,
84-
font="/system/common/font/Montserrat-Medium-18.vlw",
85-
parent=self._lcd,
86-
)
87-
self._account_label.set_text(self._account_text)
66+
self._bg_img.set_src(_BG_SRC)
67+
self._lcd.fillRect(4, 4, _TEXT_PANEL_W, 156, _BG_COLOR)
8868

89-
self._avatar_img = widgets.Image(use_sprite=False, parent=self._lcd)
90-
self._avatar_img.set_pos(130, 100)
91-
self._avatar_img.set_size(56, 56)
92-
self._avatar_img.set_scale(0.28, 0.28)
93-
self._avatar_img.set_src(self._avatar_src)
69+
self._mac_label, self._mac_value = self._create_row("Device MAC:", 8)
70+
self._code_label, self._code_value = self._create_row("Access Code:", 59)
71+
self._nick_label, self._nick_value = self._create_row("Nickname:", 110)
72+
73+
self._set_value(self._mac_value, self._state.get("mac", "-"))
74+
self._set_value(self._code_value, self._state.get("pair_code", ""), fallback="")
75+
self._set_value(self._nick_value, self._state.get("nick_name", ""), fallback="")
9476

9577
self._lcd.push(self._origin_x, self._origin_y)
9678

9779
async def on_run(self):
98-
refresh = False
9980
while True:
100-
t = self._get_bg_src()
101-
if t != self._bg_src:
102-
self._bg_src = t
103-
self._bg_img.set_src(self._bg_src)
104-
refresh = True
105-
106-
refresh and self._mac_label.set_text(self._mac_text)
81+
new_state = self._collect_state()
82+
refresh = False
10783

108-
t = self._get_account()
109-
if t != self._account_text or refresh:
110-
self._account_text = t
111-
self._account_label.set_text(self._account_text)
112-
self._lcd.push(self._origin_x, self._origin_y)
84+
if new_state["pair_code"] != self._state.get("pair_code"):
85+
self._state["pair_code"] = new_state["pair_code"]
86+
self._set_value(self._code_value, new_state["pair_code"], fallback="")
87+
refresh = True
11388

114-
t = self._get_avatar()
115-
if t != self._avatar_src:
116-
self._avatar_src = t
117-
try:
118-
os.stat(self._avatar_src)
119-
self._avatar_img.set_src(self._avatar_src)
120-
except OSError:
121-
self._dl_task = asyncio.create_task(self._dl_avatar(self._avatar_src))
122-
elif refresh:
123-
self._avatar_img._draw(False)
89+
if new_state["nick_name"] != self._state.get("nick_name"):
90+
self._state["nick_name"] = new_state["nick_name"]
91+
self._set_value(self._nick_value, new_state["nick_name"], fallback="")
92+
refresh = True
12493

12594
if refresh:
12695
self._lcd.push(self._origin_x, self._origin_y)
12796

128-
refresh = False
12997
await asyncio.sleep_ms(1500)
13098

13199
def on_hide(self):
132-
if hasattr(self, "_dl_task"):
133-
self._dl_task.cancel()
134100
self._task.cancel()
135101

136102
def on_exit(self):
137103
M5.Lcd.drawImage("/system/tough/Selection/develop_unselected.png", 5 + 62, 20 + 4)
138-
del self._bg_img, self._mac_label, self._account_label, self._avatar_img
104+
del (
105+
self._bg_img,
106+
self._mac_label,
107+
self._mac_value,
108+
self._code_label,
109+
self._code_value,
110+
self._nick_label,
111+
self._nick_value,
112+
)
139113

140114
async def _click_event_handler(self, x, y, fw):
141115
pass
@@ -149,55 +123,66 @@ async def _btnb_event_handler(self, fw):
149123
async def _btnc_event_handler(self, fw):
150124
pass
151125

152-
async def _dl_avatar(self, dst):
153-
if _HAS_SERVER is True and M5Things.status() == 2:
154-
infos = M5Things.info()
155-
if len(infos[4]) == 0:
156-
self._avatar_img.set_src("/system/common/img/avatar.jpg")
157-
else:
158-
try:
159-
rsp = requests.get("https://community.m5stack.com" + str(infos[4]))
160-
f = open(dst, "wb")
161-
f.write(rsp.content)
162-
f.close()
163-
rsp.close()
164-
self._avatar_img.set_src(dst)
165-
except:
166-
self._avatar_img.set_src("/system/common/img/avatar.jpg")
167-
finally:
168-
self._lcd.push(self._origin_x, self._origin_y)
169-
else:
170-
self._avatar_img.set_src("/system/common/img/avatar.jpg")
126+
def _create_row(self, label_text, y):
127+
label = widgets.Label(
128+
label_text,
129+
12,
130+
y,
131+
w=_TEXT_PANEL_W - 18,
132+
h=20,
133+
fg_color=_LABEL_COLOR,
134+
bg_color=_BG_COLOR,
135+
font=_LABEL_FONT,
136+
parent=self._lcd,
137+
)
138+
label.set_text(label_text)
139+
140+
value = widgets.Label(
141+
"",
142+
12,
143+
y + 22,
144+
w=_TEXT_PANEL_W - 18,
145+
h=26,
146+
fg_color=_VALUE_COLOR,
147+
bg_color=_BG_COLOR,
148+
font=_VALUE_FONT,
149+
parent=self._lcd,
150+
)
151+
value.set_long_mode(widgets.Label.LONG_DOT)
152+
return label, value
153+
154+
@staticmethod
155+
def _set_value(label, text, fallback="-"):
156+
text = fallback if text is None or text == "" else str(text)
157+
label.set_text(text)
171158

172159
@staticmethod
173160
def _get_mac():
174-
return binascii.hexlify(machine.unique_id()).upper()
161+
return binascii.hexlify(machine.unique_id()).decode("utf-8").upper()
175162

176163
@staticmethod
177-
def _get_account():
178-
if _HAS_SERVER is True and M5Things.status() == 2:
179-
infos = M5Things.info()
180-
return "None" if len(infos[1]) == 0 else infos[1]
181-
else:
182-
return "None"
164+
def _get_pair_code():
165+
if _HAS_SERVER is True:
166+
try:
167+
if M5Things.status() == 2:
168+
return M5Things.paircode() or ""
169+
except Exception:
170+
pass
171+
return ""
183172

184173
@staticmethod
185-
def _get_avatar():
186-
if _HAS_SERVER is True and M5Things.status() == 2:
187-
infos = M5Things.info()
188-
if len(infos[4]) == 0:
189-
return "/system/common/img/avatar.jpg"
190-
else:
191-
return "/system/common/img/" + str(infos[4]).split("/")[-1]
192-
else:
193-
return "/system/common/img/avatar.jpg"
194-
195-
def _get_bg_src(self):
196-
if _HAS_SERVER is True and M5Things.status() == 2:
197-
infos = M5Things.info()
198-
if infos[0] == 0:
199-
return "/system/tough/Develop/private.png"
200-
elif infos[0] in (1, 2):
201-
return "/system/tough/Develop/public.png"
202-
else:
203-
return "/system/tough/Develop/private.png"
174+
def _get_nick_name():
175+
if _HAS_SERVER is True:
176+
try:
177+
if M5Things.status() == 2:
178+
return M5Things.nick_name() or ""
179+
except Exception:
180+
pass
181+
return ""
182+
183+
def _collect_state(self):
184+
return {
185+
"mac": self._get_mac(),
186+
"pair_code": self._get_pair_code(),
187+
"nick_name": self._get_nick_name(),
188+
}

0 commit comments

Comments
 (0)