Compare commits
	
		
			51 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					72b3fc58ec | ||
| 
						 | 
					4140def1fc | ||
| 
						 | 
					901396b385 | ||
| 
						 | 
					052a0e11fb | ||
| 
						 | 
					024f319164 | ||
| 
						 | 
					91f7b80459 | ||
| 
						 | 
					13076eb3ec | ||
| 
						 | 
					27695ee5ff | ||
| 
						 | 
					7b5656d2a8 | ||
| 
						 | 
					788d472839 | ||
| 
						 | 
					7f4446b3fd | ||
| 
						 | 
					e08ef1bdae | ||
| 
						 | 
					8039bfe66e | ||
| 
						 | 
					7e23a74fbf | ||
| 
						 | 
					a9463baaaf | ||
| 
						 | 
					ddee97fc93 | ||
| 
						 | 
					f562149d18 | ||
| 
						 | 
					21d659a5c5 | ||
| 
						 | 
					71f5632e2d | ||
| 
						 | 
					30e7563d94 | ||
| 
						 | 
					26a321bc36 | ||
| 
						 | 
					f141bd1615 | ||
| 
						 | 
					d3a63909c7 | ||
| 
						 | 
					aaa1c0c9a0 | ||
| 
						 | 
					e0ffc4d60c | ||
| 
						 | 
					94d469380e | ||
| 
						 | 
					7e4b839fc6 | ||
| 
						 | 
					0708177e94 | ||
| 
						 | 
					9047ef9a56 | ||
| 
						 | 
					bb61f00d57 | ||
| 
						 | 
					601ef084ee | ||
| 
						 | 
					3cd41646b4 | ||
| 
						 | 
					d1fb490f9b | ||
| 
						 | 
					7e0c222f1d | ||
| 
						 | 
					f5b2cc062c | ||
| 
						 | 
					9e246ebb55 | ||
| 
						 | 
					5f5afc3d76 | ||
| 
						 | 
					eab404c46b | ||
| 
						 | 
					395a50ba3d | ||
| 
						 | 
					79379ea3d1 | ||
| 
						 | 
					197e84e71a | ||
| 
						 | 
					30ea57a3cb | ||
| 
						 | 
					49fcc2a599 | ||
| 
						 | 
					6d9f87f7ea | ||
| 
						 | 
					efc30cd06d | ||
| 
						 | 
					6959979384 | ||
| 
						 | 
					1ebf32bc73 | ||
| 
						 | 
					a119a68374 | ||
| 
						 | 
					1e7506e7ac | ||
| 
						 | 
					bd20f5aabe | ||
| 
						 | 
					42fc35fbc7 | 
							
								
								
									
										10
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,13 +1,11 @@
 | 
			
		||||
*~
 | 
			
		||||
debian/files
 | 
			
		||||
debian/libgbinder-radio-dev.debhelper.log
 | 
			
		||||
debian/libgbinder-radio-dev.substvars
 | 
			
		||||
debian/libgbinder-radio-dev
 | 
			
		||||
debian/libgbinder-radio.debhelper.log
 | 
			
		||||
debian/libgbinder-radio.postinst.debhelper
 | 
			
		||||
debian/libgbinder-radio.postrm.debhelper
 | 
			
		||||
debian/libgbinder-radio.substvars
 | 
			
		||||
debian/libgbinder-radio
 | 
			
		||||
debian/*.debhelper.log
 | 
			
		||||
debian/*.debhelper
 | 
			
		||||
debian/*.substvars
 | 
			
		||||
debian/*.install
 | 
			
		||||
debian/tmp
 | 
			
		||||
documentation.list
 | 
			
		||||
installroot
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								AUTHORS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								AUTHORS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
Danct12 <danct12@disroot.org>
 | 
			
		||||
Frajo Haider <f_haider@gmx.at>
 | 
			
		||||
Matti Lehtimäki <matti.lehtimaki@jolla.com>
 | 
			
		||||
Slava Monich <slava@monich.com>
 | 
			
		||||
							
								
								
									
										33
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
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:
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
							
								
								
									
										35
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								Makefile
									
									
									
									
									
								
							@@ -22,8 +22,8 @@ all: debug release pkgconfig
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
VERSION_MAJOR = 1
 | 
			
		||||
VERSION_MINOR = 0
 | 
			
		||||
VERSION_RELEASE = 1
 | 
			
		||||
VERSION_MINOR = 2
 | 
			
		||||
VERSION_RELEASE = 5
 | 
			
		||||
 | 
			
		||||
# Version for pkg-config
 | 
			
		||||
PCVERSION = $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_RELEASE)
 | 
			
		||||
@@ -78,10 +78,7 @@ DEBUG_FLAGS = -g
 | 
			
		||||
RELEASE_FLAGS =
 | 
			
		||||
COVERAGE_FLAGS = -g
 | 
			
		||||
 | 
			
		||||
ifndef KEEP_SYMBOLS
 | 
			
		||||
KEEP_SYMBOLS = 0
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
KEEP_SYMBOLS ?= 0
 | 
			
		||||
ifneq ($(KEEP_SYMBOLS),0)
 | 
			
		||||
RELEASE_FLAGS += -g
 | 
			
		||||
endif
 | 
			
		||||
@@ -144,9 +141,10 @@ pkgconfig: $(PKGCONFIG)
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f *~ $(SRC_DIR)/*~ $(INCLUDE_DIR)/*~
 | 
			
		||||
	rm -fr $(BUILD_DIR) RPMS installroot
 | 
			
		||||
	rm -fr debian/tmp debian/libgbinder debian/libgbinder-dev
 | 
			
		||||
	rm -fr debian/tmp debian/libgbinder-radio debian/libgbinder-radio-dev
 | 
			
		||||
	rm -f documentation.list debian/files debian/*.substvars
 | 
			
		||||
	rm -f debian/*.debhelper.log debian/*.debhelper debian/*~
 | 
			
		||||
	rm -f debian/*.install
 | 
			
		||||
 | 
			
		||||
$(BUILD_DIR):
 | 
			
		||||
	mkdir -p $@
 | 
			
		||||
@@ -192,25 +190,34 @@ $(COVERAGE_LIB): $(COVERAGE_OBJS)
 | 
			
		||||
	$(AR) rc $@ $?
 | 
			
		||||
	ranlib $@
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# LIBDIR usually gets substituted with arch specific dir.
 | 
			
		||||
# It's relative in deb build and can be whatever in rpm build.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
LIBDIR ?= usr/lib
 | 
			
		||||
ABS_LIBDIR := $(shell echo /$(LIBDIR) | sed -r 's|/+|/|g')
 | 
			
		||||
 | 
			
		||||
$(PKGCONFIG): $(LIB_NAME).pc.in Makefile
 | 
			
		||||
	sed -e 's/\[version\]/'$(PCVERSION)/g $< > $@
 | 
			
		||||
	sed -e 's|@version@|$(PCVERSION)|g' -e 's|@libdir@|$(ABS_LIBDIR)|g' $< > $@
 | 
			
		||||
 | 
			
		||||
debian/%.install: debian/%.install.in
 | 
			
		||||
	sed 's|@LIBDIR@|$(LIBDIR)|g' $< > $@
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Install
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
INSTALL_PERM  = 644
 | 
			
		||||
 | 
			
		||||
INSTALL = install
 | 
			
		||||
INSTALL_DIRS = $(INSTALL) -d
 | 
			
		||||
INSTALL_FILES = $(INSTALL) -m $(INSTALL_PERM)
 | 
			
		||||
INSTALL_FILES = $(INSTALL) -m 644
 | 
			
		||||
 | 
			
		||||
INSTALL_LIB_DIR = $(DESTDIR)/usr/lib
 | 
			
		||||
INSTALL_LIB_DIR = $(DESTDIR)$(ABS_LIBDIR)
 | 
			
		||||
INSTALL_INCLUDE_DIR = $(DESTDIR)/usr/include/$(NAME)
 | 
			
		||||
INSTALL_PKGCONFIG_DIR = $(DESTDIR)/usr/lib/pkgconfig
 | 
			
		||||
INSTALL_PKGCONFIG_DIR = $(DESTDIR)$(ABS_LIBDIR)/pkgconfig
 | 
			
		||||
 | 
			
		||||
install: $(INSTALL_LIB_DIR)
 | 
			
		||||
	$(INSTALL_FILES) $(RELEASE_SO) $(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)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										1
									
								
								debian/compat
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/compat
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
9
 | 
			
		||||
							
								
								
									
										17
									
								
								debian/control
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								debian/control
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
Source: libgbinder-radio
 | 
			
		||||
Priority: optional
 | 
			
		||||
Maintainer: Danct12 <danct12@disroot.org>
 | 
			
		||||
Build-Depends: debhelper (>=9), libgbinder-dev (>= 1.0.9)
 | 
			
		||||
Standards-Version: 3.9.6
 | 
			
		||||
 | 
			
		||||
Package: libgbinder-radio-dev
 | 
			
		||||
Section: libdevel
 | 
			
		||||
Architecture: any
 | 
			
		||||
Depends: libgbinder-radio (= ${binary:Version}), ${misc:Depends}
 | 
			
		||||
Description: Development files for libgbinder-radio
 | 
			
		||||
 | 
			
		||||
Package: libgbinder-radio
 | 
			
		||||
Section: libs
 | 
			
		||||
Architecture: any
 | 
			
		||||
Depends: libgbinder (>= 1.0.9), ${shlibs:Depends}, ${misc:Depends}
 | 
			
		||||
Description: Binder client library for Android radio interfaces
 | 
			
		||||
							
								
								
									
										33
									
								
								debian/copyright
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								debian/copyright
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
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:
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
							
								
								
									
										3
									
								
								debian/libgbinder-radio-dev.install.in
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								debian/libgbinder-radio-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-radio.install.in
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/libgbinder-radio.install.in
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
debian/tmp/@LIBDIR@/libgbinder-radio.so.* @LIBDIR@
 | 
			
		||||
							
								
								
									
										14
									
								
								debian/rules
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								debian/rules
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
#!/usr/bin/make -f
 | 
			
		||||
# Uncomment to enable verbose build
 | 
			
		||||
#export DH_VERBOSE = 1
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
override_dh_auto_install:
 | 
			
		||||
	dh_auto_install -- LIBDIR=$(LIBDIR) install-dev
 | 
			
		||||
 | 
			
		||||
%:
 | 
			
		||||
	dh $@ 
 | 
			
		||||
							
								
								
									
										1
									
								
								debian/source/format
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/source/format
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
3.0 (native)
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2018-2019 Jolla Ltd.
 | 
			
		||||
 * Copyright (C) 2018-2019 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:
 | 
			
		||||
 *
 | 
			
		||||
@@ -45,6 +45,13 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
typedef struct radio_instance_priv RadioInstancePriv;
 | 
			
		||||
 | 
			
		||||
typedef enum radio_interface {
 | 
			
		||||
    RADIO_INTERFACE_1_0,
 | 
			
		||||
    RADIO_INTERFACE_1_1,
 | 
			
		||||
    RADIO_INTERFACE_1_2,
 | 
			
		||||
    RADIO_INTERFACE_COUNT
 | 
			
		||||
} RADIO_INTERFACE; /* Since 1.2.0 */
 | 
			
		||||
 | 
			
		||||
