#
# Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
#
# 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.
#

PRODUCT_HARDWARE := beagle_x15board

# Enable updating of APEXes
$(call inherit-product, $(SRC_TARGET_DIR)/product/updatable_apex.mk)

PRODUCT_SOONG_NAMESPACES += \
	device/ti/beagle_x15 \
	hardware/ti/am57x

# Adjust the dalvik heap to be appropriate for a tablet.
$(call inherit-product, frameworks/native/build/tablet-7in-xhdpi-2048-dalvik-heap.mk)

# Set custom settings
DEVICE_PACKAGE_OVERLAYS := device/ti/beagle_x15/overlay
PREBUILT_DIR := device/ti/beagle_x15-kernel

# Helper variables for working with kernel files
ifneq ($(KERNELDIR),)
  KERNEL_MAJ := $(shell grep '^VERSION' $(KERNELDIR)/Makefile | cut -d " " -f 3)
  KERNEL_MIN := $(shell grep '^PATCHLEVEL' $(KERNELDIR)/Makefile | cut -d " " -f 3)
  TARGET_KERNEL_USE := $(KERNEL_MAJ).$(KERNEL_MIN)

  LOCAL_KERNEL_HOME := $(KERNELDIR)
  LOCAL_KERNEL := $(KERNELDIR)/arch/arm/boot/zImage

  # Check if kernel/omap or linux-mainline is used
  ifneq ($(wildcard $(KERNELDIR)/arch/arm/boot/dts/ti/.*),)
    DTB_DIR := $(KERNELDIR)/arch/arm/boot/dts/ti
  else
    DTB_DIR := $(KERNELDIR)/arch/arm/boot/dts
  endif
  DTBO_DIR := $(KERNELDIR)/arch/arm/boot/dts/ti
else
  TARGET_KERNEL_USE ?= 4.14
  KERNEL_MAJ := $(word 1, $(subst ., ,$(TARGET_KERNEL_USE)))
  KERNEL_MIN := $(word 2, $(subst ., ,$(TARGET_KERNEL_USE)))

  LOCAL_KERNEL_HOME := $(PREBUILT_DIR)/$(TARGET_KERNEL_USE)
  LOCAL_KERNEL := $(LOCAL_KERNEL_HOME)/zImage
  DTB_DIR := $(LOCAL_KERNEL_HOME)
  DTBO_DIR := $(DTB_DIR)
endif

TARGET_PREBUILT_KERNEL := $(LOCAL_KERNEL)
PRODUCT_COPY_FILES += $(LOCAL_KERNEL):kernel

# Graphics
PRODUCT_PACKAGES += \
	android.hardware.graphics.allocator@2.0-impl \
	android.hardware.graphics.allocator@2.0-service \
	android.hardware.graphics.mapper@2.0-impl \
	android.hardware.graphics.mapper@2.0-service \
	android.hardware.graphics.composer@2.1-impl \
	android.hardware.graphics.composer@2.1-service \
	android.hardware.boot@1.0-impl:64 \
	android.hardware.boot@1.0-service \
	android.hardware.fastboot@1.0 \
	android.hardware.fastboot@1.0-impl-mock \
	libdrm \
	libdrm_omap \
	gralloc.am57x \
	libEGL_POWERVR_SGX544_116 \
	libGLESv1_CM_POWERVR_SGX544_116 \
	libGLESv2_POWERVR_SGX544_116 \
	libPVRScopeServices \
	memtrack.am57x \
	pvrsrvctl \

ifeq ($(USE_TI_HWC), y)
PRODUCT_PACKAGES += hwcomposer.am57x
else
PRODUCT_PACKAGES += hwcomposer.drm_imagination
PRODUCT_PROPERTY_OVERRIDES += ro.hardware.hwcomposer=drm_imagination
endif

#Health
PRODUCT_PACKAGES += \
	android.hardware.health@2.1-impl \
	android.hardware.health@2.1-service \

