j0h

Log_N_Code

j0h
Mar 16th, 2026
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.36 KB | None | 0 0
  1. (bware) m@cker:~/Desktop/plc_toggle$ briefcase run android )^J        return self._native.read(timeout_ms)^JPY^J                      
  2.  
  3.  
  4. -- Android device ------------------------------------------------------------
  5.  
  6. Select Android device to use:
  7.  
  8.   1) moto g stylus 5G   2024 (ZY22KHMP52)
  9.   2) @Medium_Phone_API_36.1 (emulator)
  10.   3) @beePhone (emulator)
  11.   4) Create a new Android emulator
  12.  
  13. Android device: 3
  14.  
  15. In future, you can specify this device by running:
  16.  
  17.     $ briefcase run android -d "@beePhone"
  18.  
  19. [plc_toggle] Starting emulator beePhone...
  20. Starting emulator... done
  21.  
  22. [plc_toggle] Starting app on @beePhone (running emulator) (device ID emulator-5554)
  23.  
  24. [plc_toggle] Installing app...
  25. Stopping old versions of the app... done
  26. Installing new app version... done
  27. Launching app... done
  28.  
  29. [plc_toggle] Following device log output (type CTRL-C to stop log)...
  30. ===========================================================================
  31. --------- beginning of main
  32. I/ware.plc_toggl: Late-enabling -Xcheck:jni
  33. W/ware.plc_toggl: Unexpected CPU variant for X86 using defaults: x86_64
  34. D/CompatibilityChangeReporter: Compat change id reported: 171979766; UID 10105; state: ENABLED
  35. V/GraphicsEnvironment: ANGLE Developer option for 'org.beeware.plc_toggle' set to: 'default'
  36. V/GraphicsEnvironment: Neither updatable production driver nor prerelease driver is supported.
  37. D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
  38. D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
  39. D/libEGL  : loaded /vendor/lib64/egl/libEGL_emulation.so
  40. D/libEGL  : loaded /vendor/lib64/egl/libGLESv1_CM_emulation.so
  41. D/libEGL  : loaded /vendor/lib64/egl/libGLESv2_emulation.so
  42. D/MainActivity: onCreate() start
  43. W/ware.plc_toggl: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (unsupported, reflection, allowed)
  44. W/ware.plc_toggl: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (unsupported, reflection, allowed)
  45. D/MainActivity: Starting Python
  46. W/native.stderr: Could not find platform independent libraries <prefix>
  47. W/native.stderr: Could not find platform dependent libraries <exec_prefix>
  48. D/MainActivity: Running main module plc_toggle
  49. D/AndroidRuntime: Shutting down VM
  50. --------- beginning of crash
  51. E/AndroidRuntime: FATAL EXCEPTION: main
  52. E/AndroidRuntime: Process: org.beeware.plc_toggle, PID: 4136
  53. E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{org.beeware.plc_toggle/org.beeware.android.MainActivity}: com.chaquo.python.PyException: ModuleNotFoundError: No module named 'plc_toggle.android_bridge'
  54. E/AndroidRuntime:   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3635)
  55. E/AndroidRuntime:   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)
  56. E/AndroidRuntime:   at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
  57. E/AndroidRuntime:   at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
  58. E/AndroidRuntime:   at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
  59. E/AndroidRuntime:   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)
  60. E/AndroidRuntime:   at android.os.Handler.dispatchMessage(Handler.java:106)
  61. E/AndroidRuntime:   at android.os.Looper.loopOnce(Looper.java:201)
  62. E/AndroidRuntime:   at android.os.Looper.loop(Looper.java:288)
  63. E/AndroidRuntime:   at android.app.ActivityThread.main(ActivityThread.java:7839)
  64. E/AndroidRuntime:   at java.lang.reflect.Method.invoke(Native Method)
  65. E/AndroidRuntime:   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
  66. E/AndroidRuntime:   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
  67. E/AndroidRuntime: Caused by: com.chaquo.python.PyException: ModuleNotFoundError: No module named 'plc_toggle.android_bridge'
  68. E/AndroidRuntime:   at <python>.plc_toggle.app.<module>(app.py:26)
  69. E/AndroidRuntime:   at <python>.java.chaquopy.import_override(import.pxi:60)
  70. E/AndroidRuntime:   at <python>.__main__.<module>(__main__.py:1)
  71. E/AndroidRuntime:   at <python>.runpy._run_code(<frozen runpy>:88)
  72. E/AndroidRuntime:   at <python>.runpy._run_module_code(<frozen runpy>:98)
  73. E/AndroidRuntime:   at <python>.runpy.run_module(<frozen runpy>:226)
  74. E/AndroidRuntime:   at <python>.chaquopy_java.call(chaquopy_java.pyx:352)
  75. E/AndroidRuntime:   at <python>.chaquopy_java.Java_com_chaquo_python_PyObject_callAttrThrowsNative(chaquopy_java.pyx:324)
  76. E/AndroidRuntime:   at com.chaquo.python.PyObject.callAttrThrowsNative(Native Method)
  77. E/AndroidRuntime:   at com.chaquo.python.PyObject.callAttrThrows(PyObject.java:232)
  78. E/AndroidRuntime:   at com.chaquo.python.PyObject.callAttr(PyObject.java:221)
  79. E/AndroidRuntime:   at org.beeware.android.MainActivity.onCreate(MainActivity.java:105)
  80. E/AndroidRuntime:   at android.app.Activity.performCreate(Activity.java:8051)
  81. E/AndroidRuntime:   at android.app.Activity.performCreate(Activity.java:8031)
  82. E/AndroidRuntime:   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
  83. E/AndroidRuntime:   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3608)
  84. E/AndroidRuntime:   ... 12 more
  85. I/Process : Sending signal. PID: 4136 SIG: 9
  86. ##################################################################################################
  87.  
  88. import toga
  89. from toga.style import Pack
  90.  
  91.  
  92. class PlcToggleApp(toga.App):
  93.     def startup(self):
  94.         box = toga.Box(style=Pack(direction="column", padding=20))
  95.  
  96.         label = toga.Label("UI loaded", style=Pack(padding_bottom=10))
  97.         box.add(label)
  98.  
  99.         self.main_window = toga.MainWindow(title=self.formal_name)
  100.         self.main_window.content = box
  101.         self.main_window.show()
  102.  
  103.  
  104. def main():
  105.     return PlcToggleApp("PLC Toggle", "org.beeware.plc_toggle")
  106. '''
  107. #Desktop/plc_toggle/src/plc_toggle/app.py
  108. # sanity check:: The code above works, the code below crashes.
  109. import toga
  110. from toga.style import Pack
  111. from toga.style.pack import COLUMN, ROW
  112.  
  113. from .android_bridge import AndroidSerialClient
  114. from .plc_protocol import make_write_q_frame
  115.  
  116.  
  117. class PlcToggleApp(toga.App):
  118.    def startup(self):
  119.        self.client = AndroidSerialClient()
  120.        self.output_state = False
  121.  
  122.        self.port_input = toga.TextInput(value="/dev/ttyS4", style=Pack(flex=1))
  123.        self.baud_input = toga.TextInput(value="19200", style=Pack(width=100, padding_left=8))
  124.        self.device_input = toga.TextInput(value="FF", style=Pack(width=80, padding_left=8))
  125.        self.q_input = toga.TextInput(value="Q0", style=Pack(width=80, padding_left=8))
  126.  
  127.        self.status = toga.MultilineTextInput(
  128.            readonly=True,
  129.            style=Pack(flex=1, padding_top=10)
  130.        )
  131.  
  132.        open_btn = toga.Button("Open", on_press=self.open_port, style=Pack(padding_right=8))
  133.        close_btn = toga.Button("Close", on_press=self.close_port, style=Pack(padding_right=8))
  134.        toggle_btn = toga.Button("Toggle Output", on_press=self.toggle_output)
  135.  
  136.        controls = toga.Box(
  137.            style=Pack(direction=COLUMN, padding=12),
  138.            children=[
  139.                toga.Label("Serial Port"),
  140.                self.port_input,
  141.                toga.Label("Baud", style=Pack(padding_top=8)),
  142.                self.baud_input,
  143.                toga.Label("PLC Device", style=Pack(padding_top=8)),
  144.                self.device_input,
  145.                toga.Label("Output", style=Pack(padding_top=8)),
  146.                self.q_input,
  147.                toga.Box(
  148.                    style=Pack(direction=ROW, padding_top=12),
  149.                    children=[open_btn, close_btn, toggle_btn],
  150.                ),
  151.                self.status,
  152.            ],
  153.        )
  154.  
  155.        self.main_window = toga.MainWindow(title=self.formal_name)
  156.        self.main_window.content = controls
  157.        self.main_window.show()
  158.  
  159.    def log(self, msg: str):
  160.        current = self.status.value or ""
  161.        self.status.value = current + msg + "\n"
  162.  
  163.    async def open_port(self, widget):
  164.        try:
  165.            ok = self.client.open(
  166.                port=self.port_input.value.strip(),
  167.                baud=int(self.baud_input.value.strip()),
  168.            )
  169.            self.log(f"open={ok}")
  170.        except Exception as e:
  171.            self.log(f"open error: {e}")
  172.  
  173.    async def close_port(self, widget):
  174.        try:
  175.            self.client.close()
  176.            self.log("closed")
  177.        except Exception as e:
  178.            self.log(f"close error: {e}")
  179.  
  180.    async def toggle_output(self, widget):
  181.        try:
  182.            q_name = self.q_input.value.strip().upper()
  183.            device = self.device_input.value.strip().upper()
  184.            self.output_state = not self.output_state
  185.            frame = make_write_q_frame(q_name, int(self.output_state), device=device)
  186.            self.log(f"tx: {frame.hex()}")
  187.            self.client.write_bytes(frame)
  188.            reply = self.client.read_once(500)
  189.            if reply is None:
  190.                self.log("rx: <no reply>")
  191.            else:
  192.                self.log(f"rx: {reply.hex()}")
  193.        except Exception as e:
  194.            self.log(f"toggle error: {e}")
  195.  
  196.  
  197. def main():
  198.    return PlcToggleApp("PLC Toggle", "org.beeware.plctoggle")
  199.  
  200. '''
  201.  
  202.  
  203.  
  204.  
Advertisement
Add Comment
Please, Sign In to add comment