zenfone6: prebuilt: Remove hostapd and add/update files

Change-Id: Ief7ebf586938e397d0f7bba4bb68645545145629
diff --git a/prebuilt/system/etc/bluetooth/bt_configstore.conf b/prebuilt/system/etc/bluetooth/bt_configstore.conf
new file mode 100644
index 0000000..b52fb64
--- /dev/null
+++ b/prebuilt/system/etc/bluetooth/bt_configstore.conf
@@ -0,0 +1,263 @@
+# platform configuration
+[platform1]
+
+# platform name
+platformName = SDM845
+
+# Soc Name
+socName = cherokee
+
+# Split A2dp support - true(default) or false
+spiltA2dpSupported = true
+
+# AAC Frame Control support - true or false (default)
+aacFrameCtlEnabled = false
+
+# A2dp offload Capability support
+a2dpOffloadCapability = sbc-aptx-aptxtws-aptxhd-aac-ldac
+
+# Wipower Support  - true(default) or false
+wiPowerSupported = true
+
+# TWS+ state processing
+twspStateSupported = false;
+#=================================================================================================#
+# platform configuration
+[platform2]
+
+# platform name
+platformName = SDM855
+
+# Soc Name
+socName = cherokee
+
+# Split A2dp support - true(default) or false
+spiltA2dpSupported = true
+
+# AAC Frame Control support - true or false (default)
+aacFrameCtlEnabled = false
+
+# A2dp offload Capability support
+a2dpOffloadCapability = sbc-aptx-aptxtws-aptxhd-aac-ldac
+
+# Wipower Support  - true(default) or false
+wiPowerSupported = true
+
+# TWS+ state processing
+twspStateSupported = false;
+#=================================================================================================#
+# platform configuration
+[platform3]
+
+# platform name
+platformName = SM6150
+
+# Soc Name
+socName = cherokee
+
+# Split A2dp support - true(default) or false
+spiltA2dpSupported = true
+
+# AAC Frame Control support - true or false (default)
+aacFrameCtlEnabled = false
+
+# A2dp offload Capability support
+a2dpOffloadCapability = sbc-aptx-aptxtws-aptxhd-aac-ldac
+
+# Wipower Support  - true(default) or false
+wiPowerSupported = true
+
+# TWS+ state processing
+twspStateSupported = false;
+#=================================================================================================#
+# platform configuration
+[platform4]
+
+# platform name
+platformName = SDM670
+
+# Soc Name
+socName = cherokee
+
+# AAC Frame Control support - true or false (default)
+aacFrameCtlEnabled = false
+
+# AAC Frame Control support - true(default) or false
+aacFrameCtlEnabled = true
+
+# A2dp offload Capability support
+a2dpOffloadCapability = sbc-aptx-aptxtws-aptxhd-aac-ldac
+
+# Wipower Support  - true(default) or false
+wiPowerSupported = true
+
+# TWS+ state processing
+twspStateSupported = false;
+#=================================================================================================#
+# platform configuration
+[platform5]
+
+# platform name
+platformName = SDM660
+
+# Soc Name
+socName = cherokee
+
+# Split A2dp support - true(default) or false
+spiltA2dpSupported = true
+
+# AAC Frame Control support - true or false (default)
+aacFrameCtlEnabled = false
+
+# A2dp offload Capability support
+a2dpOffloadCapability = sbc-aptx-aptxhd-aac
+
+# Wipower Support  - true(default) or false
+wiPowerSupported = true
+
+#=================================================================================================#
+# platform configuration
+[platform6]
+
+# platform name
+platformName = SDA865
+
+# Soc Name
+socName = hastings
+
+# Split A2dp support - true(default) or false
+spiltA2dpSupported = true
+
+# AAC Frame Control support - true(default) or false
+aacFrameCtlEnabled = true
+
+# A2dp offload Capability support
+a2dpOffloadCapability = sbc-aptx-aptxtws-aptxhd-aac-ldac
+
+# Wipower Support  - true(default) or false
+wiPowerSupported = true
+
+#A2dp Multicast support
+a2dpMcastSupported = false;
+
+# TWS+ state processing
+twspStateSupported = false;
+#=================================================================================================#
+# platform configuration
+[platform7]
+
+# platform name
+platformName = MSM8998
+
+# Soc Name
+socName = cherokee
+
+# Split A2dp support - true(default) or false
+spiltA2dpSupported = true
+
+# AAC Frame Control support - true or false (default)
+aacFrameCtlEnabled = false
+
+# A2dp offload Capability support
+a2dpOffloadCapability = sbc-aptx-aptxhd-aac
+
+# Wipower Support  - true(default) or false
+wiPowerSupported = true
+
+#=================================================================================================#
+# platform configuration
+[platform8]
+
+# platform name
+platformName = MSM8996
+
+# Soc Name
+socName = rome
+
+# Split A2dp support - true(default) or false
+spiltA2dpSupported = true
+
+# AAC Frame Control support - true or false (default)
+aacFrameCtlEnabled = false
+
+# A2dp offload Capability support
+a2dpOffloadCapability = sbc-aptx-aptxhd-aac
+
+# Wipower Support  - true(default) or false
+wiPowerSupported = true
+
+#=================================================================================================#
+# platform configuration
+[platform9]
+
+# platform name
+platformName = MSM8937
+
+# Soc Name
+socName = pronto
+
+# Split A2dp support - true or false (default)
+spiltA2dpSupported = false
+
+# AAC Frame Control support - true or false (default)
+aacFrameCtlEnabled = false
+
+# Wipower Support  - true or false (default)
+wiPowerSupported = false
+
+#=================================================================================================#
+# platform configuration
+[platform10]
+
+# platform name
+platformName = MSM8953
+
+# Soc Name
+socName = pronto
+
+# Split A2dp support - true or false (default)
+spiltA2dpSupported = false
+
+# AAC Frame Control support - true or false (default)
+aacFrameCtlEnabled = false
+
+# Wipower Support  - true or false (default)
+wiPowerSupported = false
+
+#=================================================================================================#
+# platform configuration
+[platform11]
+
+# platform name
+platformName = MSM8909
+
+# Soc Name
+socName = pronto
+
+# Split A2dp support - true or false (default)
+spiltA2dpSupported = false
+
+# AAC Frame Control support - true or false (default)
+aacFrameCtlEnabled = false
+
+# Wipower Support  - true or false (default)
+wiPowerSupported = false
+
+#=================================================================================================#
+# platform configuration
+[platform12]
+
+# platform name
+platformName = MSM8952
+
+# Soc Name
+socName = pronto
+
+# Split A2dp support - true or false (default)
+spiltA2dpSupported = false
+
+# AAC Frame Control support - true or false (default)
+aacFrameCtlEnabled = false
+
+# Wipower Support  - true or false (default)
+wiPowerSupported = false
diff --git a/prebuilt/system/etc/bluetooth/bt_profile.conf b/prebuilt/system/etc/bluetooth/bt_profile.conf
new file mode 100644
index 0000000..d3fd677
--- /dev/null
+++ b/prebuilt/system/etc/bluetooth/bt_profile.conf
@@ -0,0 +1,45 @@
+# Below are the guidelines/instructions for editing this conf file.
+# Note 1: User should turn of the BT, before updating this conf file.
+# Note 2: Line started with the # is treated as comments.
+# Note 3: Comment lines in between the entries are not allowed.
+#
+#   Below is the profile list for configuration
+#   1.AVRCP
+#   2.PBAP
+#   3.MAP
+#   4.MAX_POW
+#
+# ******************************* Start of config Database *******************
+#AVRCP profile and its configurable features
+#avrcp_coverart_support default value true
+#To enable avrcp coverart support avrcp version should
+#be set to 1.6 from developer options in settings menu
+[AVRCP]
+avrcp_0103_support = false
+avrcp_coverart_support = true
+
+#PBAP profile and its configurable features
+#Default version 1.2 = 0x0102
+#to downgrade to versions 1.1 = 0x0101 ,pbap_0102_support should be set to false
+# use_sim_support default value true
+[PBAP]
+pbap_0102_support = true
+use_sim_support = true
+
+#MAP profile and its configurable features
+# map_email_support default value true
+[MAP]
+map_email_support = true
+map_0104_support = true
+
+#Configurable BT MAX_POW based on BT Technology
+#Host can specify different max. power for different Technology/packet type
+#Currently BR,EDR and BLE packet type are supported
+#Power value 0x80 is meant to disable the max power restriction for particular technology
+# BR_max_pow_support default value 0x80
+# EDR_max_pow_support default value 0x80
+# BLE_max_pow_support default value 0x80
+[MAX_POW]
+#BR_max_pow_support = 0x80
+#EDR_max_pow_support = 0x80
+BLE_max_pow_support = 0x18
diff --git a/prebuilt/system/etc/bluetooth/bt_stack_debug.conf b/prebuilt/system/etc/bluetooth/bt_stack_debug.conf
new file mode 100644
index 0000000..8c67724
--- /dev/null
+++ b/prebuilt/system/etc/bluetooth/bt_stack_debug.conf
@@ -0,0 +1,70 @@
+# Enable trace level reconfiguration function
+# Must be present before any TRC_ trace level settings
+TraceConf=true
+
+# Trace level configuration
+#   BT_TRACE_LEVEL_NONE    0    ( No trace messages to be generated )
+#   BT_TRACE_LEVEL_ERROR   1    ( Error condition trace messages )
+#   BT_TRACE_LEVEL_WARNING 2    ( Warning condition trace messages )
+#   BT_TRACE_LEVEL_API     3    ( API traces )
+#   BT_TRACE_LEVEL_EVENT   4    ( Debug messages for events )
+#   BT_TRACE_LEVEL_DEBUG   5    ( Full debug messages )
+#   BT_TRACE_LEVEL_VERBOSE 6    ( Verbose messages ) - Currently supported for TRC_BTAPP only.
+TRC_BTM=5
+TRC_HCI=5
+TRC_L2CAP=2
+TRC_RFCOMM=2
+TRC_OBEX=2
+TRC_AVCT=2
+TRC_AVDT=2
+TRC_AVRC=2
+TRC_AVDT_SCB=2
+TRC_AVDT_CCB=2
+TRC_A2D=2
+TRC_SDP=2
+TRC_SMP=2
+TRC_BTAPP=2
+TRC_BTIF=5
+TRC_BNEP=2
+TRC_PAN=2
+TRC_HID_HOST=2
+TRC_HID_DEV=2
+
+# This is Log configuration for new C++ code using LOG() macros.
+# See libchrome/base/logging.h for description on how to configure your logs.
+# sample configuration:
+#LoggingV=--v=0
+#LoggingVModule=--vmodule=*/btm/*=1,btm_ble_multi*=2,btif_*=1
+
+# PTS testing helpers
+
+# Secure connections only mode.
+# PTS_SecurePairOnly=true
+
+# Disable LE Connection updates
+#PTS_DisableConnUpdates=true
+
+# Disable BR/EDR discovery after LE pairing to avoid cross key derivation errors
+#PTS_DisableSDPOnLEPair=true
+
+# SMP Pair options (formatted as hex bytes) auth, io, ikey, rkey, ksize
+#PTS_SmpOptions=0xD,0x4,0xf,0xf,0x10
+
+# PTS AVRCP Test mode
+#PTS_AvrcpTest=true
+
+# SMP Certification Failure Cases
+# Set any of the following SMP error values (from smp_api_types.h)
+# to induce pairing failues for various PTS SMP test cases.
+# Setting PTS_SmpFailureCase to 0 means normal operation.
+# Failure modes:
+#
+#  SMP_PASSKEY_ENTRY_FAIL = 1
+#  SMP_PAIR_AUTH_FAIL = 3
+#  SMP_CONFIRM_VALUE_ERR = 4
+#  SMP_PAIR_NOT_SUPPORT = 5
+#  SMP_PAIR_FAIL_UNKNOWN = 8
+#  SMP_REPEATED_ATTEMPTS = 9
+#  SMP_NUMERIC_COMPAR_FAIL = 12
+#PTS_SmpFailureCase=0
+
diff --git a/prebuilt/system/etc/bluetooth/interop_database.conf b/prebuilt/system/etc/bluetooth/interop_database.conf
new file mode 100644
index 0000000..8ab463a
--- /dev/null
+++ b/prebuilt/system/etc/bluetooth/interop_database.conf
@@ -0,0 +1,527 @@
+# Below are the guidelines/instructions for editing this database file.
+# Note 1: User should turn of the BT, before updating this database file.
+# Note 2: Maximum length of the line should not be more than 1023 characters.
+# Note 3: Line started with the # is treated as comments.
+# Note 4: Comment lines in between the entries are not allowed.
+# Note 5: All duplicated entries including main BL types will be ignored.
+#
+#1. Below are the four tags for blacklist
+#   A. Address_Based   C. Manufacturer_based
+#   B. Name_Based      D. Vndr_Prdt_Based
+#   E. SSR_Max_Lat_Based F: Version_Based
+##
+#   A. Address_Based :  This tag refers to Address based blacklist
+#   Input Type       :   Input value should be only 3 to 6 bytes of BD address
+#   Format Type      :   Address should be in XX:XX:XX format
+#   Examples         :   00:01:03 = Address_Based
+###
+#   B. Name_Based :   This tag refers to Name based blacklist.
+#   Input type    :   Input should be only string and length of the string
+#                     should not be more than 248 characters.
+#   Format Type   :   string
+#   Examples      :   Sample Headset name = Name_Based
+####
+#   C. Manufacturer_Based :  This tag refers to Manufacturer based blacklist
+#   Input type  : Input should be in Hexadecimal Number of Manufacturer
+#   Format Type : 2 Bytes Hexadecimal Value
+#   Examples    : 0X0023 = Manufacturer_Based
+#####
+#   D. Vndr_Prdt_Based : This tag refers to vendor and product based blacklist
+#   Input type  : Input should be in Hexadecimal value
+#   Format Type : 4 bytes hex value( 2 bytes of vendor  and 2 bytes of product),
+#                 Vendor and product hex values should be separated with delimiter(-).
+#   Examples    : 0X00AB-0X00BC = Vndr_Prdt_Based
+#####
+#   E. SSR_Max_Lat_Based : This tag refers to SSR Max Latency based blacklist
+#   Input type  : Input value should be combination of first 3 bytes of BD address and
+#                 Hexadecimal value of SSR Max Latency
+#   Format Type : Address should be in XX:XX:XX format followed by 2 bytes hex value
+#                 of max latency Address and Max Latency should be separated with delimiter(-).
+#   Examples    : 00:01:03-0X00AB = SSR_Max_Lat_Based
+#####
+#   F. Version_Based : This tag refers to DID Version based blacklist
+#   Input type  : Input value should be Hexadecimal value
+#   Format Type : 2 bytes hex value
+#   Examples    : 0X00AB = Version_Based
+# ******************************* Start of Blacklist Database ********************************
+#Disable secure connections
+#This is for pre BT 4.1/2 devices that do not handle secure mode very well.
+[INTEROP_DISABLE_LE_SECURE_CONNECTIONS]
+08:62:66 = Address_Based
+38:2C:4A:C9 = Address_Based
+38:2C:4A:E6 = Address_Based
+54:A0:50:D9 = Address_Based
+AC:9E:17 = Address_Based
+F0:79:59 = Address_Based
+80:E4:DA:70 = Address_Based
+1C:96:5A = Address_Based
+80:EA:CA = Address_Based
+51:01:00 = Address_Based
+61:01:00 = Address_Based
+9C:5C:8E = Address_Based
+2C:56:DC = Address_Based
+30:5A:3A = Address_Based
+1C:B7:2C = Address_Based
+14:DD:A9 = Address_Based
+1C:87:2C = Address_Based
+
+# Devices requiring this workaround do not handle Bluetooth Absolute Volume
+# control correctly, leading to undesirable (potentially harmful) volume levels
+# or general lack of controlability.
+[INTEROP_DISABLE_ABSOLUTE_VOLUME]
+A0:E9:DB = Address_Based
+00:14:02 = Address_Based
+1C:48:F9 = Address_Based
+44:5E:F3 = Address_Based
+D4:9C:28 = Address_Based
+00:18:6B = Address_Based
+B8:AD:3E = Address_Based
+00:11:B1 = Address_Based
+A4:15:66 = Address_Based
+00:14:F1 = Address_Based
+00:26:7E = Address_Based
+90:03:B7 = Address_Based
+04:F8:C2 = Address_Based
+00:18:91 = Address_Based
+00:24:1C = Address_Based
+00:08:8b = Address_Based
+94:16:25 = Address_Based
+D0:5F:B8 = Address_Based
+C8:FD:19 = Address_Based
+00:10:01 = Address_Based
+AC:E6:4B = Address_Based
+MiPow_Vox500 = Name_Based
+
+# Disable automatic pairing with headsets/car-kits
+# Some car kits do not react kindly to a failed pairing attempt and
+# do not allow immediate re-pairing. Blacklist these so that the initial
+# pairing attempt makes it to the user instead
+[INTEROP_DISABLE_AUTO_PAIRING]
+34:C7:31 = Address_Based
+00:07:04 = Address_Based
+E0:75:0A = Address_Based
+00:13:E0 = Address_Based
+00:21:E8 = Address_Based
+90:03:B7 = Address_Based
+Audi = Name_Based
+BMW = Name_Based
+Parrot = Name_Based
+Car = Name_Based
+NISSAN = Name_Based
+
+# Use a fixed pin for specific keyboards
+# Keyboards should use a variable pin at all times. However, some keyboards
+# require a fixed pin of all 0000. This workaround enables auto pairing for
+# those keyboards.
+[INTEROP_KEYBOARD_REQUIRES_FIXED_PIN]
+00:0F:F6 = Address_Based
+
+# Some headsets have audio jitter issues because of increased re-transmissions as the
+# 3 Mbps packets have a lower link margin, and are more prone to interference. We can
+# disable 3DH packets (use only 2DH packets) for the ACL link to improve sensitivity
+# when streaming A2DP audio to the headset. Air sniffer logs show reduced
+# re-transmissions after switching to 2DH packets.
+# Disable 3Mbps packets and use only 2Mbps packets for ACL links when streaming audio.
+[INTEROP_2MBPS_LINK_ONLY]
+00:18:91 = Address_Based
+00:21:4F = Address_Based
+20:15:06 = Address_Based
+9C:DF:03 = Address_Based
+04:52:C7 = Address_Based
+30:14:4A = Address_Based
+00:54:AF = Address_Based
+7C:1C:4E = Address_Based
+50:65:83 = Address_Based
+00:1E:7C = Address_Based
+C8:84:47 = Address_Based
+D0:8A:55 = Address_Based
+48:F0:7B = Address_Based
+00:0A:08 = Address_Based
+00:11:2D = Address_Based
+
+# Some HID pointing devices have proven problematic behaviour if pairing is initiated with
+# them, resulting in no response for authentication request and ultimately resulting
+# in connection failure.
+# To avoid degrading the user experience with those devices, authentication request
+# is not requested explictly.
+[INTEROP_DISABLE_AUTH_FOR_HID_POINTING]
+00:12:A1 = Address_Based
+Targus BT Laser Notebook Mouse = Name_Based
+
+# HID Keyboards that claim support for multitouch functionality have issue with
+# normal functioning of keyboard because of issues in USB HID kernel driver.
+# To avoid degrading the user experience with those devices, digitizer record
+# is removed from the report descriptor.
+[INTEROP_REMOVE_HID_DIG_DESCRIPTOR]
+Motorola Keyboard KZ500 = Name_Based
+Motorola Keyboard KZ500 v122 = Name_Based
+0x22b8-0x093D = Vndr_Prdt_Based
+
+# Some HID devices have problematic behaviour where when hid link is in Sniff
+# and DUT is in Slave role for SCO link ( not eSCO) any solution cannot maintain
+# the link as  SCO scheduling over a short period will overlap with Sniff link due to
+# slave drift.
+# To avoid degrading the user experience with those devices, sniff is disabled from
+# link policy when sco is active, and enabled when sco is disabled.
+[INTEROP_DISABLE_SNIFF_DURING_SCO]
+20:4C:10 = Address_Based
+0x004C = Manufacturer_Based
+
+# Few carkits take long time to start sending AT commands
+# Increase AG_CONN TIMEOUT so that AG connection go through
+[INTEROP_INCREASE_AG_CONN_TIMEOUT]
+00:14:09 = Address_Based
+
+# Some HOGP devices do not respond well when we switch from default LE conn parameters
+# to preferred conn params immediately post connection. Disable automatic switching to
+# preferred conn params for such devices and allow them to explicity ask for it.
+[INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS]
+BSMBB09DS = Name_Based
+ELECOM = Name_Based
+
+# Few remote devices do not understand AVRCP version greater than 1.3. For these
+# devices, we would like to blacklist them and advertise AVRCP version as 1.3
+[INTEROP_ADV_AVRCP_VER_1_3]
+38:C0:96 = Address_Based
+CAR LS460L = Name_Based
+
+# Fallback to AVRCP version 1.4 for remote to initiate browse connection
+[INTEROP_STORE_REMOTE_AVRCP_VERSION_1_4]
+00:02:5B:4A = Address_Based
+
+# Disable role switch for headsets/car-kits
+# Some car kits allow role switch but when DUT initiates role switch
+# Remote will go to bad state and its leads to LMP time out.
+[INTEROP_DISABLE_ROLE_SWITCH]
+FC:C2:DE = Address_Based
+00:26:B4 = Address_Based
+00:04:3E = Address_Based
+00:23:01 = Address_Based
+1C:48:F9 = Address_Based
+00:54:AF = Address_Based
+00:26:E8 = Address_Based
+00:37:6D = Address_Based
+9C:3A:AF = Address_Based
+00:18:91 = Address_Based
+0C:E0:E4 = Address_Based
+00:07:04 = Address_Based
+A4:15:66 = Address_Based
+D0:13:1E = Address_Based
+8F:20:B4 = Address_Based
+A8:B9:B3 = Address_Based
+00:0D:F0 = Address_Based
+00:08:E0 = Address_Based
+00:25:52 = Address_Based
+1C:52:16 = Address_Based
+00:06:66 = Address_Based
+00:24:E4 = address_Based
+00:1C:D8 = Address_Based
+AC:FD:CE = Address_Based
+08:76:95 = Address_Based
+00:00:45 = Address_Based
+EB:06:EF = Address_Based
+74:95:EC = Address_Based
+00:08:8A = Address_Based
+C0:7A:A5 = Address_Based
+00:01:95 = Address_Based
+00:1A:7D = Address_Based
+00:11:13 = Address_Based
+00:1B:41 = Address_Based
+30:FA:B7 = Address_Based
+
+# Disable role switch policy for headsets/car-kits
+# Some car kits initiate a role switch but won't initiate encryption
+# after role switch complete
+[INTEROP_DISABLE_ROLE_SWITCH_POLICY]
+00:0D:FD = Address_Based
+00:1B:DC = Address_Based
+00:07:04 = Address_Based
+A4:15:66 = Address_Based
+00:54:AF = Address_Based
+00:23:7F = Address_Based
+
+# certain remote A2DP sinks have issue playing back Music in AAC format.
+# disable AAC for those headsets so that it switch to SBC
+# 1. byte alignment issues with encoder (solo3::20:3c:ae,airpods::4c:32:75)
+# 2. remote sending 128 instead of 128k as bitrate (cadillac::28:a1:83, Chevrolet Tahoe,
+#    buick_verano::ac:7a:4d(moved to name based, maruti_brezzai:28:a1:83,
+#    cadillac cue::e0:75:0a, 30:C3:D9)
+# 3. remote supporting only 44.1Khz (BIG-JAM-BOX::00-21-3c,JVC CK::00:1D:86,BMW CK::9C:DF:03)
+[INTEROP_DISABLE_AAC_CODEC]
+28:A1:83 = Address_Based
+A0:14:3D = Address_Based
+90:03:B7 = Address_Based
+00:21:3c = Address_Based
+9C:DF:03 = Address_Based
+E0:75:0A = Address_Based
+48:F0:7B = Address_Based
+04:52:C7 = Address_Based
+30:C3:D9 = Address_Based
+00:E0:4C = Address_Based
+48:A9:D2 = Address_Based
+abramtek M1 = Name_Based
+Buick Verano = Name_Based
+
+#Enable AAC encoder only for whitelist devices
+
+#0xb8-ad-3e-d2-4b-4b  ==> Name: LG HBSA100
+#0xb8-ad-3e-e7-13-84  ==> Name: LG HBS1100
+#0x00-18-09-95-04-c1  ==> Name: MDR-XB80BS
+#0x7c-04-d0-9a-75-ad  ==> Name: AirPods
+#24:F6:77:A7:57:F7    ==> Name: AirPods
+#A8:BE:27:03:4A:2F    ==> Name: BeatsX
+#E0:D1:E6:09:AB:B2    ==> Name: MINIJAMBOX by Jawbone
+#2C:41:A1:3D:2B:B9    ==> Name: Bose SoundSport
+#2C:41:A1:48:FB:9A    ==> Name: Bose QC35 II
+#94:B2:CC:42:C9:59    ==> Name: AVH-A208BT
+#DC:A4:CA:C0:C6:0B    ==> Name: Beats Solo³
+#0x48-d6-d5-bc-79-43  ==> Name: Pixel Buds 7943
+#0x8c-de-52-df-79-8e  ==> Name: SRS-X33
+#0x04-5d-4b-ec-2c-4c  ==> Name: WH-1000XM2
+#0x04-5d-4b-40-e7-1e  ==> Name: h.ear (MDR-100ABN)
+#0x04-5d-4b-df-3e-70  ==> Name: WI-1000X
+#0x04-5d-4b-eb-69-87  ==> Name: WH-H800 (h.ear)
+#0x04-5d-4b-66-bd-26  ==> Name: MDR-1000X
+#0x04-5d-4b-66-c1-f6  ==> Name: WI-H700 (h.ear)
+#0x04-5d-4b-99-f0-5d  ==> Name: WH-H900N (h.ear)
+#0x10-4f-a8-e9-79-eb  ==> Name: MDR-1ABT
+#0x10-4f-a8-15-b9-5a  ==> Name: h.ear (MDR-EX750BT)
+#0xac-9b-0a-bd-1f-20  ==> Name: MDR-ZX770BN
+#0x04-52-c7-c5-d2-94  ==> Name: Bose QuietComfort 35
+#0x0c-e0-e4-64-26-a3  ==> Name: PLT_BBTPRO
+#0xa4-15-66-4b-4d-24  ==> Name: Tracks Air
+#0x00-1a-7d-82-36-4b  ==> Name: 66 Audio BTS
+#0x88-e6-03-80-48-6b  ==> Name: XB10
+#0xb8-69-c2-eb-ae-66  ==> Name: SRS-XB3
+#0x58-e2-8f-e9-09-7b  ==> Name: BeatsStudio Wireless
+#CarKits
+#0x94-b2-cc-28-99-77  ==> Name: AVH-X5890BT  ==>pioneer
+#0x74-5e-1c-98-88-64  ==> Name: AVH-X5790BT ==>pioneer
+#0x00-1d-86-a4-ea-a6  ==> Name: Car Multimedia ===>JVC
+#0x00-1d-86-a0-79-c2  ==> Name: DDX6 ==>kenwood
+#0x90-03-b7-6c-89-aa  ==> Name: Parrot ASTEROID
+#0x30-c3-d9-85-34-ce  ==> Name: MB Bluetooth 84389
+#0x00-02-5b-00-85-ca  ==> Naae: HATS_00025B0085E9
+
+[INTEROP_ENABLE_AAC_CODEC]
+B8:AD:3E = Address_Based
+LG HBSA100 = Name_Based
+LG HBS1100 = Name_Based
+00:18:09 = Address_Based
+MDR-XB80BS = Name_Based
+7C:04:D0 = Address_Based
+24:F6:77 = Address_Based
+AirPods = Name_Based
+48:D6:D5 = Address_Based
+Pixel Buds 7943 = Name_Based
+8C:DE:52 = Address_Based
+SRS-X33 = Name_Based
+04:5D:4B = Address_Based
+WH-1000XM2 = Name_Based
+h.ear (MDR-100ABN) = Name_Based
+WI-1000X = Name_Based
+WH-H800 (h.ear) = Name_Based
+MDR-1000X = Name_Based
+WI-H700 (h.ear) = Name_Based
+WH-H900N (h.ear) = Name_Based
+10:4F:A8 = Address_Based
+MDR-1ABT = Name_Based
+h.ear (MDR-EX750BT) = Name_Based
+AC:9B:0A = Address_Based
+MDR-ZX770BN = Name_Based
+04:52:C7 = Address_Based
+Bose QuietComfort 35 = Name_Based
+94:B2:CC = Address_Based
+AVH-X5890BT = Name_Based
+AVH-A208BT = Name_Based
+74:5E:1C = Address_Based
+AVH-X5790BT = Name_Based
+00:1D:86 = Address_Based
+Car Multimedia = Name_Based
+DDX6 = Name_Based
+90:03:B7 = Address_Based
+Parrot ASTEROID = Name_Based
+0C:E0:E4 = Address_Based
+PLT_BBTPRO = Name_Based
+A4:15:66 = Address_Based
+Tracks Air = Name_Based
+00:1A:7D = Address_Based
+66 Audio BTS = Name_Based
+88:E6:03 = Address_Based
+XB10 = Name_Based
+B8:69:C2 = Address_Based
+SRS-XB3 = Name_Based
+30:C3:D9 = Address_Based
+MB Bluetooth 84389 = Name_Based
+00:02:5B = Address_Based
+HATS_00025B0085E9 = Name_Based
+A8:BE:27 = Address_Based
+BeatsX = Name_Based
+E0:D1:E6 = Address_Based
+MINIJAMBOX by Jawbone = Name_Based
+2C:41:A1 = Address_Based
+Bose SoundSport = Name_Based
+Bose QC35 II = Name_Based
+DC:A4:CA = Address_Based
+Beats Solo³ = Name_Based
+58:E2:8F = Address_Based
+BeatsStudio Wireless = Name_Based
+FC:4B:BC = Address_Based
+XAV-AX100 = Name_Based
+00:18:6b = Address_Based
+LG HBS730 = Name_Based
+8C:57:9B = Address_Based
+h.ear go (SRS-HG1) = Name_Based
+40:ED:98 = Address_Based
+FiiO BTR1K = Name_Based
+0C:A6:94 = Address_Based
+HK Soho Wireless = Name_Based
+00:09:A7 = Address_Based
+Beoplay H4 = Name_Based
+70:26:05 = Address_Based
+WF-SP700N = Name_Based
+48:D6:D5 = Address_Based
+Pixel Buds = Name_Based
+00:09:a7 = Address_Based
+Beoplay E8 = Name_Based
+2C:41:A1 = Address_Based
+Bose SoundWear = Name_Based
+2C:41:A1 = Address_Based
+Bose Free SoundSport = Name_Based
+00:18:09 = Address_Based
+Samsung Level On = Name_Based
+
+
+#E0:D1:E6 = Address_Based
+#00:18:6b = Address_Based
+#20:3c:ae = Address_Based
+#04:88:e2 = Address_Based
+#4c:32:75 = Address_Based
+#00:14:07 = Address_Based
+#94:20:53 = Address_Based
+
+# Devices requiring this workaround do not handle Bluetooth PBAP 1.2
+# version correctly, leading them to go in bad state. So for better
+# interoperability respond with PBAP 1.1 as supported version.
+[INTEROP_ADV_PBAP_VER_1_1]
+
+# Devices requiring this workaround do not handle Bluetooth PBAP 1.1
+# version correctly, leading them to go in bad state. So for better
+# interoperability respond with PBAP 1.2 as supported version.
+[INTEROP_ADV_PBAP_VER_1_2]
+
+# Devices requiring this workaround do not handle SSR max latency values as mentioned,
+# in their SDP HID Record properly and lead to connection timeout or lags. To prevent
+# such scenarios, device requiring this workaorund need to use specific ssr max latency
+# values.
+[INTEROP_UPDATE_HID_SSR_MAX_LAT]
+00:1B:DC-0x0012 = SSR_Max_Lat_Based
+DC:2C:26-0x0000 = SSR_Max_Lat_Based
+54:46:6B-0x0001 = SSR_Max_Lat_Based
+
+#Some device reports support for hf indicator, but it's HFP version as 1.5. The
+#behaviour violates spec and shall cause problem when DUT support HFP1.7, thus
+#blacklisting such devices and remove remote's hf indicator bit if not support HFP1.7.
+[INTEROP_DISABLE_HF_INDICATOR]
+98:7b:f3 = Address_Based
+
+#Ensure that call active indicator is sent prior to SCO connection
+#request by adding some delay. Some remotes are very strict in the
+#order of call indicator and SCO connection request.
+#1 04:52:c7 - Bose Mini II sound link
+[INTEROP_DELAY_SCO_FOR_MT_CALL]
+04:52:c7 = Address_Based
+08:df:1f = Address_Based
+Bose Mini II SoundLink = Name_Based
+
+# Some remotes ara taking longer to respond to +BCS during codec negotiation.
+# Disable codec negotiation and directly initiate SCO connection for those.
+# 1. M12 - 00:08:8a:f0:1d:8a
+[INTEROP_DISABLE_CODEC_NEGOTIATION]
+00:08:8a = Address_Based
+00:1A:7D = Address_Based
+66 Audio BTS = Name_Based
+JABRA EASYGO = Name_Based
+
+# Disallow sending Player Application Setting Commands for some CK as they are unable
+# to send Passthrough Command while Streaming is in progress
+# Porsche Panamera :: 74:6f:f7:8c:bf:61
+# BMW X3 :: a0:56:b2:4f:86:a8
+[INTEROP_DISABLE_PLAYER_APPLICATION_SETTING_CMDS]
+00:09:93 = Address_Based
+74:6f:f7 = Address_Based
+A0:56:B2:4F = Address_Based
+00:54:AF = Address_Based
+
+[INTEROP_DISABLE_CONNECTION_AFTER_COLLISION]
+A0:14:3D
+
+# Do not use supervision timeout value received from preferred connection
+# parameters, use 3s instead. Use with HID only.
+[INTEROP_HID_PREF_CONN_SUP_TIMEOUT_3S]
+08:62:66 = Address_Based
+38:2C:4A:C9 = Address_Based
+38:2C:4A:E6 = Address_Based
+54:A0:50:D9 = Address_Based
+AC:9E:17 = Address_Based
+F0:79:59 = Address_Based
+
+# Do not use AVDTP RECONFIGURE when reconfiguring A2DP streams.
+# Some A2DP Sink devices report SUCCESS to the AVDTP RECONFIGURE command,
+# but fail to play the reconfigured audio stream.
+[INTEROP_DISABLE_AVDTP_RECONFIGURE]
+00:1D:86 =  Address_Based
+KMM-BT51*HD = Name_Based
+
+[INTEROP_GATTC_NO_SERVICE_CHANGED_IND]
+Pixel C Keyboard = Name_Based
+MiMouse = Name_Based
+HTC Fetch = Name_Based
+
+#Some LE devices have proven problematic behaviour if LE connection update is initiated with
+#them, resulting in no response after initiating LE connection update and ultimately resulting
+#in connection timeout. To avoid degrading the user experience with those devices,
+#LE connection update is not requested explictly for those devices.
+[INTEROP_DISABLE_LE_CONN_UPDATES]
+LG Lighting = Name_Based
+KS_5w4Zu = Name_Based
+ZUK = Name_Based
+ITAG = Name_Based
+Pokemon GO Plus = Name_Based
+
+#Few remote sends avrcp browsing request just after host sends avrcp browsing request leading
+#collision which results in browsing channel open failure. For such devices, collision timer
+#of 1 sec is used avoid collision.
+#Porsche Macan 2018 :: 2c:dc:ad:08:91:89
+#Porsche Panamera  :: 74:6f:f7:8c:bf:61
+[INTEROP_AVRCP_BROWSE_OPEN_CHANNEL_COLLISION]
+2c:dc:ad:08 = Address_Based
+74:6f:f7 = Address_Based
+90:03:b7 = Address_Based
+00:06:F5 = Address_Based
+
+#Some remote devices don't support sniff mode when the SCO is connected.
+#For such devices, disable sniff mode after SCO is connected and make
+#the link as active.
+#Benz Car kit :: 50:65:83:8e:1d:43
+#Sony Ear Duo :: 28:3f:69:ff:50:bd
+#AirPods
+[INTEROP_DISABLE_SNIFF_LINK_DURING_SCO]
+50:65:83 = Address_Based
+28:3f:69 = Address_Based
+AirPods = Name_Based
+
+#Enable power level 10 adaptive control in FW side for remote devices
+#in this whitelist item.
+[INTEROP_ENABLE_PL10_ADAPTIVE_CONTROL]
+
+#For some remote devices, disable sniff mode during the call
+#as some remotes need call indicators in active mode
+#Leviathan Mini :: 10:b7:f6:03:38:b0
+[INTEROP_DISABLE_SNIFF_DURING_CALL]
+10:b7:f6 = Address_Based
+
+#Nintendo Switch Pro Controller - does not set sniff interval dynamically.
+#Requires custom HID report command to change mode.
+[INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL]
+98:B6:E9 = Address_Based
diff --git a/prebuilt/system/etc/firmware/Phone_vivid.txt b/prebuilt/system/etc/firmware/Phone_vivid.txt
new file mode 100644
index 0000000..343b508
--- /dev/null
+++ b/prebuilt/system/etc/firmware/Phone_vivid.txt
@@ -0,0 +1,33 @@
+0xCA
+0x01
+0x00
+0x95
+0x8B
+0x9B
+0xAF
+0x9C
+0x94
+0x20
+0x1A
+0x0F
+0x8E
+0x0A
+0x4A
+0x37
+0xA0
+0x55
+0xF8
+0x0C
+0x10
+0x20
+0x20
+0x3F
+0x3F
+0x00
+0x02
+0x10
+0x10
+0x3F
+0x3F
+0x3F
+0x3F
diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC01.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC01.txt
new file mode 100644
index 0000000..ca329e0
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC01.txt
@@ -0,0 +1,3 @@
+0.80883 0.17958 0.00041

+0.03217 0.96346 0.00041

+0.01533 0.06683 0.92214

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC02.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC02.txt
new file mode 100644
index 0000000..ea82637
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC02.txt
@@ -0,0 +1,3 @@
+0.79439 0.17803 0.00041

+0.03160 0.95517 0.00041

+0.01505 0.06625 0.92227

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC03.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC03.txt
new file mode 100644
index 0000000..265043d
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC03.txt
@@ -0,0 +1,3 @@
+0.78121 0.17675 0.00041

+0.03107 0.94829 0.00041

+0.01480 0.06577 0.92365

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC04.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC04.txt
new file mode 100644
index 0000000..ae2ba27
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC04.txt
@@ -0,0 +1,3 @@
+0.76733 0.17529 0.00041

+0.03052 0.94045 0.00041

+0.01454 0.06523 0.92401

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC05.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC05.txt
new file mode 100644
index 0000000..af56cf4
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC05.txt
@@ -0,0 +1,3 @@
+0.75430 0.17400 0.00041

+0.03000 0.93355 0.00041

+0.01429 0.06475 0.92519

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC06.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC06.txt
new file mode 100644
index 0000000..cd94672
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC06.txt
@@ -0,0 +1,3 @@
+0.74058 0.17254 0.00041

+0.02946 0.92568 0.00041

+0.01403 0.06421 0.92532

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC07.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC07.txt
new file mode 100644
index 0000000..9b94fea
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC07.txt
@@ -0,0 +1,3 @@
+0.72808 0.17133 0.00041

+0.02896 0.91923 0.00041

+0.01380 0.06376 0.92676

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC08.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC08.txt
new file mode 100644
index 0000000..854c9d1
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC08.txt
@@ -0,0 +1,3 @@
+0.71527 0.17004 0.00041

+0.02845 0.91228 0.00041

+0.01355 0.06328 0.92763

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC09.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC09.txt
new file mode 100644
index 0000000..764f2f2
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC09.txt
@@ -0,0 +1,3 @@
+0.70179 0.16856 0.00041

+0.02791 0.90437 0.00041

+0.01330 0.06273 0.92742

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC10.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC10.txt
new file mode 100644
index 0000000..eee1a0d
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC10.txt
@@ -0,0 +1,3 @@
+0.68951 0.16735 0.00041

+0.02743 0.89787 0.00041

+0.01306 0.06228 0.92856

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC11.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC11.txt
new file mode 100644
index 0000000..6e1a014
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC11.txt
@@ -0,0 +1,3 @@
+0.67729 0.16614 0.00041

+0.02694 0.89137 0.00041

+0.01283 0.06183 0.92961

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC12.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC12.txt
new file mode 100644
index 0000000..ef249fa
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC12.txt
@@ -0,0 +1,3 @@
+0.66478 0.16484 0.00041

+0.02644 0.88437 0.00041

+0.01260 0.06134 0.93005

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC13.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC13.txt
new file mode 100644
index 0000000..8bda228
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC13.txt
@@ -0,0 +1,3 @@
+0.65270 0.16362 0.00041

+0.02596 0.87784 0.00041

+0.01237 0.06089 0.93090

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC14.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC14.txt
new file mode 100644
index 0000000..55b063d
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC14.txt
@@ -0,0 +1,3 @@
+0.64070 0.16240 0.00041

+0.02548 0.87129 0.00041

+0.01214 0.06043 0.93164

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC15.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC15.txt
new file mode 100644
index 0000000..cd2b621
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC15.txt
@@ -0,0 +1,3 @@
+0.62876 0.16118 0.00041

+0.02501 0.86474 0.00041

+0.01191 0.05998 0.93229

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC16.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC16.txt
new file mode 100644
index 0000000..8f5c2f8
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC16.txt
@@ -0,0 +1,3 @@
+0.61690 0.15995 0.00041

+0.02454 0.85816 0.00041

+0.01169 0.05952 0.93283

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC17.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC17.txt
new file mode 100644
index 0000000..66b8518
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC17.txt
@@ -0,0 +1,3 @@
+0.60545 0.15881 0.00042

+0.02408 0.85206 0.00042

+0.01147 0.05910 0.93380

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC18.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC18.txt
new file mode 100644
index 0000000..cb0b74c
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC18.txt
@@ -0,0 +1,3 @@
+0.59373 0.15758 0.00042

+0.02362 0.84547 0.00042

+0.01125 0.05864 0.93415

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC19.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC19.txt
new file mode 100644
index 0000000..b14fdb4
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC19.txt
@@ -0,0 +1,3 @@
+0.58208 0.15635 0.00042

+0.02315 0.83886 0.00042

+0.01103 0.05818 0.93439

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC20.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC20.txt
new file mode 100644
index 0000000..650a8f6
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC20.txt
@@ -0,0 +1,3 @@
+0.57126 0.15532 0.00042

+0.02272 0.83332 0.00042

+0.01082 0.05780 0.93574

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC21.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC21.txt
new file mode 100644
index 0000000..d54bc78
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC21.txt
@@ -0,0 +1,3 @@
+0.56000 0.15415 0.00042

+0.02227 0.82705 0.00042

+0.01061 0.05736 0.93619

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC22.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC22.txt
new file mode 100644
index 0000000..0b6f355
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC22.txt
@@ -0,0 +1,3 @@
+0.54889 0.15300 0.00042

+0.02183 0.82089 0.00042

+0.01040 0.05694 0.93668

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC23.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC23.txt
new file mode 100644
index 0000000..765c526
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMC23.txt
@@ -0,0 +1,3 @@
+0.53822 0.15195 0.00042

+0.02141 0.81526 0.00042

+0.01020 0.05655 0.93771

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC01.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC01.txt
new file mode 100644
index 0000000..d2c29be
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC01.txt
@@ -0,0 +1,3 @@
+0.98882 -0.00000 -0.00000

+0.00000 0.99604 0.00000

+0.00000 0.00000 1.00429

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC02.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC02.txt
new file mode 100644
index 0000000..306b7c3
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC02.txt
@@ -0,0 +1,3 @@
+0.97283 -0.00000 -0.00000

+0.00000 0.98718 0.00000

+0.00000 0.00000 1.00357

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC03.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC03.txt
new file mode 100644
index 0000000..c1d3aa3
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC03.txt
@@ -0,0 +1,3 @@
+0.95837 -0.00000 -0.00000

+0.00000 0.97978 0.00000

+0.00000 0.00000 1.00423

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC04.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC04.txt
new file mode 100644
index 0000000..bfa81a9
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC04.txt
@@ -0,0 +1,3 @@
+0.94303 -0.00000 -0.00000

+0.00000 0.97139 0.00000

+0.00000 0.00000 1.00378

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC05.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC05.txt
new file mode 100644
index 0000000..df94837
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC05.txt
@@ -0,0 +1,3 @@
+0.92871 -0.00000 -0.00000

+0.00000 0.96396 0.00000

+0.00000 0.00000 1.00423

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC06.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC06.txt
new file mode 100644
index 0000000..2e7d5fb
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC06.txt
@@ -0,0 +1,3 @@
+0.91353 -0.00000 0.00000

+0.00000 0.95555 -0.00000

+0.00000 0.00000 1.00356

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC07.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC07.txt
new file mode 100644
index 0000000..80db7ce
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC07.txt
@@ -0,0 +1,3 @@
+0.89982 -0.00000 0.00000

+0.00000 0.94860 -0.00000

+0.00000 0.00000 1.00432

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC08.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC08.txt
new file mode 100644
index 0000000..66b6ed8
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC08.txt
@@ -0,0 +1,3 @@
+0.88572 -0.00000 -0.00000

+0.00000 0.94114 -0.00000

+0.00000 0.00000 1.00446

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC09.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC09.txt
new file mode 100644
index 0000000..93d524a
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC09.txt
@@ -0,0 +1,3 @@
+0.87077 -0.00000 -0.00000

+0.00000 0.93270 0.00000

+0.00000 0.00000 1.00344

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC10.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC10.txt
new file mode 100644
index 0000000..9340d4c
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC10.txt
@@ -0,0 +1,3 @@
+0.85727 -0.00000 0.00000

+0.00000 0.92571 0.00000

+0.00000 0.00000 1.00390

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC11.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC11.txt
new file mode 100644
index 0000000..d76025d
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC11.txt
@@ -0,0 +1,3 @@
+0.84384 -0.00000 0.00000

+0.00000 0.91872 0.00000

+0.00000 0.00000 1.00427

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC12.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC12.txt
new file mode 100644
index 0000000..baba164
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC12.txt
@@ -0,0 +1,3 @@
+0.83003 -0.00000 0.00000

+0.00000 0.91123 -0.00000

+0.00000 0.00000 1.00399

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC13.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC13.txt
new file mode 100644
index 0000000..d41a473
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC13.txt
@@ -0,0 +1,3 @@
+0.81673 -0.00000 0.00000

+0.00000 0.90421 -0.00000

+0.00000 0.00000 1.00415

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC14.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC14.txt
new file mode 100644
index 0000000..b38a3b4
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC14.txt
@@ -0,0 +1,3 @@
+0.80351 -0.00000 -0.00000

+0.00000 0.89719 0.00000

+0.00000 0.00000 1.00422

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC15.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC15.txt
new file mode 100644
index 0000000..e4a03c9
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC15.txt
@@ -0,0 +1,3 @@
+0.79035 -0.00000 0.00000

+0.00000 0.89016 0.00000

+0.00000 0.00000 1.00418

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC16.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC16.txt
new file mode 100644
index 0000000..18567c5
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC16.txt
@@ -0,0 +1,3 @@
+0.77726 -0.00000 0.00000

+0.00000 0.88312 0.00000

+0.00000 0.00000 1.00404

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC17.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC17.txt
new file mode 100644
index 0000000..46e3825
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC17.txt
@@ -0,0 +1,3 @@
+0.76468 -0.00000 0.00000

+0.00000 0.87656 0.00000

+0.00000 0.00000 1.00438

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC18.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC18.txt
new file mode 100644
index 0000000..71552a1
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC18.txt
@@ -0,0 +1,3 @@
+0.75173 -0.00000 -0.00000

+0.00000 0.86950 0.00000

+0.00000 0.00000 1.00404

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC19.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC19.txt
new file mode 100644
index 0000000..9fcca77
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC19.txt
@@ -0,0 +1,3 @@
+0.73885 -0.00000 0.00000

+0.00000 0.86243 0.00000

+0.00000 0.00000 1.00360

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC20.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC20.txt
new file mode 100644
index 0000000..30e2d75
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC20.txt
@@ -0,0 +1,3 @@
+0.72700 -0.00000 -0.00000

+0.00000 0.85646 0.00000

+0.00000 0.00000 1.00437

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC21.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC21.txt
new file mode 100644
index 0000000..ab9d6b0
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC21.txt
@@ -0,0 +1,3 @@
+0.71457 -0.00000 -0.00000

+0.00000 0.84974 0.00000

+0.00000 0.00000 1.00417

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC22.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC22.txt
new file mode 100644
index 0000000..f25b521
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC22.txt
@@ -0,0 +1,3 @@
+0.70231 -0.00000 -0.00000

+0.00000 0.84314 0.00000

+0.00000 0.00000 1.00402

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC23.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC23.txt
new file mode 100644
index 0000000..c670c5f
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCC23.txt
@@ -0,0 +1,3 @@
+0.69059 -0.00000 0.00000

+0.00000 0.83709 -0.00000

+0.00000 0.00000 1.00445

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCDEF.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCDEF.txt
new file mode 100644
index 0000000..97805fd
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCDEF.txt
@@ -0,0 +1,3 @@
+1.00000 -0.00000 -0.00000

+0.00000 1.00000 0.00000

+0.00000 0.00000 1.00000

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW01.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW01.txt
new file mode 100644
index 0000000..7140175
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW01.txt
@@ -0,0 +1,3 @@
+1.00335 -0.00000 -0.00000

+0.00000 1.00061 0.00000

+0.00000 0.00000 0.98625

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW02.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW02.txt
new file mode 100644
index 0000000..b862ff1
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW02.txt
@@ -0,0 +1,3 @@
+1.00371 -0.00000 -0.00000

+0.00000 0.99828 0.00000

+0.00000 0.00000 0.96979

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW03.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW03.txt
new file mode 100644
index 0000000..f5acde9
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW03.txt
@@ -0,0 +1,3 @@
+1.00426 -0.00000 0.00000

+0.00000 0.99619 -0.00000

+0.00000 0.00000 0.95380

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW04.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW04.txt
new file mode 100644
index 0000000..b3a1378
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW04.txt
@@ -0,0 +1,3 @@
+1.00427 -0.00000 -0.00000

+0.00000 0.99359 0.00000

+0.00000 0.00000 0.93755

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW05.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW05.txt
new file mode 100644
index 0000000..3fe20e6
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW05.txt
@@ -0,0 +1,3 @@
+1.00348 -0.00000 -0.00000

+0.00000 0.99026 0.00000

+0.00000 0.00000 0.92084

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW06.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW06.txt
new file mode 100644
index 0000000..641e5d7
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW06.txt
@@ -0,0 +1,3 @@
+1.00412 -0.00000 0.00000

+0.00000 0.98838 -0.00000

+0.00000 0.00000 0.90571

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW07.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW07.txt
new file mode 100644
index 0000000..c459fb1
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW07.txt
@@ -0,0 +1,3 @@
+1.00372 -0.00000 0.00000

+0.00000 0.98551 -0.00000

+0.00000 0.00000 0.88990

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW08.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW08.txt
new file mode 100644
index 0000000..913fceb
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW08.txt
@@ -0,0 +1,3 @@
+1.00427 -0.00000 0.00000

+0.00000 0.98361 0.00000

+0.00000 0.00000 0.87517

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW09.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW09.txt
new file mode 100644
index 0000000..eb33818
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW09.txt
@@ -0,0 +1,3 @@
+1.00376 -0.00000 0.00000

+0.00000 0.98073 -0.00000

+0.00000 0.00000 0.85977

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW10.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW10.txt
new file mode 100644
index 0000000..995f379
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW10.txt
@@ -0,0 +1,3 @@
+1.00422 -0.00000 -0.00000

+0.00000 0.97881 0.00000

+0.00000 0.00000 0.84544

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW11.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW11.txt
new file mode 100644
index 0000000..d6dbf51
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW11.txt
@@ -0,0 +1,3 @@
+1.00361 -0.00000 0.00000

+0.00000 0.97591 0.00000

+0.00000 0.00000 0.83045

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW12.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW12.txt
new file mode 100644
index 0000000..ce8c418
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW12.txt
@@ -0,0 +1,3 @@
+1.00397 -0.00000 0.00000

+0.00000 0.97398 -0.00000

+0.00000 0.00000 0.81649

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW13.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW13.txt
new file mode 100644
index 0000000..e342ea0
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW13.txt
@@ -0,0 +1,3 @@
+1.00442 -0.00000 -0.00000

+0.00000 0.97217 0.00000

+0.00000 0.00000 0.80281

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW14.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW14.txt
new file mode 100644
index 0000000..b7a59f0
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW14.txt
@@ -0,0 +1,3 @@
+1.00406 -0.00000 0.00000

+0.00000 0.96961 -0.00000

+0.00000 0.00000 0.78870

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW15.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW15.txt
new file mode 100644
index 0000000..4b741db
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW15.txt
@@ -0,0 +1,3 @@
+1.00429 -0.00000 0.00000

+0.00000 0.96765 0.00000

+0.00000 0.00000 0.77527

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW16.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW16.txt
new file mode 100644
index 0000000..a1526ce
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW16.txt
@@ -0,0 +1,3 @@
+1.00345 -0.00000 -0.00000

+0.00000 0.96470 0.00000

+0.00000 0.00000 0.76124

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW17.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW17.txt
new file mode 100644
index 0000000..a560735
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW17.txt
@@ -0,0 +1,3 @@
+1.00411 -0.00000 0.00000

+0.00000 0.96323 -0.00000

+0.00000 0.00000 0.74854

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW18.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW18.txt
new file mode 100644
index 0000000..8fd0192
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW18.txt
@@ -0,0 +1,3 @@
+1.00422 -0.00000 -0.00000

+0.00000 0.96125 -0.00000

+0.00000 0.00000 0.73562

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW19.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW19.txt
new file mode 100644
index 0000000..152697c
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW19.txt
@@ -0,0 +1,3 @@
+1.00442 -0.00000 0.00000

+0.00000 0.95939 -0.00000

+0.00000 0.00000 0.72296

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW20.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW20.txt
new file mode 100644
index 0000000..101ba2f
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW20.txt
@@ -0,0 +1,3 @@
+1.00380 -0.00000 -0.00000

+0.00000 0.95678 0.00000

+0.00000 0.00000 0.70991

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW21.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW21.txt
new file mode 100644
index 0000000..6214a05
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW21.txt
@@ -0,0 +1,3 @@
+1.00431 -0.00000 0.00000

+0.00000 0.95528 -0.00000

+0.00000 0.00000 0.69784

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW22.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW22.txt
new file mode 100644
index 0000000..b1a4456
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW22.txt
@@ -0,0 +1,3 @@
+1.00426 -0.00000 0.00000

+0.00000 0.95328 0.00000

+0.00000 0.00000 0.68555

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW23.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW23.txt
new file mode 100644
index 0000000..78a5502
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMCW23.txt
@@ -0,0 +1,3 @@
+1.00444 -0.00000 0.00000

+0.00000 0.95151 -0.00000

+0.00000 0.00000 0.67360

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMDEF.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMDEF.txt
new file mode 100644
index 0000000..2fed739
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMDEF.txt
@@ -0,0 +1,3 @@
+0.81935 0.18024 0.00041

+0.03259 0.96700 0.00041

+0.01552 0.06707 0.91740

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC01.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC01.txt
new file mode 100644
index 0000000..d2c29be
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC01.txt
@@ -0,0 +1,3 @@
+0.98882 -0.00000 -0.00000

+0.00000 0.99604 0.00000

+0.00000 0.00000 1.00429

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC02.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC02.txt
new file mode 100644
index 0000000..306b7c3
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC02.txt
@@ -0,0 +1,3 @@
+0.97283 -0.00000 -0.00000

+0.00000 0.98718 0.00000

+0.00000 0.00000 1.00357

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC03.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC03.txt
new file mode 100644
index 0000000..c1d3aa3
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC03.txt
@@ -0,0 +1,3 @@
+0.95837 -0.00000 -0.00000

+0.00000 0.97978 0.00000

+0.00000 0.00000 1.00423

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC04.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC04.txt
new file mode 100644
index 0000000..bfa81a9
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC04.txt
@@ -0,0 +1,3 @@
+0.94303 -0.00000 -0.00000

+0.00000 0.97139 0.00000

+0.00000 0.00000 1.00378

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC05.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC05.txt
new file mode 100644
index 0000000..df94837
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC05.txt
@@ -0,0 +1,3 @@
+0.92871 -0.00000 -0.00000

+0.00000 0.96396 0.00000

+0.00000 0.00000 1.00423

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC06.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC06.txt
new file mode 100644
index 0000000..2e7d5fb
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC06.txt
@@ -0,0 +1,3 @@
+0.91353 -0.00000 0.00000

+0.00000 0.95555 -0.00000

+0.00000 0.00000 1.00356

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC07.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC07.txt
new file mode 100644
index 0000000..80db7ce
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC07.txt
@@ -0,0 +1,3 @@
+0.89982 -0.00000 0.00000

+0.00000 0.94860 -0.00000

+0.00000 0.00000 1.00432

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC08.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC08.txt
new file mode 100644
index 0000000..66b6ed8
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC08.txt
@@ -0,0 +1,3 @@
+0.88572 -0.00000 -0.00000

+0.00000 0.94114 -0.00000

+0.00000 0.00000 1.00446

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC09.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC09.txt
new file mode 100644
index 0000000..93d524a
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC09.txt
@@ -0,0 +1,3 @@
+0.87077 -0.00000 -0.00000

+0.00000 0.93270 0.00000

+0.00000 0.00000 1.00344

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC10.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC10.txt
new file mode 100644
index 0000000..9340d4c
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC10.txt
@@ -0,0 +1,3 @@
+0.85727 -0.00000 0.00000

+0.00000 0.92571 0.00000

+0.00000 0.00000 1.00390

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC11.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC11.txt
new file mode 100644
index 0000000..d76025d
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC11.txt
@@ -0,0 +1,3 @@
+0.84384 -0.00000 0.00000

+0.00000 0.91872 0.00000

+0.00000 0.00000 1.00427

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC12.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC12.txt
new file mode 100644
index 0000000..baba164
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC12.txt
@@ -0,0 +1,3 @@
+0.83003 -0.00000 0.00000

+0.00000 0.91123 -0.00000

+0.00000 0.00000 1.00399

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC13.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC13.txt
new file mode 100644
index 0000000..d41a473
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC13.txt
@@ -0,0 +1,3 @@
+0.81673 -0.00000 0.00000

+0.00000 0.90421 -0.00000

+0.00000 0.00000 1.00415

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC14.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC14.txt
new file mode 100644
index 0000000..b38a3b4
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC14.txt
@@ -0,0 +1,3 @@
+0.80351 -0.00000 -0.00000

+0.00000 0.89719 0.00000

+0.00000 0.00000 1.00422

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC15.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC15.txt
new file mode 100644
index 0000000..e4a03c9
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC15.txt
@@ -0,0 +1,3 @@
+0.79035 -0.00000 0.00000

+0.00000 0.89016 0.00000

+0.00000 0.00000 1.00418

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC16.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC16.txt
new file mode 100644
index 0000000..18567c5
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC16.txt
@@ -0,0 +1,3 @@
+0.77726 -0.00000 0.00000

+0.00000 0.88312 0.00000

+0.00000 0.00000 1.00404

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC17.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC17.txt
new file mode 100644
index 0000000..46e3825
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC17.txt
@@ -0,0 +1,3 @@
+0.76468 -0.00000 0.00000

+0.00000 0.87656 0.00000

+0.00000 0.00000 1.00438

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC18.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC18.txt
new file mode 100644
index 0000000..71552a1
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC18.txt
@@ -0,0 +1,3 @@
+0.75173 -0.00000 -0.00000

+0.00000 0.86950 0.00000

+0.00000 0.00000 1.00404

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC19.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC19.txt
new file mode 100644
index 0000000..9fcca77
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC19.txt
@@ -0,0 +1,3 @@
+0.73885 -0.00000 0.00000

+0.00000 0.86243 0.00000

+0.00000 0.00000 1.00360

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC20.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC20.txt
new file mode 100644
index 0000000..30e2d75
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC20.txt
@@ -0,0 +1,3 @@
+0.72700 -0.00000 -0.00000

+0.00000 0.85646 0.00000

+0.00000 0.00000 1.00437

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC21.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC21.txt
new file mode 100644
index 0000000..ab9d6b0
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC21.txt
@@ -0,0 +1,3 @@
+0.71457 -0.00000 -0.00000

+0.00000 0.84974 0.00000

+0.00000 0.00000 1.00417

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC22.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC22.txt
new file mode 100644
index 0000000..f25b521
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC22.txt
@@ -0,0 +1,3 @@
+0.70231 -0.00000 -0.00000

+0.00000 0.84314 0.00000

+0.00000 0.00000 1.00402

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC23.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC23.txt
new file mode 100644
index 0000000..c670c5f
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPC23.txt
@@ -0,0 +1,3 @@
+0.69059 -0.00000 0.00000

+0.00000 0.83709 -0.00000

+0.00000 0.00000 1.00445

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPDEF.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPDEF.txt
new file mode 100644
index 0000000..97805fd
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPDEF.txt
@@ -0,0 +1,3 @@
+1.00000 -0.00000 -0.00000

+0.00000 1.00000 0.00000

+0.00000 0.00000 1.00000

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRd01.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRd01.txt
new file mode 100644
index 0000000..5801e60
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRd01.txt
@@ -0,0 +1,3 @@
+0.90687 0.08100 0.01573

+0.04004 0.91858 0.01535

+0.03290 0.06460 0.70286

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRd02.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRd02.txt
new file mode 100644
index 0000000..88d5d7d
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRd02.txt
@@ -0,0 +1,3 @@
+0.88083 0.10314 0.02003

+0.05075 0.89979 0.01943

+0.03992 0.07838 0.64469

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRd03.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRd03.txt
new file mode 100644
index 0000000..5949283
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRd03.txt
@@ -0,0 +1,3 @@
+0.85454 0.12525 0.02432

+0.06137 0.88105 0.02347

+0.04619 0.09068 0.59007

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdStrong.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdStrong.txt
new file mode 100644
index 0000000..7715ac0
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdStrong.txt
@@ -0,0 +1,3 @@
+0.82805 0.14734 0.02861

+0.07189 0.86238 0.02748

+0.05174 0.10157 0.53882

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak.txt
new file mode 100644
index 0000000..cd542a6
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak.txt
@@ -0,0 +1,3 @@
+0.93404 0.05896 0.01145

+0.02928 0.93883 0.01125

+0.02513 0.04933 0.76589

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak01.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak01.txt
new file mode 100644
index 0000000..c8f9de1
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak01.txt
@@ -0,0 +1,3 @@
+0.93329 0.05891 0.01144

+0.02949 0.94561 0.01133

+0.02571 0.05047 0.78355

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak02.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak02.txt
new file mode 100644
index 0000000..053399f
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak02.txt
@@ -0,0 +1,3 @@
+0.93375 0.05894 0.01145

+0.02975 0.95382 0.01143

+0.02633 0.05170 0.80270

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak03.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak03.txt
new file mode 100644
index 0000000..6a8e877
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak03.txt
@@ -0,0 +1,3 @@
+0.93404 0.05896 0.01145

+0.03001 0.96204 0.01153

+0.02697 0.05295 0.82219

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak04.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak04.txt
new file mode 100644
index 0000000..4f02794
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak04.txt
@@ -0,0 +1,3 @@
+0.92685 0.05851 0.01136

+0.03003 0.96273 0.01154

+0.02741 0.05381 0.83547

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak05.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak05.txt
new file mode 100644
index 0000000..dfde925
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPRdWeak05.txt
@@ -0,0 +1,3 @@
+0.91892 0.05801 0.01127

+0.03003 0.96272 0.01154

+0.02783 0.05463 0.84827

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW01.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW01.txt
new file mode 100644
index 0000000..7140175
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW01.txt
@@ -0,0 +1,3 @@
+1.00335 -0.00000 -0.00000

+0.00000 1.00061 0.00000

+0.00000 0.00000 0.98625

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW02.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW02.txt
new file mode 100644
index 0000000..b862ff1
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW02.txt
@@ -0,0 +1,3 @@
+1.00371 -0.00000 -0.00000

+0.00000 0.99828 0.00000

+0.00000 0.00000 0.96979

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW03.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW03.txt
new file mode 100644
index 0000000..f5acde9
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW03.txt
@@ -0,0 +1,3 @@
+1.00426 -0.00000 0.00000

+0.00000 0.99619 -0.00000

+0.00000 0.00000 0.95380

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW04.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW04.txt
new file mode 100644
index 0000000..b3a1378
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW04.txt
@@ -0,0 +1,3 @@
+1.00427 -0.00000 -0.00000

+0.00000 0.99359 0.00000

+0.00000 0.00000 0.93755

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW05.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW05.txt
new file mode 100644
index 0000000..3fe20e6
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW05.txt
@@ -0,0 +1,3 @@
+1.00348 -0.00000 -0.00000

+0.00000 0.99026 0.00000

+0.00000 0.00000 0.92084

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW06.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW06.txt
new file mode 100644
index 0000000..641e5d7
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW06.txt
@@ -0,0 +1,3 @@
+1.00412 -0.00000 0.00000

+0.00000 0.98838 -0.00000

+0.00000 0.00000 0.90571

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW07.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW07.txt
new file mode 100644
index 0000000..c459fb1
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW07.txt
@@ -0,0 +1,3 @@
+1.00372 -0.00000 0.00000

+0.00000 0.98551 -0.00000

+0.00000 0.00000 0.88990

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW08.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW08.txt
new file mode 100644
index 0000000..913fceb
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW08.txt
@@ -0,0 +1,3 @@
+1.00427 -0.00000 0.00000

+0.00000 0.98361 0.00000

+0.00000 0.00000 0.87517

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW09.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW09.txt
new file mode 100644
index 0000000..eb33818
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW09.txt
@@ -0,0 +1,3 @@
+1.00376 -0.00000 0.00000

+0.00000 0.98073 -0.00000

+0.00000 0.00000 0.85977

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW10.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW10.txt
new file mode 100644
index 0000000..995f379
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW10.txt
@@ -0,0 +1,3 @@
+1.00422 -0.00000 -0.00000

+0.00000 0.97881 0.00000

+0.00000 0.00000 0.84544

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW11.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW11.txt
new file mode 100644
index 0000000..d6dbf51
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW11.txt
@@ -0,0 +1,3 @@
+1.00361 -0.00000 0.00000

+0.00000 0.97591 0.00000

+0.00000 0.00000 0.83045

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW12.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW12.txt
new file mode 100644
index 0000000..ce8c418
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW12.txt
@@ -0,0 +1,3 @@
+1.00397 -0.00000 0.00000

+0.00000 0.97398 -0.00000

+0.00000 0.00000 0.81649

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW13.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW13.txt
new file mode 100644
index 0000000..e342ea0
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW13.txt
@@ -0,0 +1,3 @@
+1.00442 -0.00000 -0.00000

+0.00000 0.97217 0.00000

+0.00000 0.00000 0.80281

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW14.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW14.txt
new file mode 100644
index 0000000..b7a59f0
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW14.txt
@@ -0,0 +1,3 @@
+1.00406 -0.00000 0.00000

+0.00000 0.96961 -0.00000

+0.00000 0.00000 0.78870

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW15.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW15.txt
new file mode 100644
index 0000000..4b741db
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW15.txt
@@ -0,0 +1,3 @@
+1.00429 -0.00000 0.00000

+0.00000 0.96765 0.00000

+0.00000 0.00000 0.77527

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW16.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW16.txt
new file mode 100644
index 0000000..a1526ce
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW16.txt
@@ -0,0 +1,3 @@
+1.00345 -0.00000 -0.00000

+0.00000 0.96470 0.00000

+0.00000 0.00000 0.76124

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW17.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW17.txt
new file mode 100644
index 0000000..a560735
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW17.txt
@@ -0,0 +1,3 @@
+1.00411 -0.00000 0.00000

+0.00000 0.96323 -0.00000

+0.00000 0.00000 0.74854

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW18.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW18.txt
new file mode 100644
index 0000000..8fd0192
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW18.txt
@@ -0,0 +1,3 @@
+1.00422 -0.00000 -0.00000

+0.00000 0.96125 -0.00000

+0.00000 0.00000 0.73562

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW19.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW19.txt
new file mode 100644
index 0000000..152697c
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW19.txt
@@ -0,0 +1,3 @@
+1.00442 -0.00000 0.00000

+0.00000 0.95939 -0.00000

+0.00000 0.00000 0.72296

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW20.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW20.txt
new file mode 100644
index 0000000..101ba2f
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW20.txt
@@ -0,0 +1,3 @@
+1.00380 -0.00000 -0.00000

+0.00000 0.95678 0.00000

+0.00000 0.00000 0.70991

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW21.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW21.txt
new file mode 100644
index 0000000..6214a05
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW21.txt
@@ -0,0 +1,3 @@
+1.00431 -0.00000 0.00000

+0.00000 0.95528 -0.00000

+0.00000 0.00000 0.69784

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW22.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW22.txt
new file mode 100644
index 0000000..b1a4456
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW22.txt
@@ -0,0 +1,3 @@
+1.00426 -0.00000 0.00000

+0.00000 0.95328 0.00000

+0.00000 0.00000 0.68555

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW23.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW23.txt
new file mode 100644
index 0000000..78a5502
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMPW23.txt
@@ -0,0 +1,3 @@
+1.00444 -0.00000 0.00000

+0.00000 0.95151 -0.00000

+0.00000 0.00000 0.67360

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW01.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW01.txt
new file mode 100644
index 0000000..3b735e8
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW01.txt
@@ -0,0 +1,3 @@
+0.82262 0.18033 0.00040

+0.03272 0.96749 0.00040

+0.01559 0.06711 0.90356

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW02.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW02.txt
new file mode 100644
index 0000000..0401d8b
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW02.txt
@@ -0,0 +1,3 @@
+0.82342 0.17989 0.00039

+0.03275 0.96513 0.00039

+0.01560 0.06694 0.88725

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW03.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW03.txt
new file mode 100644
index 0000000..2113116
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW03.txt
@@ -0,0 +1,3 @@
+0.82438 0.17949 0.00039

+0.03279 0.96301 0.00039

+0.01562 0.06679 0.87138

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW04.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW04.txt
new file mode 100644
index 0000000..7388272
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW04.txt
@@ -0,0 +1,3 @@
+0.82488 0.17901 0.00038

+0.03281 0.96040 0.00038

+0.01563 0.06661 0.85530

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW05.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW05.txt
new file mode 100644
index 0000000..1db51e8
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW05.txt
@@ -0,0 +1,3 @@
+0.82472 0.17839 0.00037

+0.03280 0.95708 0.00037

+0.01563 0.06638 0.83883

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW06.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW06.txt
new file mode 100644
index 0000000..0dbcde6
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW06.txt
@@ -0,0 +1,3 @@
+0.82572 0.17803 0.00037

+0.03284 0.95517 0.00037

+0.01565 0.06625 0.82382

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW07.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW07.txt
new file mode 100644
index 0000000..c73e4b2
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW07.txt
@@ -0,0 +1,3 @@
+0.82586 0.17750 0.00036

+0.03285 0.95230 0.00036

+0.01565 0.06605 0.80820

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW08.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW08.txt
new file mode 100644
index 0000000..955f9fb
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW08.txt
@@ -0,0 +1,3 @@
+0.82678 0.17714 0.00035

+0.03289 0.95038 0.00035

+0.01567 0.06592 0.79359

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW09.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW09.txt
new file mode 100644
index 0000000..037675c
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW09.txt
@@ -0,0 +1,3 @@
+0.82682 0.17660 0.00035

+0.03289 0.94750 0.00035

+0.01567 0.06572 0.77839

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW10.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW10.txt
new file mode 100644
index 0000000..c87946b
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW10.txt
@@ -0,0 +1,3 @@
+0.82764 0.17624 0.00034

+0.03292 0.94556 0.00034

+0.01568 0.06558 0.76417

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW11.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW11.txt
new file mode 100644
index 0000000..97279e1
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW11.txt
@@ -0,0 +1,3 @@
+0.82758 0.17570 0.00033

+0.03292 0.94266 0.00033

+0.01568 0.06538 0.74938

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW12.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW12.txt
new file mode 100644
index 0000000..370749e
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW12.txt
@@ -0,0 +1,3 @@
+0.82831 0.17534 0.00033

+0.03295 0.94071 0.00033

+0.01569 0.06525 0.73555

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW13.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW13.txt
new file mode 100644
index 0000000..1a1654a
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW13.txt
@@ -0,0 +1,3 @@
+0.82910 0.17499 0.00032

+0.03298 0.93887 0.00032

+0.01571 0.06512 0.72198

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW14.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW14.txt
new file mode 100644
index 0000000..ad9e15b
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW14.txt
@@ -0,0 +1,3 @@
+0.82923 0.17452 0.00031

+0.03298 0.93631 0.00031

+0.01571 0.06494 0.70805

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW15.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW15.txt
new file mode 100644
index 0000000..ba365ca
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW15.txt
@@ -0,0 +1,3 @@
+0.82983 0.17415 0.00031

+0.03301 0.93434 0.00031

+0.01572 0.06481 0.69474

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW16.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW16.txt
new file mode 100644
index 0000000..89fba3a
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW16.txt
@@ -0,0 +1,3 @@
+0.82955 0.17360 0.00030

+0.03300 0.93141 0.00030

+0.01572 0.06460 0.68092

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW17.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW17.txt
new file mode 100644
index 0000000..21906d2
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW17.txt
@@ -0,0 +1,3 @@
+0.83049 0.17332 0.00030

+0.03303 0.92990 0.00030

+0.01574 0.06450 0.66831

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW18.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW18.txt
new file mode 100644
index 0000000..d9dca9c
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW18.txt
@@ -0,0 +1,3 @@
+0.83098 0.17295 0.00029

+0.03305 0.92791 0.00029

+0.01575 0.06436 0.65552

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW19.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW19.txt
new file mode 100644
index 0000000..7907a09
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW19.txt
@@ -0,0 +1,3 @@
+0.83153 0.17260 0.00029

+0.03307 0.92603 0.00029

+0.01576 0.06423 0.64298

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW20.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW20.txt
new file mode 100644
index 0000000..958740c
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW20.txt
@@ -0,0 +1,3 @@
+0.83140 0.17212 0.00028

+0.03307 0.92344 0.00028

+0.01575 0.06405 0.63010

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW21.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW21.txt
new file mode 100644
index 0000000..7790866
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW21.txt
@@ -0,0 +1,3 @@
+0.83220 0.17183 0.00027

+0.03310 0.92190 0.00027

+0.01577 0.06394 0.61812

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW22.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW22.txt
new file mode 100644
index 0000000..76a3fd7
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW22.txt
@@ -0,0 +1,3 @@
+0.83254 0.17146 0.00027

+0.03311 0.91989 0.00027

+0.01577 0.06380 0.60598

diff --git a/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW23.txt b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW23.txt
new file mode 100644
index 0000000..ea57e26
--- /dev/null
+++ b/prebuilt/system/etc/firmware/phone_ct/BOE/LUT_GMW23.txt
@@ -0,0 +1,3 @@
+0.83305 0.17112 0.00026

+0.03313 0.91811 0.00026

+0.01578 0.06368 0.59414

diff --git a/prebuilt/system/etc/firmware/tru2life/ADInitParam.xml b/prebuilt/system/etc/firmware/tru2life/ADInitParam.xml
new file mode 100644
index 0000000..f91d077
--- /dev/null
+++ b/prebuilt/system/etc/firmware/tru2life/ADInitParam.xml
@@ -0,0 +1,37 @@
+<?xml version='1.0' encoding='utf-8'?>
+<Group id='ADConfiguration'>
+
+	<ADIridixControl0 units="hex">7</ADIridixControl0>
+	<ADIridixControl1 units="uint">198</ADIridixControl1>
+	<ADBlackLevel units="hex">0</ADBlackLevel>
+	<ADWhiteLevel units="hex">3FF</ADWhiteLevel>
+	<ADVariance units="hex">65</ADVariance>
+	<ADLimitAmpl units="uint">240</ADLimitAmpl>
+	<ADIridixDither units="hex">0</ADIridixDither>
+	<ADSlopeMax units="hex">60</ADSlopeMax>
+	<ADSlopeMin units="uint">32</ADSlopeMin>
+	<ADDitherControl units="hex">5</ADDitherControl>
+	<ADFormat units="hex">3</ADFormat>
+	<ADAutoSize units="hex">0</ADAutoSize>
+	<ADFrameWidth units="uint">1080</ADFrameWidth>
+	<ADFrameHeight units="hex">780</ADFrameHeight>
+	<ADLutFI units="uint">
+	0 69 147 234 328
+	429 537 650 768 897
+	1043 1201 1368 1540 1713
+	1884 2048 2212 2383 2556
+	2728 2895 3052 3199 3328
+	3446 3559 3666 3768 3862
+	3948 4026 4095
+	</ADLutFI>
+	<ADLutCC units="hex">
+	000000FF 00000116 0000012E 00000146 0000015E
+	00000176 0000018E 000001A6 000001BE 000001D6
+	000001EE 00000205 0000021D 00000235 0000024D
+	00000265 0000027D 00000295 000002AC 000002C4
+	000002DC 000002F3 0000030B 00000323 0000033A
+	00000352 0000036A 00000381 00000399 000003B1
+	000003C8 000003E0 000003F8
+	</ADLutCC>
+
+</Group>
diff --git a/prebuilt/system/etc/hostapd/hostapd.accept b/prebuilt/system/etc/hostapd/hostapd.accept
deleted file mode 100644
index 923eab6..0000000
--- a/prebuilt/system/etc/hostapd/hostapd.accept
+++ /dev/null
@@ -1,3 +0,0 @@
-# List of MAC addresses that are allowed to authenticate (IEEE 802.11)
-# with the AP. Optional VLAN ID can be assigned for clients based on the
-# MAC address if dynamic VLANs (hostapd.conf dynamic_vlan option) are used.
diff --git a/prebuilt/system/etc/hostapd/hostapd.deny b/prebuilt/system/etc/hostapd/hostapd.deny
deleted file mode 100644
index e4b6c09..0000000
--- a/prebuilt/system/etc/hostapd/hostapd.deny
+++ /dev/null
@@ -1,2 +0,0 @@
-# List of MAC addresses that are not allowed to authenticate (IEEE 802.11)
-# with the AP.
diff --git a/prebuilt/system/etc/hostapd/hostapd_default.conf b/prebuilt/system/etc/hostapd/hostapd_default.conf
deleted file mode 100644
index 10f0b78..0000000
--- a/prebuilt/system/etc/hostapd/hostapd_default.conf
+++ /dev/null
@@ -1,2240 +0,0 @@
-##### hostapd configuration file ##############################################
-# Empty lines and lines starting with # are ignored
-
-# AP netdevice name (without 'ap' postfix, i.e., wlan0 uses wlan0ap for
-# management frames with the Host AP driver); wlan0 with many nl80211 drivers
-# Note: This attribute can be overridden by the values supplied with the '-i'
-# command line parameter.
-interface=wlan0
-
-# In case of atheros and nl80211 driver interfaces, an additional
-# configuration parameter, bridge, may be used to notify hostapd if the
-# interface is included in a bridge. This parameter is not used with Host AP
-# driver. If the bridge parameter is not set, the drivers will automatically
-# figure out the bridge interface (assuming sysfs is enabled and mounted to
-# /sys) and this parameter may not be needed.
-#
-# For nl80211, this parameter can be used to request the AP interface to be
-# added to the bridge automatically (brctl may refuse to do this before hostapd
-# has been started to change the interface mode). If needed, the bridge
-# interface is also created.
-#bridge=br0
-
-# Driver interface type (hostap/wired/none/nl80211/bsd);
-# default: hostap). nl80211 is used with all Linux mac80211 drivers.
-# Use driver=none if building hostapd as a standalone RADIUS server that does
-# not control any wireless/wired driver.
-driver=nl80211
-
-# Driver interface parameters (mainly for development testing use)
-# driver_params=<params>
-
-# hostapd event logger configuration
-#
-# Two output method: syslog and stdout (only usable if not forking to
-# background).
-#
-# Module bitfield (ORed bitfield of modules that will be logged; -1 = all
-# modules):
-# bit 0 (1) = IEEE 802.11
-# bit 1 (2) = IEEE 802.1X
-# bit 2 (4) = RADIUS
-# bit 3 (8) = WPA
-# bit 4 (16) = driver interface
-# bit 5 (32) = IAPP
-# bit 6 (64) = MLME
-#
-# Levels (minimum value for logged events):
-#  0 = verbose debugging
-#  1 = debugging
-#  2 = informational messages
-#  3 = notification
-#  4 = warning
-#
-logger_syslog=-1
-logger_syslog_level=2
-logger_stdout=-1
-logger_stdout_level=2
-
-# Dump file for state information (on SIGUSR1)
-dump_file=/tmp/hostapd.dump
-
-# Interface for separate control program. If this is specified, hostapd
-# will create this directory and a UNIX domain socket for listening to requests
-# from external programs (CLI/GUI, etc.) for status information and
-# configuration. The socket file will be named based on the interface name, so
-# multiple hostapd processes/interfaces can be run at the same time if more
-# than one interface is used.
-# /var/run/hostapd is the recommended directory for sockets and by default,
-# hostapd_cli will use it when trying to connect with hostapd.
-ctrl_interface=/data/vendor/wifi/hostapd/ctrl
-
-
-# Access control for the control interface can be configured by setting the
-# directory to allow only members of a group to use sockets. This way, it is
-# possible to run hostapd as root (since it needs to change network
-# configuration and open raw sockets) and still allow GUI/CLI components to be
-# run as non-root users. However, since the control interface can be used to
-# change the network configuration, this access needs to be protected in many
-# cases. By default, hostapd is configured to use gid 0 (root). If you
-# want to allow non-root users to use the contron interface, add a new group
-# and change this value to match with that group. Add users that should have
-# control interface access to this group.
-#
-# This variable can be a group name or gid.
-#ctrl_interface_group=wheel
-#ctrl_interface_group=0
-
-
-##### IEEE 802.11 related configuration #######################################
-
-# SSID to be used in IEEE 802.11 management frames
-ssid=QualcommSoftAP
-# Alternative formats for configuring SSID
-# (double quoted string, hexdump, printf-escaped string)
-#ssid2="test"
-#ssid2=74657374
-#ssid2=P"hello\nthere"
-
-# UTF-8 SSID: Whether the SSID is to be interpreted using UTF-8 encoding
-#utf8_ssid=1
-
-# Country code (ISO/IEC 3166-1). Used to set regulatory domain.
-# Set as needed to indicate country in which device is operating.
-# This can limit available channels and transmit power.
-# These two octets are used as the first two octets of the Country String
-# (dot11CountryString)
-#country_code=US
-
-# The third octet of the Country String (dot11CountryString)
-# This parameter is used to set the third octet of the country string.
-#
-# All environments of the current frequency band and country (default)
-#country3=0x20
-# Outdoor environment only
-#country3=0x4f
-# Indoor environment only
-#country3=0x49
-# Noncountry entity (country_code=XX)
-#country3=0x58
-# IEEE 802.11 standard Annex E table indication: 0x01 .. 0x1f
-# Annex E, Table E-4 (Global operating classes)
-#country3=0x04
-
-# Enable IEEE 802.11d. This advertises the country_code and the set of allowed
-# channels and transmit power levels based on the regulatory limits. The
-# country_code setting must be configured with the correct country for
-# IEEE 802.11d functions.
-# (default: 0 = disabled)
-#ieee80211d=1
-
-# Enable IEEE 802.11h. This enables radar detection and DFS support if
-# available. DFS support is required on outdoor 5 GHz channels in most countries
-# of the world. This can be used only with ieee80211d=1.
-# (default: 0 = disabled)
-#ieee80211h=1
-
-# Add Power Constraint element to Beacon and Probe Response frames
-# This config option adds Power Constraint element when applicable and Country
-# element is added. Power Constraint element is required by Transmit Power
-# Control. This can be used only with ieee80211d=1.
-# Valid values are 0..255.
-#local_pwr_constraint=3
-
-# Set Spectrum Management subfield in the Capability Information field.
-# This config option forces the Spectrum Management bit to be set. When this
-# option is not set, the value of the Spectrum Management bit depends on whether
-# DFS or TPC is required by regulatory authorities. This can be used only with
-# ieee80211d=1 and local_pwr_constraint configured.
-#spectrum_mgmt_required=1
-
-# Operation mode (a = IEEE 802.11a (5 GHz), b = IEEE 802.11b (2.4 GHz),
-# g = IEEE 802.11g (2.4 GHz), ad = IEEE 802.11ad (60 GHz); a/g options are used
-# with IEEE 802.11n (HT), too, to specify band). For IEEE 802.11ac (VHT), this
-# needs to be set to hw_mode=a. When using ACS (see channel parameter), a
-# special value "any" can be used to indicate that any support band can be used.
-# This special case is currently supported only with drivers with which
-# offloaded ACS is used.
-# Default: IEEE 802.11b
-hw_mode=g
-
-# Channel number (IEEE 802.11)
-# (default: 0, i.e., not set)
-# Please note that some drivers do not use this value from hostapd and the
-# channel will need to be configured separately with iwconfig.
-#
-# If CONFIG_ACS build option is enabled, the channel can be selected
-# automatically at run time by setting channel=acs_survey or channel=0, both of
-# which will enable the ACS survey based algorithm.
-channel=0
-
-# ACS tuning - Automatic Channel Selection
-# See: http://wireless.kernel.org/en/users/Documentation/acs
-#
-# You can customize the ACS survey algorithm with following variables:
-#
-# acs_num_scans requirement is 1..100 - number of scans to be performed that
-# are used to trigger survey data gathering of an underlying device driver.
-# Scans are passive and typically take a little over 100ms (depending on the
-# driver) on each available channel for given hw_mode. Increasing this value
-# means sacrificing startup time and gathering more data wrt channel
-# interference that may help choosing a better channel. This can also help fine
-# tune the ACS scan time in case a driver has different scan dwell times.
-#
-# acs_chan_bias is a space-separated list of <channel>:<bias> pairs. It can be
-# used to increase (or decrease) the likelihood of a specific channel to be
-# selected by the ACS algorithm. The total interference factor for each channel
-# gets multiplied by the specified bias value before finding the channel with
-# the lowest value. In other words, values between 0.0 and 1.0 can be used to
-# make a channel more likely to be picked while values larger than 1.0 make the
-# specified channel less likely to be picked. This can be used, e.g., to prefer
-# the commonly used 2.4 GHz band channels 1, 6, and 11 (which is the default
-# behavior on 2.4 GHz band if no acs_chan_bias parameter is specified).
-#
-# Defaults:
-#acs_num_scans=5
-#acs_chan_bias=1:0.8 6:0.8 11:0.8
-
-# Channel list restriction. This option allows hostapd to select one of the
-# provided channels when a channel should be automatically selected.
-# Channel list can be provided as range using hyphen ('-') or individual
-# channels can be specified by space (' ') separated values
-# Default: all channels allowed in selected hw_mode
-#chanlist=100 104 108 112 116
-#chanlist=1 6 11-13
-
-# Exclude DFS channels from ACS
-# This option can be used to exclude all DFS channels from the ACS channel list
-# in cases where the driver supports DFS channels.
-#acs_exclude_dfs=1
-
-# Beacon interval in kus (1.024 ms) (default: 100; range 15..65535)
-beacon_int=100
-
-# DTIM (delivery traffic information message) period (range 1..255):
-# number of beacons between DTIMs (1 = every beacon includes DTIM element)
-# (default: 2)
-dtim_period=2
-
-# Maximum number of stations allowed in station table. New stations will be
-# rejected after the station table is full. IEEE 802.11 has a limit of 2007
-# different association IDs, so this number should not be larger than that.
-# (default: 2007)
-max_num_sta=255
-
-# RTS/CTS threshold; -1 = disabled (default); range -1..65535
-# If this field is not included in hostapd.conf, hostapd will not control
-# RTS threshold and 'iwconfig wlan# rts <val>' can be used to set it.
-#rts_threshold=2347
-
-# Fragmentation threshold; -1 = disabled (default); range -1, 256..2346
-# If this field is not included in hostapd.conf, hostapd will not control
-# fragmentation threshold and 'iwconfig wlan# frag <val>' can be used to set
-# it.
-#fragm_threshold=2346
-
-# Rate configuration
-# Default is to enable all rates supported by the hardware. This configuration
-# item allows this list be filtered so that only the listed rates will be left
-# in the list. If the list is empty, all rates are used. This list can have
-# entries that are not in the list of rates the hardware supports (such entries
-# are ignored). The entries in this list are in 100 kbps, i.e., 11 Mbps = 110.
-# If this item is present, at least one rate have to be matching with the rates
-# hardware supports.
-# default: use the most common supported rate setting for the selected
-# hw_mode (i.e., this line can be removed from configuration file in most
-# cases)
-#supported_rates=10 20 55 110 60 90 120 180 240 360 480 540
-
-# Basic rate set configuration
-# List of rates (in 100 kbps) that are included in the basic rate set.
-# If this item is not included, usually reasonable default set is used.
-#basic_rates=10 20
-#basic_rates=10 20 55 110
-#basic_rates=60 120 240
-
-# Beacon frame TX rate configuration
-# This sets the TX rate that is used to transmit Beacon frames. If this item is
-# not included, the driver default rate (likely lowest rate) is used.
-# Legacy (CCK/OFDM rates):
-#    beacon_rate=<legacy rate in 100 kbps>
-# HT:
-#    beacon_rate=ht:<HT MCS>
-# VHT:
-#    beacon_rate=vht:<VHT MCS>
-#
-# For example, beacon_rate=10 for 1 Mbps or beacon_rate=60 for 6 Mbps (OFDM).
-#beacon_rate=10
-
-# Short Preamble
-# This parameter can be used to enable optional use of short preamble for
-# frames sent at 2 Mbps, 5.5 Mbps, and 11 Mbps to improve network performance.
-# This applies only to IEEE 802.11b-compatible networks and this should only be
-# enabled if the local hardware supports use of short preamble. If any of the
-# associated STAs do not support short preamble, use of short preamble will be
-# disabled (and enabled when such STAs disassociate) dynamically.
-# 0 = do not allow use of short preamble (default)
-# 1 = allow use of short preamble
-#preamble=1
-
-# Station MAC address -based authentication
-# Please note that this kind of access control requires a driver that uses
-# hostapd to take care of management frame processing and as such, this can be
-# used with driver=hostap or driver=nl80211, but not with driver=atheros.
-# 0 = accept unless in deny list
-# 1 = deny unless in accept list
-# 2 = use external RADIUS server (accept/deny lists are searched first)
-macaddr_acl=0
-
-# Accept/deny lists are read from separate files (containing list of
-# MAC addresses, one per line). Use absolute path name to make sure that the
-# files can be read on SIGHUP configuration reloads.
-accept_mac_file=/data/hostapd/hostapd.accept
-deny_mac_file=/data/hostapd/hostapd.deny
-
-# IEEE 802.11 specifies two authentication algorithms. hostapd can be
-# configured to allow both of these or only one. Open system authentication
-# should be used with IEEE 802.1X.
-# Bit fields of allowed authentication algorithms:
-# bit 0 = Open System Authentication
-# bit 1 = Shared Key Authentication (requires WEP)
-auth_algs=3
-
-# Send empty SSID in beacons and ignore probe request frames that do not
-# specify full SSID, i.e., require stations to know SSID.
-# default: disabled (0)
-# 1 = send empty (length=0) SSID in beacon and ignore probe request for
-#     broadcast SSID
-# 2 = clear SSID (ASCII 0), but keep the original length (this may be required
-#     with some clients that do not support empty SSID) and ignore probe
-#     requests for broadcast SSID
-ignore_broadcast_ssid=0
-
-# Do not reply to broadcast Probe Request frames from unassociated STA if there
-# is no room for additional stations (max_num_sta). This can be used to
-# discourage a STA from trying to associate with this AP if the association
-# would be rejected due to maximum STA limit.
-# Default: 0 (disabled)
-#no_probe_resp_if_max_sta=0
-
-# Additional vendor specific elements for Beacon and Probe Response frames
-# This parameter can be used to add additional vendor specific element(s) into
-# the end of the Beacon and Probe Response frames. The format for these
-# element(s) is a hexdump of the raw information elements (id+len+payload for
-# one or more elements)
-#vendor_elements=dd0411223301
-
-# Additional vendor specific elements for (Re)Association Response frames
-# This parameter can be used to add additional vendor specific element(s) into
-# the end of the (Re)Association Response frames. The format for these
-# element(s) is a hexdump of the raw information elements (id+len+payload for
-# one or more elements)
-#assocresp_elements=dd0411223301
-
-# TX queue parameters (EDCF / bursting)
-# default for all these fields: not set, use hardware defaults
-# tx_queue_<queue name>_<param>
-# queues: data0, data1, data2, data3
-#		(data0 is the highest priority queue)
-# parameters:
-#   aifs: AIFS (default 2)
-#   cwmin: cwMin (1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191,
-#	   16383, 32767)
-#   cwmax: cwMax (same values as cwMin, cwMax >= cwMin)
-#   burst: maximum length (in milliseconds with precision of up to 0.1 ms) for
-#          bursting
-#
-# Default WMM parameters (IEEE 802.11 draft; 11-03-0504-03-000e):
-# These parameters are used by the access point when transmitting frames
-# to the clients.
-#
-# Low priority / AC_BK = background
-#tx_queue_data3_aifs=7
-#tx_queue_data3_cwmin=15
-#tx_queue_data3_cwmax=1023
-#tx_queue_data3_burst=0
-# Note: for IEEE 802.11b mode: cWmin=31 cWmax=1023 burst=0
-#
-# Normal priority / AC_BE = best effort
-#tx_queue_data2_aifs=3
-#tx_queue_data2_cwmin=15
-#tx_queue_data2_cwmax=63
-#tx_queue_data2_burst=0
-# Note: for IEEE 802.11b mode: cWmin=31 cWmax=127 burst=0
-#
-# High priority / AC_VI = video
-#tx_queue_data1_aifs=1
-#tx_queue_data1_cwmin=7
-#tx_queue_data1_cwmax=15
-#tx_queue_data1_burst=3.0
-# Note: for IEEE 802.11b mode: cWmin=15 cWmax=31 burst=6.0
-#
-# Highest priority / AC_VO = voice
-#tx_queue_data0_aifs=1
-#tx_queue_data0_cwmin=3
-#tx_queue_data0_cwmax=7
-#tx_queue_data0_burst=1.5
-# Note: for IEEE 802.11b mode: cWmin=7 cWmax=15 burst=3.3
-#
-# Special queues; normally not user configurable
-#
-#tx_queue_after_beacon_aifs=2
-#tx_queue_after_beacon_cwmin=15
-#tx_queue_after_beacon_cwmax=1023
-#tx_queue_after_beacon_burst=0
-#
-#tx_queue_beacon_aifs=2
-#tx_queue_beacon_cwmin=3
-#tx_queue_beacon_cwmax=7
-#tx_queue_beacon_burst=1.5
-
-# 802.1D Tag (= UP) to AC mappings
-# WMM specifies following mapping of data frames to different ACs. This mapping
-# can be configured using Linux QoS/tc and sch_pktpri.o module.
-# 802.1D Tag	802.1D Designation	Access Category	WMM Designation
-# 1		BK			AC_BK		Background
-# 2		-			AC_BK		Background
-# 0		BE			AC_BE		Best Effort
-# 3		EE			AC_BE		Best Effort
-# 4		CL			AC_VI		Video
-# 5		VI			AC_VI		Video
-# 6		VO			AC_VO		Voice
-# 7		NC			AC_VO		Voice
-# Data frames with no priority information: AC_BE
-# Management frames: AC_VO
-# PS-Poll frames: AC_BE
-
-# Default WMM parameters (IEEE 802.11 draft; 11-03-0504-03-000e):
-# for 802.11a or 802.11g networks
-# These parameters are sent to WMM clients when they associate.
-# The parameters will be used by WMM clients for frames transmitted to the
-# access point.
-#
-# note - txop_limit is in units of 32microseconds
-# note - acm is admission control mandatory flag. 0 = admission control not
-# required, 1 = mandatory
-# note - Here cwMin and cmMax are in exponent form. The actual cw value used
-# will be (2^n)-1 where n is the value given here. The allowed range for these
-# wmm_ac_??_{cwmin,cwmax} is 0..15 with cwmax >= cwmin.
-#
-wmm_enabled=1
-#
-# WMM-PS Unscheduled Automatic Power Save Delivery [U-APSD]
-# Enable this flag if U-APSD supported outside hostapd (eg., Firmware/driver)
-#uapsd_advertisement_enabled=1
-#
-# Low priority / AC_BK = background
-wmm_ac_bk_cwmin=4
-wmm_ac_bk_cwmax=10
-wmm_ac_bk_aifs=7
-wmm_ac_bk_txop_limit=0
-wmm_ac_bk_acm=0
-# Note: for IEEE 802.11b mode: cWmin=5 cWmax=10
-#
-# Normal priority / AC_BE = best effort
-wmm_ac_be_aifs=3
-wmm_ac_be_cwmin=4
-wmm_ac_be_cwmax=10
-wmm_ac_be_txop_limit=0
-wmm_ac_be_acm=0
-# Note: for IEEE 802.11b mode: cWmin=5 cWmax=7
-#
-# High priority / AC_VI = video
-wmm_ac_vi_aifs=2
-wmm_ac_vi_cwmin=3
-wmm_ac_vi_cwmax=4
-wmm_ac_vi_txop_limit=94
-wmm_ac_vi_acm=0
-# Note: for IEEE 802.11b mode: cWmin=4 cWmax=5 txop_limit=188
-#
-# Highest priority / AC_VO = voice
-wmm_ac_vo_aifs=2
-wmm_ac_vo_cwmin=2
-wmm_ac_vo_cwmax=3
-wmm_ac_vo_txop_limit=47
-wmm_ac_vo_acm=0
-# Note: for IEEE 802.11b mode: cWmin=3 cWmax=4 burst=102
-
-# Static WEP key configuration
-#
-# The key number to use when transmitting.
-# It must be between 0 and 3, and the corresponding key must be set.
-# default: not set
-#wep_default_key=0
-# The WEP keys to use.
-# A key may be a quoted string or unquoted hexadecimal digits.
-# The key length should be 5, 13, or 16 characters, or 10, 26, or 32
-# digits, depending on whether 40-bit (64-bit), 104-bit (128-bit), or
-# 128-bit (152-bit) WEP is used.
-# Only the default key must be supplied; the others are optional.
-# default: not set
-#wep_key0=123456789a
-#wep_key1="vwxyz"
-#wep_key2=0102030405060708090a0b0c0d
-#wep_key3=".2.4.6.8.0.23"
-
-# Station inactivity limit
-#
-# If a station does not send anything in ap_max_inactivity seconds, an
-# empty data frame is sent to it in order to verify whether it is
-# still in range. If this frame is not ACKed, the station will be
-# disassociated and then deauthenticated. This feature is used to
-# clear station table of old entries when the STAs move out of the
-# range.
-#
-# The station can associate again with the AP if it is still in range;
-# this inactivity poll is just used as a nicer way of verifying
-# inactivity; i.e., client will not report broken connection because
-# disassociation frame is not sent immediately without first polling
-# the STA with a data frame.
-# default: 300 (i.e., 5 minutes)
-#ap_max_inactivity=300
-
-# Enable/disable internal bridge for packets between associated stations.
-#
-# The inactivity polling can be disabled to disconnect stations based on
-# inactivity timeout so that idle stations are more likely to be disconnected
-# even if they are still in range of the AP. This can be done by setting
-# skip_inactivity_poll to 1 (default 0).
-#skip_inactivity_poll=0
-
-# Disassociate stations based on excessive transmission failures or other
-# indications of connection loss. This depends on the driver capabilities and
-# may not be available with all drivers.
-#disassoc_low_ack=1
-
-# Maximum allowed Listen Interval (how many Beacon periods STAs are allowed to
-# remain asleep). Default: 65535 (no limit apart from field size)
-#max_listen_interval=100
-
-# WDS (4-address frame) mode with per-station virtual interfaces
-# (only supported with driver=nl80211)
-# This mode allows associated stations to use 4-address frames to allow layer 2
-# bridging to be used.
-#wds_sta=1
-
-# If bridge parameter is set, the WDS STA interface will be added to the same
-# bridge by default. This can be overridden with the wds_bridge parameter to
-# use a separate bridge.
-#wds_bridge=wds-br0
-
-# Start the AP with beaconing disabled by default.
-#start_disabled=0
-
-# Client isolation can be used to prevent low-level bridging of frames between
-# associated stations in the BSS. By default, this bridging is allowed.
-#ap_isolate=1
-
-# BSS Load update period (in BUs)
-# This field is used to enable and configure adding a BSS Load element into
-# Beacon and Probe Response frames.
-#bss_load_update_period=50
-
-# Fixed BSS Load value for testing purposes
-# This field can be used to configure hostapd to add a fixed BSS Load element
-# into Beacon and Probe Response frames for testing purposes. The format is
-# <station count>:<channel utilization>:<available admission capacity>
-#bss_load_test=12:80:20000
-
-# Multicast to unicast conversion
-# Request that the AP will do multicast-to-unicast conversion for ARP, IPv4, and
-# IPv6 frames (possibly within 802.1Q). If enabled, such frames are to be sent
-# to each station separately, with the DA replaced by their own MAC address
-# rather than the group address.
-#
-# Note that this may break certain expectations of the receiver, such as the
-# ability to drop unicast IP packets received within multicast L2 frames, or the
-# ability to not send ICMP destination unreachable messages for packets received
-# in L2 multicast (which is required, but the receiver can't tell the difference
-# if this new option is enabled).
-#
-# This also doesn't implement the 802.11 DMS (directed multicast service).
-#
-#multicast_to_unicast=0
-
-# Send broadcast Deauthentication frame on AP start/stop
-# Default: 1 (enabled)
-#broadcast_deauth=1
-
-##### IEEE 802.11n related configuration ######################################
-
-# ieee80211n: Whether IEEE 802.11n (HT) is enabled
-# 0 = disabled (default)
-# 1 = enabled
-# Note: You will also need to enable WMM for full HT functionality.
-# Note: hw_mode=g (2.4 GHz) and hw_mode=a (5 GHz) is used to specify the band.
-ieee80211n=1
-
-#require_ht=1
-
-# ht_capab: HT capabilities (list of flags)
-# LDPC coding capability: [LDPC] = supported
-# Supported channel width set: [HT40-] = both 20 MHz and 40 MHz with secondary
-#	channel below the primary channel; [HT40+] = both 20 MHz and 40 MHz
-#	with secondary channel above the primary channel
-#	(20 MHz only if neither is set)
-#	Note: There are limits on which channels can be used with HT40- and
-#	HT40+. Following table shows the channels that may be available for
-#	HT40- and HT40+ use per IEEE 802.11n Annex J:
-#	freq		HT40-		HT40+
-#	2.4 GHz		5-13		1-7 (1-9 in Europe/Japan)
-#	5 GHz		40,48,56,64	36,44,52,60
-#	(depending on the location, not all of these channels may be available
-#	for use)
-#	Please note that 40 MHz channels may switch their primary and secondary
-#	channels if needed or creation of 40 MHz channel maybe rejected based
-#	on overlapping BSSes. These changes are done automatically when hostapd
-#	is setting up the 40 MHz channel.
-# Spatial Multiplexing (SM) Power Save: [SMPS-STATIC] or [SMPS-DYNAMIC]
-#	(SMPS disabled if neither is set)
-# HT-greenfield: [GF] (disabled if not set)
-# Short GI for 20 MHz: [SHORT-GI-20] (disabled if not set)
-# Short GI for 40 MHz: [SHORT-GI-40] (disabled if not set)
-# Tx STBC: [TX-STBC] (disabled if not set)
-# Rx STBC: [RX-STBC1] (one spatial stream), [RX-STBC12] (one or two spatial
-#	streams), or [RX-STBC123] (one, two, or three spatial streams); Rx STBC
-#	disabled if none of these set
-# HT-delayed Block Ack: [DELAYED-BA] (disabled if not set)
-# Maximum A-MSDU length: [MAX-AMSDU-7935] for 7935 octets (3839 octets if not
-#	set)
-# DSSS/CCK Mode in 40 MHz: [DSSS_CCK-40] = allowed (not allowed if not set)
-# 40 MHz intolerant [40-INTOLERANT] (not advertised if not set)
-# L-SIG TXOP protection support: [LSIG-TXOP-PROT] (disabled if not set)
-#ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40]
-ht_capab=[SHORT-GI-20] [GF] [DSSS_CCK-40] [LSIG-TXOP-PROT]
-
-# Require stations to support HT PHY (reject association if they do not)
-#require_ht=1
-
-# If set non-zero, require stations to perform scans of overlapping
-# channels to test for stations which would be affected by 40 MHz traffic.
-# This parameter sets the interval in seconds between these scans. Setting this
-# to non-zero allows 2.4 GHz band AP to move dynamically to a 40 MHz channel if
-# no co-existence issues with neighboring devices are found.
-#obss_interval=0
-
-##### IEEE 802.11ac related configuration #####################################
-
-# ieee80211ac: Whether IEEE 802.11ac (VHT) is enabled
-# 0 = disabled (default)
-# 1 = enabled
-# Note: You will also need to enable WMM for full VHT functionality.
-# Note: hw_mode=a is used to specify that 5 GHz band is used with VHT.
-#ieee80211ac=1
-
-# vht_capab: VHT capabilities (list of flags)
-#
-# vht_max_mpdu_len: [MAX-MPDU-7991] [MAX-MPDU-11454]
-# Indicates maximum MPDU length
-# 0 = 3895 octets (default)
-# 1 = 7991 octets
-# 2 = 11454 octets
-# 3 = reserved
-#
-# supported_chan_width: [VHT160] [VHT160-80PLUS80]
-# Indicates supported Channel widths
-# 0 = 160 MHz & 80+80 channel widths are not supported (default)
-# 1 = 160 MHz channel width is supported
-# 2 = 160 MHz & 80+80 channel widths are supported
-# 3 = reserved
-#
-# Rx LDPC coding capability: [RXLDPC]
-# Indicates support for receiving LDPC coded pkts
-# 0 = Not supported (default)
-# 1 = Supported
-#
-# Short GI for 80 MHz: [SHORT-GI-80]
-# Indicates short GI support for reception of packets transmitted with TXVECTOR
-# params format equal to VHT and CBW = 80Mhz
-# 0 = Not supported (default)
-# 1 = Supported
-#
-# Short GI for 160 MHz: [SHORT-GI-160]
-# Indicates short GI support for reception of packets transmitted with TXVECTOR
-# params format equal to VHT and CBW = 160Mhz
-# 0 = Not supported (default)
-# 1 = Supported
-#
-# Tx STBC: [TX-STBC-2BY1]
-# Indicates support for the transmission of at least 2x1 STBC
-# 0 = Not supported (default)
-# 1 = Supported
-#
-# Rx STBC: [RX-STBC-1] [RX-STBC-12] [RX-STBC-123] [RX-STBC-1234]
-# Indicates support for the reception of PPDUs using STBC
-# 0 = Not supported (default)
-# 1 = support of one spatial stream
-# 2 = support of one and two spatial streams
-# 3 = support of one, two and three spatial streams
-# 4 = support of one, two, three and four spatial streams
-# 5,6,7 = reserved
-#
-# SU Beamformer Capable: [SU-BEAMFORMER]
-# Indicates support for operation as a single user beamformer
-# 0 = Not supported (default)
-# 1 = Supported
-#
-# SU Beamformee Capable: [SU-BEAMFORMEE]
-# Indicates support for operation as a single user beamformee
-# 0 = Not supported (default)
-# 1 = Supported
-#
-# Compressed Steering Number of Beamformer Antennas Supported:
-# [BF-ANTENNA-2] [BF-ANTENNA-3] [BF-ANTENNA-4]
-#   Beamformee's capability indicating the maximum number of beamformer
-#   antennas the beamformee can support when sending compressed beamforming
-#   feedback
-# If SU beamformer capable, set to maximum value minus 1
-# else reserved (default)
-#
-# Number of Sounding Dimensions:
-# [SOUNDING-DIMENSION-2] [SOUNDING-DIMENSION-3] [SOUNDING-DIMENSION-4]
-# Beamformer's capability indicating the maximum value of the NUM_STS parameter
-# in the TXVECTOR of a VHT NDP
-# If SU beamformer capable, set to maximum value minus 1
-# else reserved (default)
-#
-# MU Beamformer Capable: [MU-BEAMFORMER]
-# Indicates support for operation as an MU beamformer
-# 0 = Not supported or sent by Non-AP STA (default)
-# 1 = Supported
-#
-# VHT TXOP PS: [VHT-TXOP-PS]
-# Indicates whether or not the AP supports VHT TXOP Power Save Mode
-#  or whether or not the STA is in VHT TXOP Power Save mode
-# 0 = VHT AP doesn't support VHT TXOP PS mode (OR) VHT STA not in VHT TXOP PS
-#  mode
-# 1 = VHT AP supports VHT TXOP PS mode (OR) VHT STA is in VHT TXOP power save
-#  mode
-#
-# +HTC-VHT Capable: [HTC-VHT]
-# Indicates whether or not the STA supports receiving a VHT variant HT Control
-# field.
-# 0 = Not supported (default)
-# 1 = supported
-#
-# Maximum A-MPDU Length Exponent: [MAX-A-MPDU-LEN-EXP0]..[MAX-A-MPDU-LEN-EXP7]
-# Indicates the maximum length of A-MPDU pre-EOF padding that the STA can recv
-# This field is an integer in the range of 0 to 7.
-# The length defined by this field is equal to
-# 2 pow(13 + Maximum A-MPDU Length Exponent) -1 octets
-#
-# VHT Link Adaptation Capable: [VHT-LINK-ADAPT2] [VHT-LINK-ADAPT3]
-# Indicates whether or not the STA supports link adaptation using VHT variant
-# HT Control field
-# If +HTC-VHTcapable is 1
-#  0 = (no feedback) if the STA does not provide VHT MFB (default)
-#  1 = reserved
-#  2 = (Unsolicited) if the STA provides only unsolicited VHT MFB
-#  3 = (Both) if the STA can provide VHT MFB in response to VHT MRQ and if the
-#      STA provides unsolicited VHT MFB
-# Reserved if +HTC-VHTcapable is 0
-#
-# Rx Antenna Pattern Consistency: [RX-ANTENNA-PATTERN]
-# Indicates the possibility of Rx antenna pattern change
-# 0 = Rx antenna pattern might change during the lifetime of an association
-# 1 = Rx antenna pattern does not change during the lifetime of an association
-#
-# Tx Antenna Pattern Consistency: [TX-ANTENNA-PATTERN]
-# Indicates the possibility of Tx antenna pattern change
-# 0 = Tx antenna pattern might change during the lifetime of an association
-# 1 = Tx antenna pattern does not change during the lifetime of an association
-#vht_capab=[SHORT-GI-80][HTC-VHT]
-#
-# Require stations to support VHT PHY (reject association if they do not)
-#require_vht=1
-
-# 0 = 20 or 40 MHz operating Channel width
-# 1 = 80 MHz channel width
-# 2 = 160 MHz channel width
-# 3 = 80+80 MHz channel width
-#vht_oper_chwidth=1
-#
-# center freq = 5 GHz + (5 * index)
-# So index 42 gives center freq 5.210 GHz
-# which is channel 42 in 5G band
-#
-#vht_oper_centr_freq_seg0_idx=42
-#
-# center freq = 5 GHz + (5 * index)
-# So index 159 gives center freq 5.795 GHz
-# which is channel 159 in 5G band
-#
-#vht_oper_centr_freq_seg1_idx=159
-
-# Workaround to use station's nsts capability in (Re)Association Response frame
-# This may be needed with some deployed devices as an interoperability
-# workaround for beamforming if the AP's capability is greater than the
-# station's capability. This is disabled by default and can be enabled by
-# setting use_sta_nsts=1.
-#use_sta_nsts=0
-
-##### IEEE 802.11ax related configuration #####################################
-
-#ieee80211ax: Whether IEEE 802.11ax (HE) is enabled
-# 0 = disabled (default)
-# 1 = enabled
-#ieee80211ax=1
-
-#he_su_beamformer: HE single user beamformer support
-# 0 = not supported (default)
-# 1 = supported
-#he_su_beamformer=1
-
-#he_su_beamformee: HE single user beamformee support
-# 0 = not supported (default)
-# 1 = supported
-#he_su_beamformee=1
-
-#he_mu_beamformer: HE multiple user beamformer support
-# 0 = not supported (default)
-# 1 = supported
-#he_mu_beamformer=1
-
-# he_bss_color: BSS color
-# 0 = no BSS color (default)
-# unsigned integer = BSS color
-#he_bss_color=0
-
-#he_default_pe_duration: The duration of PE field in an HE PPDU in us
-# Possible values are 0 us (default), 4 us, 8 us, 12 us, and 16 us
-#he_default_pe_duration=0
-
-#he_twt_required: Whether TWT is required
-# 0 = not required (default)
-# 1 = required
-#he_twt_required=0
-
-#he_rts_threshold: Duration of STA transmission
-# 0 = not set (default)
-# unsigned integer = duration in units of 16 us
-#he_rts_threshold=0
-
-##### IEEE 802.1X-2004 related configuration ##################################
-
-# Require IEEE 802.1X authorization
-#ieee8021x=1
-
-# IEEE 802.1X/EAPOL version
-# hostapd is implemented based on IEEE Std 802.1X-2004 which defines EAPOL
-# version 2. However, there are many client implementations that do not handle
-# the new version number correctly (they seem to drop the frames completely).
-# In order to make hostapd interoperate with these clients, the version number
-# can be set to the older version (1) with this configuration value.
-#eapol_version=2
-
-# Optional displayable message sent with EAP Request-Identity. The first \0
-# in this string will be converted to ASCII-0 (nul). This can be used to
-# separate network info (comma separated list of attribute=value pairs); see,
-# e.g., RFC 4284.
-#eap_message=hello
-#eap_message=hello\0networkid=netw,nasid=foo,portid=0,NAIRealms=example.com
-
-# WEP rekeying (disabled if key lengths are not set or are set to 0)
-# Key lengths for default/broadcast and individual/unicast keys:
-# 5 = 40-bit WEP (also known as 64-bit WEP with 40 secret bits)
-# 13 = 104-bit WEP (also known as 128-bit WEP with 104 secret bits)
-#wep_key_len_broadcast=5
-#wep_key_len_unicast=5
-# Rekeying period in seconds. 0 = do not rekey (i.e., set keys only once)
-#wep_rekey_period=300
-
-# EAPOL-Key index workaround (set bit7) for WinXP Supplicant (needed only if
-# only broadcast keys are used)
-eapol_key_index_workaround=0
-
-# EAP reauthentication period in seconds (default: 3600 seconds; 0 = disable
-# reauthentication).
-#eap_reauth_period=3600
-
-# Use PAE group address (01:80:c2:00:00:03) instead of individual target
-# address when sending EAPOL frames with driver=wired. This is the most common
-# mechanism used in wired authentication, but it also requires that the port
-# is only used by one station.
-#use_pae_group_addr=1
-
-# EAP Re-authentication Protocol (ERP) authenticator (RFC 6696)
-#
-# Whether to initiate EAP authentication with EAP-Initiate/Re-auth-Start before
-# EAP-Identity/Request
-#erp_send_reauth_start=1
-#
-# Domain name for EAP-Initiate/Re-auth-Start. Omitted from the message if not
-# set (no local ER server). This is also used by the integrated EAP server if
-# ERP is enabled (eap_server_erp=1).
-#erp_domain=example.com
-
-##### Integrated EAP server ###################################################
-
-# Optionally, hostapd can be configured to use an integrated EAP server
-# to process EAP authentication locally without need for an external RADIUS
-# server. This functionality can be used both as a local authentication server
-# for IEEE 802.1X/EAPOL and as a RADIUS server for other devices.
-
-# Use integrated EAP server instead of external RADIUS authentication
-# server. This is also needed if hostapd is configured to act as a RADIUS
-# authentication server.
-eap_server=1
-
-# Path for EAP server user database
-# If SQLite support is included, this can be set to "sqlite:/path/to/sqlite.db"
-# to use SQLite database instead of a text file.
-#eap_user_file=/etc/hostapd.eap_user
-
-# CA certificate (PEM or DER file) for EAP-TLS/PEAP/TTLS
-#ca_cert=/etc/hostapd.ca.pem
-
-# Server certificate (PEM or DER file) for EAP-TLS/PEAP/TTLS
-#server_cert=/etc/hostapd.server.pem
-
-# Private key matching with the server certificate for EAP-TLS/PEAP/TTLS
-# This may point to the same file as server_cert if both certificate and key
-# are included in a single file. PKCS#12 (PFX) file (.p12/.pfx) can also be
-# used by commenting out server_cert and specifying the PFX file as the
-# private_key.
-#private_key=/etc/hostapd.server.prv
-
-# Passphrase for private key
-#private_key_passwd=secret passphrase
-
-# Server identity
-# EAP methods that provide mechanism for authenticated server identity delivery
-# use this value. If not set, "hostapd" is used as a default.
-#server_id=server.example.com
-
-# Enable CRL verification.
-# Note: hostapd does not yet support CRL downloading based on CDP. Thus, a
-# valid CRL signed by the CA is required to be included in the ca_cert file.
-# This can be done by using PEM format for CA certificate and CRL and
-# concatenating these into one file. Whenever CRL changes, hostapd needs to be
-# restarted to take the new CRL into use.
-# 0 = do not verify CRLs (default)
-# 1 = check the CRL of the user certificate
-# 2 = check all CRLs in the certificate path
-#check_crl=1
-
-# TLS Session Lifetime in seconds
-# This can be used to allow TLS sessions to be cached and resumed with an
-# abbreviated handshake when using EAP-TLS/TTLS/PEAP.
-# (default: 0 = session caching and resumption disabled)
-#tls_session_lifetime=3600
-
-# Cached OCSP stapling response (DER encoded)
-# If set, this file is sent as a certificate status response by the EAP server
-# if the EAP peer requests certificate status in the ClientHello message.
-# This cache file can be updated, e.g., by running following command
-# periodically to get an update from the OCSP responder:
-# openssl ocsp \
-#	-no_nonce \
-#	-CAfile /etc/hostapd.ca.pem \
-#	-issuer /etc/hostapd.ca.pem \
-#	-cert /etc/hostapd.server.pem \
-#	-url http://ocsp.example.com:8888/ \
-#	-respout /tmp/ocsp-cache.der
-#ocsp_stapling_response=/tmp/ocsp-cache.der
-
-# Cached OCSP stapling response list (DER encoded OCSPResponseList)
-# This is similar to ocsp_stapling_response, but the extended version defined in
-# RFC 6961 to allow multiple OCSP responses to be provided.
-#ocsp_stapling_response_multi=/tmp/ocsp-multi-cache.der
-
-# dh_file: File path to DH/DSA parameters file (in PEM format)
-# This is an optional configuration file for setting parameters for an
-# ephemeral DH key exchange. In most cases, the default RSA authentication does
-# not use this configuration. However, it is possible setup RSA to use
-# ephemeral DH key exchange. In addition, ciphers with DSA keys always use
-# ephemeral DH keys. This can be used to achieve forward secrecy. If the file
-# is in DSA parameters format, it will be automatically converted into DH
-# params. This parameter is required if anonymous EAP-FAST is used.
-# You can generate DH parameters file with OpenSSL, e.g.,
-# "openssl dhparam -out /etc/hostapd.dh.pem 2048"
-#dh_file=/etc/hostapd.dh.pem
-
-# OpenSSL cipher string
-#
-# This is an OpenSSL specific configuration option for configuring the default
-# ciphers. If not set, the value configured at build time ("DEFAULT:!EXP:!LOW"
-# by default) is used.
-# See https://www.openssl.org/docs/apps/ciphers.html for OpenSSL documentation
-# on cipher suite configuration. This is applicable only if hostapd is built to
-# use OpenSSL.
-#openssl_ciphers=DEFAULT:!EXP:!LOW
-
-# Fragment size for EAP methods
-#fragment_size=1400
-
-# Finite cyclic group for EAP-pwd. Number maps to group of domain parameters
-# using the IANA repository for IKE (RFC 2409).
-#pwd_group=19
-
-# Configuration data for EAP-SIM database/authentication gateway interface.
-# This is a text string in implementation specific format. The example
-# implementation in eap_sim_db.c uses this as the UNIX domain socket name for
-# the HLR/AuC gateway (e.g., hlr_auc_gw). In this case, the path uses "unix:"
-# prefix. If hostapd is built with SQLite support (CONFIG_SQLITE=y in .config),
-# database file can be described with an optional db=<path> parameter.
-#eap_sim_db=unix:/tmp/hlr_auc_gw.sock
-#eap_sim_db=unix:/tmp/hlr_auc_gw.sock db=/tmp/hostapd.db
-
-# EAP-SIM DB request timeout
-# This parameter sets the maximum time to wait for a database request response.
-# The parameter value is in seconds.
-#eap_sim_db_timeout=1
-
-# Encryption key for EAP-FAST PAC-Opaque values. This key must be a secret,
-# random value. It is configured as a 16-octet value in hex format. It can be
-# generated, e.g., with the following command:
-# od -tx1 -v -N16 /dev/random | colrm 1 8 | tr -d ' '
-#pac_opaque_encr_key=000102030405060708090a0b0c0d0e0f
-
-# EAP-FAST authority identity (A-ID)
-# A-ID indicates the identity of the authority that issues PACs. The A-ID
-# should be unique across all issuing servers. In theory, this is a variable
-# length field, but due to some existing implementations requiring A-ID to be
-# 16 octets in length, it is strongly recommended to use that length for the
-# field to provid interoperability with deployed peer implementations. This
-# field is configured in hex format.
-#eap_fast_a_id=101112131415161718191a1b1c1d1e1f
-
-# EAP-FAST authority identifier information (A-ID-Info)
-# This is a user-friendly name for the A-ID. For example, the enterprise name
-# and server name in a human-readable format. This field is encoded as UTF-8.
-#eap_fast_a_id_info=test server
-
-# Enable/disable different EAP-FAST provisioning modes:
-#0 = provisioning disabled
-#1 = only anonymous provisioning allowed
-#2 = only authenticated provisioning allowed
-#3 = both provisioning modes allowed (default)
-#eap_fast_prov=3
-
-# EAP-FAST PAC-Key lifetime in seconds (hard limit)
-#pac_key_lifetime=604800
-
-# EAP-FAST PAC-Key refresh time in seconds (soft limit on remaining hard
-# limit). The server will generate a new PAC-Key when this number of seconds
-# (or fewer) of the lifetime remains.
-#pac_key_refresh_time=86400
-
-# EAP-SIM and EAP-AKA protected success/failure indication using AT_RESULT_IND
-# (default: 0 = disabled).
-#eap_sim_aka_result_ind=1
-
-# Trusted Network Connect (TNC)
-# If enabled, TNC validation will be required before the peer is allowed to
-# connect. Note: This is only used with EAP-TTLS and EAP-FAST. If any other
-# EAP method is enabled, the peer will be allowed to connect without TNC.
-#tnc=1
-
-# EAP Re-authentication Protocol (ERP) - RFC 6696
-#
-# Whether to enable ERP on the EAP server.
-#eap_server_erp=1
-
-##### IEEE 802.11f - Inter-Access Point Protocol (IAPP) #######################
-
-# Interface to be used for IAPP broadcast packets
-#iapp_interface=eth0
-
-
-##### RADIUS client configuration #############################################
-# for IEEE 802.1X with external Authentication Server, IEEE 802.11
-# authentication with external ACL for MAC addresses, and accounting
-
-# The own IP address of the access point (used as NAS-IP-Address)
-own_ip_addr=127.0.0.1
-
-# NAS-Identifier string for RADIUS messages. When used, this should be unique
-# to the NAS within the scope of the RADIUS server. Please note that hostapd
-# uses a separate RADIUS client for each BSS and as such, a unique
-# nas_identifier value should be configured separately for each BSS. This is
-# particularly important for cases where RADIUS accounting is used
-# (Accounting-On/Off messages are interpreted as clearing all ongoing sessions
-# and that may get interpreted as applying to all BSSes if the same
-# NAS-Identifier value is used.) For example, a fully qualified domain name
-# prefixed with a unique identifier of the BSS (e.g., BSSID) can be used here.
-#
-# When using IEEE 802.11r, nas_identifier must be set and must be between 1 and
-# 48 octets long.
-#nas_identifier=ap.example.com
-
-# RADIUS authentication server
-#auth_server_addr=127.0.0.1
-#auth_server_port=1812
-#auth_server_shared_secret=secret
-
-# RADIUS accounting server
-#acct_server_addr=127.0.0.1
-#acct_server_port=1813
-#acct_server_shared_secret=secret
-
-# Secondary RADIUS servers; to be used if primary one does not reply to
-# RADIUS packets. These are optional and there can be more than one secondary
-# server listed.
-#auth_server_addr=127.0.0.2
-#auth_server_port=1812
-#auth_server_shared_secret=secret2
-#
-#acct_server_addr=127.0.0.2
-#acct_server_port=1813
-#acct_server_shared_secret=secret2
-
-# Retry interval for trying to return to the primary RADIUS server (in
-# seconds). RADIUS client code will automatically try to use the next server
-# when the current server is not replying to requests. If this interval is set,
-# primary server will be retried after configured amount of time even if the
-# currently used secondary server is still working.
-#radius_retry_primary_interval=600
-
-
-# Interim accounting update interval
-# If this is set (larger than 0) and acct_server is configured, hostapd will
-# send interim accounting updates every N seconds. Note: if set, this overrides
-# possible Acct-Interim-Interval attribute in Access-Accept message. Thus, this
-# value should not be configured in hostapd.conf, if RADIUS server is used to
-# control the interim interval.
-# This value should not be less 600 (10 minutes) and must not be less than
-# 60 (1 minute).
-#radius_acct_interim_interval=600
-
-# Request Chargeable-User-Identity (RFC 4372)
-# This parameter can be used to configure hostapd to request CUI from the
-# RADIUS server by including Chargeable-User-Identity attribute into
-# Access-Request packets.
-#radius_request_cui=1
-
-# Dynamic VLAN mode; allow RADIUS authentication server to decide which VLAN
-# is used for the stations. This information is parsed from following RADIUS
-# attributes based on RFC 3580 and RFC 2868: Tunnel-Type (value 13 = VLAN),
-# Tunnel-Medium-Type (value 6 = IEEE 802), Tunnel-Private-Group-ID (value
-# VLANID as a string). Optionally, the local MAC ACL list (accept_mac_file) can
-# be used to set static client MAC address to VLAN ID mapping.
-# 0 = disabled (default)
-# 1 = option; use default interface if RADIUS server does not include VLAN ID
-# 2 = required; reject authentication if RADIUS server does not include VLAN ID
-#dynamic_vlan=0
-
-# Per-Station AP_VLAN interface mode
-# If enabled, each station is assigned its own AP_VLAN interface.
-# This implies per-station group keying and ebtables filtering of inter-STA
-# traffic (when passed through the AP).
-# If the sta is not assigned to any VLAN, then its AP_VLAN interface will be
-# added to the bridge given by the "bridge" configuration option (see above).
-# Otherwise, it will be added to the per-VLAN bridge.
-# 0 = disabled (default)
-# 1 = enabled
-#per_sta_vif=0
-
-# VLAN interface list for dynamic VLAN mode is read from a separate text file.
-# This list is used to map VLAN ID from the RADIUS server to a network
-# interface. Each station is bound to one interface in the same way as with
-# multiple BSSIDs or SSIDs. Each line in this text file is defining a new
-# interface and the line must include VLAN ID and interface name separated by
-# white space (space or tab).
-# If no entries are provided by this file, the station is statically mapped
-# to <bss-iface>.<vlan-id> interfaces.
-#vlan_file=/etc/hostapd.vlan
-
-# Interface where 802.1q tagged packets should appear when a RADIUS server is
-# used to determine which VLAN a station is on.  hostapd creates a bridge for
-# each VLAN.  Then hostapd adds a VLAN interface (associated with the interface
-# indicated by 'vlan_tagged_interface') and the appropriate wireless interface
-# to the bridge.
-#vlan_tagged_interface=eth0
-
-# Bridge (prefix) to add the wifi and the tagged interface to. This gets the
-# VLAN ID appended. It defaults to brvlan%d if no tagged interface is given
-# and br%s.%d if a tagged interface is given, provided %s = tagged interface
-# and %d = VLAN ID.
-#vlan_bridge=brvlan
-
-# When hostapd creates a VLAN interface on vlan_tagged_interfaces, it needs
-# to know how to name it.
-# 0 = vlan<XXX>, e.g., vlan1
-# 1 = <vlan_tagged_interface>.<XXX>, e.g. eth0.1
-#vlan_naming=0
-
-# Arbitrary RADIUS attributes can be added into Access-Request and
-# Accounting-Request packets by specifying the contents of the attributes with
-# the following configuration parameters. There can be multiple of these to
-# add multiple attributes. These parameters can also be used to override some
-# of the attributes added automatically by hostapd.
-# Format: <attr_id>[:<syntax:value>]
-# attr_id: RADIUS attribute type (e.g., 26 = Vendor-Specific)
-# syntax: s = string (UTF-8), d = integer, x = octet string
-# value: attribute value in format indicated by the syntax
-# If syntax and value parts are omitted, a null value (single 0x00 octet) is
-# used.
-#
-# Additional Access-Request attributes
-# radius_auth_req_attr=<attr_id>[:<syntax:value>]
-# Examples:
-# Operator-Name = "Operator"
-#radius_auth_req_attr=126:s:Operator
-# Service-Type = Framed (2)
-#radius_auth_req_attr=6:d:2
-# Connect-Info = "testing" (this overrides the automatically generated value)
-#radius_auth_req_attr=77:s:testing
-# Same Connect-Info value set as a hexdump
-#radius_auth_req_attr=77:x:74657374696e67
-
-#
-# Additional Accounting-Request attributes
-# radius_acct_req_attr=<attr_id>[:<syntax:value>]
-# Examples:
-# Operator-Name = "Operator"
-#radius_acct_req_attr=126:s:Operator
-
-# Dynamic Authorization Extensions (RFC 5176)
-# This mechanism can be used to allow dynamic changes to user session based on
-# commands from a RADIUS server (or some other disconnect client that has the
-# needed session information). For example, Disconnect message can be used to
-# request an associated station to be disconnected.
-#
-# This is disabled by default. Set radius_das_port to non-zero UDP port
-# number to enable.
-#radius_das_port=3799
-#
-# DAS client (the host that can send Disconnect/CoA requests) and shared secret
-#radius_das_client=192.168.1.123 shared secret here
-#
-# DAS Event-Timestamp time window in seconds
-#radius_das_time_window=300
-#
-# DAS require Event-Timestamp
-#radius_das_require_event_timestamp=1
-#
-# DAS require Message-Authenticator
-#radius_das_require_message_authenticator=1
-
-##### RADIUS authentication server configuration ##############################
-
-# hostapd can be used as a RADIUS authentication server for other hosts. This
-# requires that the integrated EAP server is also enabled and both
-# authentication services are sharing the same configuration.
-
-# File name of the RADIUS clients configuration for the RADIUS server. If this
-# commented out, RADIUS server is disabled.
-#radius_server_clients=/etc/hostapd.radius_clients
-
-# The UDP port number for the RADIUS authentication server
-#radius_server_auth_port=1812
-
-# The UDP port number for the RADIUS accounting server
-# Commenting this out or setting this to 0 can be used to disable RADIUS
-# accounting while still enabling RADIUS authentication.
-#radius_server_acct_port=1813
-
-# Use IPv6 with RADIUS server (IPv4 will also be supported using IPv6 API)
-#radius_server_ipv6=1
-
-
-##### WPA/IEEE 802.11i configuration ##########################################
-
-# Enable WPA. Setting this variable configures the AP to require WPA (either
-# WPA-PSK or WPA-RADIUS/EAP based on other configuration). For WPA-PSK, either
-# wpa_psk or wpa_passphrase must be set and wpa_key_mgmt must include WPA-PSK.
-# Instead of wpa_psk / wpa_passphrase, wpa_psk_radius might suffice.
-# For WPA-RADIUS/EAP, ieee8021x must be set (but without dynamic WEP keys),
-# RADIUS authentication server must be configured, and WPA-EAP must be included
-# in wpa_key_mgmt.
-# This field is a bit field that can be used to enable WPA (IEEE 802.11i/D3.0)
-# and/or WPA2 (full IEEE 802.11i/RSN):
-# bit0 = WPA
-# bit1 = IEEE 802.11i/RSN (WPA2) (dot11RSNAEnabled)
-#wpa=1
-
-# WPA pre-shared keys for WPA-PSK. This can be either entered as a 256-bit
-# secret in hex format (64 hex digits), wpa_psk, or as an ASCII passphrase
-# (8..63 characters) that will be converted to PSK. This conversion uses SSID
-# so the PSK changes when ASCII passphrase is used and the SSID is changed.
-# wpa_psk (dot11RSNAConfigPSKValue)
-# wpa_passphrase (dot11RSNAConfigPSKPassPhrase)
-#wpa_psk=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
-#wpa_passphrase=qualcomm
-
-# Optionally, WPA PSKs can be read from a separate text file (containing list
-# of (PSK,MAC address) pairs. This allows more than one PSK to be configured.
-# Use absolute path name to make sure that the files can be read on SIGHUP
-# configuration reloads.
-#wpa_psk_file=/etc/hostapd.wpa_psk
-
-# Optionally, WPA passphrase can be received from RADIUS authentication server
-# This requires macaddr_acl to be set to 2 (RADIUS)
-# 0 = disabled (default)
-# 1 = optional; use default passphrase/psk if RADIUS server does not include
-#	Tunnel-Password
-# 2 = required; reject authentication if RADIUS server does not include
-#	Tunnel-Password
-#wpa_psk_radius=0
-
-# Set of accepted key management algorithms (WPA-PSK, WPA-EAP, or both). The
-# entries are separated with a space. WPA-PSK-SHA256 and WPA-EAP-SHA256 can be
-# added to enable SHA256-based stronger algorithms.
-# FILS-SHA256 = Fast Initial Link Setup with SHA256
-# FILS-SHA384 = Fast Initial Link Setup with SHA384
-# FT-FILS-SHA256 = FT and Fast Initial Link Setup with SHA256
-# FT-FILS-SHA384 = FT and Fast Initial Link Setup with SHA384
-# (dot11RSNAConfigAuthenticationSuitesTable)
-#wpa_key_mgmt=WPA-PSK WPA-EAP
-
-# Set of accepted cipher suites (encryption algorithms) for pairwise keys
-# (unicast packets). This is a space separated list of algorithms:
-# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
-# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
-# Group cipher suite (encryption algorithm for broadcast and multicast frames)
-# is automatically selected based on this configuration. If only CCMP is
-# allowed as the pairwise cipher, group cipher will also be CCMP. Otherwise,
-# TKIP will be used as the group cipher.
-# (dot11RSNAConfigPairwiseCiphersTable)
-# Pairwise cipher for WPA (v1) (default: TKIP)
-#wpa_pairwise=TKIP CCMP
-# Pairwise cipher for RSN/WPA2 (default: use wpa_pairwise value)
-#rsn_pairwise=CCMP
-
-# Time interval for rekeying GTK (broadcast/multicast encryption keys) in
-# seconds. (dot11RSNAConfigGroupRekeyTime)
-# This defaults to 86400 seconds (once per day) when using CCMP/GCMP as the
-# group cipher and 600 seconds (once per 10 minutes) when using TKIP as the
-# group cipher.
-wpa_group_rekey=86400
-
-# Rekey GTK when any STA that possesses the current GTK is leaving the BSS.
-# (dot11RSNAConfigGroupRekeyStrict)
-#wpa_strict_rekey=1
-
-# The number of times EAPOL-Key Message 1/2 in the RSN Group Key Handshake is
-#retried per GTK Handshake attempt. (dot11RSNAConfigGroupUpdateCount)
-# This value should only be increased when stations are constantly
-# deauthenticated during GTK rekeying with the log message
-# "group key handshake failed...".
-# You should consider to also increase wpa_pairwise_update_count then.
-# Range 1..4294967295; default: 4
-#wpa_group_update_count=4
-
-# Time interval for rekeying GMK (master key used internally to generate GTKs
-# (in seconds).
-#wpa_gmk_rekey=86400
-
-# Maximum lifetime for PTK in seconds. This can be used to enforce rekeying of
-# PTK to mitigate some attacks against TKIP deficiencies.
-#wpa_ptk_rekey=600
-
-# The number of times EAPOL-Key Message 1/4 and Message 3/4 in the RSN 4-Way
-# Handshake are retried per 4-Way Handshake attempt.
-# (dot11RSNAConfigPairwiseUpdateCount)
-# Range 1..4294967295; default: 4
-#wpa_pairwise_update_count=4
-
-# Enable IEEE 802.11i/RSN/WPA2 pre-authentication. This is used to speed up
-# roaming be pre-authenticating IEEE 802.1X/EAP part of the full RSN
-# authentication and key handshake before actually associating with a new AP.
-# (dot11RSNAPreauthenticationEnabled)
-#rsn_preauth=1
-#
-# Space separated list of interfaces from which pre-authentication frames are
-# accepted (e.g., 'eth0' or 'eth0 wlan0wds0'. This list should include all
-# interface that are used for connections to other APs. This could include
-# wired interfaces and WDS links. The normal wireless data interface towards
-# associated stations (e.g., wlan0) should not be added, since
-# pre-authentication is only used with APs other than the currently associated
-# one.
-#rsn_preauth_interfaces=eth0
-
-# peerkey: Whether PeerKey negotiation for direct links (IEEE 802.11e) is
-# allowed. This is only used with RSN/WPA2.
-# 0 = disabled (default)
-# 1 = enabled
-#peerkey=1
-
-# ieee80211w: Whether management frame protection (MFP) is enabled
-# 0 = disabled (default)
-# 1 = optional
-# 2 = required
-#ieee80211w=0
-
-# Group management cipher suite
-# Default: AES-128-CMAC (BIP)
-# Other options (depending on driver support):
-# BIP-GMAC-128
-# BIP-GMAC-256
-# BIP-CMAC-256
-# Note: All the stations connecting to the BSS will also need to support the
-# selected cipher. The default AES-128-CMAC is the only option that is commonly
-# available in deployed devices.
-#group_mgmt_cipher=AES-128-CMAC
-
-# Association SA Query maximum timeout (in TU = 1.024 ms; for MFP)
-# (maximum time to wait for a SA Query response)
-# dot11AssociationSAQueryMaximumTimeout, 1...4294967295
-#assoc_sa_query_max_timeout=1000
-
-# Association SA Query retry timeout (in TU = 1.024 ms; for MFP)
-# (time between two subsequent SA Query requests)
-# dot11AssociationSAQueryRetryTimeout, 1...4294967295
-#assoc_sa_query_retry_timeout=201
-
-# disable_pmksa_caching: Disable PMKSA caching
-# This parameter can be used to disable caching of PMKSA created through EAP
-# authentication. RSN preauthentication may still end up using PMKSA caching if
-# it is enabled (rsn_preauth=1).
-# 0 = PMKSA caching enabled (default)
-# 1 = PMKSA caching disabled
-#disable_pmksa_caching=0
-
-# okc: Opportunistic Key Caching (aka Proactive Key Caching)
-# Allow PMK cache to be shared opportunistically among configured interfaces
-# and BSSes (i.e., all configurations within a single hostapd process).
-# 0 = disabled (default)
-# 1 = enabled
-#okc=1
-
-# SAE threshold for anti-clogging mechanism (dot11RSNASAEAntiCloggingThreshold)
-# This parameter defines how many open SAE instances can be in progress at the
-# same time before the anti-clogging mechanism is taken into use.
-#sae_anti_clogging_threshold=5
-
-# Enabled SAE finite cyclic groups
-# SAE implementation are required to support group 19 (ECC group defined over a
-# 256-bit prime order field). All groups that are supported by the
-# implementation are enabled by default. This configuration parameter can be
-# used to specify a limited set of allowed groups. The group values are listed
-# in the IANA registry:
-# http://www.iana.org/assignments/ipsec-registry/ipsec-registry.xml#ipsec-registry-9
-#sae_groups=19 20 21 25 26
-
-# FILS Cache Identifier (16-bit value in hexdump format)
-#fils_cache_id=0011
-
-# FILS Realm Information
-# One or more FILS realms need to be configured when FILS is enabled. This list
-# of realms is used to define which realms (used in keyName-NAI by the client)
-# can be used with FILS shared key authentication for ERP.
-#fils_realm=example.com
-#fils_realm=example.org
-
-# FILS DH Group for PFS
-# 0 = PFS disabled with FILS shared key authentication (default)
-# 1-65535 DH Group to use for FILS PFS
-#fils_dh_group=0
-
-# DHCP server for FILS HLP
-# If configured, hostapd will act as a DHCP relay for all FILS HLP requests
-# that include a DHCPDISCOVER message and send them to the specific DHCP
-# server for processing. hostapd will then wait for a response from that server
-# before replying with (Re)Association Response frame that encapsulates this
-# DHCP response. own_ip_addr is used as the local address for the communication
-# with the DHCP server.
-#dhcp_server=127.0.0.1
-
-# DHCP server UDP port
-# Default: 67
-#dhcp_server_port=67
-
-# DHCP relay UDP port on the local device
-# Default: 67; 0 means not to bind any specific port
-#dhcp_relay_port=67
-
-# DHCP rapid commit proxy
-# If set to 1, this enables hostapd to act as a DHCP rapid commit proxy to
-# allow the rapid commit options (two message DHCP exchange) to be used with a
-# server that supports only the four message DHCP exchange. This is disabled by
-# default (= 0) and can be enabled by setting this to 1.
-#dhcp_rapid_commit_proxy=0
-
-# Wait time for FILS HLP (dot11HLPWaitTime) in TUs
-# default: 30 TUs (= 30.72 milliseconds)
-#fils_hlp_wait_time=30
-
-##### IEEE 802.11r configuration ##############################################
-
-# Mobility Domain identifier (dot11FTMobilityDomainID, MDID)
-# MDID is used to indicate a group of APs (within an ESS, i.e., sharing the
-# same SSID) between which a STA can use Fast BSS Transition.
-# 2-octet identifier as a hex string.
-#mobility_domain=a1b2
-
-# PMK-R0 Key Holder identifier (dot11FTR0KeyHolderID)
-# 1 to 48 octet identifier.
-# This is configured with nas_identifier (see RADIUS client section above).
-
-# Default lifetime of the PMK-RO in minutes; range 1..65535
-# (dot11FTR0KeyLifetime)
-#r0_key_lifetime=10000
-
-# PMK-R1 Key Holder identifier (dot11FTR1KeyHolderID)
-# 6-octet identifier as a hex string.
-# Defaults to BSSID.
-#r1_key_holder=000102030405
-
-# Reassociation deadline in time units (TUs / 1.024 ms; range 1000..65535)
-# (dot11FTReassociationDeadline)
-#reassociation_deadline=1000
-
-# List of R0KHs in the same Mobility Domain
-# format: <MAC address> <NAS Identifier> <256-bit key as hex string>
-# This list is used to map R0KH-ID (NAS Identifier) to a destination MAC
-# address when requesting PMK-R1 key from the R0KH that the STA used during the
-# Initial Mobility Domain Association.
-#r0kh=02:01:02:03:04:05 r0kh-1.example.com 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f
-#r0kh=02:01:02:03:04:06 r0kh-2.example.com 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
-# And so on.. One line per R0KH.
-# Wildcard entry:
-# Upon receiving a response from R0KH, it will be added to this list, so
-# subsequent requests won't be broadcast. If R0KH does not reply, it will be
-# blacklisted.
-#r0kh=ff:ff:ff:ff:ff:ff * 00112233445566778899aabbccddeeff
-
-# List of R1KHs in the same Mobility Domain
-# format: <MAC address> <R1KH-ID> <256-bit key as hex string>
-# This list is used to map R1KH-ID to a destination MAC address when sending
-# PMK-R1 key from the R0KH. This is also the list of authorized R1KHs in the MD
-# that can request PMK-R1 keys.
-#r1kh=02:01:02:03:04:05 02:11:22:33:44:55 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f
-#r1kh=02:01:02:03:04:06 02:11:22:33:44:66 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
-# And so on.. One line per R1KH.
-# Wildcard entry:
-# Upon receiving a request from an R1KH not yet known, it will be added to this
-# list and thus will receive push notifications.
-#r1kh=00:00:00:00:00:00 00:00:00:00:00:00 00112233445566778899aabbccddeeff
-
-# Timeout (seconds) for newly discovered R0KH/R1KH (see wildcard entries above)
-# Special values: 0 -> do not expire
-# Warning: do not cache implies no sequence number validation with wildcards
-#rkh_pos_timeout=86400 (default = 1 day)
-
-# Timeout (milliseconds) for requesting PMK-R1 from R0KH using PULL request
-# and number of retries.
-#rkh_pull_timeout=1000 (default = 1 second)
-#rkh_pull_retries=4 (default)
-
-# Timeout (seconds) for non replying R0KH (see wildcard entries above)
-# Special values: 0 -> do not cache
-# default: 60 seconds
-#rkh_neg_timeout=60
-
-# Note: The R0KH/R1KH keys used to be 128-bit in length before the message
-# format was changed. That shorter key length is still supported for backwards
-# compatibility of the configuration files. If such a shorter key is used, a
-# 256-bit key is derived from it. For new deployments, configuring the 256-bit
-# key is recommended.
-
-# Whether PMK-R1 push is enabled at R0KH
-# 0 = do not push PMK-R1 to all configured R1KHs (default)
-# 1 = push PMK-R1 to all configured R1KHs whenever a new PMK-R0 is derived
-#pmk_r1_push=1
-
-# Whether to enable FT-over-DS
-# 0 = FT-over-DS disabled
-# 1 = FT-over-DS enabled (default)
-#ft_over_ds=1
-
-# Whether to generate FT response locally for PSK networks
-# This avoids use of PMK-R1 push/pull from other APs with FT-PSK networks as
-# the required information (PSK and other session data) is already locally
-# available.
-# 0 = disabled (default)
-# 1 = enabled
-#ft_psk_generate_local=0
-
-##### Neighbor table ##########################################################
-# Maximum number of entries kept in AP table (either for neigbor table or for
-# detecting Overlapping Legacy BSS Condition). The oldest entry will be
-# removed when adding a new entry that would make the list grow over this
-# limit. Note! WFA certification for IEEE 802.11g requires that OLBC is
-# enabled, so this field should not be set to 0 when using IEEE 802.11g.
-# default: 255
-#ap_table_max_size=255
-
-# Number of seconds of no frames received after which entries may be deleted
-# from the AP table. Since passive scanning is not usually performed frequently
-# this should not be set to very small value. In addition, there is no
-# guarantee that every scan cycle will receive beacon frames from the
-# neighboring APs.
-# default: 60
-#ap_table_expiration_time=3600
-
-# Maximum number of stations to track on the operating channel
-# This can be used to detect dualband capable stations before they have
-# associated, e.g., to provide guidance on which colocated BSS to use.
-# Default: 0 (disabled)
-#track_sta_max_num=100
-
-# Maximum age of a station tracking entry in seconds
-# Default: 180
-#track_sta_max_age=180
-
-# Do not reply to group-addressed Probe Request from a station that was seen on
-# another radio.
-# Default: Disabled
-#
-# This can be used with enabled track_sta_max_num configuration on another
-# interface controlled by the same hostapd process to restrict Probe Request
-# frame handling from replying to group-addressed Probe Request frames from a
-# station that has been detected to be capable of operating on another band,
-# e.g., to try to reduce likelihood of the station selecting a 2.4 GHz BSS when
-# the AP operates both a 2.4 GHz and 5 GHz BSS concurrently.
-#
-# Note: Enabling this can cause connectivity issues and increase latency for
-# discovering the AP.
-#no_probe_resp_if_seen_on=wlan1
-
-# Reject authentication from a station that was seen on another radio.
-# Default: Disabled
-#
-# This can be used with enabled track_sta_max_num configuration on another
-# interface controlled by the same hostapd process to reject authentication
-# attempts from a station that has been detected to be capable of operating on
-# another band, e.g., to try to reduce likelihood of the station selecting a
-# 2.4 GHz BSS when the AP operates both a 2.4 GHz and 5 GHz BSS concurrently.
-#
-# Note: Enabling this can cause connectivity issues and increase latency for
-# connecting with the AP.
-#no_auth_if_seen_on=wlan1
-
-##### Wi-Fi Protected Setup (WPS) #############################################
-
-# WPS state
-# 0 = WPS disabled (default)
-# 1 = WPS enabled, not configured
-# 2 = WPS enabled, configured
-#wps_state=2
-
-# Whether to manage this interface independently from other WPS interfaces
-# By default, a single hostapd process applies WPS operations to all configured
-# interfaces. This parameter can be used to disable that behavior for a subset
-# of interfaces. If this is set to non-zero for an interface, WPS commands
-# issued on that interface do not apply to other interfaces and WPS operations
-# performed on other interfaces do not affect this interface.
-#wps_independent=0
-
-# AP can be configured into a locked state where new WPS Registrar are not
-# accepted, but previously authorized Registrars (including the internal one)
-# can continue to add new Enrollees.
-ap_setup_locked=1
-
-# Universally Unique IDentifier (UUID; see RFC 4122) of the device
-# This value is used as the UUID for the internal WPS Registrar. If the AP
-# is also using UPnP, this value should be set to the device's UPnP UUID.
-# If not configured, UUID will be generated based on the local MAC address.
-#uuid=12345678-9abc-def0-1234-56789abcdef0
-
-# Note: If wpa_psk_file is set, WPS is used to generate random, per-device PSKs
-# that will be appended to the wpa_psk_file. If wpa_psk_file is not set, the
-# default PSK (wpa_psk/wpa_passphrase) will be delivered to Enrollees. Use of
-# per-device PSKs is recommended as the more secure option (i.e., make sure to
-# set wpa_psk_file when using WPS with WPA-PSK).
-
-# When an Enrollee requests access to the network with PIN method, the Enrollee
-# PIN will need to be entered for the Registrar. PIN request notifications are
-# sent to hostapd ctrl_iface monitor. In addition, they can be written to a
-# text file that could be used, e.g., to populate the AP administration UI with
-# pending PIN requests. If the following variable is set, the PIN requests will
-# be written to the configured file.
-#wps_pin_requests=/var/run/hostapd_wps_pin_requests
-
-# Device Name
-# User-friendly description of device; up to 32 octets encoded in UTF-8
-#device_name=Wireless AP
-
-# Manufacturer
-# The manufacturer of the device (up to 64 ASCII characters)
-#manufacturer=Qualcomm
-
-# Model Name
-# Model of the device (up to 32 ASCII characters)
-#model_name=QualcommSoftAP
-
-# Model Number
-# Additional device description (up to 32 ASCII characters)
-#model_number=123
-
-# Serial Number
-# Serial number of the device (up to 32 characters)
-#serial_number=12345
-
-# Primary Device Type
-# Used format: <categ>-<OUI>-<subcateg>
-# categ = Category as an integer value
-# OUI = OUI and type octet as a 4-octet hex-encoded value; 0050F204 for
-#       default WPS OUI
-# subcateg = OUI-specific Sub Category as an integer value
-# Examples:
-#   1-0050F204-1 (Computer / PC)
-#   1-0050F204-2 (Computer / Server)
-#   5-0050F204-1 (Storage / NAS)
-#   6-0050F204-1 (Network Infrastructure / AP)
-#device_type=6-0050F204-1
-
-# OS Version
-# 4-octet operating system version number (hex string)
-#os_version=01020300
-
-# Config Methods
-# List of the supported configuration methods
-# Available methods: usba ethernet label display ext_nfc_token int_nfc_token
-#	nfc_interface push_button keypad virtual_display physical_display
-#	virtual_push_button physical_push_button
-config_methods=label display push_button keypad
-
-# WPS capability discovery workaround for PBC with Windows 7
-# Windows 7 uses incorrect way of figuring out AP's WPS capabilities by acting
-# as a Registrar and using M1 from the AP. The config methods attribute in that
-# message is supposed to indicate only the configuration method supported by
-# the AP in Enrollee role, i.e., to add an external Registrar. For that case,
-# PBC shall not be used and as such, the PushButton config method is removed
-# from M1 by default. If pbc_in_m1=1 is included in the configuration file,
-# the PushButton config method is left in M1 (if included in config_methods
-# parameter) to allow Windows 7 to use PBC instead of PIN (e.g., from a label
-# in the AP).
-#pbc_in_m1=1
-
-# Static access point PIN for initial configuration and adding Registrars
-# If not set, hostapd will not allow external WPS Registrars to control the
-# access point. The AP PIN can also be set at runtime with hostapd_cli
-# wps_ap_pin command. Use of temporary (enabled by user action) and random
-# AP PIN is much more secure than configuring a static AP PIN here. As such,
-# use of the ap_pin parameter is not recommended if the AP device has means for
-# displaying a random PIN.
-#ap_pin=12345670
-
-# Skip building of automatic WPS credential
-# This can be used to allow the automatically generated Credential attribute to
-# be replaced with pre-configured Credential(s).
-#skip_cred_build=1
-
-# Additional Credential attribute(s)
-# This option can be used to add pre-configured Credential attributes into M8
-# message when acting as a Registrar. If skip_cred_build=1, this data will also
-# be able to override the Credential attribute that would have otherwise been
-# automatically generated based on network configuration. This configuration
-# option points to an external file that much contain the WPS Credential
-# attribute(s) as binary data.
-#extra_cred=hostapd.cred
-
-# Credential processing
-#   0 = process received credentials internally (default)
-#   1 = do not process received credentials; just pass them over ctrl_iface to
-#	external program(s)
-#   2 = process received credentials internally and pass them over ctrl_iface
-#	to external program(s)
-# Note: With wps_cred_processing=1, skip_cred_build should be set to 1 and
-# extra_cred be used to provide the Credential data for Enrollees.
-#
-# wps_cred_processing=1 will disabled automatic updates of hostapd.conf file
-# both for Credential processing and for marking AP Setup Locked based on
-# validation failures of AP PIN. An external program is responsible on updating
-# the configuration appropriately in this case.
-#wps_cred_processing=0
-
-# AP Settings Attributes for M7
-# By default, hostapd generates the AP Settings Attributes for M7 based on the
-# current configuration. It is possible to override this by providing a file
-# with pre-configured attributes. This is similar to extra_cred file format,
-# but the AP Settings attributes are not encapsulated in a Credential
-# attribute.
-#ap_settings=hostapd.ap_settings
-
-# WPS UPnP interface
-# If set, support for external Registrars is enabled.
-#upnp_iface=br0
-
-# Friendly Name (required for UPnP)
-# Short description for end use. Should be less than 64 characters.
-#friendly_name=Qualcomm Access Point
-
-# Manufacturer URL (optional for UPnP)
-#manufacturer_url=http://www.qualcomm.com/
-
-# Model Description (recommended for UPnP)
-# Long description for end user. Should be less than 128 characters.
-#model_description=Wireless Access Point
-
-# Model URL (optional for UPnP)
-#model_url=http://www.qualcomm.com/
-
-# Universal Product Code (optional for UPnP)
-# 12-digit, all-numeric code that identifies the consumer package.
-#upc=123456789012
-
-# WPS RF Bands (a = 5G, b = 2.4G, g = 2.4G, ag = dual band, ad = 60 GHz)
-# This value should be set according to RF band(s) supported by the AP if
-# hw_mode is not set. For dual band dual concurrent devices, this needs to be
-# set to ag to allow both RF bands to be advertized.
-#wps_rf_bands=ag
-
-# NFC password token for WPS
-# These parameters can be used to configure a fixed NFC password token for the
-# AP. This can be generated, e.g., with nfc_pw_token from wpa_supplicant. When
-# these parameters are used, the AP is assumed to be deployed with a NFC tag
-# that includes the matching NFC password token (e.g., written based on the
-# NDEF record from nfc_pw_token).
-#
-#wps_nfc_dev_pw_id: Device Password ID (16..65535)
-#wps_nfc_dh_pubkey: Hexdump of DH Public Key
-#wps_nfc_dh_privkey: Hexdump of DH Private Key
-#wps_nfc_dev_pw: Hexdump of Device Password
-
-##### Wi-Fi Direct (P2P) ######################################################
-
-# Enable P2P Device management
-#manage_p2p=1
-
-# Allow cross connection
-#allow_cross_connection=1
-
-#### TDLS (IEEE 802.11z-2010) #################################################
-
-# Prohibit use of TDLS in this BSS
-#tdls_prohibit=1
-
-# Prohibit use of TDLS Channel Switching in this BSS
-#tdls_prohibit_chan_switch=1
-
-##### IEEE 802.11v-2011 #######################################################
-
-# Time advertisement
-# 0 = disabled (default)
-# 2 = UTC time at which the TSF timer is 0
-#time_advertisement=2
-
-# Local time zone as specified in 8.3 of IEEE Std 1003.1-2004:
-# stdoffset[dst[offset][,start[/time],end[/time]]]
-#time_zone=EST5
-
-# WNM-Sleep Mode (extended sleep mode for stations)
-# 0 = disabled (default)
-# 1 = enabled (allow stations to use WNM-Sleep Mode)
-#wnm_sleep_mode=1
-
-# BSS Transition Management
-# 0 = disabled (default)
-# 1 = enabled
-#bss_transition=1
-
-# Proxy ARP
-# 0 = disabled (default)
-# 1 = enabled
-#proxy_arp=1
-
-# IPv6 Neighbor Advertisement multicast-to-unicast conversion
-# This can be used with Proxy ARP to allow multicast NAs to be forwarded to
-# associated STAs using link layer unicast delivery.
-# 0 = disabled (default)
-# 1 = enabled
-#na_mcast_to_ucast=0
-
-##### IEEE 802.11u-2011 #######################################################
-
-# Enable Interworking service
-#interworking=1
-
-# Access Network Type
-# 0 = Private network
-# 1 = Private network with guest access
-# 2 = Chargeable public network
-# 3 = Free public network
-# 4 = Personal device network
-# 5 = Emergency services only network
-# 14 = Test or experimental
-# 15 = Wildcard
-#access_network_type=0
-
-# Whether the network provides connectivity to the Internet
-# 0 = Unspecified
-# 1 = Network provides connectivity to the Internet
-#internet=1
-
-# Additional Step Required for Access
-# Note: This is only used with open network, i.e., ASRA shall ne set to 0 if
-# RSN is used.
-#asra=0
-
-# Emergency services reachable
-#esr=0
-
-# Unauthenticated emergency service accessible
-#uesa=0
-
-# Venue Info (optional)
-# The available values are defined in IEEE Std 802.11u-2011, 7.3.1.34.
-# Example values (group,type):
-# 0,0 = Unspecified
-# 1,7 = Convention Center
-# 1,13 = Coffee Shop
-# 2,0 = Unspecified Business
-# 7,1  Private Residence
-#venue_group=7
-#venue_type=1
-
-# Homogeneous ESS identifier (optional; dot11HESSID)
-# If set, this shall be identifical to one of the BSSIDs in the homogeneous
-# ESS and this shall be set to the same value across all BSSs in homogeneous
-# ESS.
-#hessid=02:03:04:05:06:07
-
-# Roaming Consortium List
-# Arbitrary number of Roaming Consortium OIs can be configured with each line
-# adding a new OI to the list. The first three entries are available through
-# Beacon and Probe Response frames. Any additional entry will be available only
-# through ANQP queries. Each OI is between 3 and 15 octets and is configured as
-# a hexstring.
-#roaming_consortium=021122
-#roaming_consortium=2233445566
-
-# Venue Name information
-# This parameter can be used to configure one or more Venue Name Duples for
-# Venue Name ANQP information. Each entry has a two or three character language
-# code (ISO-639) separated by colon from the venue name string.
-# Note that venue_group and venue_type have to be set for Venue Name
-# information to be complete.
-#venue_name=eng:Example venue
-#venue_name=fin:Esimerkkipaikka
-# Alternative format for language:value strings:
-# (double quoted string, printf-escaped string)
-#venue_name=P"eng:Example\nvenue"
-
-# Network Authentication Type
-# This parameter indicates what type of network authentication is used in the
-# network.
-# format: <network auth type indicator (1-octet hex str)> [redirect URL]
-# Network Authentication Type Indicator values:
-# 00 = Acceptance of terms and conditions
-# 01 = On-line enrollment supported
-# 02 = http/https redirection
-# 03 = DNS redirection
-#network_auth_type=00
-#network_auth_type=02http://www.example.com/redirect/me/here/
-
-# IP Address Type Availability
-# format: <1-octet encoded value as hex str>
-# (ipv4_type & 0x3f) << 2 | (ipv6_type & 0x3)
-# ipv4_type:
-# 0 = Address type not available
-# 1 = Public IPv4 address available
-# 2 = Port-restricted IPv4 address available
-# 3 = Single NATed private IPv4 address available
-# 4 = Double NATed private IPv4 address available
-# 5 = Port-restricted IPv4 address and single NATed IPv4 address available
-# 6 = Port-restricted IPv4 address and double NATed IPv4 address available
-# 7 = Availability of the address type is not known
-# ipv6_type:
-# 0 = Address type not available
-# 1 = Address type available
-# 2 = Availability of the address type not known
-#ipaddr_type_availability=14
-
-# Domain Name
-# format: <variable-octet str>[,<variable-octet str>]
-#domain_name=example.com,another.example.com,yet-another.example.com
-
-# 3GPP Cellular Network information
-# format: <MCC1,MNC1>[;<MCC2,MNC2>][;...]
-#anqp_3gpp_cell_net=244,91;310,026;234,56
-
-# NAI Realm information
-# One or more realm can be advertised. Each nai_realm line adds a new realm to
-# the set. These parameters provide information for stations using Interworking
-# network selection to allow automatic connection to a network based on
-# credentials.
-# format: <encoding>,<NAI Realm(s)>[,<EAP Method 1>][,<EAP Method 2>][,...]
-# encoding:
-#	0 = Realm formatted in accordance with IETF RFC 4282
-#	1 = UTF-8 formatted character string that is not formatted in
-#	    accordance with IETF RFC 4282
-# NAI Realm(s): Semi-colon delimited NAI Realm(s)
-# EAP Method: <EAP Method>[:<[AuthParam1:Val1]>][<[AuthParam2:Val2]>][...]
-# EAP Method types, see:
-# http://www.iana.org/assignments/eap-numbers/eap-numbers.xhtml#eap-numbers-4
-# AuthParam (Table 8-188 in IEEE Std 802.11-2012):
-# ID 2 = Non-EAP Inner Authentication Type
-#	1 = PAP, 2 = CHAP, 3 = MSCHAP, 4 = MSCHAPV2
-# ID 3 = Inner authentication EAP Method Type
-# ID 5 = Credential Type
-#	1 = SIM, 2 = USIM, 3 = NFC Secure Element, 4 = Hardware Token,
-#	5 = Softoken, 6 = Certificate, 7 = username/password, 9 = Anonymous,
-#	10 = Vendor Specific
-#nai_realm=0,example.com;example.net
-# EAP methods EAP-TLS with certificate and EAP-TTLS/MSCHAPv2 with
-# username/password
-#nai_realm=0,example.org,13[5:6],21[2:4][5:7]
-
-# Arbitrary ANQP-element configuration
-# Additional ANQP-elements with arbitrary values can be defined by specifying
-# their contents in raw format as a hexdump of the payload. Note that these
-# values will override ANQP-element contents that may have been specified in the
-# more higher layer configuration parameters listed above.
-# format: anqp_elem=<InfoID>:<hexdump of payload>
-# For example, AP Geospatial Location ANQP-element with unknown location:
-#anqp_elem=265:0000
-# For example, AP Civic Location ANQP-element with unknown location:
-#anqp_elem=266:000000
-
-# GAS Address 3 behavior
-# 0 = P2P specification (Address3 = AP BSSID) workaround enabled by default
-#     based on GAS request Address3
-# 1 = IEEE 802.11 standard compliant regardless of GAS request Address3
-# 2 = Force non-compliant behavior (Address3 = AP BSSID for all cases)
-#gas_address3=0
-
-# QoS Map Set configuration
-#
-# Comma delimited QoS Map Set in decimal values
-# (see IEEE Std 802.11-2012, 8.4.2.97)
-#
-# format:
-# [<DSCP Exceptions[DSCP,UP]>,]<UP 0 range[low,high]>,...<UP 7 range[low,high]>
-#
-# There can be up to 21 optional DSCP Exceptions which are pairs of DSCP Value
-# (0..63 or 255) and User Priority (0..7). This is followed by eight DSCP Range
-# descriptions with DSCP Low Value and DSCP High Value pairs (0..63 or 255) for
-# each UP starting from 0. If both low and high value are set to 255, the
-# corresponding UP is not used.
-#
-# default: not set
-#qos_map_set=53,2,22,6,8,15,0,7,255,255,16,31,32,39,255,255,40,47,255,255
-
-##### Hotspot 2.0 #############################################################
-
-# Enable Hotspot 2.0 support
-#hs20=1
-
-# Disable Downstream Group-Addressed Forwarding (DGAF)
-# This can be used to configure a network where no group-addressed frames are
-# allowed. The AP will not forward any group-address frames to the stations and
-# random GTKs are issued for each station to prevent associated stations from
-# forging such frames to other stations in the BSS.
-#disable_dgaf=1
-
-# OSU Server-Only Authenticated L2 Encryption Network
-#osen=1
-
-# ANQP Domain ID (0..65535)
-# An identifier for a set of APs in an ESS that share the same common ANQP
-# information. 0 = Some of the ANQP information is unique to this AP (default).
-#anqp_domain_id=1234
-
-# Deauthentication request timeout
-# If the RADIUS server indicates that the station is not allowed to connect to
-# the BSS/ESS, the AP can allow the station some time to download a
-# notification page (URL included in the message). This parameter sets that
-# timeout in seconds.
-#hs20_deauth_req_timeout=60
-
-# Operator Friendly Name
-# This parameter can be used to configure one or more Operator Friendly Name
-# Duples. Each entry has a two or three character language code (ISO-639)
-# separated by colon from the operator friendly name string.
-#hs20_oper_friendly_name=eng:Example operator
-#hs20_oper_friendly_name=fin:Esimerkkioperaattori
-
-# Connection Capability
-# This can be used to advertise what type of IP traffic can be sent through the
-# hotspot (e.g., due to firewall allowing/blocking protocols/ports).
-# format: <IP Protocol>:<Port Number>:<Status>
-# IP Protocol: 1 = ICMP, 6 = TCP, 17 = UDP
-# Port Number: 0..65535
-# Status: 0 = Closed, 1 = Open, 2 = Unknown
-# Each hs20_conn_capab line is added to the list of advertised tuples.
-#hs20_conn_capab=1:0:2
-#hs20_conn_capab=6:22:1
-#hs20_conn_capab=17:5060:0
-
-# WAN Metrics
-# format: <WAN Info>:<DL Speed>:<UL Speed>:<DL Load>:<UL Load>:<LMD>
-# WAN Info: B0-B1: Link Status, B2: Symmetric Link, B3: At Capabity
-#    (encoded as two hex digits)
-#    Link Status: 1 = Link up, 2 = Link down, 3 = Link in test state
-# Downlink Speed: Estimate of WAN backhaul link current downlink speed in kbps;
-#	1..4294967295; 0 = unknown
-# Uplink Speed: Estimate of WAN backhaul link current uplink speed in kbps
-#	1..4294967295; 0 = unknown
-# Downlink Load: Current load of downlink WAN connection (scaled to 255 = 100%)
-# Uplink Load: Current load of uplink WAN connection (scaled to 255 = 100%)
-# Load Measurement Duration: Duration for measuring downlink/uplink load in
-# tenths of a second (1..65535); 0 if load cannot be determined
-#hs20_wan_metrics=01:8000:1000:80:240:3000
-
-# Operating Class Indication
-# List of operating classes the BSSes in this ESS use. The Global operating
-# classes in Table E-4 of IEEE Std 802.11-2012 Annex E define the values that
-# can be used in this.
-# format: hexdump of operating class octets
-# for example, operating classes 81 (2.4 GHz channels 1-13) and 115 (5 GHz
-# channels 36-48):
-#hs20_operating_class=5173
-
-# OSU icons
-# <Icon Width>:<Icon Height>:<Language code>:<Icon Type>:<Name>:<file path>
-#hs20_icon=32:32:eng:image/png:icon32:/tmp/icon32.png
-#hs20_icon=64:64:eng:image/png:icon64:/tmp/icon64.png
-
-# OSU SSID (see ssid2 for format description)
-# This is the SSID used for all OSU connections to all the listed OSU Providers.
-#osu_ssid="example"
-
-# OSU Providers
-# One or more sets of following parameter. Each OSU provider is started by the
-# mandatory osu_server_uri item. The other parameters add information for the
-# last added OSU provider.
-#
-#osu_server_uri=https://example.com/osu/
-#osu_friendly_name=eng:Example operator
-#osu_friendly_name=fin:Esimerkkipalveluntarjoaja
-#osu_nai=anonymous@example.com
-#osu_method_list=1 0
-#osu_icon=icon32
-#osu_icon=icon64
-#osu_service_desc=eng:Example services
-#osu_service_desc=fin:Esimerkkipalveluja
-#
-#osu_server_uri=...
-
-##### Multiband Operation (MBO) ###############################################
-#
-# MBO enabled
-# 0 = disabled (default)
-# 1 = enabled
-#mbo=1
-#
-# Cellular data connection preference
-# 0 = Excluded - AP does not want STA to use the cellular data connection
-# 1 = AP prefers the STA not to use cellular data connection
-# 255 = AP prefers the STA to use cellular data connection
-#mbo_cell_data_conn_pref=1
-
-##### Optimized Connectivity Experience (OCE) #################################
-#
-# Enable OCE specific features (bitmap)
-# BIT(0) - Reserved
-# Set BIT(1) (= 2) to enable OCE in STA-CFON mode
-# Set BIT(2) (= 4) to enable OCE in AP mode
-# Default is 0 = OCE disabled
-oce=2
-
-##### Fast Session Transfer (FST) support #####################################
-#
-# The options in this section are only available when the build configuration
-# option CONFIG_FST is set while compiling hostapd. They allow this interface
-# to be a part of FST setup.
-#
-# FST is the transfer of a session from a channel to another channel, in the
-# same or different frequency bands.
-#
-# For detals, see IEEE Std 802.11ad-2012.
-
-# Identifier of an FST Group the interface belongs to.
-#fst_group_id=bond0
-
-# Interface priority within the FST Group.
-# Announcing a higher priority for an interface means declaring it more
-# preferable for FST switch.
-# fst_priority is in 1..255 range with 1 being the lowest priority.
-#fst_priority=100
-
-# Default LLT value for this interface in milliseconds. The value used in case
-# no value provided during session setup. Default is 50 ms.
-# fst_llt is in 1..4294967 range (due to spec limitation, see 10.32.2.2
-# Transitioning between states).
-#fst_llt=100
-
-##### Radio measurements / location ###########################################
-
-# The content of a LCI measurement subelement
-#lci=<Hexdump of binary data of the LCI report>
-
-# The content of a location civic measurement subelement
-#civic=<Hexdump of binary data of the location civic report>
-
-# Enable neighbor report via radio measurements
-#rrm_neighbor_report=1
-
-# Enable beacon report via radio measurements
-#rrm_beacon_report=1
-
-# Publish fine timing measurement (FTM) responder functionality
-# This parameter only controls publishing via Extended Capabilities element.
-# Actual functionality is managed outside hostapd.
-#ftm_responder=0
-
-# Publish fine timing measurement (FTM) initiator functionality
-# This parameter only controls publishing via Extended Capabilities element.
-# Actual functionality is managed outside hostapd.
-#ftm_initiator=0
-#
-# Stationary AP config indicates that the AP doesn't move hence location data
-# can be considered as always up to date. If configured, LCI data will be sent
-# as a radio measurement even if the request doesn't contain a max age element
-# that allows sending of such data. Default: 0.
-#stationary_ap=0
-
-##### TESTING OPTIONS #########################################################
-#
-# The options in this section are only available when the build configuration
-# option CONFIG_TESTING_OPTIONS is set while compiling hostapd. They allow
-# testing some scenarios that are otherwise difficult to reproduce.
-#
-# Ignore probe requests sent to hostapd with the given probability, must be a
-# floating point number in the range [0, 1).
-#ignore_probe_probability=0.0
-#
-# Ignore authentication frames with the given probability
-#ignore_auth_probability=0.0
-#
-# Ignore association requests with the given probability
-#ignore_assoc_probability=0.0
-#
-# Ignore reassociation requests with the given probability
-#ignore_reassoc_probability=0.0
-#
-# Corrupt Key MIC in GTK rekey EAPOL-Key frames with the given probability
-#corrupt_gtk_rekey_mic_probability=0.0
-#
-# Include only ECSA IE without CSA IE where possible
-# (channel switch operating class is needed)
-#ecsa_ie_only=0
-
-##### Multiple BSSID support ##################################################
-#
-# Above configuration is using the default interface (wlan#, or multi-SSID VLAN
-# interfaces). Other BSSIDs can be added by using separator 'bss' with
-# default interface name to be allocated for the data packets of the new BSS.
-#
-# hostapd will generate BSSID mask based on the BSSIDs that are
-# configured. hostapd will verify that dev_addr & MASK == dev_addr. If this is
-# not the case, the MAC address of the radio must be changed before starting
-# hostapd (ifconfig wlan0 hw ether <MAC addr>). If a BSSID is configured for
-# every secondary BSS, this limitation is not applied at hostapd and other
-# masks may be used if the driver supports them (e.g., swap the locally
-# administered bit)
-#
-# BSSIDs are assigned in order to each BSS, unless an explicit BSSID is
-# specified using the 'bssid' parameter.
-# If an explicit BSSID is specified, it must be chosen such that it:
-# - results in a valid MASK that covers it and the dev_addr
-# - is not the same as the MAC address of the radio
-# - is not the same as any other explicitly specified BSSID
-#
-# Alternatively, the 'use_driver_iface_addr' parameter can be used to request
-# hostapd to use the driver auto-generated interface address (e.g., to use the
-# exact MAC addresses allocated to the device).
-#
-# Not all drivers support multiple BSSes. The exact mechanism for determining
-# the driver capabilities is driver specific. With the current (i.e., a recent
-# kernel) drivers using nl80211, this information can be checked with "iw list"
-# (search for "valid interface combinations").
-#
-# Please note that hostapd uses some of the values configured for the first BSS
-# as the defaults for the following BSSes. However, it is recommended that all
-# BSSes include explicit configuration of all relevant configuration items.
-#
-#bss=wlan0_0
-#ssid=test2
-# most of the above items can be used here (apart from radio interface specific
-# items, like channel)
-
-#bss=wlan0_1
-#bssid=00:13:10:95:fe:0b
-# ...
-
-wowlan_triggers=any
diff --git a/prebuilt/system/etc/sensors/proto/descriptor.proto b/prebuilt/system/etc/sensors/proto/descriptor.proto
new file mode 100644
index 0000000..08b1555
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/descriptor.proto
@@ -0,0 +1,803 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * 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.
+//     * Neither the name of Google Inc. 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
+// OWNER 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.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// The messages in this file describe the definitions found in .proto files.
+// A valid .proto file can be translated directly to a FileDescriptorProto
+// without any other information (e.g. without reading its imports).
+
+
+syntax = "proto2";
+
+package google.protobuf;
+option go_package = "descriptor";
+option java_package = "com.google.protobuf";
+option java_outer_classname = "DescriptorProtos";
+option csharp_namespace = "Google.Protobuf.Reflection";
+option objc_class_prefix = "GPB";
+
+// descriptor.proto must be optimized for speed because reflection-based
+// algorithms don't work during bootstrapping.
+option optimize_for = SPEED;
+
+// The protocol compiler can output a FileDescriptorSet containing the .proto
+// files it parses.
+message FileDescriptorSet {
+  repeated FileDescriptorProto file = 1;
+}
+
+// Describes a complete .proto file.
+message FileDescriptorProto {
+  optional string name = 1;       // file name, relative to root of source tree
+  optional string package = 2;    // e.g. "foo", "foo.bar", etc.
+
+  // Names of files imported by this file.
+  repeated string dependency = 3;
+  // Indexes of the public imported files in the dependency list above.
+  repeated int32 public_dependency = 10;
+  // Indexes of the weak imported files in the dependency list.
+  // For Google-internal migration only. Do not use.
+  repeated int32 weak_dependency = 11;
+
+  // All top-level definitions in this file.
+  repeated DescriptorProto message_type = 4;
+  repeated EnumDescriptorProto enum_type = 5;
+  repeated ServiceDescriptorProto service = 6;
+  repeated FieldDescriptorProto extension = 7;
+
+  optional FileOptions options = 8;
+
+  // This field contains optional information about the original source code.
+  // You may safely remove this entire field without harming runtime
+  // functionality of the descriptors -- the information is needed only by
+  // development tools.
+  optional SourceCodeInfo source_code_info = 9;
+
+  // The syntax of the proto file.
+  // The supported values are "proto2" and "proto3".
+  optional string syntax = 12;
+}
+
+// Describes a message type.
+message DescriptorProto {
+  optional string name = 1;
+
+  repeated FieldDescriptorProto field = 2;
+  repeated FieldDescriptorProto extension = 6;
+
+  repeated DescriptorProto nested_type = 3;
+  repeated EnumDescriptorProto enum_type = 4;
+
+  message ExtensionRange {
+    optional int32 start = 1;
+    optional int32 end = 2;
+  }
+  repeated ExtensionRange extension_range = 5;
+
+  repeated OneofDescriptorProto oneof_decl = 8;
+
+  optional MessageOptions options = 7;
+
+  // Range of reserved tag numbers. Reserved tag numbers may not be used by
+  // fields or extension ranges in the same message. Reserved ranges may
+  // not overlap.
+  message ReservedRange {
+    optional int32 start = 1; // Inclusive.
+    optional int32 end = 2;   // Exclusive.
+  }
+  repeated ReservedRange reserved_range = 9;
+  // Reserved field names, which may not be used by fields in the same message.
+  // A given name may only be reserved once.
+  repeated string reserved_name = 10;
+}
+
+// Describes a field within a message.
+message FieldDescriptorProto {
+  enum Type {
+    // 0 is reserved for errors.
+    // Order is weird for historical reasons.
+    TYPE_DOUBLE         = 1;
+    TYPE_FLOAT          = 2;
+    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
+    // negative values are likely.
+    TYPE_INT64          = 3;
+    TYPE_UINT64         = 4;
+    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
+    // negative values are likely.
+    TYPE_INT32          = 5;
+    TYPE_FIXED64        = 6;
+    TYPE_FIXED32        = 7;
+    TYPE_BOOL           = 8;
+    TYPE_STRING         = 9;
+    TYPE_GROUP          = 10;  // Tag-delimited aggregate.
+    TYPE_MESSAGE        = 11;  // Length-delimited aggregate.
+
+    // New in version 2.
+    TYPE_BYTES          = 12;
+    TYPE_UINT32         = 13;
+    TYPE_ENUM           = 14;
+    TYPE_SFIXED32       = 15;
+    TYPE_SFIXED64       = 16;
+    TYPE_SINT32         = 17;  // Uses ZigZag encoding.
+    TYPE_SINT64         = 18;  // Uses ZigZag encoding.
+  };
+
+  enum Label {
+    // 0 is reserved for errors
+    LABEL_OPTIONAL      = 1;
+    LABEL_REQUIRED      = 2;
+    LABEL_REPEATED      = 3;
+    // TODO(sanjay): Should we add LABEL_MAP?
+  };
+
+  optional string name = 1;
+  optional int32 number = 3;
+  optional Label label = 4;
+
+  // If type_name is set, this need not be set.  If both this and type_name
+  // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
+  optional Type type = 5;
+
+  // For message and enum types, this is the name of the type.  If the name
+  // starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+  // rules are used to find the type (i.e. first the nested types within this
+  // message are searched, then within the parent, on up to the root
+  // namespace).
+  optional string type_name = 6;
+
+  // For extensions, this is the name of the type being extended.  It is
+  // resolved in the same manner as type_name.
+  optional string extendee = 2;
+
+  // For numeric types, contains the original text representation of the value.
+  // For booleans, "true" or "false".
+  // For strings, contains the default text contents (not escaped in any way).
+  // For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
+  // TODO(kenton):  Base-64 encode?
+  optional string default_value = 7;
+
+  // If set, gives the index of a oneof in the containing type's oneof_decl
+  // list.  This field is a member of that oneof.
+  optional int32 oneof_index = 9;
+
+  // JSON name of this field. The value is set by protocol compiler. If the
+  // user has set a "json_name" option on this field, that option's value
+  // will be used. Otherwise, it's deduced from the field's name by converting
+  // it to camelCase.
+  optional string json_name = 10;
+
+  optional FieldOptions options = 8;
+}
+
+// Describes a oneof.
+message OneofDescriptorProto {
+  optional string name = 1;
+}
+
+// Describes an enum type.
+message EnumDescriptorProto {
+  optional string name = 1;
+
+  repeated EnumValueDescriptorProto value = 2;
+
+  optional EnumOptions options = 3;
+}
+
+// Describes a value within an enum.
+message EnumValueDescriptorProto {
+  optional string name = 1;
+  optional int32 number = 2;
+
+  optional EnumValueOptions options = 3;
+}
+
+// Describes a service.
+message ServiceDescriptorProto {
+  optional string name = 1;
+  repeated MethodDescriptorProto method = 2;
+
+  optional ServiceOptions options = 3;
+}
+
+// Describes a method of a service.
+message MethodDescriptorProto {
+  optional string name = 1;
+
+  // Input and output type names.  These are resolved in the same way as
+  // FieldDescriptorProto.type_name, but must refer to a message type.
+  optional string input_type = 2;
+  optional string output_type = 3;
+
+  optional MethodOptions options = 4;
+
+  // Identifies if client streams multiple client messages
+  optional bool client_streaming = 5 [default=false];
+  // Identifies if server streams multiple server messages
+  optional bool server_streaming = 6 [default=false];
+}
+
+
+// ===================================================================
+// Options
+
+// Each of the definitions above may have "options" attached.  These are
+// just annotations which may cause code to be generated slightly differently
+// or may contain hints for code that manipulates protocol messages.
+//
+// Clients may define custom options as extensions of the *Options messages.
+// These extensions may not yet be known at parsing time, so the parser cannot
+// store the values in them.  Instead it stores them in a field in the *Options
+// message called uninterpreted_option. This field must have the same name
+// across all *Options messages. We then use this field to populate the
+// extensions when we build a descriptor, at which point all protos have been
+// parsed and so all extensions are known.
+//
+// Extension numbers for custom options may be chosen as follows:
+// * For options which will only be used within a single application or
+//   organization, or for experimental options, use field numbers 50000
+//   through 99999.  It is up to you to ensure that you do not use the
+//   same number for multiple options.
+// * For options which will be published and used publicly by multiple
+//   independent entities, e-mail protobuf-global-extension-registry@google.com
+//   to reserve extension numbers. Simply provide your project name (e.g.
+//   Objective-C plugin) and your project website (if available) -- there's no
+//   need to explain how you intend to use them. Usually you only need one
+//   extension number. You can declare multiple options with only one extension
+//   number by putting them in a sub-message. See the Custom Options section of
+//   the docs for examples:
+//   https://developers.google.com/protocol-buffers/docs/proto#options
+//   If this turns out to be popular, a web service will be set up
+//   to automatically assign option numbers.
+
+
+message FileOptions {
+
+  // Sets the Java package where classes generated from this .proto will be
+  // placed.  By default, the proto package is used, but this is often
+  // inappropriate because proto packages do not normally start with backwards
+  // domain names.
+  optional string java_package = 1;
+
+
+  // If set, all the classes from the .proto file are wrapped in a single
+  // outer class with the given name.  This applies to both Proto1
+  // (equivalent to the old "--one_java_file" option) and Proto2 (where
+  // a .proto always translates to a single class, but you may want to
+  // explicitly choose the class name).
+  optional string java_outer_classname = 8;
+
+  // If set true, then the Java code generator will generate a separate .java
+  // file for each top-level message, enum, and service defined in the .proto
+  // file.  Thus, these types will *not* be nested inside the outer class
+  // named by java_outer_classname.  However, the outer class will still be
+  // generated to contain the file's getDescriptor() method as well as any
+  // top-level extensions defined in the file.
+  optional bool java_multiple_files = 10 [default=false];
+
+  // If set true, then the Java code generator will generate equals() and
+  // hashCode() methods for all messages defined in the .proto file.
+  // This increases generated code size, potentially substantially for large
+  // protos, which may harm a memory-constrained application.
+  // - In the full runtime this is a speed optimization, as the
+  // AbstractMessage base class includes reflection-based implementations of
+  // these methods.
+  // - In the lite runtime, setting this option changes the semantics of
+  // equals() and hashCode() to more closely match those of the full runtime;
+  // the generated methods compute their results based on field values rather
+  // than object identity. (Implementations should not assume that hashcodes
+  // will be consistent across runtimes or versions of the protocol compiler.)
+  optional bool java_generate_equals_and_hash = 20 [default=false];
+
+  // If set true, then the Java2 code generator will generate code that
+  // throws an exception whenever an attempt is made to assign a non-UTF-8
+  // byte sequence to a string field.
+  // Message reflection will do the same.
+  // However, an extension field still accepts non-UTF-8 byte sequences.
+  // This option has no effect on when used with the lite runtime.
+  optional bool java_string_check_utf8 = 27 [default=false];
+
+
+  // Generated classes can be optimized for speed or code size.
+  enum OptimizeMode {
+    SPEED = 1;        // Generate complete code for parsing, serialization,
+                      // etc.
+    CODE_SIZE = 2;    // Use ReflectionOps to implement these methods.
+    LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime.
+  }
+  optional OptimizeMode optimize_for = 9 [default=SPEED];
+
+  // Sets the Go package where structs generated from this .proto will be
+  // placed. If omitted, the Go package will be derived from the following:
+  //   - The basename of the package import path, if provided.
+  //   - Otherwise, the package statement in the .proto file, if present.
+  //   - Otherwise, the basename of the .proto file, without extension.
+  optional string go_package = 11;
+
+
+
+  // Should generic services be generated in each language?  "Generic" services
+  // are not specific to any particular RPC system.  They are generated by the
+  // main code generators in each language (without additional plugins).
+  // Generic services were the only kind of service generation supported by
+  // early versions of google.protobuf.
+  //
+  // Generic services are now considered deprecated in favor of using plugins
+  // that generate code specific to your particular RPC system.  Therefore,
+  // these default to false.  Old code which depends on generic services should
+  // explicitly set them to true.
+  optional bool cc_generic_services = 16 [default=false];
+  optional bool java_generic_services = 17 [default=false];
+  optional bool py_generic_services = 18 [default=false];
+
+  // Is this file deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for everything in the file, or it will be completely ignored; in the very
+  // least, this is a formalization for deprecating files.
+  optional bool deprecated = 23 [default=false];
+
+  // Enables the use of arenas for the proto messages in this file. This applies
+  // only to generated classes for C++.
+  optional bool cc_enable_arenas = 31 [default=false];
+
+
+  // Sets the objective c class prefix which is prepended to all objective c
+  // generated classes from this .proto. There is no default.
+  optional string objc_class_prefix = 36;
+
+  // Namespace for generated classes; defaults to the package.
+  optional string csharp_namespace = 37;
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+
+  reserved 38;
+}
+
+message MessageOptions {
+  // Set true to use the old proto1 MessageSet wire format for extensions.
+  // This is provided for backwards-compatibility with the MessageSet wire
+  // format.  You should not use this for any other reason:  It's less
+  // efficient, has fewer features, and is more complicated.
+  //
+  // The message must be defined exactly as follows:
+  //   message Foo {
+  //     option message_set_wire_format = true;
+  //     extensions 4 to max;
+  //   }
+  // Note that the message cannot have any defined fields; MessageSets only
+  // have extensions.
+  //
+  // All extensions of your type must be singular messages; e.g. they cannot
+  // be int32s, enums, or repeated messages.
+  //
+  // Because this is an option, the above two restrictions are not enforced by
+  // the protocol compiler.
+  optional bool message_set_wire_format = 1 [default=false];
+
+  // Disables the generation of the standard "descriptor()" accessor, which can
+  // conflict with a field of the same name.  This is meant to make migration
+  // from proto1 easier; new code should avoid fields named "descriptor".
+  optional bool no_standard_descriptor_accessor = 2 [default=false];
+
+  // Is this message deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the message, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating messages.
+  optional bool deprecated = 3 [default=false];
+
+  // Whether the message is an automatically generated map entry type for the
+  // maps field.
+  //
+  // For maps fields:
+  //     map<KeyType, ValueType> map_field = 1;
+  // The parsed descriptor looks like:
+  //     message MapFieldEntry {
+  //         option map_entry = true;
+  //         optional KeyType key = 1;
+  //         optional ValueType value = 2;
+  //     }
+  //     repeated MapFieldEntry map_field = 1;
+  //
+  // Implementations may choose not to generate the map_entry=true message, but
+  // use a native map in the target language to hold the keys and values.
+  // The reflection APIs in such implementions still need to work as
+  // if the field is a repeated message field.
+  //
+  // NOTE: Do not set the option in .proto files. Always use the maps syntax
+  // instead. The option should only be implicitly set by the proto compiler
+  // parser.
+  optional bool map_entry = 7;
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message FieldOptions {
+  // The ctype option instructs the C++ code generator to use a different
+  // representation of the field than it normally would.  See the specific
+  // options below.  This option is not yet implemented in the open source
+  // release -- sorry, we'll try to include it in a future version!
+  optional CType ctype = 1 [default = STRING];
+  enum CType {
+    // Default mode.
+    STRING = 0;
+
+    CORD = 1;
+
+    STRING_PIECE = 2;
+  }
+  // The packed option can be enabled for repeated primitive fields to enable
+  // a more efficient representation on the wire. Rather than repeatedly
+  // writing the tag and type for each element, the entire array is encoded as
+  // a single length-delimited blob. In proto3, only explicit setting it to
+  // false will avoid using packed encoding.
+  optional bool packed = 2;
+
+
+  // The jstype option determines the JavaScript type used for values of the
+  // field.  The option is permitted only for 64 bit integral and fixed types
+  // (int64, uint64, sint64, fixed64, sfixed64).  By default these types are
+  // represented as JavaScript strings.  This avoids loss of precision that can
+  // happen when a large value is converted to a floating point JavaScript
+  // numbers.  Specifying JS_NUMBER for the jstype causes the generated
+  // JavaScript code to use the JavaScript "number" type instead of strings.
+  // This option is an enum to permit additional types to be added,
+  // e.g. goog.math.Integer.
+  optional JSType jstype = 6 [default = JS_NORMAL];
+  enum JSType {
+    // Use the default type.
+    JS_NORMAL = 0;
+
+    // Use JavaScript strings.
+    JS_STRING = 1;
+
+    // Use JavaScript numbers.
+    JS_NUMBER = 2;
+  }
+
+  // Should this field be parsed lazily?  Lazy applies only to message-type
+  // fields.  It means that when the outer message is initially parsed, the
+  // inner message's contents will not be parsed but instead stored in encoded
+  // form.  The inner message will actually be parsed when it is first accessed.
+  //
+  // This is only a hint.  Implementations are free to choose whether to use
+  // eager or lazy parsing regardless of the value of this option.  However,
+  // setting this option true suggests that the protocol author believes that
+  // using lazy parsing on this field is worth the additional bookkeeping
+  // overhead typically needed to implement it.
+  //
+  // This option does not affect the public interface of any generated code;
+  // all method signatures remain the same.  Furthermore, thread-safety of the
+  // interface is not affected by this option; const methods remain safe to
+  // call from multiple threads concurrently, while non-const methods continue
+  // to require exclusive access.
+  //
+  //
+  // Note that implementations may choose not to check required fields within
+  // a lazy sub-message.  That is, calling IsInitialized() on the outher message
+  // may return true even if the inner message has missing required fields.
+  // This is necessary because otherwise the inner message would have to be
+  // parsed in order to perform the check, defeating the purpose of lazy
+  // parsing.  An implementation which chooses not to check required fields
+  // must be consistent about it.  That is, for any particular sub-message, the
+  // implementation must either *always* check its required fields, or *never*
+  // check its required fields, regardless of whether or not the message has
+  // been parsed.
+  optional bool lazy = 5 [default=false];
+
+  // Is this field deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for accessors, or it will be completely ignored; in the very least, this
+  // is a formalization for deprecating fields.
+  optional bool deprecated = 3 [default=false];
+
+  // For Google-internal migration only. Do not use.
+  optional bool weak = 10 [default=false];
+
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message EnumOptions {
+
+  // Set this option to true to allow mapping different tag names to the same
+  // value.
+  optional bool allow_alias = 2;
+
+  // Is this enum deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the enum, or it will be completely ignored; in the very least, this
+  // is a formalization for deprecating enums.
+  optional bool deprecated = 3 [default=false];
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message EnumValueOptions {
+  // Is this enum value deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the enum value, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating enum values.
+  optional bool deprecated = 1 [default=false];
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message ServiceOptions {
+
+  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+  //   framework.  We apologize for hoarding these numbers to ourselves, but
+  //   we were already using them long before we decided to release Protocol
+  //   Buffers.
+
+  // Is this service deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the service, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating services.
+  optional bool deprecated = 33 [default=false];
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message MethodOptions {
+
+  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+  //   framework.  We apologize for hoarding these numbers to ourselves, but
+  //   we were already using them long before we decided to release Protocol
+  //   Buffers.
+
+  // Is this method deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the method, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating methods.
+  optional bool deprecated = 33 [default=false];
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+
+// A message representing a option the parser does not recognize. This only
+// appears in options protos created by the compiler::Parser class.
+// DescriptorPool resolves these when building Descriptor objects. Therefore,
+// options protos in descriptor objects (e.g. returned by Descriptor::options(),
+// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
+// in them.
+message UninterpretedOption {
+  // The name of the uninterpreted option.  Each string represents a segment in
+  // a dot-separated name.  is_extension is true iff a segment represents an
+  // extension (denoted with parentheses in options specs in .proto files).
+  // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
+  // "foo.(bar.baz).qux".
+  message NamePart {
+    required string name_part = 1;
+    required bool is_extension = 2;
+  }
+  repeated NamePart name = 2;
+
+  // The value of the uninterpreted option, in whatever type the tokenizer
+  // identified it as during parsing. Exactly one of these should be set.
+  optional string identifier_value = 3;
+  optional uint64 positive_int_value = 4;
+  optional int64 negative_int_value = 5;
+  optional double double_value = 6;
+  optional bytes string_value = 7;
+  optional string aggregate_value = 8;
+}
+
+// ===================================================================
+// Optional source code info
+
+// Encapsulates information about the original source file from which a
+// FileDescriptorProto was generated.
+message SourceCodeInfo {
+  // A Location identifies a piece of source code in a .proto file which
+  // corresponds to a particular definition.  This information is intended
+  // to be useful to IDEs, code indexers, documentation generators, and similar
+  // tools.
+  //
+  // For example, say we have a file like:
+  //   message Foo {
+  //     optional string foo = 1;
+  //   }
+  // Let's look at just the field definition:
+  //   optional string foo = 1;
+  //   ^       ^^     ^^  ^  ^^^
+  //   a       bc     de  f  ghi
+  // We have the following locations:
+  //   span   path               represents
+  //   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+  //   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+  //   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+  //   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+  //   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+  //
+  // Notes:
+  // - A location may refer to a repeated field itself (i.e. not to any
+  //   particular index within it).  This is used whenever a set of elements are
+  //   logically enclosed in a single code segment.  For example, an entire
+  //   extend block (possibly containing multiple extension definitions) will
+  //   have an outer location whose path refers to the "extensions" repeated
+  //   field without an index.
+  // - Multiple locations may have the same path.  This happens when a single
+  //   logical declaration is spread out across multiple places.  The most
+  //   obvious example is the "extend" block again -- there may be multiple
+  //   extend blocks in the same scope, each of which will have the same path.
+  // - A location's span is not always a subset of its parent's span.  For
+  //   example, the "extendee" of an extension declaration appears at the
+  //   beginning of the "extend" block and is shared by all extensions within
+  //   the block.
+  // - Just because a location's span is a subset of some other location's span
+  //   does not mean that it is a descendent.  For example, a "group" defines
+  //   both a type and a field in a single declaration.  Thus, the locations
+  //   corresponding to the type and field and their components will overlap.
+  // - Code which tries to interpret locations should probably be designed to
+  //   ignore those that it doesn't understand, as more types of locations could
+  //   be recorded in the future.
+  repeated Location location = 1;
+  message Location {
+    // Identifies which part of the FileDescriptorProto was defined at this
+    // location.
+    //
+    // Each element is a field number or an index.  They form a path from
+    // the root FileDescriptorProto to the place where the definition.  For
+    // example, this path:
+    //   [ 4, 3, 2, 7, 1 ]
+    // refers to:
+    //   file.message_type(3)  // 4, 3
+    //       .field(7)         // 2, 7
+    //       .name()           // 1
+    // This is because FileDescriptorProto.message_type has field number 4:
+    //   repeated DescriptorProto message_type = 4;
+    // and DescriptorProto.field has field number 2:
+    //   repeated FieldDescriptorProto field = 2;
+    // and FieldDescriptorProto.name has field number 1:
+    //   optional string name = 1;
+    //
+    // Thus, the above path gives the location of a field name.  If we removed
+    // the last element:
+    //   [ 4, 3, 2, 7 ]
+    // this path refers to the whole field declaration (from the beginning
+    // of the label to the terminating semicolon).
+    repeated int32 path = 1 [packed=true];
+
+    // Always has exactly three or four elements: start line, start column,
+    // end line (optional, otherwise assumed same as start line), end column.
+    // These are packed into a single field for efficiency.  Note that line
+    // and column numbers are zero-based -- typically you will want to add
+    // 1 to each before displaying to a user.
+    repeated int32 span = 2 [packed=true];
+
+    // If this SourceCodeInfo represents a complete declaration, these are any
+    // comments appearing before and after the declaration which appear to be
+    // attached to the declaration.
+    //
+    // A series of line comments appearing on consecutive lines, with no other
+    // tokens appearing on those lines, will be treated as a single comment.
+    //
+    // leading_detached_comments will keep paragraphs of comments that appear
+    // before (but not connected to) the current element. Each paragraph,
+    // separated by empty lines, will be one comment element in the repeated
+    // field.
+    //
+    // Only the comment content is provided; comment markers (e.g. //) are
+    // stripped out.  For block comments, leading whitespace and an asterisk
+    // will be stripped from the beginning of each line other than the first.
+    // Newlines are included in the output.
+    //
+    // Examples:
+    //
+    //   optional int32 foo = 1;  // Comment attached to foo.
+    //   // Comment attached to bar.
+    //   optional int32 bar = 2;
+    //
+    //   optional string baz = 3;
+    //   // Comment attached to baz.
+    //   // Another line attached to baz.
+    //
+    //   // Comment attached to qux.
+    //   //
+    //   // Another line attached to qux.
+    //   optional double qux = 4;
+    //
+    //   // Detached comment for corge. This is not leading or trailing comments
+    //   // to qux or corge because there are blank lines separating it from
+    //   // both.
+    //
+    //   // Detached comment for corge paragraph 2.
+    //
+    //   optional string corge = 5;
+    //   /* Block comment attached
+    //    * to corge.  Leading asterisks
+    //    * will be removed. */
+    //   /* Block comment attached to
+    //    * grault. */
+    //   optional int32 grault = 6;
+    //
+    //   // ignored detached comments.
+    optional string leading_comments = 3;
+    optional string trailing_comments = 4;
+    repeated string leading_detached_comments = 6;
+  }
+}
+
+// Describes the relationship between generated code and its original source
+// file. A GeneratedCodeInfo message is associated with only one generated
+// source file, but may contain references to different source .proto files.
+message GeneratedCodeInfo {
+  // An Annotation connects some span of text in generated code to an element
+  // of its generating .proto file.
+  repeated Annotation annotation = 1;
+  message Annotation {
+    // Identifies the element in the original source .proto file. This field
+    // is formatted the same as SourceCodeInfo.Location.path.
+    repeated int32 path = 1 [packed=true];
+
+    // Identifies the filesystem path to the original source .proto.
+    optional string source_file = 2;
+
+    // Identifies the starting offset in bytes in the generated code
+    // that relates to the identified object.
+    optional int32 begin = 3;
+
+    // Identifies the ending offset in bytes in the generated code that
+    // relates to the identified offset. The end offset should be one past
+    // the last relevant byte (so the length of the text = end - begin).
+    optional int32 end = 4;
+  }
+}
diff --git a/prebuilt/system/etc/sensors/proto/nanopb.proto b/prebuilt/system/etc/sensors/proto/nanopb.proto
new file mode 100644
index 0000000..9b2f0fb
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/nanopb.proto
@@ -0,0 +1,97 @@
+// Custom options for defining:
+// - Maximum size of string/bytes
+// - Maximum number of elements in array
+//
+// These are used by nanopb to generate statically allocable structures
+// for memory-limited environments.
+
+syntax = "proto2";
+import "google/protobuf/descriptor.proto";
+
+option java_package = "fi.kapsi.koti.jpa.nanopb";
+
+enum FieldType {
+    FT_DEFAULT = 0; // Automatically decide field type, generate static field if possible.
+    FT_CALLBACK = 1; // Always generate a callback field.
+    FT_POINTER = 4; // Always generate a dynamically allocated field.
+    FT_STATIC = 2; // Generate a static field or raise an exception if not possible.
+    FT_IGNORE = 3; // Ignore the field completely.
+}
+
+enum IntSize {
+    IS_DEFAULT = 0; // Default, 32/64bit based on type in .proto
+    IS_8 = 8;
+    IS_16 = 16;
+    IS_32 = 32;
+    IS_64 = 64;
+}
+
+// This is the inner options message, which basically defines options for
+// a field. When it is used in message or file scope, it applies to all
+// fields.
+message NanoPBOptions {
+  // Allocated size for 'bytes' and 'string' fields.
+  optional int32 max_size = 1;
+  
+  // Allocated number of entries in arrays ('repeated' fields)
+  optional int32 max_count = 2;
+  
+  // Size of integer fields. Can save some memory if you don't need
+  // full 32 bits for the value.
+  optional IntSize int_size = 7 [default = IS_DEFAULT];
+
+  // Force type of field (callback or static allocation)
+  optional FieldType type = 3 [default = FT_DEFAULT];
+  
+  // Use long names for enums, i.e. EnumName_EnumValue.
+  optional bool long_names = 4 [default = true];
+  
+  // Add 'packed' attribute to generated structs.
+  // Note: this cannot be used on CPUs that break on unaligned
+  // accesses to variables.
+  optional bool packed_struct = 5 [default = false];
+  
+  // Add 'packed' attribute to generated enums.
+  optional bool packed_enum = 10 [default = false];
+  
+  // Skip this message
+  optional bool skip_message = 6 [default = false];
+
+  // Generate oneof fields as normal optional fields instead of union.
+  optional bool no_unions = 8 [default = false];
+
+  // integer type tag for a message
+  optional uint32 msgid = 9;
+
+  // decode oneof as anonymous union
+  optional bool anonymous_oneof = 11 [default = false];
+}
+
+// Extensions to protoc 'Descriptor' type in order to define options
+// inside a .proto file.
+//
+// Protocol Buffers extension number registry
+// --------------------------------
+// Project:  Nanopb
+// Contact:  Petteri Aimonen <jpa@kapsi.fi>
+// Web site: http://kapsi.fi/~jpa/nanopb
+// Extensions: 1010 (all types)
+// --------------------------------
+
+extend google.protobuf.FileOptions {
+    optional NanoPBOptions nanopb_fileopt = 1010;
+}
+
+extend google.protobuf.MessageOptions {
+    optional NanoPBOptions nanopb_msgopt = 1010;
+}
+
+extend google.protobuf.EnumOptions {
+    optional NanoPBOptions nanopb_enumopt = 1010;
+}
+
+extend google.protobuf.FieldOptions {
+    optional NanoPBOptions nanopb = 1010;
+}
+
+
diff --git a/prebuilt/system/etc/sensors/proto/qti_gravity.proto b/prebuilt/system/etc/sensors/proto/qti_gravity.proto
new file mode 100644
index 0000000..1348f23
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/qti_gravity.proto
@@ -0,0 +1,53 @@
+// @file qti_gravity.proto
+//
+// Defines standard message types for the QTI Gravity Proto
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_gravity.proto";
+
+enum qti_gravity_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+  QTI_GRAVITY_MSGID_QTI_GRAVITY_MOTION_DATA_EVENT = 1029;
+}
+
+// Device Motion State detected by the gravity sensor
+enum qti_gravity_device_motion_state
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Device motion state is unknown
+  QTI_GRAVITY_DEVICE_MOTION_STATE_UNKNOWN = 0;
+
+  // Device is at absolute rest, an example of which
+  // would be lying undisturbed on a desk
+  QTI_GRAVITY_DEVICE_MOTION_STATE_ABS_REST = 1;
+
+  // Device is at relative rest, an example of which
+  // would be held steady in the user hand undergoing
+  // no orientation change
+  QTI_GRAVITY_DEVICE_MOTION_STATE_REL_REST = 2;
+
+  // Device is in motion
+  QTI_GRAVITY_DEVICE_MOTION_STATE_MOTION = 3;
+}
+
+// Configuration Message
+// Used to either request for a certain configuration of the qti gravity sensor or
+// alter an already existing configuration of the qti gravity sensor
+// Uses sns_std_sensor_config defined in sns_std_sensor.proto
+// The message field definitions are as follows:
+// 1) float sample_rate
+//      containing the required sample rate of the qti gravity sensor in hertz
+
+// Data Message
+// Output data event generated by the qti gravity sensor.
+message qti_gravity_motion_data_event
+{
+  // Device motion state detected using the gravity vector
+  required qti_gravity_device_motion_state device_motion_state = 1 [default=QTI_GRAVITY_DEVICE_MOTION_STATE_UNKNOWN];
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_accel.proto b/prebuilt/system/etc/sensors/proto/sns_accel.proto
new file mode 100644
index 0000000..0d5bb88
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_accel.proto
@@ -0,0 +1,103 @@
+// @file sns_accel.proto
+//
+// Defines the API for Accelerometer Sensors.
+// All Accelerometer Sensor drivers are required to comply with this API.
+// Any new functionality for Accelerometer Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_std_event_gated_sensor.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The Accelerometer Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "accel".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute values in mg/LSB unit.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in +/-g unit.
+// 4. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The Accelerometer Sensor handles the sns_std_sensor_config
+//    message request with msgid SNS_STD_SENSOR_MSGID_SNS_STD_SENSOR_CONFIG
+//    for all non-gated stream enable/update requests.
+// 2. The Accelerometer Sensor handles the sns_std_sensor_config
+//    message request with msgid SNS_STD_EVENT_GATED_SENSOR_MSGID_SNS_STD_SENSOR_CONFIG
+//    for all gated stream enable/update requests.
+//    a. Accelerometer stream is gated on the motion detection feature
+//       available on most accel hardware. This feature is published via the
+//       "motion_detect" Sensor by the same driver library as "accel" Sensor.
+//    b. If "motion_detect" is not supported then the Sensor does not support
+//       stream gating. Any gated client request is rejected in this case.
+// 3. The Accelerometer Sensor uses batching_period item in
+//    sns_std_request as the requested batching rate to determine
+//    hardware FIFO watermark.
+
+// Handling stream events:
+// 1. The Accelerometer Sensor publishes acceleration data stream events
+//    using the sns_std_sensor_event message.
+// 2. Each stream event contains three output data fields where data is
+//    in m/s2 units and is factory calibrated.
+// 3. Data in the stream is adjusted to Android coordinate system relative to a
+//    mobile device held with screen facing the user in it's natural orientation:
+//    X-axis: parallel to the screen pointing to the right
+//    Y-axis: parallel to the screen pointing to the top
+//    Z-axis: perpendicular to the screen pointing towards the user
+//    This conforms to the mobile device axes orientation as specified by the
+//    Android Sensor API.
+// 4. Data in the stream event is ordered as:
+//    data[0] = X-axis
+//    data[1] = Y-axis
+//    data[2] = Z-axis
+// 5. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 6. The Accelerometer Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+// 7. The Accelerometer Sensor publishes a factory calibration event using the
+//    sns_cal_event message. It uses bias and comp_matrix fields in this event.
+//    It publishes this event each time there is change in it's factory calibration
+//    data or when a client sends a new streaming request.
+// 8. When all outstanding requests to the Sensor are gated requests and if the
+//    "motion_detect" Sensor is enabled then the accel Sensor stops generating
+//    output events.
+//    a. When motion detect interrupt fires:
+//       - All existing accel gated stream requests are converted to non-gated
+//         stream requests.
+//         The accel Sensor publishes an event with message ID
+//         SNS_STD_EVENT_GATED_SENSOR_MSGID_GATED_REQ_CONVERTED_TO_NON_GATED to
+//         to indicate this change to it's gated clients.
+//       - The accel Sensor resumes generating output to all clients.
+//       So in effect motion_detect Sensor and accel gated Sensor stream have
+//       a one shot behavior.
+//    b. The Sensor resumes generating output events if motion detect interrupt
+//       is disabled potentially due to a new non-gated accel stream request or
+//       the request to motion_detect Sensor is disabled.
+// 9. When all outstanding requests to the Sensor are gated requests but if
+//    "motion_detect" Sensor is not enabled then the Sensor continues to generate
+//    output events.
+
+// Handling self-test requests:
+// 1. The Accelerometer Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The Accelerometer Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API.
+// 3. The Accelerometer Sensor could implement other test types.
+
+// Handling test events:
+// 1. The Accelerometer Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
diff --git a/prebuilt/system/etc/sensors/proto/sns_accel_cal.proto b/prebuilt/system/etc/sensors/proto/sns_accel_cal.proto
new file mode 100644
index 0000000..bbe04a0
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_accel_cal.proto
@@ -0,0 +1,32 @@
+// @file sns_accel_cal.proto
+//
+// Defines message types for the Accel Calibration Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_cal.proto";
+
+// The Accel Calibration Sensor determines the calibration parameters
+// for accel sensor
+
+// Accel Calibration Sensor Attributes:
+// - SNS_STD_SENSOR_ATTRID_TYPE: "accel_cal"
+// - SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG message ID is used to
+//      enable the sensor
+// - SNS_CAL_MSGID_SNS_CAL_RESET message ID is used to reset the algorithm
+//      and any previously determined calibration parameters.
+
+// Stream Events:
+// - SNS_CAL_MSGID_SNS_CAL_EVENT message ID is used to report calibration
+//      parameters to the client of the sensor. The sns_cal_event message as
+//      defined in sns_cal.proto is used to report this data event where the
+//      units for the bias field in the message are in rad / s
+
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_ambient_light.proto b/prebuilt/system/etc/sensors/proto/sns_ambient_light.proto
new file mode 100644
index 0000000..09cceff
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_ambient_light.proto
@@ -0,0 +1,73 @@
+// @file sns_ambient_light.proto
+//
+// Defines the API for Ambient Light Sensors.
+// All Ambient Light Sensor drivers are required to comply with this API.
+// Any new functionality for Ambient Light Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The Ambient Light Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "ambient_light".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute value in Lux/LSB.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in Lux unit.
+// 4. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The Ambient Light Sensor supports both streaming and on-change
+//    modes and the operating mode is configured in the Registry.
+// 2. The streaming Ambient Light Sensor handles the sns_std_sensor_config
+//    request for all stream enable/update requests.
+// 3. The on-change Ambient Light Sensor handles the
+//    SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG request for
+//    all stream enable/update requests.
+// 4. In on-change mode the Sensor uses interrupt operation and reports
+//    samples for only significant change in ambient light.
+//    Example: +/- 10% change.
+
+// Handling stream events:
+// 1. The Ambient Light Sensor publishes current illumination data stream
+//    events using the sns_std_sensor_event message.
+// 2. Each stream event contains two output data fields where data is
+//    factory calibrated and ordered as:
+//    data[0] = ambient light in Lux
+//    data[1] = raw ADC value associated with data[0]
+// 3. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 4. The Ambient Light Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+// 5. The Ambient Light Sensor publishes a factory calibration event using the
+//    sns_cal_event message. It uses bias and scale_factor fields in this event.
+//    It publishes this event each time there is change in it's factory calibration
+//    data or when a client sends a new request.
+
+// Handling self-test requests:
+// 1. The Ambient Light Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The Ambient Light Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API. The factory test for Ambient Light Sensor calibrates
+//    the sensor such that it's output Lux value is comparable to a standard
+//    Luxmeter output in any lighting condition.
+// 3. The Ambient Light Sensor could implement other test types.
+
+// Handling test events:
+// 1. The Ambient Light Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
diff --git a/prebuilt/system/etc/sensors/proto/sns_ambient_temperature.proto b/prebuilt/system/etc/sensors/proto/sns_ambient_temperature.proto
new file mode 100644
index 0000000..6f8b8df
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_ambient_temperature.proto
@@ -0,0 +1,68 @@
+// @file sns_ambient_temperature.proto
+//
+// Defines the API for Ambient Temperature Sensors.
+// All Ambient Temperature Sensor drivers are required to comply with this API.
+// Any new functionality for Ambient Temperature Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The Ambient Temperature Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "ambient_temperature".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute value in degrees Celsius/LSB.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in degrees Celsius unit.
+// 4. The ambient_temperature sensor is an on-change sensor.
+// 5. The SNS_STD_SENSOR_ATTRID_RATES attribute is not applicable
+//    since this is an on-change sensor.
+// 6. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The Ambient Temperature Sensor handles the SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG
+//    message ID for all stream enable/update requests.
+// 2. If the physical sensor supports hardware FIFO then the Ambient Temperature
+//    Sensor uses batching_period item in sns_std_request as the requested
+//    batching rate to determine hardware FIFO watermark.
+
+// Handling stream events:
+// 1. The Ambient Temperature Sensor publishes data stream events using the
+//    sns_std_sensor_event message.
+// 2. Each stream event contains one output data field where data is
+//    factory calibrated and ordered as:
+//    data[0] = Ambient Temperature data in degrees Celsius
+// 3. Each stream event publishs an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 4. The Ambient Temperature Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+// 5. The Ambient Temperature Sensor publishes a factory calibration event using the
+//    sns_cal_event message. It uses bias and scale_factor fields in this event.
+//    It publishes this event each time there is change in it's factory calibration
+//    data or when a client sends a new streaming request.
+
+// Handling self-test requests:
+// 1. The Ambient Temperature Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The Ambient Temperature Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API.
+// 3. The Ambient Temperature Sensor could implement other test types.
+
+// Handling test events:
+// 1. The Ambient Temperature Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
diff --git a/prebuilt/system/etc/sensors/proto/sns_amd.proto b/prebuilt/system/etc/sensors/proto/sns_amd.proto
new file mode 100644
index 0000000..1e3f967
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_amd.proto
@@ -0,0 +1,50 @@
+// @file sns_amd.proto
+//
+// Defines message types for the Absolute Motion Detector (AMD) Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// AMD calculates motion and stationary states. AMD will initially start in an
+// unknown state, and later transition to motion or stationary.
+
+// AMD Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "amd"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for AMD Sensor
+enum sns_amd_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_AMD_MSGID_SNS_AMD_EVENT = 772;
+}
+
+enum sns_amd_event_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_AMD_EVENT_TYPE_UNKNOWN          = 0;
+  SNS_AMD_EVENT_TYPE_STATIONARY       = 1;
+  SNS_AMD_EVENT_TYPE_MOTION           = 2;
+}
+
+message sns_amd_event
+{
+  // AMD motion state
+  required sns_amd_event_type state = 1 [default = SNS_AMD_EVENT_TYPE_UNKNOWN];
+}
+
+// Stream events:
+//
+// The sns_amd_event message is used to publish updated state
+//
+// AMD does not publish configuration events.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_aont.proto b/prebuilt/system/etc/sensors/proto/sns_aont.proto
new file mode 100644
index 0000000..de4b136
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_aont.proto
@@ -0,0 +1,37 @@
+// @file sns_aont.proto
+//
+// Defines message types for the AONT(Always On Test) Sensor.
+//
+// Copyright (c) 2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// The Always On Test Sensor runs an Always On sensors usecase for stability test coverage
+
+// Always On Test Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "always_on_test"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Stream Events:
+enum sns_aont_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_AONT_MSGID_SNS_AONT_DATA = 1024;
+}
+
+// Data Message
+// Output data event generated by the aont sensor.
+message sns_aont_data
+{
+  // AONT output - Accel data along axis x,y,z in m/s2
+  repeated float aont = 1 [(nanopb).max_count = 3];
+}
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_async_com_port.proto b/prebuilt/system/etc/sensors/proto/sns_async_com_port.proto
new file mode 100644
index 0000000..b9d492f
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_async_com_port.proto
@@ -0,0 +1,166 @@
+//  @file sns_async_com_port.proto
+//
+//  Defines standard message types for the Async Com Port
+//
+// Copyright (c) 2016-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std.proto";
+
+// Asynchronous Com Port
+//
+// The Asynchronous Com Port provides access to buses like I2C, I3C, SPI and others.
+// A complete list of all buses available in the sns_async_com_port_bus_type enum.
+//
+// The Asynchronous Com Port can perform read and write operations on these buses
+// asynchronously. This is the recommended way to perform large bus reads (example:
+// reading a large FIFO buffer). This file describes the use of the async com port
+// (ascp) API.
+//
+// First, the client must configure the port using the sns_async_com_port_config
+// message.
+//
+// To perform one or more read or write operations, the client should send the
+// sns_async_com_port_vector_rw message.
+//
+// A single sns_async_com_port_vector_rw message can contain multiple
+// sns_async_com_port_vector messages, the async com port will efficiently perform
+// all the transactions that are part of the parent sns_async_com_port_vector_rw
+// message. The results of the transaction will be sent as an sns_async_com_port_vector_rw
+// event.
+//
+// The async com port will internally manage efficiently opening and closing the
+// bus power lines and clock settings. The async com port can safely be used along
+// with the synchronous com port service.
+//
+// To help with encoding and decoding the sns_async_com_port_vector_rw messages,
+// utility functions are provided in sns_async_com_port_pb_utils.h
+
+
+// The operation to be performed by the async com port
+enum sns_async_com_port_operation_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_ASYNC_COM_PORT_OPERATION_TYPE_READ = 0;
+  SNS_ASYNC_COM_PORT_OPERATION_TYPE_WRITE = 1;
+}
+
+// The bus type to be accessed by the async com port
+enum sns_async_com_port_bus_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // I2C bus:
+  SNS_ASYNC_COM_PORT_BUS_TYPE_I2C            = 0;
+
+  // SPI bus:
+  SNS_ASYNC_COM_PORT_BUS_TYPE_SPI            = 1;
+
+  // I3C bus, standard data rate:
+  SNS_ASYNC_COM_PORT_BUS_TYPE_I3C_SDR        = 3;
+
+  // I3C bus, double data rate:
+  SNS_ASYNC_COM_PORT_BUS_TYPE_I3C_HDR_DDR    = 4;
+
+  // I3C bus, legacy I2C device attached to I3C bus:
+  SNS_ASYNC_COM_PORT_BUS_TYPE_I3C_I2C_LEGACY = 5;
+}
+
+// The registry address type to be used by async com port
+enum sns_async_com_port_reg_addr_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_ASYNC_COM_PORT_REG_ADDR_TYPE_8_BIT = 0;
+  SNS_ASYNC_COM_PORT_REG_ADDR_TYPE_16_BIT = 1;
+  SNS_ASYNC_COM_PORT_REG_ADDR_TYPE_32_BIT = 2;
+}
+
+// Configuration message
+message sns_async_com_port_config
+{
+  // The bus type
+  required sns_async_com_port_bus_type bus_type = 1;
+
+  // Slave Address for I2C.
+  // Dynamic slave address for I3C.
+  // Chip Select for SPI.
+  required fixed32 slave_control = 2;
+
+  // Register address type for the slave
+  required sns_async_com_port_reg_addr_type reg_addr_type = 3;
+
+  // Minimum bus clock supported by slave in kHz
+  required fixed32 min_bus_speed_kHz = 4;
+
+  // Maximum bus clock supported by slave in kHz
+  required fixed32 max_bus_speed_kHz = 5;
+
+  // Platform bus instance number (BLSP number)
+  required fixed32 bus_instance = 6;
+}
+
+// A single read or write operation.
+message sns_async_com_port_vector
+{
+  // Read or write operation
+  required sns_async_com_port_operation_type operation = 1;
+
+  // Register address
+  required fixed32 reg_addr = 2;
+
+
+  // Number of bytes to read or write.
+  // The async com port will ignore this field for a write
+  // operation and use the size of the buffer present in the message.
+  //
+  // For events generated by the async com port, this field will always match the
+  // size of the buffer when it is present.
+  optional fixed32 num_bytes = 3;
+
+  // Buffer
+  // The async com port will ignore this field in a request for a read operation.
+  optional bytes buffer = 4;
+}
+
+
+// A collection of read and write operations
+message sns_async_com_port_vector_rw
+{
+  // Number of operations
+  required fixed32 num_vectors = 1;
+
+  // Read/write operations
+  repeated sns_async_com_port_vector vectors = 2;
+}
+
+// Notifies the client of an error during a transaction
+message sns_async_com_port_error
+{
+  // Registry address
+  required fixed32 reg_addr = 1;
+
+  // Number of bytes that was to be read/written
+  required fixed32 num_bytes = 2;
+
+  // Error code
+  required sns_std_error error_code = 3;
+}
+
+
+// Message IDs
+enum sns_async_com_port_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_ASYNC_COM_PORT_MSGID_SNS_ASYNC_COM_PORT_CONFIG = 512;
+  SNS_ASYNC_COM_PORT_MSGID_SNS_ASYNC_COM_PORT_VECTOR_RW = 1024;
+  SNS_ASYNC_COM_PORT_MSGID_SNS_ASYNC_COM_PORT_ERROR = 1025;
+  SNS_ASYNC_COM_PORT_MSGID_SNS_ASYNC_COM_PORT_REG = 1026;
+}
+
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_basic_gestures.proto b/prebuilt/system/etc/sensors/proto/sns_basic_gestures.proto
new file mode 100644
index 0000000..dfec6ba
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_basic_gestures.proto
@@ -0,0 +1,101 @@
+// @file sns_basic_gestures.proto
+//
+// Defines message types for the the basic_gestures sensor
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+
+// Basic Gestures algorithm provides the ability to detect a Push, Pull,
+// or Shake gesture.
+// Basic Gestures reports "Axis Unknown", when the direction of a shake cannot
+// be reliably determined.
+
+// Basic gestures Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "basic_gestures"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_BASIC_GESTURES_MSGID_SNS_BASIC_GESTURES_CONFIG is used to enable the sensor
+
+// Message IDs for Basic gestures Sensor
+enum sns_basic_gestures_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+  SNS_BASIC_GESTURES_MSGID_SNS_BASIC_GESTURES_CONFIG = 512;
+  SNS_BASIC_GESTURES_MSGID_SNS_BASIC_GESTURES_EVENT = 1024;
+}
+//To mask Basic gesture algorithm output states
+enum sns_basic_gestures_event_mask
+{
+  option (nanopb_enumopt).long_names = false;
+  // For masking push and pull states
+  SNS_BASIC_GESTURES_EVENT_MASK_PUSH_AND_PULL        = 1;
+  // For masking shake left and right states
+  SNS_BASIC_GESTURES_EVENT_MASK_SHAKE_LEFT_AND_RIGHT = 2;
+  // For masking shake top and bottom states
+  SNS_BASIC_GESTURES_EVENT_MASK_SHAKE_TOP_AND_BOTTOM = 4;
+  //For masking shake other state
+  SNS_BASIC_GESTURES_EVENT_MASK_SHAKE_OTHER          = 8;
+}
+// Device Basic gesture detected by Basic gestures sensor
+enum sns_basic_gestures_event_type
+{
+  option (nanopb_enumopt).long_names = false;
+  //Phone is pulled away from the user in a direction perpendicular to the screen
+  SNS_BASIC_GESTURES_EVENT_TYPE_PUSH          = 1;
+  //Phone is pulled toward the user in a direction perpendicular to the screen
+  SNS_BASIC_GESTURES_EVENT_TYPE_PULL          = 2;
+  //Phone is shaken toward the left
+  SNS_BASIC_GESTURES_EVENT_TYPE_SHAKE_LEFT    = 3;
+  //Phone is shaken toward the right
+  SNS_BASIC_GESTURES_EVENT_TYPE_SHAKE_RIGHT   = 4;
+  //Phone is shaken toward the top
+  SNS_BASIC_GESTURES_EVENT_TYPE_SHAKE_TOP     = 5;
+  //Phone is shaken toward the bottom
+  SNS_BASIC_GESTURES_EVENT_TYPE_SHAKE_BOTTOM  = 6;
+  //Phone is shaken, but phone shake direction cannot be clearly determined
+  SNS_BASIC_GESTURES_EVENT_TYPE_SHAKE_OTHER   = 7;
+}
+// Event Message
+// Output data event generated by the basic_gestures sensor.
+// Default values of optional fields added in registry
+message sns_basic_gestures_config
+{
+  //Sleep time in seconds
+  optional float sleep           = 1;
+  //Push threshold m/s/s(default = 1.5G),where G=9.81188
+  //min_push_threshold:1G, max_push_threshold:5G
+  optional float push_threshold  = 2;
+  //Pull threshold m/s/s (default = 1.5G)
+  //min_pull_threshold:1G, max_pull_threshold:5G
+  optional float pull_threshold  = 3;
+  //Shake threshold m/s/s(default = 1.5G)
+  //min_shake_threshold:1G, max_shake_threshold:5G
+  optional float shake_threshold = 4;
+  //For masking output events.
+  //By default, All states reported.
+  //Client should use sns_basic_gestures_event_mask fields for masking,
+  //specific events
+  //Example: If client doesn't want push and pull events,then,
+  //client updates event_mask with SNS_BASIC_GESTURES_EVENT_MASK_PUSH_AND_PULL
+  //event_mask |= SNS_BASIC_GESTURES_EVENT_MASK_PUSH_AND_PULL;
+  optional bytes event_mask    = 5;
+}
+
+// Event Message
+// Output data event generated by the basic_gestures sensor.
+message sns_basic_gestures_event
+{
+ // basic_gestures sensor state info
+ required sns_basic_gestures_event_type state=1;
+}
+
+// Stream events:
+//
+// The sns_basic_gestures_event message is used to publish updated state
+//
+// Basic_gestures sensor does not publish configuration events.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_bring_to_ear.proto b/prebuilt/system/etc/sensors/proto/sns_bring_to_ear.proto
new file mode 100644
index 0000000..a8937f0
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_bring_to_ear.proto
@@ -0,0 +1,40 @@
+// @file sns_bring_to_ear.proto
+//
+// Defines message types for the the Bring_To_Ear sensor
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// Bring_to_ear sensor detects bring to ear event,
+// When a device has been held in a face-up position,
+// afterwhich the device is brought to the user's ear, with the top of the device facing upwards.
+
+// Bring to ear Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "bring_to_ear"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+//
+// ## Request Message: SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG
+// No configuration is available for this sensor.
+
+// ## Event Message: SNS_BRING_TO_EAR_MSGID_SNS_BRING_TO_EAR_EVENT
+// Reported upon new detection of bring_to_ear event
+
+
+// Message IDs for Bring to ear Sensor
+enum sns_bring_to_ear_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+  // Empty Message
+  SNS_BRING_TO_EAR_MSGID_SNS_BRING_TO_EAR_EVENT = 1024;
+}
+
+// Stream events:
+//
+// The sns_bring_to_ear_event message is used to publish updated state
+//
+// Bring_to_ear sensor does not publish configuration events.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_cal.proto b/prebuilt/system/etc/sensors/proto/sns_cal.proto
new file mode 100644
index 0000000..0c43669
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_cal.proto
@@ -0,0 +1,118 @@
+// @file sns_cal.proto
+//
+// Defines standard message types pertaining to calibration
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// For dynamic calibration supported by Calibration Sensors:
+// Client will use the standard on change config message id to enable 
+// Calibration Sensor. Calibration algorithms are inherently on change in
+// behavior.
+
+// For both dynamic calibration supported by Calibration Sensors &
+// factory calibration supported by Physical Sensors:
+// Client can send an empty request with the msg id for reset
+// to reset the calibration parameters.
+enum sns_cal_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+  SNS_CAL_MSGID_SNS_CAL_RESET =  512;
+  SNS_CAL_MSGID_SNS_CAL_EVENT = 1022;
+}
+
+// Calibration Event
+// Used as an output data event by Calibration Sensors to convey
+// dynamic calibration estimates and 
+// as a config event by Physical Sensors to convey factory calibration
+// being applied
+//
+// A) The data field of the sns_cal_event message
+// 
+// 1) float bias[] (Nx1 vector)
+//      The zero bias (B) correction subtracted to get calibrated sample.(Nx1 vector)
+//
+// 2) float scale_factor (Nx1 vector)
+//      The scaling (SF) to be done before doing any bias correction.
+//
+// 3) float comp_matrix (NxN matrix)
+//      The compensation matrix (CM). The matrix elements are in row major order ie:
+//      CM =  CM0  CM1  CM2
+//            CM3  CM4  CM5
+//            CM6  CM7  CM8
+//
+//      The calibrated sample (Sc) is computed as following.
+//
+//      if SF, B and CM are available,
+//
+//          Sc = CM * ((S .* SF) - B)
+//
+//      if only B and CM are available,
+//
+//          Sc = CM * (S - B)
+//
+//      if only SF and B are available,
+//
+//          Sc = ((S .* SF) - B)
+//
+//      if only SF is available,
+//
+//          Sc = S .* SF
+//
+//      if only B is available,
+//
+//          Sc = (S - B)
+//
+//      if only CM is available
+//
+//          Sc = CM * S
+//
+//      where:
+//          Sc = Calibrated sensor sample
+//          S = Sensor sample (Nx1 vector)
+//          SF = Scaling factor to be applied to S
+//          CM = compensation_matrix
+//          B = bias
+//          "*" represents matrix multiplication
+//          ".*" represents element-by-element multiplication
+//
+//
+// B) The status field of the sns_std_sensor_event message contains
+//    the quality of calibration defined by sns_std_sensor_sample_status as
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE = 0; // Sample is unreliable.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_LOW = 1; // Sample is low accuracy.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_MEDIUM = 2;// Sample is medium accuracy.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH = 3; // Sample is high accuracy.
+
+message sns_cal_event
+{
+  //Optional bias value
+  //If no bias is being published this will be of size 0.  
+  //Generic for different axes biases.
+  //Size is defined by axes value inherently.
+  repeated float bias = 1;
+  
+  //Optional scaling factor
+  //If no scaling factor is published this will be of size 0.
+  //Size if published is has to be equal to the axes of the data
+  repeated float scale_factor = 2;
+ 
+  //If no CM is being published this will be of size 0.
+  //Optional CM values . 
+  //Size if published should be equal to matrix of size [axes*axes] 
+  repeated float comp_matrix = 3;
+  
+  // Event sample status.
+  required sns_std_sensor_sample_status status = 4 [default = SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE];
+
+  // Calibration ID, a unique identifier for the calibration set being used
+  // As an example, could be set when there are distinct calibration sets for different
+  // device modes being maintained
+  optional fixed32 cal_id = 5;
+}
+
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_ccd_ttw.proto b/prebuilt/system/etc/sensors/proto/sns_ccd_ttw.proto
new file mode 100644
index 0000000..e26d1cf
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_ccd_ttw.proto
@@ -0,0 +1,35 @@
+// @file sns_ccd_ttw.proto
+//
+// Defines message types for the ccd_ttw Sensor.
+//
+// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// The CCD ttw (tilt_to_wake) detects substantial phone rotation (gesture) within
+// limited period ending in a specific range of the pitch and roll angles.
+
+// tilt_to_wake Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "ccd_ttw"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for ccd_ttw Sensor
+enum sns_ccd_ttw_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_CCD_TTW_MSGID_SNS_CCD_TTW_EVENT = 775;
+}
+
+// Stream events:
+//
+// A NULL message with message ID SNS_CCD_TTW_MSGID_SNS_CCD_TTW_EVENT is used to
+// publish ccd_ttw event
+//
+// ccd_ttw does not publish configuration events.
diff --git a/prebuilt/system/etc/sensors/proto/sns_ccd_walk.proto b/prebuilt/system/etc/sensors/proto/sns_ccd_walk.proto
new file mode 100644
index 0000000..0a100c1
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_ccd_walk.proto
@@ -0,0 +1,40 @@
+// @file sns_ccd_walk.proto
+//
+// Defines message types for the Walk CCD.
+//
+// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// CCD Walk calculates a walk state.
+// When a walk is detected, the sensor will send one WALK event.
+// To send additional walk events, the sensor must be re-armed with the
+// SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG event again.
+//
+// No events are generated when not in the walk state.
+
+// CCD Walk Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "ccd_walk"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_SINGLE_OUTPUT
+
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for Walk Sensor
+enum sns_ccd_walk_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_CCD_WALK_MSGID_SNS_CCD_WALK_EVENT = 773;
+}
+
+// Stream events:
+//
+// A NULL message with message ID SNS_CCD_WALK_MSGID_SNS_CCD_WALK_EVENT is used to
+// publish the walk event.
+//
+// Walk does not publish configuration events.
diff --git a/prebuilt/system/etc/sensors/proto/sns_client.proto b/prebuilt/system/etc/sensors/proto/sns_client.proto
new file mode 100644
index 0000000..75fda30
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_client.proto
@@ -0,0 +1,116 @@
+// @file sns_client.proto
+//
+// Defines the interface between external clients and the Sensors QMI Client
+// Manager.  The Client Manager is the primary path for external clients
+// to communicate with the SSC.
+//
+// Copyright (c) 2016-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std.proto";
+import "sns_std_type.proto";
+
+// Message IDs
+//
+// Message IDs uniquely identify a particular message amongst all message
+// supported by a Sensor, both requests and events; they need not be unique
+// between different Sensors.  IDs are subdivided into several reserved pools.
+// These reservations are made so that Framework components can appropriately
+// optimize their processing.
+//
+// Reserved for Framework use only:
+// 0-127   - Request Messages
+// 128-255 - Non-recurrent events (configuration updates, one-time events, etc)
+// 256-511 - Recurrent and/or periodic events (e.g. sensor samples)
+//
+// Sensor use:
+// 512-767  - Request messages
+// 768-1023 - Non-recurrent events
+// 1024-1536 - Recurrent events
+//
+// Note that messages serving as request messages can also be sent as
+// configuration events back to the client (with the same ID).  While batching
+// data for a non-wakeup client, if the AP is in suspend and all batching space
+// exhausted, the oldest recurrent events may be dropped.
+
+// Framework-defined message IDs:
+enum sns_client_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // Disable request explicitly handled only on the client interface.
+  SNS_CLIENT_MSGID_SNS_CLIENT_DISABLE_REQ = 10;
+
+  // NOTE: 120-127 Are reserved
+}
+
+enum sns_client_delivery {
+  option (nanopb_enumopt).long_names = false;
+
+  // Send events whenever available (at sample rate or batch period)
+  // - If a batch_period larger than system capacity is requested, all data
+  //   will be sent upon capacity exhaustion.
+  // - The flush_period will be effectively ignored, as unsent batched
+  //   data will not accrue in the buffer.
+  SNS_CLIENT_DELIVERY_WAKEUP = 0;
+  // Send events only when client processor is awake; batch otherwise.  Once
+  // the target processor exits suspend, any/all pending events will be sent.
+  SNS_CLIENT_DELIVERY_NO_WAKEUP = 1;
+}
+
+
+// Request Message
+message sns_client_request_msg {
+  // SUID associated with this request; intended destination
+  required sns_std_suid suid = 1;
+
+  // See comment above
+  required fixed32 msg_id = 2;
+
+  // Whether to wakeup the client processor (if it is in suspend), when an
+  // event is generated and ready to send.  The Qualcomm Client Manager will
+  // enforce these criteria for all clients; this information is made available
+  // to sensors for optimization purposes only.
+  message suspend_config {
+    // Processor on which the client resides; If a flush occurs for one client
+    // on an external processor, all clients will receive a flush of data.
+    required sns_std_client_processor client_proc_type = 1 [default = SNS_STD_CLIENT_PROCESSOR_APSS];
+
+    // Whether to send events while the specified processor is in suspend.
+    required sns_client_delivery  delivery_type = 2 [default = SNS_CLIENT_DELIVERY_WAKEUP];
+
+    //The client expects that, when the message with an id specified in this list
+    //is generated, the message should only be delivered to the client if data
+    //is already being delivered to the processor mentioned above.
+    repeated fixed32 nowakeup_msg_ids = 3;
+  }
+  required suspend_config susp_config = 3;
+
+  // Base message payload; contents will be partially specified by Sensor developer
+  required sns_std_request request = 4;
+}
+
+message sns_client_event_msg {
+  // SUID associated with this Event; source of data
+  required sns_std_suid suid = 1;
+
+  // An event generated by a Sensor; used within sns_client_event_msg and SensorBatchMessage
+  message sns_client_event {
+    // See comment above
+    required fixed32 msg_id = 1;
+
+    // Timestamp associated with this event
+    // For most events, this timestamp is specified by the Sensor.
+    // For events generated by the Framework (such as configuration updates or
+    // error events), this timestamp refers to the time at which the event was
+    // created.
+    required fixed64 timestamp = 2;
+
+    // Dynamic length payload, containing the actual data/event
+    // This payload will need to be decoded separately, using the Sensor-specific
+    // header file
+    required bytes payload = 3;
+  }
+  repeated sns_client_event events = 2;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_cmc.proto b/prebuilt/system/etc/sensors/proto/sns_cmc.proto
new file mode 100644
index 0000000..2bdb018
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_cmc.proto
@@ -0,0 +1,81 @@
+
+// @file sns_cmc.proto
+//
+// Defines message types for the Coarse Motion Classifier (CMC) Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+
+// CMC Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "coarse_motion_classifier"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for CMC Sensor
+enum sns_cmc_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_CMC_MSGID_SNS_CMC_EVENT = 772;
+}
+
+// Gives the state which the algorithm is capable
+// of detecting
+enum sns_cmc_motion_state
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // stated with 1 to match with algo where 0
+  // is for UNKNOWN
+  SNS_CMC_STATIONARY  = 1;
+  SNS_CMC_MOVE        = 2;
+  SNS_CMC_FIDDLE      = 3;
+  SNS_CMC_PEDESTRIAN  = 4;
+  SNS_CMC_VEHICLE     = 5;
+  SNS_CMC_WALK        = 6;
+  SNS_CMC_RUN         = 7;
+  SNS_CMC_BIKE        = 8;
+}
+
+// Gives the information about the states represented
+// by sns_cmc_motion_state
+enum sns_cmc_motion_state_event
+{
+  option (nanopb_enumopt).long_names = false;
+  // when any state of any of the motion state cannot
+  // be determined. The first event of first client will
+  // typically have all states as SNS_MS_UNKNOWN
+  SNS_MS_UNKNOWN  = 0;
+  // A given motion state is ACTIVE
+  SNS_MS_ACTIVE   = 1;
+  // A given motion state is INACTIVE
+  SNS_MS_INACTIVE = 2;
+}
+
+message sns_cmc_event
+{
+  message data
+  {
+     // motion state by CMC
+     required sns_cmc_motion_state ms_state = 1;
+
+     // gives UNKNOWN/ACTIVE/INACTIVE information for the motion state
+     required sns_cmc_motion_state_event ms_state_event = 2  [default = SNS_MS_UNKNOWN];
+  }
+
+  repeated data events = 1;
+}
+
+// Stream events:
+//
+// The sns_cmc_event message is used to publish updated state
+//
+// CMC does not publish configuration events.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_cmd.proto b/prebuilt/system/etc/sensors/proto/sns_cmd.proto
new file mode 100644
index 0000000..7221815
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_cmd.proto
@@ -0,0 +1,37 @@
+// @file sns_cmd.proto
+//
+// Defines message types for the Continuous Motion Detector (CMD) Sensor.
+//
+// Copyright (c) 2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// CMD identified continuous motions such as vehicle and walk. CMD will initially start in an
+// unknown state, and later transition to motion or stationary.
+
+// CMD Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "cmd"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for CMD Sensor
+enum sns_cmd_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_CMD_MSGID_SNS_CMD_EVENT = 772;
+}
+
+// Stream events:
+//
+// A NULL message with message ID SNS_CMD_MSGID_SNS_CMD_EVENT is used to
+// publish CMD event
+//
+// CMD does not publish configuration events.
+
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_da_test.proto b/prebuilt/system/etc/sensors/proto/sns_da_test.proto
new file mode 100644
index 0000000..59ab8f4
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_da_test.proto
@@ -0,0 +1,56 @@
+// @file sns_da_test.proto
+//
+// Defines the API for communicating with the Driver acceptance
+// test sensor.
+// This is to used by the linux command line partner application
+// to send string messages to the sns_da_test_sensor
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+
+enum sns_da_test_msgid {
+  option (nanopb_enumopt).long_names = false;
+  SNS_DA_TEST_MSGID_SNS_DA_TEST_REQ = 512;
+  SNS_DA_TEST_MSGID_SNS_DA_TEST_LOG = 768;
+  SNS_DA_TEST_MSGID_SNS_DA_TEST_EVENT  = 1024;
+}
+
+//This message contains the test parameters as a single string in the format below
+//-testcase=<not_mandatory> -sample_rate=< any +tive value > -sensor=<data_type>
+//-duration=< any +tive value in seconds> -batch_period=<+tive value in seconds>
+message sns_da_test_req {
+  optional string test_args = 1;
+}
+
+//This message contains any return data from the test driver including PASS/FAIL
+//msg. and explainations if applicable
+message sns_da_test_event {
+  optional string test_event = 1;
+}
+
+// Sensor State log message
+// This definition is used by da_test sensor to log test
+// information when publishing sensor api event
+message sns_da_test_log {
+  //Time elapsed between streaming start request time and first sample received
+  required uint64 time_to_first_event = 1;
+
+  //Time elapsed between streaming stop request time and last sample received
+  required sfixed32 time_to_last_event = 2;
+
+  //Time when last sample was received
+  required uint64 sample_ts = 3;
+
+  //Total number of samples received
+  required uint32 total_samples = 4;
+
+  //time delta between samples avegraged over number of samples
+  required uint32 avg_delta = 5;
+
+  //configures sample rate received in the SNS_STD_SENSOR_PHYSICAL_CONFIG_EVENT
+  required sfixed32 recvd_phy_config_sample_rate = 6;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_dae.proto b/prebuilt/system/etc/sensors/proto/sns_dae.proto
new file mode 100644
index 0000000..777bd82
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_dae.proto
@@ -0,0 +1,256 @@
+// @file sns_dae.proto
+//
+// Defines all high-level messages sent to/from the Nano sensor environment
+//
+// Copyright (c) 2017,2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+
+import "sns_std_type.proto";
+import "sns_interrupt.proto";
+import "sns_async_com_port.proto";
+
+
+enum sns_dae_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // to initialize the nano sensor before it can be used
+  SNS_DAE_MSGID_SNS_DAE_SET_STATIC_CONFIG    = 600;
+
+  // provides nano sensor with S4S config info after the initial S4S synch period
+  SNS_DAE_MSGID_SNS_DAE_S4S_DYNAMIC_CONFIG   = 601;
+
+  // to start nano sensor streaming
+  SNS_DAE_MSGID_SNS_DAE_SET_STREAMING_CONFIG = 602;
+
+  // no message body
+  // to flush FIFO data before changing ODR and/or WM
+  // no data event will be generated
+  SNS_DAE_MSGID_SNS_DAE_FLUSH_HW             = 603;
+
+  // no message body
+  // to request nano sensor to generate data event from the available data
+  // HW flush will NOT be done
+  SNS_DAE_MSGID_SNS_DAE_FLUSH_DATA_EVENTS    = 604;
+
+  // no message body
+  // to stop nano sensor streaming
+  SNS_DAE_MSGID_SNS_DAE_PAUSE_SAMPLING       = 605;
+
+  // no message body
+  // to stop S4S schedule
+  SNS_DAE_MSGID_SNS_DAE_PAUSE_S4S_SCHED      = 606;
+
+  // response from DAE sensor for each request
+  SNS_DAE_MSGID_SNS_DAE_RESP                 = 800;
+
+  // message from DAE sensor to deliver all available data
+  SNS_DAE_MSGID_SNS_DAE_DATA_EVENT           = 1200;
+
+  // message from DAE sensor to deliver unhandle interrupts
+  SNS_DAE_MSGID_SNS_DAE_INTERRUPT_EVENT      = 1201;
+}
+
+enum sns_dae_timestamp_type {
+  // Unknown timestamp type
+  SNS_DAE_TIMESTAMP_TYPE_UNKNOWN = 0;
+
+  // The timestamp corresponds to an interrupt. Timestamp captured with hardware
+  // timestamping engine
+  SNS_DAE_TIMESTAMP_TYPE_HW_IRQ = 1;
+
+  // The timestamp corresponds to an interrupt. Timestamp captured with software
+  // within the interrupt handler
+  SNS_DAE_TIMESTAMP_TYPE_SW_IRQ = 2;
+
+  // The timestamp is the current system time when the data was read. The data
+  // was read due to a system timer firing (for polling & S4S sensors)
+  SNS_DAE_TIMESTAMP_TYPE_TIMER = 3;
+
+  // The timestamp is the current system time when the data was read. The data
+  // was read due to a flush command.
+  SNS_DAE_TIMESTAMP_TYPE_SYSTEM_TIME = 4;
+}
+
+// S4S static information
+//
+// This contains S4S information which does not change during the life of the S4S sensor
+message sns_s4s_static_info {
+  // Register address of the S4S ST command
+  required int32   st_reg_addr = 1;
+
+  // Optional data byte which needs to be sent along with ST
+  optional int32   st_reg_data = 2;
+
+  // Register address of the S4S DT command
+  required int32   dt_reg_addr = 3;
+}
+
+
+// Triaxial sensor input to output axis conversion
+message sensor_to_phone_conversion {
+
+  // input axis index (x=0, y=1, z=2)
+  required uint32 ipaxis = 1;
+
+  // output axis index the above input axis maps to
+  required uint32 opaxis = 2;
+
+  // whether the input needs to be negated when
+  // translating to the output axis
+  required bool invert = 3;
+}
+
+// Accel static informtaion
+//
+// Accel configuration setting that is not expected to change at run time
+message sns_accel_static_info {
+
+  // Factory calibration: offset, in g's (DEPRECATED - moved to sns_accel_dynamic_info)
+  repeated float offset_cal = 1 [(nanopb).max_count = 3, deprecated = true];
+
+  // Factory calibration: scale factor (DEPRECATED - moved to sns_accel_dynamic_info)
+  repeated float scale_cal = 2[(nanopb).max_count = 3, deprecated = true];
+
+  // range in G
+  required int32 accel_range = 3;
+
+  // axis map to convert from sensor to phone 
+  repeated sensor_to_phone_conversion axis_map = 4 [(nanopb).max_count = 3];
+}
+
+
+// Accel dynamic informtaion
+//
+// This data may be updated each time the accel configuration changes
+message sns_accel_dynamic_info {
+  // ODR
+  required float odr = 1;
+
+  // How many initial samples after ODR change are invalid
+  required uint32 num_initial_invalid_samples = 2;
+
+  // Factory calibration: offset, in g's
+  repeated float offset_cal = 3 [(nanopb).max_count = 3];
+
+  // Factory calibration: scale factor
+  repeated float scale_cal = 4 [(nanopb).max_count = 3];
+
+}
+
+// Polling config info
+message sns_polling_config_info {
+
+  // Absolute time, in 19.2MHz ticks since boot, at which to poll the sensor
+  required fixed64 polling_offset = 1;
+
+  // interval between polling
+  required fixed64 polling_interval_ticks = 2;
+}
+
+// Sensor static configuration
+//
+// This data may not change for the life of the sensor, and should be configured
+// at initilization/boot time.
+message sns_dae_set_static_config {
+
+  // name of the function table for the nano version of the physical sensor
+  required string func_table_name = 1 [(nanopb).max_size = 32];
+
+  // Operational mode of the sensor:
+  // 0 --> Polling
+  // 1 --> Interrupt
+  // 2 --> IBI (I3C In Band Interrupt)
+  required int32 interrupt = 2;
+
+  // x/y/z axis map for this sensor (DEPRECATED - moved to sns_accel_static_info)
+  repeated int32           axis_map = 3 [(nanopb).max_count = 3, deprecated = true];
+
+  // irq_config required if interrupt == 1
+  optional sns_interrupt_req     irq_config = 4;
+
+  // ibi_config required if interrupt == 2
+  optional sns_ibi_req           ibi_config = 8;
+
+  // s4s_config required if sensor supports S4S
+  optional sns_s4s_static_info s4s_config = 5;
+
+  // port configuration
+  required sns_async_com_port_config ascp_config = 6;
+
+  // Only for accel sensors
+  optional sns_accel_static_info accel_info = 7;
+}
+
+// S4S dynamic information
+//
+// This contains S4S information which may change with S4S configuration
+message sns_dae_s4s_dynamic_config {
+
+  // Absolute time, in 19.2MHz ticks since boot, of the start of an S4S T_PH period
+  required fixed64 ideal_sync_offset = 1;
+
+  // Time, in 19.2MHz ticks, in one S4S T_PH period
+  required fixed64 sync_interval = 2;
+
+  // S4S resolution ratio (RR), as defined in the S4S spec. The final S4S RR will
+  // be 2^-(11+resolution_ratio).
+  required int32  resolution_ratio = 3;
+
+  // Minimum time, in 19.2MHz ticks, after the S4S T_PH period to send ST/DT
+  // messages. Will depend on clock accuracy of the sensor, as well as current
+  // sync_interval
+  required int32  st_delay = 4;
+}
+
+message sns_dae_set_streaming_config {
+
+  // minimum number of samples between data events; may still receive fewer samples
+  required uint32 dae_watermark = 1;
+
+  // discard data older than this limit (relative to current system time)
+  optional fixed64 data_age_limit_ticks = 2;
+
+  // required for polling sensors
+  optional sns_polling_config_info polling_config = 3;
+
+  // Only for accel sensors
+  optional sns_accel_dynamic_info accel_info = 4;
+
+  // Expected number of bytes read from sensor for each call to the DAE environment
+  // "get_data" driver function.
+  // If not included, default value is 100 bytes.
+  optional uint32 expected_get_data_bytes = 5;
+}
+
+message sns_dae_resp {
+  // Message ID this error code is associated with
+  required int32              msg_id = 1;
+
+  // result of the request associated with this response
+  required sns_std_error      err    = 2;
+}
+
+message sns_dae_data_event {
+  // Timestamp: For interrupt based sensors, this is the timestamp of the IRQ.
+  // For polling sensors, this is the timestamp of when get_data() was called
+  required fixed64 timestamp = 1;
+
+  // Timestamp type
+  optional sns_dae_timestamp_type timestamp_type = 3;
+
+  // Format of the sensor_data is vendor specific, and up to the nano sensor
+  // implementation.
+  required bytes  sensor_data = 2;
+}
+
+message sns_dae_interrupt_event {
+  // timestamp of the IRQ.
+  required fixed64 timestamp = 1;
+
+  // Format of registers are vendor specific, and up to the nano sensor implementation.
+  required bytes registers = 2 [(nanopb).max_size = 8];
+}
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_data_acquisition_engine.proto b/prebuilt/system/etc/sensors/proto/sns_data_acquisition_engine.proto
new file mode 100644
index 0000000..21ef2c5
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_data_acquisition_engine.proto
@@ -0,0 +1,11 @@
+// @file sns_data_acquisition_engine.proto
+//
+// Includes sns_dae.proto
+//
+// Copyright (c) 2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+
+import "sns_dae.proto";
diff --git a/prebuilt/system/etc/sensors/proto/sns_device_mode.proto b/prebuilt/system/etc/sensors/proto/sns_device_mode.proto
new file mode 100644
index 0000000..66b5efd
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_device_mode.proto
@@ -0,0 +1,61 @@
+// @file sns_device_mode.proto
+//
+// Defines message types for the Device Mode Sensor.
+//
+// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// DEVICE_MODE determine the current mode of the device
+
+// DEVICE_MODE Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "device_mode"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+// - Client must remove stream to disable the sensor
+
+// Message IDs for DEVICE_MODE Sensor
+enum sns_device_mode_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_DEVICE_MODE_MSGID_SNS_DEVICE_MODE_EVENT = 772;
+}
+
+enum sns_device_mode
+{
+  option (nanopb_enumopt).long_names = false;
+  SNS_DEVICE_MODE_UNKNOWN = 0;
+  SNS_DEVICE_MODE_FLIP_OPEN  = 1;
+}
+
+enum sns_device_state
+{
+  option (nanopb_enumopt).long_names = false;
+  SNS_DEVICE_STATE_INACTIVE  = 0;
+  SNS_DEVICE_STATE_ACTIVE  = 1;
+}
+
+message sns_device_mode_event
+{
+  message mode_spec {
+    required sns_device_mode mode = 1;
+
+    required sns_device_state state = 2;
+  }
+  // Device Mode
+  repeated mode_spec device_mode = 1;
+}
+
+// Stream events:
+//
+// The sns_device_mode_event message is used to publish updated mode
+//
+// DEVICE_MODE does not publish configuration events.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_device_orient.proto b/prebuilt/system/etc/sensors/proto/sns_device_orient.proto
new file mode 100644
index 0000000..d667df0
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_device_orient.proto
@@ -0,0 +1,57 @@
+// @file sns_device_orient.proto
+//
+// Defines the API for the Device Orientation sensors
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// A device orientation sensor reports the current orientation of the device.
+//
+// Minor or transient rotations should not cause a new event to be reported,
+// and this sensor should only be implemented with the help of an accelerometer.
+// Moving the device to an orientation where the Z axis is vertical (either up
+// or down) should not cause a new event to be reported.
+
+// ## Device Orientation sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "device_orient"
+//
+// ## Request Message: SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG
+// No configuration is available for this sensor.
+//
+// ## Event Message: SNS_DEVICE_ORIENT_MSGID_SNS_DEVICE_ORIENT_EVENT
+
+// Message IDs for Device Orientation Sensor
+enum sns_device_orient_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_DEVICE_ORIENT_MSGID_SNS_DEVICE_ORIENT_EVENT = 776;
+}
+
+enum sns_device_orient_event_type
+{
+  option (nanopb_enumopt).long_names = false;
+  
+  SNS_DEVICE_ORIENT_EVENT_TYPE_UNKNOWN     = -1;
+  // Device is in default orientation (Y axis is vertical and points up)
+  SNS_DEVICE_ORIENT_EVENT_TYPE_DEFAULT     = 0;
+  // Device is rotated 90 degrees counter-clockwise from default orientation
+  // (X axis is vertical and points up)
+  SNS_DEVICE_ORIENT_EVENT_TYPE_POS_1      = 1;
+  // Device is rotated 180 degrees from default orientation (Y axis is
+  // vertical and points down)
+  SNS_DEVICE_ORIENT_EVENT_TYPE_POS_2      = 2;
+  // Device is rotated 90 degrees clockwise from default orientation (X axis
+  // is vertical and points down)
+  SNS_DEVICE_ORIENT_EVENT_TYPE_POS_3      = 3;
+}
+
+message sns_device_orient_event
+{
+  // Detected state
+  required sns_device_orient_event_type state = 1;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_diag.proto b/prebuilt/system/etc/sensors/proto/sns_diag.proto
new file mode 100644
index 0000000..5819ae4
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_diag.proto
@@ -0,0 +1,433 @@
+// @file sns_diag.proto
+//
+// Defines log messages used by the sensors diag service
+//
+// Copyright (c) 2016-2019 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std.proto";
+import "sns_std_sensor.proto";
+import "sns_client.proto";
+
+// Batch Sample Type
+enum sns_diag_batch_sample_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // This is the only sample in the batch
+  SNS_DIAG_BATCH_SAMPLE_TYPE_ONLY = 0;
+
+  // This is the first sample of the batch
+  SNS_DIAG_BATCH_SAMPLE_TYPE_FIRST = 1;
+
+  // This is an intermediate sample of the batch
+  SNS_DIAG_BATCH_SAMPLE_TYPE_INTERMEDIATE = 2;
+
+  // This is the last sample of the batch
+  SNS_DIAG_BATCH_SAMPLE_TYPE_LAST = 3;
+}
+
+// Sensor Interrupts
+enum sns_diag_interrupt
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Interrupt caused by detection of a threshold being
+  // exceeded
+  SNS_DIAG_INTERRUPT_THRESHOLD = 0;
+
+  // Interrupt caused by detection of movement of the device
+  SNS_DIAG_INTERRUPT_MOTION    = 1;
+
+  // Interrupt caused by detection of tilting of the device
+  SNS_DIAG_INTERRUPT_TILT      = 2;
+
+  // Interrupt caused by detection of free fall
+  SNS_DIAG_INTERRUPT_FREE_FALL = 3;
+
+  // Interrupt caused by detection of double-tap
+  SNS_DIAG_INTERRUPT_DOUBLE_TAP= 4;
+
+  // Interrupt caused by detection of acceleration shock
+  SNS_DIAG_INTERRUPT_SHOCK     = 5;
+
+  // Interrupt caused by CCD AMD
+  SNS_DIAG_INTERRUPT_CCD_AMD   = 6;
+
+  // Interrupt caused by CCD WALK
+  SNS_DIAG_INTERRUPT_CCD_WALK  = 7;
+
+  // Interrupt caused by CCD TILT
+  SNS_DIAG_INTERRUPT_CCD_TILT  = 8;
+
+  // Interrupt caused by CCD TE0
+  SNS_DIAG_INTERRUPT_CCD_TE0   = 9;
+
+  // Interrupt caused by CCD TE1
+  SNS_DIAG_INTERRUPT_CCD_TE1   = 10;
+
+  // Interrupt caused by CCD TE2
+  SNS_DIAG_INTERRUPT_CCD_TE2   = 11;
+}
+
+// Opaque Payload
+// This message defines the fields used to log an undefined payload
+message sns_diag_opaque_payload
+{
+  required bytes payload = 1;
+}
+
+// Batch Sample
+// This message defines the fields used to log batched data.
+message sns_diag_batch_sample
+{
+  // Indicates if the sample is the first, intermediate, last or only
+  // sample of a batch
+  required sns_diag_batch_sample_type sample_type = 1 [default = SNS_DIAG_BATCH_SAMPLE_TYPE_ONLY];
+
+  // Timestamp of the sensor state data sample
+  required fixed64 timestamp = 2;
+
+  // Sensor state data sample
+  repeated float sample = 3;
+
+  // Data status.
+  required sns_std_sensor_sample_status status = 4 [default = SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE];
+}
+
+// Sensor State Hardware Interrupt Log Packet
+// This message defines the fields used to log sensor state information
+// pertaining to hardware interrupts
+// This message is used as the payload field of sns_diag_sensor_log
+message sns_diag_sensor_state_interrupt
+{
+  // Type of sensor hardware interrupt
+  required sns_diag_interrupt interrupt = 1;
+
+  // Timestamp when the interrupt occurred
+  required fixed64 timestamp = 2;
+}
+
+// Sensor State Raw
+// This message defines the fields used to log sensor state information
+// pertaining to raw uncalibrated physical sensor data.
+// This message is used as the payload field of sns_diag_sensor_log
+message sns_diag_sensor_state_raw
+{
+  repeated sns_diag_batch_sample sample = 1;
+}
+
+// Client API Response Message
+message sns_diag_client_resp_msg
+{
+  // The error response sent to the client
+  required sns_std_error error = 1;
+}
+
+// Client API log packet
+// This message defines the fields to log all
+// Request, Response and Event messages at the Client API
+// This message is used as the payload field of sns_diag_sensor_log
+message sns_diag_client_api_log
+{
+  // The client id that identifies the client connection
+  required fixed64 client_id = 1;
+
+  // Data type of the source sensor
+  required string src_sensor_type = 2;
+
+  // The Client API log packet payload
+  oneof client_api_log_payload
+  {
+    // Client API Request message as defined in sns_client.proto
+    sns_client_request_msg request_payload = 100;
+
+    // Client API Event message as defined in sns_client.proto
+    sns_client_event_msg event_payload = 101;
+
+    // Client API Response message as defined in sns_diag.proto
+    sns_diag_client_resp_msg resp_payload = 102;
+  }
+}
+
+// Sensor API log packet
+// This message defines the fields to log all Request and
+// Event messages at the Sensor API
+// This message is used as the payload field of sns_diag_sensor_log
+message sns_diag_sensor_api_log
+{
+  // The message id of the message being logged
+  required fixed32 message_id = 1;
+
+  // Timestamp associated with this message
+  required fixed64 timestamp = 2;
+
+  // Data stream associated with this message
+  optional fixed64 stream_id = 3;
+
+  // The Sensor API log packet payload
+  oneof sensor_api_log_payload
+  {
+    // Sensor API Event message containing sensor specific event message
+    // as defined in the sensor's proto api file
+    sns_diag_opaque_payload opaque_payload = 100;
+
+    // Sensor API Request message as defined in sns_std.proto
+    sns_std_request request_payload = 101;
+  }
+}
+
+// Sensor log packet
+// This message defines the fields to log all sensor specific
+// messages. This includes Sensor API messages, Client API messages,
+// HW Interrupt messages, Sensor State messages
+message sns_diag_sensor_log
+{
+  // Log ID for the log packet
+  required fixed32 log_id = 1;
+
+  // Timestamp when log packet.was generated
+  required fixed64 timestamp = 2;
+
+  // Sensor UID for the log packet
+  required sns_std_suid suid = 3;
+
+  // Data type provided by the Sensor UID
+  required string sensor_type = 4;
+
+  // The instance id of the sensor to which this
+  // message was passed to or obtained from
+  required fixed64 instance_id = 5;
+
+  // The log packet payload
+  oneof sensor_log_payload
+  {
+    // Sensor specific Sensor State Algo message
+    sns_diag_opaque_payload opaque_payload = 100;
+
+    // Sensor API message
+    sns_diag_sensor_api_log sensor_api_payload = 101;
+
+    // Client API message
+    sns_diag_client_api_log client_api_payload = 102;
+
+    // Sensor State Raw message
+    sns_diag_sensor_state_raw sensor_state_raw_payload = 103;
+
+    // Sensor State Hardware Interrupt message
+    sns_diag_sensor_state_interrupt sensor_state_interrupt_payload = 104;
+  }
+}
+
+// Sensor Instance Mapping Log Packet
+// This message defines the fields used to log sensor instance mapping
+// information.  This message is used as the payload field of sns_diag_fw_log
+message sns_diag_instance_map_log
+{
+  // The instance id of the source sensor instance
+  required fixed64 src_instance_id = 1;
+
+  // Array of destination Sensor Instance IDs or Sensor IDs that the
+  // source sensor instance is feeding to.
+  // If no destination instance ids are specified it signifies
+  // deletion of the source instance
+  repeated fixed64 dest_instance_id = 2;
+
+  // Array of data stream ids that the
+  // source sensor instance is feeding to
+  repeated fixed64 stream_id = 3;
+}
+
+// Island mode states
+enum sns_diag_island_state
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // In Island mode
+  SNS_DIAG_ISLAND_STATE_IN_ISLAND_MODE = 0;
+
+  // Not in Island Mode
+  SNS_DIAG_ISLAND_STATE_NOT_IN_ISLAND_MODE = 1;
+
+  // Island mode disabled
+  SNS_DIAG_ISLAND_STATE_ISLAND_DISABLED = 2;
+}
+
+// Island mode transition Log Packet
+// This message defines the fields used to log
+// transitions into and out of island mode
+//
+// This log packet is generated each time the system transitions into or out
+// of island mode or when island mode is disabled or when triggered by
+// a request to the diag sensor
+//
+// This message is used as the payload field of sns_diag_fw_log
+message sns_diag_island_transition_log
+{
+  // Timestamp of the transition
+  //
+  // When logpacket is triggered, this timestamp will retain
+  // the timestamp when the current state became effective.
+  required fixed64 timestamp = 1;
+
+  // Island state after transition is completed
+  required sns_diag_island_state island_state = 2;
+
+  // User defined cookie
+  // Used by test scripts to identify logs triggered
+  // by messages sent to the SSC
+  optional fixed64 cookie = 3;
+
+  // Total time system spent in island since device boot(micro seconds)
+  optional fixed64 total_island_time = 4;
+}
+
+// Island exit vote Log Packet
+// This message defines the fields used to log vote for island mode exits.
+//
+// This log packet is generated at each call to island_exit()
+message sns_diag_island_exit_vote_log
+{
+  // Timestamp
+  required fixed64 timestamp = 1;
+
+  // SUID of the Sensor responsible for the vote
+  optional sns_std_suid sensor = 2;
+}
+
+// Heap IDs
+enum sns_diag_heap_id
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Primary Heap
+  SNS_DIAG_HEAP_ID_HEAP_MAIN = 0;
+
+  // Island Heap
+  SNS_DIAG_HEAP_ID_HEAP_ISLAND = 1;
+
+  // PRAM Heap
+  SNS_DIAG_HEAP_ID_HEAP_PRAM = 2;
+
+  // EVENT Heap
+  SNS_DIAG_HEAP_ID_HEAP_EVENT = 3;
+
+  // BATCH Heap
+  SNS_DIAG_HEAP_ID_HEAP_BATCH = 4;
+
+  // Event buffer
+  SNS_DIAG_HEAP_ID_EVENT_BUFFER = 100;
+}
+
+// Memory status Log Packet
+// This message defines the fields used to log the memory utilization
+// This log packet is generated when a request is sent to the diag sensor
+message sns_diag_mem_utilization_log
+{
+  // Timestamp
+  required fixed64 timestamp = 1;
+
+  // Heap ID
+  required sns_diag_heap_id heap_id = 2;
+
+  // Total Memory
+  required fixed32 total_memory = 3;
+
+  // Used Memory
+  required fixed32 used_memory = 4;
+
+  // User defined cookie
+  // Used by test scripts to identify logs triggered
+  // by messages sent to the SSC
+  optional fixed64 cookie = 5;
+}
+
+// Event Service status Log Packet
+// This message defines the fields used to log the memory utilization and
+// other statistics from the Event Service.
+// Used only for SW debug; *not guaranteed to be backward compatible*
+// This log packet is generated when a request is sent to the diag sensor
+message sns_diag_event_service_log
+{
+  // Timestamp
+  required fixed64 timestamp = 1;
+
+  // User defined cookie
+  // Used by test scripts to identify logs triggered
+  // by messages sent to the SSC
+  optional fixed64 cookie = 2;
+
+  message heap_stats
+  {
+    enum sns_event_service_heap_id
+    {
+      SNS_EVENT_SERVICE_HEAP_ID_ISLAND = 0;
+      SNS_EVENT_SERVICE_HEAP_ID_MAIN = 1;
+    }
+    // Heap ID
+    required sns_event_service_heap_id heap_id = 1;
+
+    // Total memory available in heap (in blocks)
+    required fixed32 total_memory = 2;
+
+    // Current memory consumption (in blocks)
+    required fixed32 used_memory = 3;
+
+    // Maximum memory consumption since last log packet (in blocks)
+    required fixed32 max_memory = 4;
+
+    // Total clusters available
+    required fixed32 total_clusters = 5;
+
+    // Current number of clusters in use
+    required fixed32 used_clusters = 6;
+
+    // Maximum in-use clusters since last log packet
+    required fixed32 max_clusters = 7;
+
+    // Number of allocation failues since the last DIAG log packet
+    // If Island will result in island exit; else causes dropped samples
+    required fixed32 alloc_failures = 8;
+
+    // Largest event allocation since the last DIAG log packet (in bytes)
+    required fixed32 max_size = 9;
+  }
+  repeated heap_stats stats = 3;
+}
+
+// Framework log packet
+// This message defines the fields to log all framework messages. This
+// includes memory, island, instance mapping messages.
+message sns_diag_fw_log
+{
+  // Log ID for the log packet
+  required fixed32 log_id = 1;
+
+  // Timestamp when log packet.was generated
+  required fixed64 timestamp = 2;
+
+  // The log packet payload
+  oneof fw_log_payload
+  {
+    // Sensor Instance Map message
+    sns_diag_instance_map_log instance_map_payload = 100;
+
+    // Sensor Island Mode
+    sns_diag_island_transition_log island_mode_payload = 101;
+
+    // Sensors Island Exit vote
+    // NOT SUPPORTED YET.
+    sns_diag_island_exit_vote_log island_exit_vote_payload = 102;
+
+    // Sensors Memory Utilization
+    sns_diag_mem_utilization_log memory_utilization_payload = 103;
+
+    // Event Service status log
+    sns_diag_event_service_log event_service_payload = 104;
+  }
+}
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_diag_sensor.proto b/prebuilt/system/etc/sensors/proto/sns_diag_sensor.proto
new file mode 100644
index 0000000..20f47ab
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_diag_sensor.proto
@@ -0,0 +1,51 @@
+// @file sns_diag_sensor.proto
+//
+// Defines standard message types to communicate with the
+// diag service
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_type.proto";
+
+enum sns_diag_sensor_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_DIAG_SENSOR_MSGID_SNS_DIAG_LOG_TRIGGER_REQ = 520;
+}
+
+// Log packets that can be triggered by the diag sensor
+enum sns_diag_triggered_log_type {
+  option (nanopb_enumopt).long_names = false;
+
+  // Triggers generation of sns_diag_island_transition_log
+  // Only one log is generated per request
+  SNS_DIAG_TRIGGERED_LOG_TYPE_ISLAND_LOG = 1;
+
+  // Triggers generation of sns_diag_mem_utilization_log
+  // A single request will generate a log for each separate memory
+  // pool in the system
+  SNS_DIAG_TRIGGERED_LOG_TYPE_MEMORY_USAGE_LOG = 2;
+}
+
+// Trigger generation of log packets. Depending upon
+// the type of log packet that is being triggered,
+// multiple log packets can be triggered for each
+// request.
+//
+// If the log packet that is triggered has been disabled
+// no log will be generated.
+message sns_diag_log_trigger_req {
+
+  // User defined cookie
+  // Used by test scripts to identify logs triggered
+  // by messages sent to the SSC
+  optional fixed64 cookie = 1;
+
+  // The type of log packets that the diag sensor must
+  // generate.
+  required sns_diag_triggered_log_type log_type = 2;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_distance_bound.proto b/prebuilt/system/etc/sensors/proto/sns_distance_bound.proto
new file mode 100644
index 0000000..ab84971
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_distance_bound.proto
@@ -0,0 +1,149 @@
+
+// @file sns_distance_bound.proto
+//
+// Defines message types for the Distance Bound (DB) Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// Distance Bound (DB) algorithm tracks the distance covered in meters
+// It expects, as part of its request, distance in meters. DB reports the client
+// when this distance is covered from the instant the request was received.
+// After a client sends a DB request for distance, it can query DB for
+// distance accumulated at any instant before the final breach occurs
+
+// DB Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "distance_bound"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_SINGLE_OUTPUT
+
+// Stream Requests:
+
+// Message IDs for DB Sensor
+enum sns_distance_bound_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // Uses message: sns_set_distance_bound
+  // Purpose:
+  // A distance bound request from the client
+
+  SNS_DISTANCE_BOUND_MSGID_SNS_SET_DISTANCE_BOUND = 516;
+
+  // Uses message: None
+  // Purpose:
+  // client can query the distance accumulated at a given instance
+  // before final breach occurs.
+  // Note: This message should be preceeded by a
+  // SNS_DISTANCE_BOUND_MSGID_SNS_SET_DISTANCE_BOUND request msg
+
+  SNS_DISTANCE_BOUND_MSGID_SNS_GET_DISTANCE_ACCUMULATED = 517;
+
+  // Uses message: sns_distance_bound_event
+  // Purpose:
+  // This event corresponds to request:
+  // SNS_DISTANCE_BOUND_MSGID_SNS_SET_DISTANCE_BOUND
+  // This event is raised  when the breach occurs.
+
+  SNS_DISTANCE_BOUND_MSGID_SNS_DISTANCE_BOUND_EVENT = 772;
+
+
+  // Uses message: sns_get_distance_accumulated_event
+  // Purpose:
+  // This event corresponds to request:
+  // SNS_DISTANCE_BOUND_MSGID_SNS_GET_DISTANCE_ACCUMULATED
+  // This event reports the distance accumulated at a given
+  // instance when the request is received
+
+  SNS_DISTANCE_BOUND_MSGID_SNS_GET_DISTANCE_ACCUMULATED_EVENT = 773;
+}
+
+
+// Gives the state which the algorithm is capable
+// of detecting
+enum sns_distance_bound_motion_state
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_DB_MS_UNKNOWN     = 0;
+  SNS_DB_MS_STATIONARY  = 1;
+  SNS_DB_MS_MOVE        = 2;
+  SNS_DB_MS_FIDDLE      = 3;
+  SNS_DB_MS_PEDESTRIAN  = 4;
+  SNS_DB_MS_VEHICLE     = 5;
+  SNS_DB_MS_WALK        = 6;
+  SNS_DB_MS_RUN         = 7;
+  SNS_DB_MS_BIKE        = 8;
+  SNS_DB_MS_MAX         = 9;
+}
+
+// Request message
+// message associated with SNS_DISTANCE_BOUND_MSGID_SNS_SET_DISTANCE_BOUND
+// This message will result in atmost one sns_distance_bound_event when
+// the requested distance is covered
+// If client resends a fresh sns_set_distance_bound before the older is serviced
+// the older request will be lost and new distance will be calculated from that
+// instant
+
+message sns_set_distance_bound
+{
+  //  The distance bound in meters. When the distance travelled exceeds this,
+  //  an event is sent to the requestor
+
+  required float distance_bound = 1;
+
+  //  speeds associated with different motion states.
+  //  if client does not send any motion state speed,
+  //  default values will be taken for that motion state
+
+  message speeds {
+    required sns_distance_bound_motion_state state = 1;
+    required  float speed = 2;
+  }
+
+  repeated speeds speed_bound = 2;
+}
+
+// Event message
+// message associated with SNS_DISTANCE_BOUND_MSGID_SNS_DISTANCE_BOUND_EVENT
+// This event corresponds to request:
+// SNS_DISTANCE_BOUND_MSGID_SNS_SET_DISTANCE_BOUND
+// This event will be raised after the breach occurs.
+
+message sns_distance_bound_event
+{
+  // Distance accumulated in meters since the last sns_set_distance_bound
+  required float distance_accumulated = 1;
+}
+
+// Event message
+// message associated with
+// SNS_DISTANCE_BOUND_MSGID_SNS_GET_DISTANCE_ACCUMULATED_EVENT
+// This event corresponds to request:
+// SNS_DISTANCE_BOUND_MSGID_SNS_GET_DISTANCE_ACCUMULATED
+// This event will be raised instantly upon receiveing the above request,
+// reporting the distance accumulated till that instance.
+// NOTE:
+// In following situation an error event,
+// SNS_STD_MSGID_SNS_STD_ERROR_EVENT, with payload sns_std_error_event, having
+// appropriate error code, will be raised:
+// 1. In absence of any prior SNS_DISTANCE_BOUND_MSGID_SNS_SET_DISTANCE_BOUND
+//    error event with error code SNS_STD_ERROR_FAILED will be raised.
+//
+// 2. If a breach has already occurred for a prior
+//    SNS_DISTANCE_BOUND_MSGID_SNS_SET_DISTANCE_BOUND request, error event
+//    with error code  SNS_STD_ERROR_NOT_AVAILABLE will be raised.
+
+
+message sns_get_distance_accumulated_event
+{
+  // Distance accumulated in meters since the last sns_set_distance_bound
+  required float distance_accumulated = 1;
+}
+
+// DB does not publish configuration events.
+
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_dpc.proto b/prebuilt/system/etc/sensors/proto/sns_dpc.proto
new file mode 100644
index 0000000..b173f81
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_dpc.proto
@@ -0,0 +1,64 @@
+// @file sns_dpc.proto
+//
+// Defines message types for the DPC(Device Position Classifier) Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// The DPC Sensor provides device position information
+
+// DPC Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "device_position_classifier"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for DPC Sensor
+enum sns_dpc_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  //send to new client immediatly to inform current device position
+  SNS_DPC_MSGID_SNS_DPC_EVENT_CONFIG = 777;
+
+  //send when detect device position change
+  SNS_DPC_MSGID_SNS_DPC_EVENT = 1030;
+}
+
+// Stream events:
+//
+// The sns_dpc_event message is used to publish updated device position
+// The sns_dpc_event_config message is sent immediately to new client to inform the current device position
+
+enum sns_dpc_state
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // when algo cannot identify other states
+  SNS_DPC_UNKNOWN         = 1;
+  // Device stationary and display within +/-15 deg of horizontal plane
+  SNS_DPC_FLAT_STATIC     = 2;
+  // Device is not in FLAT_STATIC state and prox close
+  SNS_DPC_HIDDEN          = 3;
+  // User picks up the device
+  SNS_DPC_IN_HAND         = 4;
+  // User hold the device and facing the display
+  SNS_DPC_FACING          = 5;
+}
+
+// Events types from DPC Sensor
+message sns_dpc_event
+{
+  required sns_dpc_state dpc_state = 1;
+}
+
+message sns_dpc_event_config
+{
+  //current dpc state
+  required sns_dpc_state dpc_state = 1;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_ext_svc.proto b/prebuilt/system/etc/sensors/proto/sns_ext_svc.proto
new file mode 100644
index 0000000..dd5b999
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_ext_svc.proto
@@ -0,0 +1,81 @@
+// @file sns_ext_svc.proto
+//
+// Sensor provides access to external QMI services.
+//
+// This Sensor will create a QMI connection to the external service upon
+// receipt of the first request.  Subsequent requests will be sent upon the
+// same connection.  The connection will be closed after the client closes
+// the data stream.
+//
+// An error event will be sent upon any received QMI error, including upon
+// the error callback.  It is then the responsibility of the client to close
+// the data stream, and re-open a new one if desired.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+
+enum sns_ext_svc_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Send a QMI request message
+  SNS_EXT_SVC_MSGID_SNS_EXT_SVC_REQ = 512;
+
+  // Asynchronously received response message
+  SNS_EXT_SVC_MSGID_SNS_EXT_SVC_RESP = 768;
+
+  // Asynchronously received indication message
+  SNS_EXT_SVC_MSGID_SNS_EXT_SVC_IND = 1024;
+}
+
+// External services supported by this Sensor
+enum sns_ext_svc
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // QMI_LOC; see location_service_v02.idl
+  SNS_EXT_SVC_LOCATION = 0;
+}
+
+message sns_ext_svc_req
+{
+  required sns_ext_svc svc_id = 1;
+
+  // QMI/IDL Message ID
+  required int32 msg_id = 2;
+
+  // Client-specified transaction ID, to be returned in sns_ext_svc_resp
+  optional int32 transaction_id = 3;
+
+  // Contains the QMI-decoded request message.
+  required bytes payload = 4;
+}
+
+message sns_ext_svc_resp
+{
+  // QMI/IDL Message ID
+  required int32 msg_id = 1;
+
+  // Transport error, as defined in qmi_client.h; Defaults to QMI_NO_ERR
+  required int32 transp_err = 2;
+
+  // Client-specified transaction ID, as provided in sns_ext_svc_req
+  optional int32 transaction_id = 3;
+
+  // Contains the QMI-decoded response message
+  // May be empty if transport_err != QMI_NO_ERR
+  required bytes payload = 4;
+}
+
+message sns_ext_svc_ind
+{
+  // QMI/IDL Message ID
+  required int32 msg_id = 1;
+
+  // Contains the QMI-decoded indication message.
+  required bytes payload = 2;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_facing.proto b/prebuilt/system/etc/sensors/proto/sns_facing.proto
new file mode 100644
index 0000000..8decd9f
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_facing.proto
@@ -0,0 +1,60 @@
+// @file sns_facing.proto
+//
+// Defines message types for the the facing sensor
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// Facing calculates face up, down and neutral states. Facing will initially start in an
+// unknown state, and later transition to face up, down and neutral. 
+// Neutral state reported to client on demand
+
+// Facing Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "facing"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for Facing Sensor
+enum sns_facing_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_FACING_MSGID_SNS_FACING_EVENT = 1024;
+}
+
+// Device Facing state detected by Facing sensor
+enum sns_facing_event_state
+{   
+  option (nanopb_enumopt).long_names = false;
+  SNS_FACING_EVENT_STATE_UNKNOWN = 0;
+  //Phone has just moved to a facing-up phone posture
+  //which is defined as screen up.  
+  SNS_FACING_EVENT_STATE_UP = 1;
+  //Phone has just moved to a facing-down phone posture,
+  //which is defined as screen down.
+  SNS_FACING_EVENT_STATE_DOWN = 2;
+  //Phone has just left either the facing-up  
+  //or the facing-down phone posture
+  SNS_FACING_EVENT_STATE_NEUTRAL = 3;
+}
+
+// Event Message
+// Output data event generated by the facing sensor.
+message sns_facing_event
+{ 
+ // Facing sensor state info 
+ required sns_facing_event_state state = 1[default = SNS_FACING_EVENT_STATE_UNKNOWN];
+}
+
+// Stream events:
+//
+// The sns_facing_event message is used to publish updated state
+//
+// Facing sensor does not publish configuration events.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_fmv.proto b/prebuilt/system/etc/sensors/proto/sns_fmv.proto
new file mode 100644
index 0000000..2a56cba
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_fmv.proto
@@ -0,0 +1,40 @@
+// @file sns_fmv.proto
+//
+// Defines the API for Filtered Magnetic Vector.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "sns_std_sensor.proto";
+
+// A FMV sensor reports the filtered magnetic vector
+//
+// ## FMV sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "fmv"
+//
+// ## Request Message: sns_std_sensor_config
+// sns_std_sensor_config::sample_rate is used to specify the sampling rate (Hz)
+// of the FMV sensor. Sensor will generate data events at this rate.
+//
+// ## Event Message: sns_std_sensor_event
+// 1. Output of the FMV sensor will be populated in sns_std_sensor_event
+// 2. Each stream event contains three output data fields in µT (micro Tesla)
+// 3. Data in the stream is adjusted to Android coordinate system relative to a
+//    mobile device held with screen facing the user in it's natural orientation:
+//    X-axis: parallel to the screen pointing to the right
+//    Y-axis: parallel to the screen pointing to the top
+//    Z-axis: perpendicular to the screen pointing towards the user
+// 4. Data in the stream event is ordered as: 
+//    data[0] = X-axis
+//    data[1] = Y-axis
+//    data[2] = Z-axis
+// 5. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+//
+// sns_std_sensor_event::status specifies the reliability of the sample value
+// value is of type sns_std_sensor_sample_status. see sns_std_sensor.proto for
+// details.
diff --git a/prebuilt/system/etc/sensors/proto/sns_fw.proto b/prebuilt/system/etc/sensors/proto/sns_fw.proto
new file mode 100644
index 0000000..3cededd
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_fw.proto
@@ -0,0 +1,23 @@
+// @file sns_fw.proto
+//
+// Defines Framework internal values.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+
+// Internal Framework message IDs
+// Note: These message IDs must not conflict with those in sns_std_msgid
+enum sns_fw_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // Special message only sent by the Framework; not processed by Sensors
+  // Empty Message
+  SNS_FW_MSGID_SNS_DESTROY_REQ = 120;
+
+  // Special message only sent by the Framework; not processed by Sensors
+  // Empty Message
+  SNS_FW_MSGID_SNS_DESTROY_COMPLETE_EVENT = 250;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_game_rv.proto b/prebuilt/system/etc/sensors/proto/sns_game_rv.proto
new file mode 100644
index 0000000..ea0dee6
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_game_rv.proto
@@ -0,0 +1,48 @@
+// @file sns_game_rv.proto
+//
+// Defines the API for Game Rotation Vector sensors
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "sns_std_sensor.proto";
+
+// A GameRV sensor reports the orientation of the device relative to an
+// unspecified coordinates frame. It is obtained by integration of
+// accelerometer and gyroscope readings. Therefore the Y axis doesn't point
+// north but instead to an arbitrary reference.
+//
+// ## GameRV sensor attributes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE is "game_rv"
+//
+// ## Request Message: sns_std_sensor_config
+// sns_std_sensor_config::sample_rate is used to specify the sampling rate (Hz)
+// of the GameRV sensor. Sensor will generate data events at this rate.
+//
+// ## Event Message: sns_std_sensor_event
+// Output of the GameRV sensor will be populated in sns_std_sensor_event
+//
+// The orientation is represented by the rotation necessary to align
+// the coordinate frame with the device's coordinates. That is,
+// applying the rotation to the world frame (X,Y,Z) would align them with
+// the device coordinates (x,y,z).
+//
+// The rotation can be seen as rotating the device by an angle theta around an
+// axis rot_axis to go from the reference device orientation to the current
+// device orientation. The rotation is encoded as the four unitless x, y, z, w
+// components of a unit quaternion:
+// sns_std_sensor_event::data[0] = rot_axis.x*sin(theta/2)
+// sns_std_sensor_event::data[1] = rot_axis.y*sin(theta/2)
+// sns_std_sensor_event::data[2] = rot_axis.z*sin(theta/2)
+// sns_std_sensor_event::data[3] = cos(theta/2)
+//
+// Where:
+// - the x, y and z fields of rot_axis are the East-North-Up coordinates
+// of a unit length vector representing the rotation axis
+// - theta is the rotation angle
+//
+// sns_std_sensor_event::status specifies the reliability of the sample value
+// value is of type sns_std_sensor_sample_status. see sns_std_sensor.proto for
+// details.
diff --git a/prebuilt/system/etc/sensors/proto/sns_geomag_rv.proto b/prebuilt/system/etc/sensors/proto/sns_geomag_rv.proto
new file mode 100644
index 0000000..5da3151
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_geomag_rv.proto
@@ -0,0 +1,50 @@
+// @file sns_geomag_rv.proto
+//
+// Defines the API for Geomagnetic Rotation Vector sensors.
+// This Sensor is similar to Rotation Vector, but uses a magnetometer instead
+// of a gyroscope.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "sns_std_sensor.proto";
+
+// A GeoMagRV sensor reports the orientation of the device relative to the
+// East-North-Up coordinates frame. It is obtained by integration of
+// accelerometer and magnetometer readings.
+//
+// ## GeoMagRV sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "geomag_rv"
+//
+// ## Request Message: sns_std_sensor_config
+// sns_std_sensor_config::sample_rate is used to specify the sampling rate (Hz)
+// of the GeoMagRV sensor. Sensor will generate data events at this rate.
+//
+// ## Event Message: sns_std_sensor_event
+// Output of the GeoMagRV sensor will be populated in sns_std_sensor_event
+//
+// The East-North-Up coordinate system is defined as a direct orthonormal
+// basis where:
+// - X points east and is tangential to the ground.
+// - Y points north and is tangential to the ground.
+// - Z points towards the sky and is perpendicular to the ground.
+//
+// The rotation can be seen as rotating the device by an angle theta around an
+// axis rot_axis to go from the reference device orientation to the current
+// device orientation. The rotation is encoded as the four unitless x, y, z, w
+// components of a unit quaternion:
+// sns_std_sensor_event::data[0] = rot_axis.x*sin(theta/2)
+// sns_std_sensor_event::data[1] = rot_axis.y*sin(theta/2)
+// sns_std_sensor_event::data[2] = rot_axis.z*sin(theta/2)
+// sns_std_sensor_event::data[3] = cos(theta/2)
+//
+// Where:
+// - the x, y and z fields of rot_axis are the East-North-Up coordinates
+// of a unit length vector representing the rotation axis
+// - theta is the rotation angle
+//
+// sns_std_sensor_event::status specifies the reliability of the sample value
+// value is of type sns_std_sensor_sample_status. see sns_std_sensor.proto for
+// details.
diff --git a/prebuilt/system/etc/sensors/proto/sns_gravity.proto b/prebuilt/system/etc/sensors/proto/sns_gravity.proto
new file mode 100644
index 0000000..b520a08
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_gravity.proto
@@ -0,0 +1,30 @@
+// @file sns_gravity.proto
+//
+// Defines standard message types for the Gravity Sensor
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// Configuration Message
+// Used to either request for a certain configuration of the gravity sensor or
+// alter an already existing configuration of the gravity sensor
+// Uses sns_std_sensor_config defined in sns_std_sensor.proto
+// The message field definitions are as follows:
+// 1) float sample_rate
+//      containing the required sample rate of the gravity sensor in hertz
+
+// Data Message
+// Data event generated by the gravity.
+// Uses sns_std_sensor_event message defined in sns_std_sensor.proto
+// The data field of the sns_std_sensor_event message
+// contains a float array of length 6 with the following definition
+// 1) float data[0] to data[2]
+//      Representing the gravity values along x,y,z axes in m/s2.
+// 2) float data[3] to data[5]
+//      Representing the linear acceleration values along x,y,z axes in m/s2.
+//      Determined as the delta between the accel and the gravity values
+//      along that axis.
diff --git a/prebuilt/system/etc/sensors/proto/sns_gyro.proto b/prebuilt/system/etc/sensors/proto/sns_gyro.proto
new file mode 100644
index 0000000..5eb4ff1
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_gyro.proto
@@ -0,0 +1,74 @@
+// @file sns_gyro.proto
+//
+// Defines the API for Gyroscope Sensors.
+// All Gyroscope Sensor drivers are required to comply with this API.
+// Any new functionality for Gyroscope Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The Gyroscope Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "gyro".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute value in dps/LSB.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in dps unit.
+// 4. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The Gyroscope Sensor handles the sns_std_sensor_config
+//    message request for all stream enable/update requests.
+// 2. The Gyroscope Sensor uses batching_period item in
+//    sns_std_request as the requested batching rate to determine
+//    hardware FIFO watermark.
+
+// Handling stream events:
+// 1. The Gyroscope Sensor publishes device rotation data stream events
+//    using the sns_std_sensor_event message.
+// 2. Each stream event contains three output data fields where data is
+//    in radians/sec units and is factory calibrated.
+// 3. Data in the stream is adjusted to Android coordinate system relative to a
+//    mobile device held with screen facing the user in it's natural orientation:
+//    X-axis: parallel to the screen pointing to the right
+//    Y-axis: parallel to the screen pointing to the top
+//    Z-axis: perpendicular to the screen pointing towards the user
+//    This conforms to the mobile device axes orientation as specified by the
+//    Android Sensor API.
+// 4. Data in the stream event is ordered as:
+//    data[0] = X-axis
+//    data[1] = Y-axis
+//    data[2] = Z-axis
+// 5. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 6. The Gyroscope Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+// 7. The Gyroscope Sensor publishes a factory calibration event using the
+//    sns_cal_event message. It uses bias and comp_matrix fields in this event.
+//    It publishes this event each time there is change in it's factory calibration
+//    data or when a client sends a new streaming request.
+// Handling self-test requests:
+// 1. The Gyroscope Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The Gyroscope Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API.
+// 3. The Gyroscope Sensor could implement other test types.
+
+// Handling test events:
+// 1. The Gyroscope Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
diff --git a/prebuilt/system/etc/sensors/proto/sns_gyro_cal.proto b/prebuilt/system/etc/sensors/proto/sns_gyro_cal.proto
new file mode 100644
index 0000000..5b5ac30
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_gyro_cal.proto
@@ -0,0 +1,32 @@
+// @file sns_gyro_cal.proto
+//
+// Defines message types for the Gyro Calibration Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_cal.proto";
+
+// The Gyro Calibration Sensor determines the calibration parameters
+// for gyro sensor
+
+// Gyro Calibration Sensor Attributes:
+// - SNS_STD_SENSOR_ATTRID_TYPE: "gyro_cal"
+// - SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG message ID is used to
+//      enable the sensor
+// - SNS_CAL_MSGID_SNS_CAL_RESET message ID is used to reset the algorithm
+//      and any previously determined calibration parameters.
+
+// Stream Events:
+// - SNS_CAL_MSGID_SNS_CAL_EVENT message ID is used to report calibration
+//      parameters to the client of the sensor. The sns_cal_event message as
+//      defined in sns_cal.proto is used to report this data event where the
+//      units for the bias field in the message are in rad / s
+
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_gyro_rot_matrix.proto b/prebuilt/system/etc/sensors/proto/sns_gyro_rot_matrix.proto
new file mode 100644
index 0000000..32614fc
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_gyro_rot_matrix.proto
@@ -0,0 +1,50 @@
+// @file sns_gyro_rot_matrix.proto
+//
+// Defines standard message types for the Gyro Rotation Matrix
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+enum sns_gyro_rot_matrix_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_GYRO_ROT_MATRIX_MSGID_SNS_STD_SENSOR_EVENT = 1024;
+}
+
+// Data Message
+// Data event generated by the gyro rotation matrix.
+// Uses sns_std_sensor_event message defined in sns_std_sensor.proto
+// The data field of the sns_std_sensor_event message
+// contains a float array of length 10 with the following definition
+// 1) float data[0] to data[8]
+//      3 by 3 Gyro Rotation Matrix output
+//      Representing the rotation from previously sampled gyro values
+//      to the current one.
+//      The matrix definition is as follows:
+//      curr_gyro_XYZ[3X1] = gyro_rot_matrix[3X3] * prev_gyro_XYZ[3X1]
+//      data[0] = gyro_rot_matrix[0,0]
+//      data[1] = gyro_rot_matrix[0,1]
+//      data[2] = gyro_rot_matrix[0,2]
+//      data[3] = gyro_rot_matrix[1,0]
+//      data[4] = gyro_rot_matrix[1,1]
+//      data[5] = gyro_rot_matrix[1,2]
+//      data[6] = gyro_rot_matrix[2,0]
+//      data[7] = gyro_rot_matrix[2,1]
+//      data[8] = gyro_rot_matrix[2,2]
+// 2) float data[9]
+//      Gyro Norm of the currently sampled gyro data
+//      determined as the sum of squares of gyro on each of the axes
+//      i.e. curr_gyro_X^2 + curr_gyro_Y^2 + curr_gyro_Z^2
+
+// Configuration Message
+// Used to either request for a certain configuration of the Gyro Rotation Matrix Sensor or
+// alter an already existing configuration of the Simulation Sensor
+// Uses sns_std_sensor_config defined in sns_std_sensor.proto
+// The message field definitions are as follows:
+// 1) float sample_rate
+//      containing the required sample rate of the Gyro Rotation Matrix sensor in hertz
diff --git a/prebuilt/system/etc/sensors/proto/sns_hall.proto b/prebuilt/system/etc/sensors/proto/sns_hall.proto
new file mode 100644
index 0000000..31aaa06
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_hall.proto
@@ -0,0 +1,81 @@
+// @file sns_hall.proto
+//
+// Defines the API for Hall Sensors.
+// All Hall Sensor drivers are required to comply with this API.
+// Any new functionality for Hall Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+
+// Attribute requirements:
+// The Hall Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "hall".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute is not applicable since this is an event
+//    sensor.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values as 0 and 1.
+// 4. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The Hall Sensor handles the SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG
+//    message ID for all stream enable/update requests.
+// 2. The Hall Sensor operates in on-change mode and report
+//    samples only for magnet NEAR/FAR transitions.
+
+// Message IDs for hall Sensor
+enum sns_hall_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // Uses message: sns_hall_event
+  // Purpose: An output data event from the hall sensor to it's client.
+  SNS_HALL_MSGID_SNS_HALL_EVENT  = 770;
+}
+
+enum sns_hall_event_type {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_HALL_EVENT_TYPE_FAR = 0;
+  SNS_HALL_EVENT_TYPE_NEAR  = 1;
+}
+
+// Events types from hall Sensor
+message sns_hall_event
+{
+  // Hall NEAR/FAR output event
+  required sns_hall_event_type hall_event_type = 1 [default = SNS_HALL_EVENT_TYPE_FAR];
+
+  // Hall sensor sample status
+  required sns_std_sensor_sample_status status = 2 [default = SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE];
+}
+
+// Handling stream events:
+// 1. The Hall Sensor publishes magnetic field proximity data stream
+//    events using the sns_hall_event message.
+// 2. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 3. The Hall Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+
+// Handling self-test requests:
+// 1. The Hall Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The Hall Sensor could implement other test types.
+
+// Handling test events:
+// 1. The Hall Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_heart_beat.proto b/prebuilt/system/etc/sensors/proto/sns_heart_beat.proto
new file mode 100644
index 0000000..db785a0
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_heart_beat.proto
@@ -0,0 +1,31 @@
+// @file sns_heart_beat.proto
+//
+// Defines the API for Heart Beat sensors
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "sns_std_sensor.proto";
+
+// A heart beat sensor reports everytime a heart beat peak is detected.
+//
+// Peak ideally corresponds to the positive peak in the QRS complex of
+// an ECG signal, and the event timestamp should correspond to the time this
+// peak occured.
+//
+// The sensor is not expected to be optimized for latency. As a guide, a
+// receipt latency of up to 10 seconds is acceptable.
+//
+// ## Heart Beat sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "heart_beat"
+//
+// ## Request Message: SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG
+// No configuration is available for this sensor.
+//
+// ## Event Message: sns_std_sensor_event
+// Output of the Heart Beat sensor will be populated in sns_std_sensor_event.
+//
+// sns_std_sensor_event::data[0] = confidence in the detection of the peak
+//    where 0.0 represent no information at all, and 1.0 represents certainty.
diff --git a/prebuilt/system/etc/sensors/proto/sns_heart_rate.proto b/prebuilt/system/etc/sensors/proto/sns_heart_rate.proto
new file mode 100644
index 0000000..c6f90f5
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_heart_rate.proto
@@ -0,0 +1,55 @@
+// @file sns_heart_rate.proto
+//
+// Defines the API for Heart Rate Detection Sensors.
+//
+// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// A sensor of this type returns the current heart rate in beats per minute
+// (BPM).  Because this sensor is on-change, events must be generated when and
+// only when BPM or status have changed since the last event.
+//
+// Upon the first activation, unless the device is known to not be on the
+// body, the status field of the first event must be set to UNRELIABLE.
+//
+// ## Heart Rate sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "heart_rate"
+//
+// ## Request Message: SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG
+// No configuration is available for this sensor.
+//
+// ## Event Message: sns_std_sensor_event
+// Output of the Heart Rate sensor will be populated in sns_std_sensor_event.
+//
+// SNS_HEART_RATE_MSGID_SNS_HEART_RATE_EVENT::data[0] = current heart rate in beats per minute (BPM)
+//
+// SNS_HEART_RATE_MSGID_SNS_HEART_RATE_EVENT::status specifies the reliability of the sample value
+// value is of type sns_heart_rate_event_type.
+
+enum sns_heart_rate_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_HEART_RATE_MSGID_SNS_HEART_RATE_EVENT = 779;
+}
+
+enum sns_heart_rate_event_type {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_HR_STATUS_NO_CONTACT = -1;
+  SNS_HR_STATUS_UNRELIABLE  = 0;
+  SNS_HR_STATUS_ACCURACY_LOW = 1;
+  SNS_HR_STATUS_ACCURACY_MEDIUM = 2;
+  SNS_HR_STATUS_ACCURACY_HIGH = 3;
+}
+
+// Events types from heart_rate Sensor
+message sns_heart_rate_event
+{
+  required float heart_rate = 1;
+  required sns_heart_rate_event_type heart_rate_event_type = 2 [default = SNS_HR_STATUS_NO_CONTACT];
+}
\ No newline at end of file
diff --git a/prebuilt/system/etc/sensors/proto/sns_humidity.proto b/prebuilt/system/etc/sensors/proto/sns_humidity.proto
new file mode 100644
index 0000000..7ae47bc
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_humidity.proto
@@ -0,0 +1,69 @@
+// @file sns_humidity.proto
+//
+// Defines the API for Humidity Sensors.
+// All Humidity Sensor drivers are required to comply with this API.
+// Any new functionality for Humidity Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The Humidity Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "humidity".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute value in %RH/LSB.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in %RH unit.
+// 4. The Humidity Sensor is an on-change sensor.
+// 5. See sns_std_sensor.proto for other attributes.
+
+
+// Handling stream requests:
+// 1. The Humidity Sensor handles the SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG
+//    message ID for all stream enable/update requests.
+// 2. The Humidity Sensor supports on-change mode of operation.
+// 3. In on-change mode the Sensor could use interrupt operation and
+//    reports samples for only significant change in humidity.
+//    Example: +/- 5% change.
+
+// Handling stream events:
+// 1. The Humidity Sensor publishes ambient relative humidity data stream
+//    events using the sns_std_sensor_event message.
+// 2. Each stream event contains one output data field where data is
+//    factory calibrated and ordered as:
+//    data[0] = Humidity data in %RH (% Relative Humidity)
+// 3. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 4. The Humidity Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+// 5. The Humidity Sensor publishes a factory calibration event using the
+//    sns_cal_event message. It uses bias and scale_factor fields in this event.
+//    It publishes this event each time there is change in it's factory calibration
+//    data or when a client sends a new streaming request.
+
+// Handling self-test requests:
+// 1. The Humidity Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The Humidity Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API.
+// 3. The Humidity Sensor could implement other test types.
+
+// Handling test events:
+// 1. The Humidity Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_interrupt.proto b/prebuilt/system/etc/sensors/proto/sns_interrupt.proto
new file mode 100644
index 0000000..ed9f8c2
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_interrupt.proto
@@ -0,0 +1,140 @@
+// @file sns_interrupt.proto
+//
+// Defines standard message types for the Interrupt Sensor. The Interrupt
+// Sensor is a QC written platform Sensor which is used by physical Sensor
+// drivers that use interrupts like data-ready interrupt (DRI), FIFO watermark
+// interrupt, etc. These physical Sensors must use the API defined in this file
+// to send requests to and parse events from the Interrupt Sensor.
+//
+// Copyright (c) 2016-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+
+enum sns_interrupt_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // This message is used to register for notifications for a physical interrupt
+  // pin with the interrupt sensor.
+  SNS_INTERRUPT_MSGID_SNS_INTERRUPT_REQ = 512;
+
+  // This message is used to register for notifications for an In Band
+  // Interrupt (IBI).
+  SNS_INTERRUPT_MSGID_SNS_IBI_REQ = 514;
+
+  // Data event from interrupt Sensor.
+  //
+  // This message is generated each time a registered
+  // interrupt fires. This message ID corresponds to
+  // the message sns_interrupt_event
+  SNS_INTERRUPT_MSGID_SNS_INTERRUPT_EVENT  = 1024;
+
+  // Interrupt sensor event marking it as registered
+  //
+  // This message is generated when an interrupt has
+  // been successfully registered. Sensors should not
+  // turn on the hardware interrupts until this
+  // event has been recieved from the interrupt sensor.
+  // This event has no body and the event length is 0
+  SNS_INTERRUPT_MSGID_SNS_INTERRUPT_REG_EVENT = 1025;
+
+  // Notification message to the interrupt Sensor that
+  // a level triggered interrupt has been serviced and cleared.
+  //
+  // In case of level triggered interrupts, when the interrupt
+  // fires, the interrupt sensor disables the interrupt until
+  // it is serviced and cleared at it's source. This message
+  // is used to notify the interrupt sensor that the interrupt
+  // has been serviced and cleared so that it can be re-enabled.
+  // This message is not applicable to edge triggered interrupts.
+  // This message does not have any payload.
+  SNS_INTERRUPT_MSGID_SNS_INTERRUPT_IS_CLEARED = 513;
+}
+
+// Types of interrupt triggers.
+enum sns_interrupt_trigger_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_INTERRUPT_TRIGGER_TYPE_RISING = 0;      // Trigger type rising edge.
+  SNS_INTERRUPT_TRIGGER_TYPE_FALLING = 1;     // Trigger type falling edge.
+  SNS_INTERRUPT_TRIGGER_TYPE_DUAL_EDGE = 2;   // Trigger type rising and falling edge.
+  SNS_INTERRUPT_TRIGGER_TYPE_HIGH = 3;        // Trigger type high level.
+  SNS_INTERRUPT_TRIGGER_TYPE_LOW = 4;         // Trigger type low level.
+}
+
+// Types of interrupt pin drive strength.
+enum sns_interrupt_drive_strength
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_INTERRUPT_DRIVE_STRENGTH_2_MILLI_AMP = 0;  // Specify a 2 mA drive.
+  SNS_INTERRUPT_DRIVE_STRENGTH_4_MILLI_AMP = 1;  // Specify a 4 mA drive.
+  SNS_INTERRUPT_DRIVE_STRENGTH_6_MILLI_AMP = 2;  // Specify a 6 mA drive.
+  SNS_INTERRUPT_DRIVE_STRENGTH_8_MILLI_AMP = 3;  // Specify an 8 mA drive.
+  SNS_INTERRUPT_DRIVE_STRENGTH_10_MILLI_AMP = 4; // Specify a 10 mA drive.
+  SNS_INTERRUPT_DRIVE_STRENGTH_12_MILLI_AMP = 5; // Specify a 12 mA drive.
+  SNS_INTERRUPT_DRIVE_STRENGTH_14_MILLI_AMP = 6; // Specify a 14 mA drive.
+  SNS_INTERRUPT_DRIVE_STRENGTH_16_MILLI_AMP = 7; // Specify a 16 mA drive.
+}
+
+// Types of interrupt pin pull.
+enum sns_interrupt_pull_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_INTERRUPT_PULL_TYPE_NO_PULL = 0;     // Do not specify a pull.
+  SNS_INTERRUPT_PULL_TYPE_PULL_DOWN = 1;   // Pull the GPIO down.
+  SNS_INTERRUPT_PULL_TYPE_KEEPER = 2;      // Designate as a Keeper.
+  SNS_INTERRUPT_PULL_TYPE_PULL_UP = 3;     // Pull the pin up.
+}
+
+// Client request message for Interrupt Sensor.
+message sns_interrupt_req
+{
+  // Interrupt pin number.
+  required uint32 interrupt_num = 1;
+
+  // Interrupt trigger type.
+  required sns_interrupt_trigger_type interrupt_trigger_type = 2;
+
+  // Interrupt pin drive strength configuration.
+  required sns_interrupt_drive_strength interrupt_drive_strength = 3;
+
+  // Interrupt pin pull configuration.
+  required sns_interrupt_pull_type interrupt_pull_type = 4;
+
+  // Interrupt pin type. True if this is a chip
+  // TLMM GPIO. False if this is an SSC TLMM GPIO.
+  required bool is_chip_pin = 5;
+}
+
+// Client request message for Interrupt Sensor.
+message sns_ibi_req
+{
+  // Slave address for I3C
+  required uint32 dynamic_slave_addr = 1;
+
+  // Platform bus instance number (BLSP number)
+  required uint32 bus_instance = 2;
+
+  // Number of optional + mandatory bytes supported by the sensor hardware
+  required fixed32 ibi_data_bytes = 3;
+}
+
+// Event generated by the Interrupt Sensor.
+message sns_interrupt_event
+{
+  // Interrupt pin number or dynamic slave address
+  required fixed32 interrupt_num = 1;
+
+  // Timestamp when trigger event on the interrupt
+  // was detected.
+  required fixed64 timestamp = 2;
+
+  // If an IBI event, the data associated with the event
+  optional bytes   ibi_data = 3 [(nanopb).max_size = 32];
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_mag.proto b/prebuilt/system/etc/sensors/proto/sns_mag.proto
new file mode 100644
index 0000000..6c8868f
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_mag.proto
@@ -0,0 +1,75 @@
+// @file sns_mag.proto
+//
+// Defines the API for Magnetometer Sensors.
+// All Magnetometer Sensor drivers are required to comply with this API.
+// Any new functionality for Magnetometer Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The Magnetometer Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "mag".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute value in µT/LSB.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in µT unit.
+// 4. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The Magnetometer Sensor handles the sns_std_sensor_config
+//    message request for all stream enable/update requests.
+// 2. If the physical sensor supports hardware FIFO then the Magnetometer
+//    Sensor uses batching_period item in sns_std_request as the requested
+//    batching rate to determine hardware FIFO watermark.
+
+// Handling stream events:
+// 1. The Magnetometer Sensor publishes ambient magnetic field data events
+//    using the sns_std_sensor_event message.
+// 2. Each stream event contains three output data fields where data is
+//    in µT (micro Tesla) units and is factory calibrated.
+// 3. Data in the stream is adjusted to Android coordinate system relative to a
+//    mobile device held with screen facing the user in it's natural orientation:
+//    X-axis: parallel to the screen pointing to the right
+//    Y-axis: parallel to the screen pointing to the top
+//    Z-axis: perpendicular to the screen pointing towards the user
+//    This conforms to the mobile device axes orientation as specified by the
+//    Android Sensor API.
+// 4. Data in the stream event is ordered as:
+//    data[0] = X-axis
+//    data[1] = Y-axis
+//    data[2] = Z-axis
+// 5. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 6. The Magnetometer Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+// 7. The Magnetometer Sensor publishes a factory calibration event using the
+//    sns_cal_event message. It uses bias and comp_matrix fields in this event.
+//    It publishes this event each time there is change in it's factory calibration
+//    data or when a client sends a new streaming request.
+
+// Handling self-test requests:
+// 1. The Magnetometer Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The Magnetometer Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API.
+// 3. The Magnetometer Sensor could implement other test types.
+
+// Handling test events:
+// 1. The Magnetometer Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
diff --git a/prebuilt/system/etc/sensors/proto/sns_mag_cal.proto b/prebuilt/system/etc/sensors/proto/sns_mag_cal.proto
new file mode 100644
index 0000000..3ce0441
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_mag_cal.proto
@@ -0,0 +1,32 @@
+// @file sns_mag_cal.proto
+//
+// Defines message types for the Mag Calibration Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_cal.proto";
+
+// The Mag Calibration Sensor determines the calibration parameters
+// for magnetometer sensor
+
+// Mag Calibration Sensor Attributes:
+// - SNS_STD_SENSOR_ATTRID_TYPE: "mag_cal"
+// - SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG message ID is used to
+//      enable the sensor
+// - SNS_CAL_MSGID_SNS_CAL_RESET message ID is used to reset the algorithm
+//      and any previously determined calibration parameters.
+
+// Stream Events:
+// - SNS_CAL_MSGID_SNS_CAL_EVENT message ID is used to report calibration
+//      parameters to the client of the sensor. The sns_cal_event message as
+//      defined in sns_cal.proto is used to report this data event where the
+//      units for the bias field in the message are in micro Tesla.
+
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_mcmd.proto b/prebuilt/system/etc/sensors/proto/sns_mcmd.proto
new file mode 100644
index 0000000..c8554ca
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_mcmd.proto
@@ -0,0 +1,58 @@
+// @file sns_mcmd.proto
+//
+// Defines the API for Magnitude Change Motion Detection Sensors.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// A magnitude change motion sensor reports once
+// - The device is moving
+// - The device is detected to be stationary
+// The period of time to monitor for stationarity is 5 seconds.
+// After reporting, conceptually the algorithm's state is reset,
+// and detection begins again.
+//
+// Motion here refers to any change in accelerometer greater than 78ug in
+// any direction
+//
+// Stationarity here refers to change in accelerometer smaller than 78ug in
+// any direction for 5 seconds.
+//
+// ## Magnitude Change Motion Detect sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "mcmd"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Message IDs for Magnitude Change Motion Sensor
+enum sns_mcmd_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Configuration Request
+  SNS_MCMD_MSGID_SNS_MCMD_CONFIG = 512;
+
+  // Empty Event
+  // Indicates that the requested state has been detected
+  SNS_MCMD_MSGID_SNS_MCMD_EVENT = 770;
+}
+
+// Detected states supported by the MC Motion Detector
+enum sns_mcmd_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_MCMD_TYPE_STATIONARY = 0;
+  SNS_MCMD_TYPE_MOTION = 1;
+}
+
+// Configuration Message
+// Used to specify the MCMD configuration
+message sns_mcmd_config
+{
+  // Which detector type to enable
+  required sns_mcmd_type type = 1;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_motion_detect.proto b/prebuilt/system/etc/sensors/proto/sns_motion_detect.proto
new file mode 100644
index 0000000..781d52a
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_motion_detect.proto
@@ -0,0 +1,52 @@
+// @file sns_motion_detect.proto
+//
+// Defines standard message types for Motion Detect Sensor. All physical Sensor
+// drivers that support Motion Detect Sensor are required to support the
+// event messages as defined in this file.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+
+// Attribute requirements:
+// The Motion Detect Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "motion_detect".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS, SNS_STD_SENSOR_ATTRID_RANGES,
+//    SNS_STD_SENSOR_ATTRID_RATES attributes are not applicable since this is
+//    a single output sensor.
+// 3. See sns_std_sensor.proto for other attributes.
+
+
+// Handling stream requests:
+// 1. A message with ID SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is an
+//    enable request to the motion_detect sensor.
+// 2. A client deletes the data stream with motion_detect Sensor to disable it's
+//    original enable request.
+
+// Message IDs for motion_detect Sensor
+enum sns_motion_detect_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // The motion_detect Sensor publishes an event with this message ID
+  SNS_MOTION_DETECT_MSGID_SNS_MOTION_DETECT_EVENT  = 771;
+}
+
+enum sns_motion_detect_event_type {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_MOTION_DETECT_EVENT_TYPE_DISABLED = 0;
+  SNS_MOTION_DETECT_EVENT_TYPE_ENABLED  = 1;
+  SNS_MOTION_DETECT_EVENT_TYPE_FIRED    = 2;
+}
+
+// Events types from motion detect Sensor
+message sns_motion_detect_event
+{
+  required sns_motion_detect_event_type motion_detect_event_type = 1 [default = SNS_MOTION_DETECT_EVENT_TYPE_DISABLED];
+}
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_multishake.proto b/prebuilt/system/etc/sensors/proto/sns_multishake.proto
new file mode 100644
index 0000000..c608751
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_multishake.proto
@@ -0,0 +1,71 @@
+// @file sns_multishake.proto
+//
+// Defines message types for the the multishake sensor
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+
+// The multishake sensor detects shakes along an axis and
+// generates an event when a client specified number of consecutive shakes
+// to the device occur. There is a sleep period after a multishake event
+// is reported during which shakes are not detected. This sleep period
+// is configurable through the registry.
+//
+// ## Multishake sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "multishake"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+//
+// ## Request Message: SNS_MULTISHAKE_MSGID_SNS_MULTISHAKE_CONFIG
+// No configuration is available for this sensor.
+//
+// ## Event Message: SNS_MULTISHAKE_MSGID_SNS_MULTISHAKE_EVENT
+// Reported upon new detection of multishake event.
+//
+// ## Configuration Message: Multishake does not publish configuration
+// messages.
+
+enum sns_multishake_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+  SNS_MULTISHAKE_MSGID_SNS_MULTISHAKE_CONFIG = 512;
+  SNS_MULTISHAKE_MSGID_SNS_MULTISHAKE_EVENT = 1024;
+}
+
+enum multishake_axis
+{
+  option (nanopb_enumopt).long_names = false;
+  // Phone is shaken, but phone shake direction cannot be clearly determined
+  MULTISHAKE_AXIS_UNKNOWN_AXIS = 0;
+
+  // Phone is shaken in the X axis according
+  // to the android coordinate system
+  MULTISHAKE_AXIS_X_AXIS = 1;
+
+  // Phone is shaken in the Y axis according
+  // to the android coordinate system
+  MULTISHAKE_AXIS_Y_AXIS = 2;
+
+}
+
+message sns_multishake_config
+{
+  // Select the shake axis along which shake events are detected by
+  // the algorithm instance. Multiple axes can be selected.
+  // To detect shakes starting from a left shake or a right shake, use
+  // shake_axis = [MULTISHAKE_AXIS_LEFT, MULTISHAKE_AXIS_RIGHT]
+  //
+  // If shake_axis is not provided, then a multishake event along any
+  // axis will be reported.
+  repeated multishake_axis shake_axis = 1 [(nanopb).max_count = 3];
+}
+
+message sns_multishake_event
+{
+  // Specifies the axis along which the shakes were detected  If shakes in
+  // multiple axes were detected, the direction of the first shake is reported
+  // in this field.
+  required multishake_axis shake_axis = 1;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_oem1.proto b/prebuilt/system/etc/sensors/proto/sns_oem1.proto
new file mode 100644
index 0000000..570f8d7
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_oem1.proto
@@ -0,0 +1,39 @@
+// @file sns_oem1.proto
+//
+// Defines standard message types for the OEM1
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+enum sns_oem1_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_OEM1_MSGID_SNS_OEM1_DATA = 1024;
+}
+
+
+// Configuration Message
+// Used to either request for a certain configuration of the Sim Sensor or
+// alter an already existing configuration of the Simulation Sensor
+// Uses sns_std_sensor_config defined in sns_std_sensor.proto
+// The message field definitions are as follows:
+// 1) float sample_rate
+//      containing the required sample rate of the Sim sensor in hertz
+
+// Data Message
+// Output data event generated by the oem1 sensor.
+message sns_oem1_data
+{
+  // oem1 Vector along axis x,y,z in m/s2
+  repeated float oem1 = 1 [(nanopb).max_count = 3];
+
+  // Accuracy of the data
+  required sns_std_sensor_sample_status accuracy = 2;
+}
+
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_offbody_detect.proto b/prebuilt/system/etc/sensors/proto/sns_offbody_detect.proto
new file mode 100644
index 0000000..04255c9
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_offbody_detect.proto
@@ -0,0 +1,55 @@
+// @file sns_offbody_detect.proto
+//
+// Defines the API for Offbody Detection Sensors.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// An offbody detect sensor reports every time the device transitions from
+// off-body to on-body and from on-body to off-body (e.g. a wearable device
+// being removed from the wrist would trigger an event indicating an off-body
+// transition).
+//
+// This sensor must be able to detect and report an on-body to off-body
+// transition within 1 second of the device being removed from the body,
+// and must be able to detect and report an off-body to on-body transition
+// within 5 seconds of the device being put back onto the body.
+//
+// ## Offbody Detection sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "offbody_detect"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+//
+// ## Request Message: SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG
+// No configuration is available for this sensor.
+//
+// ## Event Message: SNS_OFFBODY_DETECT_MSGID_SNS_OFFBODY_DETECT_EVENT
+
+// Message IDs for Offbody Detection Sensor
+enum sns_offbody_detect_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_OFFBODY_DETECT_MSGID_SNS_OFFBODY_DETECT_EVENT = 772;
+}
+
+enum sns_offbody_detect_event_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Current state is unknown: not yet detected
+  SNS_OFFBODY_DETECT_EVENT_TYPE_UNKNOWN     = 0;
+  // Device has been detected to be on-body
+  SNS_OFFBODY_DETECT_EVENT_TYPE_ON          = 1;
+  // Device has been detected to be off-body
+  SNS_OFFBODY_DETECT_EVENT_TYPE_OFF         = 2;
+}
+
+message sns_offbody_detect_event
+{
+  // Detected state
+  required sns_offbody_detect_event_type state = 1 [default = SNS_OFFBODY_DETECT_EVENT_TYPE_UNKNOWN];
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_pedometer.proto b/prebuilt/system/etc/sensors/proto/sns_pedometer.proto
new file mode 100644
index 0000000..800ac74
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_pedometer.proto
@@ -0,0 +1,57 @@
+// @file sns_pedometer.proto
+//
+// Defines message types for the Pedometer Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// The Pedometer Sensor detects steps taken by the user
+//
+// The Pedometer Step event is generated when the user takes a step.
+// The event includes the latest step count accumulated since activation.
+// All clients to Pedometer get the same step event.
+// The timestamp of the event indicates the time of the latest detected step.
+
+// Pedometer Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "pedometer"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for Pedometer Sensor
+enum sns_pedometer_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_PEDOMETER_MSGID_SNS_STEP_EVENT = 1028;
+  
+  //send to client immediatly to inform current step count
+  //msg body same as sns_step_event
+  SNS_PEDOMETER_MSGID_SNS_STEP_EVENT_CONFIG = 775;
+}
+
+// Events types from Pedometer Sensor
+message sns_step_event
+{
+  //an incrementing step count
+  required uint32 step_count = 1;
+}
+
+message sns_step_event_config
+{
+  //current step count
+  required uint32 step_count = 1;
+}
+
+
+// Stream events:
+//
+// The sns_step_event message is used to publish updated step count
+//
+// Pedometer does not publish configuration events.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_pedometer_wrist.proto b/prebuilt/system/etc/sensors/proto/sns_pedometer_wrist.proto
new file mode 100644
index 0000000..65a6348
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_pedometer_wrist.proto
@@ -0,0 +1,56 @@
+// @file sns_pedometer_wrist.proto
+//
+// Defines message types for the Pedometer_wrist Sensor.
+//
+// Copyright (c) 2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// The Pedometer_wrist Sensor detects steps taken by the user
+//
+// The Pedometer_wrist Step event is generated when the user takes a step.
+// The event includes the latest step count accumulated since activation.
+// All clients to Pedometer_wrist get the same step event.
+// The timestamp of the event indicates the time of the latest detected step.
+
+// Pedometer_wrist Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "pedometer_wrist"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for Pedometer_wrist Sensor
+enum sns_pedometer_wrist_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_PEDOMETER_WRIST_MSGID_SNS_PEDOMETER_STEP_EVENT = 1028;
+  //send to client immediatly to inform current step count
+  //msg body same as sns_step_event
+  SNS_PEDOMETER_WRIST_MSGID_SNS_PEDOMETER_STEP_EVENT_CONFIG = 775;
+}
+
+// Events types from Pedometer_wrist Sensor
+message sns_pedometer_step_event
+{
+  //an incrementing step count
+  required uint32 step_count = 1;
+}
+
+message sns_pedometer_step_event_config
+{
+  //current step count
+  required uint32 step_count = 1;
+}
+
+
+// Stream events:
+//
+// The sns_step_event message is used to publish updated step count
+//
+// Pedometer_wrist does not publish configuration events.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_physical_sensor_test.proto b/prebuilt/system/etc/sensors/proto/sns_physical_sensor_test.proto
new file mode 100644
index 0000000..f15c7f4
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_physical_sensor_test.proto
@@ -0,0 +1,80 @@
+// @file sns_physical_sensor_test.proto
+//
+// Defines test API message types for physical sensors.
+//
+// All physical Sensor drivers are required to use this API to support
+// self-test. SNS_PHYSICAL_SENSOR_TEST_TYPE_COM is a mandatory test type and must be
+// implemented in all physical Sensor drivers. Any new or device-specific
+// test type may be defined in the Sensor-specific API.
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+
+enum sns_physical_sensor_test_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Test config request to a physical Sensor
+  SNS_PHYSICAL_SENSOR_TEST_MSGID_SNS_PHYSICAL_SENSOR_TEST_CONFIG = 515;
+
+  // Test event message from a physical Sensor
+  SNS_PHYSICAL_SENSOR_TEST_MSGID_SNS_PHYSICAL_SENSOR_TEST_EVENT  = 1026;
+}
+
+// Supported test types for physical sensors
+enum sns_physical_sensor_test_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Software test.
+  SNS_PHYSICAL_SENSOR_TEST_TYPE_SW = 0;
+
+  // Sensor Hardware test.
+  SNS_PHYSICAL_SENSOR_TEST_TYPE_HW = 1;
+
+  // Factory test used for Sensor calibration.
+  SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY = 2;
+
+  // Communication bus test.
+  SNS_PHYSICAL_SENSOR_TEST_TYPE_COM = 3;
+}
+
+// Physical Sensor test configuration request
+message sns_physical_sensor_test_config
+{
+  // Requested test type.
+  required sns_physical_sensor_test_type test_type = 1;
+}
+
+// Physical Sensor test event
+message sns_physical_sensor_test_event
+{
+  // Result if the test execution was successful:
+  // true for success
+  // false for failure
+  required bool test_passed = 1 [default = true];
+
+  // test_type from sns_physical_sensor_test_config that
+  // this event corresponds to
+  required sns_physical_sensor_test_type test_type = 2 [default = SNS_PHYSICAL_SENSOR_TEST_TYPE_COM];
+
+  // Driver specific test data. This field can be used
+  // to pass additional information like failure codes, debug data, etc.
+  optional bytes test_data = 3;
+}
+
+// Self-test and streaming concurrency requirements:
+// 1. If the sensor is streaming and there is a client request to run
+//    self-test (any test type) then the driver:
+//      a. Pauses the stream
+//      b. Executes the self-test request to completion
+//      c. Resumes stream
+// 2. If the self-test is running and there is a client request to start
+//    a sensor stream then the driver:
+//      a. Rejects the stream request
+//      b. Continues executing the self-test request to completion
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_pose_6dof.proto b/prebuilt/system/etc/sensors/proto/sns_pose_6dof.proto
new file mode 100644
index 0000000..4ba9ee2
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_pose_6dof.proto
@@ -0,0 +1,70 @@
+// @file sns_pose_6dof.proto
+//
+// Defines the API for Pose Six Degrees of Freedom sensors.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "sns_std_sensor.proto";
+
+// A pose 6dof sensor events consists of a rotation expressed as a quaternion
+// and a translation expressed in SI units.  Pose of the device is defined as
+// the orientation of the device from a Earth Centered Earth Fixed frame and
+// the translation from an arbitrary point at subscription.
+//
+// ## Pose 6DOF sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "pose_6dof"
+//
+// ## Request Message: sns_std_sensor_config
+// sns_std_sensor_config::sample_rate is used to specify the sampling rate (Hz)
+// of the Pose 6DOF sensor. Sensor will generate data events at this rate.
+//
+// ## Event Message: sns_std_sensor_event
+// Output of the Pose 6DOF sensor will be populated in sns_std_sensor_event
+//
+// A Pose 6DOF sensor reports the orientation of the device relative
+// to the East-North-Up coordinates frame. It is obtained by
+// integration of accelerometer and gyroscope readings.
+// The East-North-Up coordinate system is defined as a direct
+// orthonormal basis where:
+//
+// - X points east and is tangential to the ground.
+// - Y points north and is tangential to the ground.
+// - Z points towards the sky and is perpendicular to the ground.
+//
+// The orientation is represented by the rotation necessary to align
+// the East-North-Up coordinates with the device's coordinates. That is,
+// applying the rotation to the world frame (X,Y,Z) would align them with
+// the device coordinates (x,y,z).
+//
+// The rotation can be seen as rotating the device by an angle theta around an
+// axis rot_axis to go from the reference (East-North-Up aligned) device
+// orientation to the current device orientation. The rotation is encoded
+// as the four unitless x, y, z, w components of a unit quaternion:
+//
+// sns_std_sensor_event::data[0] = x*sin(theta/2)
+// sns_std_sensor_event::data[1] = y*sin(theta/2)
+// sns_std_sensor_event::data[2] = z*sin(theta/2)
+// sns_std_sensor_event::data[3] = cos(theta/2)
+// sns_std_sensor_event::data[4] = Translation along x axis from an arbitrary origin.
+// sns_std_sensor_event::data[5] = Translation along y axis from an arbitrary origin.
+// sns_std_sensor_event::data[6] = Translation along z axis from an arbitrary origin.
+// sns_std_sensor_event::data[7] = Delta quaternion rotation x*sin(theta/2)
+// sns_std_sensor_event::data[8] = Delta quaternion rotation y*sin(theta/2)
+// sns_std_sensor_event::data[9] = Delta quaternion rotation z*sin(theta/2)
+// sns_std_sensor_event::data[10] = Delta quaternion rotation cos(theta/2)
+// sns_std_sensor_event::data[11] = Delta translation along x axis.
+// sns_std_sensor_event::data[12] = Delta translation along y axis.
+// sns_std_sensor_event::data[13] = Delta translation along z axis.
+// sns_std_sensor_event::data[14] = Sequence number; ascending sequentially from 0
+
+// Where:
+// - the x, y and z fields of rot_axis are the East-North-Up coordinates
+// of a unit length vector representing the rotation axis
+// - theta is the rotation angle
+//
+// sns_std_sensor_event::status specifies the reliability of the sample value
+// value is of type sns_std_sensor_sample_status. see sns_std_sensor.proto for
+// details.
diff --git a/prebuilt/system/etc/sensors/proto/sns_ppg.proto b/prebuilt/system/etc/sensors/proto/sns_ppg.proto
new file mode 100644
index 0000000..c3fc279
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_ppg.proto
@@ -0,0 +1,43 @@
+// @file sns_ppg.proto
+//
+// Defines the API for PPG Sensors.
+//
+// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+
+// Attribute requirements:
+// The PPG Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "ppg".
+// 2. SNS_STD_SENSOR_ATTRID_RATES attribute values in Hz.
+
+// Handling stream requests:
+// 1. The PPG Sensor handles the sns_std_sensor_config
+//    message request with msgid SNS_STD_SENSOR_MSGID_SNS_STD_SENSOR_CONFIG
+//    for all stream enable/update requests.
+//    SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_STREAMING
+// 2. The PPG Sensor uses batching_period item in
+//    sns_std_request as the requested batching rate to determine
+//    hardware FIFO watermark.
+
+// Handling stream events:
+// 1. The PPG Sensor publishes PPG data stream events
+//    using the sns_std_sensor_event message.
+// 2. Each stream event contains three output data fields
+//    data[0] => PPG ch1
+//    data[1] => PPG ch2
+//    data[2] => 128 if touched,  0 otherwise
+// 3. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 4. The PPG Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_pressure.proto b/prebuilt/system/etc/sensors/proto/sns_pressure.proto
new file mode 100644
index 0000000..2c62bdc
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_pressure.proto
@@ -0,0 +1,65 @@
+// @file sns_pressure.proto
+//
+// Defines the API for Pressure Sensors.
+// All Pressure Sensor drivers are required to comply with this API.
+// Any new functionality for Pressure Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The Pressure Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "pressure".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute values in hectoPascal/LSB unit.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in hectoPascal unit.
+// 4. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The Pressure Sensor handles the sns_std_sensor_config
+//    message request for all stream enable/update requests.
+// 2. If the physical sensor supports hardware FIFO then the Pressure
+//    Sensor uses batching_period item in sns_std_request as the requested
+//    batching rate to determine hardware FIFO watermark.
+
+// Handling stream events:
+// 1. The Pressure Sensor publishes atmospheric pressure data stream events
+//    using the sns_std_sensor_event message.
+// 2. Each stream event contains one output data field where data is
+//    factory calibrated and ordered as:
+//    data[0] = Pressure data in hPa (hectoPascal)
+// 3. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 4. The Pressure Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+// 5. The Pressure Sensor publishes a factory calibration event using the
+//    sns_cal_event message. It uses bias and scale_factor fields in this event.
+//    It publishes this event each time there is change in it's factory calibration
+//    data or when a client sends a new streaming request.
+
+// Handling self-test requests:
+// 1. The Pressure Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The Pressure Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API.
+// 3. The Pressure Sensor could implement other test types.
+
+// Handling test events:
+// 1. The Pressure Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
diff --git a/prebuilt/system/etc/sensors/proto/sns_proximity.proto b/prebuilt/system/etc/sensors/proto/sns_proximity.proto
new file mode 100644
index 0000000..257725f
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_proximity.proto
@@ -0,0 +1,111 @@
+// @file sns_proximity.proto
+//
+// Defines the API for Proximity Sensors.
+// All Proximity Sensor drivers are required to comply with this API.
+// Any new functionality for Proximity Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2019 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The Proximity Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "proximity".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute is not applicable since this
+//    is an event sensor.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in cm unit (proximity distance).
+// 4. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The Proximity Sensor supports both streaming and on-change
+//    modes and the operating mode is configured in the Registry.
+// 2. The streaming Proximity Sensor handles the sns_std_sensor_config request
+//    for all stream enable/update requests.
+// 3. The on-change Proximity Sensor handles the
+//    SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG request for
+//    all on-change enable/update requests.
+// 4. In on-change mode the Sensor uses interrupt operation and reports
+//    samples only for NEAR/FAR transitions.
+
+// Message IDs for proximity Sensor
+enum sns_proximity_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // Uses message: sns_proximity_event
+  // Purpose: A non-recurring output data event from the proximity sensor to its client.
+  SNS_PROXIMITY_MSGID_SNS_PROXIMITY_EVENT  = 769;
+
+  // Uses message: sns_proximity_event_recurrent
+  // Purpose: A recurring output data event from the proximity sensor to its client.
+  SNS_PROXIMITY_MSGID_SNS_PROXIMITY_EVENT_RECURRENT  = 1031;
+}
+
+enum sns_proximity_event_type {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_PROXIMITY_EVENT_TYPE_FAR = 0;
+  SNS_PROXIMITY_EVENT_TYPE_NEAR  = 1;
+}
+
+// Events types from proximity Sensor
+message sns_proximity_event
+{
+  // Proximity NEAR/FAR output event
+  required sns_proximity_event_type proximity_event_type = 1 [default = SNS_PROXIMITY_EVENT_TYPE_FAR];
+
+  // Proimity sensor raw data
+  required uint32 raw_adc = 2;
+
+  // Proximity sensor sample status
+  required sns_std_sensor_sample_status status = 3 [default = SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE];
+}
+
+message sns_proximity_event_recurrent
+{
+  // Proximity NEAR/FAR output event
+  required sns_proximity_event_type proximity_event_type = 1 [default = SNS_PROXIMITY_EVENT_TYPE_FAR];
+
+  // Proimity sensor raw data
+  required uint32 raw_adc = 2;
+
+  // Proximity sensor sample status
+  required sns_std_sensor_sample_status status = 3 [default = SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE];
+}
+
+// Handling stream events:
+// 1. The Proximity Sensor publishes object proximity data stream events
+//    using sns_proximity_event message.
+// 2. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 3. The Proximity Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is a change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+
+// Handling self-test requests:
+// 1. The Proximity Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The Proximity Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API. The factory test for Proximity Sensor calibrates
+//    the sensor to detect an object (including light and dark colored)
+//    at 5cm distance from the physical sensor.
+// 3. The Proximity Sensor could implement other test types.
+
+// Handling test events:
+// 1. The Proximity Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_psmd.proto b/prebuilt/system/etc/sensors/proto/sns_psmd.proto
new file mode 100644
index 0000000..c3eab9f
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_psmd.proto
@@ -0,0 +1,59 @@
+// @file sns_psmd.proto
+//
+// Defines the API for Persistent Stationary/Motion Detection Sensors.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// A persistent stationary/motion sensor reports once
+// - The device is moving/not still
+// - The device is detected to be still/stationary
+// The period of time to monitor for motion and stationarity should be greater
+// than 5 seconds, and less than 10 seconds.  After reporting, conceptually
+// the algorithm's state is reset, and detection begins again.
+//
+// Motion here refers to any mechanism in which the device is causes to be
+// moved in its inertial frame. eg: Picking up the device and walking with it
+// to a nearby room may trigger motion whereas keeping the device on a table
+// on a smooth train moving at constant velocity may not trigger motion.
+//
+// Stationarity here refers to absolute stationarity. eg: device on desk.
+//
+// ## Persistent Stationary/Motion Detect sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "psmd"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Message IDs for Persistent Stationary/Motion Sensor
+enum sns_psmd_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Configuration Request
+  SNS_PSMD_MSGID_SNS_PSMD_CONFIG = 512;
+
+  // Empty Event
+  // Indicates that the requested state has been detected
+  SNS_PSMD_MSGID_SNS_PSMD_EVENT = 768;
+}
+
+// Detected states supported by the PSM Detector
+enum sns_psmd_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_PSMD_TYPE_STATIONARY = 0;
+  SNS_PSMD_TYPE_MOTION = 1;
+}
+
+// Configuration Message
+// Used to specify the PSMD configuration
+message sns_psmd_config
+{
+  // Which detector type to enable
+  required sns_psmd_type type = 1;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_registry.proto b/prebuilt/system/etc/sensors/proto/sns_registry.proto
new file mode 100644
index 0000000..e671efe
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_registry.proto
@@ -0,0 +1,65 @@
+// @file sns_registry.proto
+//
+// Sensors Registry message definitions for internal and external clients
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+
+// Registry Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "registry"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_SINGLE_OUTPUT
+
+// Registry Sensor message IDs:
+enum sns_registry_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_REGISTRY_MSGID_SNS_REGISTRY_READ_REQ = 512;
+  SNS_REGISTRY_MSGID_SNS_REGISTRY_WRITE_REQ = 513;
+  SNS_REGISTRY_MSGID_SNS_REGISTRY_READ_EVENT = 514;
+}
+
+message sns_registry_data
+{
+  message item
+  {
+    option (nanopb_msgopt).no_unions = true;
+
+    // Item name (i.e. Only item-specific name, sans group name)
+    required string name = 1;
+    optional fixed32 version = 2;
+
+    oneof data
+    {
+      sns_registry_data subgroup = 10;
+      string str = 11;
+      float flt = 12;
+      sfixed64 sint = 13;
+    }
+  }
+  repeated item items = 3;
+}
+
+message sns_registry_read_req
+{
+  // Full name of the item or group to be read
+  required string name = 1;
+}
+
+message sns_registry_write_req
+{
+  // Full name of the group to be written
+  required string name = 1;
+
+  required sns_registry_data data = 2;
+}
+
+message sns_registry_read_event
+{
+  // Full name of the group which was read
+  required string name = 1;
+
+  required sns_registry_data data = 2;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_remote_proc_state.proto b/prebuilt/system/etc/sensors/proto/sns_remote_proc_state.proto
new file mode 100644
index 0000000..05777ee
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_remote_proc_state.proto
@@ -0,0 +1,63 @@
+// @file sns_remote_proc_state.proto
+//
+// Defines standard message types for the Remote Processor State sensor
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_type.proto";
+
+// remote_proc_state sensor receives remote processor state 
+// notifications and sends these notifications to its clients
+
+// remote_proc_state Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_NAME: "Remote Processor State"
+// SNS_STD_SENSOR_ATTRID_TYPE: "remote_proc_state"
+// SNS_STD_SENSOR_ATTRID_VENDOR: "QTI"
+
+enum sns_remote_proc_state_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // Uses message: sns_remote_proc_state_config
+  // Config request to receive remote processor stat updates
+  SNS_REMOTE_PROC_STATE_MSGID_SNS_REMOTE_PROC_STATE_CONFIG = 512;
+  
+
+  // Uses message: sns_remote_proc_state_event  
+  // This event is generated when the remote_proc_state service
+  // sends out the remote processor state change notification
+  SNS_REMOTE_PROC_STATE_MSGID_SNS_REMOTE_PROC_STATE_EVENT = 1024;
+}
+
+// Remote processor state config request
+// Note: Currently the only supported processor is Apps:
+// SNS_STD_PROCESSOR_APSS
+message sns_remote_proc_state_config
+{
+  // Requested processor type
+  required sns_std_client_processor proc_type = 1;
+}
+
+// Supported processor state event types
+enum sns_remote_proc_state_event_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Processor is suspended
+  SNS_REMOTE_PROC_STATE_SUSPEND = 0;
+  
+  // Processor is awake
+  SNS_REMOTE_PROC_STATE_AWAKE = 1;
+}
+
+// Remote processor state event
+message sns_remote_proc_state_event
+{
+  // Processor type whose state is updated
+  required sns_std_client_processor proc_type = 1;
+
+  // Event type with state of the processor
+  required sns_remote_proc_state_event_type event_type = 2;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_resampler.proto b/prebuilt/system/etc/sensors/proto/sns_resampler.proto
new file mode 100644
index 0000000..8c9b7d7
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_resampler.proto
@@ -0,0 +1,90 @@
+// @file sns_resampler.proto
+//
+// Defines standard message types for the Resampler
+//
+// Copyright (c) 2016-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std.proto";
+import "sns_std_sensor.proto";
+import "sns_std_event_gated_sensor.proto";
+
+// Resampler Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "resampler"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_STREAMING
+
+// Sensor output event:
+// Resampler use sns_std_sensor_event for it's output event
+
+enum sns_resampler_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_RESAMPLER_MSGID_SNS_RESAMPLER_CONFIG = 512;
+  SNS_RESAMPLER_MSGID_SNS_RESAMPLER_CONFIG_EVENT = 776;
+}
+
+// Type of requested resampled rate
+enum sns_resampler_rate
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Requested resampled rate is fixed
+  SNS_RESAMPLER_RATE_FIXED = 0;
+
+  // Requested resampled rate is the minimum required
+  SNS_RESAMPLER_RATE_MINIMUM = 1;
+}
+
+// Resampler output quality
+enum sns_resampler_quality
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Resampler output is the same as input sensor data
+  SNS_RESAMPLER_QUALITY_CURRENT_SAMPLE = 0;
+
+  // Resampler output is filtered down from input sensor data
+  SNS_RESAMPLER_QUALITY_FILTERED = 1;
+
+  // Resampler output is interpolated and filtered down from input sensor data
+  SNS_RESAMPLER_QUALITY_INTERPOLATED_FILTERED = 2;
+
+  // Resampler output is interpolated down from input sensor data
+  SNS_RESAMPLER_QUALITY_INTERPOLATED = 3;
+}
+
+// Configuration Message
+// Used to either request for a new configuration of the Resampler Sensor or
+// alter an already existing configuration
+message sns_resampler_config
+{
+  // UID of the Sensor to be resampled
+  required sns_std_suid sensor_uid = 1;
+
+  // The requested resampled rate in Hz
+  required float resampled_rate = 2;
+
+  // The requested rate type as defined in sns_resampler_rate
+  required sns_resampler_rate rate_type = 3;
+
+  // Set to true to enable filtering, else false
+  required bool filter = 4;
+
+  // Set to true if sensor to be resampled is event gated
+  optional bool event_gated = 5;
+
+  // Number of axes of the sensor data
+  optional uint32 axis_cnt = 6;
+}
+
+// Config event to inform client sample quality
+// of all subsequent sns_std_sensor_event from resampler
+message sns_resampler_config_event
+{
+  // Quality of the resampled sensor data as defined in
+  // sns_resampler_quality
+  required sns_resampler_quality quality = 1;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_rgb.proto b/prebuilt/system/etc/sensors/proto/sns_rgb.proto
new file mode 100644
index 0000000..63a63ab
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_rgb.proto
@@ -0,0 +1,78 @@
+// @file sns_rgb.proto
+//
+// Defines the API for RGB Sensors.
+// All RGB Sensor drivers are required to comply with this API.
+// Any new functionality for RGB Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The RGB Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "rgb".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute values in µW/cm2/LSB unit.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in µW/cm2 unit.
+// 4. See sns_std_sensor.proto for other attributes.
+
+
+// Handling stream requests:
+// 1. The RGB Sensor supports both streaming and on-change
+//    modes and the operating mode is configured in the Registry.
+// 2. The streaming RGB Sensor handles the sns_std_sensor_config
+//    request for all stream enable/update requests.
+// 3. The on-change RGB Sensor handles the
+//    SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG request for
+//    all stream enable/update requests.
+// 4. In on-change mode the Sensor uses interrupt operation and reports
+//    samples for only significant change in R/G/B/clear channel irradiance.
+//    Example: +/- 10% change.
+
+// Handling stream events:
+// 1. The RGB Sensor publishes color data in ambient light using the
+//    sns_std_sensor_event message.
+// 2. Each stream event contains six output data fields where data is
+//    factory calibrated and ordered as:
+//    data[0] = Red channel irradiance in µW/cm2
+//    data[1] = Green channel irradiance in µW/cm2
+//    data[2] = Blue channel irradiance in µW/cm2
+//    data[3] = Clear channel irradiance in µW/cm2
+//    data[4] = Color Temperature in Kelvin
+//    data[5] = raw clear channel ADC value
+// 3. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 4. The RGB Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+// 5. The RGB Sensor publishes a factory calibration event using the
+//    sns_cal_event message. It uses bias and scale_factor fields in this event.
+//    It publishes this event each time there is change in it's factory calibration
+//    data or when a client sends a new streaming request.
+
+// Handling self-test requests:
+// 1. The RGB Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The RGB Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API. The factory test for RGB Sensor calibrates
+//    the sensor such that it's output is comparable to a standard Chromemeter
+//    output in any lighting condition.
+// 3. The RGB Sensor could implement other test types.
+
+// Handling test events:
+// 1. The RGB Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution. 
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
diff --git a/prebuilt/system/etc/sensors/proto/sns_rmd.proto b/prebuilt/system/etc/sensors/proto/sns_rmd.proto
new file mode 100644
index 0000000..7b66ed1
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_rmd.proto
@@ -0,0 +1,51 @@
+
+// @file sns_rmd.proto
+//
+// Defines message types for the Absolute Motion Detector (RMD) Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// RMD calculates motion and stationary states. RMD will initially start in an
+// unknown state, and later transition to motion or stationary.
+
+// RMD Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "rmd"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for RMD Sensor
+enum sns_rmd_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_RMD_MSGID_SNS_RMD_EVENT = 772;
+}
+
+enum sns_rmd_event_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_RMD_EVENT_TYPE_UNKNOWN          = 0;
+  SNS_RMD_EVENT_TYPE_STATIONARY       = 1;
+  SNS_RMD_EVENT_TYPE_MOTION           = 2;
+}
+
+message sns_rmd_event
+{
+  // RMD motion state
+  required sns_rmd_event_type state = 1 [default = SNS_RMD_EVENT_TYPE_UNKNOWN];
+}
+
+// Stream events:
+//
+// The sns_rmd_event message is used to publish updated state
+//
+// RMD does not publish configuration events.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_rotv.proto b/prebuilt/system/etc/sensors/proto/sns_rotv.proto
new file mode 100644
index 0000000..8dde922
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_rotv.proto
@@ -0,0 +1,53 @@
+// @file sns_rotv.proto
+//
+// Defines the API for Rotation Vector sensors.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "sns_std_sensor.proto";
+
+// A ROTV sensor reports the orientation of the device relative to the
+// East-North-Up coordinates frame. It is obtained by integration of
+// accelerometer, gyroscope, and magnetometer readings.
+//
+// ## ROTV sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "rotv"
+//
+// ## Request Message: sns_std_sensor_config
+// sns_std_sensor_config::sample_rate is used to specify the sampling rate (Hz)
+// of the ROTV sensor. Sensor will generate data events at this rate.
+//
+// ## Event Message: sns_std_sensor_event
+// Output of the ROTV sensor will be populated in sns_std_sensor_event
+//
+// The East-North-Up coordinate system is defined as a direct orthonormal
+// basis where:
+// - X points east and is tangential to the ground.
+// - Y points north and is tangential to the ground.
+// - Z points towards the sky and is perpendicular to the ground.
+//
+// The orientation is represented by the rotation necessary to align
+// the East-North-Up coordinates with the device's coordinates. That is,
+// applying the rotation to the world frame (X,Y,Z) would align them with
+// the device coordinates (x,y,z).
+//
+// The rotation can be seen as rotating the device by an angle theta around an
+// axis rot_axis to go from the reference device orientation to the current
+// device orientation. The rotation is encoded as the four unitless x, y, z, w
+// components of a unit quaternion:
+// sns_std_sensor_event::data[0] = rot_axis.x*sin(theta/2)
+// sns_std_sensor_event::data[1] = rot_axis.y*sin(theta/2)
+// sns_std_sensor_event::data[2] = rot_axis.z*sin(theta/2)
+// sns_std_sensor_event::data[3] = cos(theta/2)
+//
+// Where:
+// - the x, y and z fields of rot_axis are the East-North-Up coordinates
+// of a unit length vector representing the rotation axis
+// - theta is the rotation angle
+//
+// sns_std_sensor_event::status specifies the reliability of the sample value
+// value is of type sns_std_sensor_sample_status. see sns_std_sensor.proto for
+// details.
diff --git a/prebuilt/system/etc/sensors/proto/sns_sar.proto b/prebuilt/system/etc/sensors/proto/sns_sar.proto
new file mode 100644
index 0000000..6c69bef
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_sar.proto
@@ -0,0 +1,93 @@
+// @file sns_sar.proto
+//
+// Defines the API for Specific Absorption Rate (SAR) Sensors.
+// SAR sensors typically detect human object proximity using change in capacitance
+// levels of copper touch pads/buttons.
+// All SAR Sensor drivers are required to comply with this API.
+// Any new functionality for SAR Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+
+// Attribute requirements:
+// The SAR Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "sar".
+//    Each SAR sensor (example individual capacitive button) shall be published
+//    as an independent sensor with a unique Sensor UID.
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute is not applicable since this
+//    is an event sensor.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in cm unit (proximity distance).
+// 4. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The SAR Sensor handles the SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG
+//    message ID for all stream enable/update requests.
+// 2. The SAR Sensor operates in on-change mode and reports
+//    samples only for object (typically human) NEAR/FAR transitions.
+//    Since it is an on-change sensor, the sar sensor publishes an initial data event
+//    event for each new client request.
+
+// Message IDs for SAR Sensor
+enum sns_sar_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // Uses message: sns_sar_event
+  // Purpose: An output data event from the SAR sensor to it's client.
+  SNS_SAR_MSGID_SNS_SAR_EVENT  = 769;
+}
+
+enum sns_sar_event_type {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_SAR_EVENT_TYPE_FAR = 0;
+  SNS_SAR_EVENT_TYPE_NEAR  = 1;
+}
+
+// Events types from SAR Sensor
+message sns_sar_event
+{
+  // SAR NEAR/FAR output event
+  required sns_sar_event_type sar_event_type = 1 [default = SNS_SAR_EVENT_TYPE_FAR];
+
+  // SAR sensor raw data.
+  // Format of this data is driver specific.
+  optional bytes additional_sar_data = 2;
+
+  // SAR sensor sample status
+  required sns_std_sensor_sample_status status = 3 [default = SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE];
+}
+
+// Handling stream events:
+// 1. The SAR Sensor publishes human object proximity data events using sns_sar_event message.
+// 2. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 3. The SAR Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+
+// Handling self-test requests:
+// 1. The SAR Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The SAR Sensor may implement SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API.
+// 3. The SAR Sensor could implement other test types.
+
+// Handling test events:
+// 1. The SAR Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_sensor_temperature.proto b/prebuilt/system/etc/sensors/proto/sns_sensor_temperature.proto
new file mode 100644
index 0000000..d9da6b9
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_sensor_temperature.proto
@@ -0,0 +1,66 @@
+// @file sns_sensor_temperature.proto
+//
+// Defines the API for physical Sensor Temperature Sensors.
+// All Sensor Temperature Sensor drivers are required to comply with this API.
+// Any new functionality for Sensor Temperature Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The Sensor Temperature Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "sensor_temperature".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute value in degrees Celsius/LSB.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in degrees Celsius unit.
+// 4. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The Sensor Temperature Sensor handles the sns_std_sensor_config
+//    message request for all stream enable/update requests.
+// 2. If the physical sensor supports hardware FIFO then the Sensor Temperature
+//    Sensor uses batching_period item in sns_std_request as the requested
+//    batching rate to determine hardware FIFO watermark.
+
+// Handling stream events:
+// 1. The Sensor Temperature Sensor publishes physical sensor temperature data
+//    stream events using the sns_std_sensor_event message.
+// 2. Each stream event contains one output data field where data is
+//    factory calibrated and ordered as:
+//    data[0] = physical Sensor Temperature data in degrees Celsius
+// 3. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 4. The Sensor Temperature Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+// 5. The Sensor Temperature Sensor publishes a factory calibration event using the
+//    sns_cal_event message. It uses bias and scale_factor fields in this event.
+//    It publishes this event each time there is change in it's factory calibration
+//    data or when a client sends a new streaming request.
+
+
+// Handling self-test requests:
+// 1. The Sensor Temperature Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The Sensor Temperature Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API.
+// 3. The Sensor Temperature Sensor could implement other test types.
+
+// Handling test events:
+// 1. The Sensor Temperature Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
diff --git a/prebuilt/system/etc/sensors/proto/sns_sig_motion.proto b/prebuilt/system/etc/sensors/proto/sns_sig_motion.proto
new file mode 100644
index 0000000..9890861
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_sig_motion.proto
@@ -0,0 +1,33 @@
+// @file sns_sig_motion.proto
+//
+// Defines the API for Significant Motion Detection Sensors.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// A significant motion sensor reports once if "significant motion"
+// is detected.  After reporting, conceptually the algorithm's state is reset,
+// and detection begins again.
+//
+// ## Significant Motion sensor attributes:
+// SNS_STD_SENSOR_ATTRID_TYPE is "sig_motion"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+//
+// ## Request Message: SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG
+// No configuration is available for this sensor.
+//
+// ## Event Message: SNS_SIG_MOTION_MSGID_SNS_SIG_MOTION_EVENT
+// Reported upon new detection of significant motion.
+
+// Message IDs for Significant Motion Detect Sensor
+enum sns_sig_motion_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // Empty Message
+  SNS_SIG_MOTION_MSGID_SNS_SIG_MOTION_EVENT = 772;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_signal_sensor.proto b/prebuilt/system/etc/sensors/proto/sns_signal_sensor.proto
new file mode 100644
index 0000000..3269575
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_signal_sensor.proto
@@ -0,0 +1,47 @@
+//  @file sns_signal_sensor.proto
+//
+//  Defines standard message types for the Signal Sensor
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+
+// Signal sensor
+//
+// The signal sensor provides a mechanism to turn asynchronous callbacks into
+// events that are passed to the client. The client subscribes to this sensor
+// using the sns_signal_sensor_req message.
+//
+// The signal sensor provides a thread and a flag to the client via the
+// sns_signal_sensor_token_event event upon subscribing to the service.
+
+// Message IDs
+enum sns_signal_sensor_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_SIGNAL_SENSOR_MSGID_SNS_SIGNAL_SENSOR_REQ = 512;
+  SNS_SIGNAL_SENSOR_MSGID_SNS_SIGNAL_SENSOR_TOKEN = 1024;
+  SNS_SIGNAL_SENSOR_MSGID_SNS_SIGNAL_SENSOR_NOTIFY = 1025;
+}
+
+// Signal sensor request
+//
+// Subscribe to the signal sensor.
+message sns_signal_sensor_req
+{
+  required bool enable = 1;
+}
+
+// Signal sensor token
+//
+// Provides the thread and flag to the client
+message sns_signal_sensor_token
+{
+  required fixed64 thread = 1;
+  required fixed32 flag = 2;
+}
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_sim.proto b/prebuilt/system/etc/sensors/proto/sns_sim.proto
new file mode 100644
index 0000000..256ee73
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_sim.proto
@@ -0,0 +1,30 @@
+// @file sns_sim.proto
+//
+// Defines Header config packet strcture for finding out sim sensors config info
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_std_type.proto";
+
+enum sns_sim_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+  // message not required
+  // Purpose: Created only for Offline/Online Playback to inform end of the 
+  // file status to client 
+  SNS_SIM_MSGID_SNS_SIM_END_OF_THE_FILE_EVENT = 1027;
+}
+
+/*Header config packet proto message. It will come as a first packet in event dlf file*/
+message header_info {
+  message sensor_info{
+      required sns_std_suid suid = 1;
+      required string data_type = 2;
+      repeated sns_std_attr attributes = 3;
+  }
+  repeated sensor_info info= 1;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_sim_legacy.proto b/prebuilt/system/etc/sensors/proto/sns_sim_legacy.proto
new file mode 100644
index 0000000..7067fa3
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_sim_legacy.proto
@@ -0,0 +1,32 @@
+// @file sns_sim_legacy.proto
+//
+// Defines standard message types for the Simulation Sensor
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// Data Message
+// Data event generated by the simulation sensor.
+// Uses sns_std_sensor_event message defined in sns_std_sensor.proto
+// The data field of the sns_std_sensor_event message
+// contains a float array of length 3 with the following definition
+// 1) float data[0] to data[2]
+//      containing the triaxial sensor data in floating point.
+//      Units for different sensors are as follows
+//      Accel: m/s2
+//      Gyro: rad/s
+// 2) sns_std_sensor_sample_status status;
+//      containing the sample status as defined by the sns_std_sensor_sample_status enum
+//      in sns_std_sensor.proto
+
+// Configuration Message
+// Used to either request for a certain configuration of the Sim Sensor or
+// alter an already existing configuration of the Simulation Sensor
+// Uses sns_std_sensor_config defined in sns_std_sensor.proto
+// The message field definitions are as follows:
+// 1) float sample_rate
+//      containing the required sample rate of the Sim sensor in hertz
diff --git a/prebuilt/system/etc/sensors/proto/sns_std.proto b/prebuilt/system/etc/sensors/proto/sns_std.proto
new file mode 100644
index 0000000..08897b4
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_std.proto
@@ -0,0 +1,128 @@
+// @file sns_std.proto
+//
+// Defines standard messages used across multiple Sensor API definitions
+//
+// Copyright (c) 2016-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import public "sns_std_type.proto";
+
+// Framework-defined message IDs:
+enum sns_std_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // Query a Sensor for all attributes
+  // @event sns_std_error_event
+  SNS_STD_MSGID_SNS_STD_ATTR_REQ = 1;
+
+  // Flush a Sensor.
+  // When a sensor receives a flush request it publishes any unpublished
+  // samples. The sensor always  publishes a SNS_STD_MSGID_SNS_STD_FLUSH_EVENT
+  // event to indicate completion of a flush request.
+  // All Sensors handle this flush request message.
+  // Empty Message
+  // @event sns_pb_flush_event
+  SNS_STD_MSGID_SNS_STD_FLUSH_REQ = 2;
+
+  // NOTE: 10 - 20 Are reserved for Client Manager
+  // NOTE: 120-127 Are reserved
+
+  // All published attributes for a Sensor
+  SNS_STD_MSGID_SNS_STD_ATTR_EVENT = 128;
+
+  // Indicates no further events will be generated in response to a flush req.
+  // Empty Message
+  SNS_STD_MSGID_SNS_STD_FLUSH_EVENT = 129;
+
+  // Indicates an error has occurred
+  SNS_STD_MSGID_SNS_STD_ERROR_EVENT = 130;
+
+  // NOTE: 250-255 Are reserved
+}
+
+// Base message payload, from which all other Request payloads must extend
+// The message will be delivered decoded within the Sensor API
+message sns_std_request {
+  message batch_spec {
+    // Logically a timer will be registered for this many microseconds.
+    // All events generated since the last timer expiration will be saved
+    // until the next timer has fired.  This period is interpreted as a maximum
+    // period specified by the client; events may be delivered to client at a
+    // faster rate (smaller batch period).
+    // A batch period of 0 indicates that no batching shall occur.
+    required uint32 batch_period = 1;
+
+    // Sensor supporting Data Acquisition Engine shall support flush_period.
+    // Sensor shall not drop data that is more recent than flush_period.
+    // Sensor may drop data that is older than the flush_period.
+    // Effective flush period may be smaller due to system constraints,
+    // or larger in the case of a concurrent client with a larger value.
+    // flush_period, if set, should be greater than or equal to batch_period.
+    // If flush_period is less than batch period the behavior is undefined.
+    // Value defaults to value set for batch_period; units in microseconds
+    optional uint32 flush_period = 2;
+
+    // If flush_only = true, the sensor should only send data to the client
+    // on receiving a flush request or if the sensor cannot accumulate flush
+    // period worth of data.
+    optional bool flush_only = 3 [default = false];
+
+    // If max_batch = true for all requests, the sensor should operate at
+    // maximum batching capacity. If a request has both max_batch = true
+    // and flush_only = true, flush_only takes precedence.
+    optional bool max_batch = 4 [default = false];
+  }
+  // Batching is disabled by default
+  optional batch_spec batching = 1;
+
+  // Dynamic length payload, containing the actual data/configuration request
+  // This payload will need to be decoded separately, using the Sensor-specific
+  // header file. If the request does not contain any message body then this
+  // field is not present.
+  optional bytes payload = 2;
+
+  // Set to true if a client intends to be a passive client. Else it is an
+  // active client request. Absence of this field shall be treated as an active
+  // request.
+  // If all requests to the sensor are passive then it shall be in off
+  // state and stop streaming.
+  // If the sensor has at least one active request then it shall be enabled
+  // and configured according to all active and passive requests.
+  // When all active clients are flush_only then passive clients are also treated
+  // as flush_only.
+  // When all active clients are event gated then passive clients are also treated
+  // as event gated.
+  // delivery_type field in passive requests shall be configured as
+  // SNS_CLIENT_DELIVERY_NO_WAKEUP.
+  // Actively enabling one sensor shall not lead to enabling of another
+  // sensor having only passive requests. For example: enabling gyro shall not
+  // lead to enabling of sensor_temperature, and vice versa.
+  optional bool is_passive = 3 [default = false];
+
+}
+
+// Query a Sensor for its list of attributes
+message sns_std_attr_req {
+  // Register for updates when the attributes of a Sensor change
+  // This option is not presently supported
+  optional bool register_updates = 2;
+}
+
+// Contains all Sensor attributes; sent in response to an sns_std_attr_req,
+// or upon an attribute change to a registered Sensor
+message sns_std_attr_event {
+  repeated sns_std_attr attributes = 1;
+}
+
+// An Error Event generated by a Sensor/Instance or the Framework
+message sns_std_error_event {
+  // SNS_STD_ERROR_NOT_AVAILABLE - Transitory error in the Sensor; some data
+  //    may have been lost or dropped, but streaming should resume.
+  // SNS_STD_ERROR_INVALID_STATE - Catastrophic error in the Sensor; do not
+  //    expect any further data.  Client may try sending enable-request again.
+  // SNS_STD_ERROR_NOT_SUPPORTED - Sensor received an unsupported request; or a
+  //    supported request at an unexpected time.
+  required sns_std_error error = 1;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_std_event_gated_sensor.proto b/prebuilt/system/etc/sensors/proto/sns_std_event_gated_sensor.proto
new file mode 100644
index 0000000..46555c7
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_std_event_gated_sensor.proto
@@ -0,0 +1,45 @@
+// @file sns_std_event_gated_sensor.proto
+//
+// Defines standard message types for Sensors with output streams that can be
+// gated on an event from another Sensor.
+// Example: "accel" Sensor can be gated by motion detect event published by
+//          the "motion_detect" Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+enum sns_std_event_gated_sensor_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Message ID to send a gated request to a Sensor.
+  // Note that the client is responsible to send separate
+  // requests to the Sensor that provides the gating event.
+  SNS_STD_EVENT_GATED_SENSOR_MSGID_SNS_STD_SENSOR_CONFIG = 518;
+
+  // An event gated Sensors uses this event message ID to indicate to it's
+  // clients that the gated stream is converted to a non-gated stream.
+  // This typically happens when the gating event occurs.
+  // Example: When "accel" is gated on "motion_detect" and if the
+  //          motion detect interrupt fires then the "accel" Sensor publishes
+  //          this event to it's clients before the accel data stream starts.
+  SNS_STD_EVENT_GATED_SENSOR_MSGID_GATED_REQ_CONVERTED_TO_NON_GATED = 772;
+}
+
+// Request and Event messages:
+// 1. An enable request to an event gated sensor uses message
+//    sns_std_sensor_config with message ID
+//    SNS_STD_EVENT_GATED_SENSOR_MSGID_SNS_STD_SENSOR_CONFIG.
+// 2. An event gated sensor publishes an output event to it's clients when
+//    the gated request is converted to a non-gated request. It uses event
+//    message ID SNS_STD_EVENT_GATED_SENSOR_MSGID_GATED_REQ_CONVERTED_TO_NON_GATED
+//    with no message payload.
+// 3. An output data event from an event gated sensor uses message
+//    sns_std_sensor_event. See sns_std_sensor.proto and sensor-specific
+//    proto file for details.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_std_sensor.proto b/prebuilt/system/etc/sensors/proto/sns_std_sensor.proto
new file mode 100644
index 0000000..2c1f46d
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_std_sensor.proto
@@ -0,0 +1,382 @@
+// @file sns_std_sensor.proto
+//
+// Defines standard message types for all Sensors. All physical Sensors are
+// required to implement this API as is or derive from it. For all other
+// Sensors, these messages are highly recommended. That being said, Sensor
+// developers may choose to define Sensor-specific message API for any
+// new/Sensor-specific functionality.
+//
+// Copyright (c) 2016-2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+
+enum sns_std_sensor_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Uses message: sns_std_sensor_config
+  // Purpose:
+  //   1. A stream request from a client to a sensor.
+  //   2. A config/ack event from a sensor to the client.
+  SNS_STD_SENSOR_MSGID_SNS_STD_SENSOR_CONFIG = 513;
+
+  // Does not use any message body.
+  // Purpose:
+  //   1. An enable request from a client to an on-change sensor.
+  //      Subsequent request from same client will be treated as NOP
+  //   2. A config/ack event from an on-change sensor to the client.
+  SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG  = 514;
+
+  // Uses message: sns_std_sensor_physical_config_event
+  // Purpose: A configuration event from a Physical Sensor (streaming and event)
+  //          to the client.
+  SNS_STD_SENSOR_MSGID_SNS_STD_SENSOR_PHYSICAL_CONFIG_EVENT = 768;
+
+  // Uses message: sns_std_sensor_event
+  // Purpose: A data event from a Sensor.
+  SNS_STD_SENSOR_MSGID_SNS_STD_SENSOR_EVENT = 1025;
+}
+
+// Status for each sensor sample
+enum sns_std_sensor_sample_status
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Sample is unreliable.
+  SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE = 0;
+
+  // Sample is low accuracy.
+  SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_LOW = 1;
+
+  // Sample is medium accuracy.
+  SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_MEDIUM = 2;
+
+  // Sample is high accuracy.
+  SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH = 3;
+}
+
+// Attribute IDs available for use by Sensors
+// Some are marked as REQUIRED, and must be published by every Sensor.  Others
+// are OPTIONAL, and may be only necessary for physical Sensors.
+//
+// Each Sensor may define their own custom attributes, using the form:
+// <proto_name>_attr_id.  Attribute IDs have the following reserved ranges:
+// 0-511 : Held for sns_std_sensor_attr_id
+// 512-1023 : Reserved for internal QTI use
+// 1024-1535 : Available for use by Sensor developers
+enum sns_std_sensor_attr_id
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // REQUIRED
+  // String
+  // Human-readable sensor name
+  SNS_STD_SENSOR_ATTRID_NAME = 0;
+
+  // REQUIRED
+  // String
+  // Human-readable vendor name
+  SNS_STD_SENSOR_ATTRID_VENDOR = 1;
+
+  // REQUIRED
+  // String
+  // Data Type used by this Sensor
+  SNS_STD_SENSOR_ATTRID_TYPE = 2;
+
+  // REQUIRED
+  // Boolean
+  // Whether this Sensor is available for clients
+  SNS_STD_SENSOR_ATTRID_AVAILABLE = 3;
+
+  // REQUIRED
+  // Integer
+  // Sensor version
+  SNS_STD_SENSOR_ATTRID_VERSION = 4;
+
+  // REQUIRED
+  // [String]
+  // .proto files specifying the incoming request and outgoing event messages
+  SNS_STD_SENSOR_ATTRID_API = 5;
+
+  // OPTIONAL
+  // [Float]
+  // Supported sample rates in Hz
+  SNS_STD_SENSOR_ATTRID_RATES = 6;
+
+  // OPTIONAL
+  // [Float]
+  // Supported resolutions
+  SNS_STD_SENSOR_ATTRID_RESOLUTIONS = 7;
+
+  // OPTIONAL
+  // Integer
+  // Supported FIFO depth in number of samples
+  SNS_STD_SENSOR_ATTRID_FIFO_SIZE = 8;
+
+  // OPTIONAL
+  // [Integer]
+  // Active currents in uA for all sns_attr_op_modes. Length of the array
+  // of active currents must match the length of the array of operation modes.
+  SNS_STD_SENSOR_ATTRID_ACTIVE_CURRENT = 9;
+
+  // OPTIONAL
+  // Integer
+  // Inactive current in uA
+  SNS_STD_SENSOR_ATTRID_SLEEP_CURRENT = 10;
+
+  // OPTIONAL
+  // [{float,float}]
+  // Supported operating ranges
+  SNS_STD_SENSOR_ATTRID_RANGES = 11;
+
+  // OPTIONAL
+  // String
+  // Operating Modes ("LPM", "HIGH_PERF", "NORMAL", "OFF")
+  SNS_STD_SENSOR_ATTRID_OP_MODES = 12;
+
+  // OPTIONAL
+  // Boolean
+  // Whether the Sensor supports Data Ready Interrupt (DRI) or IBI
+  // (In Band Interrupt).
+  SNS_STD_SENSOR_ATTRID_DRI = 13;
+
+  // OPTIONAL
+  // Boolean
+  // Whether a Sensor support synchronized streaming.
+  SNS_STD_SENSOR_ATTRID_STREAM_SYNC = 14;
+
+  // OPTIONAL
+  // Integer
+  // Encoded message size of the data event generated most often by the Sensor
+  SNS_STD_SENSOR_ATTRID_EVENT_SIZE = 15;
+
+  // REQUIRED
+  // Integer: sns_std_sensor_stream_type
+  // Streaming Type
+  SNS_STD_SENSOR_ATTRID_STREAM_TYPE = 16;
+
+  // OPTIONAL
+  // Boolean
+  // Whether this Sensor is dynamic (connected/disconnected at runtime)
+  SNS_STD_SENSOR_ATTRID_DYNAMIC = 17;
+
+  // OPTIONAL
+  // Integer
+  // When multiple Sensors of the same hardware exist, this attribute differentiates.
+  SNS_STD_SENSOR_ATTRID_HW_ID = 18;
+
+  // OPTIONAL
+  // Integer: sns_std_sensor_rigid_body_type
+  // The rigid body on which the Sensor is placed.
+  SNS_STD_SENSOR_ATTRID_RIGID_BODY = 19;
+
+  // OPTIONAL
+  // float[12]
+  // Location and orientation of sensor element in the device frame.
+  SNS_STD_SENSOR_ATTRID_PLACEMENT = 20;
+
+  // OPTIONAL
+  // Boolean
+  // Boolean: True for a physical sensor
+  SNS_STD_SENSOR_ATTRID_PHYSICAL_SENSOR = 21;
+
+  // OPTIONAL
+  // [Integer]
+  // List of supported self-test types from sns_physical_sensor_test_type.
+  SNS_STD_SENSOR_ATTRID_PHYSICAL_SENSOR_TESTS = 22;
+
+  // OPTIONAL
+  // Float
+  // Sensors chosen resolution in it's engineering units.
+  SNS_STD_SENSOR_ATTRID_SELECTED_RESOLUTION = 23;
+
+  // OPTIONAL
+  // float[2]
+  // Sensors chosen {min, max} range in it's engineering units.
+  SNS_STD_SENSOR_ATTRID_SELECTED_RANGE = 24;
+
+  // OPTIONAL
+  // [float]
+  // List of additional sample rates for low latency clients in Hz.
+  // These are additional rates for low latency clients extended from list
+  // of rates published in attribute SNS_STD_SENSOR_ATTRID_RATES.
+  // This is supported for internal clients only. External clients shall not use this API.
+  SNS_STD_SENSOR_ATTRID_ADDITIONAL_LOW_LATENCY_RATES = 25;
+  
+  // OPTIONAL
+  // Boolean
+  // Boolean: True if the sensor supports passive request, False otherwise.
+  // If this attribute is not supported, then the sensor does not support passive requests.
+  // Sensors that do not support passive requests, will service all requests as active requests.
+  SNS_STD_SENSOR_ATTRID_PASSIVE_REQUEST = 26;
+}
+
+// Sensor stream configuration request
+// or configuration change message
+message sns_std_sensor_config
+{
+  // Sample rate in Hz.
+  required float sample_rate = 1;
+}
+
+// Sensor data event
+message sns_std_sensor_event
+{
+  // Output data field for all Sensor.
+  repeated float data = 1;
+
+  // Event sample status.
+  required sns_std_sensor_sample_status status = 2 [default = SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE];
+}
+
+// Stream types
+enum sns_std_sensor_stream_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Used for Sensors that report data periodically.
+  // Example: accel, gyro, mag
+  SNS_STD_SENSOR_STREAM_TYPE_STREAMING = 0;
+
+  // Used for Sensors that report data only on change in value.
+  // Example: proximity, hall
+  SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE = 1;
+
+  // Used for Sensors that have a single data event in reponse to a request.
+  // Example: SUID, motion detect
+  SNS_STD_SENSOR_STREAM_TYPE_SINGLE_OUTPUT = 2;
+}
+
+// Rigid body types
+enum sns_std_sensor_rigid_body_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Used for a Sensor mounted on the same rigid body as the display.
+  SNS_STD_SENSOR_RIGID_BODY_TYPE_DISPLAY = 0;
+
+  // Used for a Sensor mounted on the same rigid body as a keyboard.
+  SNS_STD_SENSOR_RIGID_BODY_TYPE_KEYBOARD = 1;
+
+  // Used for a Sensor that is mounted on an external device.
+  SNS_STD_SENSOR_RIGID_BODY_TYPE_EXTERNAL = 2;
+}
+
+// Sensor stream configuration event
+message sns_std_sensor_config_event
+{
+  // Current sample rate in Hz
+   required float sample_rate = 1;
+}
+
+// Physical sensor stream configuration. This message reflects the current
+// configuration of the physical sensor.
+message sns_std_sensor_physical_config_event
+{
+  // Current sample rate in Hz for streaming sensors or highest rate of value
+  // change for on-change sensors. 0 if sensor is disabled.
+  // Note: if stream will be synchronized via S4S or I3C, this is the sample
+  // rate after synchronization is complete.
+  optional float sample_rate = 1;
+
+  // Current hardware water mark setting. 1 if FIFO not in use.
+  optional uint32 water_mark = 2;
+
+  // Sensor sample value min and max range
+  repeated float range = 3 [(nanopb).max_count = 2];
+
+  // Sensor sample value Resolution
+  optional float resolution = 4;
+
+  // Sensor operation mode
+  // If all requests to the sensor are passive then it shall use
+  // operating_mode = "OFF"
+  optional string operation_mode = 5;
+
+  // Sensor active current in uA
+  optional uint32 active_current = 6;
+
+  // Sensor streaming is synchronized via methods like S4S and/or I3C.
+  // Note: if the stream is not yet synchronized, this field should be
+  // false, and an additional config event sent with stream_is_synchronous
+  // set to true once the clocks have been synchronized.
+  optional bool stream_is_synchronous = 7;
+
+  // Sensor has enabled Data Ready Interrupt
+  optional bool dri_enabled = 8;
+
+  // Current DAE water mark setting. 0 if non-DAE sensor.
+  optional uint32 DAE_watermark = 9;
+
+  // The sync anchor is only valid for polled or synchronized sensors.
+  // It is a timestamp of a future (or past) sns_std_sensor_event.
+  // For synchronous sensors: this may be used by clients to determine the
+  // synchronized timeline before it is synchronized.
+  optional uint64 sync_ts_anchor = 10;
+}
+
+// Attribute requirements:
+// The Physical Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_AVAILABLE attribute value (bool) as true when it's dependencies
+//    are met and the hardware is present and responsive.
+// 2. SNS_STD_SENSOR_ATTRID_NAME attribute value (string) as the name of the sensor model.
+// 3. SNS_STD_SENSOR_ATTRID_VENDOR attribute value (string) as the name of the sensor vendor.
+// 4. SNS_STD_SENSOR_ATTRID_VERSION attribute value (decimal) as the version of the driver.
+// 5. SNS_STD_SENSOR_ATTRID_RATES attribute as a float array of supported sample rates in Hz
+//    for streaming sensors. On-change sensors publish the highest rate of value change.
+// 6. SNS_STD_SENSOR_ATTRID_FIFO_SIZE attribute value (decimal) as the maximum FIFO depth in
+//    number of sensor samples available to it when enabled standalone.
+//    The value can be zero if FIFO is not supported.
+// 7. SNS_STD_SENSOR_ATTRID_ACTIVE_CURRENT attribute as an integer  array representing active
+//    currents in uA corresponding to the sns_attr_op_modes attribute.
+// 8. SNS_STD_SENSOR_ATTRID_SLEEP_CURRENT attribute value (float) as the current in uA when
+//    the sensor is in power down mode.
+// 9. SNS_STD_SENSOR_ATTRID_OP_MODES attribute value as an array of string values
+//     representing different hardware operating modes.
+// 10. SNS_STD_SENSOR_ATTRID_DRI attribute value (bool) as true when it supports
+//     interrupt based streaming else false when polling.
+//     The source of data ready interrupt (DRI) could be completion of measurement
+//     cycle, FIFO water mark (if sns_attr_fifo_size value is greater than 0),
+//     threshold, etc.
+//     If the sensor is capable of streaming in both polling and DRI modes then
+//     it publishes separate Sensors for each mode such that the one with DRI
+//     publishes SNS_STD_SENSOR_ATTRID_DRI value as true and the one with polling
+//     publishes SNS_STD_SENSOR_ATTRID_DRI as false.
+// 11. SNS_STD_SENSOR_ATTRID_STREAM_SYNC attribute value (bool) as true when it
+//     it supports a synchronous streaming mechanism like S4S and/or I3C.
+// 12. SNS_STD_SENSOR_ATTRID_EVENT_SIZE attribute value (decimal) as number of bytes in the
+//     output data event for the Sensor.
+// 13. SNS_STD_SENSOR_ATTRID_STREAM_TYPE attribute value (sns_std_sensor_stream_type) as the
+//     supported stream type.
+// 14. SNS_STD_SENSOR_ATTRID_DYNAMIC attribute value (bool) to indicate whether the sensor
+//     can be added at runtime.
+// 15. SNS_STD_SENSOR_ATTRID_HW_ID attribute value (string) to uniquely identify multiple
+//     sensor hardware of the same model on a platform.
+// 16. SNS_STD_SENSOR_ATTRID_RIGID_BODY attribute value (sns_std_sensor_rigid_body_type) as the rigid
+//     body on which the sensor is mounted.
+// 17. SNS_STD_SENSOR_ATTRID_PLACEMENT attribute value as the location and orientation of
+//     the sensor hardware.
+// 18. SNS_STD_SENSOR_ATTRID_PHYSICAL_SENSOR attribute value (bool) to indicate if the sensor is
+//     a physical sensor
+// 19. SNS_STD_SENSOR_ATTRID_PHYSICAL_SENSOR_TESTS attribute value as array of supported
+//     sns_physical_sensor_test_type test types.
+// 20. SNS_STD_SENSOR_ATTRID_SELECTED_RESOLUTION attribute value chosen from the
+//     SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute array.
+// 21. SNS_STD_SENSOR_ATTRID_SELECTED_RANGE attribute value chosen from the
+//     SNS_STD_SENSOR_ATTRID_RANGES array.
+// 22. SNS_STD_SENSOR_ATTRID_ADDITIONAL_LOW_LATENCY_RATES attribute as a float array of supported
+//     sample rates in Hz additional to rates in SNS_STD_SENSOR_ATTRID_RATES, this is only for low
+//     latency clients like direct report mode.
+// See sensor specific .proto files for sensor specific attribute information.
+
+// Recommendation for device drivers to select configuration:
+// 1. Choose fastest sample_rate among all client requests.
+// 2. Choose fastest batch rate (using batch_period) among all client requests. For streaming clients,
+//    treat batch rate equal to requested sample rate for that request.
+// 3. If HW FIFO is supported then:
+//     a. If all requests are max_batch then the driver configures highest FIFO watermark.
+//        If DAE is supported, the DAE watermark should be INT_MAX.
+//     b. Else FIFO watermark is determined based on sample_rate from #1 and batch rate from #2.
diff --git a/prebuilt/system/etc/sensors/proto/sns_std_type.proto b/prebuilt/system/etc/sensors/proto/sns_std_type.proto
new file mode 100644
index 0000000..9d9f744
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_std_type.proto
@@ -0,0 +1,79 @@
+// @file sns_std_type.proto
+//
+// Defines standard data types used across multiple Sensor API definitions
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+
+// Represents an unique Sensor
+message sns_std_suid {
+  required fixed64 suid_low = 1;
+  required fixed64 suid_high = 2;
+}
+
+// Represents an attribute value
+// Attribute values may be a single value, array of simple values, or
+// an array of complex tuples
+message sns_std_attr_value {
+  // "data" submessage required to support recursion
+  message data {
+    option (nanopb_msgopt).no_unions = true;
+    oneof value {
+      sns_std_attr_value subtype = 1;
+      string str = 2;
+      float flt = 3;
+      sfixed64 sint = 4;
+      bool boolean = 5;
+    }
+  }
+  repeated data values = 1;
+}
+
+// An individual attribute from a Sensor
+message sns_std_attr {
+  // A standard list of attributes is available within sns_std_sensor_attr_id
+  // Additional attributes may be defined by sensors, using the format:
+  // <SENSOR_PROTO_NAME>_ATTRID_<ATTR_NAME> (e.g. SNS_ACCEL_ATTRID_ODR)
+  // Additional IDs must fall within the range of 1024-2047
+  required int32 attr_id = 1;
+  // Attribute value
+  required sns_std_attr_value value = 2;
+}
+
+// Error codes
+enum sns_std_error {
+  option (nanopb_enumopt).long_names = false;
+
+  /* No error occurred; success. */
+  SNS_STD_ERROR_NO_ERROR = 0;
+  /* Unfixable or internal error occurred. */
+  SNS_STD_ERROR_FAILED = 1;
+  /* This API is not supported or is not implemented. */
+  SNS_STD_ERROR_NOT_SUPPORTED = 2;
+  /* Message contains invalid data type,
+   * e.g., unknown message ID, unknown registry group, or unexpected
+   * Sensor UID. */
+  SNS_STD_ERROR_INVALID_TYPE = 3;
+  /* Catastrophic error; expect no further data */
+  SNS_STD_ERROR_INVALID_STATE = 4;
+  /* One or more argument values were outside of the valid range */
+  SNS_STD_ERROR_INVALID_VALUE = 5;
+  /* This operation is not available at this time */
+  SNS_STD_ERROR_NOT_AVAILABLE = 6;
+  /* This action was rejected due to the current policy settings */
+  SNS_STD_ERROR_POLICY = 7;
+}
+
+//The enum contains all the processor types supported.
+enum sns_std_client_processor {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_STD_CLIENT_PROCESSOR_SSC = 0;
+  SNS_STD_CLIENT_PROCESSOR_APSS = 1;
+  SNS_STD_CLIENT_PROCESSOR_ADSP = 2;
+  SNS_STD_CLIENT_PROCESSOR_MDSP = 3;
+  SNS_STD_CLIENT_PROCESSOR_CDSP = 4;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_suid.proto b/prebuilt/system/etc/sensors/proto/sns_suid.proto
new file mode 100644
index 0000000..508fd82
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_suid.proto
@@ -0,0 +1,49 @@
+// @file sns_suid.proto
+//
+// Defines standard message types to request and receive SUIDs.
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_type.proto";
+
+enum sns_suid_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_SUID_MSGID_SNS_SUID_REQ = 512;
+  SNS_SUID_MSGID_SNS_SUID_EVENT = 768;
+}
+
+// Well-known SUID for use by all clients.
+// All other Sensor UIDs must be discovered dynamically
+message sns_suid_sensor {
+  required fixed64 suid_low = 1 [default = 0xabababababababab];
+  required fixed64 suid_high = 2 [default = 0xabababababababab];
+}
+
+// Request sent by internal or external client for the list of SUIDs that
+// advertise the specified Data Type
+// Note: Additional requests arriving on the same connection, will not result
+// in a replaced request, but instead the new request will be appended to any
+// active registrations.
+message sns_suid_req {
+  required string data_type = 1;
+  // Register for updates to the list of SUIDs advertising data_type
+  optional bool register_updates = 2;
+
+  // Each datatype has one sensor configured to be "default". If following
+  // field is set to true, only the SUID of the default sensor will be
+  // sent via the suid event
+  optional bool default_only = 3 [default = true];
+}
+
+// Event specifying the list of SUIDs associated with the given Data Type
+// Receipt of this event indicates that a change to this list has occurred
+// since the previous event.
+message sns_suid_event {
+  // Direct copy of sns_suid_req:data_type
+  required string data_type = 1;
+  repeated sns_std_suid suid = 2;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_thermopile.proto b/prebuilt/system/etc/sensors/proto/sns_thermopile.proto
new file mode 100644
index 0000000..2e24181
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_thermopile.proto
@@ -0,0 +1,62 @@
+// @file sns_thermopile.proto
+//
+// Defines the API for Thermopile Sensors.
+// All Thermopile Sensor drivers are required to comply with this API.
+// Any new functionality for Thermopile Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The Thermopile Temperature Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "thermopile".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute value in degrees Celsius/LSB.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in degrees Celsius unit.
+// 4. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The Thermopile Sensor handles the sns_std_sensor_config
+//    message request for all stream enable/update requests.
+
+// Handling stream events:
+// 1. The Thermopile Sensor publishes data stream events using the
+//    sns_std_sensor_event message.
+// 2. Each stream event contains one output data field where data is
+//    factory calibrated and ordered as:
+//    data[0] = Object temperature in degrees Celsius
+// 3. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 4. The Thermopile Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+// 5. The Thermopile Sensor publishes a factory calibration event using the
+//    sns_cal_event message. It uses bias and scale_factor fields in this event.
+//    It publishes this event each time there is change in it's factory calibration
+//    data or when a client sends a new streaming request.
+
+// Handling self-test requests:
+// 1. The Thermopile Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The Thermopile Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API.
+// 3. The Thermopile Sensor could implement other test types.
+
+// Handling test events:
+// 1. The Thermopile Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
diff --git a/prebuilt/system/etc/sensors/proto/sns_threshold.proto b/prebuilt/system/etc/sensors/proto/sns_threshold.proto
new file mode 100644
index 0000000..bb34195
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_threshold.proto
@@ -0,0 +1,91 @@
+// @file sns_threshold.proto
+//
+// Defines standard message types for the Threshold Algorithm
+//
+// Copyright (c) 2018 - 2019 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std.proto";
+import "sns_std_sensor.proto";
+import "sns_resampler.proto";
+
+// Threshold Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "threshold"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_STREAMING
+
+// Sensor output event:
+// Threshold uses sns_std_sensor_event for it's output event.
+// An event is generated by the threshold algorithm only if the threshold is met
+// on any of the axis for the sensor.
+// Thresholding can be done as value based delta between current value and
+// the last generated output. Or thresholding can be done as the delta between
+// current value and the last output, as a percentage of the last output.
+// Thresholding can also be done based on the current value going beyond a particular
+// absolute threshold value.
+// When thresholding criteria is met , an event is generated by the algorithm.
+
+enum sns_threshold_msgid
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_THRESHOLD_MSGID_SNS_THRESHOLD_CONFIG = 512;
+}
+
+//Thresholding types
+enum sns_threshold_type
+{
+  option (nanopb_enumopt).long_names = false;
+
+  // Provide thresholding as a delta between current value
+  // and last reported value, exceeding above the configured threshold.
+  SNS_THRESHOLD_TYPE_RELATIVE_VALUE = 0;
+
+  // Provide thresholding as a delta between current value
+  // and last reported value, compared as a percentage of the last reported value,
+  // where the percentage is the configured threshold.
+  SNS_THRESHOLD_TYPE_RELATIVE_PERCENT = 1;
+
+  // Provides thresholding of the current value against a fixed configured
+  // threshold value.
+  SNS_THRESHOLD_TYPE_ABSOLUTE = 2;
+
+  // Provides thresholding of angle between current and last reported quaternion
+  // for quaternion sensors, in radians
+  SNS_THRESHOLD_TYPE_ANGLE = 3;
+}
+
+// Configuration Message
+// Used to either request for a new configuration of the threshold Sensor or
+// alter an already existing configuration or query the current configuration.
+message sns_threshold_config
+{
+  // UID of the sensor from which data is being requested from.
+  required sns_std_suid sensor_uid = 1;
+
+  // The threshold value per axis.
+  // The number of threshold values need to be less than or equal to the number of
+  // sensor data axes.
+  // For SNS_THRESHOLD_TYPE_ANGLE, a single threshold_val value representing the
+  // angle between current and last reported quaternions
+  repeated float threshold_val = 2;
+
+  // Tells us how to use the thresholding value provided.
+  required  sns_threshold_type  threshold_type = 3;
+
+  // The message id to be used to configure the underlying sensor.
+  // This is used together with the below payload field.
+  required uint32 payload_cfg_msg_id = 4;
+
+  // Dynamic length payload, containing the actual data/configuration request
+  // This payload will need to be decoded separately, using the Sensor-specific
+  // header file.
+  required bytes payload = 5;
+}
+
+// Config is used to inform the client of the configuration that was set,
+// after a configuration is done .
+// The config message is sent back to the client
+// in the threshold config message.
+// All data events are generated as sns_std_sensor_event.
diff --git a/prebuilt/system/etc/sensors/proto/sns_tilt.proto b/prebuilt/system/etc/sensors/proto/sns_tilt.proto
new file mode 100644
index 0000000..8458776
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_tilt.proto
@@ -0,0 +1,49 @@
+// @file sns_tilt.proto
+//
+// Defines message types for the Tilt Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// The Tilt Sensor looks for a change in angle of a gravity vector from an
+// anchor vector.
+//
+// The initial anchor vector is based on an average of one second of
+// accel data after initial activation.
+//
+// The gravity vector is calculated based on an average of two seconds of
+// accel data.
+//
+// The anchor vector is reset to the current gravity vector each time the
+// Tilt event is generated.
+// There is only one anchor vector shared amongst all clients.
+//
+// The Tilt event is generated when the current gravity vector is 35 degrees
+// or more from the anchor vector.
+
+// Tilt Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "tilt"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for Tilt Sensor
+enum sns_tilt_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_TILT_MSGID_SNS_TILT_EVENT = 774;
+}
+
+// Stream events:
+//
+// A NULL message with message ID SNS_TILT_MSGID_SNS_TILT_EVENT is used to
+// publish tilt event
+//
+// Tilt does not publish configuration events.
+
diff --git a/prebuilt/system/etc/sensors/proto/sns_tilt_to_wake.proto b/prebuilt/system/etc/sensors/proto/sns_tilt_to_wake.proto
new file mode 100644
index 0000000..ceabc92
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_tilt_to_wake.proto
@@ -0,0 +1,36 @@
+// @file sns_tilt_to_wake.proto
+//
+// Defines message types for the tilt_to_wake Sensor.
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// The tilt_to_wake detects substantial phone rotation (gesture) within
+// limited period ending in a specific range of the pitch and roll angles.
+// It uses proximity sensor to block the tilt event reporting in pocket or purse
+
+// tilt_to_wake Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "tilt_to_wake"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for tilt_to_wake Sensor
+enum sns_tilt_to_wake_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_TILT_TO_WAKE_MSGID_SNS_TILT_TO_WAKE_EVENT = 775;
+}
+
+// Stream events:
+//
+// A NULL message with message ID SNS_TILT_TO_WAKE_MSGID_SNS_TILT_TO_WAKE_EVENT is used to
+// publish tilt_to_wake event
+//
+// tilt_to_wake does not publish configuration events.
diff --git a/prebuilt/system/etc/sensors/proto/sns_timer.proto b/prebuilt/system/etc/sensors/proto/sns_timer.proto
new file mode 100644
index 0000000..82bcc01
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_timer.proto
@@ -0,0 +1,149 @@
+// @file sns_timer.proto
+//
+// Defines standard message types for the Timer Sensor
+//
+// Copyright (c) 2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+syntax = "proto2";
+import "nanopb.proto";
+
+enum sns_timer_sensor_timeout
+{
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_TIMER_SENSOR_TIMEOUT_MIN_TIMEOUT_NANOSEC = 100000;
+}
+
+enum sns_timer_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  // Timer config message.
+  //
+  //Corresponds to the message sns_timer_sensor_config.
+  // This message is used to start, reconfigure or
+  // stop the timer sensor
+  SNS_TIMER_MSGID_SNS_TIMER_SENSOR_CONFIG = 512;
+
+  // Timer event message.
+  //
+  // Corresponds to the message sns_timer_sensor_event.
+  // This event is generated when a timer's timeout
+  // occurs.
+  SNS_TIMER_MSGID_SNS_TIMER_SENSOR_EVENT  = 1025;
+
+  // Timer registration message
+  //
+  // This message is used to acknowledge that a timer was successfully
+  // registered. This event contains the sns_timer_reg_event with the
+  // options selected by the timer sensor. The event will be re-sent each time
+  // the timer sensor automatically adjusts the period of a periodic timer.
+  SNS_TIMER_MSGID_SNS_TIMER_SENSOR_REG_EVENT = 1026;
+}
+
+// Priority of timer events
+enum sns_timer_priority {
+  option (nanopb_enumopt).long_names = false;
+  // Priority LOWEST is used for low priority timers
+  SNS_TIMER_PRIORITY_LOWEST  = 0;
+  // Priority OTHER is used for general timer events, and should be used
+  // by default
+  SNS_TIMER_PRIORITY_OTHER   = 10;
+  // Priority POLLING is used for polling physical sensors
+  SNS_TIMER_PRIORITY_POLLING = 50;
+  // Priority S4S is used for S4S schedules
+  SNS_TIMER_PRIORITY_S4S     = 100;
+}
+
+// Timer configuration message.
+// The minimum time resolution supported by the timer is
+// min_timeout_nanosec
+
+message sns_timer_sensor_config
+{
+
+  // The time of starting the timer in ticks. This is typically current time.
+  required uint64 start_time = 1;
+
+  // The timeout period starting from start_time, in ticks.
+  required uint64 timeout_period = 2;
+
+  // If this timer is periodic. If true, the timer will be rearmed to
+  // timeout_period when the timer fires. If false, the timer will be disarmed
+  // after firing once. The memory associated with this timer will not be
+  // released until this connection is terminated.
+  required bool is_periodic = 3;
+
+  // The start_config allows the timer sensor to modify the start_time. This may
+  // allow the timer sensor to synchronize with other nearby timers to save power
+  // if the exact value of start_time is flexible.
+  // If this message is not present, default values are 0.
+  message start_config_message {
+    // The start_time may be adjusted to start early by this many ticks.
+    required uint32 early_start_delta = 1;
+    // The start_time may be adjusted to start late by this many ticks.
+    required uint32 late_start_delta = 2;
+  }
+  optional start_config_message start_config = 4;
+
+  // The timeout_config allows the timer sensor to modify the timeout_period.
+  // This may allow the timer sensor to synchronize with other timers to save
+  // power if the exact perodicity is flexible.
+  // If this message is not present, default values are 0.
+  message timeout_config_message {
+    // The initial timeout_period may be adjusted smaller by this many ticks.
+    required uint32 low_timeout_delta = 1;
+    // The initial timeout_period may be adjusted larger by this many ticks.
+    required uint32 high_timeout_delta = 2;
+
+    // jitter_ticks only applies if "is_periodic" is true. After the first
+    // TIMER_SENSOR_EVENT, the timeout_period will only be adjusted by this many
+    // ticks in each period. The accumulated adjustments will stay within the
+    // low/high bounds defined in this message.
+    optional uint32 jitter_ticks = 3;
+  }
+  optional timeout_config_message timeout_config = 5;
+
+  // Set this to true to cause the timer sensor to send a TIMER_SENSOR_REG_EVENT
+  // and include this timer as part of the timers to be synchronized, but the
+  // timer will not actually be started, and no TIMER_SENSOR_EVENTs will
+  // be generated.
+  // This is useful to know how to synchronize to other timers on the system
+  // without actually causing timer events to occur.
+  optional bool is_dry_run = 6 [default = false];
+
+  // If multiple timers expire at the same time, timer events with higher
+  // priority will be sent first.
+  // default: other
+  optional sns_timer_priority priority = 7 [default = SNS_TIMER_PRIORITY_OTHER];
+}
+
+// Timer Sensor event
+// This event is generated each time the timer fires. The time at which the timer
+// fires can differ from the requested timeout by up to min_timeout_nanosec.
+// The client is responsible for checking the requested_timeout_time and the
+// timeout_time fields and determine if additional delays must be added.
+message sns_timer_sensor_event
+{
+  // The timeout period generated from the timer_sensor_config message in ticks.
+  required uint64 requested_timeout_time = 1;
+
+  // The time at which the timer fired, in ticks.
+  required uint64 timeout_time = 2;
+}
+
+// Timer registration message
+//
+// This message is used to acknowledge that a timer was successfully
+// registered. This event contains options selected by the timer sensor based
+// on the config event.
+// The event will be re-sent each time the timer sensor automatically adjusts
+// the period of a periodic timer.
+message sns_timer_sensor_reg_event
+{
+  required uint64             start_time     = 1;
+  required uint64             timeout_period = 2;
+  required bool               is_periodic    = 3;
+  required bool               is_dry_run     = 4;
+  required sns_timer_priority priority       = 5;
+}
diff --git a/prebuilt/system/etc/sensors/proto/sns_ultra_violet.proto b/prebuilt/system/etc/sensors/proto/sns_ultra_violet.proto
new file mode 100644
index 0000000..7bb7fd2
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_ultra_violet.proto
@@ -0,0 +1,72 @@
+// @file sns_ultra_violet.proto
+//
+// Defines the API for Ultra Violet (UV) Sensors.
+// All UV Sensor drivers are required to comply with this API.
+// Any new functionality for UV Sensor can be defined in a
+// device specific API file.
+//
+// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+import "sns_physical_sensor_test.proto";
+import "sns_cal.proto";
+
+// Attribute requirements:
+// The UV Sensor publishes:
+// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "ultra_violet".
+// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute value in degrees mW/cm2/LSB.
+// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in degrees mW/cm2 unit.
+// 4. See sns_std_sensor.proto for other attributes.
+
+// Handling stream requests:
+// 1. The UV Sensor handles the sns_std_sensor_config
+//    message request for all stream enable/update requests.
+
+// Handling stream events:
+// 1. The UV Sensor publishes UV data in ambient light using the
+//    sns_std_sensor_event message.
+// 2. Each stream event contains following factory calibrated data fields:
+//    data[0] = Bit mask to determine which outputs are supported:
+//              bit[0]: 1 if UV-A is supported else 0
+//              bit[1]: 1 if UV-B is supported else 0
+//              bit[2]: 1 if Total UV is supported else 0
+//              bit[3]: 1 if UV index is supported else 0
+//              all other bits are 0
+//    data[1] = UV-A radiation in mW/cm2
+//    data[2] = UV-B radiation in mW/cm2
+//    data[3] = Total UV radiation in mW/cm2
+//    data[4] = Unitless UV index number
+// 3. Each stream event publishes an accuracy field:
+//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when hardware is
+//    yet to stabilize after the sensor is configured.
+//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are valid.
+// 4. The UV Sensor publishes a configuration event using the
+//    sns_std_sensor_physical_config_event message.
+//    It publishes this event each time there is change in hardware config of the sensor
+//    and contains current physical sensor config of the sensor.
+// 5. The UV Sensor publishes a factory calibration event using the
+//    sns_cal_event message. It uses bias and scale_factor fields in this event.
+//    It publishes this event each time there is change in it's factory calibration
+//    data or when a client sends a new streaming request.
+
+// Handling self-test requests:
+// 1. The UV Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
+//    type using the physical sensor test API.
+// 2. The UV Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY test
+//    type to determine factory calibration parameters using the physical
+//    sensor test API. The factory test for UV Sensor calibrates
+//    the sensor such that it's output is comparable to a standard
+//    UV Meter output in any lighting condition.
+// 3. The UV Sensor could implement other test types.
+
+// Handling test events:
+// 1. The UV Sensor uses sns_physical_sensor_test_event message to publish
+//    a test completion event.
+// 2. The test_passed field in sns_physical_sensor_test_event is used to output the
+//    pass/fail result of self-test execution.
+// 3. The test_data field in sns_physical_sensor_test_event could be used to output any
+//    driver-specific error data.
diff --git a/prebuilt/system/etc/sensors/proto/sns_wrist_tilt_gesture.proto b/prebuilt/system/etc/sensors/proto/sns_wrist_tilt_gesture.proto
new file mode 100644
index 0000000..37482d9
--- /dev/null
+++ b/prebuilt/system/etc/sensors/proto/sns_wrist_tilt_gesture.proto
@@ -0,0 +1,49 @@
+// @file sns_wrist_tilt_gesture.proto
+//
+// Defines message types for the wrist_tilt_gesture Sensor.
+//
+// Copyright (c) 2018 Qualcomm Technologies, Inc.
+// All Rights Reserved.
+// Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+syntax = "proto2";
+import "nanopb.proto";
+import "sns_std_sensor.proto";
+
+// The Tilt Sensor looks for a change in angle of a gravity vector from an
+// anchor vector.
+//
+// The initial anchor vector is based on an average of one second of
+// accel data after initial activation.
+//
+// The gravity vector is calculated based on an average of two seconds of
+// accel data.
+//
+// The anchor vector is reset to the current gravity vector each time the
+// Tilt event is generated.
+// There is only one anchor vector shared amongst all clients.
+//
+// The Tilt event is generated when the current gravity vector is 35 degrees
+// or more from the anchor vector.
+
+// Tilt Sensor Attribute Requirements:
+// SNS_STD_SENSOR_ATTRID_TYPE: "wrist_tilt_gesture"
+// SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE
+
+// Stream Requests:
+// - SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG is used to enable the sensor
+
+// Message IDs for Wrist Tilt Gesture Sensor
+enum sns_wrist_tilt_gesture_msgid {
+  option (nanopb_enumopt).long_names = false;
+
+  SNS_WRIST_TILT_GESTURE_MSGID_SNS_TILT_EVENT = 774;
+}
+
+// Stream events:
+//
+// A NULL message with message ID SNS_TILT_MSGID_SNS_TILT_EVENT is used to
+// publish tilt event
+//
+// Tilt does not publish configuration events.
+
diff --git a/prebuilt/system/etc/sysconfig/qti_whitelist.xml b/prebuilt/system/etc/sysconfig/qti_whitelist.xml
index 3e3e73c..4554c81 100644
--- a/prebuilt/system/etc/sysconfig/qti_whitelist.xml
+++ b/prebuilt/system/etc/sysconfig/qti_whitelist.xml
@@ -44,9 +44,9 @@
     <allow-in-power-save package="com.qualcomm.qti.gsma.services.nfc" />
     <allow-in-power-save package="com.quicinc.voice.activation" />
     <allow-in-power-save package="com.android.mms" />
+    <allow-in-power-save package="com.android.exchange" />
     <allow-in-power-save package="com.qualcomm.qti.callenhancement" />
     <allow-in-power-save package="com.qualcomm.qti.smartassistant" />
-    <allow-in-power-save package="com.skyhook.blp" />
     <!-- These telephony applications need access to non-[System]SDK APIs -->
     <hidden-api-whitelisted-app package="com.qualcomm.uimremoteserver" />
     <hidden-api-whitelisted-app package="com.qualcomm.uimremoteclient" />
@@ -106,7 +106,6 @@
     <hidden-api-whitelisted-app package="com.qti.vtloopback " />
     <hidden-api-whitelisted-app package="com.android.bluetooth" />
     <hidden-api-whitelisted-app package="org.codeaurora.bluetooth" />
-    <hidden-api-whitelisted-app package="org.codeaurora.bluetooth.hidtestapp" />
     <hidden-api-whitelisted-app package="com.qualcomm.qti.qmmi" />
     <hidden-api-whitelisted-app package="com.qualcomm.qti.perfdump" />
     <hidden-api-whitelisted-app package="com.qualcomm.wfd.client" />