66import M5
77import widgets
88import asyncio
9- import requests
109from .. import res
11- import os
1210import binascii
1311import machine
1412import 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
5358class 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 :
0 commit comments