#
# Copyright (C) 2016 The Android Open-Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

on init
    chmod 666 /dev/diag

on post-fs-data
    # Modem logging collection
    mkdir /data/vendor/radio 0777 radio radio
    mkdir /data/vendor/radio/diag_logs 0777 system system
    chmod 777 /data/vendor/radio/diag_logs/cfg
    chmod 777 /data/vendor/radio/diag_logs/custom_cfg
    # WLAN logging collection
    mkdir /data/vendor/wifi 0777 system system
    mkdir /data/vendor/wifi/cnss_diag 0777 system system

service vendor.diag_mdlog_start /vendor/bin/diag_mdlog
    class late_start
    user shell
    group system diag media_rw
    disabled
    oneshot

service vendor.diag_mdlog_stop /vendor/bin/diag_mdlog -k
    class late_start
    user shell
    group system diag media_rw
    disabled
    oneshot

on boot && property:persist.sys.modem.diag.mdlog=*
    setprop sys.modem.diag.mdlog ${persist.sys.modem.diag.mdlog}

on property:sys.modem.diag.mdlog=true
    start vendor.diag_mdlog_start

on property:sys.modem.diag.mdlog=false
    start vendor.diag_mdlog_stop

on property:persist.sys.cnss.diag_qxdm=true
    start vendor.cnss_diag

on property:persist.sys.cnss.diag_qxdm=false
    stop vendor.cnss_diag

on property:persist.sys.cnss.diag_txt=true
    start vendor.cnss_diag_txt

on property:persist.sys.cnss.diag_txt=false
    stop vendor.cnss_diag_txt

service vendor.cnss_diag /vendor/bin/cnss_diag -q -u -w
    class late_start
    user system
    group system
    disabled
    oneshot

service vendor.cnss_diag_txt /vendor/bin/cnss_diag -s -f -m /data/vendor/wifi/cnss_diag/cnss_diag.conf
    class late_start
    user system
    group system
    disabled
    oneshot

on property:debug.ramdump.force_crash=true
    write /proc/sysrq-trigger "c"

on property:sys.logger.bluetooth=true
   setprop persist.service.bdroid.snooplog true
   setprop persist.service.bdroid.fwsnoop true

on property:sys.logger.bluetooth=false
   setprop persist.service.bdroid.snooplog false
   setprop persist.service.bdroid.fwsnoop false

on property:persist.bluetooth.btsnoopenable=true
   setprop persist.service.bdroid.soclog true

on property:persist.bluetooth.btsnoopenable=false
   setprop persist.service.bdroid.soclog false
