66import M5
77import widgets
88import asyncio
9- import requests
10- import os
119import binascii
1210import 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+
3744class 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