#
# Copyright (C) 2019 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
    mkdir /data/vendor/radio 0777 radio radio
    mkdir /data/vendor/radio/diag_logs 0777 system system
    rm /data/vendor/radio/diag_logs/logs/diag_poweron_log.qmdl

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

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

on property:persist.vendor.sys.modem.diag.mdlog=*
    rm /data/vendor/radio/diag_logs/diag_mdlog_pid
    setprop vendor.sys.modem.diag.mdlog ${persist.vendor.sys.modem.diag.mdlog}

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

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

on property:persist.vendor.verbose_logging_enabled=*
    setprop persist.vendor.sys.modem.diag.mdlog ${persist.vendor.verbose_logging_enabled}