struct radio_instance {
 | 
			
		||||
    GObject parent;
 | 
			
		||||
    RadioInstancePriv* priv;
 | 
			
		||||
@@ -52,14 +59,14 @@ struct radio_instance {
 | 
			
		||||
    const char* dev;
 | 
			
		||||
    const char* slot;
 | 
			
		||||
    const char* key;
 | 
			
		||||
    /* Since 1.0.7 */
 | 
			
		||||
    const char* modem;  /* D-Bus path */
 | 
			
		||||
    int slot_index;     /* 0 for SIM1, 1 for SIM2 and so on */
 | 
			
		||||
    gboolean enabled;
 | 
			
		||||
    /* Since 1.2.0 */
 | 
			
		||||
    RADIO_INTERFACE version;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct radio_response_info {
 | 
			
		||||
    RADIO_RESP_TYPE type;
 | 
			
		||||
    guint32 serial;
 | 
			
		||||
    guint32 error;
 | 
			
		||||
} RadioResponseInfo;
 | 
			
		||||
 | 
			
		||||
typedef
 | 
			
		||||
void
 | 
			
		||||
(*RadioInstanceFunc)(
 | 
			
		||||
@@ -119,11 +126,38 @@ radio_instance_new(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name);
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_new_with_modem_and_slot(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    const char* modem,
 | 
			
		||||
    int slot_index); /* Since 1.0.7 */
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_new_with_version(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    RADIO_INTERFACE version); /* Since 1.2.1 */
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_new_with_modem_slot_and_version(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    const char* modem,
 | 
			
		||||
    int slot_index,
 | 
			
		||||
    RADIO_INTERFACE version); /* Since 1.2.1 */
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_get(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name);
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_get_with_version(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    RADIO_INTERFACE version); /* Since 1.2.2 */
 | 
			
		||||
 | 
			
		||||
RadioInstance* const*
 | 
			
		||||
radio_instance_get_all(
 | 
			
		||||
    void);
 | 
			
		||||
@@ -166,6 +200,11 @@ radio_instance_send_request_sync(
 | 
			
		||||
    RADIO_REQ code,
 | 
			
		||||
    GBinderLocalRequest* args);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
radio_instance_set_enabled(
 | 
			
		||||
    RadioInstance* radio,
 | 
			
		||||
    gboolean enabled); /* Since 1.0.7 */
 | 
			
		||||
 | 
			
		||||
gulong
 | 
			
		||||
radio_instance_add_indication_handler(
 | 
			
		||||
    RadioInstance* radio,
 | 
			
		||||
@@ -206,6 +245,12 @@ radio_instance_add_death_handler(
 | 
			
		||||
    RadioInstanceFunc func,
 | 
			
		||||
    gpointer user_data);
 | 
			
		||||
 | 
			
		||||
gulong
 | 
			
		||||
radio_instance_add_enabled_handler(
 | 
			
		||||
    RadioInstance* radio,
 | 
			
		||||
    RadioInstanceFunc func,
 | 
			
		||||
    gpointer user_data); /* Since 1.0.7 */
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
radio_instance_remove_handler(
 | 
			
		||||
    RadioInstance* radio,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2018-2019 Jolla Ltd.
 | 
			
		||||
 * Copyright (C) 2018-2019 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:
 | 
			
		||||
 *
 | 
			
		||||
@@ -45,10 +45,29 @@ typedef struct radio_instance RadioInstance;
 | 
			
		||||
typedef struct radio_registry RadioRegistry;
 | 
			
		||||
 | 
			
		||||
#define RADIO_IFACE_PREFIX     "android.hardware.radio@"
 | 
			
		||||
#define RADIO_IFACE            "IRadio"
 | 
			
		||||
#define RADIO_RESPONSE_IFACE   "IRadioResponse"
 | 
			
		||||
#define RADIO_INDICATION_IFACE "IRadioIndication"
 | 
			
		||||
#define RADIO_IFACE_1_0(x)     RADIO_IFACE_PREFIX "1.0::" x
 | 
			
		||||
#define RADIO_1_0              RADIO_IFACE_1_0("IRadio")
 | 
			
		||||
#define RADIO_RESPONSE_1_0     RADIO_IFACE_1_0("IRadioResponse")
 | 
			
		||||
#define RADIO_INDICATION_1_0   RADIO_IFACE_1_0("IRadioIndication")
 | 
			
		||||
#define RADIO_IFACE_1_1(x)     RADIO_IFACE_PREFIX "1.1::" x
 | 
			
		||||
#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_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_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_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)
 | 
			
		||||
 | 
			
		||||
/* Types defined in types.hal */
 | 
			
		||||
 | 
			
		||||
@@ -175,6 +194,45 @@ typedef enum radio_access_family {
 | 
			
		||||
} RADIO_ACCESS_FAMILY;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_ACCESS_FAMILY) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_apn_auth_type {
 | 
			
		||||
    RADIO_APN_AUTH_NONE,
 | 
			
		||||
    RADIO_APN_AUTH_PAP,
 | 
			
		||||
    RADIO_APN_AUTH_CHAP,
 | 
			
		||||
    RADIO_APN_AUTH_PAP_CHAP
 | 
			
		||||
} RADIO_APN_AUTH_TYPE;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_APN_AUTH_TYPE) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_apn_types {
 | 
			
		||||
    RADIO_APN_TYPE_NONE = 0,
 | 
			
		||||
    RADIO_APN_TYPE_DEFAULT = 1 << 0,
 | 
			
		||||
    RADIO_APN_TYPE_MMS = 1 << 1,
 | 
			
		||||
    RADIO_APN_TYPE_SUPL = 1 << 2,
 | 
			
		||||
    RADIO_APN_TYPE_DUN = 1 << 3,
 | 
			
		||||
    RADIO_APN_TYPE_HIPRI = 1 << 4,
 | 
			
		||||
    RADIO_APN_TYPE_FOTA = 1 << 5,
 | 
			
		||||
    RADIO_APN_TYPE_IMS = 1 << 6,
 | 
			
		||||
    RADIO_APN_TYPE_CBS = 1 << 7,
 | 
			
		||||
    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_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_TYPES;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_APN_TYPES) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_data_profile_id {
 | 
			
		||||
    RADIO_DATA_PROFILE_INVALID = -1,
 | 
			
		||||
    RADIO_DATA_PROFILE_DEFAULT = 0,
 | 
			
		||||
    RADIO_DATA_PROFILE_TETHERED = 1,
 | 
			
		||||
    RADIO_DATA_PROFILE_IMS = 2,
 | 
			
		||||
    RADIO_DATA_PROFILE_FOTA = 3,
 | 
			
		||||
    RADIO_DATA_PROFILE_CBS = 4,
 | 
			
		||||
    RADIO_DATA_PROFILE_OEM_BASE = 1000
 | 
			
		||||
} RADIO_DATA_PROFILE_ID;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_DATA_PROFILE_ID) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_card_state {
 | 
			
		||||
    RADIO_CARD_STATE_ABSENT,
 | 
			
		||||
    RADIO_CARD_STATE_PRESENT,
 | 
			
		||||
@@ -258,6 +316,88 @@ typedef enum radio_capability_status {
 | 
			
		||||
} RADIO_CAPABILITY_STATUS;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_CAPABILITY_STATUS) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_device_state {
 | 
			
		||||
    RADIO_DEVICE_STATE_POWER_SAVE_MODE,
 | 
			
		||||
    RADIO_DEVICE_STATE_CHARGING_STATE,
 | 
			
		||||
    RADIO_DEVICE_STATE_LOW_DATA_EXPECTED
 | 
			
		||||
} RADIO_DEVICE_STATE;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_DEVICE_STATE) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_data_request_reason {
 | 
			
		||||
    RADIO_DATA_REQUEST_REASON_NORMAL = 1,
 | 
			
		||||
    RADIO_DATA_REQUEST_REASON_SHUTDOWN,
 | 
			
		||||
    RADIO_DATA_REQUEST_REASON_HANDOVER
 | 
			
		||||
} RADIO_DATA_REQUEST_REASON; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_DATA_REQUEST_REASON) == 4);
 | 
			
		||||
 | 
			
		||||
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; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_ACCESS_NETWORK) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_data_profile_type {
 | 
			
		||||
    RADIO_DATA_PROFILE_COMMON,
 | 
			
		||||
    RADIO_DATA_PROFILE_3GPP,
 | 
			
		||||
    RADIO_DATA_PROFILE_3GPP2
 | 
			
		||||
} RADIO_DATA_PROFILE_TYPE; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_DATA_PROFILE_TYPE) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_pdp_protocol_type {
 | 
			
		||||
    RADIO_PDP_PROTOCOL_UNKNOWN = -1,
 | 
			
		||||
    RADIO_PDP_PROTOCOL_IP,
 | 
			
		||||
    RADIO_PDP_PROTOCOL_IPV6,
 | 
			
		||||
    RADIO_PDP_PROTOCOL_IPV4V6,
 | 
			
		||||
    RADIO_PDP_PROTOCOL_PPP,
 | 
			
		||||
    RADIO_PDP_PROTOCOL_NON_IP,
 | 
			
		||||
    RADIO_PDP_PROTOCOL_UNSTRUCTURED
 | 
			
		||||
} RADIO_PDP_PROTOCOL_TYPE; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_PDP_PROTOCOL_TYPE) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_emergency_service_category {
 | 
			
		||||
    RADIO_EMERGENCY_SERVICE_UNSPECIFIED = 0,
 | 
			
		||||
    RADIO_EMERGENCY_SERVICE_POLICE = 1 << 0,
 | 
			
		||||
    RADIO_EMERGENCY_SERVICE_AMBULANCE = 1 << 1,
 | 
			
		||||
    RADIO_EMERGENCY_SERVICE_FIRE_BRIGADE = 1 << 2,
 | 
			
		||||
    RADIO_EMERGENCY_SERVICE_MARINE_GUARD = 1 << 3,
 | 
			
		||||
    RADIO_EMERGENCY_SERVICE_MOUNTAIN_RESCUE = 1 << 4,
 | 
			
		||||
    RADIO_EMERGENCY_SERVICE_MIEC = 1 << 5,
 | 
			
		||||
    RADIO_EMERGENCY_SERVICE_AIEC = 1 << 6
 | 
			
		||||
} RADIO_EMERGENCY_SERVICE_CATEGORY; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_EMERGENCY_SERVICE_CATEGORY) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_emergency_number_source {
 | 
			
		||||
    RADIO_EMERGENCY_NUMBER_NETWORK_SIGNALING = 1 << 0,
 | 
			
		||||
    RADIO_EMERGENCY_NUMBER_SIM = 1 << 1,
 | 
			
		||||
    RADIO_EMERGENCY_NUMBER_MODEM_CONFIG = 1 << 2,
 | 
			
		||||
    RADIO_EMERGENCY_NUMBER_DEFAULT = 1 << 3
 | 
			
		||||
} RADIO_EMERGENCY_NUMBER_SOURCE; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_EMERGENCY_NUMBER_SOURCE) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_cell_connection_status {
 | 
			
		||||
    RADIO_CELL_CONNECTION_NONE,
 | 
			
		||||
    RADIO_CELL_CONNECTION_PRIMARY_SERVING,
 | 
			
		||||
    RADIO_CELL_CONNECTION_SECONDARY_SERVING
 | 
			
		||||
} RADIO_CELL_CONNECTION_STATUS; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_CELL_CONNECTION_STATUS) == 4);
 | 
			
		||||
 | 
			
		||||
