Compare commits
	
		
			50 Commits
		
	
	
		
			1.4.10
			...
			ubports/fo
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 690e4de7d5 | |||
| fddd1b7d56 | |||
| 4cdc4cfe65 | |||
| 1396126a6b | |||
| a8fe0fe5c3 | |||
| 50d6f649fa | |||
| eb631f637c | |||
| ae08826314 | |||
| 
						 | 
					a4a19a374a | ||
| 
						 | 
					00248f8da3 | ||
| 
						 | 
					418405697e | ||
| 
						 | 
					12133c9685 | ||
| 
						 | 
					50c615095b | ||
| 
						 | 
					fa6a4d7e1a | ||
| 
						 | 
					bedb4a7659 | ||
| 
						 | 
					500465507e | ||
| 
						 | 
					b8917f5985 | ||
| 
						 | 
					453595be28 | ||
| 
						 | 
					4803615920 | ||
| 
						 | 
					d4a04ab083 | ||
| 
						 | 
					5cf3d8c3cc | ||
| 
						 | 
					b319fa4dc6 | ||
| 
						 | 
					5cfa6756ee | ||
| 
						 | 
					a997d138fa | ||
| 
						 | 
					48da098644 | ||
| 
						 | 
					3d3e023fe8 | ||
| 
						 | 
					a9da4c95d2 | ||
| 
						 | 
					6407a0271c | ||
| 
						 | 
					05073a8367 | ||
| 
						 | 
					7725869a27 | ||
| 
						 | 
					7b33c6d70b | ||
| 
						 | 
					b38ddeb4c0 | ||
| 
						 | 
					db387d213a | ||
| 
						 | 
					ae0af8512f | ||
| 
						 | 
					bf51970422 | ||
| 
						 | 
					e11e9a7eb1 | ||
| 
						 | 
					606801a3c3 | ||
| 
						 | 
					881dd6eef9 | ||
| 
						 | 
					66ed8a3c7d | ||
| 
						 | 
					89f3f5886f | ||
| 
						 | 
					499e48df9a | ||
| 
						 | 
					ad536645e7 | ||
| 
						 | 
					0281a5ccdc | ||
| 
						 | 
					ce70fb9744 | ||
| 
						 | 
					4e0723ca6c | ||
| 
						 | 
					050f83a22b | ||
| 
						 | 
					736032efa0 | ||
| 
						 | 
					c6d8e8d1e6 | ||
| 
						 | 
					ee7fdd06d4 | ||
| 
						 | 
					8fa78cc777 | 
							
								
								
									
										6
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								Makefile
									
									
									
									
									
								
							@@ -23,8 +23,8 @@ all: debug release pkgconfig
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
VERSION_MAJOR = 1
 | 
			
		||||
VERSION_MINOR = 4
 | 
			
		||||
VERSION_RELEASE = 10
 | 
			
		||||
VERSION_MINOR = 6
 | 
			
		||||
VERSION_RELEASE = 0
 | 
			
		||||
 | 
			
		||||
# Version for pkg-config
 | 
			
		||||
PCVERSION = $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_RELEASE)
 | 
			
		||||
@@ -238,7 +238,7 @@ INSTALL_PKGCONFIG_DIR = $(DESTDIR)$(ABS_LIBDIR)/pkgconfig
 | 
			
		||||
install: $(INSTALL_LIB_DIR)
 | 
			
		||||
	$(INSTALL) -m 755 $(RELEASE_SO) $(INSTALL_LIB_DIR)
 | 
			
		||||
	ln -sf $(LIB_SO) $(INSTALL_LIB_DIR)/$(LIB_SYMLINK2)
 | 
			
		||||
	ln -sf $(LIB_SYMLINK2) $(INSTALL_LIB_DIR)/$(LIB_SYMLINK1)
 | 
			
		||||
	ln -sf $(LIB_SO) $(INSTALL_LIB_DIR)/$(LIB_SYMLINK1)
 | 
			
		||||
 | 
			
		||||
install-dev: install $(INSTALL_INCLUDE_DIR) $(INSTALL_PKGCONFIG_DIR)
 | 
			
		||||
	$(INSTALL_FILES) $(INCLUDE_DIR)/*.h $(INSTALL_INCLUDE_DIR)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								debian/Jenkinsfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								debian/Jenkinsfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
@Library('ubports-build-tools') _
 | 
			
		||||
 | 
			
		||||
buildAndProvideDebianPackage()
 | 
			
		||||
 | 
			
		||||
// Or if the package consists entirely of arch-independent packages:
 | 
			
		||||
// (optional optimization, will confuse BlueOcean's live view at build stage)
 | 
			
		||||
// buildAndProvideDebianPackage(/* isArchIndependent */ true)
 | 
			
		||||
 | 
			
		||||
// Optionally, to skip building on some architectures (amd64 is always built):
 | 
			
		||||
// buildAndProvideDebianPackage(false, /* ignoredArchs */ ['arm64'])
 | 
			
		||||
							
								
								
									
										141
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										141
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							@@ -1,132 +1,49 @@
 | 
			
		||||
libgbinder-radio (1.4.10) unstable; urgency=medium
 | 
			
		||||
libgbinder-radio (1.6.0-0ubports1) UNRELEASED; urgency=unknown
 | 
			
		||||
 | 
			
		||||
  * Tweaked completion callback criteria
 | 
			
		||||
  * New upstream release v1.6.0 
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Fri, 15 Apr 2022 21:58:17 +0300
 | 
			
		||||
 -- UBports package upgrader bot <dev@ubports.com>  Fri, 13 Dec 2024 04:07:25 +0000
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.4.9) unstable; urgency=medium
 | 
			
		||||
libgbinder-radio (1.5.6-0ubports1) UNRELEASED; urgency=unknown
 | 
			
		||||
 | 
			
		||||
  * Added IMS types
 | 
			
		||||
  * New upstream release v1.5.6 
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Thu, 17 Feb 2022 01:47:27 +0200
 | 
			
		||||
 -- UBports package upgrader bot <dev@ubports.com>  Thu, 09 Nov 2023 00:27:17 +0000
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.4.8) unstable; urgency=medium
 | 
			
		||||
libgbinder-radio (1.5.4-0ubports1) focal; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Fixed retries of blocking requests
 | 
			
		||||
  * Update from upstream
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Wed, 19 Jan 2022 03:32:30 +0200
 | 
			
		||||
 -- Lionel Duboeuf <lduboeuf@ouvaton.org>  Wed, 08 Jan 2023 10:52:34 +0100
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.4.7) unstable; urgency=medium
 | 
			
		||||
libgbinder-radio (1.4.2-0ubports4) focal; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Fixed owner queue logic
 | 
			
		||||
  * Rename libgbinder-radio-dev to libgbinder-radio1-dev
 | 
			
		||||
  * Generate install files correctly again
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Mon, 10 Jan 2022 01:03:28 +0200
 | 
			
		||||
 -- Guido Berhoerster <guido+gitlab.com@berhoerster.name>  Wed, 24 Nov 2021 10:52:34 +0100
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.4.6) unstable; urgency=medium
 | 
			
		||||
libgbinder-radio (1.4.2-0ubports3) focal; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Added RadioConfig API
 | 
			
		||||
  * Switch to dh version 12
 | 
			
		||||
  * Fix lintian warnings and errors
 | 
			
		||||
    * Add fix-library-symlink.patch: fix symlink according to Debian policy
 | 
			
		||||
    * Rename library package based on soname
 | 
			
		||||
    * Add long description, improve short description
 | 
			
		||||
    * Use static install files
 | 
			
		||||
    * Add section to source package
 | 
			
		||||
    * Specify homepage and VCS
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Sat, 08 Jan 2022 20:58:06 +0200
 | 
			
		||||
 -- Guido Berhoerster <guido+gitlab.com@berhoerster.name>  Mon, 15 Nov 2021 15:02:18 +0100
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.4.5) unstable; urgency=medium
 | 
			
		||||
libgbinder-radio (1.4.2-0ubports2) focal; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Added radio_req_resp2()
 | 
			
		||||
  * Bump version, no changes.
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Thu, 16 Dec 2021 01:18:54 +0200
 | 
			
		||||
 -- Guido Berhoerster <guido+gitlab.com@berhoerster.name>  Thu, 11 Nov 2021 15:02:07 +0100
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.4.4) unstable; urgency=medium
 | 
			
		||||
libgbinder-radio (1.4.2-0ubports1) focal; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Added IRadio@1.2 IndicationFilter bits
 | 
			
		||||
  * Initial packaging for UBPorts
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Tue, 14 Dec 2021 18:01:43 +0200
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.4.3) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Added RadioClient and related APIs
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Thu, 02 Dec 2021 19:08:47 +0200
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.4.2) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Don't assume that GBinderServiceManager is a GObject
 | 
			
		||||
  * Added unit tests
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Sun, 12 Sep 2021 18:05:19 +0300
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.4.1) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Added RADIO_CELL_INFO_TYPE_1_4 enum
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Thu, 20 May 2021 16:32:16 +0300
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.4.0) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Support for radio@1.4 interfaces
 | 
			
		||||
  * Fixed RadioCellInfo_1_4 definition
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Tue, 18 May 2021 18:54:52 +0300
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.2.6) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Added RadioSimApdu type
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Sun, 25 Apr 2021 14:41:32 +0300
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.2.5) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Added radio@1.3 types
 | 
			
		||||
  * Added radio@1.4 types
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Thu, 25 Mar 2021 20:13:08 +0200
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.2.4) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Added more radio@1.2 types
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Sat, 20 Mar 2021 02:41:07 +0200
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.2.3) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Reformatted radio@1.2 types
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Fri, 19 Mar 2021 05:21:52 +0200
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.2.2) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Added radio_instance_get_with_version()
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Fri, 05 Mar 2021 14:00:20 +0200
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.2.1) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Fixed backward compatibility with radio@1.0
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Fri, 05 Mar 2021 12:33:50 +0200
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.2.0) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Support for radio@1.2 interfaces
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Thu, 04 Mar 2021 13:36:51 +0200
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.0.11) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Make library executable on RPM based systems
 | 
			
		||||
  * Added req => resp mapping for radio@1.1 calls
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Thu, 01 Oct 2020 21:04:59 +0300
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.0.10) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Hide internal symbols
 | 
			
		||||
  * Respect arch specific lib dir
 | 
			
		||||
  * Ignore GLib deprecation warnings
 | 
			
		||||
  * Added constants for android.hardware.radio@1.1 interfaces
 | 
			
		||||
 | 
			
		||||
 -- Slava Monich <slava.monich@jolla.com>  Wed, 03 Jun 2020 15:24:17 +0300
 | 
			
		||||
 | 
			
		||||
libgbinder-radio (1.0.9) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Added packaging for Debian-based distros.
 | 
			
		||||
 | 
			
		||||
 -- Danct12 <danct12@disroot.org>  Tue, 24 Mar 2020 02:55:50 +0700
 | 
			
		||||
 -- Guido Berhoerster <guido+gitlab.com@berhoerster.name>  Mon, 11 Oct 2021 16:38:02 +0200
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								debian/compat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								debian/compat
									
									
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
9
 | 
			
		||||
							
								
								
									
										30
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							@@ -1,17 +1,31 @@
 | 
			
		||||
Source: libgbinder-radio
 | 
			
		||||
Priority: optional
 | 
			
		||||
Maintainer: Danct12 <danct12@disroot.org>
 | 
			
		||||
Build-Depends: debhelper (>=9), libgbinder-dev (>= 1.1.14), libglibutil-dev (>= 1.0.49)
 | 
			
		||||
Maintainer: UBports developers <devs@ubports.com>
 | 
			
		||||
Build-Depends: debhelper-compat (= 12),
 | 
			
		||||
               libgbinder-dev (>= 1.1.14),
 | 
			
		||||
               libglib2.0-dev,
 | 
			
		||||
               libglibutil-dev,
 | 
			
		||||
Standards-Version: 3.9.6
 | 
			
		||||
Section: libs
 | 
			
		||||
Homepage: https://github.com/mer-hybris/libgbinder-radio
 | 
			
		||||
Vcs-Git: https://github.com/mer-hybris/libgbinder-radio.git
 | 
			
		||||
Vcs-Browser: https://github.com/mer-hybris/libgbinder-radio
 | 
			
		||||
 | 
			
		||||
Package: libgbinder-radio-dev
 | 
			
		||||
Package: libgbinder-radio1-dev
 | 
			
		||||
Section: libdevel
 | 
			
		||||
Architecture: any
 | 
			
		||||
Depends: libgbinder-radio (= ${binary:Version}), ${misc:Depends}
 | 
			
		||||
Description: Development files for libgbinder-radio
 | 
			
		||||
Depends: libgbinder-radio1 (= ${binary:Version}),
 | 
			
		||||
         ${misc:Depends}
 | 
			
		||||
Description: Client library for Android radio interfaces (development files)
 | 
			
		||||
 A helper library based on glib which allows communicating with Android radio
 | 
			
		||||
 interfaces via Binder.
 | 
			
		||||
 | 
			
		||||
Package: libgbinder-radio
 | 
			
		||||
Package: libgbinder-radio1
 | 
			
		||||
Section: libs
 | 
			
		||||
Architecture: any
 | 
			
		||||
Depends: libgbinder (>= 1.1.14), libglibutil (>= 1.0.49), ${shlibs:Depends}, ${misc:Depends}
 | 
			
		||||
Description: Binder client library for Android radio interfaces
 | 
			
		||||
Depends: libgbinder (>= 1.0.9),
 | 
			
		||||
         ${shlibs:Depends},
 | 
			
		||||
         ${misc:Depends}
 | 
			
		||||
Description: Client library for Android radio interfaces
 | 
			
		||||
 A helper library based on glib which allows communicating with Android radio
 | 
			
		||||
 interfaces via Binder.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								debian/copyright
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								debian/copyright
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
Copyright (C) 2018-2022 Jolla Ltd.
 | 
			
		||||
Copyright (C) 2018-2022 Slava Monich <slava.monich@jolla.com>
 | 
			
		||||
Copyright (C) 2018-2021 Jolla Ltd.
 | 
			
		||||
Copyright (C) 2018-2021 Slava Monich <slava.monich@jolla.com>
 | 
			
		||||
 | 
			
		||||
You may use this file under the terms of the BSD license as follows:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								debian/libgbinder-radio1-dev.install.in
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								debian/libgbinder-radio1-dev.install.in
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
debian/tmp/@LIBDIR@/libgbinder-radio.so @LIBDIR@
 | 
			
		||||
debian/tmp/@LIBDIR@/pkgconfig/libgbinder-radio.pc @LIBDIR@/pkgconfig
 | 
			
		||||
debian/tmp/usr/include/* usr/include
 | 
			
		||||
							
								
								
									
										1
									
								
								debian/libgbinder-radio1.install.in
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/libgbinder-radio1.install.in
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
debian/tmp/@LIBDIR@/libgbinder-radio.so.* @LIBDIR@
 | 
			
		||||
							
								
								
									
										3
									
								
								debian/rules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								debian/rules
									
									
									
									
										vendored
									
									
								
							@@ -1,11 +1,12 @@
 | 
			
		||||
#!/usr/bin/make -f
 | 
			
		||||
# Uncomment to enable verbose build
 | 
			
		||||
#export DH_VERBOSE = 1
 | 
			
		||||
export DEB_BUILD_OPTIONS='nostrip debug'
 | 
			
		||||
 | 
			
		||||
LIBDIR=usr/lib/$(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
 | 
			
		||||
 | 
			
		||||
override_dh_auto_build:
 | 
			
		||||
	dh_auto_build -- LIBDIR=$(LIBDIR) release pkgconfig debian/libgbinder-radio.install debian/libgbinder-radio-dev.install
 | 
			
		||||
	dh_auto_build -- LIBDIR=$(LIBDIR) release pkgconfig debian/libgbinder-radio1.install debian/libgbinder-radio1-dev.install
 | 
			
		||||
 | 
			
		||||
override_dh_auto_install:
 | 
			
		||||
	dh_auto_install -- LIBDIR=$(LIBDIR) install-dev
 | 
			
		||||
 
 | 
			
		||||
@@ -74,6 +74,10 @@ RADIO_INTERFACE
 | 
			
		||||
radio_client_interface(
 | 
			
		||||
    RadioClient* client);
 | 
			
		||||
 | 
			
		||||
RADIO_AIDL_INTERFACE
 | 
			
		||||
radio_client_aidl_interface(
 | 
			
		||||
    RadioClient* client); /* Since 1.6.0 */
 | 
			
		||||
 | 
			
		||||
const char*
 | 
			
		||||
radio_client_slot(
 | 
			
		||||
    RadioClient* client);
 | 
			
		||||
 
 | 
			
		||||
@@ -40,6 +40,7 @@
 | 
			
		||||
/* This API exists since 1.4.6 */
 | 
			
		||||
 | 
			
		||||
#include <radio_config_types.h>
 | 
			
		||||
#include <radio_config_aidl_types.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
@@ -83,6 +84,12 @@ radio_config_new_with_version(
 | 
			
		||||
    RADIO_CONFIG_INTERFACE max_version)
 | 
			
		||||
    G_GNUC_WARN_UNUSED_RESULT;
 | 
			
		||||
 | 
			
		||||
RadioConfig*
 | 
			
		||||
radio_config_new_with_version_and_interface_type(
 | 
			
		||||
    RADIO_CONFIG_INTERFACE max_version,
 | 
			
		||||
    RADIO_INTERFACE_TYPE interface_type)
 | 
			
		||||
    G_GNUC_WARN_UNUSED_RESULT; /* Since 1.6.0 */
 | 
			
		||||
 | 
			
		||||
RadioConfig*
 | 
			
		||||
radio_config_ref(
 | 
			
		||||
    RadioConfig* config);
 | 
			
		||||
@@ -95,6 +102,10 @@ gboolean
 | 
			
		||||
radio_config_dead(
 | 
			
		||||
    RadioConfig* config);
 | 
			
		||||
 | 
			
		||||
RADIO_INTERFACE_TYPE
 | 
			
		||||
radio_config_interface_type(
 | 
			
		||||
    RadioConfig* self); /* Since 1.6.0 */
 | 
			
		||||
 | 
			
		||||
RADIO_CONFIG_INTERFACE
 | 
			
		||||
radio_config_interface(
 | 
			
		||||
    RadioConfig* config);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										161
									
								
								include/radio_config_aidl_types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								include/radio_config_aidl_types.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,161 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2024 Jollyboys Ltd
 | 
			
		||||
 *
 | 
			
		||||
 * You may use this file under the terms of the BSD license as follows:
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 *   1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *   2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *      documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *   3. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *      contributors may be used to endorse or promote products derived
 | 
			
		||||
 *      from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
 | 
			
		||||
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 | 
			
		||||
 * THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 * The views and conclusions contained in the software and documentation
 | 
			
		||||
 * are those of the authors and should not be interpreted as representing
 | 
			
		||||
 * any official policies, either expressed or implied.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef RADIO_CONFIG_AIDL_TYPES_H
 | 
			
		||||
#define RADIO_CONFIG_AIDL_TYPES_H
 | 
			
		||||
 | 
			
		||||
#include <radio_types.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
typedef enum radio_config_aidl_interface {
 | 
			
		||||
    RADIO_CONFIG_AIDL_INTERFACE_NONE = -1,
 | 
			
		||||
    RADIO_CONFIG_AIDL_INTERFACE_1,
 | 
			
		||||
    RADIO_CONFIG_AIDL_INTERFACE_COUNT
 | 
			
		||||
} RADIO_CONFIG_AIDL_INTERFACE;
 | 
			
		||||
 | 
			
		||||
#define RADIO_CONFIG_AIDL_INTERFACE_MAX (RADIO_CONFIG_AIDL_INTERFACE_COUNT - 1)
 | 
			
		||||
 | 
			
		||||
#define RADIO_CONFIG_AIDL_INSTANCE         "default"
 | 
			
		||||
#define RADIO_CONFIG_AIDL_IFACE_PREFIX     "android.hardware.radio.config."
 | 
			
		||||
#define RADIO_CONFIG_AIDL_IFACE            "IRadioConfig"
 | 
			
		||||
#define RADIO_CONFIG_AIDL_RESPONSE_IFACE   "IRadioConfigResponse"
 | 
			
		||||
#define RADIO_CONFIG_AIDL_INDICATION_IFACE "IRadioConfigIndication"
 | 
			
		||||
#define RADIO_CONFIG_AIDL                  RADIO_CONFIG_AIDL_IFACE_PREFIX RADIO_CONFIG_AIDL_IFACE
 | 
			
		||||
#define RADIO_CONFIG_AIDL_FQNAME           RADIO_CONFIG_AIDL "/" RADIO_CONFIG_AIDL_INSTANCE
 | 
			
		||||
#define RADIO_CONFIG_AIDL_RESPONSE         RADIO_CONFIG_AIDL_IFACE_PREFIX RADIO_CONFIG_AIDL_RESPONSE_IFACE
 | 
			
		||||
#define RADIO_CONFIG_AIDL_INDICATION       RADIO_CONFIG_AIDL_IFACE_PREFIX RADIO_CONFIG_AIDL_INDICATION_IFACE
 | 
			
		||||
 | 
			
		||||
/* Types defined in android.hardware.radio.config package */
 | 
			
		||||
 | 
			
		||||
/* PhoneCapability */
 | 
			
		||||
typedef struct radio_aidl_phone_capability {
 | 
			
		||||
    guint8 maxActiveData RADIO_ALIGNED(4);
 | 
			
		||||
    guint8 maxActiveInternetData RADIO_ALIGNED(4);
 | 
			
		||||
    guint8 isInternetLingeringSupported RADIO_ALIGNED(4);
 | 
			
		||||
    struct {
 | 
			
		||||
        guint32 length;
 | 
			
		||||
        guint8 data[];
 | 
			
		||||
    } logicalModemList;
 | 
			
		||||
} RadioAidlPhoneCapability;
 | 
			
		||||
 | 
			
		||||
/* SimPortInfo */
 | 
			
		||||
typedef struct radio_aidl_sim_port_info {
 | 
			
		||||
    struct {
 | 
			
		||||
        guint32 length;
 | 
			
		||||
        gchar data[];
 | 
			
		||||
    } iccId;
 | 
			
		||||
    gint32 logicalSlotId;
 | 
			
		||||
    gboolean portActive;
 | 
			
		||||
} RadioAidlSimPortInfo;
 | 
			
		||||
 | 
			
		||||
/* SimSlotStatus */
 | 
			
		||||
typedef struct radio_aidl_sim_slot_status {
 | 
			
		||||
    RADIO_CARD_STATE cardState;
 | 
			
		||||
    GString* atr;
 | 
			
		||||
    GString* eid;
 | 
			
		||||
    struct {
 | 
			
		||||
        guint32 length;
 | 
			
		||||
        RadioAidlSimPortInfo data[];
 | 
			
		||||
    } portInfo;
 | 
			
		||||
} RadioAidlSimSlotStatus;
 | 
			
		||||
 | 
			
		||||
/* Transaction codes */
 | 
			
		||||
 | 
			
		||||
/* c(req,resp,Name,CALL_NAME) */
 | 
			
		||||
#define RADIO_CONFIG_AIDL_CALL_1(c) \
 | 
			
		||||
    c(1,1,getHalDeviceCapabilities,GET_HAL_DEVICE_CAPABILITIES) \
 | 
			
		||||
    c(2,2,getNumOfLiveModems,GET_NUM_OF_LIVE_MODEMS) \
 | 
			
		||||
    c(3,3,getPhoneCapability,GET_PHONE_CAPABILITY) \
 | 
			
		||||
    c(4,4,getSimSlotsStatus,GET_SIM_SLOTS_STATUS) \
 | 
			
		||||
    c(5,5,setNumOfLiveModems,SET_NUM_OF_LIVE_MODEMS) \
 | 
			
		||||
    c(6,6,setPreferredDataModem,SET_PREFERRED_DATA_MODEM) \
 | 
			
		||||
    c(8,7,setSimSlotsMapping,SET_SIM_SLOTS_MAPPING) \
 | 
			
		||||
 | 
			
		||||
/* i(code,Name,IND_NAME) */
 | 
			
		||||
#define RADIO_CONFIG_AIDL_IND_1(i) \
 | 
			
		||||
    i(1,simSlotsStatusChanged,SIM_SLOTS_STATUS_CHANGED) \
 | 
			
		||||
 | 
			
		||||
typedef enum radio_aidl_config_req {
 | 
			
		||||
    RADIO_CONFIG_AIDL_REQ_ANY = 0,
 | 
			
		||||
    RADIO_CONFIG_AIDL_REQ_NONE = 0,
 | 
			
		||||
#define RADIO_CONFIG_AIDL_REQ_(req,resp,Name,NAME) RADIO_CONFIG_AIDL_REQ_##NAME = req,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.config.IRadioConfig v1 */
 | 
			
		||||
    RADIO_CONFIG_AIDL_REQ_SET_RESPONSE_FUNCTIONS = 7, /* setResponseFunctions */
 | 
			
		||||
    RADIO_CONFIG_AIDL_CALL_1(RADIO_CONFIG_AIDL_REQ_)
 | 
			
		||||
    RADIO_CONFIG_AIDL_1_REQ_LAST = RADIO_CONFIG_AIDL_REQ_SET_SIM_SLOTS_MAPPING,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_CONFIG_AIDL_REQ_
 | 
			
		||||
} RADIO_CONFIG_AIDL_REQ;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_CONFIG_AIDL_REQ) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_aidl_config_resp {
 | 
			
		||||
    RADIO_CONFIG_AIDL_RESP_ANY = 0,
 | 
			
		||||
    RADIO_CONFIG_AIDL_RESP_NONE = 0,
 | 
			
		||||
#define RADIO_CONFIG_AIDL_RESP_(req,resp,Name,NAME) RADIO_CONFIG_AIDL_RESP_##NAME = resp,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.config.IRadioConfigResponse v1 */
 | 
			
		||||
    RADIO_CONFIG_AIDL_CALL_1(RADIO_CONFIG_AIDL_RESP_)
 | 
			
		||||
    RADIO_CONFIG_AIDL_1_RESP_LAST = RADIO_CONFIG_AIDL_RESP_SET_SIM_SLOTS_MAPPING,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_CONFIG_AIDL_RESP_
 | 
			
		||||
} RADIO_CONFIG_AIDL_RESP;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_CONFIG_AIDL_RESP) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_aidl_config_ind {
 | 
			
		||||
    RADIO_CONFIG_AIDL_IND_ANY = 0,
 | 
			
		||||
    RADIO_CONFIG_AIDL_IND_NONE = 0,
 | 
			
		||||
#define RADIO_CONFIG_AIDL_IND_(code,Name,NAME) RADIO_CONFIG_AIDL_IND_##NAME = code,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.config.IRadioConfigIndication v1 */
 | 
			
		||||
    RADIO_CONFIG_AIDL_IND_1(RADIO_CONFIG_AIDL_IND_)
 | 
			
		||||
    RADIO_CONFIG_AIDL_1_IND_LAST = RADIO_CONFIG_AIDL_IND_SIM_SLOTS_STATUS_CHANGED,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_CONFIG_AIDL_IND_
 | 
			
		||||
} RADIO_CONFIG_AIDL_IND;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_CONFIG_AIDL_IND) == 4);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* RADIO_CONFIG_AIDL_TYPES_H */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Local Variables:
 | 
			
		||||
 * mode: C
 | 
			
		||||
 * c-basic-offset: 4
 | 
			
		||||
 * indent-tabs-mode: nil
 | 
			
		||||
 * End:
 | 
			
		||||
 */
 | 
			
		||||
@@ -47,6 +47,7 @@ typedef enum radio_config_interface {
 | 
			
		||||
    RADIO_CONFIG_INTERFACE_NONE = -1,
 | 
			
		||||
    RADIO_CONFIG_INTERFACE_1_0,
 | 
			
		||||
    RADIO_CONFIG_INTERFACE_1_1,
 | 
			
		||||
    RADIO_CONFIG_INTERFACE_1_2, /* Since 1.5.0 */
 | 
			
		||||
    RADIO_CONFIG_INTERFACE_COUNT
 | 
			
		||||
} RADIO_CONFIG_INTERFACE;
 | 
			
		||||
 | 
			
		||||
@@ -59,18 +60,25 @@ typedef enum radio_config_interface {
 | 
			
		||||
#define RADIO_CONFIG_INDICATION_IFACE "IRadioConfigIndication"
 | 
			
		||||
#define RADIO_CONFIG_IFACE_1_0(x)     RADIO_CONFIG_IFACE_PREFIX "1.0::" x
 | 
			
		||||
#define RADIO_CONFIG_IFACE_1_1(x)     RADIO_CONFIG_IFACE_PREFIX "1.1::" x
 | 
			
		||||
#define RADIO_CONFIG_IFACE_1_2(x)     RADIO_CONFIG_IFACE_PREFIX "1.2::" x
 | 
			
		||||
#define RADIO_CONFIG_1_0              RADIO_CONFIG_IFACE_1_0(RADIO_CONFIG_IFACE)
 | 
			
		||||
#define RADIO_CONFIG_1_1              RADIO_CONFIG_IFACE_1_1(RADIO_CONFIG_IFACE)
 | 
			
		||||
#define RADIO_CONFIG_1_2              RADIO_CONFIG_IFACE_1_2(RADIO_CONFIG_IFACE)
 | 
			
		||||
#define RADIO_CONFIG_1_0_FQNAME       RADIO_CONFIG_1_0 "/" RADIO_CONFIG_INSTANCE
 | 
			
		||||
#define RADIO_CONFIG_1_1_FQNAME       RADIO_CONFIG_1_1 "/" RADIO_CONFIG_INSTANCE
 | 
			
		||||
#define RADIO_CONFIG_1_2_FQNAME       RADIO_CONFIG_1_2 "/" RADIO_CONFIG_INSTANCE
 | 
			
		||||
#define RADIO_CONFIG_RESPONSE_1_0 \
 | 
			
		||||
        RADIO_CONFIG_IFACE_1_0(RADIO_CONFIG_RESPONSE_IFACE)
 | 
			
		||||
#define RADIO_CONFIG_RESPONSE_1_1 \
 | 
			
		||||
        RADIO_CONFIG_IFACE_1_1(RADIO_CONFIG_RESPONSE_IFACE)
 | 
			
		||||
#define RADIO_CONFIG_RESPONSE_1_2 \
 | 
			
		||||
        RADIO_CONFIG_IFACE_1_2(RADIO_CONFIG_RESPONSE_IFACE)
 | 
			
		||||
#define RADIO_CONFIG_INDICATION_1_0 \
 | 
			
		||||
        RADIO_CONFIG_IFACE_1_0(RADIO_CONFIG_INDICATION_IFACE)
 | 
			
		||||
#define RADIO_CONFIG_INDICATION_1_1 \
 | 
			
		||||
        RADIO_CONFIG_IFACE_1_1(RADIO_CONFIG_INDICATION_IFACE)
 | 
			
		||||
#define RADIO_CONFIG_INDICATION_1_2 \
 | 
			
		||||
        RADIO_CONFIG_IFACE_1_2(RADIO_CONFIG_INDICATION_IFACE)
 | 
			
		||||
 | 
			
		||||
/* Types defined in types.hal */
 | 
			
		||||
 | 
			
		||||
@@ -129,6 +137,9 @@ G_STATIC_ASSERT(sizeof(RadioModemsConfig) == 1);
 | 
			
		||||
#define RADIO_CONFIG_IND_1_0(i) \
 | 
			
		||||
    i(1,simSlotsStatusChanged,SIM_SLOTS_STATUS_CHANGED)
 | 
			
		||||
 | 
			
		||||
#define RADIO_CONFIG_IND_1_2(i) \
 | 
			
		||||
    i(2,simSlotsStatusChanged_1_2,SIM_SLOTS_STATUS_CHANGED_1_2) /* Since 1.5.0 */
 | 
			
		||||
 | 
			
		||||
typedef enum radio_config_req {
 | 
			
		||||
    RADIO_CONFIG_REQ_ANY = 0,
 | 
			
		||||
    RADIO_CONFIG_REQ_NONE = 0,
 | 
			
		||||
@@ -158,7 +169,11 @@ typedef enum radio_config_resp {
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.config@1.1::IRadioConfigResponse */
 | 
			
		||||
    RADIO_CONFIG_CALL_1_1(RADIO_CONFIG_RESP_)
 | 
			
		||||
    RADIO_CONFIG_1_1_RESP_LAST = RADIO_CONFIG_RESP_GET_MODEMS_CONFIG
 | 
			
		||||
    RADIO_CONFIG_1_1_RESP_LAST = RADIO_CONFIG_RESP_GET_MODEMS_CONFIG,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.config@1.2::IRadioConfigResponse */
 | 
			
		||||
    RADIO_CONFIG_RESP_GET_SIM_SLOTS_STATUS_1_2 = 7, /* Since 1.5.0 */
 | 
			
		||||
    RADIO_CONFIG_1_2_RESP_LAST = RADIO_CONFIG_RESP_GET_SIM_SLOTS_STATUS_1_2
 | 
			
		||||
#undef RADIO_CONFIG_RESP_
 | 
			
		||||
} RADIO_CONFIG_RESP;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_CONFIG_RESP) == 4);
 | 
			
		||||
@@ -170,7 +185,11 @@ typedef enum radio_config_ind {
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.config@1.0::IRadioConfigIndication */
 | 
			
		||||
    RADIO_CONFIG_IND_1_0(RADIO_CONFIG_IND_)
 | 
			
		||||
    RADIO_CONFIG_1_0_IND_LAST = RADIO_CONFIG_IND_SIM_SLOTS_STATUS_CHANGED
 | 
			
		||||
    RADIO_CONFIG_1_0_IND_LAST = RADIO_CONFIG_IND_SIM_SLOTS_STATUS_CHANGED,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.config@1.2::IRadioConfigIndication */
 | 
			
		||||
    RADIO_CONFIG_IND_1_2(RADIO_CONFIG_IND_) /* Since 1.5.0 */
 | 
			
		||||
    RADIO_CONFIG_1_2_IND_LAST = RADIO_CONFIG_IND_SIM_SLOTS_STATUS_CHANGED_1_2
 | 
			
		||||
#undef RADIO_CONFIG_IND_
 | 
			
		||||
} RADIO_CONFIG_IND;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_CONFIG_IND) == 4);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										134
									
								
								include/radio_data_types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								include/radio_data_types.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,134 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2024 Jollyboys Ltd
 | 
			
		||||
 *
 | 
			
		||||
 * You may use this file under the terms of the BSD license as follows:
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 *   1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *   2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *      documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *   3. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *      contributors may be used to endorse or promote products derived
 | 
			
		||||
 *      from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
 | 
			
		||||
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 | 
			
		||||
 * THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 * The views and conclusions contained in the software and documentation
 | 
			
		||||
 * are those of the authors and should not be interpreted as representing
 | 
			
		||||
 * any official policies, either expressed or implied.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef RADIO_DATA_TYPES_H
 | 
			
		||||
#define RADIO_DATA_TYPES_H
 | 
			
		||||
 | 
			
		||||
#include <gbinder_types.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define RADIO_DATA_INTERFACE_MAX (RADIO_DATA_INTERFACE_COUNT - 1)
 | 
			
		||||
 | 
			
		||||
#define RADIO_DATA_INSTANCE         "default"
 | 
			
		||||
#define RADIO_DATA_IFACE_PREFIX     "android.hardware.radio.data."
 | 
			
		||||
#define RADIO_DATA_IFACE            "IRadioData"
 | 
			
		||||
#define RADIO_DATA_RESPONSE_IFACE   "IRadioDataResponse"
 | 
			
		||||
#define RADIO_DATA_INDICATION_IFACE "IRadioDataIndication"
 | 
			
		||||
#define RADIO_DATA                  RADIO_DATA_IFACE_PREFIX RADIO_DATA_IFACE
 | 
			
		||||
#define RADIO_DATA_FQNAME           RADIO_DATA "/" RADIO_DATA_INSTANCE
 | 
			
		||||
#define RADIO_DATA_RESPONSE         RADIO_DATA_IFACE_PREFIX RADIO_DATA_RESPONSE_IFACE
 | 
			
		||||
#define RADIO_DATA_INDICATION       RADIO_DATA_IFACE_PREFIX RADIO_DATA_INDICATION_IFACE
 | 
			
		||||
 | 
			
		||||
/* Transaction codes */
 | 
			
		||||
 | 
			
		||||
/* c(req,resp,Name,CALL_NAME) */
 | 
			
		||||
#define RADIO_DATA_CALL_1(c) \
 | 
			
		||||
    c(1,2,allocatePduSessionId,ALLOCATE_PDU_SESSION_ID) \
 | 
			
		||||
    c(2,3,cancelHandover,CANCEL_HANDOVER) \
 | 
			
		||||
    c(3,4,deactivateDataCall,DEACTIVATE_DATA_CALL) \
 | 
			
		||||
    c(4,5,getDataCallList,GET_DATA_CALL_LIST) \
 | 
			
		||||
    c(5,6,getSlicingConfig,GET_SLICING_CONFIG) \
 | 
			
		||||
    c(6,7,releasePduSessionId,RELEASE_PDU_SESSION_ID) \
 | 
			
		||||
    c(8,8,setDataAllowed,SET_DATA_ALLOWED) \
 | 
			
		||||
    c(9,9,setDataProfile,SET_DATA_PROFILE) \
 | 
			
		||||
    c(10,10,setDataThrottling,SET_DATA_THROTTLING) \
 | 
			
		||||
    c(11,11,setInitialAttachApn,SET_INITIAL_ATTACH_APN) \
 | 
			
		||||
    c(13,12,setupDataCall,SETUP_DATA_CALL) \
 | 
			
		||||
    c(14,13,startHandover,START_HANDOVER) \
 | 
			
		||||
    c(15,14,startKeepalive,START_KEEPALIVE) \
 | 
			
		||||
    c(16,15,stopKeepalive,STOP_KEEPALIVE) \
 | 
			
		||||
 | 
			
		||||
/* i(code,Name,IND_NAME) */
 | 
			
		||||
#define RADIO_DATA_IND_1(i) \
 | 
			
		||||
    i(1,dataCallListChanged,DATA_CALL_LIST_CHANGED) \
 | 
			
		||||
    i(2,keepaliveStatus,KEEPALIVE_STATUS) \
 | 
			
		||||
    i(3,pcoData,PCO_DATA) \
 | 
			
		||||
    i(4,unthrottleApn,UNTHROTTLE_APN) \
 | 
			
		||||
    i(5,slicingConfigChanged,SLICING_CONFIG_CHANGED) \
 | 
			
		||||
 | 
			
		||||
typedef enum radio_data_req {
 | 
			
		||||
    RADIO_DATA_REQ_ANY = 0,
 | 
			
		||||
    RADIO_DATA_REQ_NONE = 0,
 | 
			
		||||
#define RADIO_DATA_REQ_(req,resp,Name,NAME) RADIO_DATA_REQ_##NAME = req,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.data.IRadioData v1 */
 | 
			
		||||
    RADIO_DATA_CALL_1(RADIO_DATA_REQ_)
 | 
			
		||||
    RADIO_DATA_REQ_RESPONSE_ACKNOWLEDGEMENT = 7, /* responseAcknowledgement */
 | 
			
		||||
    RADIO_DATA_REQ_SET_RESPONSE_FUNCTIONS = 12, /* setResponseFunctions */
 | 
			
		||||
    RADIO_DATA_1_REQ_LAST = RADIO_DATA_REQ_STOP_KEEPALIVE,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_DATA_REQ_
 | 
			
		||||
} RADIO_DATA_REQ;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_DATA_REQ) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_data_resp {
 | 
			
		||||
    RADIO_DATA_RESP_ANY = 0,
 | 
			
		||||
    RADIO_DATA_RESP_NONE = 0,
 | 
			
		||||
#define RADIO_DATA_RESP_(req,resp,Name,NAME) RADIO_DATA_RESP_##NAME = resp,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.data.IRadioDataResponse v1 */
 | 
			
		||||
    RADIO_DATA_CALL_1(RADIO_DATA_RESP_)
 | 
			
		||||
    RADIO_DATA_RESP_ACKNOWLEDGE_REQUEST = 1, /* acknowledgeRequest */
 | 
			
		||||
    RADIO_DATA_1_RESP_LAST = RADIO_DATA_RESP_STOP_KEEPALIVE,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_DATA_RESP_
 | 
			
		||||
} RADIO_DATA_RESP;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_DATA_RESP) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_data_ind {
 | 
			
		||||
    RADIO_DATA_IND_ANY = 0,
 | 
			
		||||
    RADIO_DATA_IND_NONE = 0,
 | 
			
		||||
#define RADIO_DATA_IND_(code,Name,NAME) RADIO_DATA_IND_##NAME = code,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.data.IRadioDataIndication v1 */
 | 
			
		||||
    RADIO_DATA_IND_1(RADIO_DATA_IND_)
 | 
			
		||||
    RADIO_DATA_1_IND_LAST = RADIO_DATA_IND_SLICING_CONFIG_CHANGED,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_DATA_IND_
 | 
			
		||||
} RADIO_DATA_IND;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_DATA_IND) == 4);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* RADIO_DATA_TYPES_H */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Local Variables:
 | 
			
		||||
 * mode: C
 | 
			
		||||
 * c-basic-offset: 4
 | 
			
		||||
 * indent-tabs-mode: nil
 | 
			
		||||
 * End:
 | 
			
		||||
 */
 | 
			
		||||
							
								
								
									
										123
									
								
								include/radio_ims_types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								include/radio_ims_types.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2024 Jollyboys Ltd
 | 
			
		||||
 *
 | 
			
		||||
 * You may use this file under the terms of the BSD license as follows:
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 *   1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *   2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *      documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *   3. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *      contributors may be used to endorse or promote products derived
 | 
			
		||||
 *      from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
 | 
			
		||||
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 | 
			
		||||
 * THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 * The views and conclusions contained in the software and documentation
 | 
			
		||||
 * are those of the authors and should not be interpreted as representing
 | 
			
		||||
 * any official policies, either expressed or implied.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef RADIO_IMS_TYPES_H
 | 
			
		||||
#define RADIO_IMS_TYPES_H
 | 
			
		||||
 | 
			
		||||
#include <gbinder_types.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define RADIO_IMS_INTERFACE_MAX (RADIO_IMS_INTERFACE_COUNT - 1)
 | 
			
		||||
 | 
			
		||||
#define RADIO_IMS_INSTANCE         "default"
 | 
			
		||||
#define RADIO_IMS_IFACE_PREFIX     "android.hardware.radio.ims."
 | 
			
		||||
#define RADIO_IMS_IFACE            "IRadioIms"
 | 
			
		||||
#define RADIO_IMS_RESPONSE_IFACE   "IRadioImsResponse"
 | 
			
		||||
#define RADIO_IMS_INDICATION_IFACE "IRadioImsIndication"
 | 
			
		||||
#define RADIO_IMS                  RADIO_IMS_IFACE_PREFIX RADIO_IMS_IFACE
 | 
			
		||||
#define RADIO_IMS_FQNAME           RADIO_IMS "/" RADIO_IMS_INSTANCE
 | 
			
		||||
#define RADIO_IMS_RESPONSE         RADIO_IMS_IFACE_PREFIX RADIO_IMS_RESPONSE_IFACE
 | 
			
		||||
#define RADIO_IMS_INDICATION       RADIO_IMS_IFACE_PREFIX RADIO_IMS_INDICATION_IFACE
 | 
			
		||||
 | 
			
		||||
/* Transaction codes */
 | 
			
		||||
 | 
			
		||||
/* c(req,resp,Name,CALL_NAME) */
 | 
			
		||||
#define RADIO_IMS_CALL_1(c) \
 | 
			
		||||
    c(1,1,setSrvccCallInfo,SET_SRVCC_CALL_INFO) \
 | 
			
		||||
    c(2,2,updateImsRegistrationInfo,UPDATE_IMS_REGISTRATION_INFO) \
 | 
			
		||||
    c(3,3,startImsTraffic,START_IMS_TRAFFIC) \
 | 
			
		||||
    c(4,4,stopImsTraffic,STOP_IMS_TRAFFIC) \
 | 
			
		||||
    c(5,5,triggerEpsFallback,TRIGGER_EPS_FALLBACK) \
 | 
			
		||||
    c(7,6,sendAnbrQuery,SEND_ANBR_QUERY) \
 | 
			
		||||
    c(8,7,updateImsCallStatus,UPDATE_IMS_CALL_STATUS) \
 | 
			
		||||
 | 
			
		||||
/* i(code,Name,IND_NAME) */
 | 
			
		||||
#define RADIO_IMS_IND_1(i) \
 | 
			
		||||
    i(1,onConnectionSetupFailure,ON_CONNECTION_SETUP_FAILURE) \
 | 
			
		||||
    i(2,notifyAnbr,NOTIFY_ANBR) \
 | 
			
		||||
    i(3,triggerImsDeregistration,TRIGGER_IMS_DEREGISTRATION) \
 | 
			
		||||
 | 
			
		||||
typedef enum radio_ims_req {
 | 
			
		||||
    RADIO_IMS_REQ_ANY = 0,
 | 
			
		||||
    RADIO_IMS_REQ_NONE = 0,
 | 
			
		||||
#define RADIO_IMS_REQ_(req,resp,Name,NAME) RADIO_IMS_REQ_##NAME = req,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.ims.IRadioIms v1 */
 | 
			
		||||
    RADIO_IMS_CALL_1(RADIO_IMS_REQ_)
 | 
			
		||||
    RADIO_IMS_REQ_SET_RESPONSE_FUNCTIONS = 6, /* setResponseFunctions */
 | 
			
		||||
    RADIO_IMS_1_REQ_LAST = RADIO_IMS_REQ_UPDATE_IMS_CALL_STATUS,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_IMS_REQ_
 | 
			
		||||
} RADIO_IMS_REQ;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_IMS_REQ) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_ims_resp {
 | 
			
		||||
    RADIO_IMS_RESP_ANY = 0,
 | 
			
		||||
    RADIO_IMS_RESP_NONE = 0,
 | 
			
		||||
#define RADIO_IMS_RESP_(req,resp,Name,NAME) RADIO_IMS_RESP_##NAME = resp,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.ims.IRadioImsResponse v1 */
 | 
			
		||||
    RADIO_IMS_CALL_1(RADIO_IMS_RESP_)
 | 
			
		||||
    RADIO_IMS_1_RESP_LAST = RADIO_IMS_RESP_UPDATE_IMS_CALL_STATUS,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_IMS_RESP_
 | 
			
		||||
} RADIO_IMS_RESP;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_IMS_RESP) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_ims_ind {
 | 
			
		||||
    RADIO_IMS_IND_ANY = 0,
 | 
			
		||||
    RADIO_IMS_IND_NONE = 0,
 | 
			
		||||
#define RADIO_IMS_IND_(code,Name,NAME) RADIO_IMS_IND_##NAME = code,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.ims.IRadioImsIndication v1 */
 | 
			
		||||
    RADIO_IMS_IND_1(RADIO_IMS_IND_)
 | 
			
		||||
    RADIO_IMS_1_IND_LAST = RADIO_IMS_IND_TRIGGER_IMS_DEREGISTRATION,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_IMS_IND_
 | 
			
		||||
} RADIO_IMS_IND;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_IMS_IND) == 4);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* RADIO_IMS_TYPES_H */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Local Variables:
 | 
			
		||||
 * mode: C
 | 
			
		||||
 * c-basic-offset: 4
 | 
			
		||||
 * indent-tabs-mode: nil
 | 
			
		||||
 * End:
 | 
			
		||||
 */
 | 
			
		||||
@@ -38,6 +38,13 @@
 | 
			
		||||
#define RADIO_INSTANCE_H
 | 
			
		||||
 | 
			
		||||
#include <radio_types.h>
 | 
			
		||||
#include <radio_data_types.h>
 | 
			
		||||
#include <radio_ims_types.h>
 | 
			
		||||
#include <radio_messaging_types.h>
 | 
			
		||||
#include <radio_modem_types.h>
 | 
			
		||||
#include <radio_network_types.h>
 | 
			
		||||
#include <radio_sim_types.h>
 | 
			
		||||
#include <radio_voice_types.h>
 | 
			
		||||
 | 
			
		||||
#include <glib-object.h>
 | 
			
		||||
 | 
			
		||||
@@ -60,6 +67,9 @@ struct radio_instance {
 | 
			
		||||
    RADIO_INTERFACE version;
 | 
			
		||||
    /* Since 1.4.3 */
 | 
			
		||||
    gboolean connected; /* rilConnected received */
 | 
			
		||||
    /* Since 1.6.0 */
 | 
			
		||||
    RADIO_INTERFACE_TYPE interface_type;
 | 
			
		||||
    RADIO_AIDL_INTERFACE interface_aidl;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* These were introduced in 1.4.3 and then renamed in 1.4.6 */
 | 
			
		||||
@@ -156,6 +166,15 @@ radio_instance_new_with_modem_slot_and_version(
 | 
			
		||||
    int slot_index,
 | 
			
		||||
    RADIO_INTERFACE version); /* Since 1.2.1 */
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_new_with_modem_slot_version_and_interface(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    const char* modem,
 | 
			
		||||
    int slot,
 | 
			
		||||
    RADIO_INTERFACE version,
 | 
			
		||||
    RADIO_AIDL_INTERFACE aidl_interface); /* Since 1.6.0 */
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_get(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										143
									
								
								include/radio_messaging_types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								include/radio_messaging_types.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,143 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2024 Jollyboys Ltd
 | 
			
		||||
 *
 | 
			
		||||
 * You may use this file under the terms of the BSD license as follows:
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 *   1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *   2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *      documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *   3. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *      contributors may be used to endorse or promote products derived
 | 
			
		||||
 *      from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
 | 
			
		||||
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 | 
			
		||||
 * THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 * The views and conclusions contained in the software and documentation
 | 
			
		||||
 * are those of the authors and should not be interpreted as representing
 | 
			
		||||
 * any official policies, either expressed or implied.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef RADIO_MESSAGING_TYPES_H
 | 
			
		||||
#define RADIO_MESSAGING_TYPES_H
 | 
			
		||||
 | 
			
		||||
#include <gbinder_types.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define RADIO_MESSAGING_INTERFACE_MAX (RADIO_MESSAGING_INTERFACE_COUNT - 1)
 | 
			
		||||
 | 
			
		||||
#define RADIO_MESSAGING_INSTANCE         "default"
 | 
			
		||||
#define RADIO_MESSAGING_IFACE_PREFIX     "android.hardware.radio.messaging."
 | 
			
		||||
#define RADIO_MESSAGING_IFACE            "IRadioMessaging"
 | 
			
		||||
#define RADIO_MESSAGING_RESPONSE_IFACE   "IRadioMessagingResponse"
 | 
			
		||||
#define RADIO_MESSAGING_INDICATION_IFACE "IRadioMessagingIndication"
 | 
			
		||||
#define RADIO_MESSAGING                  RADIO_MESSAGING_IFACE_PREFIX RADIO_MESSAGING_IFACE
 | 
			
		||||
#define RADIO_MESSAGING_FQNAME           RADIO_MESSAGING "/" RADIO_MESSAGING_INSTANCE
 | 
			
		||||
#define RADIO_MESSAGING_RESPONSE         RADIO_MESSAGING_IFACE_PREFIX RADIO_MESSAGING_RESPONSE_IFACE
 | 
			
		||||
#define RADIO_MESSAGING_INDICATION       RADIO_MESSAGING_IFACE_PREFIX RADIO_MESSAGING_INDICATION_IFACE
 | 
			
		||||
 | 
			
		||||
/* Transaction codes */
 | 
			
		||||
 | 
			
		||||
/* c(req,resp,Name,CALL_NAME) */
 | 
			
		||||
#define RADIO_MESSAGING_CALL_1(c) \
 | 
			
		||||
    c(1,1,acknowledgeIncomingGsmSmsWithPdu,ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU) \
 | 
			
		||||
    c(2,2,acknowledgeLastIncomingCdmaSms,ACKNOWLEDGE_LAST_INCOMING_CDMA_SMS) \
 | 
			
		||||
    c(3,3,acknowledgeLastIncomingGsmSms,ACKNOWLEDGE_LAST_INCOMING_GSM_SMS) \
 | 
			
		||||
    c(4,5,deleteSmsOnRuim,DELETE_SMS_ON_RUIM) \
 | 
			
		||||
    c(5,6,deleteSmsOnSim,DELETE_SMS_ON_SIM) \
 | 
			
		||||
    c(6,7,getCdmaBroadcastConfig,GET_CDMA_BROADCAST_CONFIG) \
 | 
			
		||||
    c(7,8,getGsmBroadcastConfig,GET_GSM_BROADCAST_CONFIG) \
 | 
			
		||||
    c(8,9,getSmscAddress,GET_SMSC_ADDRESS) \
 | 
			
		||||
    c(9,10,reportSmsMemoryStatus,REPORT_SMS_MEMORY_STATUS) \
 | 
			
		||||
    c(11,12,sendCdmaSms,SEND_CDMA_SMS) \
 | 
			
		||||
    c(12,11,sendCdmaSmsExpectMore,SEND_CDMA_SMS_EXPECT_MORE) \
 | 
			
		||||
    c(13,13,sendImsSms,SEND_IMS_SMS) \
 | 
			
		||||
    c(14,15,sendSms,SEND_SMS) \
 | 
			
		||||
    c(15,14,sendSmsExpectMore,SEND_SMS_EXPECT_MORE) \
 | 
			
		||||
    c(16,16,setCdmaBroadcastActivation,SET_CDMA_BROADCAST_ACTIVATION) \
 | 
			
		||||
    c(17,17,setCdmaBroadcastConfig,SET_CDMA_BROADCAST_CONFIG) \
 | 
			
		||||
    c(18,18,setGsmBroadcastActivation,SET_GSM_BROADCAST_ACTIVATION) \
 | 
			
		||||
    c(19,19,setGsmBroadcastConfig,SET_GSM_BROADCAST_CONFIG) \
 | 
			
		||||
    c(21,20,setSmscAddress,SET_SMSC_ADDRESS) \
 | 
			
		||||
    c(22,21,writeSmsToRuim,WRITE_SMS_TO_RUIM) \
 | 
			
		||||
    c(23,22,writeSmsToSim,WRITE_SMS_TO_SIM) \
 | 
			
		||||
 | 
			
		||||
/* i(code,Name,IND_NAME) */
 | 
			
		||||
#define RADIO_MESSAGING_IND_1(i) \
 | 
			
		||||
    i(1,cdmaNewSms,CDMA_NEW_SMS) \
 | 
			
		||||
    i(2,cdmaRuimSmsStorageFull,CDMA_RUIM_SMS_STORAGE_FULL) \
 | 
			
		||||
    i(3,newBroadcastSms,NEW_BROADCAST_SMS) \
 | 
			
		||||
    i(4,newSms,NEW_SMS) \
 | 
			
		||||
    i(5,newSmsOnSim,NEW_SMS_ON_SIM) \
 | 
			
		||||
    i(6,newSmsStatusReport,NEW_SMS_STATUS_REPORT) \
 | 
			
		||||
    i(7,simSmsStorageFull,SIM_SMS_STORAGE_FULL) \
 | 
			
		||||
 | 
			
		||||
typedef enum radio_messaging_req {
 | 
			
		||||
    RADIO_MESSAGING_REQ_ANY = 0,
 | 
			
		||||
    RADIO_MESSAGING_REQ_NONE = 0,
 | 
			
		||||
#define RADIO_MESSAGING_REQ_(req,resp,Name,NAME) RADIO_MESSAGING_REQ_##NAME = req,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.messaging.IRadioMessaging v1 */
 | 
			
		||||
    RADIO_MESSAGING_CALL_1(RADIO_MESSAGING_REQ_)
 | 
			
		||||
    RADIO_MESSAGING_REQ_RESPONSE_ACKNOWLEDGEMENT = 10, /* responseAcknowledgement */
 | 
			
		||||
    RADIO_MESSAGING_REQ_SET_RESPONSE_FUNCTIONS = 20, /* setResponseFunctions */
 | 
			
		||||
    RADIO_MESSAGING_1_REQ_LAST = RADIO_MESSAGING_REQ_WRITE_SMS_TO_SIM,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_MESSAGING_REQ_
 | 
			
		||||
} RADIO_MESSAGING_REQ;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_MESSAGING_REQ) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_messaging_resp {
 | 
			
		||||
    RADIO_MESSAGING_RESP_ANY = 0,
 | 
			
		||||
    RADIO_MESSAGING_RESP_NONE = 0,
 | 
			
		||||
#define RADIO_MESSAGING_RESP_(req,resp,Name,NAME) RADIO_MESSAGING_RESP_##NAME = resp,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.messaging.IRadioMessagingResponse v1 */
 | 
			
		||||
    RADIO_MESSAGING_CALL_1(RADIO_MESSAGING_RESP_)
 | 
			
		||||
    RADIO_MESSAGING_RESP_ACKNOWLEDGE_REQUEST = 4, /* acknowledgeRequest */
 | 
			
		||||
    RADIO_MESSAGING_1_RESP_LAST = RADIO_MESSAGING_RESP_WRITE_SMS_TO_SIM,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_MESSAGING_RESP_
 | 
			
		||||
} RADIO_MESSAGING_RESP;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_MESSAGING_RESP) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_messaging_ind {
 | 
			
		||||
    RADIO_MESSAGING_IND_ANY = 0,
 | 
			
		||||
    RADIO_MESSAGING_IND_NONE = 0,
 | 
			
		||||
#define RADIO_MESSAGING_IND_(code,Name,NAME) RADIO_MESSAGING_IND_##NAME = code,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.messaging.IRadioMessagingIndication v1 */
 | 
			
		||||
    RADIO_MESSAGING_IND_1(RADIO_MESSAGING_IND_)
 | 
			
		||||
    RADIO_MESSAGING_1_IND_LAST = RADIO_MESSAGING_IND_SIM_SMS_STORAGE_FULL,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_MESSAGING_IND_
 | 
			
		||||
} RADIO_MESSAGING_IND;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_MESSAGING_IND) == 4);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* RADIO_MESSAGING_TYPES_H */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Local Variables:
 | 
			
		||||
 * mode: C
 | 
			
		||||
 * c-basic-offset: 4
 | 
			
		||||
 * indent-tabs-mode: nil
 | 
			
		||||
 * End:
 | 
			
		||||
 */
 | 
			
		||||
							
								
								
									
										135
									
								
								include/radio_modem_types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								include/radio_modem_types.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,135 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2024 Jollyboys Ltd
 | 
			
		||||
 *
 | 
			
		||||
 * You may use this file under the terms of the BSD license as follows:
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 *   1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *   2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *      documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *   3. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *      contributors may be used to endorse or promote products derived
 | 
			
		||||
 *      from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
 | 
			
		||||
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 | 
			
		||||
 * THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 * The views and conclusions contained in the software and documentation
 | 
			
		||||
 * are those of the authors and should not be interpreted as representing
 | 
			
		||||
 * any official policies, either expressed or implied.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef RADIO_MODEM_TYPES_H
 | 
			
		||||
#define RADIO_MODEM_TYPES_H
 | 
			
		||||
 | 
			
		||||
#include <gbinder_types.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define RADIO_MODEM_INTERFACE_MAX (RADIO_MODEM_INTERFACE_COUNT - 1)
 | 
			
		||||
 | 
			
		||||
#define RADIO_MODEM_INSTANCE         "default"
 | 
			
		||||
#define RADIO_MODEM_IFACE_PREFIX     "android.hardware.radio.modem."
 | 
			
		||||
#define RADIO_MODEM_IFACE            "IRadioModem"
 | 
			
		||||
#define RADIO_MODEM_RESPONSE_IFACE   "IRadioModemResponse"
 | 
			
		||||
#define RADIO_MODEM_INDICATION_IFACE "IRadioModemIndication"
 | 
			
		||||
#define RADIO_MODEM                  RADIO_MODEM_IFACE_PREFIX RADIO_MODEM_IFACE
 | 
			
		||||
#define RADIO_MODEM_FQNAME           RADIO_MODEM "/" RADIO_MODEM_INSTANCE
 | 
			
		||||
#define RADIO_MODEM_RESPONSE         RADIO_MODEM_IFACE_PREFIX RADIO_MODEM_RESPONSE_IFACE
 | 
			
		||||
#define RADIO_MODEM_INDICATION       RADIO_MODEM_IFACE_PREFIX RADIO_MODEM_INDICATION_IFACE
 | 
			
		||||
 | 
			
		||||
/* Transaction codes */
 | 
			
		||||
 | 
			
		||||
/* c(req,resp,Name,CALL_NAME) */
 | 
			
		||||
#define RADIO_MODEM_CALL_1(c) \
 | 
			
		||||
    c(1,2,enableModem,ENABLE_MODEM) \
 | 
			
		||||
    c(2,3,getBasebandVersion,GET_BASEBAND_VERSION) \
 | 
			
		||||
    c(3,4,getDeviceIdentity,GET_DEVICE_IDENTITY) \
 | 
			
		||||
    c(4,5,getHardwareConfig,GET_HARDWARE_CONFIG) \
 | 
			
		||||
    c(5,6,getModemActivityInfo,GET_MODEM_ACTIVITY_INFO) \
 | 
			
		||||
    c(6,7,getModemStackStatus,GET_MODEM_STACK_STATUS) \
 | 
			
		||||
    c(7,8,getRadioCapability,GET_RADIO_CAPABILITY) \
 | 
			
		||||
    c(8,9,nvReadItem,NV_READ_ITEM) \
 | 
			
		||||
    c(9,10,nvResetConfig,NV_RESET_CONFIG) \
 | 
			
		||||
    c(10,11,nvWriteCdmaPrl,NV_WRITE_CDMA_PRL) \
 | 
			
		||||
    c(11,12,nvWriteItem,NV_WRITE_ITEM) \
 | 
			
		||||
    c(12,13,requestShutdown,REQUEST_SHUTDOWN) \
 | 
			
		||||
    c(14,14,sendDeviceState,SEND_DEVICE_STATE) \
 | 
			
		||||
    c(15,15,setRadioCapability,SET_RADIO_CAPABILITY) \
 | 
			
		||||
    c(16,16,setRadioPower,SET_RADIO_POWER) \
 | 
			
		||||
 | 
			
		||||
/* i(code,Name,IND_NAME) */
 | 
			
		||||
#define RADIO_MODEM_IND_1(i) \
 | 
			
		||||
    i(1,hardwareConfigChanged,HARDWARE_CONFIG_CHANGED) \
 | 
			
		||||
    i(2,modemReset,MODEM_RESET) \
 | 
			
		||||
    i(3,radioCapabilityIndication,RADIO_CAPABILITY_INDICATION) \
 | 
			
		||||
    i(4,radioStateChanged,RADIO_STATE_CHANGED) \
 | 
			
		||||
    i(5,rilConnected,RIL_CONNECTED) \
 | 
			
		||||
 | 
			
		||||
typedef enum radio_modem_req {
 | 
			
		||||
    RADIO_MODEM_REQ_ANY = 0,
 | 
			
		||||
    RADIO_MODEM_REQ_NONE = 0,
 | 
			
		||||
#define RADIO_MODEM_REQ_(req,resp,Name,NAME) RADIO_MODEM_REQ_##NAME = req,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.modem.IRadioModem v1 */
 | 
			
		||||
    RADIO_MODEM_CALL_1(RADIO_MODEM_REQ_)
 | 
			
		||||
    RADIO_MODEM_REQ_RESPONSE_ACKNOWLEDGEMENT = 13, /* responseAcknowledgement */
 | 
			
		||||
    RADIO_MODEM_REQ_SET_RESPONSE_FUNCTIONS = 17, /* setResponseFunctions */
 | 
			
		||||
    RADIO_MODEM_1_REQ_LAST = RADIO_MODEM_REQ_SET_RESPONSE_FUNCTIONS,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_MODEM_REQ_
 | 
			
		||||
} RADIO_MODEM_REQ;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_MODEM_REQ) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_modem_resp {
 | 
			
		||||
    RADIO_MODEM_RESP_ANY = 0,
 | 
			
		||||
    RADIO_MODEM_RESP_NONE = 0,
 | 
			
		||||
#define RADIO_MODEM_RESP_(req,resp,Name,NAME) RADIO_MODEM_RESP_##NAME = resp,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.modem.IRadioModemResponse v1 */
 | 
			
		||||
    RADIO_MODEM_CALL_1(RADIO_MODEM_RESP_)
 | 
			
		||||
    RADIO_MODEM_RESP_ACKNOWLEDGE_REQUEST = 1, /* acknowledgeRequest */
 | 
			
		||||
    RADIO_MODEM_1_RESP_LAST = RADIO_MODEM_RESP_SET_RADIO_POWER,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_MODEM_RESP_
 | 
			
		||||
} RADIO_MODEM_RESP;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_MODEM_RESP) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_modem_ind {
 | 
			
		||||
    RADIO_MODEM_IND_ANY = 0,
 | 
			
		||||
    RADIO_MODEM_IND_NONE = 0,
 | 
			
		||||
#define RADIO_MODEM_IND_(code,Name,NAME) RADIO_MODEM_IND_##NAME = code,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.modem.IRadioModemIndication v1 */
 | 
			
		||||
    RADIO_MODEM_IND_1(RADIO_MODEM_IND_)
 | 
			
		||||
    RADIO_MODEM_1_IND_LAST = RADIO_MODEM_IND_RIL_CONNECTED,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_MODEM_IND_
 | 
			
		||||
} RADIO_MODEM_IND;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_MODEM_IND) == 4);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* RADIO_MODEM_TYPES_H */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Local Variables:
 | 
			
		||||
 * mode: C
 | 
			
		||||
 * c-basic-offset: 4
 | 
			
		||||
 * indent-tabs-mode: nil
 | 
			
		||||
 * End:
 | 
			
		||||
 */
 | 
			
		||||
							
								
								
									
										163
									
								
								include/radio_network_types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								include/radio_network_types.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,163 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2024 Jollyboys Ltd
 | 
			
		||||
 *
 | 
			
		||||
 * You may use this file under the terms of the BSD license as follows:
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 *   1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *   2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *      documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *   3. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *      contributors may be used to endorse or promote products derived
 | 
			
		||||
 *      from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
 | 
			
		||||
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 | 
			
		||||
 * THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 * The views and conclusions contained in the software and documentation
 | 
			
		||||
 * are those of the authors and should not be interpreted as representing
 | 
			
		||||
 * any official policies, either expressed or implied.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef RADIO_NETWORK_TYPES_H
 | 
			
		||||
#define RADIO_NETWORK_TYPES_H
 | 
			
		||||
 | 
			
		||||
#include <gbinder_types.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define RADIO_NETWORK_INTERFACE_MAX (RADIO_NETWORK_INTERFACE_COUNT - 1)
 | 
			
		||||
 | 
			
		||||
#define RADIO_NETWORK_INSTANCE         "default"
 | 
			
		||||
#define RADIO_NETWORK_IFACE_PREFIX     "android.hardware.radio.network."
 | 
			
		||||
#define RADIO_NETWORK_IFACE            "IRadioNetwork"
 | 
			
		||||
#define RADIO_NETWORK_RESPONSE_IFACE   "IRadioNetworkResponse"
 | 
			
		||||
#define RADIO_NETWORK_INDICATION_IFACE "IRadioNetworkIndication"
 | 
			
		||||
#define RADIO_NETWORK                  RADIO_NETWORK_IFACE_PREFIX RADIO_NETWORK_IFACE
 | 
			
		||||
#define RADIO_NETWORK_FQNAME           RADIO_NETWORK "/" RADIO_NETWORK_INSTANCE
 | 
			
		||||
#define RADIO_NETWORK_RESPONSE         RADIO_NETWORK_IFACE_PREFIX RADIO_NETWORK_RESPONSE_IFACE
 | 
			
		||||
#define RADIO_NETWORK_INDICATION       RADIO_NETWORK_IFACE_PREFIX RADIO_NETWORK_INDICATION_IFACE
 | 
			
		||||
 | 
			
		||||
/* Transaction codes */
 | 
			
		||||
 | 
			
		||||
/* c(req,resp,Name,CALL_NAME) */
 | 
			
		||||
#define RADIO_NETWORK_CALL_1(c) \
 | 
			
		||||
    c(1,2,getAllowedNetworkTypesBitmap,GET_ALLOWED_NETWORK_TYPES_BITMAP) \
 | 
			
		||||
    c(2,3,getAvailableBandModes,GET_AVAILABLE_BAND_MODES) \
 | 
			
		||||
    c(3,4,getAvailableNetworks,GET_AVAILABLE_NETWORKS) \
 | 
			
		||||
    c(4,5,getBarringInfo,GET_BARRING_INFO) \
 | 
			
		||||
    c(5,6,getCdmaRoamingPreference,GET_CDMA_ROAMING_PREFERENCE) \
 | 
			
		||||
    c(6,7,getCellInfoList,GET_CELL_INFO_LIST) \
 | 
			
		||||
    c(7,8,getDataRegistrationState,GET_DATA_REGISTRATION_STATE) \
 | 
			
		||||
    c(8,9,getImsRegistrationState,GET_IMS_REGISTRATION_STATE) \
 | 
			
		||||
    c(9,10,getNetworkSelectionMode,GET_NETWORK_SELECTION_MODE) \
 | 
			
		||||
    c(10,11,getOperator,GET_OPERATOR) \
 | 
			
		||||
    c(11,12,getSignalStrength,GET_SIGNAL_STRENGTH) \
 | 
			
		||||
    c(12,13,getSystemSelectionChannels,GET_SYSTEM_SELECTION_CHANNELS) \
 | 
			
		||||
    c(13,14,getVoiceRadioTechnology,GET_VOICE_RADIO_TECHNOLOGY) \
 | 
			
		||||
    c(14,15,getVoiceRegistrationState,GET_VOICE_REGISTRATION_STATE) \
 | 
			
		||||
    c(15,16,isNrDualConnectivityEnabled,IS_NR_DUAL_CONNECTIVITY_ENABLED) \
 | 
			
		||||
    c(17,17,setAllowedNetworkTypesBitmap,SET_ALLOWED_NETWORK_TYPES_BITMAP) \
 | 
			
		||||
    c(18,18,setBandMode,SET_BAND_MODE) \
 | 
			
		||||
    c(19,19,setBarringPassword,SET_BARRING_PASSWORD) \
 | 
			
		||||
    c(20,20,setCdmaRoamingPreference,SET_CDMA_ROAMING_PREFERENCE) \
 | 
			
		||||
    c(21,21,setCellInfoListRate,SET_CELL_INFO_LIST_RATE) \
 | 
			
		||||
    c(22,22,setIndicationFilter,SET_INDICATION_FILTER) \
 | 
			
		||||
    c(23,23,setLinkCapacityReportingCriteria,SET_LINK_CAPACITY_REPORTING_CRITERIA) \
 | 
			
		||||
    c(24,24,setLocationUpdates,SET_LOCATION_UPDATES) \
 | 
			
		||||
    c(25,25,setNetworkSelectionModeAutomatic,SET_NETWORK_SELECTION_MODE_AUTOMATIC) \
 | 
			
		||||
    c(26,26,setNetworkSelectionModeManual,SET_NETWORK_SELECTION_MODE_MANUAL) \
 | 
			
		||||
    c(27,27,setNrDualConnectivityState,SET_NR_DUAL_CONNECTIVITY_STATE) \
 | 
			
		||||
    c(29,28,setSignalStrengthReportingCriteria,SET_SIGNAL_STRENGTH_REPORTING_CRITERIA) \
 | 
			
		||||
    c(30,29,setSuppServiceNotifications,SET_SUPP_SERVICE_NOTIFICATIONS) \
 | 
			
		||||
    c(31,30,setSystemSelectionChannels,SET_SYSTEM_SELECTION_CHANNELS) \
 | 
			
		||||
    c(32,31,startNetworkScan,START_NETWORK_SCAN) \
 | 
			
		||||
    c(33,32,stopNetworkScan,STOP_NETWORK_SCAN) \
 | 
			
		||||
    c(34,33,supplyNetworkDepersonalization,SUPPLY_NETWORK_DEPERSONALIZATION) \
 | 
			
		||||
    c(35,34,setUsageSetting,SET_USAGE_SETTING) \
 | 
			
		||||
    c(36,35,getUsageSetting,GET_USAGE_SETTING) \
 | 
			
		||||
 | 
			
		||||
/* i(code,Name,IND_NAME) */
 | 
			
		||||
#define RADIO_NETWORK_IND_1(i) \
 | 
			
		||||
    i(1,barringInfoChanged,BARRING_INFO_CHANGED) \
 | 
			
		||||
    i(2,cdmaPrlChanged,CDMA_PRL_CHANGED) \
 | 
			
		||||
    i(3,cellInfoList,CELL_INFO_LIST) \
 | 
			
		||||
    i(4,currentLinkCapacityEstimate,CURRENT_LINK_CAPACITY_ESTIMATE) \
 | 
			
		||||
    i(5,currentPhysicalChannelConfigs,CURRENT_PHYSICAL_CHANNEL_CONFIGS) \
 | 
			
		||||
    i(6,currentSignalStrength,CURRENT_SIGNAL_STRENGTH) \
 | 
			
		||||
    i(7,imsNetworkStateChanged,IMS_NETWORK_STATE_CHANGED) \
 | 
			
		||||
    i(8,networkScanResult,NETWORK_SCAN_RESULT) \
 | 
			
		||||
    i(9,networkStateChanged,NETWORK_STATE_CHANGED) \
 | 
			
		||||
    i(10,nitzTimeReceived,NITZ_TIME_RECEIVED) \
 | 
			
		||||
    i(11,registrationFailed,REGISTRATION_FAILED) \
 | 
			
		||||
    i(12,restrictedStateChanged,RESTRICTED_STATE_CHANGED) \
 | 
			
		||||
    i(13,suppSvcNotify,SUPP_SVC_NOTIFY) \
 | 
			
		||||
    i(14,voiceRadioTechChanged,VOICE_RADIO_TECH_CHANGED) \
 | 
			
		||||
 | 
			
		||||
typedef enum radio_network_req {
 | 
			
		||||
    RADIO_NETWORK_REQ_ANY = 0,
 | 
			
		||||
    RADIO_NETWORK_REQ_NONE = 0,
 | 
			
		||||
#define RADIO_NETWORK_REQ_(req,resp,Name,NAME) RADIO_NETWORK_REQ_##NAME = req,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.network.IRadioNetwork v1 */
 | 
			
		||||
    RADIO_NETWORK_CALL_1(RADIO_NETWORK_REQ_)
 | 
			
		||||
    RADIO_NETWORK_REQ_RESPONSE_ACKNOWLEDGEMENT = 16, /* responseAcknowledgement */
 | 
			
		||||
    RADIO_NETWORK_REQ_SET_RESPONSE_FUNCTIONS = 28, /* setResponseFunctions */
 | 
			
		||||
    RADIO_NETWORK_1_REQ_LAST = RADIO_NETWORK_REQ_GET_USAGE_SETTING,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_NETWORK_REQ_
 | 
			
		||||
} RADIO_NETWORK_REQ;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_NETWORK_REQ) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_network_resp {
 | 
			
		||||
    RADIO_NETWORK_RESP_ANY = 0,
 | 
			
		||||
    RADIO_NETWORK_RESP_NONE = 0,
 | 
			
		||||
#define RADIO_NETWORK_RESP_(req,resp,Name,NAME) RADIO_NETWORK_RESP_##NAME = resp,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.network.IRadioNetworkResponse v1 */
 | 
			
		||||
    RADIO_NETWORK_CALL_1(RADIO_NETWORK_RESP_)
 | 
			
		||||
    RADIO_NETWORK_RESP_ACKNOWLEDGE_REQUEST = 1, /* acknowledgeRequest */
 | 
			
		||||
    RADIO_NETWORK_1_RESP_LAST = RADIO_NETWORK_RESP_GET_USAGE_SETTING,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_NETWORK_RESP_
 | 
			
		||||
} RADIO_NETWORK_RESP;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_NETWORK_RESP) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_network_ind {
 | 
			
		||||
    RADIO_NETWORK_IND_ANY = 0,
 | 
			
		||||
    RADIO_NETWORK_IND_NONE = 0,
 | 
			
		||||
#define RADIO_NETWORK_IND_(code,Name,NAME) RADIO_NETWORK_IND_##NAME = code,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.network.IRadioNetworkIndication v1 */
 | 
			
		||||
    RADIO_NETWORK_IND_1(RADIO_NETWORK_IND_)
 | 
			
		||||
    RADIO_NETWORK_1_IND_LAST = RADIO_NETWORK_IND_VOICE_RADIO_TECH_CHANGED,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_NETWORK_IND_
 | 
			
		||||
} RADIO_NETWORK_IND;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_NETWORK_IND) == 4);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* RADIO_NETWORK_TYPES_H */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Local Variables:
 | 
			
		||||
 * mode: C
 | 
			
		||||
 * c-basic-offset: 4
 | 
			
		||||
 * indent-tabs-mode: nil
 | 
			
		||||
 * End:
 | 
			
		||||
 */
 | 
			
		||||
@@ -207,6 +207,10 @@ radio_request_set_retry_func(
 | 
			
		||||
    RadioRequest* req,
 | 
			
		||||
    RadioRequestRetryFunc retry);
 | 
			
		||||
 | 
			
		||||
void*
 | 
			
		||||
radio_request_user_data(
 | 
			
		||||
    RadioRequest* req); /* Since 1.4.11 */
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* RADIO_REQUEST_H */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										160
									
								
								include/radio_sim_types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								include/radio_sim_types.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,160 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2024 Jollyboys Ltd
 | 
			
		||||
 *
 | 
			
		||||
 * You may use this file under the terms of the BSD license as follows:
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 *   1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *   2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *      documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *   3. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *      contributors may be used to endorse or promote products derived
 | 
			
		||||
 *      from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
 | 
			
		||||
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 | 
			
		||||
 * THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 * The views and conclusions contained in the software and documentation
 | 
			
		||||
 * are those of the authors and should not be interpreted as representing
 | 
			
		||||
 * any official policies, either expressed or implied.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef RADIO_SIM_TYPES_H
 | 
			
		||||
#define RADIO_SIM_TYPES_H
 | 
			
		||||
 | 
			
		||||
#include <gbinder_types.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define RADIO_SIM_INTERFACE_MAX (RADIO_SIM_INTERFACE_COUNT - 1)
 | 
			
		||||
 | 
			
		||||
#define RADIO_SIM_INSTANCE         "default"
 | 
			
		||||
#define RADIO_SIM_IFACE_PREFIX     "android.hardware.radio.sim."
 | 
			
		||||
#define RADIO_SIM_IFACE            "IRadioSim"
 | 
			
		||||
#define RADIO_SIM_RESPONSE_IFACE   "IRadioSimResponse"
 | 
			
		||||
#define RADIO_SIM_INDICATION_IFACE "IRadioSimIndication"
 | 
			
		||||
#define RADIO_SIM                  RADIO_SIM_IFACE_PREFIX RADIO_SIM_IFACE
 | 
			
		||||
#define RADIO_SIM_FQNAME           RADIO_SIM "/" RADIO_SIM_INSTANCE
 | 
			
		||||
#define RADIO_SIM_RESPONSE         RADIO_SIM_IFACE_PREFIX RADIO_SIM_RESPONSE_IFACE
 | 
			
		||||
#define RADIO_SIM_INDICATION       RADIO_SIM_IFACE_PREFIX RADIO_SIM_INDICATION_IFACE
 | 
			
		||||
 | 
			
		||||
/* Transaction codes */
 | 
			
		||||
 | 
			
		||||
/* c(req,resp,Name,CALL_NAME) */
 | 
			
		||||
#define RADIO_SIM_CALL_1(c) \
 | 
			
		||||
    c(1,2,areUiccApplicationsEnabled,ARE_UICC_APPLICATIONS_ENABLED) \
 | 
			
		||||
    c(2,3,changeIccPin2ForApp,CHANGE_ICC_PIN2_FOR_APP) \
 | 
			
		||||
    c(3,4,changeIccPinForApp,CHANGE_ICC_PIN_FOR_APP) \
 | 
			
		||||
    c(4,5,enableUiccApplications,ENABLE_UICC_APPLICATIONS) \
 | 
			
		||||
    c(5,6,getAllowedCarriers,GET_ALLOWED_CARRIERS) \
 | 
			
		||||
    c(6,7,getCdmaSubscription,GET_CDMA_SUBSCRIPTION) \
 | 
			
		||||
    c(7,8,getCdmaSubscriptionSource,GET_CDMA_SUBSCRIPTION_SOURCE) \
 | 
			
		||||
    c(8,9,getFacilityLockForApp,GET_FACILITY_LOCK_FOR_APP) \
 | 
			
		||||
    c(9,10,getIccCardStatus,GET_ICC_CARD_STATUS) \
 | 
			
		||||
    c(10,11,getImsiForApp,GET_IMSI_FOR_APP) \
 | 
			
		||||
    c(11,12,getSimPhonebookCapacity,GET_SIM_PHONEBOOK_CAPACITY) \
 | 
			
		||||
    c(12,13,getSimPhonebookRecords,GET_SIM_PHONEBOOK_RECORDS) \
 | 
			
		||||
    c(13,14,iccCloseLogicalChannel,ICC_CLOSE_LOGICAL_CHANNEL) \
 | 
			
		||||
    c(14,15,iccIoForApp,ICC_IO_FOR_APP) \
 | 
			
		||||
    c(15,16,iccOpenLogicalChannel,ICC_OPEN_LOGICAL_CHANNEL) \
 | 
			
		||||
    c(16,17,iccTransmitApduBasicChannel,ICC_TRANSMIT_APDU_BASIC_CHANNEL) \
 | 
			
		||||
    c(17,18,iccTransmitApduLogicalChannel,ICC_TRANSMIT_APDU_LOGICAL_CHANNEL) \
 | 
			
		||||
    c(18,19,reportStkServiceIsRunning,REPORT_STK_SERVICE_IS_RUNNING) \
 | 
			
		||||
    c(19,20,requestIccSimAuthentication,REQUEST_ICC_SIM_AUTHENTICATION) \
 | 
			
		||||
    c(21,21,sendEnvelope,SEND_ENVELOPE) \
 | 
			
		||||
    c(22,22,sendEnvelopeWithStatus,SEND_ENVELOPE_WITH_STATUS) \
 | 
			
		||||
    c(23,23,sendTerminalResponseToSim,SEND_TERMINAL_RESPONSE_TO_SIM) \
 | 
			
		||||
    c(24,24,setAllowedCarriers,SET_ALLOWED_CARRIERS) \
 | 
			
		||||
    c(25,25,setCarrierInfoForImsiEncryption,SET_CARRIER_INFO_FOR_IMSI_ENCRYPTION) \
 | 
			
		||||
    c(26,26,setCdmaSubscriptionSource,SET_CDMA_SUBSCRIPTION_SOURCE) \
 | 
			
		||||
    c(27,27,setFacilityLockForApp,SET_FACILITY_LOCK_FOR_APP) \
 | 
			
		||||
    c(29,28,setSimCardPower,SET_SIM_CARD_POWER) \
 | 
			
		||||
    c(30,29,setUiccSubscription,SET_UICC_SUBSCRIPTION) \
 | 
			
		||||
    c(31,30,supplyIccPin2ForApp,SUPPLY_ICC_PIN2_FOR_APP) \
 | 
			
		||||
    c(32,31,supplyIccPinForApp,SUPPLY_ICC_PIN_FOR_APP) \
 | 
			
		||||
    c(33,32,supplyIccPuk2ForApp,SUPPLY_ICC_PUK2_FOR_APP) \
 | 
			
		||||
    c(34,33,supplyIccPukForApp,SUPPLY_ICC_PUK_FOR_APP) \
 | 
			
		||||
    c(35,34,supplySimDepersonalization,SUPPLY_SIM_DEPERSONALIZATION) \
 | 
			
		||||
    c(36,35,updateSimPhonebookRecords,UPDATE_SIM_PHONEBOOK_RECORDS) \
 | 
			
		||||
 | 
			
		||||
/* i(code,Name,IND_NAME) */
 | 
			
		||||
#define RADIO_SIM_IND_1(i) \
 | 
			
		||||
    i(1,carrierInfoForImsiEncryption,CARRIER_INFO_FOR_IMSI_ENCRYPTION) \
 | 
			
		||||
    i(2,cdmaSubscriptionSourceChanged,CDMA_SUBSCRIPTION_SOURCE_CHANGED) \
 | 
			
		||||
    i(3,simPhonebookChanged,SIM_PHONEBOOK_CHANGED) \
 | 
			
		||||
    i(4,simPhonebookRecordsReceived,SIM_PHONEBOOK_RECORDS_RECEIVED) \
 | 
			
		||||
    i(5,simRefresh,SIM_REFRESH) \
 | 
			
		||||
    i(6,simStatusChanged,SIM_STATUS_CHANGED) \
 | 
			
		||||
    i(7,stkEventNotify,STK_EVENT_NOTIFY) \
 | 
			
		||||
    i(8,stkProactiveCommand,STK_PROACTIVE_COMMAND) \
 | 
			
		||||
    i(9,stkSessionEnd,STK_SESSION_END) \
 | 
			
		||||
    i(10,subscriptionStatusChanged,SUBSCRIPTION_STATUS_CHANGED) \
 | 
			
		||||
    i(11,uiccApplicationsEnablementChanged,UICC_APPLICATIONS_ENABLEMENT_CHANGED) \
 | 
			
		||||
 | 
			
		||||
typedef enum radio_sim_req {
 | 
			
		||||
    RADIO_SIM_REQ_ANY = 0,
 | 
			
		||||
    RADIO_SIM_REQ_NONE = 0,
 | 
			
		||||
#define RADIO_SIM_REQ_(req,resp,Name,NAME) RADIO_SIM_REQ_##NAME = req,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.sim.IRadioSim v1 */
 | 
			
		||||
    RADIO_SIM_CALL_1(RADIO_SIM_REQ_)
 | 
			
		||||
    RADIO_SIM_REQ_RESPONSE_ACKNOWLEDGEMENT = 20, /* responseAcknowledgement */
 | 
			
		||||
    RADIO_SIM_REQ_SET_RESPONSE_FUNCTIONS = 28, /* setResponseFunctions */
 | 
			
		||||
    RADIO_SIM_1_REQ_LAST = RADIO_SIM_REQ_UPDATE_SIM_PHONEBOOK_RECORDS,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_SIM_REQ_
 | 
			
		||||
} RADIO_SIM_REQ;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_SIM_REQ) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_sim_resp {
 | 
			
		||||
    RADIO_SIM_RESP_ANY = 0,
 | 
			
		||||
    RADIO_SIM_RESP_NONE = 0,
 | 
			
		||||
#define RADIO_SIM_RESP_(req,resp,Name,NAME) RADIO_SIM_RESP_##NAME = resp,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.sim.IRadioSimResponse v1 */
 | 
			
		||||
    RADIO_SIM_CALL_1(RADIO_SIM_RESP_)
 | 
			
		||||
    RADIO_SIM_RESP_ACKNOWLEDGE_REQUEST = 1, /* acknowledgeRequest */
 | 
			
		||||
    RADIO_SIM_1_RESP_LAST = RADIO_SIM_RESP_UPDATE_SIM_PHONEBOOK_RECORDS,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_SIM_RESP_
 | 
			
		||||
} RADIO_SIM_RESP;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_SIM_RESP) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_sim_ind {
 | 
			
		||||
    RADIO_SIM_IND_ANY = 0,
 | 
			
		||||
    RADIO_SIM_IND_NONE = 0,
 | 
			
		||||
#define RADIO_SIM_IND_(code,Name,NAME) RADIO_SIM_IND_##NAME = code,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.sim.IRadioSimIndication v1 */
 | 
			
		||||
    RADIO_SIM_IND_1(RADIO_SIM_IND_)
 | 
			
		||||
    RADIO_SIM_1_IND_LAST = RADIO_SIM_IND_UICC_APPLICATIONS_ENABLEMENT_CHANGED,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_SIM_IND_
 | 
			
		||||
} RADIO_SIM_IND;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_SIM_IND) == 4);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* RADIO_SIM_TYPES_H */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Local Variables:
 | 
			
		||||
 * mode: C
 | 
			
		||||
 * c-basic-offset: 4
 | 
			
		||||
 * indent-tabs-mode: nil
 | 
			
		||||
 * End:
 | 
			
		||||
 */
 | 
			
		||||
@@ -62,9 +62,28 @@ typedef enum radio_interface {
 | 
			
		||||
    RADIO_INTERFACE_1_2,
 | 
			
		||||
    RADIO_INTERFACE_1_3,
 | 
			
		||||
    RADIO_INTERFACE_1_4,
 | 
			
		||||
    RADIO_INTERFACE_1_5, /* Since 1.5.0 */
 | 
			
		||||
    RADIO_INTERFACE_COUNT
 | 
			
		||||
} RADIO_INTERFACE; /* Since 1.2.0 */
 | 
			
		||||
 | 
			
		||||
typedef enum radio_aidl_interface {
 | 
			
		||||
    RADIO_AIDL_INTERFACE_NONE = -1,
 | 
			
		||||
    RADIO_DATA_INTERFACE,
 | 
			
		||||
    RADIO_IMS_INTERFACE,
 | 
			
		||||
    RADIO_MESSAGING_INTERFACE,
 | 
			
		||||
    RADIO_MODEM_INTERFACE,
 | 
			
		||||
    RADIO_NETWORK_INTERFACE,
 | 
			
		||||
    RADIO_SIM_INTERFACE,
 | 
			
		||||
    RADIO_VOICE_INTERFACE,
 | 
			
		||||
    RADIO_AIDL_INTERFACE_COUNT
 | 
			
		||||
} RADIO_AIDL_INTERFACE; /* Since 1.6.0 */
 | 
			
		||||
 | 
			
		||||
typedef enum radio_interface_type {
 | 
			
		||||
    RADIO_INTERFACE_TYPE_NONE,
 | 
			
		||||
    RADIO_INTERFACE_TYPE_HIDL,
 | 
			
		||||
    RADIO_INTERFACE_TYPE_AIDL,
 | 
			
		||||
} RADIO_INTERFACE_TYPE; /* Since 1.6.0 */
 | 
			
		||||
 | 
			
		||||
typedef enum radio_observer_priority {
 | 
			
		||||
    RADIO_OBSERVER_PRIORITY_LOWEST,
 | 
			
		||||
    RADIO_OBSERVER_PRIORITY_DEFAULT = 2,
 | 
			
		||||
@@ -80,21 +99,25 @@ typedef enum radio_observer_priority {
 | 
			
		||||
#define RADIO_IFACE_1_2(x)     RADIO_IFACE_PREFIX "1.2::" x
 | 
			
		||||
#define RADIO_IFACE_1_3(x)     RADIO_IFACE_PREFIX "1.3::" x
 | 
			
		||||
#define RADIO_IFACE_1_4(x)     RADIO_IFACE_PREFIX "1.4::" x
 | 
			
		||||
#define RADIO_IFACE_1_5(x)     RADIO_IFACE_PREFIX "1.5::" x
 | 
			
		||||
#define RADIO_1_0              RADIO_IFACE_1_0(RADIO_IFACE)
 | 
			
		||||
#define RADIO_1_1              RADIO_IFACE_1_1(RADIO_IFACE)
 | 
			
		||||
#define RADIO_1_2              RADIO_IFACE_1_2(RADIO_IFACE)
 | 
			
		||||
#define RADIO_1_3              RADIO_IFACE_1_3(RADIO_IFACE)
 | 
			
		||||
#define RADIO_1_4              RADIO_IFACE_1_4(RADIO_IFACE)
 | 
			
		||||
#define RADIO_1_5              RADIO_IFACE_1_5(RADIO_IFACE)
 | 
			
		||||
#define RADIO_RESPONSE_1_0     RADIO_IFACE_1_0(RADIO_RESPONSE_IFACE)
 | 
			
		||||
#define RADIO_RESPONSE_1_1     RADIO_IFACE_1_1(RADIO_RESPONSE_IFACE)
 | 
			
		||||
#define RADIO_RESPONSE_1_2     RADIO_IFACE_1_2(RADIO_RESPONSE_IFACE)
 | 
			
		||||
#define RADIO_RESPONSE_1_3     RADIO_IFACE_1_3(RADIO_RESPONSE_IFACE)
 | 
			
		||||
#define RADIO_RESPONSE_1_4     RADIO_IFACE_1_4(RADIO_RESPONSE_IFACE)
 | 
			
		||||
#define RADIO_RESPONSE_1_5     RADIO_IFACE_1_5(RADIO_RESPONSE_IFACE)
 | 
			
		||||
#define RADIO_INDICATION_1_0   RADIO_IFACE_1_0(RADIO_INDICATION_IFACE)
 | 
			
		||||
#define RADIO_INDICATION_1_1   RADIO_IFACE_1_1(RADIO_INDICATION_IFACE)
 | 
			
		||||
#define RADIO_INDICATION_1_2   RADIO_IFACE_1_2(RADIO_INDICATION_IFACE)
 | 
			
		||||
#define RADIO_INDICATION_1_3   RADIO_IFACE_1_3(RADIO_INDICATION_IFACE)
 | 
			
		||||
#define RADIO_INDICATION_1_4   RADIO_IFACE_1_4(RADIO_INDICATION_IFACE)
 | 
			
		||||
#define RADIO_INDICATION_1_5   RADIO_IFACE_1_5(RADIO_INDICATION_IFACE)
 | 
			
		||||
 | 
			
		||||
/* Types defined in types.hal */
 | 
			
		||||
 | 
			
		||||
@@ -222,6 +245,12 @@ typedef enum radio_reg_state {
 | 
			
		||||
} RADIO_REG_STATE;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_REG_STATE) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_reg_access_technology_specific_info_type {
 | 
			
		||||
    RADIO_REG_ACCESS_TECHNOLOGY_SPECIFIC_INFO_NONE = 0,
 | 
			
		||||
    RADIO_REG_ACCESS_TECHNOLOGY_SPECIFIC_INFO_CDMA = 1,
 | 
			
		||||
    RADIO_REG_ACCESS_TECHNOLOGY_SPECIFIC_INFO_EUTRAN = 2
 | 
			
		||||
} RADIO_REG_ACCESS_TECHNOLOGY_SPECIFIC_INFO_TYPE; /* Since 1.5.0 */
 | 
			
		||||
 | 
			
		||||
typedef enum radio_ind_filter {
 | 
			
		||||
    RADIO_IND_FILTER_NONE = 0,
 | 
			
		||||
    RADIO_IND_FILTER_SIGNAL_STRENGTH = 0x01,
 | 
			
		||||
@@ -234,7 +263,14 @@ typedef enum radio_ind_filter {
 | 
			
		||||
    /* Since 1.4.4 (those appeared in IRadio@1.2) */
 | 
			
		||||
    RADIO_IND_FILTER_LINK_CAPACITY_ESTIMATE = 0x08,
 | 
			
		||||
    RADIO_IND_FILTER_PHYSICAL_CHANNEL_CONFIG = 0x10,
 | 
			
		||||
    RADIO_IND_FILTER_ALL_1_2 = ~0
 | 
			
		||||
    RADIO_IND_FILTER_ALL_1_2 =
 | 
			
		||||
        RADIO_IND_FILTER_ALL |
 | 
			
		||||
        RADIO_IND_FILTER_LINK_CAPACITY_ESTIMATE |
 | 
			
		||||
        RADIO_IND_FILTER_PHYSICAL_CHANNEL_CONFIG,
 | 
			
		||||
    /* Since 1.5.5 (those appeared in IRadio@1.5) */
 | 
			
		||||
    RADIO_IND_FILTER_REGISTRATION_FAILURE = 0x20,
 | 
			
		||||
    RADIO_IND_FILTER_BARRING_INFO = 0x40,
 | 
			
		||||
    RADIO_IND_FILTER_ALL_1_5 = ~0
 | 
			
		||||
} RADIO_IND_FILTER;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_IND_FILTER) == 4);
 | 
			
		||||
 | 
			
		||||
@@ -275,6 +311,52 @@ typedef enum radio_cell_info_type_1_4 {
 | 
			
		||||
    RADIO_CELL_INFO_1_4_NR
 | 
			
		||||
} RADIO_CELL_INFO_TYPE_1_4; /* Since 1.4.1 */
 | 
			
		||||
 | 
			
		||||
/* Cast guint8 RadioCellInfo_1_5.cellInfoType to this. */
 | 
			
		||||
typedef enum radio_cell_info_type_1_5 {
 | 
			
		||||
    RADIO_CELL_INFO_1_5_GSM = 0,
 | 
			
		||||
    RADIO_CELL_INFO_1_5_WCDMA,
 | 
			
		||||
    RADIO_CELL_INFO_1_5_TD_SCDMA,
 | 
			
		||||
    RADIO_CELL_INFO_1_5_LTE,
 | 
			
		||||
    RADIO_CELL_INFO_1_5_NR,
 | 
			
		||||
    RADIO_CELL_INFO_1_5_CDMA
 | 
			
		||||
} RADIO_CELL_INFO_TYPE_1_5; /* Since 1.5.0 */
 | 
			
		||||
 | 
			
		||||
/* Cast guint8 RadioCellIdentity_1_5.cellIdentityType to this. */
 | 
			
		||||
typedef enum radio_cell_identity_type_1_5 {
 | 
			
		||||
    RADIO_CELL_IDENTITY_1_5_NONE = 0,
 | 
			
		||||
    RADIO_CELL_IDENTITY_1_5_GSM,
 | 
			
		||||
    RADIO_CELL_IDENTITY_1_5_WCDMA,
 | 
			
		||||
    RADIO_CELL_IDENTITY_1_5_TD_SCDMA,
 | 
			
		||||
    RADIO_CELL_IDENTITY_1_5_CDMA,
 | 
			
		||||
    RADIO_CELL_IDENTITY_1_5_LTE,
 | 
			
		||||
    RADIO_CELL_IDENTITY_1_5_NR
 | 
			
		||||
} RADIO_CELL_IDENTITY_TYPE_1_5; /* Since 1.5.0 */
 | 
			
		||||
 | 
			
		||||
/* Valid values of RadioNetworkScanRequest_1_5::type */
 | 
			
		||||
typedef enum radio_network_scan_specifier_1_5_type {
 | 
			
		||||
    RADIO_NETWORK_SCAN_SPECIFIER_1_5_GERAN = 0,
 | 
			
		||||
    RADIO_NETWORK_SCAN_SPECIFIER_1_5_UTRAN,
 | 
			
		||||
    RADIO_NETWORK_SCAN_SPECIFIER_1_5_EUTRAN,
 | 
			
		||||
    RADIO_NETWORK_SCAN_SPECIFIER_1_5_NGRAN
 | 
			
		||||
} RADIO_NETWORK_SCAN_SPECIFIER_1_5_TYPE; /* Since 1.5.2 */
 | 
			
		||||
 | 
			
		||||
typedef enum radio_frequency_info_type {
 | 
			
		||||
    RADIO_FREQUENCY_INFO_TYPE_RANGE,
 | 
			
		||||
    RADIO_FREQUENCY_INFO_TYPE_CHANNEL_NUMBER,
 | 
			
		||||
} RADIO_FREQUENCY_INFO_TYPE; /* Since 1.5.4 */;
 | 
			
		||||
 | 
			
		||||
typedef enum radio_frequency_range {
 | 
			
		||||
    /* Indicates the frequency range is below 1GHz. */
 | 
			
		||||
    RADIO_FREQUENCY_RANGE_LOW = 1,
 | 
			
		||||
    /* Indicates the frequency range is between 1GHz and 3GHz. */
 | 
			
		||||
    RADIO_FREQUENCY_RANGE_MID,
 | 
			
		||||
    /* Indicates the frequency range is between 3GHz and 6GHz. */
 | 
			
		||||
    RADIO_FREQUENCY_RANGE_HIGH,
 | 
			
		||||
    /* Indicates the frequency range is above 6GHz (millimeter wave frequency). */
 | 
			
		||||
    RADIO_FREQUENCY_RANGE_MMWAVE,
 | 
			
		||||
} RADIO_FREQUENCY_RANGE; /* Since 1.5.4 */;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_FREQUENCY_RANGE) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_tech {
 | 
			
		||||
    RADIO_TECH_UNKNOWN = 0,
 | 
			
		||||
    RADIO_TECH_GPRS,
 | 
			
		||||
@@ -295,7 +377,8 @@ typedef enum radio_tech {
 | 
			
		||||
    RADIO_TECH_GSM,
 | 
			
		||||
    RADIO_TECH_TD_SCDMA,
 | 
			
		||||
    RADIO_TECH_IWLAN,
 | 
			
		||||
    RADIO_TECH_LTE_CA
 | 
			
		||||
    RADIO_TECH_LTE_CA,
 | 
			
		||||
    RADIO_TECH_NR /* Since 1.5.4 */
 | 
			
		||||
} RADIO_TECH;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_TECH) == 4);
 | 
			
		||||
 | 
			
		||||
@@ -320,7 +403,8 @@ typedef enum radio_access_family {
 | 
			
		||||
    RAF_GSM = (1 << RADIO_TECH_GSM),
 | 
			
		||||
    RAF_TD_SCDMA = (1 << RADIO_TECH_TD_SCDMA),
 | 
			
		||||
    RAF_IWLAN = (1 << RADIO_TECH_IWLAN),
 | 
			
		||||
    RAF_LTE_CA = (1 << RADIO_TECH_LTE_CA)
 | 
			
		||||
    RAF_LTE_CA = (1 << RADIO_TECH_LTE_CA),
 | 
			
		||||
    RAF_NR = (1 << RADIO_TECH_NR) /* Since 1.5.4 */
 | 
			
		||||
} RADIO_ACCESS_FAMILY;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_ACCESS_FAMILY) == 4);
 | 
			
		||||
 | 
			
		||||
@@ -345,10 +429,12 @@ typedef enum radio_apn_types {
 | 
			
		||||
    RADIO_APN_TYPE_IA = 1 << 8,
 | 
			
		||||
    RADIO_APN_TYPE_EMERGENCY = 1 << 9,
 | 
			
		||||
    RADIO_APN_TYPE_MCX = 1 << 10, /* Since 1.2.5 */
 | 
			
		||||
    RADIO_APN_TYPE_XCAP = 1 << 11, /* Since 1.5.0 */
 | 
			
		||||
    RADIO_APN_TYPE_ALL = RADIO_APN_TYPE_DEFAULT | RADIO_APN_TYPE_MMS |
 | 
			
		||||
        RADIO_APN_TYPE_SUPL | RADIO_APN_TYPE_DUN | RADIO_APN_TYPE_HIPRI |
 | 
			
		||||
        RADIO_APN_TYPE_FOTA | RADIO_APN_TYPE_IMS | RADIO_APN_TYPE_CBS |
 | 
			
		||||
        RADIO_APN_TYPE_IA | RADIO_APN_TYPE_EMERGENCY | RADIO_APN_TYPE_MCX
 | 
			
		||||
        RADIO_APN_TYPE_IA | RADIO_APN_TYPE_EMERGENCY | RADIO_APN_TYPE_MCX |
 | 
			
		||||
        RADIO_APN_TYPE_XCAP
 | 
			
		||||
} RADIO_APN_TYPES;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_APN_TYPES) == 4);
 | 
			
		||||
 | 
			
		||||
@@ -460,16 +546,29 @@ typedef enum radio_data_request_reason {
 | 
			
		||||
} RADIO_DATA_REQUEST_REASON; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_DATA_REQUEST_REASON) == 4);
 | 
			
		||||
 | 
			
		||||
/* This is AccessNetwork from types.hal */
 | 
			
		||||
typedef enum radio_access_network {
 | 
			
		||||
    RADIO_ACCESS_NETWORK_UNKNOWN,
 | 
			
		||||
    RADIO_ACCESS_NETWORK_GERAN,
 | 
			
		||||
    RADIO_ACCESS_NETWORK_UTRAN,
 | 
			
		||||
    RADIO_ACCESS_NETWORK_EUTRAN,
 | 
			
		||||
    RADIO_ACCESS_NETWORK_CDMA2000,
 | 
			
		||||
    RADIO_ACCESS_NETWORK_IWLAN
 | 
			
		||||
    RADIO_ACCESS_NETWORK_IWLAN,
 | 
			
		||||
    RADIO_ACCESS_NETWORK_NGRAN /* Since 1.5.0 */
 | 
			
		||||
} RADIO_ACCESS_NETWORK; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_ACCESS_NETWORK) == 4);
 | 
			
		||||
 | 
			
		||||
/* And this is RadioAccessNetworks (easy to confuse with AccessNetwork) */
 | 
			
		||||
typedef enum radio_access_networks {
 | 
			
		||||
    RADIO_ACCESS_NETWORKS_UNKNOWN,
 | 
			
		||||
    RADIO_ACCESS_NETWORKS_GERAN,
 | 
			
		||||
    RADIO_ACCESS_NETWORKS_UTRAN,
 | 
			
		||||
    RADIO_ACCESS_NETWORKS_EUTRAN,
 | 
			
		||||
    RADIO_ACCESS_NETWORKS_NGRAN,
 | 
			
		||||
    RADIO_ACCESS_NETWORKS_CDMA2000
 | 
			
		||||
} RADIO_ACCESS_NETWORKS; /* Since 1.5.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_ACCESS_NETWORKS) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_data_profile_type {
 | 
			
		||||
    RADIO_DATA_PROFILE_COMMON,
 | 
			
		||||
    RADIO_DATA_PROFILE_3GPP,
 | 
			
		||||
@@ -527,6 +626,12 @@ typedef enum radio_scan_status {
 | 
			
		||||
} RADIO_SCAN_STATUS; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_SCAN_STATUS) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_scan_type {
 | 
			
		||||
    RADIO_SCAN_ONE_SHOT,
 | 
			
		||||
    RADIO_SCAN_PERIODIC
 | 
			
		||||
} RADIO_SCAN_TYPE; /* Since 1.5.2 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_SCAN_TYPE) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_uicc_sub_act {
 | 
			
		||||
    RADIO_UICC_SUB_DEACTIVATE,
 | 
			
		||||
    RADIO_UICC_SUB_ACTIVATE
 | 
			
		||||
@@ -623,6 +728,171 @@ typedef enum radio_clir {
 | 
			
		||||
} RADIO_CLIR; /* Since 1.4.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_CLIR) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_geran_band {
 | 
			
		||||
    RADIO_GERAN_BAND_T380 = 1,
 | 
			
		||||
    RADIO_GERAN_BAND_T410 = 2,
 | 
			
		||||
    RADIO_GERAN_BAND_450 = 3,
 | 
			
		||||
    RADIO_GERAN_BAND_480 = 4,
 | 
			
		||||
    RADIO_GERAN_BAND_710 = 5,
 | 
			
		||||
    RADIO_GERAN_BAND_750 = 6,
 | 
			
		||||
    RADIO_GERAN_BAND_T810 = 7,
 | 
			
		||||
    RADIO_GERAN_BAND_850 = 8,
 | 
			
		||||
    RADIO_GERAN_BAND_P900 = 9,
 | 
			
		||||
    RADIO_GERAN_BAND_E900 = 10,
 | 
			
		||||
    RADIO_GERAN_BAND_R900 = 11,
 | 
			
		||||
    RADIO_GERAN_BAND_DCS1800 = 12,
 | 
			
		||||
    RADIO_GERAN_BAND_PCS1900 = 13,
 | 
			
		||||
    RADIO_GERAN_BAND_ER900 = 14
 | 
			
		||||
} RADIO_GERAN_BAND; /* Since 1.5.2 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_GERAN_BAND) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_utran_band {
 | 
			
		||||
    RADIO_UTRAN_BAND_1 = 1,
 | 
			
		||||
    RADIO_UTRAN_BAND_2 = 2,
 | 
			
		||||
    RADIO_UTRAN_BAND_3 = 3,
 | 
			
		||||
    RADIO_UTRAN_BAND_4 = 4,
 | 
			
		||||
    RADIO_UTRAN_BAND_5 = 5,
 | 
			
		||||
    RADIO_UTRAN_BAND_6 = 6,
 | 
			
		||||
    RADIO_UTRAN_BAND_7 = 7,
 | 
			
		||||
    RADIO_UTRAN_BAND_8 = 8,
 | 
			
		||||
    RADIO_UTRAN_BAND_9 = 9,
 | 
			
		||||
    RADIO_UTRAN_BAND_10 = 10,
 | 
			
		||||
    RADIO_UTRAN_BAND_11 = 11,
 | 
			
		||||
    RADIO_UTRAN_BAND_12 = 12,
 | 
			
		||||
    RADIO_UTRAN_BAND_13 = 13,
 | 
			
		||||
    RADIO_UTRAN_BAND_14 = 14,
 | 
			
		||||
    RADIO_UTRAN_BAND_19 = 19,
 | 
			
		||||
    RADIO_UTRAN_BAND_20 = 20,
 | 
			
		||||
    RADIO_UTRAN_BAND_21 = 21,
 | 
			
		||||
    RADIO_UTRAN_BAND_22 = 22,
 | 
			
		||||
    RADIO_UTRAN_BAND_25 = 25,
 | 
			
		||||
    RADIO_UTRAN_BAND_26 = 26,
 | 
			
		||||
    RADIO_UTRAN_BAND_A = 101, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_UTRAN_BAND_B = 102, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_UTRAN_BAND_C = 103, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_UTRAN_BAND_D = 104, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_UTRAN_BAND_E = 105, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_UTRAN_BAND_F = 106  /* Since IRadio 1.5 */
 | 
			
		||||
} RADIO_UTRAN_BAND; /* Since 1.5.2 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_UTRAN_BAND) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_eutran_band {
 | 
			
		||||
    RADIO_EUTRAN_BAND_1 = 1,
 | 
			
		||||
    RADIO_EUTRAN_BAND_2 = 2,
 | 
			
		||||
    RADIO_EUTRAN_BAND_3 = 3,
 | 
			
		||||
    RADIO_EUTRAN_BAND_4 = 4,
 | 
			
		||||
    RADIO_EUTRAN_BAND_5 = 5,
 | 
			
		||||
    RADIO_EUTRAN_BAND_6 = 6,
 | 
			
		||||
    RADIO_EUTRAN_BAND_7 = 7,
 | 
			
		||||
    RADIO_EUTRAN_BAND_8 = 8,
 | 
			
		||||
    RADIO_EUTRAN_BAND_9 = 9,
 | 
			
		||||
    RADIO_EUTRAN_BAND_10 = 10,
 | 
			
		||||
    RADIO_EUTRAN_BAND_11 = 11,
 | 
			
		||||
    RADIO_EUTRAN_BAND_12 = 12,
 | 
			
		||||
    RADIO_EUTRAN_BAND_13 = 13,
 | 
			
		||||
    RADIO_EUTRAN_BAND_14 = 14,
 | 
			
		||||
    RADIO_EUTRAN_BAND_17 = 17,
 | 
			
		||||
    RADIO_EUTRAN_BAND_18 = 18,
 | 
			
		||||
    RADIO_EUTRAN_BAND_19 = 19,
 | 
			
		||||
    RADIO_EUTRAN_BAND_20 = 20,
 | 
			
		||||
    RADIO_EUTRAN_BAND_21 = 21,
 | 
			
		||||
    RADIO_EUTRAN_BAND_22 = 22,
 | 
			
		||||
    RADIO_EUTRAN_BAND_23 = 23,
 | 
			
		||||
    RADIO_EUTRAN_BAND_24 = 24,
 | 
			
		||||
    RADIO_EUTRAN_BAND_25 = 25,
 | 
			
		||||
    RADIO_EUTRAN_BAND_26 = 26,
 | 
			
		||||
    RADIO_EUTRAN_BAND_27 = 27,
 | 
			
		||||
    RADIO_EUTRAN_BAND_28 = 28,
 | 
			
		||||
    RADIO_EUTRAN_BAND_30 = 30,
 | 
			
		||||
    RADIO_EUTRAN_BAND_31 = 31,
 | 
			
		||||
    RADIO_EUTRAN_BAND_33 = 33,
 | 
			
		||||
    RADIO_EUTRAN_BAND_34 = 34,
 | 
			
		||||
    RADIO_EUTRAN_BAND_35 = 35,
 | 
			
		||||
    RADIO_EUTRAN_BAND_36 = 36,
 | 
			
		||||
    RADIO_EUTRAN_BAND_37 = 37,
 | 
			
		||||
    RADIO_EUTRAN_BAND_38 = 38,
 | 
			
		||||
    RADIO_EUTRAN_BAND_39 = 39,
 | 
			
		||||
    RADIO_EUTRAN_BAND_40 = 40,
 | 
			
		||||
    RADIO_EUTRAN_BAND_41 = 41,
 | 
			
		||||
    RADIO_EUTRAN_BAND_42 = 42,
 | 
			
		||||
    RADIO_EUTRAN_BAND_43 = 43,
 | 
			
		||||
    RADIO_EUTRAN_BAND_44 = 44,
 | 
			
		||||
    RADIO_EUTRAN_BAND_45 = 45,
 | 
			
		||||
    RADIO_EUTRAN_BAND_46 = 46,
 | 
			
		||||
    RADIO_EUTRAN_BAND_47 = 47,
 | 
			
		||||
    RADIO_EUTRAN_BAND_48 = 48,
 | 
			
		||||
    RADIO_EUTRAN_BAND_49 = 49, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_EUTRAN_BAND_50 = 50, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_EUTRAN_BAND_51 = 51, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_EUTRAN_BAND_52 = 52, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_EUTRAN_BAND_53 = 53, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_EUTRAN_BAND_65 = 65,
 | 
			
		||||
    RADIO_EUTRAN_BAND_66 = 66,
 | 
			
		||||
    RADIO_EUTRAN_BAND_68 = 68,
 | 
			
		||||
    RADIO_EUTRAN_BAND_70 = 70,
 | 
			
		||||
    RADIO_EUTRAN_BAND_71 = 71, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_EUTRAN_BAND_72 = 72, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_EUTRAN_BAND_73 = 73, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_EUTRAN_BAND_74 = 74, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_EUTRAN_BAND_85 = 85, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_EUTRAN_BAND_87 = 87, /* Since IRadio 1.5 */
 | 
			
		||||
    RADIO_EUTRAN_BAND_88 = 88  /* Since IRadio 1.5 */
 | 
			
		||||
} RADIO_EUTRAN_BAND; /* Since 1.5.2 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_EUTRAN_BAND) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_ngran_band {
 | 
			
		||||
    RADIO_NGRAN_BAND_1 = 1,
 | 
			
		||||
    RADIO_NGRAN_BAND_2 = 2,
 | 
			
		||||
    RADIO_NGRAN_BAND_3 = 3,
 | 
			
		||||
    RADIO_NGRAN_BAND_5 = 5,
 | 
			
		||||
    RADIO_NGRAN_BAND_7 = 7,
 | 
			
		||||
    RADIO_NGRAN_BAND_8 = 8,
 | 
			
		||||
    RADIO_NGRAN_BAND_12 = 12,
 | 
			
		||||
    RADIO_NGRAN_BAND_14 = 14,
 | 
			
		||||
    RADIO_NGRAN_BAND_18 = 18,
 | 
			
		||||
    RADIO_NGRAN_BAND_20 = 20,
 | 
			
		||||
    RADIO_NGRAN_BAND_25 = 25,
 | 
			
		||||
    RADIO_NGRAN_BAND_28 = 28,
 | 
			
		||||
    RADIO_NGRAN_BAND_29 = 29,
 | 
			
		||||
    RADIO_NGRAN_BAND_30 = 30,
 | 
			
		||||
    RADIO_NGRAN_BAND_34 = 34,
 | 
			
		||||
    RADIO_NGRAN_BAND_38 = 38,
 | 
			
		||||
    RADIO_NGRAN_BAND_39 = 39,
 | 
			
		||||
    RADIO_NGRAN_BAND_40 = 40,
 | 
			
		||||
    RADIO_NGRAN_BAND_41 = 41,
 | 
			
		||||
    RADIO_NGRAN_BAND_48 = 48,
 | 
			
		||||
    RADIO_NGRAN_BAND_50 = 50,
 | 
			
		||||
    RADIO_NGRAN_BAND_51 = 51,
 | 
			
		||||
    RADIO_NGRAN_BAND_65 = 65,
 | 
			
		||||
    RADIO_NGRAN_BAND_66 = 66,
 | 
			
		||||
    RADIO_NGRAN_BAND_70 = 70,
 | 
			
		||||
    RADIO_NGRAN_BAND_71 = 71,
 | 
			
		||||
    RADIO_NGRAN_BAND_74 = 74,
 | 
			
		||||
    RADIO_NGRAN_BAND_75 = 75,
 | 
			
		||||
    RADIO_NGRAN_BAND_76 = 76,
 | 
			
		||||
    RADIO_NGRAN_BAND_77 = 77,
 | 
			
		||||
    RADIO_NGRAN_BAND_78 = 78,
 | 
			
		||||
    RADIO_NGRAN_BAND_79 = 79,
 | 
			
		||||
    RADIO_NGRAN_BAND_80 = 80,
 | 
			
		||||
    RADIO_NGRAN_BAND_81 = 81,
 | 
			
		||||
    RADIO_NGRAN_BAND_82 = 82,
 | 
			
		||||
    RADIO_NGRAN_BAND_83 = 83,
 | 
			
		||||
    RADIO_NGRAN_BAND_84 = 84,
 | 
			
		||||
    RADIO_NGRAN_BAND_86 = 86,
 | 
			
		||||
    RADIO_NGRAN_BAND_89 = 89,
 | 
			
		||||
    RADIO_NGRAN_BAND_90 = 90,
 | 
			
		||||
    RADIO_NGRAN_BAND_91 = 91,
 | 
			
		||||
    RADIO_NGRAN_BAND_92 = 92,
 | 
			
		||||
    RADIO_NGRAN_BAND_93 = 93,
 | 
			
		||||
    RADIO_NGRAN_BAND_94 = 94,
 | 
			
		||||
    RADIO_NGRAN_BAND_95 = 95,
 | 
			
		||||
    RADIO_NGRAN_BAND_257 = 257,
 | 
			
		||||
    RADIO_NGRAN_BAND_258 = 258,
 | 
			
		||||
    RADIO_NGRAN_BAND_260 = 260,
 | 
			
		||||
    RADIO_NGRAN_BAND_261 = 261
 | 
			
		||||
} RADIO_NGRAN_BAND; /* Since 1.5.2 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_NGRAN_BAND) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_last_call_fail_cause {
 | 
			
		||||
    RADIO_LAST_CALL_FAIL_NONE = 0,
 | 
			
		||||
    RADIO_LAST_CALL_FAIL_UNOBTAINABLE_NUMBER = 1,
 | 
			
		||||
@@ -1099,6 +1369,12 @@ typedef struct radio_card_status_1_4 {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCardStatus_1_4; /* Since 1.4.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCardStatus_1_4) == 96);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_card_status_1_5 {
 | 
			
		||||
    RadioCardStatus_1_4 base RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlVec applications RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCardStatus_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCardStatus_1_5) == 112);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_app_status {
 | 
			
		||||
    RADIO_APP_TYPE appType RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_APP_STATE appState RADIO_ALIGNED(4);
 | 
			
		||||
@@ -1111,6 +1387,12 @@ typedef struct radio_app_status {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioAppStatus;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioAppStatus) == 64);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_app_status_1_5 {
 | 
			
		||||
    RadioAppStatus base RADIO_ALIGNED(8);
 | 
			
		||||
    RADIO_PERSO_SUBSTATE persoSubstate RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioAppStatus_1_5; /* Since 1.5.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioAppStatus_1_5) == 72);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_uus_info {
 | 
			
		||||
    gint32 uusType RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 uusDcs RADIO_ALIGNED(4);
 | 
			
		||||
@@ -1204,6 +1486,28 @@ typedef struct radio_data_profile_1_4 {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataProfile_1_4; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataProfile_1_4) == 112);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_profile_1_5 {
 | 
			
		||||
    RADIO_DATA_PROFILE_ID profileId RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlString apn RADIO_ALIGNED(8);
 | 
			
		||||
    RADIO_PDP_PROTOCOL_TYPE protocol RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_PDP_PROTOCOL_TYPE roamingProtocol RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_APN_AUTH_TYPE authType RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlString user RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString password RADIO_ALIGNED(8);
 | 
			
		||||
    RADIO_DATA_PROFILE_TYPE type RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 maxConnsTime RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 maxConns RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 waitTime RADIO_ALIGNED(4);
 | 
			
		||||
    guint8 enabled RADIO_ALIGNED(1);
 | 
			
		||||
    RADIO_APN_TYPES supportedApnTypesBitmap RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_ACCESS_FAMILY bearerBitmap RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 mtuV4 RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 mtuV6 RADIO_ALIGNED(4);
 | 
			
		||||
    guint8 preferred RADIO_ALIGNED(1);
 | 
			
		||||
    guint8 persistent RADIO_ALIGNED(1);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataProfile_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataProfile_1_5) == 112);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_call {
 | 
			
		||||
    RADIO_DATA_CALL_FAIL_CAUSE status RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 suggestedRetryTime RADIO_ALIGNED(4);
 | 
			
		||||
@@ -1234,6 +1538,30 @@ typedef struct radio_data_call_1_4 {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataCall_1_4; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataCall_1_4) == 112);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_link_address {
 | 
			
		||||
    GBinderHidlString address RADIO_ALIGNED(8);
 | 
			
		||||
    gint32 properties RADIO_ALIGNED(4);
 | 
			
		||||
    guint64 deprecationTime RADIO_ALIGNED(8);
 | 
			
		||||
    guint64 expirationTime RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioLinkAddress; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioLinkAddress) == 40);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_call_1_5 {
 | 
			
		||||
    RADIO_DATA_CALL_FAIL_CAUSE cause RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 suggestedRetryTime RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 cid RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_DATA_CALL_ACTIVE_STATUS active RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_PDP_PROTOCOL_TYPE type RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlString ifname RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlVec addresses RADIO_ALIGNED(8); /* vec<RadioLinkAddress> */
 | 
			
		||||
    GBinderHidlVec dnses RADIO_ALIGNED(8);     /* vec<GBinderHidlString> */
 | 
			
		||||
    GBinderHidlVec gateways RADIO_ALIGNED(8);  /* vec<GBinderHidlString> */
 | 
			
		||||
    GBinderHidlVec pcscf RADIO_ALIGNED(8);     /* vec<GBinderHidlString> */
 | 
			
		||||
    gint32 mtuV4 RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 mtuV6 RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataCall_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataCall_1_5) == 112);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_sms_write_args {
 | 
			
		||||
    gint32 status RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlString pdu RADIO_ALIGNED(8);
 | 
			
		||||
@@ -1354,11 +1682,11 @@ typedef struct radio_cell_info_1_2 {
 | 
			
		||||
    guint8 registered RADIO_ALIGNED(1);
 | 
			
		||||
    gint32 timeStampType RADIO_ALIGNED(4);
 | 
			
		||||
    guint64 timeStamp RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlVec gsm RADIO_ALIGNED(8);     /* vec<RadioCellInfoGsm> */
 | 
			
		||||
    GBinderHidlVec cdma RADIO_ALIGNED(8);    /* vec<RadioCellInfoCdma> */
 | 
			
		||||
    GBinderHidlVec lte RADIO_ALIGNED(8);     /* vec<RadioCellInfoLte> */
 | 
			
		||||
    GBinderHidlVec wcdma RADIO_ALIGNED(8);   /* vec<RadioCellInfoWcdma> */
 | 
			
		||||
    GBinderHidlVec tdscdma RADIO_ALIGNED(8); /* vec<RadioCellInfoTdscdma> */
 | 
			
		||||
    GBinderHidlVec gsm RADIO_ALIGNED(8);     /* vec<RadioCellInfoGsm_1_2> */
 | 
			
		||||
    GBinderHidlVec cdma RADIO_ALIGNED(8);    /* vec<RadioCellInfoCdma_1_2> */
 | 
			
		||||
    GBinderHidlVec lte RADIO_ALIGNED(8);     /* vec<RadioCellInfoLte_1_2> */
 | 
			
		||||
    GBinderHidlVec wcdma RADIO_ALIGNED(8);   /* vec<RadioCellInfoWcdma_1_2> */
 | 
			
		||||
    GBinderHidlVec tdscdma RADIO_ALIGNED(8); /* vec<RadioCellInfoTdscdma_1_2> */
 | 
			
		||||
    RADIO_CELL_CONNECTION_STATUS connectionStatus RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfo_1_2; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfo_1_2) == 112);
 | 
			
		||||
@@ -1385,6 +1713,12 @@ typedef struct radio_cell_identity_gsm_1_2 {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityGsm_1_2; /* Since 1.2.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityGsm_1_2) == 80);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_gsm_1_5 {
 | 
			
		||||
    RadioCellIdentityGsm_1_2 base RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlVec additionalPlmns RADIO_ALIGNED(8); /* vec<GBinderHidlString> */
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityGsm_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityGsm_1_5) == 96);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_wcdma {
 | 
			
		||||
    GBinderHidlString mcc RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString mnc RADIO_ALIGNED(8);
 | 
			
		||||
@@ -1401,6 +1735,23 @@ typedef struct radio_cell_identity_wcdma_1_2 {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityWcdma_1_2; /* Since 1.2.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityWcdma_1_2) == 80);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_closed_subscriber_group_info {
 | 
			
		||||
    gboolean csgIndication RADIO_ALIGNED(1);
 | 
			
		||||
    GBinderHidlString homeNodebName RADIO_ALIGNED(8);
 | 
			
		||||
    gint32 csgIdentity RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioClosedSubscriberGroupInfo; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioClosedSubscriberGroupInfo) == 32);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_wcdma_1_5 {
 | 
			
		||||
    RadioCellIdentityWcdma_1_2 base RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlVec additionalPlmns RADIO_ALIGNED(8); /* vec<GBinderHidlString> */
 | 
			
		||||
    guint8 csgInfoAvailable RADIO_ALIGNED(1);
 | 
			
		||||
    union {
 | 
			
		||||
        RadioClosedSubscriberGroupInfo gsm RADIO_ALIGNED(8);
 | 
			
		||||
    } optionalCsgInfo RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityWcdma_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityWcdma_1_5) == 136);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_cdma {
 | 
			
		||||
    gint32 networkId RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 systemId RADIO_ALIGNED(4);
 | 
			
		||||
@@ -1433,6 +1784,17 @@ typedef struct radio_cell_identity_lte_1_2 {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityLte_1_2; /* Since 1.2.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityLte_1_2) == 88);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_lte_1_5 {
 | 
			
		||||
    RadioCellIdentityLte_1_2 base RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlVec additionalPlmns RADIO_ALIGNED(8); /* vec<GBinderHidlString> */
 | 
			
		||||
    guint8 csgInfoAvailable RADIO_ALIGNED(1);
 | 
			
		||||
    union {
 | 
			
		||||
        RadioClosedSubscriberGroupInfo gsm RADIO_ALIGNED(8);
 | 
			
		||||
    } optionalCsgInfo RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlVec bands RADIO_ALIGNED(8); /* vec<EutranBands> */
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityLte_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityLte_1_5) == 160);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_tdscdma {
 | 
			
		||||
    GBinderHidlString mcc RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString mnc RADIO_ALIGNED(8);
 | 
			
		||||
@@ -1449,6 +1811,16 @@ typedef struct radio_cell_identity_tdscdma_1_2 {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityTdscdma_1_2; /* Since 1.2.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityTdscdma_1_2) == 88);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_tdscdma_1_5 {
 | 
			
		||||
    RadioCellIdentityTdscdma_1_2 base RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlVec additionalPlmns RADIO_ALIGNED(8); /* vec<GBinderHidlString> */
 | 
			
		||||
    guint8 csgInfoAvailable RADIO_ALIGNED(1);
 | 
			
		||||
    union {
 | 
			
		||||
        RadioClosedSubscriberGroupInfo gsm RADIO_ALIGNED(8);
 | 
			
		||||
    } optionalCsgInfo RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityTdscdma_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityTdscdma_1_5) == 144);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_nr {
 | 
			
		||||
    GBinderHidlString mcc RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString mnc RADIO_ALIGNED(8);
 | 
			
		||||
@@ -1460,6 +1832,26 @@ typedef struct radio_cell_identity_nr {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityNr; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityNr) == 88);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_nr_1_5 {
 | 
			
		||||
    RadioCellIdentityNr base RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlVec additionalPlmns RADIO_ALIGNED(8); /* vec<GBinderHidlString> */
 | 
			
		||||
    GBinderHidlVec bands RADIO_ALIGNED(8); /* vec<NgranBands> */
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityNr_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityNr_1_5) == 120);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_1_5 {
 | 
			
		||||
    guint8 cellIdentityType RADIO_ALIGNED(1); /* RADIO_CELL_IDENTITY_TYPE_1_5 */
 | 
			
		||||
    union {
 | 
			
		||||
        RadioCellIdentityGsm_1_5 gsm RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellIdentityWcdma_1_5 wcdma RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellIdentityTdscdma_1_5 tdscdma RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellIdentityCdma_1_2 cdma RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellIdentityLte_1_5 lte RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellIdentityNr_1_5 nr RADIO_ALIGNED(8);
 | 
			
		||||
    } RADIO_ALIGNED(8) identity;
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentity_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentity_1_5) == 168);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_voice_reg_state_result {
 | 
			
		||||
    RADIO_REG_STATE regState RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_TECH rat RADIO_ALIGNED(4);
 | 
			
		||||
@@ -1503,10 +1895,17 @@ typedef struct radio_data_reg_state_result_1_2 {
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataRegStateResult_1_2) == 104);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_reg_lte_vops_info {
 | 
			
		||||
    guint32 isVopsSupported RADIO_ALIGNED(4);
 | 
			
		||||
    guint32 isEmcBearerSupported RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioDataRegLteVopsInfo;  /* Since 1.4.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataRegLteVopsInfo) == 8);
 | 
			
		||||
    guint8 isVopsSupported RADIO_ALIGNED(1);
 | 
			
		||||
    guint8 isEmcBearerSupported RADIO_ALIGNED(1);
 | 
			
		||||
} RADIO_ALIGNED(1) RadioDataRegLteVopsInfo;  /* Since 1.4.12 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataRegLteVopsInfo) == 2);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_reg_nr_inicators {
 | 
			
		||||
    guint8 isEndcAvailable RADIO_ALIGNED(1);
 | 
			
		||||
    guint8 isDcNrRestricted RADIO_ALIGNED(1);
 | 
			
		||||
    guint8 isNrAvailable RADIO_ALIGNED(1);
 | 
			
		||||
} RADIO_ALIGNED(1) RadioDataRegNrIndicators;  /* Since 1.4.12 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataRegNrIndicators) == 3);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_reg_state_result_1_4 {
 | 
			
		||||
    RADIO_REG_STATE regState RADIO_ALIGNED(4);
 | 
			
		||||
@@ -1514,10 +1913,40 @@ typedef struct radio_data_reg_state_result_1_4 {
 | 
			
		||||
    gint32 reasonDataDenied RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 maxDataCalls RADIO_ALIGNED(4);
 | 
			
		||||
    RadioCellIdentity_1_2 cellIdentity RADIO_ALIGNED(8);
 | 
			
		||||
    RadioDataRegLteVopsInfo lteVopsInfo RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataRegStateResult_1_4;  /* Since 1.4.0 */
 | 
			
		||||
    guint8 lteVopsInfoValid RADIO_ALIGNED(1);
 | 
			
		||||
    RadioDataRegLteVopsInfo lteVopsInfo RADIO_ALIGNED(1);
 | 
			
		||||
    RadioDataRegNrIndicators nrIndicators RADIO_ALIGNED(1);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataRegStateResult_1_4;  /* Since 1.4.12 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataRegStateResult_1_4) == 112);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_reg_cdma2000_registration_info {
 | 
			
		||||
    guint8 cssSupported RADIO_ALIGNED(1);
 | 
			
		||||
    gint32 roamingIndicator RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 systemIsInPrl RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 defaultRoamingIndicator RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioRegCdma2000RegistrationInfo; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioRegCdma2000RegistrationInfo) == 16);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_reg_eutran_registration_info {
 | 
			
		||||
    RadioDataRegLteVopsInfo lteVopsInfo RADIO_ALIGNED(1);
 | 
			
		||||
    RadioDataRegNrIndicators nrIndicators RADIO_ALIGNED(1);
 | 
			
		||||
} RADIO_ALIGNED(1) RadioRegEutranRegistrationInfo; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioRegEutranRegistrationInfo) == 5);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_reg_state_result_1_5 {
 | 
			
		||||
    RADIO_REG_STATE regState RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_TECH rat RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 reasonDataDenied RADIO_ALIGNED(4);
 | 
			
		||||
    RadioCellIdentity_1_5 cellIdentity RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString registeredPlmn RADIO_ALIGNED(8);
 | 
			
		||||
    guint8 accessTechnologySpecificInfoType RADIO_ALIGNED(1); /* RADIO_REG_ACCESS_TECHNOLOGY_SPECIFIC_INFO_TYPE */
 | 
			
		||||
    union {
 | 
			
		||||
        RadioRegCdma2000RegistrationInfo cdmaInfo RADIO_ALIGNED(4);
 | 
			
		||||
        RadioRegEutranRegistrationInfo eutranInfo RADIO_ALIGNED(1);
 | 
			
		||||
    } accessTechnologySpecificInfo RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioRegStateResult_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioRegStateResult_1_5) == 224);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_signal_strength_gsm {
 | 
			
		||||
    guint32 signalStrength RADIO_ALIGNED(4);
 | 
			
		||||
    guint32 bitErrorRate RADIO_ALIGNED(4);
 | 
			
		||||
@@ -1683,13 +2112,13 @@ G_STATIC_ASSERT(sizeof(RadioCellInfoTdscdma_1_2) == 104);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_nr {
 | 
			
		||||
    RadioSignalStrengthNr signalStrength RADIO_ALIGNED(4);
 | 
			
		||||
    RadioCellIdentityNr cellidentity RADIO_ALIGNED(8);
 | 
			
		||||
    RadioCellIdentityNr cellIdentity RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoNr; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoNr) == 112);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_1_4 {
 | 
			
		||||
    guint8 registered RADIO_ALIGNED(1);
 | 
			
		||||
    guint32 connectionStatus RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_CELL_CONNECTION_STATUS connectionStatus RADIO_ALIGNED(4);
 | 
			
		||||
    guint8 cellInfoType RADIO_ALIGNED(1); /* RADIO_CELL_INFO_TYPE_1_4 */
 | 
			
		||||
    union {
 | 
			
		||||
        RadioCellInfoGsm_1_2 gsm RADIO_ALIGNED(8);
 | 
			
		||||
@@ -1702,6 +2131,77 @@ typedef struct radio_cell_info_1_4 {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfo_1_4; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfo_1_4) == 136);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_gsm_1_5 {
 | 
			
		||||
    RadioCellIdentityGsm_1_5 cellIdentityGsm RADIO_ALIGNED(8);
 | 
			
		||||
    RadioSignalStrengthGsm signalStrengthGsm RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoGsm_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoGsm_1_5) == 112);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_wcdma_1_5 {
 | 
			
		||||
    RadioCellIdentityWcdma_1_5 cellIdentityWcdma RADIO_ALIGNED(8);
 | 
			
		||||
    RadioSignalStrengthWcdma_1_2 signalStrengthWcdma RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoWcdma_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoWcdma_1_5) == 152);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_lte_1_5 {
 | 
			
		||||
    RadioCellIdentityLte_1_5 cellIdentityLte RADIO_ALIGNED(8);
 | 
			
		||||
    RadioSignalStrengthLte signalStrengthLte RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoLte_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoLte_1_5) == 184);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_tdscdma_1_5 {
 | 
			
		||||
    RadioCellIdentityTdscdma_1_5 cellIdentityTdscdma RADIO_ALIGNED(8);
 | 
			
		||||
    RadioSignalStrengthTdScdma_1_2 signalStrengthTdscdma RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoTdscdma_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoTdscdma_1_5) == 160);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_nr_1_5 {
 | 
			
		||||
    RadioCellIdentityNr_1_5 cellIdentityNr RADIO_ALIGNED(8);
 | 
			
		||||
    RadioSignalStrengthNr signalStrengthNr RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoNr_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoNr_1_5) == 144);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_1_5 {
 | 
			
		||||
    guint8 registered RADIO_ALIGNED(1);
 | 
			
		||||
    gint32 timeStampType RADIO_ALIGNED(4);
 | 
			
		||||
    guint64 timeStamp RADIO_ALIGNED(8);
 | 
			
		||||
    RADIO_CELL_CONNECTION_STATUS connectionStatus RADIO_ALIGNED(4);
 | 
			
		||||
    guint8 cellInfoType RADIO_ALIGNED(8); /* RADIO_CELL_INFO_TYPE_1_5 */
 | 
			
		||||
    union {
 | 
			
		||||
        RadioCellInfoGsm_1_5 gsm RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellInfoWcdma_1_5 wcdma RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellInfoTdscdma_1_5 tdscdma RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellInfoLte_1_5 lte RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellInfoNr_1_5 nr RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellInfoCdma_1_2 cdma RADIO_ALIGNED(8);
 | 
			
		||||
    } info RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfo_1_5; /* Since 1.5.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfo_1_5) == 216);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_physical_channel_config {
 | 
			
		||||
    RADIO_CELL_CONNECTION_STATUS connectionStatus RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 cellBandwidthDownlink RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioPhysicalChannelConfig; /* Since 1.5.4 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioPhysicalChannelConfig) == 8);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_frequency_info {
 | 
			
		||||
    guint8 frequencyInfoType RADIO_ALIGNED(1); /* RADIO_FREQUENCY_INFO_TYPE */
 | 
			
		||||
    union {
 | 
			
		||||
        RADIO_FREQUENCY_RANGE range RADIO_ALIGNED(4);
 | 
			
		||||
        gint32 channelNumber RADIO_ALIGNED(4);
 | 
			
		||||
    } info RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioFrequencyInfo; /* Since 1.5.4 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioFrequencyInfo) == 8);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_physical_channel_config_1_4 {
 | 
			
		||||
    RadioPhysicalChannelConfig base RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_TECH rat RADIO_ALIGNED(4);
 | 
			
		||||
    RadioFrequencyInfo rfInfo RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlVec contextIds RADIO_ALIGNED(8);
 | 
			
		||||
    guint32 physicalCellId RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioPhysicalChannelConfig_1_4; /* Since 1.5.4 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioPhysicalChannelConfig_1_4) == 48);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_gsm_broadcast_sms_config {
 | 
			
		||||
    gint32 fromServiceId RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 toServiceId RADIO_ALIGNED(4);
 | 
			
		||||
@@ -1785,10 +2285,52 @@ typedef struct radio_network_scan_result {
 | 
			
		||||
    RADIO_SCAN_STATUS status RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_ERROR error RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlVec networkInfos RADIO_ALIGNED(8); /* vec<RadioCellInfo> */
 | 
			
		||||
                                               /* or vec<RadioCellInfo_1_2> */
 | 
			
		||||
                                               /* or vec<RadioCellInfo_1_4> */
 | 
			
		||||
                                               /* or vec<RadioCellInfo_1_5> */
 | 
			
		||||
} RADIO_ALIGNED(8) RadioNetworkScanResult; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioNetworkScanResult) == 24);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_network_scan_specifier {
 | 
			
		||||
    RADIO_ACCESS_NETWORKS radioAccessNetwork RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlVec geranBands RADIO_ALIGNED(8); /* vec<RADIO_GERAN_BAND> */
 | 
			
		||||
    GBinderHidlVec utranBands RADIO_ALIGNED(8); /* vec<RADIO_UTRAN_BAND> */
 | 
			
		||||
    GBinderHidlVec eutranBands RADIO_ALIGNED(8); /* vec<RADIO_EUTRAN_BAND> */
 | 
			
		||||
    GBinderHidlVec channels RADIO_ALIGNED(8); /* vec<int32_t> */
 | 
			
		||||
} RADIO_ALIGNED(8) RadioAccessSpecifier; /* Since 1.5.2 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioAccessSpecifier) == 72);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_network_scan_specifier_1_5 {
 | 
			
		||||
    RADIO_ACCESS_NETWORKS radioAccessNetwork RADIO_ALIGNED(4);
 | 
			
		||||
    guint8 type RADIO_ALIGNED(8); /* RADIO_NETWORK_SCAN_SPECIFIER_1_5_TYPE */
 | 
			
		||||
    GBinderHidlVec bands RADIO_ALIGNED(8);  /* vec<RADIO_GERAN_BAND> */
 | 
			
		||||
                                         /* or vec<RADIO_UTRAN_BAND> */
 | 
			
		||||
                                         /* or vec<RADIO_EUTRAN_BAND> */
 | 
			
		||||
                                         /* or vec<RADIO_NGRAN_BAND> */
 | 
			
		||||
    GBinderHidlVec channels RADIO_ALIGNED(8); /* vec<int32_t> */
 | 
			
		||||
} RADIO_ALIGNED(8) RadioAccessSpecifier_1_5; /* Since 1.5.2 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioAccessSpecifier_1_5) == 48);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_network_scan_request {
 | 
			
		||||
    RADIO_SCAN_TYPE type RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 interval RADIO_ALIGNED(4); /* Periodic scan interval, seconds */
 | 
			
		||||
    GBinderHidlVec specifiers RADIO_ALIGNED(8); /* vec<RadioAccessSpecifier> */
 | 
			
		||||
} RADIO_ALIGNED(8) RadioNetworkScanRequest; /* Since 1.5.2 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioNetworkScanRequest) == 24);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_network_scan_request_1_5 {
 | 
			
		||||
    RADIO_SCAN_TYPE type RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 interval RADIO_ALIGNED(4); /* [5..300] seconds */
 | 
			
		||||
    GBinderHidlVec specifiers RADIO_ALIGNED(8); /*vec <RadioAccessSpecifier> */
 | 
			
		||||
                                          /*or vec<RadioAccessSpecifier_1_5> */
 | 
			
		||||
    gint32 maxSearchTime RADIO_ALIGNED(4);      /* [60..3600] seconds */
 | 
			
		||||
    guint8 incrementalResults RADIO_ALIGNED(1); /* TRUE/FALSE */
 | 
			
		||||
    gint32 incrementalResultsPeriodicity RADIO_ALIGNED(4); /* [1..10] */
 | 
			
		||||
    GBinderHidlVec mccMncs RADIO_ALIGNED(8);    /* vec<GBinderHidlString> */
 | 
			
		||||
} RADIO_ALIGNED(8) RadioNetworkScanRequest_1_2,
 | 
			
		||||
    RadioNetworkScanRequest_1_5; /* Since 1.5.2 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioNetworkScanRequest_1_5) == 56);
 | 
			
		||||
 | 
			
		||||
/* c(req,resp,callName,CALL_NAME) */
 | 
			
		||||
#define RADIO_CALL_1_0(c) \
 | 
			
		||||
    c(2,1,getIccCardStatus,GET_ICC_CARD_STATUS) \
 | 
			
		||||
@@ -1937,15 +2479,43 @@ G_STATIC_ASSERT(sizeof(RadioNetworkScanResult) == 24);
 | 
			
		||||
    c(144,145,enableModem,ENABLE_MODEM) \
 | 
			
		||||
    c(145,146,getModemStackStatus,GET_MODEM_STACK_STATUS)
 | 
			
		||||
 | 
			
		||||
#define RADIO_CALL_1_4(c) /* Since 1.2.5 */ \
 | 
			
		||||
    c(146,155,setupDataCall_1_4,SETUP_DATA_CALL_1_4) \
 | 
			
		||||
    c(149,147,emergencyDial,EMERGENCY_DIAL) \
 | 
			
		||||
    c(150,148,startNetworkScan_1_4,START_NETWORK_SCAN_1_4) \
 | 
			
		||||
    c(151,152,getPreferredNetworkTypeBitmap,GET_PREFERRED_NETWORK_TYPE_BITMAP) \
 | 
			
		||||
    c(152,153,setPreferredNetworkTypeBitmap,SET_PREFERRED_NETWORK_TYPE_BITMAP) \
 | 
			
		||||
    c(153,156,setAllowedCarriers_1_4,SET_ALLOWED_CARRIERS_1_4) \
 | 
			
		||||
    c(154,157,getAllowedCarriers_1_4,GET_ALLOWED_CARRIERS_1_4) \
 | 
			
		||||
    c(155,158,getSignalStrength_1_4,GET_SIGNAL_STRENGTH_1_4)
 | 
			
		||||
/*
 | 
			
		||||
 * From 1.2.5 to 1.5.0 there was RADIO_CALL_1_4 which took a macro with 4
 | 
			
		||||
 * arguments as a parameter. In 1.5.1 it was replaced with RADIO_CALL_1_4_
 | 
			
		||||
 * which takes a macro with 5 arguments.
 | 
			
		||||
 */
 | 
			
		||||
#define RADIO_CALL_1_4_(c) /* Since 1.5.1 */ \
 | 
			
		||||
    c(146,155,setupDataCall,SETUP_DATA_CALL,_1_4) \
 | 
			
		||||
    c(149,147,emergencyDial,EMERGENCY_DIAL,) \
 | 
			
		||||
    c(150,148,startNetworkScan,START_NETWORK_SCAN,_1_4) \
 | 
			
		||||
    c(151,152,getPreferredNetworkTypeBitmap,GET_PREFERRED_NETWORK_TYPE_BITMAP,) \
 | 
			
		||||
    c(152,153,setPreferredNetworkTypeBitmap,SET_PREFERRED_NETWORK_TYPE_BITMAP,) \
 | 
			
		||||
    c(153,156,setAllowedCarriers,SET_ALLOWED_CARRIERS,_1_4) \
 | 
			
		||||
    c(154,157,getAllowedCarriers,GET_ALLOWED_CARRIERS,_1_4) \
 | 
			
		||||
    c(155,158,getSignalStrength,GET_SIGNAL_STRENGTH,_1_4)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Similarly to RADIO_CALL_1_4, RADIO_CALL_1_5 macro which appeared in 1.5.0
 | 
			
		||||
 * was replaced with RADIO_CALL_1_5_ in 1.5.1
 | 
			
		||||
 */
 | 
			
		||||
#define RADIO_CALL_1_5_(c) /* Since 1.5.1 */ \
 | 
			
		||||
    c(156,159,setSignalStrengthReportingCriteria,SET_SIGNAL_STRENGTH_REPORTING_CRITERIA,_1_5) \
 | 
			
		||||
    c(157,160,setLinkCapacityReportingCriteria,SET_LINK_CAPACITY_REPORTING_CRITERIA,_1_5) \
 | 
			
		||||
    c(158,161,enableUiccApplications,ENABLE_UICC_APPLICATIONS,) \
 | 
			
		||||
    c(159,162,areUiccApplicationsEnabled,ARE_UICC_APPLICATIONS_ENABLED,) \
 | 
			
		||||
    c(160,163,setSystemSelectionChannels,SET_SYSTEM_SELECTION_CHANNELS,_1_5) \
 | 
			
		||||
    c(161,164,startNetworkScan,START_NETWORK_SCAN,_1_5) \
 | 
			
		||||
    c(162,165,setupDataCall,SETUP_DATA_CALL,_1_5) \
 | 
			
		||||
    c(163,167,setInitialAttachApn,SET_INITIAL_ATTACH_APN,_1_5) \
 | 
			
		||||
    c(164,168,setDataProfile,SET_DATA_PROFILE,_1_5) \
 | 
			
		||||
    c(165,169,setRadioPower,SET_RADIO_POWER,_1_5) \
 | 
			
		||||
    c(166,170,setIndicationFilter,SET_INDICATION_FILTER,_1_5) \
 | 
			
		||||
    c(167,171,getBarringInfo,GET_BARRING_INFO,) \
 | 
			
		||||
    c(168,172,getVoiceRegistrationState,GET_VOICE_REGISTRATION_STATE,_1_5) \
 | 
			
		||||
    c(169,173,getDataRegistrationState,GET_DATA_REGISTRATION_STATE,_1_5) \
 | 
			
		||||
    c(170,175,setNetworkSelectionModeManual,SET_NETWORK_SELECTION_MODE_MANUAL,_1_5) \
 | 
			
		||||
    c(171,176,sendCdmaSmsExpectMore,SEND_CDMA_SMS_EXPECT_MORE,) \
 | 
			
		||||
    c(172,177,supplySimDepersonalization,SUPPLY_SIM_PERSONALIZATION,)
 | 
			
		||||
 | 
			
		||||
/* e(code,eventName,EVENT_NAME) */
 | 
			
		||||
#define RADIO_EVENT_1_0(e) \
 | 
			
		||||
@@ -2015,10 +2585,19 @@ G_STATIC_ASSERT(sizeof(RadioNetworkScanResult) == 24);
 | 
			
		||||
    e(58,dataCallListChanged_1_4,DATA_CALL_LIST_CHANGED_1_4) \
 | 
			
		||||
    e(59,currentSignalStrength_1_4,CURRENT_SIGNAL_STRENGTH_1_4)
 | 
			
		||||
 | 
			
		||||
#define RADIO_EVENT_1_5(e)  /* Since 1.5.0 */ \
 | 
			
		||||
    e(60,uiccApplicationsEnablementChanged, UICC_APPLICATION_ENABLEMENT_CHANGED) \
 | 
			
		||||
    e(61,registrationFailed, REGISTRATION_FAILED) \
 | 
			
		||||
    e(62,barringInfoChanged, BARRING_INFO_CHANGED) \
 | 
			
		||||
    e(63,cellInfoList_1_5,CELL_INFO_LIST_1_5) \
 | 
			
		||||
    e(64,networkScanResult_1_5,NETWORK_SCAN_RESULT_1_5) \
 | 
			
		||||
    e(65,dataCallListChanged_1_5,DATA_CALL_LIST_CHANGED_1_5)
 | 
			
		||||
 | 
			
		||||
typedef enum radio_req {
 | 
			
		||||
    RADIO_REQ_ANY = 0,
 | 
			
		||||
    RADIO_REQ_NONE = 0,
 | 
			
		||||
#define RADIO_REQ_(req,resp,Name,NAME) RADIO_REQ_##NAME = req,
 | 
			
		||||
#define RADIO_REQ__(req,resp,Name,NAME,x) RADIO_REQ_##NAME##x = req,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.0::IRadio */
 | 
			
		||||
    RADIO_REQ_SET_RESPONSE_FUNCTIONS = 1, /* setResponseFunctions */
 | 
			
		||||
@@ -2043,11 +2622,16 @@ typedef enum radio_req {
 | 
			
		||||
    RADIO_1_3_REQ_LAST = RADIO_REQ_GET_MODEM_STACK_STATUS,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.4::IRadio */
 | 
			
		||||
    RADIO_CALL_1_4(RADIO_REQ_) /* Since 1.2.5 */
 | 
			
		||||
    RADIO_CALL_1_4_(RADIO_REQ__) /* Since 1.2.5 */
 | 
			
		||||
    RADIO_REQ_SET_INITIAL_ATTACH_APN_1_4 = 147,
 | 
			
		||||
    RADIO_REQ_SET_DATA_PROFILE_1_4 = 148,
 | 
			
		||||
    RADIO_1_4_REQ_LAST = RADIO_REQ_GET_SIGNAL_STRENGTH_1_4
 | 
			
		||||
    RADIO_1_4_REQ_LAST = RADIO_REQ_GET_SIGNAL_STRENGTH_1_4,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.5::IRadio */
 | 
			
		||||
    RADIO_CALL_1_5_(RADIO_REQ__) /* Since 1.5.0 */
 | 
			
		||||
    RADIO_1_5_REQ_LAST = RADIO_REQ_SUPPLY_SIM_PERSONALIZATION
 | 
			
		||||
#undef RADIO_REQ_
 | 
			
		||||
#undef RADIO_REQ__
 | 
			
		||||
} RADIO_REQ;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_REQ) == 4);
 | 
			
		||||
 | 
			
		||||
@@ -2055,6 +2639,7 @@ typedef enum radio_resp {
 | 
			
		||||
    RADIO_RESP_ANY = 0,
 | 
			
		||||
    RADIO_RESP_NONE = 0,
 | 
			
		||||
#define RADIO_RESP_(req,resp,Name,NAME) RADIO_RESP_##NAME = resp,
 | 
			
		||||
#define RADIO_RESP__(req,resp,Name,NAME,x) RADIO_RESP_##NAME##x = resp,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.0::IRadioResponse */
 | 
			
		||||
    RADIO_CALL_1_0(RADIO_RESP_)
 | 
			
		||||
@@ -2080,13 +2665,21 @@ typedef enum radio_resp {
 | 
			
		||||
    RADIO_1_3_RESP_LAST = RADIO_RESP_GET_MODEM_STACK_STATUS,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.4::IRadioResponse */
 | 
			
		||||
    RADIO_CALL_1_4(RADIO_RESP_) /* Since 1.2.5 */
 | 
			
		||||
    RADIO_CALL_1_4_(RADIO_RESP__) /* Since 1.2.5 */
 | 
			
		||||
    RADIO_RESP_GET_CELL_INFO_LIST_1_4 = 149,
 | 
			
		||||
    RADIO_RESP_GET_DATA_REGISTRATION_STATE_1_4 = 150,
 | 
			
		||||
    RADIO_RESP_GET_ICC_CARD_STATUS_1_4 = 151,
 | 
			
		||||
    RADIO_RESP_GET_DATA_CALL_LIST_1_4 = 154,
 | 
			
		||||
    RADIO_1_4_RESP_LAST = RADIO_RESP_GET_SIGNAL_STRENGTH_1_4
 | 
			
		||||
    RADIO_1_4_RESP_LAST = RADIO_RESP_GET_SIGNAL_STRENGTH_1_4,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.5::IRadioResponse */
 | 
			
		||||
    RADIO_CALL_1_5_(RADIO_RESP__) /* Since 1.5.0 */
 | 
			
		||||
    RADIO_RESP_GET_DATA_CALL_LIST_1_5 = 166,
 | 
			
		||||
    RADIO_RESP_GET_CELL_INFO_LIST_1_5 = 174,
 | 
			
		||||
    RADIO_RESP_GET_ICC_CARD_STATUS_1_5 = 178,
 | 
			
		||||
    RADIO_1_5_RESP_LAST = RADIO_RESP_GET_ICC_CARD_STATUS_1_5
 | 
			
		||||
#undef RADIO_RESP_
 | 
			
		||||
#undef RADIO_RESP__
 | 
			
		||||
} RADIO_RESP;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_RESP) == 4);
 | 
			
		||||
 | 
			
		||||
@@ -2128,7 +2721,11 @@ typedef enum radio_ind {
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.4::IRadioIndication */
 | 
			
		||||
    RADIO_EVENT_1_4(RADIO_IND_)
 | 
			
		||||
    RADIO_1_4_IND_LAST = RADIO_IND_CURRENT_SIGNAL_STRENGTH_1_4 /* Since 1.2.5 */
 | 
			
		||||
    RADIO_1_4_IND_LAST = RADIO_IND_CURRENT_SIGNAL_STRENGTH_1_4, /* Since 1.2.5 */
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.5::IRadioIndication */
 | 
			
		||||
    RADIO_EVENT_1_5(RADIO_IND_)
 | 
			
		||||
    RADIO_1_5_IND_LAST = RADIO_IND_DATA_CALL_LIST_CHANGED_1_5 /* Since 1.5.0 */
 | 
			
		||||
#undef RADIO_IND_
 | 
			
		||||
} RADIO_IND;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_IND) == 4);
 | 
			
		||||
 
 | 
			
		||||
@@ -45,14 +45,29 @@ const char*
 | 
			
		||||
radio_req_name(
 | 
			
		||||
    RADIO_REQ req);
 | 
			
		||||
 | 
			
		||||
const char*
 | 
			
		||||
radio_req_name2(
 | 
			
		||||
    RadioInstance* instance,
 | 
			
		||||
    RADIO_REQ req); /* Since 1.6.0 */
 | 
			
		||||
 | 
			
		||||
const char*
 | 
			
		||||
radio_resp_name(
 | 
			
		||||
    RADIO_RESP resp);
 | 
			
		||||
 | 
			
		||||
const char*
 | 
			
		||||
radio_resp_name2(
 | 
			
		||||
    RadioInstance* instance,
 | 
			
		||||
    RADIO_RESP resp); /* Since 1.6.0 */
 | 
			
		||||
 | 
			
		||||
const char*
 | 
			
		||||
radio_ind_name(
 | 
			
		||||
    RADIO_IND ind);
 | 
			
		||||
 | 
			
		||||
const char*
 | 
			
		||||
radio_ind_name2(
 | 
			
		||||
    RadioInstance* instance,
 | 
			
		||||
    RADIO_IND ind); /* Since 1.6.0 */
 | 
			
		||||
 | 
			
		||||
RADIO_RESP
 | 
			
		||||
radio_req_resp(
 | 
			
		||||
    RADIO_REQ req)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										168
									
								
								include/radio_voice_types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								include/radio_voice_types.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,168 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2024 Jollyboys Ltd
 | 
			
		||||
 *
 | 
			
		||||
 * You may use this file under the terms of the BSD license as follows:
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 *   1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *   2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *      notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *      documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *   3. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *      contributors may be used to endorse or promote products derived
 | 
			
		||||
 *      from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
 | 
			
		||||
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 | 
			
		||||
 * THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 * The views and conclusions contained in the software and documentation
 | 
			
		||||
 * are those of the authors and should not be interpreted as representing
 | 
			
		||||
 * any official policies, either expressed or implied.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef RADIO_VOICE_TYPES_H
 | 
			
		||||
#define RADIO_VOICE_TYPES_H
 | 
			
		||||
 | 
			
		||||
#include <gbinder_types.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define RADIO_VOICE_INTERFACE_MAX (RADIO_VOICE_INTERFACE_COUNT - 1)
 | 
			
		||||
 | 
			
		||||
#define RADIO_VOICE_INSTANCE         "default"
 | 
			
		||||
#define RADIO_VOICE_IFACE_PREFIX     "android.hardware.radio.voice."
 | 
			
		||||
#define RADIO_VOICE_IFACE            "IRadioVoice"
 | 
			
		||||
#define RADIO_VOICE_RESPONSE_IFACE   "IRadioVoiceResponse"
 | 
			
		||||
#define RADIO_VOICE_INDICATION_IFACE "IRadioVoiceIndication"
 | 
			
		||||
#define RADIO_VOICE                  RADIO_VOICE_IFACE_PREFIX RADIO_VOICE_IFACE
 | 
			
		||||
#define RADIO_VOICE_FQNAME           RADIO_VOICE "/" RADIO_VOICE_INSTANCE
 | 
			
		||||
#define RADIO_VOICE_RESPONSE         RADIO_VOICE_IFACE_PREFIX RADIO_VOICE_RESPONSE_IFACE
 | 
			
		||||
#define RADIO_VOICE_INDICATION       RADIO_VOICE_IFACE_PREFIX RADIO_VOICE_INDICATION_IFACE
 | 
			
		||||
 | 
			
		||||
/* Transaction codes */
 | 
			
		||||
 | 
			
		||||
/* c(req,resp,Name,CALL_NAME) */
 | 
			
		||||
#define RADIO_VOICE_CALL_1(c) \
 | 
			
		||||
    c(1,1,acceptCall,ACCEPT_CALL) \
 | 
			
		||||
    c(2,3,cancelPendingUssd,CANCEL_PENDING_USSD) \
 | 
			
		||||
    c(3,4,conference,CONFERENCE) \
 | 
			
		||||
    c(4,5,dial,DIAL) \
 | 
			
		||||
    c(5,6,emergencyDial,EMERGENCY_DIAL) \
 | 
			
		||||
    c(6,7,exitEmergencyCallbackMode,EXIT_EMERGENCY_CALLBACK_MODE) \
 | 
			
		||||
    c(7,8,explicitCallTransfer,EXPLICIT_CALL_TRANSFER) \
 | 
			
		||||
    c(8,9,getCallForwardStatus,GET_CALL_FORWARD_STATUS) \
 | 
			
		||||
    c(9,10,getCallWaiting,GET_CALL_WAITING) \
 | 
			
		||||
    c(10,11,getClip,GET_CLIP) \
 | 
			
		||||
    c(11,12,getClir,GET_CLIR) \
 | 
			
		||||
    c(12,13,getCurrentCalls,GET_CURRENT_CALLS) \
 | 
			
		||||
    c(13,14,getLastCallFailCause,GET_LAST_CALL_FAIL_CAUSE) \
 | 
			
		||||
    c(14,15,getMute,GET_MUTE) \
 | 
			
		||||
    c(15,16,getPreferredVoicePrivacy,GET_PREFERRED_VOICE_PRIVACY) \
 | 
			
		||||
    c(16,17,getTtyMode,GET_TTY_MODE) \
 | 
			
		||||
    c(17,18,handleStkCallSetupRequestFromSim,HANDLE_STK_CALL_SETUP_REQUEST_FROM_SIM) \
 | 
			
		||||
    c(19,20,hangupForegroundResumeBackground,HANGUP_FOREGROUND_RESUME_BACKGROUND) \
 | 
			
		||||
    c(20,21,hangupWaitingOrBackground,HANGUP_WAITING_OR_BACKGROUND) \
 | 
			
		||||
    c(21,22,isVoNrEnabled,IS_VO_NR_ENABLED) \
 | 
			
		||||
    c(22,23,rejectCall,REJECT_CALL) \
 | 
			
		||||
    c(24,24,sendBurstDtmf,SEND_BURST_DTMF) \
 | 
			
		||||
    c(25,25,sendCdmaFeatureCode,SEND_CDMA_FEATURE_CODE) \
 | 
			
		||||
    c(26,26,sendDtmf,SEND_DTMF) \
 | 
			
		||||
    c(27,27,sendUssd,SEND_USSD) \
 | 
			
		||||
    c(28,28,separateConnection,SEPARATE_CONNECTION) \
 | 
			
		||||
    c(29,29,setCallForward,SET_CALL_FORWARD) \
 | 
			
		||||
    c(30,30,setCallWaiting,SET_CALL_WAITING) \
 | 
			
		||||
    c(31,31,setClir,SET_CLIR) \
 | 
			
		||||
    c(32,32,setMute,SET_MUTE) \
 | 
			
		||||
    c(33,33,setPreferredVoicePrivacy,SET_PREFERRED_VOICE_PRIVACY) \
 | 
			
		||||
    c(35,34,setTtyMode,SET_TTY_MODE) \
 | 
			
		||||
    c(36,35,setVoNrEnabled,SET_VO_NR_ENABLED) \
 | 
			
		||||
    c(37,36,startDtmf,START_DTMF) \
 | 
			
		||||
    c(38,37,stopDtmf,STOP_DTMF) \
 | 
			
		||||
    c(39,38,switchWaitingOrHoldingAndActive,SWITCH_WAITING_OR_HOLDING_AND_ACTIVE) \
 | 
			
		||||
 | 
			
		||||
/* i(code,Name,IND_NAME) */
 | 
			
		||||
#define RADIO_VOICE_IND_1(i) \
 | 
			
		||||
    i(1,callRing,CALL_RING) \
 | 
			
		||||
    i(2,callStateChanged,CALL_STATE_CHANGED) \
 | 
			
		||||
    i(3,cdmaCallWaiting,CDMA_CALL_WAITING) \
 | 
			
		||||
    i(4,cdmaInfoRec,CDMA_INFO_REC) \
 | 
			
		||||
    i(5,cdmaOtaProvisionStatus,CDMA_OTA_PROVISION_STATUS) \
 | 
			
		||||
    i(6,currentEmergencyNumberList,CURRENT_EMERGENCY_NUMBER_LIST) \
 | 
			
		||||
    i(7,enterEmergencyCallbackMode,ENTER_EMERGENCY_CALLBACK_MODE) \
 | 
			
		||||
    i(8,exitEmergencyCallbackMode,EXIT_EMERGENCY_CALLBACK_MODE) \
 | 
			
		||||
    i(9,indicateRingbackTone,INDICATE_RINGBACK_TONE) \
 | 
			
		||||
    i(10,onSupplementaryServiceIndication,ON_SUPPLEMENTARY_SERVICE_INDICATION) \
 | 
			
		||||
    i(11,onUssd,ON_USSD) \
 | 
			
		||||
    i(12,resendIncallMute,RESEND_INCALL_MUTE) \
 | 
			
		||||
    i(13,srvccStateNotify,SRVCC_STATE_NOTIFY) \
 | 
			
		||||
    i(14,stkCallControlAlphaNotify,STK_CALL_CONTROL_ALPHA_NOTIFY) \
 | 
			
		||||
    i(15,stkCallSetup,STK_CALL_SETUP) \
 | 
			
		||||
 | 
			
		||||
typedef enum radio_voice_req {
 | 
			
		||||
    RADIO_VOICE_REQ_ANY = 0,
 | 
			
		||||
    RADIO_VOICE_REQ_NONE = 0,
 | 
			
		||||
#define RADIO_VOICE_REQ_(req,resp,Name,NAME) RADIO_VOICE_REQ_##NAME = req,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.voice.IRadioVoice v1 */
 | 
			
		||||
    RADIO_VOICE_CALL_1(RADIO_VOICE_REQ_)
 | 
			
		||||
    RADIO_VOICE_REQ_HANGUP = 18, /* hangup */
 | 
			
		||||
    RADIO_VOICE_REQ_RESPONSE_ACKNOWLEDGEMENT = 23, /* responseAcknowledgement */
 | 
			
		||||
    RADIO_VOICE_REQ_SET_RESPONSE_FUNCTIONS = 34, /* setResponseFunctions */
 | 
			
		||||
    RADIO_VOICE_1_REQ_LAST = RADIO_VOICE_REQ_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_VOICE_REQ_
 | 
			
		||||
} RADIO_VOICE_REQ;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_VOICE_REQ) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_voice_resp {
 | 
			
		||||
    RADIO_VOICE_RESP_ANY = 0,
 | 
			
		||||
    RADIO_VOICE_RESP_NONE = 0,
 | 
			
		||||
#define RADIO_VOICE_RESP_(req,resp,Name,NAME) RADIO_VOICE_RESP_##NAME = resp,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.voice.IRadioVoiceResponse v1 */
 | 
			
		||||
    RADIO_VOICE_CALL_1(RADIO_VOICE_RESP_)
 | 
			
		||||
    RADIO_VOICE_RESP_ACKNOWLEDGE_REQUEST = 2, /* acknowledgeRequest */
 | 
			
		||||
    RADIO_VOICE_RESP_HANGUP_CONNECTION_RESPONSE = 19, /* hangupConnectionResponse */
 | 
			
		||||
    RADIO_VOICE_1_RESP_LAST = RADIO_VOICE_RESP_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_VOICE_RESP_
 | 
			
		||||
} RADIO_VOICE_RESP;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_VOICE_RESP) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_voice_ind {
 | 
			
		||||
    RADIO_VOICE_IND_ANY = 0,
 | 
			
		||||
    RADIO_VOICE_IND_NONE = 0,
 | 
			
		||||
#define RADIO_VOICE_IND_(code,Name,NAME) RADIO_VOICE_IND_##NAME = code,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio.voice.IRadioVoiceIndication v1 */
 | 
			
		||||
    RADIO_VOICE_IND_1(RADIO_VOICE_IND_)
 | 
			
		||||
    RADIO_VOICE_1_IND_LAST = RADIO_VOICE_IND_STK_CALL_SETUP,
 | 
			
		||||
 | 
			
		||||
#undef RADIO_VOICE_IND_
 | 
			
		||||
} RADIO_VOICE_IND;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_VOICE_IND) == 4);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* RADIO_VOICE_TYPES_H */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Local Variables:
 | 
			
		||||
 * mode: C
 | 
			
		||||
 * c-basic-offset: 4
 | 
			
		||||
 * indent-tabs-mode: nil
 | 
			
		||||
 * End:
 | 
			
		||||
 */
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
Name: libgbinder-radio
 | 
			
		||||
 | 
			
		||||
Version: 1.4.10
 | 
			
		||||
Version: 1.6.0
 | 
			
		||||
Release: 0
 | 
			
		||||
Summary: Binder client library for Android radio interfaces
 | 
			
		||||
License: BSD
 | 
			
		||||
 
 | 
			
		||||
@@ -92,6 +92,7 @@ guint32
 | 
			
		||||
radio_base_reserve_serial(
 | 
			
		||||
    RadioBase* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    /*
 | 
			
		||||
     * Using a static counter practically guarantees that different
 | 
			
		||||
     * serials would never be in use simultanously by different
 | 
			
		||||
@@ -114,6 +115,7 @@ radio_base_unlink_request(
 | 
			
		||||
    RadioRequest* req,
 | 
			
		||||
    RadioRequest* prev)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequest* next = req->queue_next;
 | 
			
		||||
 | 
			
		||||
    if (prev) {
 | 
			
		||||
@@ -134,6 +136,7 @@ radio_base_dequeue_request(
 | 
			
		||||
    RadioBasePriv* q,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequest* ptr = q->queue_first;
 | 
			
		||||
    RadioRequest* prev = NULL;
 | 
			
		||||
 | 
			
		||||
@@ -154,6 +157,7 @@ radio_base_deactivate_request(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
 | 
			
		||||
    g_hash_table_remove(priv->pending, KEY(req->serial2));
 | 
			
		||||
@@ -177,6 +181,7 @@ radio_base_drop_req(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    radio_base_cancel_request(self, req);
 | 
			
		||||
    radio_base_deactivate_request(self, req);
 | 
			
		||||
    radio_base_reset_timeout(self);
 | 
			
		||||
@@ -192,6 +197,7 @@ radio_base_detach_req(
 | 
			
		||||
    gpointer value,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequest* req = value;
 | 
			
		||||
 | 
			
		||||
    radio_base_cancel_request(THIS(user_data), req);
 | 
			
		||||
@@ -206,6 +212,7 @@ radio_base_fail_request(
 | 
			
		||||
    RADIO_REQUEST_STATE state,
 | 
			
		||||
    RADIO_TX_STATUS status)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    radio_request_ref(req);
 | 
			
		||||
    req->state = state;
 | 
			
		||||
    if (req->complete) {
 | 
			
		||||
@@ -225,6 +232,7 @@ radio_base_request_failed(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    radio_base_fail_request(self, req,
 | 
			
		||||
        RADIO_REQUEST_STATE_FAILED,
 | 
			
		||||
        RADIO_TX_STATUS_FAILED);
 | 
			
		||||
@@ -237,6 +245,7 @@ radio_base_request_sent(
 | 
			
		||||
    RadioRequest* req,
 | 
			
		||||
    int status)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    req->tx_id = 0;
 | 
			
		||||
    if (status != GBINDER_STATUS_OK) {
 | 
			
		||||
        g_object_ref(self);
 | 
			
		||||
@@ -251,6 +260,7 @@ radio_base_submit_transaction(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
 | 
			
		||||
    if (req->serial2) {
 | 
			
		||||
@@ -300,6 +310,7 @@ radio_base_can_set_owner(
 | 
			
		||||
    RadioBasePriv* priv,
 | 
			
		||||
    RadioRequestGroup* group)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    /*
 | 
			
		||||
     * Caller has verified that the group isn't already the owner.
 | 
			
		||||
     * It's also been checked that either the owner queue is empty,
 | 
			
		||||
@@ -340,6 +351,7 @@ void
 | 
			
		||||
radio_base_move_owner_queue(
 | 
			
		||||
    RadioBase* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
 | 
			
		||||
    if (!priv->owner && priv->owner_queue) {
 | 
			
		||||
@@ -362,6 +374,7 @@ radio_base_can_submit_request(
 | 
			
		||||
    RadioBasePriv* priv,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (priv->block_req) {
 | 
			
		||||
        /* The current blocker can be resubmitted */
 | 
			
		||||
        return priv->block_req == req;
 | 
			
		||||
@@ -401,6 +414,7 @@ radio_base_queue_request(
 | 
			
		||||
    RadioBasePriv* priv,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    req->state = RADIO_REQUEST_STATE_QUEUED;
 | 
			
		||||
    if (priv->queue_last) {
 | 
			
		||||
        priv->queue_last->queue_next = req;
 | 
			
		||||
@@ -415,6 +429,7 @@ guint
 | 
			
		||||
radio_base_submit_queued_requests(
 | 
			
		||||
    RadioBase* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
    guint submitted = 0;
 | 
			
		||||
 | 
			
		||||
@@ -461,6 +476,7 @@ gboolean
 | 
			
		||||
radio_base_timeout(
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBase* self = THIS(user_data);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
    const gint64 now = g_get_monotonic_time();
 | 
			
		||||
@@ -529,6 +545,7 @@ void
 | 
			
		||||
radio_base_initialize(
 | 
			
		||||
    RadioBase* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -536,6 +553,7 @@ radio_base_register_request(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    /* Caller makes sure that both arguments are not NULL */
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
 | 
			
		||||
@@ -549,6 +567,7 @@ radio_base_unregister_request(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    /* Caller doesn't check base for NULL */
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        RadioBasePriv* priv = self->priv;
 | 
			
		||||
@@ -566,6 +585,7 @@ radio_base_submit_request(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    /*
 | 
			
		||||
     * Caller makes sure that both arguments are not NULL. Note that if the
 | 
			
		||||
     * base is dead, request stays in the NEW state and can be resubmitted
 | 
			
		||||
@@ -603,6 +623,7 @@ radio_base_retry_request(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    /* Caller makes sure that both arguments are not NULL */
 | 
			
		||||
    if (req->state == RADIO_REQUEST_STATE_PENDING &&
 | 
			
		||||
        radio_base_can_retry(req)) {
 | 
			
		||||
@@ -627,6 +648,7 @@ void
 | 
			
		||||
radio_base_request_dropped(
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (req->object) {
 | 
			
		||||
        radio_base_drop_req(req->object, req);
 | 
			
		||||
    }
 | 
			
		||||
@@ -637,6 +659,7 @@ radio_base_timeout_ms(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    /* Caller checks object pointer for NULL */
 | 
			
		||||
    return req->timeout_ms ? req->timeout_ms : self->priv->default_timeout_ms;
 | 
			
		||||
}
 | 
			
		||||
@@ -645,6 +668,7 @@ void
 | 
			
		||||
radio_base_reset_timeout(
 | 
			
		||||
    RadioBase* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
 | 
			
		||||
    if (g_hash_table_size(priv->active)) {
 | 
			
		||||
@@ -707,6 +731,7 @@ radio_base_block_status(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequestGroup* group)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
 | 
			
		||||
    /* Caller checks object pointer for NULL */
 | 
			
		||||
@@ -724,6 +749,7 @@ radio_base_block(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequestGroup* group)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
 | 
			
		||||
    /* Caller checks object pointer for NULL */
 | 
			
		||||
@@ -750,6 +776,7 @@ radio_base_unblock(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequestGroup* group)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    /* Parameters are checked by the caller */
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
 | 
			
		||||
@@ -778,6 +805,7 @@ radio_base_handle_resp(
 | 
			
		||||
    const RadioResponseInfo* info,
 | 
			
		||||
    const GBinderReader* reader)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
    RadioRequest* req = g_hash_table_lookup(priv->active, KEY(info->serial));
 | 
			
		||||
 | 
			
		||||
@@ -829,6 +857,7 @@ radio_base_handle_ack(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    guint32 serial)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
    RadioRequest* req = g_hash_table_lookup(priv->active, KEY(serial));
 | 
			
		||||
 | 
			
		||||
@@ -844,6 +873,7 @@ void
 | 
			
		||||
radio_base_handle_death(
 | 
			
		||||
    RadioBase* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
    RadioRequest* dead = NULL;
 | 
			
		||||
    RadioRequest* req;
 | 
			
		||||
@@ -890,6 +920,7 @@ void
 | 
			
		||||
radio_base_submit_requests(
 | 
			
		||||
    RadioBase* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (radio_base_submit_queued_requests(self)) {
 | 
			
		||||
        radio_base_reset_timeout(self);
 | 
			
		||||
    }
 | 
			
		||||
@@ -900,6 +931,7 @@ radio_base_cancel_request(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    req->scheduled = 0;
 | 
			
		||||
    if (req->tx_id) {
 | 
			
		||||
        RADIO_BASE_GET_CLASS(self)->cancel_request(self, req->tx_id);
 | 
			
		||||
@@ -912,6 +944,7 @@ radio_base_set_default_timeout(
 | 
			
		||||
    RadioBase* self,
 | 
			
		||||
    int ms)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    /* Caller checks object pointer for NULL */
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
 | 
			
		||||
@@ -948,6 +981,7 @@ radio_base_add_owner_changed_handler(
 | 
			
		||||
    RadioBaseFunc fn,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    /* Caller checks object pointer for NULL */
 | 
			
		||||
    return G_LIKELY(fn) ?
 | 
			
		||||
        g_signal_connect_closure_by_id(self, radio_base_signals[SIGNAL_OWNER],
 | 
			
		||||
@@ -963,6 +997,7 @@ void
 | 
			
		||||
radio_base_init(
 | 
			
		||||
    RadioBase* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBasePriv* priv = G_TYPE_INSTANCE_GET_PRIVATE(self, RADIO_TYPE_BASE,
 | 
			
		||||
        RadioBasePriv);
 | 
			
		||||
 | 
			
		||||
@@ -980,6 +1015,7 @@ void
 | 
			
		||||
radio_base_object_finalize(
 | 
			
		||||
    GObject* object)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBase* self = THIS(object);
 | 
			
		||||
    RadioBasePriv* priv = self->priv;
 | 
			
		||||
 | 
			
		||||
@@ -998,6 +1034,7 @@ void
 | 
			
		||||
radio_base_class_init(
 | 
			
		||||
    RadioBaseClass* klass)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    g_type_class_add_private(klass, sizeof(RadioBasePriv));
 | 
			
		||||
    G_OBJECT_CLASS(klass)->finalize = radio_base_object_finalize;
 | 
			
		||||
    radio_base_signals[SIGNAL_OWNER] = g_signal_new(SIGNAL_OWNER_NAME,
 | 
			
		||||
 
 | 
			
		||||
@@ -96,6 +96,7 @@ void
 | 
			
		||||
radio_client_call_free(
 | 
			
		||||
    RadioClientCall* call)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    radio_request_unref(call->req);
 | 
			
		||||
    gutil_slice_free(call);
 | 
			
		||||
}
 | 
			
		||||
@@ -106,6 +107,7 @@ radio_client_call_destroy(
 | 
			
		||||
    void* user_data1,
 | 
			
		||||
    void* user_data2)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    radio_client_call_free(user_data2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -118,6 +120,7 @@ radio_client_call_complete(
 | 
			
		||||
    void* user_data1,
 | 
			
		||||
    void* user_data2)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioClientCall* call = user_data2;
 | 
			
		||||
 | 
			
		||||
    call->callback(RADIO_BASE(user_data1), call->req, status);
 | 
			
		||||
@@ -129,6 +132,7 @@ radio_client_handle_death(
 | 
			
		||||
    RadioInstance* instance,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBase* base = RADIO_BASE(user_data);
 | 
			
		||||
 | 
			
		||||
    g_object_ref(base);
 | 
			
		||||
@@ -143,6 +147,7 @@ radio_client_handle_connected(
 | 
			
		||||
    RadioInstance* instance,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    g_signal_emit(THIS(user_data), radio_client_signals[SIGNAL_CONNECTED], 0);
 | 
			
		||||
    radio_base_submit_requests(RADIO_BASE(user_data));
 | 
			
		||||
}
 | 
			
		||||
@@ -154,6 +159,7 @@ radio_client_handle_ack(
 | 
			
		||||
    guint32 serial,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    radio_base_handle_ack(RADIO_BASE(user_data), serial);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -166,6 +172,7 @@ radio_client_handle_ind(
 | 
			
		||||
    const GBinderReader* reader,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    g_signal_emit(THIS(user_data), radio_client_signals[SIGNAL_INDICATION],
 | 
			
		||||
        radio_instance_ind_quark(instance, code), code, reader);
 | 
			
		||||
}
 | 
			
		||||
@@ -179,8 +186,9 @@ radio_client_handle_resp(
 | 
			
		||||
    const GBinderReader* reader,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (!radio_base_handle_resp(RADIO_BASE(user_data), code, info, reader)) {
 | 
			
		||||
        const char* name = radio_resp_name(code);
 | 
			
		||||
        const char* name = radio_resp_name2(instance, code);
 | 
			
		||||
 | 
			
		||||
        /* Most likely this is a response to a cancelled request */
 | 
			
		||||
        GDEBUG("Ignoring IRadio response [%08x] %u %s", info->serial, code,
 | 
			
		||||
@@ -196,6 +204,7 @@ radio_client_add_handler(
 | 
			
		||||
    RadioClientFunc fn,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return (G_LIKELY(self) && G_LIKELY(fn)) ?
 | 
			
		||||
        g_signal_connect_closure_by_id(self, radio_client_signals[sig], 0,
 | 
			
		||||
             g_cclosure_new(G_CALLBACK(fn), user_data, NULL), FALSE) : 0;
 | 
			
		||||
@@ -209,6 +218,7 @@ RadioClient*
 | 
			
		||||
radio_client_new(
 | 
			
		||||
    RadioInstance* instance)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioClient* self = NULL;
 | 
			
		||||
 | 
			
		||||
    if (G_LIKELY(instance)) {
 | 
			
		||||
@@ -238,6 +248,7 @@ RadioClient*
 | 
			
		||||
radio_client_ref(
 | 
			
		||||
    RadioClient* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        g_object_ref(self);
 | 
			
		||||
    }
 | 
			
		||||
@@ -248,6 +259,7 @@ void
 | 
			
		||||
radio_client_unref(
 | 
			
		||||
    RadioClient* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        g_object_unref(self);
 | 
			
		||||
    }
 | 
			
		||||
@@ -257,6 +269,7 @@ const char*
 | 
			
		||||
radio_client_slot(
 | 
			
		||||
    RadioClient* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return G_LIKELY(self) ? self->instance->slot : NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -264,6 +277,7 @@ gboolean
 | 
			
		||||
radio_client_dead(
 | 
			
		||||
    RadioClient* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return !self || self->instance->dead;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -271,6 +285,7 @@ gboolean
 | 
			
		||||
radio_client_connected(
 | 
			
		||||
    RadioClient* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return self && self->instance->connected;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -278,14 +293,24 @@ RADIO_INTERFACE
 | 
			
		||||
radio_client_interface(
 | 
			
		||||
    RadioClient* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return G_LIKELY(self) ? self->instance->version : RADIO_INTERFACE_NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RADIO_AIDL_INTERFACE
 | 
			
		||||
radio_client_aidl_interface(
 | 
			
		||||
    RadioClient* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return G_LIKELY(self) ? self->instance->interface_aidl : RADIO_AIDL_INTERFACE_NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
radio_client_set_default_timeout(
 | 
			
		||||
    RadioClient* self,
 | 
			
		||||
    int milliseconds)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        radio_base_set_default_timeout(&self->base, milliseconds);
 | 
			
		||||
    }
 | 
			
		||||
@@ -298,6 +323,7 @@ radio_client_add_indication_handler(
 | 
			
		||||
    RadioClientIndicationFunc fn,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return (G_LIKELY(self) && G_LIKELY(fn)) ?
 | 
			
		||||
        g_signal_connect_closure_by_id(self,
 | 
			
		||||
            radio_client_signals[SIGNAL_INDICATION],
 | 
			
		||||
@@ -311,6 +337,7 @@ radio_client_add_owner_changed_handler(
 | 
			
		||||
    RadioClientFunc fn,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return self ? radio_base_add_owner_changed_handler(&self->base,
 | 
			
		||||
        (RadioBaseFunc) fn, user_data) : 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -321,6 +348,7 @@ radio_client_add_death_handler(
 | 
			
		||||
    RadioClientFunc fn,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_client_add_handler(self, SIGNAL_DEATH, fn, user_data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -330,6 +358,7 @@ radio_client_add_connected_handler(
 | 
			
		||||
    RadioClientFunc fn,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_client_add_handler(self, SIGNAL_CONNECTED, fn, user_data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -338,6 +367,7 @@ radio_client_remove_handler(
 | 
			
		||||
    RadioClient* self,
 | 
			
		||||
    gulong id)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(id) && G_LIKELY(self)) {
 | 
			
		||||
        g_signal_handler_disconnect(self, id);
 | 
			
		||||
    }
 | 
			
		||||
@@ -349,6 +379,7 @@ radio_client_remove_handlers(
 | 
			
		||||
    gulong* ids,
 | 
			
		||||
    int count)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    gutil_disconnect_handlers(self, ids, count);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -361,6 +392,7 @@ gboolean
 | 
			
		||||
radio_client_is_dead(
 | 
			
		||||
    RadioBase* base)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return THIS(base)->instance->dead;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -369,6 +401,7 @@ gboolean
 | 
			
		||||
radio_client_can_submit_requests(
 | 
			
		||||
    RadioBase* base)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return THIS(base)->instance->connected;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -378,6 +411,7 @@ radio_client_new_request(
 | 
			
		||||
    RadioBase* base,
 | 
			
		||||
    guint32 code)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_instance_new_request(THIS(base)->instance, code);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -388,6 +422,7 @@ radio_client_send_request(
 | 
			
		||||
    RadioRequest* req,
 | 
			
		||||
    RadioBaseRequestSentFunc callback)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioClientCall* call = g_slice_new(RadioClientCall);
 | 
			
		||||
    gulong tx_id;
 | 
			
		||||
 | 
			
		||||
@@ -410,6 +445,7 @@ radio_client_cancel_request(
 | 
			
		||||
    RadioBase* base,
 | 
			
		||||
    gulong id)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    radio_instance_cancel_request(THIS(base)->instance, id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -422,6 +458,7 @@ void
 | 
			
		||||
radio_client_init(
 | 
			
		||||
    RadioClient* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static
 | 
			
		||||
@@ -429,6 +466,7 @@ void
 | 
			
		||||
radio_client_finalize(
 | 
			
		||||
    GObject* object)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioClient* self = THIS(object);
 | 
			
		||||
 | 
			
		||||
    radio_instance_remove_all_handlers(self->instance, self->event_ids);
 | 
			
		||||
@@ -441,6 +479,7 @@ void
 | 
			
		||||
radio_client_class_init(
 | 
			
		||||
    RadioClientClass* klass)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBaseClass* base_class = RADIO_BASE_CLASS(klass);
 | 
			
		||||
    GObjectClass* object_class = G_OBJECT_CLASS(klass);
 | 
			
		||||
    GType type = G_OBJECT_CLASS_TYPE(klass);
 | 
			
		||||
 
 | 
			
		||||
@@ -56,6 +56,7 @@ typedef struct radio_config {
 | 
			
		||||
    GBinderRemoteObject* remote;
 | 
			
		||||
    GBinderLocalObject* response;
 | 
			
		||||
    GBinderLocalObject* indication;
 | 
			
		||||
    RADIO_INTERFACE_TYPE interface_type;
 | 
			
		||||
    RADIO_CONFIG_INTERFACE version;
 | 
			
		||||
    GHashTable* req_quarks;
 | 
			
		||||
    GHashTable* resp_quarks;
 | 
			
		||||
@@ -114,13 +115,21 @@ static const char* radio_config_signal_observe_indication_name[] = {
 | 
			
		||||
static guint radio_config_signals[SIGNAL_COUNT] = { 0 };
 | 
			
		||||
 | 
			
		||||
static const GBinderClientIfaceInfo radio_config_iface_info[] = {
 | 
			
		||||
    {RADIO_CONFIG_1_1, RADIO_CONFIG_1_1_REQ_LAST },
 | 
			
		||||
    {RADIO_CONFIG_1_1, RADIO_CONFIG_1_1_REQ_LAST },
 | 
			
		||||
    {RADIO_CONFIG_1_0, RADIO_CONFIG_1_0_REQ_LAST }
 | 
			
		||||
};
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_config_iface_info) ==
 | 
			
		||||
    RADIO_CONFIG_INTERFACE_COUNT);
 | 
			
		||||
 | 
			
		||||
static const GBinderClientIfaceInfo radio_config_aidl_iface_info[] = {
 | 
			
		||||
    {RADIO_CONFIG_AIDL, RADIO_CONFIG_1_1_REQ_LAST }
 | 
			
		||||
};
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_config_aidl_iface_info) ==
 | 
			
		||||
    RADIO_CONFIG_AIDL_INTERFACE_COUNT);
 | 
			
		||||
 | 
			
		||||
static const char* const radio_config_indication_ifaces[] = {
 | 
			
		||||
    RADIO_CONFIG_INDICATION_1_2,
 | 
			
		||||
    RADIO_CONFIG_INDICATION_1_1,
 | 
			
		||||
    RADIO_CONFIG_INDICATION_1_0,
 | 
			
		||||
    NULL
 | 
			
		||||
@@ -128,7 +137,15 @@ static const char* const radio_config_indication_ifaces[] = {
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_config_indication_ifaces) ==
 | 
			
		||||
    RADIO_CONFIG_INTERFACE_COUNT + 1);
 | 
			
		||||
 | 
			
		||||
static const char* const radio_config_aidl_indication_ifaces[] = {
 | 
			
		||||
    RADIO_CONFIG_AIDL_INDICATION,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_config_aidl_indication_ifaces) ==
 | 
			
		||||
    RADIO_CONFIG_AIDL_INTERFACE_COUNT + 1);
 | 
			
		||||
 | 
			
		||||
static const char* const radio_config_response_ifaces[] = {
 | 
			
		||||
    RADIO_CONFIG_RESPONSE_1_2,
 | 
			
		||||
    RADIO_CONFIG_RESPONSE_1_1,
 | 
			
		||||
    RADIO_CONFIG_RESPONSE_1_0,
 | 
			
		||||
    NULL
 | 
			
		||||
@@ -136,7 +153,15 @@ static const char* const radio_config_response_ifaces[] = {
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_config_response_ifaces) ==
 | 
			
		||||
    RADIO_CONFIG_INTERFACE_COUNT + 1);
 | 
			
		||||
 | 
			
		||||
static const char* const radio_config_aidl_response_ifaces[] = {
 | 
			
		||||
    RADIO_CONFIG_AIDL_RESPONSE,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_config_aidl_response_ifaces) ==
 | 
			
		||||
    RADIO_CONFIG_AIDL_INTERFACE_COUNT + 1);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_config_interface_desc {
 | 
			
		||||
    RADIO_INTERFACE_TYPE interface_type;
 | 
			
		||||
    RADIO_CONFIG_INTERFACE version;
 | 
			
		||||
    const char* fqname;
 | 
			
		||||
    const char* radio_iface;
 | 
			
		||||
@@ -147,6 +172,7 @@ typedef struct radio_config_interface_desc {
 | 
			
		||||
#define RADIO_CONFIG_INTERFACE_INDEX(x) (RADIO_CONFIG_INTERFACE_COUNT - x - 1)
 | 
			
		||||
 | 
			
		||||
#define RADIO_CONFIG_INTERFACE_DESC(v) \
 | 
			
		||||
        RADIO_INTERFACE_TYPE_HIDL, \
 | 
			
		||||
        RADIO_CONFIG_INTERFACE_##v, \
 | 
			
		||||
        RADIO_CONFIG_##v##_FQNAME, \
 | 
			
		||||
        RADIO_CONFIG_##v, \
 | 
			
		||||
@@ -156,15 +182,31 @@ typedef struct radio_config_interface_desc {
 | 
			
		||||
        RADIO_CONFIG_INTERFACE_INDEX(RADIO_CONFIG_INTERFACE_##v)
 | 
			
		||||
 | 
			
		||||
static const RadioConfigInterfaceDesc radio_config_interfaces[] = {
 | 
			
		||||
   { RADIO_CONFIG_INTERFACE_DESC(1_2) },
 | 
			
		||||
   { RADIO_CONFIG_INTERFACE_DESC(1_1) },
 | 
			
		||||
   { RADIO_CONFIG_INTERFACE_DESC(1_0) }
 | 
			
		||||
};
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_config_interfaces) ==
 | 
			
		||||
    RADIO_CONFIG_INTERFACE_COUNT);
 | 
			
		||||
 | 
			
		||||
static const RadioConfigInterfaceDesc radio_config_aidl_interfaces[] = {
 | 
			
		||||
    {
 | 
			
		||||
        RADIO_INTERFACE_TYPE_AIDL,
 | 
			
		||||
        RADIO_CONFIG_AIDL_INTERFACE_1,
 | 
			
		||||
        RADIO_CONFIG_AIDL_FQNAME,
 | 
			
		||||
        RADIO_CONFIG_AIDL,
 | 
			
		||||
        radio_config_aidl_indication_ifaces,
 | 
			
		||||
        radio_config_aidl_response_ifaces,
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_config_aidl_interfaces) ==
 | 
			
		||||
    RADIO_CONFIG_AIDL_INTERFACE_COUNT);
 | 
			
		||||
 | 
			
		||||
/* Must have a separate instance for each interface version */
 | 
			
		||||
static RadioConfig* radio_config_instance[RADIO_CONFIG_INTERFACE_COUNT] =
 | 
			
		||||
    { NULL };
 | 
			
		||||
static RadioConfig* radio_config_aidl_instance[RADIO_CONFIG_AIDL_INTERFACE_COUNT] =
 | 
			
		||||
    { NULL };
 | 
			
		||||
 | 
			
		||||
typedef struct radio_config_call {
 | 
			
		||||
    RadioRequest* req;
 | 
			
		||||
@@ -181,6 +223,7 @@ void
 | 
			
		||||
radio_config_call_free(
 | 
			
		||||
    RadioConfigCall* call)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    radio_request_unref(call->req);
 | 
			
		||||
    gutil_slice_free(call);
 | 
			
		||||
}
 | 
			
		||||
@@ -193,6 +236,7 @@ radio_config_call_complete(
 | 
			
		||||
    int status,
 | 
			
		||||
    void* user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioConfigCall* call = user_data;
 | 
			
		||||
 | 
			
		||||
    call->callback(call->object, call->req, status);
 | 
			
		||||
@@ -201,17 +245,32 @@ radio_config_call_complete(
 | 
			
		||||
static
 | 
			
		||||
const char*
 | 
			
		||||
radio_config_known_req_name(
 | 
			
		||||
    RadioConfig* self,
 | 
			
		||||
    RADIO_CONFIG_REQ req)
 | 
			
		||||
{
 | 
			
		||||
    switch (req) {
 | 
			
		||||
    case RADIO_CONFIG_REQ_SET_RESPONSE_FUNCTIONS: return "setResponseFunctions";
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (!G_LIKELY(self) || self->interface_type == RADIO_INTERFACE_TYPE_HIDL) {
 | 
			
		||||
        switch (req) {
 | 
			
		||||
        case RADIO_CONFIG_REQ_SET_RESPONSE_FUNCTIONS: return "setResponseFunctions";
 | 
			
		||||
#define RADIO_CONFIG_REQ_(req,resp,Name,NAME) \
 | 
			
		||||
    case RADIO_CONFIG_REQ_##NAME: return #Name;
 | 
			
		||||
    RADIO_CONFIG_CALL_1_0(RADIO_CONFIG_REQ_)
 | 
			
		||||
    RADIO_CONFIG_CALL_1_1(RADIO_CONFIG_REQ_)
 | 
			
		||||
        case RADIO_CONFIG_REQ_##NAME: return #Name;
 | 
			
		||||
        RADIO_CONFIG_CALL_1_0(RADIO_CONFIG_REQ_)
 | 
			
		||||
        RADIO_CONFIG_CALL_1_1(RADIO_CONFIG_REQ_)
 | 
			
		||||
        /* 1.2 defines no new requests */
 | 
			
		||||
#undef RADIO_CONFIG_REQ_
 | 
			
		||||
    case RADIO_CONFIG_REQ_ANY:
 | 
			
		||||
        break;
 | 
			
		||||
        case RADIO_CONFIG_REQ_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (self->interface_type == RADIO_INTERFACE_TYPE_AIDL) {
 | 
			
		||||
        switch ((RADIO_CONFIG_AIDL_REQ)req) {
 | 
			
		||||
        case RADIO_CONFIG_AIDL_REQ_SET_RESPONSE_FUNCTIONS: return "setResponseFunctions";
 | 
			
		||||
#define RADIO_CONFIG_AIDL_REQ_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_CONFIG_AIDL_REQ_##NAME: return #Name;
 | 
			
		||||
        RADIO_CONFIG_AIDL_CALL_1(RADIO_CONFIG_AIDL_REQ_)
 | 
			
		||||
#undef RADIO_CONFIG_AIDL_REQ_
 | 
			
		||||
        case RADIO_CONFIG_AIDL_REQ_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
@@ -219,16 +278,31 @@ radio_config_known_req_name(
 | 
			
		||||
static
 | 
			
		||||
const char*
 | 
			
		||||
radio_config_known_resp_name(
 | 
			
		||||
    RadioConfig* self,
 | 
			
		||||
    RADIO_CONFIG_RESP resp)
 | 
			
		||||
{
 | 
			
		||||
    switch (resp) {
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (!G_LIKELY(self) || self->interface_type == RADIO_INTERFACE_TYPE_HIDL) {
 | 
			
		||||
        switch (resp) {
 | 
			
		||||
#define RADIO_CONFIG_RESP_(req,resp,Name,NAME) \
 | 
			
		||||
    case RADIO_CONFIG_RESP_##NAME: return #Name "Response";
 | 
			
		||||
    RADIO_CONFIG_CALL_1_0(RADIO_CONFIG_RESP_)
 | 
			
		||||
    RADIO_CONFIG_CALL_1_1(RADIO_CONFIG_RESP_)
 | 
			
		||||
        case RADIO_CONFIG_RESP_##NAME: return #Name "Response";
 | 
			
		||||
        RADIO_CONFIG_CALL_1_0(RADIO_CONFIG_RESP_)
 | 
			
		||||
        RADIO_CONFIG_CALL_1_1(RADIO_CONFIG_RESP_)
 | 
			
		||||
#undef RADIO_CONFIG_RESP_
 | 
			
		||||
    case RADIO_CONFIG_RESP_ANY:
 | 
			
		||||
        break;
 | 
			
		||||
        case RADIO_CONFIG_RESP_GET_SIM_SLOTS_STATUS_1_2:
 | 
			
		||||
            return "getSimSlotsStatusResponse_1_2";
 | 
			
		||||
        case RADIO_CONFIG_RESP_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (self->interface_type == RADIO_INTERFACE_TYPE_AIDL) {
 | 
			
		||||
        switch ((RADIO_CONFIG_AIDL_RESP)resp) {
 | 
			
		||||
#define RADIO_CONFIG_AIDL_RESP_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_CONFIG_AIDL_RESP_##NAME: return #Name "Response";
 | 
			
		||||
        RADIO_CONFIG_AIDL_CALL_1(RADIO_CONFIG_AIDL_RESP_)
 | 
			
		||||
#undef RADIO_CONFIG_AIDL_RESP_
 | 
			
		||||
        case RADIO_CONFIG_AIDL_RESP_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
@@ -236,16 +310,30 @@ radio_config_known_resp_name(
 | 
			
		||||
static
 | 
			
		||||
const char*
 | 
			
		||||
radio_config_known_ind_name(
 | 
			
		||||
    RadioConfig* self,
 | 
			
		||||
    RADIO_CONFIG_IND ind)
 | 
			
		||||
{
 | 
			
		||||
    switch (ind) {
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (!G_LIKELY(self) || self->interface_type == RADIO_INTERFACE_TYPE_HIDL) {
 | 
			
		||||
        switch (ind) {
 | 
			
		||||
#define RADIO_CONFIG_IND_(code,Name,NAME) \
 | 
			
		||||
    case RADIO_CONFIG_IND_##NAME: return #Name;
 | 
			
		||||
    RADIO_CONFIG_IND_1_0(RADIO_CONFIG_IND_)
 | 
			
		||||
    /* 1.1 defines no new indications */
 | 
			
		||||
        case RADIO_CONFIG_IND_##NAME: return #Name;
 | 
			
		||||
        RADIO_CONFIG_IND_1_0(RADIO_CONFIG_IND_)
 | 
			
		||||
        /* 1.1 defines no new indications */
 | 
			
		||||
        RADIO_CONFIG_IND_1_2(RADIO_CONFIG_IND_)
 | 
			
		||||
#undef RADIO_CONFIG_IND_
 | 
			
		||||
    case RADIO_CONFIG_IND_ANY:
 | 
			
		||||
        break;
 | 
			
		||||
        case RADIO_CONFIG_IND_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (self->interface_type == RADIO_INTERFACE_TYPE_AIDL) {
 | 
			
		||||
        switch ((RADIO_CONFIG_AIDL_IND)ind) {
 | 
			
		||||
#define RADIO_CONFIG_AIDL_IND_(code,Name,NAME) \
 | 
			
		||||
        case RADIO_CONFIG_AIDL_IND_##NAME: return #Name;
 | 
			
		||||
        RADIO_CONFIG_AIDL_IND_1(RADIO_CONFIG_AIDL_IND_)
 | 
			
		||||
#undef RADIO_CONFIG_AIDL_IND_
 | 
			
		||||
        case RADIO_CONFIG_AIDL_IND_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
@@ -256,6 +344,7 @@ radio_config_req_quark(
 | 
			
		||||
    RadioConfig* self,
 | 
			
		||||
    RADIO_CONFIG_REQ req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    GQuark q = 0;
 | 
			
		||||
 | 
			
		||||
    if (req != RADIO_CONFIG_REQ_ANY) {
 | 
			
		||||
@@ -263,7 +352,7 @@ radio_config_req_quark(
 | 
			
		||||
 | 
			
		||||
        q = GPOINTER_TO_UINT(g_hash_table_lookup(self->req_quarks, key));
 | 
			
		||||
        if (!q) {
 | 
			
		||||
            const char* known = radio_config_known_req_name(req);
 | 
			
		||||
            const char* known = radio_config_known_req_name(self, req);
 | 
			
		||||
 | 
			
		||||
            if (known) {
 | 
			
		||||
                q = g_quark_from_static_string(known);
 | 
			
		||||
@@ -282,6 +371,7 @@ radio_config_resp_quark(
 | 
			
		||||
    RadioConfig* self,
 | 
			
		||||
    RADIO_CONFIG_RESP resp)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    GQuark q = 0;
 | 
			
		||||
 | 
			
		||||
    if (resp != RADIO_CONFIG_RESP_ANY) {
 | 
			
		||||
@@ -289,7 +379,7 @@ radio_config_resp_quark(
 | 
			
		||||
 | 
			
		||||
        q = GPOINTER_TO_UINT(g_hash_table_lookup(self->resp_quarks, key));
 | 
			
		||||
        if (!q) {
 | 
			
		||||
            const char* known = radio_config_known_resp_name(resp);
 | 
			
		||||
            const char* known = radio_config_known_resp_name(self, resp);
 | 
			
		||||
 | 
			
		||||
            if (known) {
 | 
			
		||||
                q = g_quark_from_static_string(known);
 | 
			
		||||
@@ -308,6 +398,7 @@ radio_config_ind_quark(
 | 
			
		||||
    RadioConfig* self,
 | 
			
		||||
    RADIO_CONFIG_IND ind)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    GQuark q = 0;
 | 
			
		||||
 | 
			
		||||
    if (ind != RADIO_CONFIG_IND_ANY) {
 | 
			
		||||
@@ -315,7 +406,7 @@ radio_config_ind_quark(
 | 
			
		||||
 | 
			
		||||
        q = GPOINTER_TO_UINT(g_hash_table_lookup(self->ind_quarks, key));
 | 
			
		||||
        if (!q) {
 | 
			
		||||
            const char* known = radio_config_known_ind_name(ind);
 | 
			
		||||
            const char* known = radio_config_known_ind_name(self, ind);
 | 
			
		||||
 | 
			
		||||
            if (known) {
 | 
			
		||||
                q = g_quark_from_static_string(known);
 | 
			
		||||
@@ -338,6 +429,7 @@ radio_config_indication(
 | 
			
		||||
    int* status,
 | 
			
		||||
    void* user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioConfig* self = THIS(user_data);
 | 
			
		||||
    const char* iface = gbinder_remote_request_interface(req);
 | 
			
		||||
 | 
			
		||||
@@ -383,55 +475,67 @@ radio_config_response(
 | 
			
		||||
    int* status,
 | 
			
		||||
    void* user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioConfig* self = THIS(user_data);
 | 
			
		||||
    const char* iface = gbinder_remote_request_interface(req);
 | 
			
		||||
    const RadioResponseInfo* info = NULL;
 | 
			
		||||
    GBinderReader args;
 | 
			
		||||
 | 
			
		||||
    gbinder_remote_request_init_reader(req, &args);
 | 
			
		||||
 | 
			
		||||
    if (gutil_strv_contains((GStrV*)radio_config_response_ifaces, iface)) {
 | 
			
		||||
        GBinderReader args;
 | 
			
		||||
        const RadioResponseInfo* info;
 | 
			
		||||
 | 
			
		||||
        /* All responses must be one-way and have RadioResponseInfo */
 | 
			
		||||
        gbinder_remote_request_init_reader(req, &args);
 | 
			
		||||
        info = gbinder_reader_read_hidl_struct(&args, RadioResponseInfo);
 | 
			
		||||
        GASSERT(flags & GBINDER_TX_FLAG_ONEWAY);
 | 
			
		||||
        if (info) {
 | 
			
		||||
            int p = RADIO_OBSERVER_PRIORITY_HIGHEST;
 | 
			
		||||
            const GQuark quark = radio_config_resp_quark(self, code);
 | 
			
		||||
            const guint* signals = radio_config_signals +
 | 
			
		||||
                SIGNAL_OBSERVE_RESPONSE_0;
 | 
			
		||||
 | 
			
		||||
            radio_config_ref(self);
 | 
			
		||||
 | 
			
		||||
            /* High-priority observers get notified first */
 | 
			
		||||
            for (; p > RADIO_OBSERVER_PRIORITY_DEFAULT; p--) {
 | 
			
		||||
                const int i = RADIO_OBSERVER_PRIORITY_INDEX(p);
 | 
			
		||||
 | 
			
		||||
                if (signals[i]) {
 | 
			
		||||
                    g_signal_emit(self, signals[i], quark, code, info, &args);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Then the response is actually processed */
 | 
			
		||||
            if (!radio_base_handle_resp(&self->base, code, info, &args)) {
 | 
			
		||||
                const char* name = radio_config_known_resp_name(code);
 | 
			
		||||
 | 
			
		||||
                /* Most likely this is a response to a cancelled request */
 | 
			
		||||
                GDEBUG("Ignoring IRadioConfig response [%08x] %u %s",
 | 
			
		||||
                    info->serial, code, name ? name : "");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Followed by the remaining observers in their priority order */
 | 
			
		||||
            for (; p >= RADIO_OBSERVER_PRIORITY_LOWEST; p--) {
 | 
			
		||||
                const int i = RADIO_OBSERVER_PRIORITY_INDEX(p);
 | 
			
		||||
 | 
			
		||||
                if (signals[i]) {
 | 
			
		||||
                    g_signal_emit(self, signals[i], quark, code, info, &args);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            radio_config_unref(self);
 | 
			
		||||
            *status = GBINDER_STATUS_OK;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (gutil_strv_contains((GStrV*)radio_config_aidl_response_ifaces, iface)) {
 | 
			
		||||
        /* RadioResponseInfo has the same fields/padding between HIDL and AIDL */
 | 
			
		||||
        gsize out_size;
 | 
			
		||||
        info = gbinder_reader_read_parcelable(&args, &out_size);
 | 
			
		||||
        GASSERT(out_size == sizeof(RadioResponseInfo));
 | 
			
		||||
    } else {
 | 
			
		||||
        GDEBUG("radio_config_response called on unknown interface %s", iface);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    GASSERT(flags & GBINDER_TX_FLAG_ONEWAY);
 | 
			
		||||
 | 
			
		||||
    if (info) {
 | 
			
		||||
        int p = RADIO_OBSERVER_PRIORITY_HIGHEST;
 | 
			
		||||
        const GQuark quark = radio_config_resp_quark(self, code);
 | 
			
		||||
        const guint* signals = radio_config_signals +
 | 
			
		||||
            SIGNAL_OBSERVE_RESPONSE_0;
 | 
			
		||||
 | 
			
		||||
        radio_config_ref(self);
 | 
			
		||||
 | 
			
		||||
        /* High-priority observers get notified first */
 | 
			
		||||
        for (; p > RADIO_OBSERVER_PRIORITY_DEFAULT; p--) {
 | 
			
		||||
            const int i = RADIO_OBSERVER_PRIORITY_INDEX(p);
 | 
			
		||||
 | 
			
		||||
            if (signals[i]) {
 | 
			
		||||
                g_signal_emit(self, signals[i], quark, code, info, &args);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Then the response is actually processed */
 | 
			
		||||
        if (!radio_base_handle_resp(&self->base, code, info, &args)) {
 | 
			
		||||
            const char* name = radio_config_known_resp_name(self, code);
 | 
			
		||||
 | 
			
		||||
            /* Most likely this is a response to a cancelled request */
 | 
			
		||||
            GDEBUG("Ignoring IRadioConfig response [%08x] %u %s",
 | 
			
		||||
                info->serial, code, name ? name : "");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Followed by the remaining observers in their priority order */
 | 
			
		||||
        for (; p >= RADIO_OBSERVER_PRIORITY_LOWEST; p--) {
 | 
			
		||||
            const int i = RADIO_OBSERVER_PRIORITY_INDEX(p);
 | 
			
		||||
 | 
			
		||||
            if (signals[i]) {
 | 
			
		||||
                g_signal_emit(self, signals[i], quark, code, info, &args);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        radio_config_unref(self);
 | 
			
		||||
        *status = GBINDER_STATUS_OK;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -440,6 +544,7 @@ void
 | 
			
		||||
radio_config_drop_binder(
 | 
			
		||||
    RadioConfig* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (self->indication) {
 | 
			
		||||
        gbinder_local_object_drop(self->indication);
 | 
			
		||||
        self->indication = NULL;
 | 
			
		||||
@@ -462,6 +567,7 @@ radio_config_died(
 | 
			
		||||
    GBinderRemoteObject* obj,
 | 
			
		||||
    void* user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioConfig* self = THIS(user_data);
 | 
			
		||||
 | 
			
		||||
    GWARN("IRadioConfig died");
 | 
			
		||||
@@ -482,6 +588,7 @@ radio_config_gone(
 | 
			
		||||
    gpointer user_data,
 | 
			
		||||
    GObject* dead)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    GObject** shared_instance = user_data;
 | 
			
		||||
 | 
			
		||||
    if (*shared_instance == dead) {
 | 
			
		||||
@@ -497,16 +604,17 @@ radio_config_create(
 | 
			
		||||
    GBinderRemoteObject* remote,
 | 
			
		||||
    const RadioConfigInterfaceDesc* desc)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioConfig* self = g_object_new(THIS_TYPE, NULL);
 | 
			
		||||
    GBinderLocalRequest* req;
 | 
			
		||||
    GBinderWriter writer;
 | 
			
		||||
    int status;
 | 
			
		||||
    guint req_code = RADIO_CONFIG_REQ_NONE;
 | 
			
		||||
 | 
			
		||||
    radio_base_initialize(&self->base);
 | 
			
		||||
    self->interface_type = desc->interface_type;
 | 
			
		||||
    self->version = desc->version;
 | 
			
		||||
    self->remote = gbinder_remote_object_ref(remote);
 | 
			
		||||
    self->client = gbinder_client_new2(remote, radio_config_iface_info,
 | 
			
		||||
        G_N_ELEMENTS(radio_config_iface_info));
 | 
			
		||||
    self->indication = gbinder_servicemanager_new_local_object2(sm,
 | 
			
		||||
        desc->ind_ifaces, radio_config_indication, self);
 | 
			
		||||
    self->response = gbinder_servicemanager_new_local_object2(sm,
 | 
			
		||||
@@ -514,14 +622,28 @@ radio_config_create(
 | 
			
		||||
    self->death_id = gbinder_remote_object_add_death_handler(remote,
 | 
			
		||||
        radio_config_died, self);
 | 
			
		||||
 | 
			
		||||
    if (self->interface_type == RADIO_INTERFACE_TYPE_HIDL) {
 | 
			
		||||
        self->client = gbinder_client_new2(remote, radio_config_iface_info,
 | 
			
		||||
            G_N_ELEMENTS(radio_config_iface_info));
 | 
			
		||||
        req_code = RADIO_CONFIG_REQ_SET_RESPONSE_FUNCTIONS;
 | 
			
		||||
    } else if (self->interface_type == RADIO_INTERFACE_TYPE_AIDL) {
 | 
			
		||||
        self->client = gbinder_client_new2(remote, radio_config_aidl_iface_info,
 | 
			
		||||
            G_N_ELEMENTS(radio_config_aidl_iface_info));
 | 
			
		||||
        req_code = RADIO_CONFIG_AIDL_REQ_SET_RESPONSE_FUNCTIONS;
 | 
			
		||||
 | 
			
		||||
        gbinder_local_object_set_stability(self->indication, GBINDER_STABILITY_VINTF);
 | 
			
		||||
        gbinder_local_object_set_stability(self->response, GBINDER_STABILITY_VINTF);
 | 
			
		||||
    }
 | 
			
		||||
    GASSERT(self->client);
 | 
			
		||||
 | 
			
		||||
    /* IRadioConfig::setResponseFunctions */
 | 
			
		||||
    req = gbinder_client_new_request2(self->client,
 | 
			
		||||
        RADIO_CONFIG_REQ_SET_RESPONSE_FUNCTIONS);
 | 
			
		||||
        req_code);
 | 
			
		||||
    gbinder_local_request_init_writer(req, &writer);
 | 
			
		||||
    gbinder_writer_append_local_object(&writer, self->response);
 | 
			
		||||
    gbinder_writer_append_local_object(&writer, self->indication);
 | 
			
		||||
    gbinder_remote_reply_unref(gbinder_client_transact_sync_reply(self->client,
 | 
			
		||||
        RADIO_CONFIG_REQ_SET_RESPONSE_FUNCTIONS, req, &status));
 | 
			
		||||
        req_code, req, &status));
 | 
			
		||||
    GVERBOSE_("IRadioConfig::setResponseFunctions status %d", status);
 | 
			
		||||
    gbinder_local_request_unref(req);
 | 
			
		||||
    return self;
 | 
			
		||||
@@ -535,6 +657,7 @@ RadioConfig*
 | 
			
		||||
radio_config_new(
 | 
			
		||||
    void)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_config_new_with_version(RADIO_CONFIG_INTERFACE_MAX);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -542,20 +665,53 @@ RadioConfig*
 | 
			
		||||
radio_config_new_with_version(
 | 
			
		||||
    RADIO_CONFIG_INTERFACE max_version)
 | 
			
		||||
{
 | 
			
		||||
    /* Validate the requested version to avoid out-of-bounds access */
 | 
			
		||||
    if (max_version < RADIO_CONFIG_INTERFACE_1_0) {
 | 
			
		||||
        max_version = RADIO_CONFIG_INTERFACE_1_0;
 | 
			
		||||
    } else if (max_version > RADIO_CONFIG_INTERFACE_MAX) {
 | 
			
		||||
        max_version = RADIO_CONFIG_INTERFACE_MAX;
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_config_new_with_version_and_interface_type(max_version,
 | 
			
		||||
        RADIO_INTERFACE_TYPE_HIDL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RadioConfig*
 | 
			
		||||
radio_config_new_with_version_and_interface_type(
 | 
			
		||||
    RADIO_CONFIG_INTERFACE max_version,
 | 
			
		||||
    RADIO_INTERFACE_TYPE interface_type)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    static RadioConfig** instances = NULL;
 | 
			
		||||
    const RadioConfigInterfaceDesc* interfaces = NULL;
 | 
			
		||||
    gsize num_interfaces = 0;
 | 
			
		||||
    const char* binder_device = GBINDER_DEFAULT_HWBINDER;
 | 
			
		||||
 | 
			
		||||
    if (interface_type == RADIO_INTERFACE_TYPE_HIDL) {
 | 
			
		||||
        /* Validate the requested version to avoid out-of-bounds access */
 | 
			
		||||
        if (max_version < RADIO_CONFIG_INTERFACE_1_0) {
 | 
			
		||||
            max_version = RADIO_CONFIG_INTERFACE_1_0;
 | 
			
		||||
        } else if (max_version > RADIO_CONFIG_INTERFACE_MAX) {
 | 
			
		||||
            max_version = RADIO_CONFIG_INTERFACE_MAX;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        instances = radio_config_instance;
 | 
			
		||||
        interfaces = radio_config_interfaces;
 | 
			
		||||
        num_interfaces = G_N_ELEMENTS(radio_config_interfaces);
 | 
			
		||||
    } else if (interface_type == RADIO_INTERFACE_TYPE_AIDL) {
 | 
			
		||||
        /* Only RADIO_CONFIG_AIDL_INTERFACE_1 is supported for now */
 | 
			
		||||
        max_version = RADIO_CONFIG_AIDL_INTERFACE_1;
 | 
			
		||||
 | 
			
		||||
        binder_device = GBINDER_DEFAULT_BINDER;
 | 
			
		||||
        instances = radio_config_aidl_instance;
 | 
			
		||||
        interfaces = radio_config_aidl_interfaces;
 | 
			
		||||
        num_interfaces = G_N_ELEMENTS(radio_config_aidl_interfaces);
 | 
			
		||||
    } else {
 | 
			
		||||
        GINFO("Wrong interface_type %d (neither HIDL nor AIDL)", interface_type);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (radio_config_instance[max_version]) {
 | 
			
		||||
    if (instances[max_version]) {
 | 
			
		||||
        /* The requested instance already exists */
 | 
			
		||||
        return radio_config_ref(radio_config_instance[max_version]);
 | 
			
		||||
        return radio_config_ref(instances[max_version]);
 | 
			
		||||
    } else {
 | 
			
		||||
        /* Assume /dev/hwbinder */
 | 
			
		||||
        /* Assume /dev/hwbinder for HIDL, /dev/binder for AIDL */
 | 
			
		||||
        GBinderServiceManager* sm =
 | 
			
		||||
            gbinder_servicemanager_new(GBINDER_DEFAULT_HWBINDER);
 | 
			
		||||
            gbinder_servicemanager_new(binder_device);
 | 
			
		||||
 | 
			
		||||
        if (sm) {
 | 
			
		||||
            guint i;
 | 
			
		||||
@@ -564,8 +720,8 @@ radio_config_new_with_version(
 | 
			
		||||
            RadioConfig* config = NULL;
 | 
			
		||||
 | 
			
		||||
            /* Find maximum available version not exceeding the requested one */
 | 
			
		||||
            for (i=0; i<G_N_ELEMENTS(radio_config_interfaces) && !obj; i++) {
 | 
			
		||||
                desc = radio_config_interfaces + i;
 | 
			
		||||
            for (i=0; i<num_interfaces && !obj; i++) {
 | 
			
		||||
                desc = interfaces + i;
 | 
			
		||||
                if (desc->version <= max_version) {
 | 
			
		||||
                    obj = gbinder_servicemanager_get_service_sync(sm,
 | 
			
		||||
                        desc->fqname, NULL);
 | 
			
		||||
@@ -574,9 +730,8 @@ radio_config_new_with_version(
 | 
			
		||||
                         * desc->version isn't necessarily equal to
 | 
			
		||||
                         * max_version
 | 
			
		||||
                         */
 | 
			
		||||
                        if (radio_config_instance[desc->version]) {
 | 
			
		||||
                            config = radio_config_ref(radio_config_instance
 | 
			
		||||
                                [desc->version]);
 | 
			
		||||
                        if (instances[desc->version]) {
 | 
			
		||||
                            config = radio_config_ref(instances[desc->version]);
 | 
			
		||||
                        } else {
 | 
			
		||||
                            GINFO("Connected to %s", desc->fqname);
 | 
			
		||||
                            config = radio_config_create(sm, obj, desc);
 | 
			
		||||
@@ -588,9 +743,9 @@ radio_config_new_with_version(
 | 
			
		||||
 | 
			
		||||
            gbinder_servicemanager_unref(sm);
 | 
			
		||||
            if (config) {
 | 
			
		||||
                radio_config_instance[desc->version] = config;
 | 
			
		||||
                instances[desc->version] = config;
 | 
			
		||||
                g_object_weak_ref(G_OBJECT(config), radio_config_gone,
 | 
			
		||||
                    radio_config_instance + desc->version);
 | 
			
		||||
                    instances + desc->version);
 | 
			
		||||
                return config;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -602,6 +757,7 @@ RadioConfig*
 | 
			
		||||
radio_config_ref(
 | 
			
		||||
    RadioConfig* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        g_object_ref(self);
 | 
			
		||||
    }
 | 
			
		||||
@@ -612,6 +768,7 @@ void
 | 
			
		||||
radio_config_unref(
 | 
			
		||||
    RadioConfig* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        g_object_unref(self);
 | 
			
		||||
    }
 | 
			
		||||
@@ -621,13 +778,23 @@ gboolean
 | 
			
		||||
radio_config_dead(
 | 
			
		||||
    RadioConfig* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return G_UNLIKELY(!self) || self->dead;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RADIO_INTERFACE_TYPE
 | 
			
		||||
radio_config_interface_type(
 | 
			
		||||
    RadioConfig* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return G_LIKELY(self) ? self->interface_type : RADIO_INTERFACE_TYPE_NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RADIO_CONFIG_INTERFACE
 | 
			
		||||
radio_config_interface(
 | 
			
		||||
    RadioConfig* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return G_LIKELY(self) ? self->version : RADIO_CONFIG_INTERFACE_NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -636,6 +803,7 @@ radio_config_rpc_header_size(
 | 
			
		||||
    RadioConfig* self,
 | 
			
		||||
    RADIO_CONFIG_REQ req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        GBytes* header = gbinder_client_rpc_header(self->client, req);
 | 
			
		||||
 | 
			
		||||
@@ -651,7 +819,8 @@ radio_config_req_name(
 | 
			
		||||
    RadioConfig* self,
 | 
			
		||||
    RADIO_CONFIG_REQ req)
 | 
			
		||||
{
 | 
			
		||||
    const char* known = radio_config_known_req_name(req);
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    const char* known = radio_config_known_req_name(self, req);
 | 
			
		||||
 | 
			
		||||
    if (known) {
 | 
			
		||||
        return known;
 | 
			
		||||
@@ -670,7 +839,8 @@ radio_config_resp_name(
 | 
			
		||||
    RadioConfig* self,
 | 
			
		||||
    RADIO_CONFIG_RESP resp)
 | 
			
		||||
{
 | 
			
		||||
    const char* known = radio_config_known_resp_name(resp);
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    const char* known = radio_config_known_resp_name(self, resp);
 | 
			
		||||
 | 
			
		||||
    if (known) {
 | 
			
		||||
        return known;
 | 
			
		||||
@@ -689,7 +859,8 @@ radio_config_ind_name(
 | 
			
		||||
    RadioConfig* self,
 | 
			
		||||
    RADIO_CONFIG_IND ind)
 | 
			
		||||
{
 | 
			
		||||
    const char* known = radio_config_known_ind_name(ind);
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    const char* known = radio_config_known_ind_name(self, ind);
 | 
			
		||||
 | 
			
		||||
    if (known) {
 | 
			
		||||
        return known;
 | 
			
		||||
@@ -709,6 +880,7 @@ radio_config_add_death_handler(
 | 
			
		||||
    RadioConfigFunc fn,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return (G_LIKELY(self) && G_LIKELY(fn)) ?
 | 
			
		||||
        g_signal_connect_closure_by_id(self,
 | 
			
		||||
             radio_config_signals[SIGNAL_DEATH], 0,
 | 
			
		||||
@@ -722,6 +894,7 @@ radio_config_add_request_observer(
 | 
			
		||||
    RadioConfigRequestObserverFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_config_add_request_observer_with_priority(self,
 | 
			
		||||
        RADIO_OBSERVER_PRIORITY_DEFAULT, code, func, user_data);
 | 
			
		||||
}
 | 
			
		||||
@@ -734,6 +907,7 @@ radio_config_add_request_observer_with_priority(
 | 
			
		||||
    RadioConfigRequestObserverFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && G_LIKELY(func)) {
 | 
			
		||||
        const guint index = radio_observer_priority_index(priority);
 | 
			
		||||
        const RADIO_CONFIG_SIGNAL sig = SIGNAL_OBSERVE_REQUEST_0 + index;
 | 
			
		||||
@@ -762,6 +936,7 @@ radio_config_add_response_observer(
 | 
			
		||||
    RadioConfigResponseObserverFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_config_add_response_observer_with_priority(self,
 | 
			
		||||
        RADIO_OBSERVER_PRIORITY_DEFAULT, code, func, user_data);
 | 
			
		||||
}
 | 
			
		||||
@@ -774,6 +949,7 @@ radio_config_add_response_observer_with_priority(
 | 
			
		||||
    RadioConfigResponseObserverFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && G_LIKELY(func)) {
 | 
			
		||||
        const guint index = radio_observer_priority_index(priority);
 | 
			
		||||
        const RADIO_CONFIG_SIGNAL sig = SIGNAL_OBSERVE_RESPONSE_0 + index;
 | 
			
		||||
@@ -802,6 +978,7 @@ radio_config_add_indication_observer(
 | 
			
		||||
    RadioConfigIndicationObserverFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_config_add_indication_observer_with_priority(self,
 | 
			
		||||
        RADIO_OBSERVER_PRIORITY_DEFAULT, code, func, user_data);
 | 
			
		||||
}
 | 
			
		||||
@@ -814,6 +991,7 @@ radio_config_add_indication_observer_with_priority(
 | 
			
		||||
    RadioConfigIndicationObserverFunc func,
 | 
			
		||||
    gpointer user_data) /* Since 1.4.3 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && G_LIKELY(func)) {
 | 
			
		||||
        const guint pi = radio_observer_priority_index(priority);
 | 
			
		||||
        const RADIO_CONFIG_SIGNAL sig = SIGNAL_OBSERVE_INDICATION_0 + pi;
 | 
			
		||||
@@ -840,6 +1018,7 @@ radio_config_remove_handler(
 | 
			
		||||
    RadioConfig* self,
 | 
			
		||||
    gulong id)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && G_LIKELY(id)) {
 | 
			
		||||
        g_signal_handler_disconnect(self, id);
 | 
			
		||||
    }
 | 
			
		||||
@@ -851,6 +1030,7 @@ radio_config_remove_handlers(
 | 
			
		||||
    gulong* ids,
 | 
			
		||||
    int count)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    gutil_disconnect_handlers(self, ids, count);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -863,6 +1043,7 @@ gboolean
 | 
			
		||||
radio_config_is_dead(
 | 
			
		||||
    RadioBase* base)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return THIS(base)->dead;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -871,6 +1052,7 @@ gboolean
 | 
			
		||||
radio_config_can_submit_requests(
 | 
			
		||||
    RadioBase* base)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return !radio_config_is_dead(base);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -880,6 +1062,7 @@ radio_config_new_request(
 | 
			
		||||
    RadioBase* base,
 | 
			
		||||
    guint32 code)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return gbinder_client_new_request2(THIS(base)->client, code);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -890,6 +1073,7 @@ radio_config_send_request(
 | 
			
		||||
    RadioRequest* req,
 | 
			
		||||
    RadioBaseRequestSentFunc callback)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioConfig* self = THIS(base);
 | 
			
		||||
    RadioConfigCall* call = g_slice_new(RadioConfigCall);
 | 
			
		||||
    GQuark quark = 0;
 | 
			
		||||
@@ -930,6 +1114,7 @@ radio_config_cancel_request(
 | 
			
		||||
    RadioBase* base,
 | 
			
		||||
    gulong id)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    gbinder_client_cancel(THIS(base)->client, id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -942,6 +1127,7 @@ void
 | 
			
		||||
radio_config_init(
 | 
			
		||||
    RadioConfig* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    self->version = RADIO_CONFIG_INTERFACE_NONE;
 | 
			
		||||
    self->pool = gutil_idle_pool_new();
 | 
			
		||||
    self->req_quarks = g_hash_table_new(g_direct_hash, g_direct_equal);
 | 
			
		||||
@@ -954,6 +1140,7 @@ void
 | 
			
		||||
radio_config_finalize(
 | 
			
		||||
    GObject* object)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioConfig* self = THIS(object);
 | 
			
		||||
 | 
			
		||||
    radio_config_drop_binder(self);
 | 
			
		||||
@@ -970,6 +1157,7 @@ void
 | 
			
		||||
radio_config_class_init(
 | 
			
		||||
    RadioConfigClass* klass)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioBaseClass* base_class = RADIO_BASE_CLASS(klass);
 | 
			
		||||
    GObjectClass* object_class = G_OBJECT_CLASS(klass);
 | 
			
		||||
    GType type = G_OBJECT_CLASS_TYPE(klass);
 | 
			
		||||
 
 | 
			
		||||
@@ -123,6 +123,7 @@ static GHashTable* radio_instance_table = NULL;
 | 
			
		||||
#define DEFAULT_INTERFACE RADIO_INTERFACE_1_0
 | 
			
		||||
 | 
			
		||||
static const GBinderClientIfaceInfo radio_iface_info[] = {
 | 
			
		||||
    {RADIO_1_5, RADIO_1_5_REQ_LAST },
 | 
			
		||||
    {RADIO_1_4, RADIO_1_4_REQ_LAST },
 | 
			
		||||
    {RADIO_1_3, RADIO_1_3_REQ_LAST },
 | 
			
		||||
    {RADIO_1_2, RADIO_1_2_REQ_LAST },
 | 
			
		||||
@@ -132,6 +133,7 @@ static const GBinderClientIfaceInfo radio_iface_info[] = {
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_iface_info) == RADIO_INTERFACE_COUNT);
 | 
			
		||||
 | 
			
		||||
static const char* const radio_indication_ifaces[] = {
 | 
			
		||||
    RADIO_INDICATION_1_5,
 | 
			
		||||
    RADIO_INDICATION_1_4,
 | 
			
		||||
    RADIO_INDICATION_1_3,
 | 
			
		||||
    RADIO_INDICATION_1_2,
 | 
			
		||||
@@ -142,6 +144,7 @@ static const char* const radio_indication_ifaces[] = {
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_indication_ifaces) == RADIO_INTERFACE_COUNT + 1);
 | 
			
		||||
 | 
			
		||||
static const char* const radio_response_ifaces[] = {
 | 
			
		||||
    RADIO_RESPONSE_1_5,
 | 
			
		||||
    RADIO_RESPONSE_1_4,
 | 
			
		||||
    RADIO_RESPONSE_1_3,
 | 
			
		||||
    RADIO_RESPONSE_1_2,
 | 
			
		||||
@@ -153,19 +156,25 @@ G_STATIC_ASSERT(G_N_ELEMENTS(radio_response_ifaces) == RADIO_INTERFACE_COUNT + 1
 | 
			
		||||
 | 
			
		||||
typedef struct radio_interface_desc {
 | 
			
		||||
    RADIO_INTERFACE version;
 | 
			
		||||
    RADIO_AIDL_INTERFACE aidl_interface;
 | 
			
		||||
    const char* radio_iface;
 | 
			
		||||
    const char* const* ind_ifaces;
 | 
			
		||||
    const char* const* resp_ifaces;
 | 
			
		||||
    gint32 set_response_functions_req;
 | 
			
		||||
} RadioInterfaceDesc;
 | 
			
		||||
 | 
			
		||||
#define RADIO_INTERFACE_INDEX(x) (RADIO_INTERFACE_COUNT - x - 1)
 | 
			
		||||
 | 
			
		||||
#define RADIO_INTERFACE_DESC(v) \
 | 
			
		||||
        RADIO_INTERFACE_##v, RADIO_##v, \
 | 
			
		||||
        RADIO_INTERFACE_##v, \
 | 
			
		||||
        RADIO_AIDL_INTERFACE_NONE, \
 | 
			
		||||
        RADIO_##v, \
 | 
			
		||||
        radio_indication_ifaces + RADIO_INTERFACE_INDEX(RADIO_INTERFACE_##v), \
 | 
			
		||||
        radio_response_ifaces + RADIO_INTERFACE_INDEX(RADIO_INTERFACE_##v)
 | 
			
		||||
        radio_response_ifaces + RADIO_INTERFACE_INDEX(RADIO_INTERFACE_##v), \
 | 
			
		||||
        RADIO_REQ_SET_RESPONSE_FUNCTIONS
 | 
			
		||||
 | 
			
		||||
static const RadioInterfaceDesc radio_interfaces[] = {
 | 
			
		||||
   { RADIO_INTERFACE_DESC(1_5) },
 | 
			
		||||
   { RADIO_INTERFACE_DESC(1_4) },
 | 
			
		||||
   { RADIO_INTERFACE_DESC(1_3) },
 | 
			
		||||
   { RADIO_INTERFACE_DESC(1_2) },
 | 
			
		||||
@@ -174,6 +183,146 @@ static const RadioInterfaceDesc radio_interfaces[] = {
 | 
			
		||||
};
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_interfaces) == RADIO_INTERFACE_COUNT);
 | 
			
		||||
 | 
			
		||||
static const GBinderClientIfaceInfo radio_aidl_iface_info[] = {
 | 
			
		||||
    {RADIO_DATA, RADIO_DATA_1_REQ_LAST},
 | 
			
		||||
    {RADIO_IMS, RADIO_IMS_1_REQ_LAST},
 | 
			
		||||
    {RADIO_MESSAGING, RADIO_MESSAGING_1_REQ_LAST},
 | 
			
		||||
    {RADIO_MODEM, RADIO_MODEM_1_REQ_LAST},
 | 
			
		||||
    {RADIO_NETWORK, RADIO_NETWORK_1_REQ_LAST},
 | 
			
		||||
    {RADIO_SIM, RADIO_SIM_1_REQ_LAST},
 | 
			
		||||
    {RADIO_VOICE, RADIO_VOICE_1_REQ_LAST},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_data_indication_ifaces[] = {
 | 
			
		||||
    RADIO_DATA_INDICATION,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_data_response_ifaces[] = {
 | 
			
		||||
    RADIO_DATA_RESPONSE,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_ims_indication_ifaces[] = {
 | 
			
		||||
    RADIO_IMS_INDICATION,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_ims_response_ifaces[] = {
 | 
			
		||||
    RADIO_IMS_RESPONSE,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_messaging_indication_ifaces[] = {
 | 
			
		||||
    RADIO_MESSAGING_INDICATION,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_messaging_response_ifaces[] = {
 | 
			
		||||
    RADIO_MESSAGING_RESPONSE,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_modem_indication_ifaces[] = {
 | 
			
		||||
    RADIO_MODEM_INDICATION,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_modem_response_ifaces[] = {
 | 
			
		||||
    RADIO_MODEM_RESPONSE,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_network_indication_ifaces[] = {
 | 
			
		||||
    RADIO_NETWORK_INDICATION,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_network_response_ifaces[] = {
 | 
			
		||||
    RADIO_NETWORK_RESPONSE,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_sim_indication_ifaces[] = {
 | 
			
		||||
    RADIO_SIM_INDICATION,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_sim_response_ifaces[] = {
 | 
			
		||||
    RADIO_SIM_RESPONSE,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_voice_indication_ifaces[] = {
 | 
			
		||||
    RADIO_VOICE_INDICATION,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_voice_response_ifaces[] = {
 | 
			
		||||
    RADIO_VOICE_RESPONSE,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const RadioInterfaceDesc radio_aidl_interfaces[] = {
 | 
			
		||||
    {
 | 
			
		||||
        RADIO_INTERFACE_NONE,
 | 
			
		||||
        RADIO_DATA_INTERFACE,
 | 
			
		||||
        RADIO_DATA,
 | 
			
		||||
        radio_data_indication_ifaces,
 | 
			
		||||
        radio_data_response_ifaces,
 | 
			
		||||
        RADIO_DATA_REQ_SET_RESPONSE_FUNCTIONS,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        RADIO_INTERFACE_NONE,
 | 
			
		||||
        RADIO_IMS_INTERFACE,
 | 
			
		||||
        RADIO_IMS,
 | 
			
		||||
        radio_ims_indication_ifaces,
 | 
			
		||||
        radio_ims_response_ifaces,
 | 
			
		||||
        RADIO_IMS_REQ_SET_RESPONSE_FUNCTIONS,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        RADIO_INTERFACE_NONE,
 | 
			
		||||
        RADIO_MESSAGING_INTERFACE,
 | 
			
		||||
        RADIO_MESSAGING,
 | 
			
		||||
        radio_messaging_indication_ifaces,
 | 
			
		||||
        radio_messaging_response_ifaces,
 | 
			
		||||
        RADIO_MESSAGING_REQ_SET_RESPONSE_FUNCTIONS,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        RADIO_INTERFACE_NONE,
 | 
			
		||||
        RADIO_MODEM_INTERFACE,
 | 
			
		||||
        RADIO_MODEM,
 | 
			
		||||
        radio_modem_indication_ifaces,
 | 
			
		||||
        radio_modem_response_ifaces,
 | 
			
		||||
        RADIO_MODEM_REQ_SET_RESPONSE_FUNCTIONS,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        RADIO_INTERFACE_NONE,
 | 
			
		||||
        RADIO_NETWORK_INTERFACE,
 | 
			
		||||
        RADIO_NETWORK,
 | 
			
		||||
        radio_network_indication_ifaces,
 | 
			
		||||
        radio_network_response_ifaces,
 | 
			
		||||
        RADIO_NETWORK_REQ_SET_RESPONSE_FUNCTIONS,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        RADIO_INTERFACE_NONE,
 | 
			
		||||
        RADIO_SIM_INTERFACE,
 | 
			
		||||
        RADIO_SIM,
 | 
			
		||||
        radio_sim_indication_ifaces,
 | 
			
		||||
        radio_sim_response_ifaces,
 | 
			
		||||
        RADIO_SIM_REQ_SET_RESPONSE_FUNCTIONS,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        RADIO_INTERFACE_NONE,
 | 
			
		||||
        RADIO_VOICE_INTERFACE,
 | 
			
		||||
        RADIO_VOICE,
 | 
			
		||||
        radio_voice_indication_ifaces,
 | 
			
		||||
        radio_voice_response_ifaces,
 | 
			
		||||
        RADIO_VOICE_REQ_SET_RESPONSE_FUNCTIONS,
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
G_STATIC_ASSERT(G_N_ELEMENTS(radio_aidl_interfaces) == RADIO_AIDL_INTERFACE_COUNT);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_instance_tx {
 | 
			
		||||
    RadioInstance* instance;
 | 
			
		||||
    RadioInstanceTxCompleteFunc complete;
 | 
			
		||||
@@ -201,7 +350,7 @@ radio_instance_req_quark(
 | 
			
		||||
 | 
			
		||||
        q = GPOINTER_TO_UINT(g_hash_table_lookup(priv->req_quarks, key));
 | 
			
		||||
        if (!q) {
 | 
			
		||||
            const char* known = radio_req_name(req);
 | 
			
		||||
            const char* known = radio_req_name2(self, req);
 | 
			
		||||
 | 
			
		||||
            if (known) {
 | 
			
		||||
                q = g_quark_from_static_string(known);
 | 
			
		||||
@@ -228,7 +377,7 @@ radio_instance_resp_quark(
 | 
			
		||||
 | 
			
		||||
        q = GPOINTER_TO_UINT(g_hash_table_lookup(priv->resp_quarks, key));
 | 
			
		||||
        if (!q) {
 | 
			
		||||
            const char* known = radio_resp_name(resp);
 | 
			
		||||
            const char* known = radio_resp_name2(self, resp);
 | 
			
		||||
 | 
			
		||||
            if (known) {
 | 
			
		||||
                q = g_quark_from_static_string(known);
 | 
			
		||||
@@ -276,7 +425,14 @@ radio_instance_indication(
 | 
			
		||||
    RadioInstance* self = RADIO_INSTANCE(user_data);
 | 
			
		||||
    const char* iface = gbinder_remote_request_interface(req);
 | 
			
		||||
 | 
			
		||||
    if (gutil_strv_contains((const GStrV*)radio_indication_ifaces, iface)) {
 | 
			
		||||
    if (gutil_strv_contains((const GStrV*)radio_indication_ifaces, iface)
 | 
			
		||||
        || gutil_strv_contains((const GStrV*)radio_data_indication_ifaces, iface)
 | 
			
		||||
        || gutil_strv_contains((const GStrV*)radio_ims_indication_ifaces, iface)
 | 
			
		||||
        || gutil_strv_contains((const GStrV*)radio_messaging_indication_ifaces, iface)
 | 
			
		||||
        || gutil_strv_contains((const GStrV*)radio_modem_indication_ifaces, iface)
 | 
			
		||||
        || gutil_strv_contains((const GStrV*)radio_network_indication_ifaces, iface)
 | 
			
		||||
        || gutil_strv_contains((const GStrV*)radio_sim_indication_ifaces, iface)
 | 
			
		||||
        || gutil_strv_contains((const GStrV*)radio_voice_indication_ifaces, iface)) {
 | 
			
		||||
        GBinderReader reader;
 | 
			
		||||
        guint type;
 | 
			
		||||
 | 
			
		||||
@@ -290,6 +446,7 @@ radio_instance_indication(
 | 
			
		||||
                SIGNAL_OBSERVE_INDICATION_0;
 | 
			
		||||
            int p = RADIO_OBSERVER_PRIORITY_HIGHEST;
 | 
			
		||||
            gboolean handled = FALSE;
 | 
			
		||||
            guint ind_ril_connected = 0;
 | 
			
		||||
 | 
			
		||||
            /* High-priority observers are notified first */
 | 
			
		||||
            for (; p > RADIO_OBSERVER_PRIORITY_DEFAULT; p--) {
 | 
			
		||||
@@ -301,7 +458,14 @@ radio_instance_indication(
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* rilConnected is a special case */
 | 
			
		||||
            if (code == RADIO_IND_RIL_CONNECTED) {
 | 
			
		||||
            if (self->interface_type == RADIO_INTERFACE_TYPE_HIDL) {
 | 
			
		||||
                ind_ril_connected = RADIO_IND_RIL_CONNECTED;
 | 
			
		||||
            } else if (self->interface_type == RADIO_INTERFACE_TYPE_AIDL
 | 
			
		||||
                && gutil_strv_contains((const GStrV*)radio_modem_indication_ifaces, iface)) {
 | 
			
		||||
                ind_ril_connected = RADIO_MODEM_IND_RIL_CONNECTED;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (ind_ril_connected && code == ind_ril_connected) {
 | 
			
		||||
                if (G_UNLIKELY(self->connected)) {
 | 
			
		||||
                    /* We are only supposed to receive it once */
 | 
			
		||||
                    GWARN("%s received unexpected rilConnected", self->slot);
 | 
			
		||||
@@ -356,69 +520,126 @@ radio_instance_response(
 | 
			
		||||
{
 | 
			
		||||
    RadioInstance* self = RADIO_INSTANCE(user_data);
 | 
			
		||||
    const char* iface = gbinder_remote_request_interface(req);
 | 
			
		||||
    const RadioResponseInfo* info = NULL;
 | 
			
		||||
    GBinderReader reader;
 | 
			
		||||
    gint32 ack_serial = 0;
 | 
			
		||||
 | 
			
		||||
    gbinder_remote_request_init_reader(req, &reader);
 | 
			
		||||
 | 
			
		||||
    if (gutil_strv_contains((const GStrV*)radio_response_ifaces, iface)) {
 | 
			
		||||
        GBinderReader reader;
 | 
			
		||||
 | 
			
		||||
        /* All these should be one-way transactions */
 | 
			
		||||
        GASSERT(flags & GBINDER_TX_FLAG_ONEWAY);
 | 
			
		||||
        gbinder_remote_request_init_reader(req, &reader);
 | 
			
		||||
        if (code == RADIO_RESP_ACKNOWLEDGE_REQUEST) {
 | 
			
		||||
            /* oneway acknowledgeRequest(int32_t serial) */
 | 
			
		||||
            gint32 serial;
 | 
			
		||||
 | 
			
		||||
            GDEBUG("%s %u acknowledgeRequest", iface, code);
 | 
			
		||||
            if (gbinder_reader_read_int32(&reader, &serial)) {
 | 
			
		||||
                g_signal_emit(self, radio_instance_signals[SIGNAL_ACK], 0,
 | 
			
		||||
                    serial);
 | 
			
		||||
            }
 | 
			
		||||
            gbinder_reader_read_int32(&reader, &ack_serial);
 | 
			
		||||
        } else {
 | 
			
		||||
            /* All other responses have RadioResponseInfo */
 | 
			
		||||
            const RadioResponseInfo* info =
 | 
			
		||||
                gbinder_reader_read_hidl_struct(&reader, RadioResponseInfo);
 | 
			
		||||
 | 
			
		||||
            if (info) {
 | 
			
		||||
                const GQuark quark = radio_instance_resp_quark(self, code);
 | 
			
		||||
                const guint* signals = radio_instance_signals +
 | 
			
		||||
                    SIGNAL_OBSERVE_RESPONSE_0;
 | 
			
		||||
                int p = RADIO_OBSERVER_PRIORITY_HIGHEST;
 | 
			
		||||
                gboolean handled = FALSE;
 | 
			
		||||
 | 
			
		||||
                /* High-priority observers are notified first */
 | 
			
		||||
                for (; p > RADIO_OBSERVER_PRIORITY_DEFAULT; p--) {
 | 
			
		||||
                    if (signals[RADIO_OBSERVER_PRIORITY_INDEX(p)]) {
 | 
			
		||||
                        g_signal_emit(self, signals
 | 
			
		||||
                            [RADIO_OBSERVER_PRIORITY_INDEX(p)],
 | 
			
		||||
                            quark, code, info, &reader);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                /* Then handlers */
 | 
			
		||||
                g_signal_emit(self, radio_instance_signals
 | 
			
		||||
                    [SIGNAL_HANDLE_RESPONSE],
 | 
			
		||||
                    quark, code, info, &reader, &handled);
 | 
			
		||||
 | 
			
		||||
                /* And then remaining observers in their priority order */
 | 
			
		||||
                for (; p >= RADIO_OBSERVER_PRIORITY_LOWEST; p--) {
 | 
			
		||||
                    if (signals[RADIO_OBSERVER_PRIORITY_INDEX(p)]) {
 | 
			
		||||
                        g_signal_emit(self, signals
 | 
			
		||||
                            [RADIO_OBSERVER_PRIORITY_INDEX(p)],
 | 
			
		||||
                            quark, code, info, &reader);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                /* Ack unhandled responses */
 | 
			
		||||
                if (info->type == RADIO_RESP_SOLICITED_ACK_EXP && !handled) {
 | 
			
		||||
                    GDEBUG("ack unhandled response");
 | 
			
		||||
                    radio_instance_ack(self);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            info = gbinder_reader_read_hidl_struct(&reader, RadioResponseInfo);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (gutil_strv_contains((const GStrV*)radio_data_response_ifaces, iface)) {
 | 
			
		||||
        if (code == RADIO_DATA_RESP_ACKNOWLEDGE_REQUEST) {
 | 
			
		||||
            gbinder_reader_read_int32(&reader, &ack_serial);
 | 
			
		||||
        } else {
 | 
			
		||||
            gsize out_size;
 | 
			
		||||
            info = gbinder_reader_read_parcelable(&reader, &out_size);
 | 
			
		||||
            GASSERT(out_size >= sizeof(RadioResponseInfo));
 | 
			
		||||
        }
 | 
			
		||||
    } else if (gutil_strv_contains((const GStrV*)radio_ims_response_ifaces, iface)) {
 | 
			
		||||
        {
 | 
			
		||||
            /* RadioResponseInfo has the same fields/padding between HIDL and AIDL */
 | 
			
		||||
            gsize out_size;
 | 
			
		||||
            info = gbinder_reader_read_parcelable(&reader, &out_size);
 | 
			
		||||
            GASSERT(out_size >= sizeof(RadioResponseInfo));
 | 
			
		||||
        }
 | 
			
		||||
    } else if (gutil_strv_contains((const GStrV*)radio_messaging_response_ifaces, iface)) {
 | 
			
		||||
        if (code == RADIO_MESSAGING_RESP_ACKNOWLEDGE_REQUEST) {
 | 
			
		||||
            gbinder_reader_read_int32(&reader, &ack_serial);
 | 
			
		||||
        } else {
 | 
			
		||||
            /* RadioResponseInfo has the same fields/padding between HIDL and AIDL */
 | 
			
		||||
            gsize out_size;
 | 
			
		||||
            info = gbinder_reader_read_parcelable(&reader, &out_size);
 | 
			
		||||
            GASSERT(out_size >= sizeof(RadioResponseInfo));
 | 
			
		||||
        }
 | 
			
		||||
    } else if (gutil_strv_contains((const GStrV*)radio_modem_response_ifaces, iface)) {
 | 
			
		||||
        if (code == RADIO_MODEM_RESP_ACKNOWLEDGE_REQUEST) {
 | 
			
		||||
            gbinder_reader_read_int32(&reader, &ack_serial);
 | 
			
		||||
        } else {
 | 
			
		||||
            /* RadioResponseInfo has the same fields/padding between HIDL and AIDL */
 | 
			
		||||
            gsize out_size;
 | 
			
		||||
            info = gbinder_reader_read_parcelable(&reader, &out_size);
 | 
			
		||||
            GASSERT(out_size >= sizeof(RadioResponseInfo));
 | 
			
		||||
        }
 | 
			
		||||
    } else if (gutil_strv_contains((const GStrV*)radio_network_response_ifaces, iface)) {
 | 
			
		||||
        if (code == RADIO_NETWORK_RESP_ACKNOWLEDGE_REQUEST) {
 | 
			
		||||
            gbinder_reader_read_int32(&reader, &ack_serial);
 | 
			
		||||
        } else {
 | 
			
		||||
            gsize out_size;
 | 
			
		||||
            info = gbinder_reader_read_parcelable(&reader, &out_size);
 | 
			
		||||
            GASSERT(out_size >= sizeof(RadioResponseInfo));
 | 
			
		||||
        }
 | 
			
		||||
    } else if (gutil_strv_contains((const GStrV*)radio_sim_response_ifaces, iface)) {
 | 
			
		||||
        if (code == RADIO_SIM_RESP_ACKNOWLEDGE_REQUEST) {
 | 
			
		||||
            gbinder_reader_read_int32(&reader, &ack_serial);
 | 
			
		||||
        } else {
 | 
			
		||||
            gsize out_size;
 | 
			
		||||
            info = gbinder_reader_read_parcelable(&reader, &out_size);
 | 
			
		||||
            GASSERT(out_size >= sizeof(RadioResponseInfo));
 | 
			
		||||
        }
 | 
			
		||||
    } else if (gutil_strv_contains((const GStrV*)radio_voice_response_ifaces, iface)) {
 | 
			
		||||
        if (code == RADIO_VOICE_RESP_ACKNOWLEDGE_REQUEST) {
 | 
			
		||||
            gbinder_reader_read_int32(&reader, &ack_serial);
 | 
			
		||||
        } else {
 | 
			
		||||
            gsize out_size;
 | 
			
		||||
            info = gbinder_reader_read_parcelable(&reader, &out_size);
 | 
			
		||||
            GASSERT(out_size >= sizeof(RadioResponseInfo));
 | 
			
		||||
        }
 | 
			
		||||
        *status = GBINDER_STATUS_OK;
 | 
			
		||||
    } else {
 | 
			
		||||
        GWARN("Unexpected response %s %u", iface, code);
 | 
			
		||||
        *status = GBINDER_STATUS_FAILED;
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* All these should be one-way transactions */
 | 
			
		||||
    GASSERT(flags & GBINDER_TX_FLAG_ONEWAY);
 | 
			
		||||
 | 
			
		||||
    if (ack_serial) {
 | 
			
		||||
        GDEBUG("%s %u acknowledgeRequest", iface, code);
 | 
			
		||||
        g_signal_emit(self, radio_instance_signals[SIGNAL_ACK], 0,
 | 
			
		||||
            ack_serial);
 | 
			
		||||
    } else if (info) {
 | 
			
		||||
        const GQuark quark = radio_instance_resp_quark(self, code);
 | 
			
		||||
        const guint* signals = radio_instance_signals +
 | 
			
		||||
            SIGNAL_OBSERVE_RESPONSE_0;
 | 
			
		||||
        int p = RADIO_OBSERVER_PRIORITY_HIGHEST;
 | 
			
		||||
        gboolean handled = FALSE;
 | 
			
		||||
 | 
			
		||||
        /* High-priority observers are notified first */
 | 
			
		||||
        for (; p > RADIO_OBSERVER_PRIORITY_DEFAULT; p--) {
 | 
			
		||||
            if (signals[RADIO_OBSERVER_PRIORITY_INDEX(p)]) {
 | 
			
		||||
                g_signal_emit(self, signals
 | 
			
		||||
                    [RADIO_OBSERVER_PRIORITY_INDEX(p)],
 | 
			
		||||
                    quark, code, info, &reader);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Then handlers */
 | 
			
		||||
        g_signal_emit(self, radio_instance_signals
 | 
			
		||||
            [SIGNAL_HANDLE_RESPONSE],
 | 
			
		||||
            quark, code, info, &reader, &handled);
 | 
			
		||||
 | 
			
		||||
        /* And then remaining observers in their priority order */
 | 
			
		||||
        for (; p >= RADIO_OBSERVER_PRIORITY_LOWEST; p--) {
 | 
			
		||||
            if (signals[RADIO_OBSERVER_PRIORITY_INDEX(p)]) {
 | 
			
		||||
                g_signal_emit(self, signals
 | 
			
		||||
                    [RADIO_OBSERVER_PRIORITY_INDEX(p)],
 | 
			
		||||
                    quark, code, info, &reader);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Ack unhandled responses */
 | 
			
		||||
        if (info->type == RADIO_RESP_SOLICITED_ACK_EXP && !handled) {
 | 
			
		||||
            GDEBUG("ack unhandled response");
 | 
			
		||||
            radio_instance_ack(self);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    *status = GBINDER_STATUS_OK;
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -516,10 +737,9 @@ radio_instance_create_version(
 | 
			
		||||
    self->modem = priv->modem = g_strdup(modem);
 | 
			
		||||
    self->slot_index = slot_index;
 | 
			
		||||
    self->version = desc->version;
 | 
			
		||||
    self->interface_aidl = desc->aidl_interface;
 | 
			
		||||
 | 
			
		||||
    priv->remote = gbinder_remote_object_ref(remote);
 | 
			
		||||
    priv->client = gbinder_client_new2(remote,
 | 
			
		||||
        radio_iface_info, G_N_ELEMENTS(radio_iface_info));
 | 
			
		||||
    priv->indication = gbinder_servicemanager_new_local_object2(sm,
 | 
			
		||||
        desc->ind_ifaces, radio_instance_indication, self);
 | 
			
		||||
    priv->response = gbinder_servicemanager_new_local_object2(sm,
 | 
			
		||||
@@ -527,14 +747,27 @@ radio_instance_create_version(
 | 
			
		||||
    priv->death_id = gbinder_remote_object_add_death_handler(remote,
 | 
			
		||||
        radio_instance_died, self);
 | 
			
		||||
 | 
			
		||||
    if (desc->version != RADIO_INTERFACE_NONE) {
 | 
			
		||||
        self->interface_type = RADIO_INTERFACE_TYPE_HIDL;
 | 
			
		||||
        priv->client = gbinder_client_new2(remote,
 | 
			
		||||
            radio_iface_info, G_N_ELEMENTS(radio_iface_info));
 | 
			
		||||
    } else if (desc->aidl_interface != RADIO_AIDL_INTERFACE_NONE) {
 | 
			
		||||
        self->interface_type = RADIO_INTERFACE_TYPE_AIDL;
 | 
			
		||||
        priv->client = gbinder_client_new2(remote,
 | 
			
		||||
            radio_aidl_iface_info + desc->aidl_interface, 1);
 | 
			
		||||
 | 
			
		||||
        gbinder_local_object_set_stability(priv->indication, GBINDER_STABILITY_VINTF);
 | 
			
		||||
        gbinder_local_object_set_stability(priv->response, GBINDER_STABILITY_VINTF);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* IRadio::setResponseFunctions */
 | 
			
		||||
    req = gbinder_client_new_request2(priv->client,
 | 
			
		||||
        RADIO_REQ_SET_RESPONSE_FUNCTIONS);
 | 
			
		||||
        desc->set_response_functions_req);
 | 
			
		||||
    gbinder_local_request_init_writer(req, &writer);
 | 
			
		||||
    gbinder_writer_append_local_object(&writer, priv->response);
 | 
			
		||||
    gbinder_writer_append_local_object(&writer, priv->indication);
 | 
			
		||||
    gbinder_remote_reply_unref(gbinder_client_transact_sync_reply(priv->client,
 | 
			
		||||
        RADIO_REQ_SET_RESPONSE_FUNCTIONS, req, &status));
 | 
			
		||||
        desc->set_response_functions_req, req, &status));
 | 
			
		||||
    GVERBOSE_("setResponseFunctions %s status %d", slot, status);
 | 
			
		||||
    gbinder_local_request_unref(req);
 | 
			
		||||
 | 
			
		||||
@@ -557,32 +790,47 @@ radio_instance_create(
 | 
			
		||||
    const char* key,
 | 
			
		||||
    const char* modem,
 | 
			
		||||
    int slot_index,
 | 
			
		||||
    RADIO_INTERFACE max_version)
 | 
			
		||||
    RADIO_INTERFACE max_version,
 | 
			
		||||
    RADIO_AIDL_INTERFACE aidl_interface)
 | 
			
		||||
{
 | 
			
		||||
    RadioInstance* self = NULL;
 | 
			
		||||
    GBinderServiceManager* sm = gbinder_servicemanager_new(dev);
 | 
			
		||||
    const RadioInterfaceDesc* interfaces = NULL;
 | 
			
		||||
    gsize num_interfaces = 0;
 | 
			
		||||
 | 
			
		||||
    if (sm) {
 | 
			
		||||
        guint i;
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < G_N_ELEMENTS(radio_interfaces) && !self; i++) {
 | 
			
		||||
            const RadioInterfaceDesc* desc = radio_interfaces + i;
 | 
			
		||||
 | 
			
		||||
            if (desc->version <= max_version) {
 | 
			
		||||
                char* fqname = g_strconcat(desc->radio_iface, "/", slot, NULL);
 | 
			
		||||
                GBinderRemoteObject* obj = /* autoreleased */
 | 
			
		||||
                    gbinder_servicemanager_get_service_sync(sm, fqname, NULL);
 | 
			
		||||
 | 
			
		||||
                if (obj) {
 | 
			
		||||
                    GINFO("Connected to %s", fqname);
 | 
			
		||||
                    self = radio_instance_create_version(sm, obj, dev, slot,
 | 
			
		||||
                        key, modem, slot_index, desc);
 | 
			
		||||
                }
 | 
			
		||||
                g_free(fqname);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        gbinder_servicemanager_unref(sm);
 | 
			
		||||
    if (!sm) {
 | 
			
		||||
        GERR_("Failed to get ServiceManager on %s", dev);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (aidl_interface == RADIO_AIDL_INTERFACE_NONE) {
 | 
			
		||||
        interfaces = radio_interfaces;
 | 
			
		||||
        num_interfaces = G_N_ELEMENTS(radio_interfaces);
 | 
			
		||||
    } else if (aidl_interface > RADIO_AIDL_INTERFACE_NONE
 | 
			
		||||
                && aidl_interface < RADIO_AIDL_INTERFACE_COUNT) {
 | 
			
		||||
        interfaces = radio_aidl_interfaces + aidl_interface;
 | 
			
		||||
        num_interfaces = 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (guint i = 0; i < num_interfaces && !self; i++) {
 | 
			
		||||
        const RadioInterfaceDesc* desc = interfaces + i;
 | 
			
		||||
 | 
			
		||||
        if (desc->version <= max_version) {
 | 
			
		||||
            char* fqname = g_strconcat(desc->radio_iface, "/", slot, NULL);
 | 
			
		||||
            GBinderRemoteObject* obj = /* autoreleased */
 | 
			
		||||
                gbinder_servicemanager_get_service_sync(sm, fqname, NULL);
 | 
			
		||||
 | 
			
		||||
            if (obj) {
 | 
			
		||||
                GINFO("Connected to %s", fqname);
 | 
			
		||||
                self = radio_instance_create_version(sm, obj, dev, slot,
 | 
			
		||||
                    key, modem, slot_index, desc);
 | 
			
		||||
            }
 | 
			
		||||
            g_free(fqname);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    gbinder_servicemanager_unref(sm);
 | 
			
		||||
 | 
			
		||||
    return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -591,9 +839,10 @@ char*
 | 
			
		||||
radio_instance_make_key(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    RADIO_INTERFACE version)
 | 
			
		||||
    RADIO_INTERFACE version,
 | 
			
		||||
    RADIO_AIDL_INTERFACE aidl_interface)
 | 
			
		||||
{
 | 
			
		||||
    return g_strdup_printf("%s:%s:%d", dev, name, version);
 | 
			
		||||
    return g_strdup_printf("%s:%s:%d:%d", dev, name, version, aidl_interface);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static
 | 
			
		||||
@@ -701,7 +950,7 @@ radio_instance_ind_quark(
 | 
			
		||||
 | 
			
		||||
        q = GPOINTER_TO_UINT(g_hash_table_lookup(priv->ind_quarks, key));
 | 
			
		||||
        if (!q) {
 | 
			
		||||
            const char* known = radio_ind_name(ind);
 | 
			
		||||
            const char* known = radio_ind_name2(self, ind);
 | 
			
		||||
 | 
			
		||||
            if (known) {
 | 
			
		||||
                q = g_quark_from_static_string(known);
 | 
			
		||||
@@ -772,8 +1021,24 @@ radio_instance_new_with_modem_slot_and_version(
 | 
			
		||||
    int slot,
 | 
			
		||||
    RADIO_INTERFACE version) /* Since 1.2.1 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_instance_new_with_modem_slot_version_and_interface(
 | 
			
		||||
        dev, name, modem, slot, version, RADIO_AIDL_INTERFACE_NONE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_new_with_modem_slot_version_and_interface(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    const char* modem,
 | 
			
		||||
    int slot,
 | 
			
		||||
    RADIO_INTERFACE version,
 | 
			
		||||
    RADIO_AIDL_INTERFACE aidl_interface) /* Since 1.6.0 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (dev && dev[0] && name && name[0]) {
 | 
			
		||||
        char* key = radio_instance_make_key(dev, name, version);
 | 
			
		||||
        /* HIDL and AIDL would use different binder devices */
 | 
			
		||||
        char* key = radio_instance_make_key(dev, name, version, aidl_interface);
 | 
			
		||||
        RadioInstance* self = NULL;
 | 
			
		||||
 | 
			
		||||
        if (radio_instance_table) {
 | 
			
		||||
@@ -783,7 +1048,8 @@ radio_instance_new_with_modem_slot_and_version(
 | 
			
		||||
            g_free(key);
 | 
			
		||||
            return radio_instance_ref(self);
 | 
			
		||||
        } else {
 | 
			
		||||
            self = radio_instance_create(dev, name, key, modem, slot, version);
 | 
			
		||||
            self = radio_instance_create(dev, name, key, modem, slot, version,
 | 
			
		||||
                                         aidl_interface);
 | 
			
		||||
            if (self) {
 | 
			
		||||
                if (!radio_instance_table) {
 | 
			
		||||
                    radio_instance_table = g_hash_table_new_full
 | 
			
		||||
@@ -805,6 +1071,7 @@ radio_instance_get(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_instance_get_with_version(dev, name, DEFAULT_INTERFACE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -814,6 +1081,7 @@ radio_instance_get_with_interface(
 | 
			
		||||
    const char* name,
 | 
			
		||||
    RADIO_INTERFACE version) /* 1.2.1, deprecated */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_instance_get_with_version(dev, name, version);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -823,10 +1091,11 @@ radio_instance_get_with_version(
 | 
			
		||||
    const char* name,
 | 
			
		||||
    RADIO_INTERFACE version) /* Since 1.2.2 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioInstance* self = NULL;
 | 
			
		||||
 | 
			
		||||
    if (dev && dev[0] && name && name[0] && radio_instance_table) {
 | 
			
		||||
        char* key = radio_instance_make_key(dev, name, version);
 | 
			
		||||
        char* key = radio_instance_make_key(dev, name, version, RADIO_AIDL_INTERFACE_NONE);
 | 
			
		||||
 | 
			
		||||
        self = g_hash_table_lookup(radio_instance_table, key);
 | 
			
		||||
        g_free(key);
 | 
			
		||||
@@ -838,6 +1107,7 @@ RadioInstance* const*
 | 
			
		||||
radio_instance_get_all(
 | 
			
		||||
    void)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (radio_instance_table) {
 | 
			
		||||
        /* If the table exists, it must be non-empty */
 | 
			
		||||
        const guint n = g_hash_table_size(radio_instance_table);
 | 
			
		||||
@@ -863,6 +1133,7 @@ RadioInstance*
 | 
			
		||||
radio_instance_ref(
 | 
			
		||||
    RadioInstance* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        g_object_ref(RADIO_INSTANCE(self));
 | 
			
		||||
        return self;
 | 
			
		||||
@@ -875,6 +1146,7 @@ void
 | 
			
		||||
radio_instance_unref(
 | 
			
		||||
    RadioInstance* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        g_object_unref(RADIO_INSTANCE(self));
 | 
			
		||||
    }
 | 
			
		||||
@@ -885,6 +1157,7 @@ radio_instance_rpc_header_size(
 | 
			
		||||
    RadioInstance* self,
 | 
			
		||||
    RADIO_REQ req) /* Since 1.4.3 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        RadioInstancePriv* priv = self->priv;
 | 
			
		||||
        GBytes* header = gbinder_client_rpc_header(priv->client, req);
 | 
			
		||||
@@ -901,7 +1174,8 @@ radio_instance_req_name(
 | 
			
		||||
    RadioInstance* self,
 | 
			
		||||
    RADIO_REQ req)
 | 
			
		||||
{
 | 
			
		||||
    const char* known = radio_req_name(req);
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    const char* known = radio_req_name2(self, req);
 | 
			
		||||
 | 
			
		||||
    if (known) {
 | 
			
		||||
        return known;
 | 
			
		||||
@@ -920,7 +1194,8 @@ radio_instance_resp_name(
 | 
			
		||||
    RadioInstance* self,
 | 
			
		||||
    RADIO_RESP resp)
 | 
			
		||||
{
 | 
			
		||||
    const char* known = radio_resp_name(resp);
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    const char* known = radio_resp_name2(self, resp);
 | 
			
		||||
 | 
			
		||||
    if (known) {
 | 
			
		||||
        return known;
 | 
			
		||||
@@ -939,7 +1214,8 @@ radio_instance_ind_name(
 | 
			
		||||
    RadioInstance* self,
 | 
			
		||||
    RADIO_IND ind)
 | 
			
		||||
{
 | 
			
		||||
    const char* known = radio_ind_name(ind);
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    const char* known = radio_ind_name2(self, ind);
 | 
			
		||||
 | 
			
		||||
    if (known) {
 | 
			
		||||
        return known;
 | 
			
		||||
@@ -957,6 +1233,7 @@ gboolean
 | 
			
		||||
radio_instance_is_dead(
 | 
			
		||||
    RadioInstance* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return G_UNLIKELY(!self) || self->dead;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -964,6 +1241,7 @@ gboolean
 | 
			
		||||
radio_instance_ack(
 | 
			
		||||
    RadioInstance* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        GBinderClient* client = self->priv->client;
 | 
			
		||||
        const RADIO_REQ code = RADIO_REQ_RESPONSE_ACKNOWLEDGEMENT;
 | 
			
		||||
@@ -979,6 +1257,7 @@ radio_instance_new_request(
 | 
			
		||||
    RadioInstance* self,
 | 
			
		||||
    RADIO_REQ code)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        return gbinder_client_new_request2(self->priv->client, code);
 | 
			
		||||
    }
 | 
			
		||||
@@ -991,6 +1270,7 @@ radio_instance_send_request_sync(
 | 
			
		||||
    RADIO_REQ code,
 | 
			
		||||
    GBinderLocalRequest* args)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        GBinderClient* client = self->priv->client;
 | 
			
		||||
 | 
			
		||||
@@ -1005,6 +1285,7 @@ radio_instance_set_enabled(
 | 
			
		||||
    RadioInstance* self,
 | 
			
		||||
    gboolean enabled) /* Since 1.0.7 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && self->enabled != enabled) {
 | 
			
		||||
        self->enabled = enabled;
 | 
			
		||||
        GDEBUG("%s %sabled", self->slot, enabled ? "en" : "dis");
 | 
			
		||||
@@ -1019,6 +1300,7 @@ radio_instance_add_request_observer(
 | 
			
		||||
    RadioRequestObserverFunc func,
 | 
			
		||||
    gpointer user_data) /* Since 1.4.3 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_instance_add_request_observer_with_priority(self,
 | 
			
		||||
        RADIO_OBSERVER_PRIORITY_DEFAULT, code, func, user_data);
 | 
			
		||||
}
 | 
			
		||||
@@ -1031,6 +1313,7 @@ radio_instance_add_request_observer_with_priority(
 | 
			
		||||
    RadioRequestObserverFunc func,
 | 
			
		||||
    gpointer user_data) /* Since 1.4.3 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && G_LIKELY(func)) {
 | 
			
		||||
        const guint index = radio_observer_priority_index(priority);
 | 
			
		||||
        const RADIO_INSTANCE_SIGNAL sig = SIGNAL_OBSERVE_REQUEST_0 + index;
 | 
			
		||||
@@ -1060,6 +1343,7 @@ radio_instance_add_response_observer(
 | 
			
		||||
    RadioResponseObserverFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_instance_add_response_observer_with_priority(self,
 | 
			
		||||
        RADIO_OBSERVER_PRIORITY_DEFAULT, code, func, user_data);
 | 
			
		||||
}
 | 
			
		||||
@@ -1072,6 +1356,7 @@ radio_instance_add_response_observer_with_priority(
 | 
			
		||||
    RadioResponseObserverFunc func,
 | 
			
		||||
    gpointer user_data) /* Since 1.4.3 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && G_LIKELY(func)) {
 | 
			
		||||
        const guint index = radio_observer_priority_index(priority);
 | 
			
		||||
        const RADIO_INSTANCE_SIGNAL sig = SIGNAL_OBSERVE_RESPONSE_0 + index;
 | 
			
		||||
@@ -1101,6 +1386,7 @@ radio_instance_add_indication_observer(
 | 
			
		||||
    RadioIndicationObserverFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_instance_add_indication_observer_with_priority(self,
 | 
			
		||||
        RADIO_OBSERVER_PRIORITY_DEFAULT, code, func, user_data);
 | 
			
		||||
}
 | 
			
		||||
@@ -1113,6 +1399,7 @@ radio_instance_add_indication_observer_with_priority(
 | 
			
		||||
    RadioIndicationObserverFunc func,
 | 
			
		||||
    gpointer user_data) /* Since 1.4.3 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && G_LIKELY(func)) {
 | 
			
		||||
        const guint index = radio_observer_priority_index(priority);
 | 
			
		||||
        const RADIO_INSTANCE_SIGNAL sig = SIGNAL_OBSERVE_INDICATION_0 + index;
 | 
			
		||||
@@ -1142,6 +1429,7 @@ radio_instance_add_response_handler(
 | 
			
		||||
    RadioResponseHandlerFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return (G_LIKELY(self) && G_LIKELY(func)) ?
 | 
			
		||||
        g_signal_connect_closure_by_id(self,
 | 
			
		||||
            radio_instance_signals[SIGNAL_HANDLE_RESPONSE],
 | 
			
		||||
@@ -1156,6 +1444,7 @@ radio_instance_add_indication_handler(
 | 
			
		||||
    RadioIndicationHandlerFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return (G_LIKELY(self) && G_LIKELY(func)) ?
 | 
			
		||||
        g_signal_connect_closure_by_id(self,
 | 
			
		||||
            radio_instance_signals[SIGNAL_HANDLE_INDICATION],
 | 
			
		||||
@@ -1169,6 +1458,7 @@ radio_instance_add_ack_handler(
 | 
			
		||||
    RadioAckFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return (G_LIKELY(self) && G_LIKELY(func)) ? g_signal_connect(self,
 | 
			
		||||
        SIGNAL_ACK_NAME, G_CALLBACK(func), user_data) : 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -1179,6 +1469,7 @@ radio_instance_add_death_handler(
 | 
			
		||||
    RadioInstanceFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return (G_LIKELY(self) && G_LIKELY(func)) ? g_signal_connect(self,
 | 
			
		||||
        SIGNAL_DEATH_NAME, G_CALLBACK(func), user_data) : 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -1189,6 +1480,7 @@ radio_instance_add_enabled_handler(
 | 
			
		||||
    RadioInstanceFunc func,
 | 
			
		||||
    gpointer user_data) /* Since 1.0.7 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return (G_LIKELY(self) && G_LIKELY(func)) ? g_signal_connect(self,
 | 
			
		||||
        SIGNAL_ENABLED_NAME, G_CALLBACK(func), user_data) : 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -1199,6 +1491,7 @@ radio_instance_add_connected_handler(
 | 
			
		||||
    RadioInstanceFunc func,
 | 
			
		||||
    gpointer user_data) /* Since 1.4.3 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return (G_LIKELY(self) && G_LIKELY(func)) ? g_signal_connect(self,
 | 
			
		||||
        SIGNAL_CONNECTED_NAME, G_CALLBACK(func), user_data) : 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -1208,6 +1501,7 @@ radio_instance_remove_handler(
 | 
			
		||||
    RadioInstance* self,
 | 
			
		||||
    gulong id)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && G_LIKELY(id)) {
 | 
			
		||||
        g_signal_handler_disconnect(self, id);
 | 
			
		||||
    }
 | 
			
		||||
@@ -1219,6 +1513,7 @@ radio_instance_remove_handlers(
 | 
			
		||||
    gulong* ids,
 | 
			
		||||
    int count)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    gutil_disconnect_handlers(self, ids, count);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1231,6 +1526,7 @@ void
 | 
			
		||||
radio_instance_init(
 | 
			
		||||
    RadioInstance* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioInstancePriv* priv = G_TYPE_INSTANCE_GET_PRIVATE
 | 
			
		||||
        (self, RADIO_TYPE_INSTANCE, RadioInstancePriv);
 | 
			
		||||
 | 
			
		||||
@@ -1246,6 +1542,7 @@ void
 | 
			
		||||
radio_instance_finalize(
 | 
			
		||||
    GObject* object)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioInstance* self = RADIO_INSTANCE(object);
 | 
			
		||||
    RadioInstancePriv* priv = self->priv;
 | 
			
		||||
 | 
			
		||||
@@ -1267,6 +1564,7 @@ void
 | 
			
		||||
radio_instance_class_init(
 | 
			
		||||
    RadioInstanceClass* klass)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    GObjectClass* object_class = G_OBJECT_CLASS(klass);
 | 
			
		||||
    GType type = G_OBJECT_CLASS_TYPE(klass);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -41,6 +41,8 @@
 | 
			
		||||
 | 
			
		||||
#define GLOG_MODULE_NAME GBINDER_RADIO_LOG_MODULE
 | 
			
		||||
#include <gutil_log.h>
 | 
			
		||||
#define DBG(fmt, ...) \
 | 
			
		||||
    gutil_log(GLOG_MODULE_CURRENT, GLOG_LEVEL_ALWAYS, "gbinder-radio:"fmt, ##__VA_ARGS__)
 | 
			
		||||
 | 
			
		||||
#endif /* RADIO_LOG_H */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,7 @@
 | 
			
		||||
 | 
			
		||||
#include "radio_registry_p.h"
 | 
			
		||||
#include "radio_instance.h"
 | 
			
		||||
#include "radio_log.h"
 | 
			
		||||
 | 
			
		||||
#include <gutil_misc.h>
 | 
			
		||||
 | 
			
		||||
@@ -71,6 +72,7 @@ void
 | 
			
		||||
radio_registry_instance_added(
 | 
			
		||||
    RadioInstance* radio)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRegistry* self = radio_registry_instance;
 | 
			
		||||
 | 
			
		||||
    if (self) {
 | 
			
		||||
@@ -85,6 +87,7 @@ void
 | 
			
		||||
radio_registry_instance_removed(
 | 
			
		||||
    const char* key)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRegistry* self = radio_registry_instance;
 | 
			
		||||
 | 
			
		||||
    if (self) {
 | 
			
		||||
@@ -103,6 +106,7 @@ RadioRegistry*
 | 
			
		||||
radio_registry_new(
 | 
			
		||||
    void)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (radio_registry_instance) {
 | 
			
		||||
        radio_registry_ref(radio_registry_instance);
 | 
			
		||||
    } else {
 | 
			
		||||
@@ -118,6 +122,7 @@ RadioRegistry*
 | 
			
		||||
radio_registry_ref(
 | 
			
		||||
    RadioRegistry* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        g_object_ref(RADIO_REGISTRY(self));
 | 
			
		||||
        return self;
 | 
			
		||||
@@ -130,6 +135,7 @@ void
 | 
			
		||||
radio_registry_unref(
 | 
			
		||||
    RadioRegistry* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        g_object_unref(RADIO_REGISTRY(self));
 | 
			
		||||
    }
 | 
			
		||||
@@ -142,6 +148,7 @@ radio_registry_add_instance_added_handler(
 | 
			
		||||
    RadioRegistryInstanceFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && G_LIKELY(func)) {
 | 
			
		||||
        return g_signal_connect_closure_by_id(self,
 | 
			
		||||
            radio_registry_signals[SIGNAL_INSTANCE_ADDED],
 | 
			
		||||
@@ -158,6 +165,7 @@ radio_registry_add_instance_removed_handler(
 | 
			
		||||
    RadioRegistryStrFunc func,
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && G_LIKELY(func)) {
 | 
			
		||||
        return g_signal_connect_closure_by_id(self,
 | 
			
		||||
            radio_registry_signals[SIGNAL_INSTANCE_REMOVED],
 | 
			
		||||
@@ -172,6 +180,7 @@ radio_registry_remove_handler(
 | 
			
		||||
    RadioRegistry* self,
 | 
			
		||||
    gulong id)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self) && G_LIKELY(id)) {
 | 
			
		||||
        g_signal_handler_disconnect(self, id);
 | 
			
		||||
    }
 | 
			
		||||
@@ -183,6 +192,7 @@ radio_registry_remove_handlers(
 | 
			
		||||
    gulong* ids,
 | 
			
		||||
    int count)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    gutil_disconnect_handlers(self, ids, count);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -195,6 +205,7 @@ void
 | 
			
		||||
radio_registry_init(
 | 
			
		||||
    RadioRegistry* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static
 | 
			
		||||
@@ -202,6 +213,7 @@ void
 | 
			
		||||
radio_registry_class_init(
 | 
			
		||||
    RadioRegistryClass* klass)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    radio_registry_signals[SIGNAL_INSTANCE_ADDED] =
 | 
			
		||||
        g_signal_new(SIGNAL_INSTANCE_ADDED_NAME, G_OBJECT_CLASS_TYPE(klass),
 | 
			
		||||
            G_SIGNAL_RUN_FIRST | G_SIGNAL_DETAILED, 0, NULL, NULL, NULL,
 | 
			
		||||
 
 | 
			
		||||
@@ -70,6 +70,7 @@ void
 | 
			
		||||
radio_request_object_cancel(
 | 
			
		||||
    RadioRequestObject* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequest* req = &self->pub;
 | 
			
		||||
 | 
			
		||||
    radio_base_cancel_request(req->object, req);
 | 
			
		||||
@@ -86,6 +87,7 @@ void
 | 
			
		||||
radio_request_free(
 | 
			
		||||
    RadioRequestObject* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequest* req = &self->pub;
 | 
			
		||||
 | 
			
		||||
    GVERBOSE_("%u (%08x) %p", req->code, req->serial, req);
 | 
			
		||||
@@ -115,6 +117,7 @@ void
 | 
			
		||||
radio_request_object_unref(
 | 
			
		||||
    RadioRequestObject* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        GASSERT(self->refcount > 0);
 | 
			
		||||
        if (g_atomic_int_dec_and_test(&self->refcount)) {
 | 
			
		||||
@@ -133,6 +136,7 @@ radio_request_default_retry(
 | 
			
		||||
    const GBinderReader* reader,
 | 
			
		||||
    void* user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (status != RADIO_TX_STATUS_OK) {
 | 
			
		||||
        GVERBOSE_("req %p %u (%08x) status %d", req, req->code, req->serial,
 | 
			
		||||
            status);
 | 
			
		||||
@@ -157,6 +161,7 @@ radio_request_object_new(
 | 
			
		||||
    GDestroyNotify destroy,
 | 
			
		||||
    void* user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequestObject* self = g_slice_new0(RadioRequestObject);
 | 
			
		||||
    RadioRequest* req = &self->pub;
 | 
			
		||||
    GBinderWriter tmp;
 | 
			
		||||
@@ -192,6 +197,7 @@ void
 | 
			
		||||
radio_request_unref_func(
 | 
			
		||||
    gpointer req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    radio_request_object_unref(radio_request_cast(req));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -200,6 +206,7 @@ radio_request_update_serial(
 | 
			
		||||
    RadioRequest* req,
 | 
			
		||||
    guint32 serial)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    GBinderWriter writer;
 | 
			
		||||
 | 
			
		||||
    gbinder_local_request_init_writer(req->args, &writer);
 | 
			
		||||
@@ -220,6 +227,7 @@ radio_request_new(
 | 
			
		||||
    GDestroyNotify destroy,
 | 
			
		||||
    void* user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return client ? radio_request_object_new(RADIO_BASE(client), NULL,
 | 
			
		||||
        code, writer, (RadioRequestGenericCompleteFunc) complete,
 | 
			
		||||
        destroy, user_data) : NULL;
 | 
			
		||||
@@ -234,6 +242,7 @@ radio_request_new2(
 | 
			
		||||
    GDestroyNotify destroy,
 | 
			
		||||
    void* user_data)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return group ? radio_request_object_new(RADIO_BASE(group->client), group,
 | 
			
		||||
        code, writer, (RadioRequestGenericCompleteFunc) complete,
 | 
			
		||||
        destroy, user_data) : NULL;
 | 
			
		||||
@@ -248,6 +257,7 @@ radio_config_request_new(
 | 
			
		||||
    GDestroyNotify destroy,
 | 
			
		||||
    void* user_data) /* Since 1.4.6 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return config ? radio_request_object_new(RADIO_BASE(config), NULL,
 | 
			
		||||
        code, writer, (RadioRequestGenericCompleteFunc) complete,
 | 
			
		||||
        destroy, user_data) : NULL;
 | 
			
		||||
@@ -257,6 +267,7 @@ RadioRequest*
 | 
			
		||||
radio_request_ref(
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequestObject* self = radio_request_cast(req);
 | 
			
		||||
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
@@ -270,6 +281,7 @@ void
 | 
			
		||||
radio_request_unref(
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    radio_request_object_unref(radio_request_cast(req));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -278,6 +290,7 @@ radio_request_set_blocking(
 | 
			
		||||
    RadioRequest* req,
 | 
			
		||||
    gboolean blocking)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(req)) {
 | 
			
		||||
        req->blocking = blocking;
 | 
			
		||||
    }
 | 
			
		||||
@@ -288,6 +301,7 @@ radio_request_set_timeout(
 | 
			
		||||
    RadioRequest* req,
 | 
			
		||||
    guint ms)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(req) && req->timeout_ms != ms) {
 | 
			
		||||
        RadioBase* base = req->object;
 | 
			
		||||
 | 
			
		||||
@@ -307,6 +321,7 @@ radio_request_set_retry(
 | 
			
		||||
    guint delay_ms,     /* Delay before each retry, in milliseconds */
 | 
			
		||||
    int max_count)      /* Negative count to keep retrying indefinitely */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(req)) {
 | 
			
		||||
        req->retry_delay_ms = delay_ms;
 | 
			
		||||
        req->max_retries = max_count;
 | 
			
		||||
@@ -318,6 +333,7 @@ radio_request_set_retry_func(
 | 
			
		||||
    RadioRequest* req,
 | 
			
		||||
    RadioRequestRetryFunc retry)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(req)) {
 | 
			
		||||
        req->retry = retry ? retry : radio_request_default_retry;
 | 
			
		||||
    }
 | 
			
		||||
@@ -327,6 +343,7 @@ gboolean
 | 
			
		||||
radio_request_submit(
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (req && req->object && radio_base_submit_request(req->object, req)) {
 | 
			
		||||
        radio_request_cast(req)->flags |= RADIO_REQUEST_FLAG_SUBMITTED;
 | 
			
		||||
        return TRUE;
 | 
			
		||||
@@ -338,6 +355,7 @@ gboolean
 | 
			
		||||
radio_request_retry(
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return req && req->object && radio_base_retry_request(req->object, req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -345,6 +363,7 @@ void
 | 
			
		||||
radio_request_cancel(
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequestObject* self = radio_request_cast(req);
 | 
			
		||||
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
@@ -357,6 +376,7 @@ void
 | 
			
		||||
radio_request_drop(
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequestObject* self = radio_request_cast(req);
 | 
			
		||||
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
@@ -366,6 +386,14 @@ radio_request_drop(
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void*
 | 
			
		||||
radio_request_user_data(
 | 
			
		||||
    RadioRequest* req) /* Since 1.4.11 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return G_LIKELY(req) ? req->user_data : NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Local Variables:
 | 
			
		||||
 * mode: C
 | 
			
		||||
 
 | 
			
		||||
@@ -60,6 +60,7 @@ void
 | 
			
		||||
radio_request_group_unlink_func(
 | 
			
		||||
    gpointer req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    ((RadioRequest*)req)->group = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -68,6 +69,7 @@ void
 | 
			
		||||
radio_request_group_free(
 | 
			
		||||
    RadioRequestGroupObject* self)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequestGroup* group = &self->pub;
 | 
			
		||||
 | 
			
		||||
    radio_base_unblock(RADIO_BASE(group->client), group);
 | 
			
		||||
@@ -85,6 +87,7 @@ radio_request_group_add(
 | 
			
		||||
    RadioRequestGroup* group,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequestGroupObject* self = radio_request_group_cast(group);
 | 
			
		||||
 | 
			
		||||
    /* Request is never NULL but the group may be */
 | 
			
		||||
@@ -99,6 +102,7 @@ radio_request_group_remove(
 | 
			
		||||
    RadioRequestGroup* group,
 | 
			
		||||
    RadioRequest* req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequestGroupObject* self = radio_request_group_cast(group);
 | 
			
		||||
 | 
			
		||||
    /* Request is never NULL but the group may be */
 | 
			
		||||
@@ -115,6 +119,7 @@ RadioRequestGroup*
 | 
			
		||||
radio_request_group_new(
 | 
			
		||||
    RadioClient* client)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (G_LIKELY(client)) {
 | 
			
		||||
        RadioRequestGroupObject* self = g_slice_new0(RadioRequestGroupObject);
 | 
			
		||||
        RadioRequestGroup* group = &self->pub;
 | 
			
		||||
@@ -132,6 +137,7 @@ RadioRequestGroup*
 | 
			
		||||
radio_request_group_ref(
 | 
			
		||||
    RadioRequestGroup* group)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequestGroupObject* self = radio_request_group_cast(group);
 | 
			
		||||
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
@@ -145,6 +151,7 @@ void
 | 
			
		||||
radio_request_group_unref(
 | 
			
		||||
    RadioRequestGroup* group)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequestGroupObject* self = radio_request_group_cast(group);
 | 
			
		||||
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
@@ -159,6 +166,7 @@ void
 | 
			
		||||
radio_request_group_cancel(
 | 
			
		||||
    RadioRequestGroup* group)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    RadioRequestGroupObject* self = radio_request_group_cast(group);
 | 
			
		||||
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
@@ -194,6 +202,7 @@ RADIO_BLOCK
 | 
			
		||||
radio_request_group_block_status(
 | 
			
		||||
    RadioRequestGroup* group)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return group ? radio_base_block_status(RADIO_BASE(group->client), group) :
 | 
			
		||||
        RADIO_BLOCK_NONE;
 | 
			
		||||
}
 | 
			
		||||
@@ -202,6 +211,7 @@ RADIO_BLOCK
 | 
			
		||||
radio_request_group_block(
 | 
			
		||||
    RadioRequestGroup* group)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return group ? radio_base_block(RADIO_BASE(group->client), group) :
 | 
			
		||||
        RADIO_BLOCK_NONE;
 | 
			
		||||
}
 | 
			
		||||
@@ -210,6 +220,7 @@ void
 | 
			
		||||
radio_request_group_unblock(
 | 
			
		||||
    RadioRequestGroup* group)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (group) {
 | 
			
		||||
        radio_base_unblock(RADIO_BASE(group->client), group);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										413
									
								
								src/radio_util.c
									
									
									
									
									
								
							
							
						
						
									
										413
									
								
								src/radio_util.c
									
									
									
									
									
								
							@@ -35,6 +35,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "radio_util_p.h"
 | 
			
		||||
#include "radio_instance.h"
 | 
			
		||||
#include "radio_log.h"
 | 
			
		||||
 | 
			
		||||
GLOG_MODULE_DEFINE("gbinder-radio");
 | 
			
		||||
@@ -43,6 +44,7 @@ guint
 | 
			
		||||
radio_observer_priority_index(
 | 
			
		||||
    RADIO_OBSERVER_PRIORITY priority)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (priority < RADIO_OBSERVER_PRIORITY_LOWEST) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    } else if (priority > RADIO_OBSERVER_PRIORITY_HIGHEST) {
 | 
			
		||||
@@ -56,25 +58,118 @@ const char*
 | 
			
		||||
radio_req_name(
 | 
			
		||||
    RADIO_REQ req)
 | 
			
		||||
{
 | 
			
		||||
    switch (req) {
 | 
			
		||||
    case RADIO_REQ_SET_RESPONSE_FUNCTIONS:   return "setResponseFunctions";
 | 
			
		||||
    case RADIO_REQ_RESPONSE_ACKNOWLEDGEMENT: return "responseAcknowledgement";
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_req_name2(NULL, req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char*
 | 
			
		||||
radio_req_name2(
 | 
			
		||||
    RadioInstance* instance,
 | 
			
		||||
    RADIO_REQ req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (!G_LIKELY(instance) || instance->interface_type == RADIO_INTERFACE_TYPE_HIDL) {
 | 
			
		||||
        switch (req) {
 | 
			
		||||
        case RADIO_REQ_SET_RESPONSE_FUNCTIONS:   return "setResponseFunctions";
 | 
			
		||||
        case RADIO_REQ_RESPONSE_ACKNOWLEDGEMENT: return "responseAcknowledgement";
 | 
			
		||||
#define RADIO_REQ_(req,resp,Name,NAME) \
 | 
			
		||||
    case RADIO_REQ_##NAME: return #Name;
 | 
			
		||||
    RADIO_CALL_1_0(RADIO_REQ_)
 | 
			
		||||
    RADIO_CALL_1_1(RADIO_REQ_)
 | 
			
		||||
    RADIO_CALL_1_2(RADIO_REQ_)
 | 
			
		||||
    RADIO_CALL_1_3(RADIO_REQ_)
 | 
			
		||||
    RADIO_CALL_1_4(RADIO_REQ_)
 | 
			
		||||
        case RADIO_REQ_##NAME: return #Name;
 | 
			
		||||
#define RADIO_REQ__(req,resp,Name,NAME,x) \
 | 
			
		||||
        case RADIO_REQ_##NAME##x: return #Name #x;
 | 
			
		||||
        RADIO_CALL_1_0(RADIO_REQ_)
 | 
			
		||||
        RADIO_CALL_1_1(RADIO_REQ_)
 | 
			
		||||
        RADIO_CALL_1_2(RADIO_REQ_)
 | 
			
		||||
        RADIO_CALL_1_3(RADIO_REQ_)
 | 
			
		||||
        RADIO_CALL_1_4_(RADIO_REQ__)
 | 
			
		||||
        RADIO_CALL_1_5_(RADIO_REQ__)
 | 
			
		||||
#undef RADIO_REQ_
 | 
			
		||||
    case RADIO_REQ_START_NETWORK_SCAN_1_2:     return "startNetworkScan_1_2";
 | 
			
		||||
    case RADIO_REQ_SET_INDICATION_FILTER_1_2:  return "setIndicationFilter_1_2";
 | 
			
		||||
    case RADIO_REQ_SETUP_DATA_CALL_1_2:        return "setupDataCall_1_2";
 | 
			
		||||
    case RADIO_REQ_DEACTIVATE_DATA_CALL_1_2:   return "deactivateDataCall_1_2";
 | 
			
		||||
    case RADIO_REQ_SET_INITIAL_ATTACH_APN_1_4: return "setInitialAttachApn_1_4";
 | 
			
		||||
    case RADIO_REQ_SET_DATA_PROFILE_1_4:       return "setDataProfile_1_4";
 | 
			
		||||
    case RADIO_REQ_ANY:
 | 
			
		||||
        break;
 | 
			
		||||
#undef RADIO_REQ__
 | 
			
		||||
        case RADIO_REQ_START_NETWORK_SCAN_1_2:     return "startNetworkScan_1_2";
 | 
			
		||||
        case RADIO_REQ_SET_INDICATION_FILTER_1_2:  return "setIndicationFilter_1_2";
 | 
			
		||||
        case RADIO_REQ_SETUP_DATA_CALL_1_2:        return "setupDataCall_1_2";
 | 
			
		||||
        case RADIO_REQ_DEACTIVATE_DATA_CALL_1_2:   return "deactivateDataCall_1_2";
 | 
			
		||||
        case RADIO_REQ_SET_INITIAL_ATTACH_APN_1_4: return "setInitialAttachApn_1_4";
 | 
			
		||||
        case RADIO_REQ_SET_DATA_PROFILE_1_4:       return "setDataProfile_1_4";
 | 
			
		||||
        case RADIO_REQ_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_DATA_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_DATA_REQ)req) {
 | 
			
		||||
#define RADIO_DATA_REQ_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_DATA_REQ_##NAME: return #Name;
 | 
			
		||||
        RADIO_DATA_CALL_1(RADIO_DATA_REQ_)
 | 
			
		||||
#undef RADIO_DATA_REQ_
 | 
			
		||||
        case RADIO_DATA_REQ_SET_RESPONSE_FUNCTIONS:   return "setResponseFunctions";
 | 
			
		||||
        case RADIO_DATA_REQ_RESPONSE_ACKNOWLEDGEMENT: return "responseAcknowledgement";
 | 
			
		||||
        case RADIO_DATA_REQ_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_IMS_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_IMS_REQ)req) {
 | 
			
		||||
#define RADIO_IMS_REQ_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_IMS_REQ_##NAME: return #Name;
 | 
			
		||||
        RADIO_IMS_CALL_1(RADIO_IMS_REQ_)
 | 
			
		||||
#undef RADIO_IMS_REQ_
 | 
			
		||||
        case RADIO_IMS_REQ_SET_RESPONSE_FUNCTIONS:   return "setResponseFunctions";
 | 
			
		||||
        case RADIO_IMS_REQ_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_MESSAGING_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_MESSAGING_REQ)req) {
 | 
			
		||||
#define RADIO_MESSAGING_REQ_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_MESSAGING_REQ_##NAME: return #Name;
 | 
			
		||||
        RADIO_MESSAGING_CALL_1(RADIO_MESSAGING_REQ_)
 | 
			
		||||
#undef RADIO_MESSAGING_REQ_
 | 
			
		||||
        case RADIO_MESSAGING_REQ_SET_RESPONSE_FUNCTIONS:   return "setResponseFunctions";
 | 
			
		||||
        case RADIO_MESSAGING_REQ_RESPONSE_ACKNOWLEDGEMENT: return "responseAcknowledgement";
 | 
			
		||||
        case RADIO_MESSAGING_REQ_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_MODEM_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_MODEM_REQ)req) {
 | 
			
		||||
#define RADIO_MODEM_REQ_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_MODEM_REQ_##NAME: return #Name;
 | 
			
		||||
        RADIO_MODEM_CALL_1(RADIO_MODEM_REQ_)
 | 
			
		||||
#undef RADIO_MODEM_REQ_
 | 
			
		||||
        case RADIO_MODEM_REQ_SET_RESPONSE_FUNCTIONS:   return "setResponseFunctions";
 | 
			
		||||
        case RADIO_MODEM_REQ_RESPONSE_ACKNOWLEDGEMENT: return "responseAcknowledgement";
 | 
			
		||||
        case RADIO_MODEM_REQ_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_NETWORK_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_NETWORK_REQ)req) {
 | 
			
		||||
#define RADIO_NETWORK_REQ_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_NETWORK_REQ_##NAME: return #Name;
 | 
			
		||||
        RADIO_NETWORK_CALL_1(RADIO_NETWORK_REQ_)
 | 
			
		||||
#undef RADIO_NETWORK_REQ_
 | 
			
		||||
        case RADIO_NETWORK_REQ_SET_RESPONSE_FUNCTIONS:   return "setResponseFunctions";
 | 
			
		||||
        case RADIO_NETWORK_REQ_RESPONSE_ACKNOWLEDGEMENT: return "responseAcknowledgement";
 | 
			
		||||
        case RADIO_NETWORK_REQ_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_SIM_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_SIM_REQ)req) {
 | 
			
		||||
#define RADIO_SIM_REQ_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_SIM_REQ_##NAME: return #Name;
 | 
			
		||||
        RADIO_SIM_CALL_1(RADIO_SIM_REQ_)
 | 
			
		||||
#undef RADIO_SIM_REQ_
 | 
			
		||||
        case RADIO_SIM_REQ_SET_RESPONSE_FUNCTIONS:   return "setResponseFunctions";
 | 
			
		||||
        case RADIO_SIM_REQ_RESPONSE_ACKNOWLEDGEMENT: return "responseAcknowledgement";
 | 
			
		||||
        case RADIO_SIM_REQ_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_VOICE_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_VOICE_REQ)req) {
 | 
			
		||||
#define RADIO_VOICE_REQ_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_VOICE_REQ_##NAME: return #Name;
 | 
			
		||||
        RADIO_VOICE_CALL_1(RADIO_VOICE_REQ_)
 | 
			
		||||
#undef RADIO_VOICE_REQ_
 | 
			
		||||
        case RADIO_VOICE_REQ_HANGUP:                   return "hangup";
 | 
			
		||||
        case RADIO_VOICE_REQ_SET_RESPONSE_FUNCTIONS:   return "setResponseFunctions";
 | 
			
		||||
        case RADIO_VOICE_REQ_RESPONSE_ACKNOWLEDGEMENT: return "responseAcknowledgement";
 | 
			
		||||
        case RADIO_VOICE_REQ_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
@@ -83,38 +178,130 @@ const char*
 | 
			
		||||
radio_resp_name(
 | 
			
		||||
    RADIO_RESP resp)
 | 
			
		||||
{
 | 
			
		||||
    switch (resp) {
 | 
			
		||||
    case RADIO_RESP_ACKNOWLEDGE_REQUEST: return "acknowledgeRequest";
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_resp_name2(NULL, resp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char*
 | 
			
		||||
radio_resp_name2(
 | 
			
		||||
    RadioInstance* instance,
 | 
			
		||||
    RADIO_RESP resp)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (!G_LIKELY(instance) || instance->interface_type == RADIO_INTERFACE_TYPE_HIDL) {
 | 
			
		||||
        switch (resp) {
 | 
			
		||||
        case RADIO_RESP_ACKNOWLEDGE_REQUEST: return "acknowledgeRequest";
 | 
			
		||||
#define RADIO_RESP_(req,resp,Name,NAME) \
 | 
			
		||||
    case RADIO_RESP_##NAME: return #Name "Response";
 | 
			
		||||
    RADIO_CALL_1_0(RADIO_RESP_)
 | 
			
		||||
    RADIO_CALL_1_1(RADIO_RESP_)
 | 
			
		||||
    RADIO_CALL_1_2(RADIO_RESP_)
 | 
			
		||||
    RADIO_CALL_1_3(RADIO_RESP_)
 | 
			
		||||
    RADIO_CALL_1_4(RADIO_RESP_)
 | 
			
		||||
        case RADIO_RESP_##NAME: return #Name "Response";
 | 
			
		||||
#define RADIO_RESP__(req,resp,Name,NAME,x) \
 | 
			
		||||
        case RADIO_RESP_##NAME##x: return #Name "Response" #x;
 | 
			
		||||
        RADIO_CALL_1_0(RADIO_RESP_)
 | 
			
		||||
        RADIO_CALL_1_1(RADIO_RESP_)
 | 
			
		||||
        RADIO_CALL_1_2(RADIO_RESP_)
 | 
			
		||||
        RADIO_CALL_1_3(RADIO_RESP_)
 | 
			
		||||
        RADIO_CALL_1_4_(RADIO_RESP__)
 | 
			
		||||
        RADIO_CALL_1_5_(RADIO_RESP__)
 | 
			
		||||
#undef RADIO_RESP_
 | 
			
		||||
    case RADIO_RESP_GET_CELL_INFO_LIST_1_2:
 | 
			
		||||
        return "getCellInfoListResponse_1_2";
 | 
			
		||||
    case RADIO_RESP_GET_ICC_CARD_STATUS_1_2:
 | 
			
		||||
        return "getIccCardStatusResponse_1_2";
 | 
			
		||||
    case RADIO_RESP_GET_CURRENT_CALLS_1_2:
 | 
			
		||||
        return "getCurrentCallsResponse_1_2";
 | 
			
		||||
    case RADIO_RESP_GET_SIGNAL_STRENGTH_1_2:
 | 
			
		||||
        return "getSignalStrengthResponse_1_2";
 | 
			
		||||
    case RADIO_RESP_GET_VOICE_REGISTRATION_STATE_1_2:
 | 
			
		||||
        return "getVoiceRegistrationStateResponse_1_2";
 | 
			
		||||
    case RADIO_RESP_GET_DATA_REGISTRATION_STATE_1_2:
 | 
			
		||||
        return "getDataRegistrationStateResponse_1_2";
 | 
			
		||||
    case RADIO_RESP_GET_CELL_INFO_LIST_RESPONSE_1_4:
 | 
			
		||||
        return "getCellInfoListResponse_1_4";
 | 
			
		||||
    case RADIO_RESP_GET_DATA_REGISTRATION_STATE_RESPONSE_1_4:
 | 
			
		||||
        return "getDataRegistrationStateResponse_1_4";
 | 
			
		||||
    case RADIO_RESP_GET_ICC_CARD_STATUS_RESPONSE_1_4:
 | 
			
		||||
        return "getIccCardStatusResponse_1_4";
 | 
			
		||||
    case RADIO_RESP_GET_DATA_CALL_LIST_RESPONSE_1_4:
 | 
			
		||||
        return "getDataCallListResponse_1_4";
 | 
			
		||||
    case RADIO_RESP_ANY:
 | 
			
		||||
        break;
 | 
			
		||||
#undef RADIO_RESP__
 | 
			
		||||
        case RADIO_RESP_GET_CELL_INFO_LIST_1_2:
 | 
			
		||||
            return "getCellInfoListResponse_1_2";
 | 
			
		||||
        case RADIO_RESP_GET_ICC_CARD_STATUS_1_2:
 | 
			
		||||
            return "getIccCardStatusResponse_1_2";
 | 
			
		||||
        case RADIO_RESP_GET_CURRENT_CALLS_1_2:
 | 
			
		||||
            return "getCurrentCallsResponse_1_2";
 | 
			
		||||
        case RADIO_RESP_GET_SIGNAL_STRENGTH_1_2:
 | 
			
		||||
            return "getSignalStrengthResponse_1_2";
 | 
			
		||||
        case RADIO_RESP_GET_VOICE_REGISTRATION_STATE_1_2:
 | 
			
		||||
            return "getVoiceRegistrationStateResponse_1_2";
 | 
			
		||||
        case RADIO_RESP_GET_DATA_REGISTRATION_STATE_1_2:
 | 
			
		||||
            return "getDataRegistrationStateResponse_1_2";
 | 
			
		||||
        case RADIO_RESP_GET_CELL_INFO_LIST_RESPONSE_1_4:
 | 
			
		||||
            return "getCellInfoListResponse_1_4";
 | 
			
		||||
        case RADIO_RESP_GET_DATA_REGISTRATION_STATE_RESPONSE_1_4:
 | 
			
		||||
            return "getDataRegistrationStateResponse_1_4";
 | 
			
		||||
        case RADIO_RESP_GET_ICC_CARD_STATUS_RESPONSE_1_4:
 | 
			
		||||
            return "getIccCardStatusResponse_1_4";
 | 
			
		||||
        case RADIO_RESP_GET_DATA_CALL_LIST_RESPONSE_1_4:
 | 
			
		||||
            return "getDataCallListResponse_1_4";
 | 
			
		||||
        case RADIO_RESP_GET_DATA_CALL_LIST_1_5:
 | 
			
		||||
            return "getDataCallList_1_5";
 | 
			
		||||
        case RADIO_RESP_GET_CELL_INFO_LIST_1_5:
 | 
			
		||||
            return "getCellInfoListResponse_1_5";
 | 
			
		||||
        case RADIO_RESP_GET_ICC_CARD_STATUS_1_5:
 | 
			
		||||
            return "getIccCardStatus_1_5";
 | 
			
		||||
        case RADIO_RESP_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_DATA_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_DATA_RESP)resp) {
 | 
			
		||||
        case RADIO_DATA_RESP_ACKNOWLEDGE_REQUEST: return "acknowledgeRequest";
 | 
			
		||||
#define RADIO_DATA_RESP_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_DATA_RESP_##NAME: return #Name "Response";
 | 
			
		||||
        RADIO_DATA_CALL_1(RADIO_DATA_RESP_)
 | 
			
		||||
#undef RADIO_DATA_RESP_
 | 
			
		||||
        case RADIO_DATA_RESP_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_IMS_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_IMS_RESP)resp) {
 | 
			
		||||
#define RADIO_IMS_RESP_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_IMS_RESP_##NAME: return #Name "Response";
 | 
			
		||||
        RADIO_IMS_CALL_1(RADIO_IMS_RESP_)
 | 
			
		||||
#undef RADIO_IMS_RESP_
 | 
			
		||||
        case RADIO_IMS_RESP_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_MESSAGING_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_MESSAGING_RESP)resp) {
 | 
			
		||||
        case RADIO_MESSAGING_RESP_ACKNOWLEDGE_REQUEST: return "acknowledgeRequest";
 | 
			
		||||
#define RADIO_MESSAGING_RESP_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_MESSAGING_RESP_##NAME: return #Name "Response";
 | 
			
		||||
        RADIO_MESSAGING_CALL_1(RADIO_MESSAGING_RESP_)
 | 
			
		||||
#undef RADIO_MESSAGING_RESP_
 | 
			
		||||
        case RADIO_MESSAGING_RESP_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_MODEM_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_MODEM_RESP)resp) {
 | 
			
		||||
        case RADIO_MODEM_RESP_ACKNOWLEDGE_REQUEST: return "acknowledgeRequest";
 | 
			
		||||
#define RADIO_MODEM_RESP_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_MODEM_RESP_##NAME: return #Name "Response";
 | 
			
		||||
        RADIO_MODEM_CALL_1(RADIO_MODEM_RESP_)
 | 
			
		||||
#undef RADIO_MODEM_RESP_
 | 
			
		||||
        case RADIO_MODEM_RESP_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_NETWORK_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_NETWORK_RESP)resp) {
 | 
			
		||||
        case RADIO_NETWORK_RESP_ACKNOWLEDGE_REQUEST: return "acknowledgeRequest";
 | 
			
		||||
#define RADIO_NETWORK_RESP_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_NETWORK_RESP_##NAME: return #Name "Response";
 | 
			
		||||
        RADIO_NETWORK_CALL_1(RADIO_NETWORK_RESP_)
 | 
			
		||||
#undef RADIO_NETWORK_RESP_
 | 
			
		||||
        case RADIO_NETWORK_RESP_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_SIM_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_SIM_RESP)resp) {
 | 
			
		||||
        case RADIO_SIM_RESP_ACKNOWLEDGE_REQUEST: return "acknowledgeRequest";
 | 
			
		||||
#define RADIO_SIM_RESP_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_SIM_RESP_##NAME: return #Name "Response";
 | 
			
		||||
        RADIO_SIM_CALL_1(RADIO_SIM_RESP_)
 | 
			
		||||
#undef RADIO_SIM_RESP_
 | 
			
		||||
        case RADIO_SIM_RESP_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_VOICE_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_VOICE_RESP)resp) {
 | 
			
		||||
        case RADIO_VOICE_RESP_ACKNOWLEDGE_REQUEST:        return "acknowledgeRequest";
 | 
			
		||||
        case RADIO_VOICE_RESP_HANGUP_CONNECTION_RESPONSE: return "hangupConnectionResponse";
 | 
			
		||||
#define RADIO_VOICE_RESP_(req,resp,Name,NAME) \
 | 
			
		||||
        case RADIO_VOICE_RESP_##NAME: return #Name "Response";
 | 
			
		||||
        RADIO_VOICE_CALL_1(RADIO_VOICE_RESP_)
 | 
			
		||||
#undef RADIO_VOICE_RESP_
 | 
			
		||||
        case RADIO_VOICE_RESP_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
@@ -123,16 +310,92 @@ const char*
 | 
			
		||||
radio_ind_name(
 | 
			
		||||
    RADIO_IND ind)
 | 
			
		||||
{
 | 
			
		||||
    switch (ind) {
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    return radio_ind_name2(NULL, ind);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char*
 | 
			
		||||
radio_ind_name2(
 | 
			
		||||
    RadioInstance* instance,
 | 
			
		||||
    RADIO_IND ind)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    if (!G_LIKELY(instance) || instance->interface_type == RADIO_INTERFACE_TYPE_HIDL) {
 | 
			
		||||
        switch (ind) {
 | 
			
		||||
#define RADIO_IND_(code,Name,NAME) \
 | 
			
		||||
    case RADIO_IND_##NAME: return #Name;
 | 
			
		||||
    RADIO_EVENT_1_0(RADIO_IND_)
 | 
			
		||||
    RADIO_EVENT_1_1(RADIO_IND_)
 | 
			
		||||
    RADIO_EVENT_1_2(RADIO_IND_)
 | 
			
		||||
    RADIO_EVENT_1_4(RADIO_IND_)
 | 
			
		||||
        case RADIO_IND_##NAME: return #Name;
 | 
			
		||||
        RADIO_EVENT_1_0(RADIO_IND_)
 | 
			
		||||
        RADIO_EVENT_1_1(RADIO_IND_)
 | 
			
		||||
        RADIO_EVENT_1_2(RADIO_IND_)
 | 
			
		||||
        RADIO_EVENT_1_4(RADIO_IND_)
 | 
			
		||||
        RADIO_EVENT_1_5(RADIO_IND_)
 | 
			
		||||
#undef RADIO_IND_
 | 
			
		||||
    case RADIO_IND_ANY:
 | 
			
		||||
        break;
 | 
			
		||||
        case RADIO_IND_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_DATA_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_DATA_IND)ind) {
 | 
			
		||||
#define RADIO_DATA_IND_(code,Name,NAME) \
 | 
			
		||||
        case RADIO_DATA_IND_##NAME: return #Name;
 | 
			
		||||
        RADIO_DATA_IND_1(RADIO_DATA_IND_)
 | 
			
		||||
#undef RADIO_DATA_IND_
 | 
			
		||||
        case RADIO_DATA_IND_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_IMS_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_IMS_IND)ind) {
 | 
			
		||||
#define RADIO_IMS_IND_(code,Name,NAME) \
 | 
			
		||||
        case RADIO_IMS_IND_##NAME: return #Name;
 | 
			
		||||
        RADIO_IMS_IND_1(RADIO_IMS_IND_)
 | 
			
		||||
#undef RADIO_IMS_IND_
 | 
			
		||||
        case RADIO_IMS_IND_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_MESSAGING_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_MESSAGING_IND)ind) {
 | 
			
		||||
#define RADIO_MESSAGING_IND_(code,Name,NAME) \
 | 
			
		||||
        case RADIO_MESSAGING_IND_##NAME: return #Name;
 | 
			
		||||
        RADIO_MESSAGING_IND_1(RADIO_MESSAGING_IND_)
 | 
			
		||||
#undef RADIO_MESSAGING_IND_
 | 
			
		||||
        case RADIO_MESSAGING_IND_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_MODEM_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_MODEM_IND)ind) {
 | 
			
		||||
#define RADIO_MODEM_IND_(code,Name,NAME) \
 | 
			
		||||
        case RADIO_MODEM_IND_##NAME: return #Name;
 | 
			
		||||
        RADIO_MODEM_IND_1(RADIO_MODEM_IND_)
 | 
			
		||||
#undef RADIO_MODEM_IND_
 | 
			
		||||
        case RADIO_MODEM_IND_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_NETWORK_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_NETWORK_IND)ind) {
 | 
			
		||||
#define RADIO_NETWORK_IND_(code,Name,NAME) \
 | 
			
		||||
        case RADIO_NETWORK_IND_##NAME: return #Name;
 | 
			
		||||
        RADIO_NETWORK_IND_1(RADIO_NETWORK_IND_)
 | 
			
		||||
#undef RADIO_NETWORK_IND_
 | 
			
		||||
        case RADIO_NETWORK_IND_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_SIM_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_SIM_IND)ind) {
 | 
			
		||||
#define RADIO_SIM_IND_(code,Name,NAME) \
 | 
			
		||||
        case RADIO_SIM_IND_##NAME: return #Name;
 | 
			
		||||
        RADIO_SIM_IND_1(RADIO_SIM_IND_)
 | 
			
		||||
#undef RADIO_SIM_IND_
 | 
			
		||||
        case RADIO_SIM_IND_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (instance->interface_aidl == RADIO_VOICE_INTERFACE) {
 | 
			
		||||
        switch ((RADIO_VOICE_IND)ind) {
 | 
			
		||||
#define RADIO_VOICE_IND_(code,Name,NAME) \
 | 
			
		||||
        case RADIO_VOICE_IND_##NAME: return #Name;
 | 
			
		||||
        RADIO_VOICE_IND_1(RADIO_VOICE_IND_)
 | 
			
		||||
#undef RADIO_VOICE_IND_
 | 
			
		||||
        case RADIO_VOICE_IND_ANY:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
@@ -152,15 +415,20 @@ RADIO_RESP
 | 
			
		||||
radio_req_resp(
 | 
			
		||||
    RADIO_REQ req)
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    switch (req) {
 | 
			
		||||
#define RADIO_REQ_(req,resp,Name,NAME) \
 | 
			
		||||
#define RADIO_REQ_RESP_(req,resp,Name,NAME) \
 | 
			
		||||
    case RADIO_REQ_##NAME: return RADIO_RESP_##NAME;
 | 
			
		||||
    RADIO_CALL_1_0(RADIO_REQ_)
 | 
			
		||||
    RADIO_CALL_1_1(RADIO_REQ_)
 | 
			
		||||
    RADIO_CALL_1_2(RADIO_REQ_)
 | 
			
		||||
    RADIO_CALL_1_3(RADIO_REQ_)
 | 
			
		||||
    RADIO_CALL_1_4(RADIO_REQ_)
 | 
			
		||||
#undef RADIO_REQ_
 | 
			
		||||
#define RADIO_REQ_RESP__(req,resp,Name,NAME,x) \
 | 
			
		||||
    case RADIO_REQ_##NAME##x: return RADIO_RESP_##NAME##x;
 | 
			
		||||
    RADIO_CALL_1_0(RADIO_REQ_RESP_)
 | 
			
		||||
    RADIO_CALL_1_1(RADIO_REQ_RESP_)
 | 
			
		||||
    RADIO_CALL_1_2(RADIO_REQ_RESP_)
 | 
			
		||||
    RADIO_CALL_1_3(RADIO_REQ_RESP_)
 | 
			
		||||
    RADIO_CALL_1_4_(RADIO_REQ_RESP__)
 | 
			
		||||
    RADIO_CALL_1_5_(RADIO_REQ_RESP__)
 | 
			
		||||
#undef RADIO_REQ_RESP_
 | 
			
		||||
#undef RADIO_REQ_RESP__
 | 
			
		||||
    case RADIO_REQ_SETUP_DATA_CALL_1_2:
 | 
			
		||||
        return RADIO_RESP_SETUP_DATA_CALL;
 | 
			
		||||
    case RADIO_REQ_DEACTIVATE_DATA_CALL_1_2:
 | 
			
		||||
@@ -195,6 +463,7 @@ radio_req_resp2(
 | 
			
		||||
    RADIO_REQ req,
 | 
			
		||||
    RADIO_INTERFACE iface) /* Since 1.4.5 */
 | 
			
		||||
{
 | 
			
		||||
    DBG("func:%s,line:%d,file:%s", __func__, __LINE__, __FILE__);
 | 
			
		||||
    switch (req) {
 | 
			
		||||
    /*
 | 
			
		||||
     * Requests expecting a response from a previous version of the
 | 
			
		||||
@@ -237,10 +506,8 @@ radio_req_resp2(
 | 
			
		||||
            return RADIO_RESP_GET_ICC_CARD_STATUS_1_2;
 | 
			
		||||
        case RADIO_INTERFACE_1_4:
 | 
			
		||||
            return RADIO_RESP_GET_ICC_CARD_STATUS_1_4;
 | 
			
		||||
        /*
 | 
			
		||||
        case RADIO_INTERFACE_1_5:
 | 
			
		||||
            return RADIO_RESP_GET_ICC_CARD_STATUS_1_5;
 | 
			
		||||
        */
 | 
			
		||||
        case RADIO_INTERFACE_NONE:
 | 
			
		||||
        case RADIO_INTERFACE_COUNT:
 | 
			
		||||
            break;
 | 
			
		||||
@@ -265,18 +532,15 @@ radio_req_resp2(
 | 
			
		||||
            return RADIO_RESP_GET_CELL_INFO_LIST_1_2;
 | 
			
		||||
        case RADIO_INTERFACE_1_4:
 | 
			
		||||
            return RADIO_RESP_GET_CELL_INFO_LIST_1_4;
 | 
			
		||||
        /*
 | 
			
		||||
        default:
 | 
			
		||||
            return RADIO_RESP_GET_CELL_INFO_LIST_1_5;
 | 
			
		||||
        */
 | 
			
		||||
        case RADIO_INTERFACE_NONE:
 | 
			
		||||
        case RADIO_INTERFACE_COUNT:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        return RADIO_RESP_NONE;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * getCurrentCalls
 | 
			
		||||
     * getCurrentCalls{
 | 
			
		||||
     * getCurrentCallsResponse
 | 
			
		||||
     * getCurrentCallsResponse_1_2 <= the last one
 | 
			
		||||
     * getCurrentCalls_1_6
 | 
			
		||||
@@ -286,7 +550,7 @@ radio_req_resp2(
 | 
			
		||||
        case RADIO_INTERFACE_1_0:
 | 
			
		||||
        case RADIO_INTERFACE_1_1:
 | 
			
		||||
            return RADIO_RESP_GET_CURRENT_CALLS;
 | 
			
		||||
        default:
 | 
			
		||||
        default: /* The last one */
 | 
			
		||||
            return RADIO_RESP_GET_CURRENT_CALLS_1_2;
 | 
			
		||||
        case RADIO_INTERFACE_NONE:
 | 
			
		||||
            break;
 | 
			
		||||
@@ -304,7 +568,7 @@ radio_req_resp2(
 | 
			
		||||
        case RADIO_INTERFACE_1_0:
 | 
			
		||||
        case RADIO_INTERFACE_1_1:
 | 
			
		||||
            return RADIO_RESP_GET_SIGNAL_STRENGTH;
 | 
			
		||||
        default:
 | 
			
		||||
        default: /* The last one */
 | 
			
		||||
            return RADIO_RESP_GET_SIGNAL_STRENGTH_1_2;
 | 
			
		||||
        case RADIO_INTERFACE_NONE:
 | 
			
		||||
            break;
 | 
			
		||||
@@ -322,7 +586,7 @@ radio_req_resp2(
 | 
			
		||||
        case RADIO_INTERFACE_1_0:
 | 
			
		||||
        case RADIO_INTERFACE_1_1:
 | 
			
		||||
            return RADIO_RESP_GET_VOICE_REGISTRATION_STATE;
 | 
			
		||||
        default:
 | 
			
		||||
        default: /* The last one */
 | 
			
		||||
            return RADIO_RESP_GET_VOICE_REGISTRATION_STATE_1_2;
 | 
			
		||||
        case RADIO_INTERFACE_NONE:
 | 
			
		||||
            break;
 | 
			
		||||
@@ -344,7 +608,7 @@ radio_req_resp2(
 | 
			
		||||
        case RADIO_INTERFACE_1_2:
 | 
			
		||||
        case RADIO_INTERFACE_1_3:
 | 
			
		||||
            return RADIO_RESP_GET_DATA_REGISTRATION_STATE_1_2;
 | 
			
		||||
        default:
 | 
			
		||||
        default: /* The last one */
 | 
			
		||||
            return RADIO_RESP_GET_DATA_REGISTRATION_STATE_1_4;
 | 
			
		||||
        case RADIO_INTERFACE_NONE:
 | 
			
		||||
            break;
 | 
			
		||||
@@ -367,12 +631,9 @@ radio_req_resp2(
 | 
			
		||||
            return RADIO_RESP_GET_DATA_CALL_LIST;
 | 
			
		||||
        case RADIO_INTERFACE_1_4:
 | 
			
		||||
            return RADIO_RESP_GET_DATA_CALL_LIST_1_4;
 | 
			
		||||
        /*
 | 
			
		||||
        default:
 | 
			
		||||
        default: /* The last one */
 | 
			
		||||
            return RADIO_RESP_GET_DATA_CALL_LIST_1_5;
 | 
			
		||||
        */
 | 
			
		||||
        case RADIO_INTERFACE_NONE:
 | 
			
		||||
        case RADIO_INTERFACE_COUNT:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        return RADIO_RESP_NONE;
 | 
			
		||||
 
 | 
			
		||||
@@ -43,6 +43,7 @@ struct gbinder_local_object {
 | 
			
		||||
    char** ifaces;
 | 
			
		||||
    GBinderLocalTransactFunc txproc;
 | 
			
		||||
    void* user_data;
 | 
			
		||||
    GBINDER_STABILITY_LEVEL stability;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char hidl_base_interface[] = "android.hidl.base@1.0::IBase";
 | 
			
		||||
@@ -144,6 +145,16 @@ gbinder_local_object_drop(
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
gbinder_local_object_set_stability(
 | 
			
		||||
    GBinderLocalObject* self,
 | 
			
		||||
    GBINDER_STABILITY_LEVEL stability)
 | 
			
		||||
{
 | 
			
		||||
    if (self) {
 | 
			
		||||
        self->stability = stability;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Local Variables:
 | 
			
		||||
 * mode: C
 | 
			
		||||
 
 | 
			
		||||
@@ -373,6 +373,24 @@ gbinder_reader_read_hidl_struct1(
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const void*
 | 
			
		||||
gbinder_reader_read_parcelable(
 | 
			
		||||
    GBinderReader* reader,
 | 
			
		||||
    gsize* size)
 | 
			
		||||
{
 | 
			
		||||
    TestGBinderReader* self = test_gbinder_reader_cast(reader);
 | 
			
		||||
    TestGBinderDataItem* item = self->item;
 | 
			
		||||
 | 
			
		||||
    if (item && item->type == DATA_TYPE_BUFFER) {
 | 
			
		||||
        if (size) {
 | 
			
		||||
            *size = item->data.blob.size;
 | 
			
		||||
        }
 | 
			
		||||
        self->item = item->next;
 | 
			
		||||
        return item->data.blob.buf;
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GBinderRemoteObject*
 | 
			
		||||
gbinder_reader_read_object(
 | 
			
		||||
    GBinderReader* reader)
 | 
			
		||||
 
 | 
			
		||||
@@ -491,6 +491,7 @@ test_null(
 | 
			
		||||
    g_assert(!radio_request_ref(NULL));
 | 
			
		||||
    g_assert(!radio_request_submit(NULL));
 | 
			
		||||
    g_assert(!radio_request_retry(NULL));
 | 
			
		||||
    g_assert(!radio_request_user_data(NULL));
 | 
			
		||||
 | 
			
		||||
    radio_request_group_cancel(NULL);
 | 
			
		||||
    radio_request_group_unref(NULL);
 | 
			
		||||
@@ -548,6 +549,7 @@ test_basic(
 | 
			
		||||
    /* Make sure destroy (but not completion) callback is invoked */
 | 
			
		||||
    req = radio_request_new(client, RADIO_REQ_GET_MUTE, &args,
 | 
			
		||||
        test_complete_not_reached, test_destroy_once, &destroyed);
 | 
			
		||||
    g_assert(radio_request_user_data(req) == &destroyed);
 | 
			
		||||
    radio_request_unref(req);
 | 
			
		||||
    g_assert(destroyed);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -52,11 +52,13 @@ static const GBinderClientIfaceInfo radio_config_ind_iface_info[] = {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const GBinderClientIfaceInfo radio_config_resp_iface_info[] = {
 | 
			
		||||
    {RADIO_CONFIG_RESPONSE_1_2, RADIO_CONFIG_1_2_RESP_LAST },
 | 
			
		||||
    {RADIO_CONFIG_RESPONSE_1_1, RADIO_CONFIG_1_1_RESP_LAST },
 | 
			
		||||
    {RADIO_CONFIG_RESPONSE_1_0, RADIO_CONFIG_1_0_RESP_LAST }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_config_req_ifaces[] = {
 | 
			
		||||
    RADIO_CONFIG_1_2,
 | 
			
		||||
    RADIO_CONFIG_1_1,
 | 
			
		||||
    RADIO_CONFIG_1_0,
 | 
			
		||||
    NULL
 | 
			
		||||
@@ -64,7 +66,8 @@ static const char* const radio_config_req_ifaces[] = {
 | 
			
		||||
 | 
			
		||||
static const char* const radio_config_fqnames[] = {
 | 
			
		||||
    RADIO_CONFIG_1_0_FQNAME,
 | 
			
		||||
    RADIO_CONFIG_1_1_FQNAME
 | 
			
		||||
    RADIO_CONFIG_1_1_FQNAME,
 | 
			
		||||
    RADIO_CONFIG_1_2_FQNAME
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2021 Jolla Ltd.
 | 
			
		||||
 * Copyright (C) 2021 Slava Monich <slava.monich@jolla.com>
 | 
			
		||||
 * Copyright (C) 2022 Jolla Ltd.
 | 
			
		||||
 * Copyright (C) 2022 Slava Monich <slava.monich@jolla.com>
 | 
			
		||||
 *
 | 
			
		||||
 * You may use this file under the terms of the BSD license as follows:
 | 
			
		||||
 *
 | 
			
		||||
@@ -66,6 +66,12 @@ test_req_name(
 | 
			
		||||
        "setSystemSelectionChannels");
 | 
			
		||||
    g_assert_cmpstr(radio_req_name(RADIO_REQ_EMERGENCY_DIAL),==,
 | 
			
		||||
        "emergencyDial");
 | 
			
		||||
    g_assert_cmpstr(radio_req_name(RADIO_REQ_ENABLE_UICC_APPLICATIONS),==,
 | 
			
		||||
        "enableUiccApplications");
 | 
			
		||||
    g_assert_cmpstr(radio_req_name(RADIO_REQ_START_NETWORK_SCAN_1_4),==,
 | 
			
		||||
        "startNetworkScan_1_4");
 | 
			
		||||
    g_assert_cmpstr(radio_req_name(RADIO_REQ_START_NETWORK_SCAN_1_5),==,
 | 
			
		||||
        "startNetworkScan_1_5");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*
 | 
			
		||||
@@ -89,6 +95,12 @@ test_resp_name(
 | 
			
		||||
        "setSystemSelectionChannelsResponse");
 | 
			
		||||
    g_assert_cmpstr(radio_resp_name(RADIO_RESP_EMERGENCY_DIAL),==,
 | 
			
		||||
        "emergencyDialResponse");
 | 
			
		||||
    g_assert_cmpstr(radio_resp_name(RADIO_RESP_ENABLE_UICC_APPLICATIONS),==,
 | 
			
		||||
        "enableUiccApplicationsResponse");
 | 
			
		||||
    g_assert_cmpstr(radio_resp_name(RADIO_RESP_START_NETWORK_SCAN_1_4),==,
 | 
			
		||||
        "startNetworkScanResponse_1_4");
 | 
			
		||||
    g_assert_cmpstr(radio_resp_name(RADIO_RESP_START_NETWORK_SCAN_1_5),==,
 | 
			
		||||
        "startNetworkScanResponse_1_5");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*
 | 
			
		||||
@@ -110,6 +122,8 @@ test_ind_name(
 | 
			
		||||
        "currentLinkCapacityEstimate");
 | 
			
		||||
    g_assert_cmpstr(radio_ind_name(RADIO_IND_CURRENT_EMERGENCY_NUMBER_LIST),==,
 | 
			
		||||
        "currentEmergencyNumberList");
 | 
			
		||||
    g_assert_cmpstr(radio_ind_name(RADIO_IND_REGISTRATION_FAILED),==,
 | 
			
		||||
        "registrationFailed");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*
 | 
			
		||||
@@ -204,10 +218,9 @@ test_req_resp2(
 | 
			
		||||
          RADIO_RESP_SET_INDICATION_FILTER },
 | 
			
		||||
        { RADIO_REQ_SET_INDICATION_FILTER_1_2, RADIO_INTERFACE_1_4,
 | 
			
		||||
          RADIO_RESP_SET_INDICATION_FILTER },
 | 
			
		||||
        /*
 | 
			
		||||
        { RADIO_REQ_SET_INDICATION_FILTER_1_5, RADIO_INTERFACE_1_5,
 | 
			
		||||
          RADIO_RESP_SET_INDICATION_FILTER },
 | 
			
		||||
        */
 | 
			
		||||
          RADIO_RESP_SET_INDICATION_FILTER_1_5 },
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        { RADIO_REQ_GET_ICC_CARD_STATUS, RADIO_INTERFACE_1_0,
 | 
			
		||||
          RADIO_RESP_GET_ICC_CARD_STATUS },
 | 
			
		||||
@@ -219,12 +232,10 @@ test_req_resp2(
 | 
			
		||||
          RADIO_RESP_GET_ICC_CARD_STATUS_1_2 },
 | 
			
		||||
        { RADIO_REQ_GET_ICC_CARD_STATUS, RADIO_INTERFACE_1_4,
 | 
			
		||||
          RADIO_RESP_GET_ICC_CARD_STATUS_1_4 },
 | 
			
		||||
        /*
 | 
			
		||||
        { RADIO_REQ_GET_ICC_CARD_STATUS, RADIO_INTERFACE_1_5,
 | 
			
		||||
          RADIO_RESP_GET_ICC_CARD_STATUS_1_5 },
 | 
			
		||||
        { RADIO_REQ_GET_ICC_CARD_STATUS, RADIO_INTERFACE_COUNT,
 | 
			
		||||
          RADIO_RESP_GET_ICC_CARD_STATUS_1_5 },
 | 
			
		||||
        */
 | 
			
		||||
          RADIO_RESP_NONE },
 | 
			
		||||
        { RADIO_REQ_GET_ICC_CARD_STATUS, RADIO_INTERFACE_NONE,
 | 
			
		||||
          RADIO_RESP_NONE },
 | 
			
		||||
 | 
			
		||||
@@ -238,12 +249,10 @@ test_req_resp2(
 | 
			
		||||
          RADIO_RESP_GET_CELL_INFO_LIST_1_2 },
 | 
			
		||||
        { RADIO_REQ_GET_CELL_INFO_LIST, RADIO_INTERFACE_1_4,
 | 
			
		||||
          RADIO_RESP_GET_CELL_INFO_LIST_1_4 },
 | 
			
		||||
        /*
 | 
			
		||||
        { RADIO_REQ_GET_CELL_INFO_LIST, RADIO_INTERFACE_1_5,
 | 
			
		||||
          RADIO_RESP_GET_CELL_INFO_LIST_1_5 },
 | 
			
		||||
        { RADIO_REQ_GET_CELL_INFO_LIST, RADIO_INTERFACE_COUNT,
 | 
			
		||||
          RADIO_RESP_GET_CELL_INFO_LIST_1_5 },
 | 
			
		||||
        */
 | 
			
		||||
        { RADIO_REQ_GET_CELL_INFO_LIST, RADIO_INTERFACE_NONE,
 | 
			
		||||
          RADIO_RESP_NONE },
 | 
			
		||||
 | 
			
		||||
@@ -317,12 +326,10 @@ test_req_resp2(
 | 
			
		||||
          RADIO_RESP_GET_DATA_CALL_LIST },
 | 
			
		||||
        { RADIO_REQ_GET_DATA_CALL_LIST, RADIO_INTERFACE_1_4,
 | 
			
		||||
          RADIO_RESP_GET_DATA_CALL_LIST_1_4 },
 | 
			
		||||
        /*
 | 
			
		||||
        { RADIO_REQ_GET_DATA_CALL_LIST, RADIO_INTERFACE_1_5,
 | 
			
		||||
          RADIO_RESP_GET_DATA_CALL_LIST_1_5 },
 | 
			
		||||
        { RADIO_REQ_GET_DATA_CALL_LIST, RADIO_INTERFACE_COUNT,
 | 
			
		||||
          RADIO_RESP_GET_DATA_CALL_LIST_1_5 },
 | 
			
		||||
        */
 | 
			
		||||
        { RADIO_REQ_GET_DATA_CALL_LIST, RADIO_INTERFACE_NONE,
 | 
			
		||||
          RADIO_RESP_NONE }
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user