3 from tools
import helpers
4 from gi
.repository
import GLib
7 INTERFACE
= "lineageos.waydroid.IHardware"
8 SERVICE_NAME
= "waydroidhardware"
10 TRANSACTION_enableNFC
= 1
11 TRANSACTION_enableBluetooth
= 2
12 TRANSACTION_suspend
= 3
13 TRANSACTION_reboot
= 4
14 TRANSACTION_upgrade
= 5
16 def add_service(args
, enableNFC
, enableBluetooth
, suspend
, reboot
, upgrade
):
17 helpers
.drivers
.loadBinderNodes(args
)
19 serviceManager
= gbinder
.ServiceManager("/dev/" + args
.BINDER_DRIVER
, args
.SERVICE_MANAGER_PROTOCOL
, args
.BINDER_PROTOCOL
)
21 serviceManager
= gbinder
.ServiceManager("/dev/" + args
.BINDER_DRIVER
)
23 def response_handler(req
, code
, flags
):
25 "{}: Received transaction: {}".format(SERVICE_NAME
, code
))
26 reader
= req
.init_reader()
27 local_response
= response
.new_reply()
28 if code
== TRANSACTION_enableNFC
:
29 status
, arg1
= reader
.read_int32()
30 ret
= enableNFC(arg1
!= 0)
31 local_response
.append_int32(0)
32 local_response
.append_int32(ret
)
33 if code
== TRANSACTION_enableBluetooth
:
34 status
, arg1
= reader
.read_int32()
35 ret
= enableBluetooth(arg1
!= 0)
36 local_response
.append_int32(0)
37 local_response
.append_int32(ret
)
38 if code
== TRANSACTION_suspend
:
40 local_response
.append_int32(0)
41 if code
== TRANSACTION_reboot
:
43 local_response
.append_int32(0)
44 if code
== TRANSACTION_upgrade
:
45 arg1
= reader
.read_string16()
46 status
, arg2
= reader
.read_int32()
47 arg3
= reader
.read_string16()
48 status
, arg4
= reader
.read_int32()
49 upgrade(arg1
, arg2
, arg3
, arg4
)
50 local_response
.append_int32(0)
52 return local_response
, 0
54 def binder_presence():
55 if serviceManager
.is_present():
56 status
= serviceManager
.add_service_sync(SERVICE_NAME
, response
)
59 logging
.error("Failed to add service {}: {}".format(
60 SERVICE_NAME
, status
))
61 args
.hardwareLoop
.quit()
63 response
= serviceManager
.new_local_object(INTERFACE
, response_handler
)
64 args
.hardwareLoop
= GLib
.MainLoop()
66 status
= serviceManager
.add_presence_handler(binder_presence
)
68 args
.hardwareLoop
.run()
69 serviceManager
.remove_handler(status
)
72 logging
.error("Failed to add presence handler: {}".format(status
))