typedef enum radio_scan_status {
 | 
			
		||||
    RADIO_SCAN_PARTIAL = 1,
 | 
			
		||||
    RADIO_SCAN_COMPLETE = 2
 | 
			
		||||
} RADIO_SCAN_STATUS; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RADIO_SCAN_STATUS) == 4);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_response_info {
 | 
			
		||||
    RADIO_RESP_TYPE type RADIO_ALIGNED(4);
 | 
			
		||||
    guint32 serial RADIO_ALIGNED(4);
 | 
			
		||||
    guint32 error RADIO_ALIGNED(4);
 | 
			
		||||
} RadioResponseInfo;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioResponseInfo) == 12);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_card_status {
 | 
			
		||||
    RADIO_CARD_STATE cardState RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_PIN_STATE universalPinState RADIO_ALIGNED(4);
 | 
			
		||||
@@ -268,6 +408,14 @@ typedef struct radio_card_status {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCardStatus;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCardStatus) == 40);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_card_status_1_2 {
 | 
			
		||||
    RadioCardStatus base RADIO_ALIGNED(8);
 | 
			
		||||
    gint32 physicalSlotId RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlString atr RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString iccid RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCardStatus_1_2; /* Since 1.2.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCardStatus_1_2) == 80);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_app_status {
 | 
			
		||||
    RADIO_APP_TYPE appType RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_APP_STATE appState RADIO_ALIGNED(4);
 | 
			
		||||
@@ -304,6 +452,12 @@ typedef struct radio_call {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCall;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCall) == 88);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_call_1_2 {
 | 
			
		||||
    RadioCall base RADIO_ALIGNED(8);
 | 
			
		||||
    gint32 audioQuality RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCall_1_2; /* Since 1.2.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCall_1_2) == 96);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_dial {
 | 
			
		||||
    GBinderHidlString address RADIO_ALIGNED(8);
 | 
			
		||||
    gint32 clir RADIO_ALIGNED(4);
 | 
			
		||||
@@ -326,26 +480,47 @@ typedef struct radio_operator_info {
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioOperatorInfo) == 56);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_profile {
 | 
			
		||||
    gint32 profileId RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_DATA_PROFILE_ID profileId RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlString apn RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString protocol RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString roamingProtocol RADIO_ALIGNED(8);
 | 
			
		||||
    gint32 authType RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_APN_AUTH_TYPE authType RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlString user RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString password RADIO_ALIGNED(8);
 | 
			
		||||
    gint32 type RADIO_ALIGNED(4);
 | 
			
		||||
    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);
 | 
			
		||||
    gint32 supportedApnTypesBitmap RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 bearerBitmap RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_APN_TYPES supportedApnTypesBitmap RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_ACCESS_FAMILY bearerBitmap RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 mtu RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 mvnoType RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlString mvnoMatchData RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataProfile;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataProfile) == 152);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_profile_1_4 {
 | 
			
		||||
    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 mtu RADIO_ALIGNED(4);
 | 
			
		||||
    guint8 preferred RADIO_ALIGNED(1);
 | 
			
		||||
    guint8 persistent RADIO_ALIGNED(1);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataProfile_1_4; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataProfile_1_4) == 112);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_call {
 | 
			
		||||
    gint32 status RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 suggestedRetryTime RADIO_ALIGNED(4);
 | 
			
		||||
@@ -360,7 +535,21 @@ typedef struct radio_data_call {
 | 
			
		||||
    gint32 mtu RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataCall;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataCall) == 120);
 | 
			
		||||
#define DATA_CALL_VERSION (11)
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_call_1_4 {
 | 
			
		||||
    gint32 cause RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 suggestedRetryTime RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 cid RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 active RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_PDP_PROTOCOL_TYPE type RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlString ifname RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlVec addresses RADIO_ALIGNED(8); /* vec<GBinderHidlString> */
 | 
			
		||||
    GBinderHidlVec dnses RADIO_ALIGNED(8);     /* vec<GBinderHidlString> */
 | 
			
		||||
    GBinderHidlVec gateways RADIO_ALIGNED(8);  /* vec<GBinderHidlString> */
 | 
			
		||||
    GBinderHidlVec pcscf RADIO_ALIGNED(8);     /* vec<GBinderHidlString> */
 | 
			
		||||
    gint32 mtu RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataCall_1_4; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataCall_1_4) == 112);
 | 
			
		||||
 | 
			
		||||
#define DATA_CALL_VERSION (11)
 | 
			
		||||
 | 
			
		||||
@@ -414,6 +603,16 @@ typedef struct radio_call_forward_info {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCallForwardInfo;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCallForwardInfo) == 40);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_emergency_number {
 | 
			
		||||
    GBinderHidlString number RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString mcc RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString mnc RADIO_ALIGNED(8);
 | 
			
		||||
    RADIO_EMERGENCY_SERVICE_CATEGORY categories RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlVec urns RADIO_ALIGNED(8); /* vec<GBinderHidlString> */
 | 
			
		||||
    RADIO_EMERGENCY_NUMBER_SOURCE sources RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioEmergencyNumber; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioEmergencyNumber) == 80);
 | 
			
		||||
 | 
			
		||||
