[LeEco Le Pro3 ROMs, Kernels, Recoveries, & Other D] androcheck:
Update:

I haven't done much over the weekend, but here is what I know until now:

The LePro 3 doesn't simply contain a "dumb" infrared LED, but instead a fully programmable microcontroller (i.e. a separate small computer) with 80KB flash memory, 2KB SRAM, running its own firmware, etc. which provides the IR functionality (emitting and receiving): MAXQ616 - Infrared Remote Control System-on-Chip

The original LeEco IR App is binding the Service: "com.uei.control.Service" (using the action strings: "com.uei.control.ISetup" and "com.uei.control.IControl")

This service is provided by the package "com.uei.quicksetsdk.letv" (/system/app/UEIQuicksetSDKLeTV/UEIQuicksetSDKLeTV.apk)

This package is proguard obfuscated, but it looks like all the relevant infrared sending is done by the classes in the package: com.uei.driver

The service contains a Logging class which is called from everywhere but apparently logging is disabled in the release build

As an easy workaround I used Xposed to hook the log methods (they are easy to identify) and log all logging output into Xposed log (see log output below)

both, receiving and transmitting IR (and a lot more) is done by communicating with the serial device /dev/ttyHSL1 with a baudrate of 230400

For serial communication the native "libserial_port.so" library is used (and is included in 2 versions in the "asset" folder: arm64-v8a and armeabi-v7a)

There is a second native library in use: "libqs_jni.so", which I don't know yet what it's used for (see list of provided JNI methods below)

Part of the log (all the typos are like this in the code):

