# pixelstats vendor
type pixelstats_vendor, domain;

type pixelstats_vendor_exec, exec_type, vendor_file_type, file_type;
init_daemon_domain(pixelstats_vendor)

unix_socket_connect(pixelstats_vendor, chre, chre)

get_prop(pixelstats_vendor, hwservicemanager_prop)
hwbinder_use(pixelstats_vendor)
allow pixelstats_vendor hal_pixelstats_hwservice:hwservice_manager find;
binder_call(pixelstats_vendor, pixelstats_system)

allow pixelstats_vendor fwk_stats_hwservice:hwservice_manager find;
binder_call(pixelstats_vendor, stats_service_server)

allow pixelstats_vendor sysfs_scsi_devices_0000:file rw_file_perms;
r_dir_file(pixelstats_vendor, sysfs_batteryinfo)
allow pixelstats_vendor sysfs_batteryinfo:file rw_file_perms;

# UeventListener
allow pixelstats_vendor self:netlink_kobject_uevent_socket create_socket_perms_no_ioctl;
r_dir_file(pixelstats_vendor, sysfs_pixelstats)