#define RADIO_CELL_INVALID_VALUE (INT_MAX)
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity {
 | 
			
		||||
@@ -426,19 +625,49 @@ typedef struct radio_cell_identity {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentity;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentity) == 88);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_1_2 {
 | 
			
		||||
    RADIO_CELL_INFO_TYPE cellInfoType RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlVec gsm RADIO_ALIGNED(8);   /* vec<RadioCellIdentityGsm_1_2> */
 | 
			
		||||
    GBinderHidlVec wcdma RADIO_ALIGNED(8); /* vec<RadioCellIdentityWcdma_1_2> */
 | 
			
		||||
    GBinderHidlVec cdma RADIO_ALIGNED(8);  /* vec<RadioCellIdentityCdma_1_2> */
 | 
			
		||||
    GBinderHidlVec lte RADIO_ALIGNED(8);   /* vec<RadioCellIdentityLte_1_2> */
 | 
			
		||||
    GBinderHidlVec tdscdma RADIO_ALIGNED(8);/*vec<RadioCellIdentityTdscdma_1_2>*/
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentity_1_2;  /* Since 1.2.4 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentity_1_2) == 88);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info {
 | 
			
		||||
    RADIO_CELL_INFO_TYPE cellInfoType RADIO_ALIGNED(4);
 | 
			
		||||
    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 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 wcdma RADIO_ALIGNED(8);   /* vec<RadioCellInfoWcdma> */
 | 
			
		||||
    GBinderHidlVec tdscdma RADIO_ALIGNED(8); /* vec<RadioCellInfoTdscdma> */
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfo;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfo) == 104);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_1_2 {
 | 
			
		||||
    RADIO_CELL_INFO_TYPE cellInfoType RADIO_ALIGNED(4);
 | 
			
		||||
    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> */
 | 
			
		||||
    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);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_operator_names {
 | 
			
		||||
    GBinderHidlString alphaLong RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString alphaShort RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityOperatorNames; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityOperatorNames) == 32);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_gsm {
 | 
			
		||||
    GBinderHidlString mcc RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString mnc RADIO_ALIGNED(8);
 | 
			
		||||
@@ -449,6 +678,12 @@ typedef struct radio_cell_identity_gsm {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityGsm;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityGsm) == 48);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_gsm_1_2 {
 | 
			
		||||
    RadioCellIdentityGsm base RADIO_ALIGNED(8);
 | 
			
		||||
    RadioCellIdentityOperatorNames operatorNames RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityGsm_1_2; /* Since 1.2.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityGsm_1_2) == 80);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_wcdma {
 | 
			
		||||
    GBinderHidlString mcc RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString mnc RADIO_ALIGNED(8);
 | 
			
		||||
@@ -459,6 +694,12 @@ typedef struct radio_cell_identity_wcdma {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityWcdma;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityWcdma) == 48);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_wcdma_1_2 {
 | 
			
		||||
    RadioCellIdentityWcdma base RADIO_ALIGNED(8);
 | 
			
		||||
    RadioCellIdentityOperatorNames operatorNames RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityWcdma_1_2; /* Since 1.2.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityWcdma_1_2) == 80);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_cdma {
 | 
			
		||||
    gint32 networkId RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 systemId RADIO_ALIGNED(4);
 | 
			
		||||
@@ -468,6 +709,12 @@ typedef struct radio_cell_identity_cdma {
 | 
			
		||||
} RADIO_ALIGNED(4) RadioCellIdentityCdma;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityCdma) == 20);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_cdma_1_2 {
 | 
			
		||||
    RadioCellIdentityCdma base RADIO_ALIGNED(4);
 | 
			
		||||
    RadioCellIdentityOperatorNames operatorNames RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioCellIdentityCdma_1_2; /* Since 1.2.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityCdma_1_2) == 56);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_lte {
 | 
			
		||||
    GBinderHidlString mcc RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString mnc RADIO_ALIGNED(8);
 | 
			
		||||
@@ -478,6 +725,13 @@ typedef struct radio_cell_identity_lte {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityLte;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityLte) == 48);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_lte_1_2 {
 | 
			
		||||
    RadioCellIdentityLte base RADIO_ALIGNED(8);
 | 
			
		||||
    RadioCellIdentityOperatorNames operatorNames RADIO_ALIGNED(8);
 | 
			
		||||
    gint32 bandwidth RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityLte_1_2; /* Since 1.2.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityLte_1_2) == 88);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_tdscdma {
 | 
			
		||||
    GBinderHidlString mcc RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString mnc RADIO_ALIGNED(8);
 | 
			
		||||
@@ -487,6 +741,24 @@ typedef struct radio_cell_identity_tdscdma {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityTdscdma;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityTdscdma) == 48);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_tdscdma_1_2 {
 | 
			
		||||
    RadioCellIdentityTdscdma base RADIO_ALIGNED(8);
 | 
			
		||||
    gint32 uarfcn RADIO_ALIGNED(8);
 | 
			
		||||
    RadioCellIdentityOperatorNames operatorNames RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityTdscdma_1_2; /* Since 1.2.3 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityTdscdma_1_2) == 88);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_identity_nr {
 | 
			
		||||
    GBinderHidlString mcc RADIO_ALIGNED(8);
 | 
			
		||||
    GBinderHidlString mnc RADIO_ALIGNED(8);
 | 
			
		||||
    guint64 nci RADIO_ALIGNED(8);
 | 
			
		||||
    guint32 pci RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 tac RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 nrarfcn RADIO_ALIGNED(4);
 | 
			
		||||
    RadioCellIdentityOperatorNames operatorNames RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellIdentityNr; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellIdentityNr) == 88);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_voice_reg_state_result {
 | 
			
		||||
    RADIO_REG_STATE regState RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_TECH rat RADIO_ALIGNED(4);
 | 
			
		||||
@@ -499,6 +771,18 @@ typedef struct radio_voice_reg_state_result {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioVoiceRegStateResult;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioVoiceRegStateResult) == 120);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_voice_reg_state_result_1_2 {
 | 
			
		||||
    RADIO_REG_STATE regState RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_TECH rat RADIO_ALIGNED(4);
 | 
			
		||||
    guint8 cssSupported RADIO_ALIGNED(1);
 | 
			
		||||
    gint32 roamingIndicator RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 systemIsInPrl RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 defaultRoamingIndicator RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 reasonForDenial RADIO_ALIGNED(4);
 | 
			
		||||
    RadioCellIdentity_1_2 cellIdentity RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioVoiceRegStateResult_1_2;  /* Since 1.2.4 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioVoiceRegStateResult_1_2) == 120);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_reg_state_result {
 | 
			
		||||
    RADIO_REG_STATE regState RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_TECH rat RADIO_ALIGNED(4);
 | 
			
		||||
@@ -508,6 +792,15 @@ typedef struct radio_data_reg_state_result {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataRegStateResult;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataRegStateResult) == 104);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_data_reg_state_result_1_2 {
 | 
			
		||||
    RADIO_REG_STATE regState RADIO_ALIGNED(4);
 | 
			
		||||
    RADIO_TECH rat RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 reasonDataDenied RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 maxDataCalls RADIO_ALIGNED(4);
 | 
			
		||||
    RadioCellIdentity_1_2 cellIdentity RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioDataRegStateResult_1_2;  /* Since 1.2.4 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioDataRegStateResult_1_2) == 104);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_signal_strength_gsm {
 | 
			
		||||
    guint32 signalStrength RADIO_ALIGNED(4);
 | 
			
		||||
    guint32 bitErrorRate RADIO_ALIGNED(4);
 | 
			
		||||
@@ -521,6 +814,13 @@ typedef struct radio_signal_strength_wcdma {
 | 
			
		||||
} RADIO_ALIGNED(4) RadioSignalStrengthWcdma;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioSignalStrengthWcdma) == 8);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_signal_strength_wcdma_1_2 {
 | 
			
		||||
    RadioSignalStrengthWcdma base RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 rscp RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 ecno RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioSignalStrengthWcdma_1_2; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioSignalStrengthWcdma_1_2) == 16);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_signal_strength_cdma {
 | 
			
		||||
    guint32 dbm RADIO_ALIGNED(4);
 | 
			
		||||
    guint32 ecio RADIO_ALIGNED(4);
 | 
			
		||||
@@ -549,6 +849,13 @@ typedef struct radio_signal_strength_tdscdma {
 | 
			
		||||
} RADIO_ALIGNED(4) RadioSignalStrengthTdScdma;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioSignalStrengthTdScdma) == 4);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_signal_strength_tdscdma_1_2 {
 | 
			
		||||
    guint32 signalStrength RADIO_ALIGNED(4);
 | 
			
		||||
    guint32 bitErrorRate RADIO_ALIGNED(4);
 | 
			
		||||
    guint32 rscp RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioSignalStrengthTdScdma_1_2; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioSignalStrengthTdScdma_1_2) == 12);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_signal_strength {
 | 
			
		||||
    RadioSignalStrengthGsm gw RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthCdma cdma RADIO_ALIGNED(4);
 | 
			
		||||
@@ -558,6 +865,37 @@ typedef struct radio_signal_strength {
 | 
			
		||||
} RADIO_ALIGNED(4) RadioSignalStrength;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioSignalStrength) == 60);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_signal_strength_1_2 {
 | 
			
		||||
    RadioSignalStrengthGsm gw RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthCdma cdma RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthEvdo evdo RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthLte lte RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthTdScdma tdScdma RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthWcdma_1_2 wcdma RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioSignalStrength_1_2; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioSignalStrength_1_2) == 76);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_signal_strength_nr {
 | 
			
		||||
    gint32 ssRsrp RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 ssRsrq RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 ssSinr RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 csiRsrp RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 csiRsrq RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 csiSinr RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioSignalStrengthNr; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioSignalStrengthNr) == 24);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_signal_strength_1_4 {
 | 
			
		||||
    RadioSignalStrengthGsm gsm RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthCdma cdma RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthEvdo evdo RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthLte lte RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthTdScdma_1_2 tdscdma RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthWcdma_1_2 wcdma RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthNr nr RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioSignalStrength_1_4; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioSignalStrength_1_4) == 108);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_gsm {
 | 
			
		||||
    RadioCellIdentityGsm cellIdentityGsm RADIO_ALIGNED(8);
 | 
			
		||||
    RadioSignalStrengthGsm signalStrengthGsm RADIO_ALIGNED(4);
 | 
			
		||||
@@ -589,6 +927,64 @@ typedef struct radio_cell_info_tdscdma {
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoTdscdma;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoTdscdma) == 56);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_gsm_1_2 {
 | 
			
		||||
    RadioCellIdentityGsm_1_2 cellIdentityGsm RADIO_ALIGNED(8);
 | 
			
		||||
    RadioSignalStrengthGsm signalStrengthGsm RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoGsm_1_2; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoGsm_1_2) == 96);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_wcdma_1_2 {
 | 
			
		||||
    RadioCellIdentityWcdma_1_2 cellIdentityWcdma RADIO_ALIGNED(8);
 | 
			
		||||
    RadioSignalStrengthWcdma_1_2 signalStrengthWcdma RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoWcdma_1_2; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoWcdma_1_2) == 96);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_cdma_1_2 {
 | 
			
		||||
    RadioCellIdentityCdma_1_2 cellIdentityCdma RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthCdma signalStrengthCdma RADIO_ALIGNED(4);
 | 
			
		||||
    RadioSignalStrengthEvdo signalStrengthEvdo RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioCellInfoCdma_1_2; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoCdma_1_2) == 80);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_lte_1_2 {
 | 
			
		||||
    RadioCellIdentityLte_1_2 cellIdentityLte RADIO_ALIGNED(8);
 | 
			
		||||
    RadioSignalStrengthLte signalStrengthLte RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoLte_1_2; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoLte_1_2) == 112);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_lte_1_4 {
 | 
			
		||||
    RadioCellInfoLte_1_2 base RADIO_ALIGNED(8);
 | 
			
		||||
    guint8 isEndcAvailable RADIO_ALIGNED(1);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoLte_1_4; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoLte_1_4) == 120);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_tdscdma_1_2 {
 | 
			
		||||
    RadioCellIdentityTdscdma_1_2 cellIdentityTdscdma RADIO_ALIGNED(8);
 | 
			
		||||
    RadioSignalStrengthTdScdma_1_2 signalStrengthTdscdma RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfoTdscdma_1_2; /* Since 1.2.0 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfoTdscdma_1_2) == 104);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_cell_info_nr {
 | 
			
		||||
    RadioSignalStrengthNr signalStrength RADIO_ALIGNED(4);
 | 
			
		||||
    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 cellInfoType RADIO_ALIGNED(1);
 | 
			
		||||
    guint8 registered RADIO_ALIGNED(1);
 | 
			
		||||
    RADIO_CELL_CONNECTION_STATUS connectionStatus RADIO_ALIGNED(4);
 | 
			
		||||
    union {
 | 
			
		||||
        RadioCellInfoGsm_1_2 gsm RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellInfoCdma_1_2 cdma RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellInfoWcdma_1_2 wcdma RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellInfoTdscdma_1_2 tdscdma RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellInfoLte_1_4 lte RADIO_ALIGNED(8);
 | 
			
		||||
        RadioCellInfoNr nr RADIO_ALIGNED(8);
 | 
			
		||||
    } info RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioCellInfo_1_4; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioCellInfo_1_4) == 128);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_gsm_broadcast_sms_config {
 | 
			
		||||
    gint32 fromServiceId RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 toServiceId RADIO_ALIGNED(4);
 | 
			
		||||
@@ -645,6 +1041,37 @@ typedef struct radio_activity_stats_info {
 | 
			
		||||
} RADIO_ALIGNED(4) RadioActivityStatsInfo;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioActivityStatsInfo) == 32);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_hardware_config {
 | 
			
		||||
    gint32 type RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlString uuid RADIO_ALIGNED(8);
 | 
			
		||||
    gint32 state RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlVec modem RADIO_ALIGNED(8); /* vec<RadioHardwareConfigModem> */
 | 
			
		||||
    GBinderHidlVec sim RADIO_ALIGNED(8);   /* vec<RadioHardwareConfigSim> */
 | 
			
		||||
} RADIO_ALIGNED(8) RadioHardwareConfig;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioHardwareConfig) == 64);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_hardware_config_modem {
 | 
			
		||||
    gint32 rilModel RADIO_ALIGNED(4);
 | 
			
		||||
    guint32 rat RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 maxVoice RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 maxData RADIO_ALIGNED(4);
 | 
			
		||||
    gint32 maxStandby RADIO_ALIGNED(4);
 | 
			
		||||
} RADIO_ALIGNED(4) RadioHardwareConfigModem;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioHardwareConfigModem) == 20);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_hardware_config_sim {
 | 
			
		||||
    GBinderHidlString modemUuid RADIO_ALIGNED(8);
 | 
			
		||||
} RADIO_ALIGNED(8) RadioHardwareConfigSim;
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioHardwareConfigSim) == 16);
 | 
			
		||||
 | 
			
		||||