11-28 19:40:01.828 I/Xposed (30574): DEBUG_INFRARED: LOG >> Quickset Services start...
11-28 19:40:01.829 I/Xposed (30574): DEBUG_INFRARED: LOG >> Manufacture = LeMobile
11-28 19:40:01.832 I/Xposed (30574): DEBUG_INFRARED: LOG >> Id = LeTV
11-28 19:40:01.832 I/Xposed (30574): DEBUG_INFRARED: LOG >> Extracting JNI libs...
11-28 19:40:01.832 I/Xposed (30574): DEBUG_INFRARED: LOG >> --- java.library.path =/vendor/lib64:/system/lib64
11-28 19:40:01.899 I/Xposed (30574): DEBUG_INFRARED: LOG >> --- Build.SUPPORTED_ABIS:->arm64-v8a<-
11-28 19:40:01.913 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------ Quikcset getAppLaunchState: Activated=true
11-28 19:40:01.913 I/Xposed (30574): Registered=false
11-28 19:40:01.913 I/Xposed (30574): Region=8
11-28 19:40:01.913 I/Xposed (30574): Port=/dev/ttyHSL1
11-28 19:40:01.913 I/Xposed (30574): Baudrate=230400
11-28 19:40:01.913 I/Xposed (30574): ACEXP=0
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: Activated=true
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: Activated
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: Registered=false
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: Registered
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: Region=8
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: Region
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> Quikcset region code = 8
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: Port=/dev/ttyHSL1
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: Port
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ---- UART Port read from Settings: /dev/ttyHSL1
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: Baudrate=230400
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: Baudrate
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ---- UART baud rate read from Settings: 230400
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: ACEXP=0
11-28 19:40:01.914 I/Xposed (30574): DEBUG_INFRARED: LOG >> ------- SETTIGN ITEM: ACEXP
11-28 19:40:01.915 I/Xposed (30574): DEBUG_INFRARED: LOG >> ----SETTING Is MAXQ616: true = 0
11-28 19:40:01.915 I/Xposed (30574): DEBUG_INFRARED: LOG >> ++++++ pv = D397374D-314B-4405-9689-C6C30E81A922
11-28 19:40:01.915 I/Xposed (30574): DEBUG_INFRARED: LOG >> ++++++ pb = 39A68E11-5927-49F0-A155-C2644D73EC90
11-28 19:40:01.915 I/Xposed (30574): DEBUG_INFRARED: LOG >> QS Service created
11-28 19:40:01.917 I/Xposed (30574): DEBUG_INFRARED: LOG >> AirCon Key: Mode#EC.FN.MD
11-28 19:40:01.917 I/Xposed (30574): DEBUG_INFRARED: LOG >> Intron - Label: 1 = Mode - EC.FN.MD
11-28 19:40:01.917 I/Xposed (30574): DEBUG_INFRARED: LOG >> AirCon Key: Temperature Up#EC.FN.TP.+
11-28 19:40:01.917 I/Xposed (30574): DEBUG_INFRARED: LOG >> Intron - Label: 2 = Temperature Up - EC.FN.TP.+
11-28 19:40:01.917 I/Xposed (30574): DEBUG_INFRARED: LOG >> AirCon Key: Temperature Down#EC.FN.TP.-
11-28 19:40:01.917 I/Xposed (30574): DEBUG_INFRARED: LOG >> Intron - Label: 3 = Temperature Down - EC.FN.TP.-
....
....
11-28 19:40:01.919 I/Xposed (30574): DEBUG_INFRARED: LOG >> Service initServices...
11-28 19:40:01.920 I/Xposed (30574): DEBUG_INFRARED: LOG >> QS start get config
11-28 19:40:01.926 I/Xposed (30574): DEBUG_INFRARED: LOG >> ---- DB Folder: /data/user/0/com.uei.quicksetsdk.letv/app_DB
11-28 19:40:01.926 I/Xposed (30574): DEBUG_INFRARED: LOG >> Config data = dbroot:=/data/user/0/com.uei.quicksetsdk.letv/app_DB
11-28 19:40:01.926 I/Xposed (30574): oemid:=LeTV
11-28 19:40:01.926 I/Xposed (30574): language:=En
11-28 19:40:01.926 I/Xposed (30574): region:=8
11-28 19:40:01.926 I/Xposed (30574): userid:=
11-28 19:40:01.926 I/Xposed (30574): dual_mode:=0
11-28 19:40:01.926 I/Xposed (30574): auto_lookup:=0
11-28 19:40:01.926 I/Xposed (30574): wsurl:=""
11-28 19:40:01.926 I/Xposed (30574): cacert:=""
11-28 19:40:01.926 I/Xposed (30574): devmap:={"TV":"T","Cable,IPTV":"C","Video Accessory":"N","Satellite/DSS":"S","VCR":"V","DVD":"Y","Receiver, Misc Audio":"R,M","Amplifier":"A","CD":"D","Home Control":"H"}
11-28 19:40:01.927 I/Xposed (30574): DEBUG_INFRARED: LOG >> DB File: dac1a
11-28 19:40:01.927 I/Xposed (30574): DEBUG_INFRARED: LOG >> DB File: dac2
11-28 19:40:01.927 I/Xposed (30574): DEBUG_INFRARED: LOG >> DB File: dac8
11-28 19:40:01.927 I/Xposed (30574): DEBUG_INFRARED: LOG >> DB File: dac9a
11-28 19:40:01.927 I/Xposed (30574): DEBUG_INFRARED: LOG >> DB File: translation.txt
11-28 19:40:01.927 I/Xposed (30574): DEBUG_INFRARED: LOG >> #### Remove old DB files...
11-28 19:40:01.927 I/Xposed (30574): DEBUG_INFRARED: LOG >> deleting : dac1a
11-28 19:40:01.928 I/Xposed (30574): DEBUG_INFRARED: LOG >> deleting : dac2
11-28 19:40:01.928 I/Xposed (30574): DEBUG_INFRARED: LOG >> deleting : dac8
11-28 19:40:01.928 I/Xposed (30574): DEBUG_INFRARED: LOG >> deleting : dac9a
11-28 19:40:01.929 I/Xposed (30574): DEBUG_INFRARED: LOG >> #### Unzip DB Files...
11-28 19:40:02.092 I/Xposed (30574): DEBUG_INFRARED: LOG >> #### Unzip DB Files: /data/user/0/com.uei.quicksetsdk.letv/app_DB/dac1a
11-28 19:40:02.167 I/Xposed (30574): DEBUG_INFRARED: LOG >> #### Unzip DB Files: /data/user/0/com.uei.quicksetsdk.letv/app_DB/dac2
11-28 19:40:02.190 I/Xposed (30574): DEBUG_INFRARED: LOG >> #### Unzip DB Files: /data/user/0/com.uei.quicksetsdk.letv/app_DB/dac8
11-28 19:40:02.191 I/Xposed (30574): DEBUG_INFRARED: LOG >> #### Unzip DB Files: /data/user/0/com.uei.quicksetsdk.letv/app_DB/dac9a
11-28 19:40:02.191 I/Xposed (30574): DEBUG_INFRARED: LOG >> #### Unzip DB Files: /data/user/0/com.uei.quicksetsdk.letv/app_DB/translation.txt
11-28 19:40:02.192 I/Xposed (30574): DEBUG_INFRARED: LOG >> #### Unzip DB Files DONE
11-28 19:40:02.193 I/Xposed (30574): DEBUG_INFRARED: LOG >> Supports setup maps: true
11-28 19:40:02.194 I/Xposed (30574): DEBUG_INFRARED: LOG >> QS start statue = true Error code = 0
11-28 19:40:02.194 I/Xposed (30574): DEBUG_INFRARED: LOG >> QS version = v2.7.7.1_RC1
11-28 19:40:02.194 I/Xposed (30574): DEBUG_INFRARED: LOG >> DB version = APAC_LeTV_Mobile_2015_i-Three_database_v3.0_letv
11-28 19:40:02.194 I/Xposed (30574): DEBUG_INFRARED: LOG >> ### init IR Blaster...
11-28 19:40:02.194 I/Xposed (30574): DEBUG_INFRARED: LOG >> ---- Is MAXQ616: true
11-28 19:40:02.195 I/Xposed (30574): DEBUG_INFRARED: LOG >> open serial port: /dev/ttyHSL1 - 230400
11-28 19:40:02.197 I/Xposed (30574): DEBUG_INFRARED: LOG >> UEIBLaster setting for 616
11-28 19:40:02.197 I/Xposed (30574): DEBUG_INFRARED: LOG >> Setting serial record hearder size = 2
11-28 19:40:02.197 I/Xposed (30574): DEBUG_INFRARED: LOG >> configuring settings for MAXQ616
11-28 19:40:02.197 I/Xposed (30574): DEBUG_INFRARED: LOG >> Get version...
11-28 19:40:02.197 I/Xposed (30574): DEBUG_INFRARED: LOGJZ serialWrite byte[] >> 00
11-28 19:40:02.197 I/Xposed (30574): DEBUG_INFRARED: LOG >> Serial write: 1
11-28 19:40:02.197 I/Xposed (30574): DEBUG_INFRARED: LOGJZ serialWrite result >> true
11-28 19:40:02.207 I/Xposed (30574): DEBUG_INFRARED: LOGJZ serialWrite byte[] >> 4041424300010B
11-28 19:40:02.207 I/Xposed (30574): DEBUG_INFRARED: LOG >> Serial write: 7
11-28 19:40:02.208 I/Xposed (30574): DEBUG_INFRARED: LOGJZ serialWrite result >> true
11-28 19:40:02.208 I/Xposed (30574): DEBUG_INFRARED: LOG >> waitForReply check queue size: 0
11-28 19:40:02.213 I/Xposed (30574): DEBUG_INFRARED: LOG >> serial port data available: 21 - 1
11-28 19:40:02.213 I/Xposed (30574): DEBUG_INFRARED: LOG >> Blaster return status: 0
11-28 19:40:02.238 I/Xposed (30574): DEBUG_INFRARED: LOG >> +++ Serial ailve
11-28 19:40:02.239 I/Xposed (30574): DEBUG_INFRARED: LOG >> Blaster return status: 0
11-28 19:40:02.239 I/Xposed (30574): DEBUG_INFRARED: LOG >> version : 00 13 00 32 35 36 37 30 32 32 35 36 37 30 34 33 30 30 30 30 32
11-28 19:40:02.239 I/Xposed (30574): DEBUG_INFRARED: LOG >> +++ Serial alive thread START
11-28 19:40:02.239 I/Xposed (30574): DEBUG_INFRARED: LOG >> i-One Blaster versions: Library:256702 Software:256704 Bootloader:300002
11-28 19:40:02.239 I/Xposed (30574): DEBUG_INFRARED: LOG >> IR Blaster version: 256702256704300002
11-28 19:40:02.239 I/Xposed (30574): DEBUG_INFRARED: LOG >> QS saving settings...
11-28 19:40:02.240 I/Xposed (30574): DEBUG_INFRARED: LOG >> IR Blaster version: 256702256704300002
11-28 19:40:02.240 I/Xposed (30574): DEBUG_INFRARED: LOG >> listAllUpgradeCodes start
11-28 19:40:02.240 I/Xposed (30574): DEBUG_INFRARED: LOGJZ serialWrite byte[] >> 00
11-28 19:40:02.240 I/Xposed (30574): DEBUG_INFRARED: LOG >> Serial write: 1
11-28 19:40:02.240 I/Xposed (30574): DEBUG_INFRARED: LOGJZ serialWrite result >> true
11-28 19:40:02.250 I/Xposed (30574): DEBUG_INFRARED: LOGJZ serialWrite byte[] >> 40414243000111
11-28 19:40:02.250 I/Xposed (30574): DEBUG_INFRARED: LOG >> Serial write: 7
11-28 19:40:02.250 I/Xposed (30574): DEBUG_INFRARED: LOGJZ serialWrite result >> true
11-28 19:40:02.250 I/Xposed (30574): DEBUG_INFRARED: LOG >> waitForReply check queue size: 0
11-28 19:40:02.255 I/Xposed (30574): DEBUG_INFRARED: LOG >> serial port data available: 10 - 1
11-28 19:40:02.256 I/Xposed (30574): DEBUG_INFRARED: LOG >> Blaster return status: 0
11-28 19:40:02.281 I/Xposed (30574): DEBUG_INFRARED: LOG >> Blaster return status: 0
11-28 19:40:02.281 I/Xposed (30574): DEBUG_INFRARED: LOG >> Upgrade Code: 1029
11-28 19:40:02.281 I/Xposed (30574): DEBUG_INFRARED: LOG >> Upgrade Code: 803
11-28 19:40:02.281 I/Xposed (30574): DEBUG_INFRARED: LOG >> listAllUpgradeCodes received: 2
11-28 19:40:02.282 I/Xposed (30574): DEBUG_INFRARED: LOG >> listAllUpgradeCodes done...
11-28 19:40:02.283 I/Xposed (30574): DEBUG_INFRARED: LOG >> Device manager: loading config....
11-28 19:40:02.283 I/Xposed (30574): DEBUG_INFRARED: LOG >> ----------- loading internal config...
11-28 19:40:02.283 I/Xposed (30574): DEBUG_INFRARED: LOG >> Services init done
11-28 19:40:02.284 I/Xposed (30574): DEBUG_INFRARED: LOG >> QS Service init finished
11-28 19:40:02.285 I/Xposed (30574): DEBUG_INFRARED: LOG >> QS Service version name: 1.0.008
11-28 19:40:02.285 I/Xposed (30574): DEBUG_INFRARED: LOG >> QS Service version code: 8
11-28 19:40:02.285 I/Xposed (30574): DEBUG_INFRARED: LOG >> QS SDK AIRCON version: v1
11-28 19:40:02.285 I/Xposed (30574): DEBUG_INFRARED: LOG >> Service requested: Setup
11-28 19:40:02.286 I/Xposed (30574): DEBUG_INFRARED: LOG >> --- setting serial info...
11-28 19:40:02.286 I/Xposed (30574): DEBUG_INFRARED: LOG >> Setting serial port name: /dev/ttyHSL1
11-28 19:40:02.286 I/Xposed (30574): DEBUG_INFRARED: LOG >> Setting baud rate: 230400
11-28 19:40:02.286 I/Xposed (30574): DEBUG_INFRARED: LOG >> Old Blaster settings: true - 230400 - /dev/ttyHSL1
11-28 19:40:02.286 I/Xposed (30574): DEBUG_INFRARED: LOG >> New Blaster settings: true - 230400 - /dev/ttyHSL1
11-28 19:40:02.286 I/Xposed (30574): DEBUG_INFRARED: LOG >> QS saving settings...
....

