88import lvgl as lv
99import time
1010
11+ try :
12+ import webcam
13+ except Exception as e :
14+ print (f"Info: could not import webcam module: { e } " )
15+
16+
1117import mpos .apps
1218import mpos .clipboard
1319import mpos .ui
1925width = 240
2026height = 240
2127
28+ cam = None
2229# Variable to hold the current memoryview to prevent garbage collection
2330current_cam_buffer = None
2431image_dsc = None
2532image = None
2633qr_label = None
34+ scanqr_callback = None
2735
2836use_webcam = False
2937qr_button = None
3038snap_button = None
3139
40+ capture_timer = None
41+
3242status_label = None
3343status_label_cont = None
3444status_label_text = "No camera found."
@@ -56,11 +66,11 @@ def remove_bom(buffer):
5666 return buffer
5767
5868def qrdecode_one ():
59- global status_label , status_label_text
69+ global status_label , status_label_text , scanqr_callback
6070 try :
6171 import qrdecode
6272 result = qrdecode .qrdecode_rgb565 (current_cam_buffer , width , height )
63- result = bytearray ("INSERT_QR_HERE" , "utf-8" )
73+ # result = bytearray("INSERT_QR_HERE", "utf-8")
6474 if not result :
6575 status_label .set_text (status_label_text_searching )
6676 else :
@@ -71,6 +81,7 @@ def qrdecode_one():
7181 stop_qr_decoding ()
7282 mpos .clipboard .add (f"Result: { result } " )
7383 mpos .ui .back_screen ()
84+ scanqr_callback (True ,result )
7485 except ValueError as e :
7586 print ("QR ValueError: " , e )
7687 status_label .set_text (status_label_text_searching )
@@ -134,7 +145,7 @@ def qr_button_click(e):
134145
135146def try_capture (event ):
136147 #print("capturing camera frame")
137- global current_cam_buffer , image_dsc , image , use_webcam
148+ global current_cam_buffer , image_dsc , image , use_webcam , cam
138149 try :
139150 if use_webcam :
140151 current_cam_buffer = webcam .capture_frame (cam , "rgb565" )
@@ -211,7 +222,6 @@ def build_ui():
211222 status_label .set_style_text_color (lv .color_white (), 0 )
212223 status_label .set_width (lv .pct (100 ))
213224 status_label .center ()
214- mpos .ui .load_screen (main_screen )
215225
216226
217227def init_cam ():
@@ -259,28 +269,31 @@ def check_running(timer):
259269 print ("camtest.py cleanup done." )
260270
261271
262-
263- build_ui ()
264-
265- cam = init_cam ()
266- if cam :
267- image .set_rotation (900 ) # internal camera is rotated 90 degrees
268- else :
269- print ("camtest.py: no internal camera found, trying webcam on /dev/video0" )
270- try :
271- import webcam
272- cam = webcam .init ("/dev/video0" )
273- use_webcam = True
274- except Exception as e :
275- print (f"camtest.py: webcam exception: { e } " )
276-
277- if cam :
278- print ("Camera initialized, continuing..." )
279- check_running_timer = lv .timer_create (check_running , 500 , None )
280- qr_button .remove_flag (lv .obj .FLAG .HIDDEN )
281- #snap_button.remove_flag(lv.obj.FLAG.HIDDEN)
282- status_label_cont .add_flag (lv .obj .FLAG .HIDDEN )
283- capture_timer = lv .timer_create (try_capture , 100 , None )
284- start_qr_decoding ()
285- else :
286- print ("No camera found, stopping camtest.py" )
272+ def scanqr (scanqr_cb ):
273+ global scanqr_callback , cam , use_webcam , check_running_timer , status_label_cont , capture_timer , main_screen
274+ scanqr_callback = scanqr_cb
275+ build_ui ()
276+ cam = init_cam ()
277+ if cam :
278+ image .set_rotation (900 ) # internal camera is rotated 90 degrees
279+ else :
280+ print ("camtest.py: no internal camera found, trying webcam on /dev/video0" )
281+ try :
282+ cam = webcam .init ("/dev/video0" )
283+ use_webcam = True
284+ except Exception as e :
285+ print (f"camtest.py: webcam exception: { e } " )
286+ if cam :
287+ print ("Camera initialized, continuing..." )
288+ check_running_timer = lv .timer_create (check_running , 500 , None )
289+ #qr_button.remove_flag(lv.obj.FLAG.HIDDEN)
290+ #snap_button.remove_flag(lv.obj.FLAG.HIDDEN)
291+ status_label_cont .add_flag (lv .obj .FLAG .HIDDEN )
292+ capture_timer = lv .timer_create (try_capture , 100 , None )
293+ start_qr_decoding ()
294+ return main_screen
295+ else :
296+ print ("No camera found, stopping camtest.py" )
297+ scanqr_callback (False ,"" )
298+ return None
299+
0 commit comments