typedef struct radio_network_scan_result {
 | 
			
		||||
    RADIO_SCAN_STATUS status RADIO_ALIGNED(4);
 | 
			
		||||
    guint32 error RADIO_ALIGNED(4);
 | 
			
		||||
    GBinderHidlVec networkInfos RADIO_ALIGNED(8); /* vec<RadioCellInfo> */
 | 
			
		||||
                                               /* or vec<RadioCellInfo_1_4> */
 | 
			
		||||
} RADIO_ALIGNED(8) RadioNetworkScanResult; /* Since 1.2.5 */
 | 
			
		||||
G_STATIC_ASSERT(sizeof(RadioNetworkScanResult) == 24);
 | 
			
		||||
 | 
			
		||||
/* c(req,resp,callName,CALL_NAME) */
 | 
			
		||||
#define RADIO_CALL_1_0(c) \
 | 
			
		||||
    c(2,1,getIccCardStatus,GET_ICC_CARD_STATUS) \
 | 
			
		||||
@@ -776,6 +1203,32 @@ G_STATIC_ASSERT(sizeof(RadioActivityStatsInfo) == 32);
 | 
			
		||||
    c(128,127,setIndicationFilter,SET_INDICATION_FILTER) \
 | 
			
		||||
    c(129,128,setSimCardPower,SET_SIM_CARD_POWER)
 | 
			
		||||
 | 
			
		||||
#define RADIO_CALL_1_1(c) \
 | 
			
		||||
    c(131,130,setCarrierInfoForImsiEncryption,SET_CARRIER_INFO_FOR_IMSI_ENCRYPTION) \
 | 
			
		||||
    c(132,131,setSimCardPower_1_1,SET_SIM_CARD_POWER_1_1) \
 | 
			
		||||
    c(133,132,startNetworkScan,START_NETWORK_SCAN) \
 | 
			
		||||
    c(134,133,stopNetworkScan,STOP_NETWORK_SCAN) \
 | 
			
		||||
    c(135,134,startKeepalive,START_KEEPALIVE) \
 | 
			
		||||
    c(136,135,stopKeepalive,STOP_KEEPALIVE)
 | 
			
		||||
 | 
			
		||||
#define RADIO_CALL_1_2(c) /* Since 1.2.0 */ \
 | 
			
		||||
    c(139,138,setSignalStrengthReportingCriteria,SET_SIGNAL_STRENGTH_REPORTING_CRITERIA) \
 | 
			
		||||
    c(140,139,setLinkCapacityReportingCriteria,SET_LINK_CAPACITY_REPORTING_CRITERIA)
 | 
			
		||||
 | 
			
		||||
#define RADIO_CALL_1_3(c) /* Since 1.2.5 */ \
 | 
			
		||||
    c(143,144,setSystemSelectionChannels,SET_SYSTEM_SELECTION_CHANNELS) \
 | 
			
		||||
    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(149,147,emergencyDial,EMERGENCY_DIAL) \
 | 
			
		||||
    c(150,148,startNetworkScan_1_4,START_NETWORKSCAN_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)
 | 
			
		||||
 | 
			
		||||
/* e(code,eventName,EVENT_NAME) */
 | 
			
		||||
#define RADIO_EVENT_1_0(e) \
 | 
			
		||||
    e(1,radioStateChanged,RADIO_STATE_CHANGED) \
 | 
			
		||||
@@ -824,30 +1277,124 @@ G_STATIC_ASSERT(sizeof(RadioActivityStatsInfo) == 32);
 | 
			
		||||
    e(44,pcoData,PCO_DATA) \
 | 
			
		||||
    e(45,modemReset,MODEM_RESET)
 | 
			
		||||
 | 
			
		||||
#define RADIO_EVENT_1_1(e) \
 | 
			
		||||
    e(46,carrierInfoForImsiEncryption,CARRIER_INFO_FOR_IMSI_ENCRYPTION) \
 | 
			
		||||
    e(47,networkScanResult,NETWORK_SCAN_RESULT) \
 | 
			
		||||
    e(48,keepaliveStatus,KEEPALIVE_STATUS)
 | 
			
		||||
 | 
			
		||||
#define RADIO_EVENT_1_2(e)  /* Since 1.2.0 */ \
 | 
			
		||||
    e(49,networkScanResult_1_2,NETWORK_SCAN_RESULT_1_2) \
 | 
			
		||||
    e(50,cellInfoList_1_2,CELL_INFO_LIST_1_2) \
 | 
			
		||||
    e(51,currentLinkCapacityEstimate,CURRENT_LINK_CAPACITY_ESTIMATE) \
 | 
			
		||||
    e(52,currentPhysicalChannelConfigs,CURRENT_PHYSICAL_CHANNEL_CONFIGS) \
 | 
			
		||||
    e(53,currentSignalStrength_1_2,CURRENT_SIGNAL_STRENGTH_1_2)
 | 
			
		||||
 | 
			
		||||
#define RADIO_EVENT_1_4(e)  /* Since 1.2.5 */ \
 | 
			
		||||
    e(54,currentEmergencyNumberList,CURRENT_EMERGENCY_NUMBER_LIST) \
 | 
			
		||||
    e(55,cellInfoList_1_4,CELL_INFO_LIST_1_4) \
 | 
			
		||||
    e(56,networkScanResult_1_4,NETWORK_SCAN_RESULT_1_4) \
 | 
			
		||||
    e(57,currentPhysicalChannelConfigs_1_4,CURRENT_PHYSICAL_CHANNEL_CONFIGS_1_4) \
 | 
			
		||||
    e(58,dataCallListChanged_1_4,DATA_CALL_LIST_CHANGED_1_4) \
 | 
			
		||||
    e(59,currentSignalStrength_1_4,CURRENT_SIGNAL_STRENGTH_1_4)
 | 
			
		||||
 | 
			
		||||
typedef enum radio_req {
 | 
			
		||||
    RADIO_REQ_ANY = 0,
 | 
			
		||||
    RADIO_REQ_NONE = 0,
 | 
			
		||||
    RADIO_REQ_SET_RESPONSE_FUNCTIONS = 1, /* setResponseFunctions */
 | 
			
		||||
#define RADIO_REQ_(req,resp,Name,NAME) RADIO_REQ_##NAME = req,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.0::IRadio */
 | 
			
		||||
    RADIO_REQ_SET_RESPONSE_FUNCTIONS = 1, /* setResponseFunctions */
 | 
			
		||||
    RADIO_CALL_1_0(RADIO_REQ_)
 | 
			
		||||
    RADIO_REQ_RESPONSE_ACKNOWLEDGEMENT = 130,  /* responseAcknowledgement */
 | 
			
		||||
    RADIO_1_0_REQ_LAST = RADIO_REQ_RESPONSE_ACKNOWLEDGEMENT,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.1::IRadio */
 | 
			
		||||
    RADIO_CALL_1_1(RADIO_REQ_)
 | 
			
		||||
    RADIO_1_1_REQ_LAST = RADIO_REQ_STOP_KEEPALIVE,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.2::IRadio */
 | 
			
		||||
    RADIO_CALL_1_2(RADIO_REQ_)
 | 
			
		||||
    RADIO_REQ_START_NETWORK_SCAN_1_2 = 137,
 | 
			
		||||
    RADIO_REQ_SET_INDICATION_FILTER_1_2 = 138,
 | 
			
		||||
    RADIO_REQ_SETUP_DATA_CALL_1_2 = 141,
 | 
			
		||||
    RADIO_REQ_DEACTIVATE_DATA_CALL_1_2 = 142,
 | 
			
		||||
    RADIO_1_2_REQ_LAST = RADIO_REQ_DEACTIVATE_DATA_CALL_1_2,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.3::IRadio */
 | 
			
		||||
    RADIO_CALL_1_3(RADIO_REQ_) /* Since 1.2.5 */
 | 
			
		||||
    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_REQ_SETUP_DATA_CALL_1_4 = 146,
 | 
			
		||||
    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
 | 
			
		||||
#undef RADIO_REQ_
 | 
			
		||||
    RADIO_REQ_RESPONSE_ACKNOWLEDGEMENT = 130   /* responseAcknowledgement */
 | 
			
		||||
} RADIO_REQ;
 | 
			
		||||
 | 
			
		||||
typedef enum radio_resp {
 | 
			
		||||
    RADIO_RESP_ANY = 0,
 | 
			
		||||
    RADIO_RESP_NONE = 0,
 | 
			
		||||
#define RADIO_RESP_(req,resp,Name,NAME) RADIO_RESP_##NAME = resp,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.0::IRadioResponse */
 | 
			
		||||
    RADIO_CALL_1_0(RADIO_RESP_)
 | 
			
		||||
    RADIO_RESP_ACKNOWLEDGE_REQUEST = 129, /* acknowledgeRequest */
 | 
			
		||||
    RADIO_1_0_RESP_LAST = RADIO_RESP_ACKNOWLEDGE_REQUEST, /* Since 1.2.4 */
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.1::IRadioResponse */
 | 
			
		||||
    RADIO_CALL_1_1(RADIO_RESP_)
 | 
			
		||||
    RADIO_1_1_RESP_LAST = RADIO_RESP_STOP_KEEPALIVE,      /* Since 1.2.4 */
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.2::IRadioResponse */
 | 
			
		||||
    RADIO_CALL_1_2(RADIO_RESP_)
 | 
			
		||||
    RADIO_RESP_GET_CELL_INFO_LIST_1_2 = 136,
 | 
			
		||||
    RADIO_RESP_GET_ICC_CARD_STATUS_1_2 = 137,
 | 
			
		||||
    RADIO_RESP_GET_CURRENT_CALLS_1_2 = 140,
 | 
			
		||||
    RADIO_RESP_GET_SIGNAL_STRENGTH_1_2 = 141,
 | 
			
		||||
    RADIO_RESP_GET_VOICE_REGISTRATION_STATE_1_2 = 142,
 | 
			
		||||
    RADIO_RESP_GET_DATA_REGISTRATION_STATE_1_2 = 143,
 | 
			
		||||
    RADIO_1_2_RESP_LAST = RADIO_RESP_GET_DATA_REGISTRATION_STATE_1_2, /* Since 1.2.4 */
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.3::IRadioResponse */
 | 
			
		||||
    RADIO_CALL_1_3(RADIO_RESP_) /* Since 1.2.5 */
 | 
			
		||||
    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_RESP_GET_CELL_INFO_LIST_RESPONSE_1_4 = 149,
 | 
			
		||||
    RADIO_RESP_GET_DATA_REGISTRATION_STATE_RESPONSE_1_4 = 150,
 | 
			
		||||
    RADIO_RESP_GET_ICC_CARD_STATUS_RESPONSE_1_4 = 151,
 | 
			
		||||
    RADIO_RESP_GET_DATA_CALL_LIST_RESPONSE_1_4 = 154,
 | 
			
		||||
    RADIO_RESP_SETUP_DATA_CALL_RESPONSE_1_4 = 155,
 | 
			
		||||
    RADIO_1_4_RESP_LAST = RADIO_RESP_GET_SIGNAL_STRENGTH_1_4
 | 
			
		||||
#undef RADIO_RESP_
 | 
			
		||||
    RADIO_RESP_ACKNOWLEDGE_REQUEST = 129
 | 
			
		||||
} RADIO_RESP;
 | 
			
		||||
 | 
			
		||||