JNI methods libqs_jni.so:
Java_com_uei_quickset_QSNativeLib_QSlogStart
Java_com_uei_quickset_QSNativeLib_QSstart
Java_com_uei_quickset_QSNativeLib_QSstop
Java_com_uei_quickset_QSNativeLib_QSonlineStart
Java_com_uei_quickset_QSNativeLib_QSgetRev
Java_com_uei_quickset_QSNativeLib_QSgetLocalDBVersionString
Java_com_uei_quickset_QSNativeLib_QSretrieveDeviceTypes
Java_com_uei_quickset_QSNativeLib_QSgetDeviceTypeName
Java_com_uei_quickset_QSNativeLib_QSretrieveBrands
Java_com_uei_quickset_QSNativeLib_QSretrieveBrandsArray
Java_com_uei_quickset_QSNativeLib_QSonlineRetrieveBrands
Java_com_uei_quickset_QSNativeLib_QSretrieveModels
Java_com_uei_quickset_QSNativeLib_QSonlineRetrieveModels
Java_com_uei_quickset_QSNativeLib_QSretrieveCodesets
Java_com_uei_quickset_QSNativeLib_QSonlineRetrieveCodesets
Java_com_uei_quickset_QSNativeLib_QSretrieveCodesetsByBrand
Java_com_uei_quickset_QSNativeLib_QSonlineRetrieveCodesetsByBrand
Java_com_uei_quickset_QSNativeLib_QSonlineGetLastErrorCode
Java_com_uei_quickset_QSNativeLib_QSonlineGetLastErrorName
Java_com_uei_quickset_QSNativeLib_QSgetCodesetName
Java_com_uei_quickset_QSNativeLib_QSgetBrandName
Java_com_uei_quickset_QSNativeLib_QSgetModelName
Java_com_uei_quickset_QSNativeLib_QSsendCodeset
Java_com_uei_quickset_QSNativeLib_QSgetBrandsTotal
Java_com_uei_quickset_QSNativeLib_QSgetModelsTotal
Java_com_uei_quickset_QSNativeLib_QSgetCodesetTotal
Java_com_uei_quickset_QSNativeLib_QS_fuzzy_threshold_set
Java_com_uei_quickset_QSNativeLib_QS_fuzzy_threshold_get
Java_com_uei_quickset_QSNativeLib_QSgetModelMode
Java_com_uei_quickset_QSNativeLib_QS_query_mode_get
Java_com_uei_quickset_QSNativeLib_QSqueryModeGet
Java_com_uei_quickset_QSNativeLib_QS_query_mode_reset
Java_com_uei_quickset_QSNativeLib_QS_get_model_fuzzy_value
Java_com_uei_quickset_QSNativeLib_utilsfn
Java_com_uei_quickset_QSNativeLib_QSstartStream
Java_com_uei_quickset_QSNativeLib_QSFuzzyThresholdSet
Java_com_uei_quickset_QSNativeLib_QSFuzzyThresholdGet
Java_com_uei_quickset_QSNativeLib_QSgetCodesetBinary
Java_com_uei_quickset_QSNativeLib_QSEDIDretrieveCodesets
Java_com_uei_quickset_QSNativeLib_QSCECretrieveCodesets
Java_com_uei_quickset_QSNativeLib_QSIPretrieveCodesets
Java_com_uei_quickset_QSNativeLib_QScecgetVendorID
Java_com_uei_quickset_QSNativeLib_QSInfoframeRetrieveCodesets
Java_com_uei_quickset_QSNativeLib_QSinfoframeGetManufacturerName
Java_com_uei_quickset_QSNativeLib_QSautoDiscoveryCodesetRegion
Java_com_uei_quickset_QSNativeLib_QSgetProvidersTotal
Java_com_uei_quickset_QSNativeLib_QSEDIDCECgetBrandName
Java_com_uei_quickset_QSNativeLib_QSgetLastError
Java_com_uei_quickset_QSNativeLib_QSgetLastErrorName
Java_com_uei_quickset_QSNativeLib_QSqueryModeReset
Java_com_uei_quickset_QSNativeLib_QSgetModelFuzzyValue
Java_com_uei_quickset_QSNativeLib_QSsendCodesetByName
Java_com_uei_quickset_QSNativeLib_QSonlineCancelRequest
Java_com_uei_quickset_QSNativeLib_QSreadSetupMapDataDirect
Java_com_uei_quickset_QSNativeLib_QSgetKeyMapZipIR
Java_com_uei_quickset_QSNativeLib_QSisCodesetExistZipIR
Java_com_uei_quickset_QSNativeLib_QSdeleteCodesetZipIR
Java_com_uei_quickset_QSNativeLib_QSlistCodesetsZipIR
Java_com_uei_quickset_QSNativeLib_QSsendCodesetZipIRB64
Java_com_uei_quickset_QSNativeLib_QSsendZipIRBytestream
Java_com_uei_quickset_QSNativeLib_QSgetZipIRFunc
Java_com_uei_quickset_QSNativeLib_QSsendCodesetZipIR
Java_com_uei_quickset_QSNativeLib_QSsendCodesetByNameZipIR
Java_com_uei_quickset_QSNativeLib_QSosmReportTestResult
Java_com_uei_quickset_QSNativeLib_QSosmGetTestKeysTotal
Java_com_uei_quickset_QSNativeLib_QSosmGetFirstTestKey
Java_com_uei_quickset_QSNativeLib_QSosmGetNextTestKey
Java_com_uei_quickset_QSNativeLib_QSosmGetCurrentCodesetName
Java_com_uei_quickset_QSNativeLib_QSosmGetCodesetsTotal
Java_com_uei_quickset_QSNativeLib_QSosmGetCodesetsTested
Java_com_uei_quickset_QSNativeLib_QSRegionRetrieveTypeCount
Java_com_uei_quickset_QSNativeLib_QSRegionRetrieveTypeName
Java_com_uei_quickset_QSNativeLib_QSRegionRetrieveProviderCountByZipcode
Java_com_uei_quickset_QSNativeLib_QSRegionRetrieveBrandCountByRegion
Java_com_uei_quickset_QSNativeLib_QSRegionRetrieveBrandName
Java_com_uei_quickset_QSNativeLib_QSRegionRetrieveProviderName
Java_com_uei_quickset_QSNativeLib_QSRegionGetCodesetsTotal
Java_com_uei_quickset_QSNativeLib_QSRegionGetCodesetsName
Java_com_uei_quickset_QSNativeLib_QSGetAirconCodesetBinary
Java_com_uei_quickset_QSNativeLib_QSOnlineEDIDRetrieveCodesets
Java_com_uei_quickset_QSNativeLib_QSprovinceGetCountryCount
Java_com_uei_quickset_QSNativeLib_QSprovinceGetCountryName
Java_com_uei_quickset_QSNativeLib_QSprovinceGetProvinceCount
Java_com_uei_quickset_QSNativeLib_QSprovinceGetProvinceName
Java_com_uei_quickset_QSNativeLib_QSprovinceGetCityCount
Java_com_uei_quickset_QSNativeLib_QSprovinceGetCityName
Java_com_uei_quickset_QSNativeLib_QSprovinceGetCityProviderCount
Java_com_uei_quickset_QSNativeLib_QSprovinceGetCityProviderName
Java_com_uei_quickset_QSNativeLib_QSprovinceGetCityProviderCodesetCount
Java_com_uei_quickset_QSNativeLib_QSprovinceGetCityProviderCodesetName
Java_com_uei_quickset_QSNativeLib_QSprovinceGetProvinceProviderCount
Java_com_uei_quickset_QSNativeLib_QSprovinceGetProvinceProviderName
Java_com_uei_quickset_QSNativeLib_QSprovinceGetProvinceProviderCodesetCount
Java_com_uei_quickset_QSNativeLib_QSprovinceGetProvinceProviderCodesetName

And down it goes the rabbit hole.. :) I thought this is about writing a simple byte array on a serial line. Seems a little bit more complex. Now I understand why LeEco didn't choose the Android HAL implementation (which basically offers only 3 entrypoints: open, transmit IR and close). Also official Android API doesn't offer support for receiving infrared signals.

[edit]

Just stumbled upon this PDF: Smart Device Solutions. Looks like all this "Quickset" stuff is part of this UEI product. Unfrotunately I haven't found any datasheet yet (which might explain us how to talk to this chip).

[/edit]