#Security
PRODUCT_PACKAGES += \
	android.hardware.keymaster@3.0-impl \
	android.hardware.keymaster@3.0-service \
	android.hardware.drm@1.0-impl \
	android.hardware.drm@1.0-service \

# Audio
PRODUCT_PACKAGES += \
	android.hardware.audio@2.0-impl \
	android.hardware.audio@2.0-service \
	android.hardware.audio.effect@2.0-impl \
	android.hardware.audio.effect@2.0-service \

# Audio policy configuration
USE_XML_AUDIO_POLICY_CONF := 1
PRODUCT_COPY_FILES += \
	device/ti/beagle_x15/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml \
	frameworks/av/services/audiopolicy/config/a2dp_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_audio_policy_configuration.xml \
	frameworks/av/services/audiopolicy/config/a2dp_in_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_in_audio_policy_configuration.xml \
	frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
	frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml \
	frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \
	frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \

# Memtrack
PRODUCT_PACKAGES += \
	android.hardware.memtrack@1.0-impl \
	android.hardware.memtrack@1.0-service \

PRODUCT_PROPERTY_OVERRIDES += \
	ro.opengles.version=131072 \
	ro.sf.lcd_density=160 \

# All VNDK libraries (HAL interfaces, VNDK, VNDK-SP, LL-NDK)
PRODUCT_PACKAGES += vndk_package

# USB
PRODUCT_PACKAGES += \
	android.hardware.usb@1.0-service \

PRODUCT_COPY_FILES += \
	frameworks/native/data/etc/android.hardware.usb.host.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.host.xml \
	frameworks/native/data/etc/android.hardware.usb.accessory.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.accessory.xml \

PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \
	persist.sys.usb.config=mtp \

ifeq ($(KERNEL_MAJ),4)
  TARGET_FSTAB := fstab.beagle_x15board_v4
else
  TARGET_FSTAB := fstab.beagle_x15board_v5
endif

PRODUCT_COPY_FILES += \
	$(LOCAL_PATH)/init.recovery.hardware.rc:recovery/root/init.recovery.$(PRODUCT_HARDWARE).rc \
	device/ti/beagle_x15/tablet_core_hardware_beagle_x15.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/tablet_core_hardware_beagle_x15.xml \
	device/ti/beagle_x15/init.beagle_x15board.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.beagle_x15board.rc \
	device/ti/beagle_x15/init.beagle_x15board.usb.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.beagle_x15board.usb.rc \
	device/ti/beagle_x15/ueventd.beagle_x15board.rc:$(TARGET_COPY_OUT_VENDOR)/ueventd.rc \
	device/ti/beagle_x15/$(TARGET_FSTAB):$(TARGET_COPY_OUT_RAMDISK)/fstab.beagle_x15board \
	device/ti/beagle_x15/$(TARGET_FSTAB):$(TARGET_COPY_OUT_VENDOR)/etc/fstab.beagle_x15board \
	frameworks/native/data/etc/android.hardware.ethernet.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.ethernet.xml \

#FIXME: this feature should be turned off as soon as google start checking for WIFI support before wifi calls
PRODUCT_COPY_FILES += \
	frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml \

# Static modprobe for recovery image
PRODUCT_PACKAGES += \
	toybox_static \

PRODUCT_CHARACTERISTICS := tablet,nosdcard

PRODUCT_PACKAGES += \
	toybox_vendor \
	Launcher3 \
	WallpaperPicker \
	sh_vendor \
	vintf \
	netutils-wrapper-1.0 \
	messaging \
	healthd \

# Boot control
PRODUCT_PACKAGES += \
	bootctrl.am57x \

PRODUCT_PACKAGES_DEBUG += \
	bootctl \
	fastbootd \
# A/B
PRODUCT_PACKAGES += \
	update_engine \
	update_verifier

PRODUCT_PACKAGES += \
	update_engine_sideload

PRODUCT_PACKAGES_DEBUG += \
	update_engine_client

PRODUCT_USE_DYNAMIC_PARTITIONS := true