typedef enum radio_ind {
 | 
			
		||||
    RADIO_IND_ANY = 0,
 | 
			
		||||
    RADIO_IND_NONE = 0,
 | 
			
		||||
#define RADIO_IND_(code,Name,NAME) RADIO_IND_##NAME = code,
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.0::IRadioIndication */
 | 
			
		||||
    RADIO_EVENT_1_0(RADIO_IND_)
 | 
			
		||||
    RADIO_1_0_IND_LAST = RADIO_IND_MODEM_RESET,  /* Since 1.2.4 */
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.1::IRadioIndication */
 | 
			
		||||
    RADIO_EVENT_1_1(RADIO_IND_)
 | 
			
		||||
    RADIO_1_1_IND_LAST = RADIO_IND_KEEPALIVE_STATUS,  /* Since 1.2.4 */
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.2::IRadioIndication */
 | 
			
		||||
    RADIO_EVENT_1_2(RADIO_IND_)
 | 
			
		||||
    RADIO_1_2_IND_LAST = RADIO_IND_CURRENT_SIGNAL_STRENGTH_1_2, /* Since 1.2.4 */
 | 
			
		||||
 | 
			
		||||
    /* android.hardware.radio@1.3::IRadioIndication */
 | 
			
		||||
    RADIO_1_3_IND_LAST = RADIO_1_2_IND_LAST, /* Since 1.2.5 */
 | 
			
		||||
 | 
			
		||||
    /* 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 */
 | 
			
		||||
#undef RADIO_IND_
 | 
			
		||||
} RADIO_IND;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
name=gbinder-radio
 | 
			
		||||
libdir=/usr/lib
 | 
			
		||||
libdir=@libdir@
 | 
			
		||||
includedir=/usr/include
 | 
			
		||||
 | 
			
		||||
Name: libgbinder-radio
 | 
			
		||||
Description: Binder client library for Android radio interfaces
 | 
			
		||||
Version: [version]
 | 
			
		||||
Requires: glib-2.0 libglibutil libgbinder
 | 
			
		||||
Version: @version@
 | 
			
		||||
Requires.private: glib-2.0 libglibutil libgbinder
 | 
			
		||||
Libs: -L${libdir} -l${name}
 | 
			
		||||
Cflags: -I${includedir} -I${includedir}/${name}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,18 @@
 | 
			
		||||
Name: libgbinder-radio
 | 
			
		||||
Version: 1.0.1
 | 
			
		||||
Version: 1.2.5
 | 
			
		||||
Release: 0
 | 
			
		||||
Summary: Binder client library for Android radio interfaces
 | 
			
		||||
Group: Development/Libraries
 | 
			
		||||
License: BSD
 | 
			
		||||
URL: https://github.com/mer-hybris/libgbinder-radio
 | 
			
		||||
Source: %{name}-%{version}.tar.bz2
 | 
			
		||||
 | 
			
		||||
%define libgbinder_version 1.0.9
 | 
			
		||||
 | 
			
		||||
BuildRequires: pkgconfig(glib-2.0)
 | 
			
		||||
BuildRequires: pkgconfig(libglibutil)
 | 
			
		||||
BuildRequires: pkgconfig(libgbinder)
 | 
			
		||||
BuildRequires: pkgconfig(libgbinder) >= %{libgbinder_version}
 | 
			
		||||
Requires: libgbinder >= %{libgbinder_version}
 | 
			
		||||
Requires(post): /sbin/ldconfig
 | 
			
		||||
Requires(postun): /sbin/ldconfig
 | 
			
		||||
 | 
			
		||||
@@ -27,11 +31,11 @@ This package contains the development library for %{name}.
 | 
			
		||||
%setup -q
 | 
			
		||||
 | 
			
		||||
%build
 | 
			
		||||
make KEEP_SYMBOLS=1 release pkgconfig
 | 
			
		||||
make LIBDIR=%{_libdir} KEEP_SYMBOLS=1 release pkgconfig
 | 
			
		||||
 | 
			
		||||
%install
 | 
			
		||||
rm -rf %{buildroot}
 | 
			
		||||
make install-dev DESTDIR=%{buildroot}
 | 
			
		||||
make LIBDIR=%{_libdir} DESTDIR=%{buildroot} install-dev
 | 
			
		||||
 | 
			
		||||
%post -p /sbin/ldconfig
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2018-2019 Jolla Ltd.
 | 
			
		||||
 * Copyright (C) 2018-2019 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:
 | 
			
		||||
 *
 | 
			
		||||
@@ -34,6 +34,8 @@
 | 
			
		||||
 * any official policies, either expressed or implied.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define GLIB_DISABLE_DEPRECATION_WARNINGS
 | 
			
		||||
 | 
			
		||||
#include "radio_instance.h"
 | 
			
		||||
#include "radio_registry_p.h"
 | 
			
		||||
#include "radio_util.h"
 | 
			
		||||
@@ -43,6 +45,7 @@
 | 
			
		||||
 | 
			
		||||
#include <gutil_idlepool.h>
 | 
			
		||||
#include <gutil_misc.h>
 | 
			
		||||
#include <gutil_strv.h>
 | 
			
		||||
 | 
			
		||||
#include <glib-object.h>
 | 
			
		||||
 | 
			
		||||
@@ -59,6 +62,7 @@ struct radio_instance_priv {
 | 
			
		||||
    char* dev;
 | 
			
		||||
    char* slot;
 | 
			
		||||
    char* key;
 | 
			
		||||
    char* modem;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE(RadioInstance, radio_instance, G_TYPE_OBJECT)
 | 
			
		||||
@@ -70,6 +74,7 @@ enum radio_instance_signal {
 | 
			
		||||
    SIGNAL_OBSERVE_RESPONSE,
 | 
			
		||||
    SIGNAL_ACK,
 | 
			
		||||
    SIGNAL_DEATH,
 | 
			
		||||
    SIGNAL_ENABLED,
 | 
			
		||||
    SIGNAL_COUNT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -79,11 +84,60 @@ enum radio_instance_signal {
 | 
			
		||||
#define SIGNAL_OBSERVE_RESPONSE_NAME   "radio-instance-observe-response"
 | 
			
		||||
#define SIGNAL_ACK_NAME                "radio-instance-ack"
 | 
			
		||||
#define SIGNAL_DEATH_NAME              "radio-instance-death"
 | 
			
		||||
#define SIGNAL_ENABLED_NAME            "radio-instance-enabled"
 | 
			
		||||
 | 
			
		||||
static guint radio_instance_signals[SIGNAL_COUNT] = { 0 };
 | 
			
		||||
 | 
			
		||||
static GHashTable* radio_instance_table = NULL;
 | 
			
		||||
 | 
			
		||||
#define DEFAULT_INTERFACE RADIO_INTERFACE_1_0
 | 
			
		||||
 | 
			
		||||
static const GBinderClientIfaceInfo radio_iface_info[] = {
 | 
			
		||||
    {RADIO_1_2, RADIO_1_2_REQ_LAST },
 | 
			
		||||
    {RADIO_1_1, RADIO_1_1_REQ_LAST },
 | 
			
		||||
    {RADIO_1_0, RADIO_1_0_REQ_LAST }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_indication_ifaces[] = {
 | 
			
		||||
    RADIO_INDICATION_1_2,
 | 
			
		||||
    RADIO_INDICATION_1_1,
 | 
			
		||||
    RADIO_INDICATION_1_0,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* const radio_response_ifaces[] = {
 | 
			
		||||
    RADIO_RESPONSE_1_2,
 | 
			
		||||
    RADIO_RESPONSE_1_1,
 | 
			
		||||
    RADIO_RESPONSE_1_0,
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct radio_interface_desc {
 | 
			
		||||
    RADIO_INTERFACE version;
 | 
			
		||||
    const char* radio_iface;
 | 
			
		||||
    const char* const* ind_ifaces;
 | 
			
		||||
    const char* const* resp_ifaces;
 | 
			
		||||
} RadioInterfaceDesc;
 | 
			
		||||
 | 
			
		||||
static const RadioInterfaceDesc radio_interfaces[] = {
 | 
			
		||||
    {
 | 
			
		||||
        RADIO_INTERFACE_1_2,
 | 
			
		||||
        RADIO_1_2,
 | 
			
		||||
        radio_indication_ifaces + 0,
 | 
			
		||||
        radio_response_ifaces + 0,
 | 
			
		||||
    },{
 | 
			
		||||
        RADIO_INTERFACE_1_1,
 | 
			
		||||
        RADIO_1_1,
 | 
			
		||||
        radio_indication_ifaces + 1,
 | 
			
		||||
        radio_response_ifaces + 1
 | 
			
		||||
    },{
 | 
			
		||||
        RADIO_INTERFACE_1_0,
 | 
			
		||||
        RADIO_1_0,
 | 
			
		||||
        radio_indication_ifaces + 2,
 | 
			
		||||
        radio_response_ifaces + 2
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*
 | 
			
		||||
 * Implementation
 | 
			
		||||
 *==========================================================================*/
 | 
			
		||||
@@ -155,7 +209,9 @@ radio_instance_indication(
 | 
			
		||||
    RadioInstance* self = RADIO_INSTANCE(user_data);
 | 
			
		||||
    const char* iface = gbinder_remote_request_interface(req);
 | 
			
		||||
 | 
			
		||||
    if (!g_strcmp0(iface, RADIO_INDICATION_1_0)) {
 | 
			
		||||
    if (!g_strcmp0(iface, RADIO_INDICATION_1_0) ||
 | 
			
		||||
        !g_strcmp0(iface, RADIO_INDICATION_1_1) ||
 | 
			
		||||
        !g_strcmp0(iface, RADIO_INDICATION_1_2)) {
 | 
			
		||||
        GBinderReader reader;
 | 
			
		||||
        guint type;
 | 
			
		||||
 | 
			
		||||
@@ -202,14 +258,14 @@ radio_instance_response(
 | 
			
		||||
    RadioInstance* self = RADIO_INSTANCE(user_data);
 | 
			
		||||
    const char* iface = gbinder_remote_request_interface(req);
 | 
			
		||||
 | 
			
		||||
    if (!g_strcmp0(iface, RADIO_RESPONSE_1_0)) {
 | 
			
		||||
    if (gutil_strv_contains((const GStrV*)radio_response_ifaces, iface)) {
 | 
			
		||||
        /* All these should be one-way transactions */
 | 
			
		||||
        GASSERT(flags & GBINDER_TX_FLAG_ONEWAY);
 | 
			
		||||
        if (code == RADIO_RESP_ACKNOWLEDGE_REQUEST) {
 | 
			
		||||
            /* oneway acknowledgeRequest(int32_t serial) */
 | 
			
		||||
            gint32 serial;
 | 
			
		||||
 | 
			
		||||
            GDEBUG(RADIO_RESPONSE_1_0 " %u acknowledgeRequest", code);
 | 
			
		||||
            GDEBUG("%s %u acknowledgeRequest", iface, code);
 | 
			
		||||
            if (gbinder_remote_request_read_int32(req, &serial)) {
 | 
			
		||||
                g_signal_emit(self, radio_instance_signals[SIGNAL_ACK], 0,
 | 
			
		||||
                    serial);
 | 
			
		||||
@@ -217,14 +273,12 @@ radio_instance_response(
 | 
			
		||||
        } else {
 | 
			
		||||
            /* All other responses have RadioResponseInfo */
 | 
			
		||||
            GBinderReader reader;
 | 
			
		||||
            GBinderBuffer* buf;
 | 
			
		||||
            const RadioResponseInfo* info;
 | 
			
		||||
 | 
			
		||||
            gbinder_remote_request_init_reader(req, &reader);
 | 
			
		||||
            buf = gbinder_reader_read_buffer(&reader);
 | 
			
		||||
            GASSERT(buf && buf->size == sizeof(RadioResponseInfo));
 | 
			
		||||
            if (buf && buf->size == sizeof(RadioResponseInfo)) {
 | 
			
		||||
            info = gbinder_reader_read_hidl_struct(&reader, RadioResponseInfo);
 | 
			
		||||
            if (info) {
 | 
			
		||||
                GQuark quark = radio_instance_resp_quark(self, code);
 | 
			
		||||
                const RadioResponseInfo* info = buf->data;
 | 
			
		||||
                gboolean handled = FALSE;
 | 
			
		||||
 | 
			
		||||
                g_signal_emit(self,
 | 
			
		||||
@@ -238,7 +292,6 @@ radio_instance_response(
 | 
			
		||||
                    radio_instance_ack(self);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            gbinder_buffer_free(buf);
 | 
			
		||||
        }
 | 
			
		||||
        *status = GBINDER_STATUS_OK;
 | 
			
		||||
    } else {
 | 
			
		||||
@@ -318,70 +371,95 @@ radio_instance_gone(
 | 
			
		||||
    g_free(key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_create_version(
 | 
			
		||||
    GBinderServiceManager* sm,
 | 
			
		||||
    GBinderRemoteObject* remote,
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* slot,
 | 
			
		||||
    const char* key,
 | 
			
		||||
    const char* modem,
 | 
			
		||||
    int slot_index,
 | 
			
		||||
    const RadioInterfaceDesc* desc)
 | 
			
		||||
{
 | 
			
		||||
    RadioInstance* self = g_object_new(RADIO_TYPE_INSTANCE, NULL);
 | 
			
		||||
    RadioInstancePriv* priv = self->priv;
 | 
			
		||||
    GBinderLocalRequest* req;
 | 
			
		||||
    GBinderWriter writer;
 | 
			
		||||
    int status;
 | 
			
		||||
 | 
			
		||||
    self->slot = priv->slot = g_strdup(slot);
 | 
			
		||||
    self->dev = priv->dev = g_strdup(dev);
 | 
			
		||||
    self->key = priv->key = g_strdup(key);
 | 
			
		||||
    self->modem = priv->modem = g_strdup(modem);
 | 
			
		||||
    self->slot_index = slot_index;
 | 
			
		||||
    self->version = desc->version;
 | 
			
		||||
 | 
			
		||||
    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,
 | 
			
		||||
        desc->resp_ifaces, radio_instance_response, self);
 | 
			
		||||
    priv->death_id = gbinder_remote_object_add_death_handler(remote,
 | 
			
		||||
        radio_instance_died, self);
 | 
			
		||||
 | 
			
		||||
    /* IRadio::setResponseFunctions */
 | 
			
		||||
    req = gbinder_client_new_request2(priv->client,
 | 
			
		||||
        RADIO_REQ_SET_RESPONSE_FUNCTIONS);
 | 
			
		||||
    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));
 | 
			
		||||
    GVERBOSE_("setResponseFunctions %s status %d", slot, status);
 | 
			
		||||
    gbinder_local_request_unref(req);
 | 
			
		||||
 | 
			
		||||
    GDEBUG("Instance '%s'", slot);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Don't destroy GBinderServiceManager right away in case if we
 | 
			
		||||
     * have another slot to initialize.
 | 
			
		||||
     */
 | 
			
		||||
    gutil_idle_pool_add_object(priv->idle, g_object_ref(sm));
 | 
			
		||||
    return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_create(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* slot,
 | 
			
		||||
    const char* key)
 | 
			
		||||
    const char* key,
 | 
			
		||||
    const char* modem,
 | 
			
		||||
    int slot_index,
 | 
			
		||||
    RADIO_INTERFACE max_version)
 | 
			
		||||
{
 | 
			
		||||
    RadioInstance* self = NULL;
 | 
			
		||||
    GBinderServiceManager* sm = gbinder_servicemanager_new(dev);
 | 
			
		||||
 | 
			
		||||
    if (sm) {
 | 
			
		||||
        int status = 0;
 | 
			
		||||
        const char* iface = RADIO_1_0;
 | 
			
		||||
        char* fqname = g_strconcat(iface, "/", slot, NULL);
 | 
			
		||||
        GBinderRemoteObject* remote = gbinder_servicemanager_get_service_sync
 | 
			
		||||
            (sm, fqname, &status);
 | 
			
		||||
        guint i;
 | 
			
		||||
 | 
			
		||||
        if (remote) {
 | 
			
		||||
            RadioInstancePriv* priv;
 | 
			
		||||
            GBinderLocalRequest* req;
 | 
			
		||||
            GBinderRemoteReply* reply;
 | 
			
		||||
            GBinderWriter writer;
 | 
			
		||||
        for (i = 0; i < G_N_ELEMENTS(radio_interfaces) && !self; i++) {
 | 
			
		||||
            const RadioInterfaceDesc* desc = radio_interfaces + i;
 | 
			
		||||
 | 
			
		||||
            GINFO("Connected to %s", fqname);
 | 
			
		||||
            /* get_service returns auto-released reference,
 | 
			
		||||
             * we need to add a reference of our own */
 | 
			
		||||
            gbinder_remote_object_ref(remote);
 | 
			
		||||
            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);
 | 
			
		||||
 | 
			
		||||
            self = g_object_new(RADIO_TYPE_INSTANCE, NULL);
 | 
			
		||||
            priv = self->priv;
 | 
			
		||||
            self->slot = priv->slot = g_strdup(slot);
 | 
			
		||||
            self->dev = priv->dev = g_strdup(dev);
 | 
			
		||||
            self->key = priv->key = g_strdup(key);
 | 
			
		||||
 | 
			
		||||
            priv->remote = remote;
 | 
			
		||||
            priv->client = gbinder_client_new(remote, iface);
 | 
			
		||||
            priv->indication = gbinder_servicemanager_new_local_object
 | 
			
		||||
                (sm, RADIO_INDICATION_1_0, radio_instance_indication, self);
 | 
			
		||||
            priv->response = gbinder_servicemanager_new_local_object
 | 
			
		||||
                (sm, RADIO_RESPONSE_1_0, radio_instance_response, self);
 | 
			
		||||
            priv->death_id = gbinder_remote_object_add_death_handler
 | 
			
		||||
                (remote, radio_instance_died, self);
 | 
			
		||||
 | 
			
		||||
            /* IRadio::setResponseFunctions */
 | 
			
		||||
            req = gbinder_client_new_request(priv->client);
 | 
			
		||||
            gbinder_local_request_init_writer(req, &writer);
 | 
			
		||||
            gbinder_writer_append_local_object(&writer, priv->response);
 | 
			
		||||
            gbinder_writer_append_local_object(&writer, priv->indication);
 | 
			
		||||
            reply = gbinder_client_transact_sync_reply(priv->client,
 | 
			
		||||
                RADIO_REQ_SET_RESPONSE_FUNCTIONS, req, &status);
 | 
			
		||||
            GVERBOSE_("setResponseFunctions %s status %d", slot, status);
 | 
			
		||||
            gbinder_local_request_unref(req);
 | 
			
		||||
            gbinder_remote_reply_unref(reply);
 | 
			
		||||
 | 
			
		||||
            GDEBUG("Instance '%s'", slot);
 | 
			
		||||
 | 
			
		||||
            /*
 | 
			
		||||
             * Don't destroy GBinderServiceManager right away in case if we
 | 
			
		||||
             * have another slot to initialize.
 | 
			
		||||
             */
 | 
			
		||||
            gutil_idle_pool_add_object(priv->idle, g_object_ref(sm));
 | 
			
		||||
                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);
 | 
			
		||||
        g_free(fqname);
 | 
			
		||||
    }
 | 
			
		||||
    return self;
 | 
			
		||||
}
 | 
			
		||||
@@ -390,9 +468,10 @@ static
 | 
			
		||||
char*
 | 
			
		||||
radio_instance_make_key(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name)
 | 
			
		||||
    const char* name,
 | 
			
		||||
    RADIO_INTERFACE version)
 | 
			
		||||
{
 | 
			
		||||
    return g_strconcat(dev, ":", name, NULL);
 | 
			
		||||
    return g_strdup_printf("%s:%s:%d", dev, name, version);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*
 | 
			
		||||
@@ -403,9 +482,58 @@ RadioInstance*
 | 
			
		||||
radio_instance_new(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name)
 | 
			
		||||
{
 | 
			
		||||
    return radio_instance_new_with_version(dev, name, DEFAULT_INTERFACE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_new_with_modem_and_slot(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    const char* modem,
 | 
			
		||||
    int slot) /* Since 1.0.7 */
 | 
			
		||||
{
 | 
			
		||||
    return radio_instance_new_with_modem_slot_and_version(dev, name, modem,
 | 
			
		||||
        slot, DEFAULT_INTERFACE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_new_with_version(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    RADIO_INTERFACE version) /* Since 1.2.1 */
 | 
			
		||||
{
 | 
			
		||||
    if (name && name[0]) {
 | 
			
		||||
        const char* modem;
 | 
			
		||||
        int slot;
 | 
			
		||||
 | 
			
		||||
        if (!g_strcmp0(name, "slot1")) {
 | 
			
		||||
            modem = "/ril_0";
 | 
			
		||||
            slot = 0;
 | 
			
		||||
        } else if (!g_strcmp0(name, "slot2")) {
 | 
			
		||||
            modem = "/ril_1";
 | 
			
		||||
            slot = 1;
 | 
			
		||||
        } else {
 | 
			
		||||
            GWARN("Unexpected slot '%s'", name);
 | 
			
		||||
            modem = NULL;
 | 
			
		||||
            slot = 0;
 | 
			
		||||
        }
 | 
			
		||||
        return radio_instance_new_with_modem_slot_and_version(dev, name, modem,
 | 
			
		||||
            slot, version);
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_new_with_modem_slot_and_version(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    const char* modem,
 | 
			
		||||
    int slot,
 | 
			
		||||
    RADIO_INTERFACE version) /* Since 1.2.1 */
 | 
			
		||||
{
 | 
			
		||||
    if (dev && dev[0] && name && name[0]) {
 | 
			
		||||
        char* key = radio_instance_make_key(dev, name);
 | 
			
		||||
        char* key = radio_instance_make_key(dev, name, version);
 | 
			
		||||
        RadioInstance* self = NULL;
 | 
			
		||||
 | 
			
		||||
        if (radio_instance_table) {
 | 
			
		||||
@@ -415,7 +543,7 @@ radio_instance_new(
 | 
			
		||||
            g_free(key);
 | 
			
		||||
            return radio_instance_ref(self);
 | 
			
		||||
        } else {
 | 
			
		||||
            self = radio_instance_create(dev, name, key);
 | 
			
		||||
            self = radio_instance_create(dev, name, key, modem, slot, version);
 | 
			
		||||
            if (self) {
 | 
			
		||||
                if (!radio_instance_table) {
 | 
			
		||||
                    radio_instance_table = g_hash_table_new_full
 | 
			
		||||
@@ -436,11 +564,29 @@ RadioInstance*
 | 
			
		||||
radio_instance_get(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name)
 | 
			
		||||
{
 | 
			
		||||
    return radio_instance_get_with_version(dev, name, DEFAULT_INTERFACE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_get_with_interface(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    RADIO_INTERFACE version) /* 1.2.1, deprecated */
 | 
			
		||||
{
 | 
			
		||||
    return radio_instance_get_with_version(dev, name, version);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RadioInstance*
 | 
			
		||||
radio_instance_get_with_version(
 | 
			
		||||
    const char* dev,
 | 
			
		||||
    const char* name,
 | 
			
		||||
    RADIO_INTERFACE version) /* Since 1.2.2 */
 | 
			
		||||
{
 | 
			
		||||
    RadioInstance* self = NULL;
 | 
			
		||||
 | 
			
		||||
    if (dev && dev[0] && name && name[0]) {
 | 
			
		||||
        char* key = radio_instance_make_key(dev, name);
 | 
			
		||||
        char* key = radio_instance_make_key(dev, name, version);
 | 
			
		||||
 | 
			
		||||
        if (radio_instance_table) {
 | 
			
		||||
            self = g_hash_table_lookup(radio_instance_table, key);
 | 
			
		||||
@@ -578,7 +724,7 @@ radio_instance_new_request(
 | 
			
		||||
    RADIO_REQ code)
 | 
			
		||||
{
 | 
			
		||||
    if (G_LIKELY(self)) {
 | 
			
		||||
        return gbinder_client_new_request(self->priv->client);
 | 
			
		||||
        return gbinder_client_new_request2(self->priv->client, code);
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
@@ -596,6 +742,18 @@ radio_instance_send_request_sync(
 | 
			
		||||
    return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
radio_instance_set_enabled(
 | 
			
		||||
    RadioInstance* self,
 | 
			
		||||
    gboolean enabled) /* Since 1.0.7 */
 | 
			
		||||
{
 | 
			
		||||
    if (G_LIKELY(self) && self->enabled != enabled) {
 | 
			
		||||
        self->enabled = enabled;
 | 
			
		||||
        GDEBUG("%s %sabled", self->slot, enabled ? "en" : "dis");
 | 
			
		||||
        g_signal_emit(self, radio_instance_signals[SIGNAL_ENABLED], 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gulong
 | 
			
		||||
radio_instance_add_indication_handler(
 | 
			
		||||
    RadioInstance* self,
 | 
			
		||||
@@ -668,7 +826,17 @@ radio_instance_add_death_handler(
 | 
			
		||||
    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    return (G_LIKELY(self) && G_LIKELY(func)) ? g_signal_connect(self,
 | 
			
		||||
        SIGNAL_ACK_NAME, G_CALLBACK(func), user_data) : 0;
 | 
			
		||||
        SIGNAL_DEATH_NAME, G_CALLBACK(func), user_data) : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gulong
 | 
			
		||||
radio_instance_add_enabled_handler(
 | 
			
		||||
    RadioInstance* self,
 | 
			
		||||
    RadioInstanceFunc func,
 | 
			
		||||
    gpointer user_data) /* Since 1.0.7 */
 | 
			
		||||
{
 | 
			
		||||
    return (G_LIKELY(self) && G_LIKELY(func)) ? g_signal_connect(self,
 | 
			
		||||
        SIGNAL_ENABLED_NAME, G_CALLBACK(func), user_data) : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -724,6 +892,7 @@ radio_instance_finalize(
 | 
			
		||||
    g_free(priv->slot);
 | 
			
		||||
    g_free(priv->dev);
 | 
			
		||||
    g_free(priv->key);
 | 
			
		||||
    g_free(priv->modem);
 | 
			
		||||
    G_OBJECT_CLASS(radio_instance_parent_class)->finalize(object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -764,6 +933,10 @@ radio_instance_class_init(
 | 
			
		||||
        g_signal_new(SIGNAL_DEATH_NAME, type,
 | 
			
		||||
            G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL,
 | 
			
		||||
            G_TYPE_NONE, 0);
 | 
			
		||||
    radio_instance_signals[SIGNAL_ENABLED] =
 | 
			
		||||
        g_signal_new(SIGNAL_ENABLED_NAME, type,
 | 
			
		||||
            G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL,
 | 
			
		||||
            G_TYPE_NONE, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2018-2019 Jolla Ltd.
 | 
			
		||||
 * Copyright (C) 2018-2019 Slava Monich <slava.monich@jolla.com>
 | 
			
		||||
 * Copyright (C) 2018-2020 Jolla Ltd.
 | 
			
		||||
 * Copyright (C) 2018-2020 Slava Monich <slava.monich@jolla.com>
 | 
			
		||||
 *
 | 
			
		||||
 * You may use this file under the terms of the BSD license as follows:
 | 
			
		||||
 *
 | 
			
		||||
@@ -41,11 +41,13 @@
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
radio_registry_instance_added(
 | 
			
		||||
    RadioInstance* instance);
 | 
			
		||||
    RadioInstance* instance)
 | 
			
		||||
    G_GNUC_INTERNAL;
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
radio_registry_instance_removed(
 | 
			
		||||
    const char* key);
 | 
			
		||||
    const char* key)
 | 
			
		||||
    G_GNUC_INTERNAL;
 | 
			
		||||
 | 
			
		||||
#endif /* RADIO_REGISTRY_PRIVATE_H */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2018-2019 Jolla Ltd.
 | 
			
		||||
 * Copyright (C) 2018-2019 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:
 | 
			
		||||
 *
 | 
			
		||||
@@ -49,7 +49,18 @@ radio_req_name(
 | 
			
		||||
#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_)
 | 
			
		||||
#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_SETUP_DATA_CALL_1_4:        return "setupDataCall_1_4";
 | 
			
		||||
    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;
 | 
			
		||||
    }
 | 
			
		||||
@@ -65,7 +76,33 @@ radio_resp_name(
 | 
			
		||||
#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_)
 | 
			
		||||
#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_SETUP_DATA_CALL_RESPONSE_1_4:
 | 
			
		||||
        return "setupDataCallResponse_1_4";
 | 
			
		||||
    case RADIO_RESP_ANY:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
@@ -80,6 +117,9 @@ radio_ind_name(
 | 
			
		||||
#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_)
 | 
			
		||||
#undef RADIO_IND_
 | 
			
		||||
    case RADIO_IND_ANY:
 | 
			
		||||
        break;
 | 
			
		||||
@@ -87,6 +127,17 @@ radio_ind_name(
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This function no longer makes as much sense as it did in IRadio 1.0 times.
 | 
			
		||||
 * Later it turned out that that same call may produce different responses
 | 
			
		||||
 * under different circumstances. For example, getIccCardStatus call may
 | 
			
		||||
 * cause getIccCardStatusResponse or getIccCardStatusResponse_1_2 to be
 | 
			
		||||
 * sent back, depending on which interfaces are supported by the caller.
 | 
			
		||||
 * There's no longer one-to-one match between requests and responses,
 | 
			
		||||
 * that would be too easy and straightforward for Google designers :)
 | 
			
		||||
 *
 | 
			
		||||
 * Use this function carefully or better don't use it at all.
 | 
			
		||||
 */
 | 
			
		||||
RADIO_RESP
 | 
			
		||||
radio_req_resp(
 | 
			
		||||
    RADIO_REQ req)
 | 
			
		||||
@@ -95,10 +146,24 @@ radio_req_resp(
 | 
			
		||||
#define RADIO_REQ_(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_
 | 
			
		||||
    default:
 | 
			
		||||
        return RADIO_RESP_NONE;
 | 
			
		||||
    case RADIO_REQ_SET_RESPONSE_FUNCTIONS:
 | 
			
		||||
    case RADIO_REQ_RESPONSE_ACKNOWLEDGEMENT:
 | 
			
		||||
    case RADIO_REQ_START_NETWORK_SCAN_1_2:
 | 
			
		||||
    case RADIO_REQ_SET_INDICATION_FILTER_1_2:
 | 
			
		||||
    case RADIO_REQ_SETUP_DATA_CALL_1_2:
 | 
			
		||||
    case RADIO_REQ_DEACTIVATE_DATA_CALL_1_2:
 | 
			
		||||
    case RADIO_REQ_SETUP_DATA_CALL_1_4:
 | 
			
		||||
    case RADIO_REQ_SET_INITIAL_ATTACH_APN_1_4:
 | 
			
		||||
    case RADIO_REQ_SET_DATA_PROFILE_1_4:
 | 
			
		||||
    case RADIO_REQ_ANY:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    return RADIO_RESP_NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user