[
  {
    "path": "AndroidProducts.mk",
    "content": "PRODUCT_MAKEFILES := $(LOCAL_DIR)/rpi4.mk\n\nCOMMON_LUNCH_CHOICES := rpi4-eng\n"
  },
  {
    "path": "BoardConfig.mk",
    "content": "#\n# Copyright 2020 Android-RPi Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\nTARGET_NO_BOOTLOADER := true\nTARGET_NO_KERNEL := true\nTARGET_NO_RECOVERY := true\n\nTARGET_ARCH := arm64\nTARGET_ARCH_VARIANT := armv8-a\nTARGET_CPU_VARIANT := cortex-a72\nTARGET_CPU_ABI := arm64-v8a\nTARGET_CPU_ABI2 := \n\nTARGET_DYNAMIC_64_32_MEDIASERVER := true\n\nTARGET_FLATTEN_APEX := true\n\nPRODUCT_FULL_TREBLE_OVERRIDE := true\nBOARD_VNDK_VERSION := current\n\nTARGET_BOARD_PLATFORM := bcm2711\n\nTARGET_USERIMAGES_SPARSE_EXT_DISABLED := true\nTARGET_USERIMAGES_USE_EXT4 := true\n\nBOARD_SYSTEMIMAGE_PARTITION_SIZE := 1207959552 # 1152M\nBOARD_USERDATAIMAGE_PARTITION_SIZE := 134217728 # 128M\n\nTARGET_COPY_OUT_VENDOR := vendor\nBOARD_VENDORIMAGE_PARTITION_SIZE := 134217728 # 128M\nBOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := ext4\n\nBOARD_FLASH_BLOCK_SIZE := 4096\n\nMALLOC_SVELTE := true\n\nUSE_XML_AUDIO_POLICY_CONF := 1\n\nBOARD_MESA3D_USES_MESON_BUILD := true\nBOARD_MESA3D_GALLIUM_DRIVERS := v3d vc4\nBOARD_MESA3D_VULKAN_DRIVERS := broadcom\nUSE_OPENGL_RENDERER := true\nTARGET_USES_HWC2 := true\nTARGET_SCREEN_DENSITY := 213\n\n# Wifi\nBOARD_WLAN_DEVICE := bcmdhd\nWPA_SUPPLICANT_VERSION := VER_0_8_X\nBOARD_WPA_SUPPLICANT_DRIVER := NL80211\nBOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_bcmdhd\nBOARD_HOSTAPD_DRIVER := NL80211\nBOARD_HOSTAPD_PRIVATE_LIB   := lib_driver_cmd_bcmdhd\nWIFI_HIDL_UNIFIED_SUPPLICANT_SERVICE_RC_ENTRY := true\n\n# Bluetooth\nBOARD_HAVE_BLUETOOTH := true\nBOARD_HAVE_BLUETOOTH_BCM := true\nBOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/arpi/rpi4/bluetooth\nBOARD_CUSTOM_BT_CONFIG := device/arpi/rpi4/bluetooth/vnd_rpi4.txt\n\nBOARD_SEPOLICY_DIRS := \\\n    device/arpi/rpi4/sepolicy\n\nDEVICE_MANIFEST_FILE := device/arpi/rpi4/manifest.xml\n"
  },
  {
    "path": "Generic.kl",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n#\n# Generic key layout file for full alphabetic US English PC style external keyboards.\n#\n# This file is intentionally very generic and is intended to support a broad range of keyboards.\n# Do not edit the generic key layout to support a specific keyboard; instead, create\n# a new key layout file with the required keyboard configuration.\n#\n\nkey 1     BACK\nkey 2     1\nkey 3     2\nkey 4     3\nkey 5     4\nkey 6     5\nkey 7     6\nkey 8     7\nkey 9     8\nkey 10    9\nkey 11    0\nkey 12    MINUS\nkey 13    EQUALS\nkey 14    DEL\nkey 15    TAB\nkey 16    Q\nkey 17    W\nkey 18    E\nkey 19    R\nkey 20    T\nkey 21    Y\nkey 22    U\nkey 23    I\nkey 24    O\nkey 25    P\nkey 26    LEFT_BRACKET\nkey 27    RIGHT_BRACKET\nkey 28    ENTER\nkey 29    CTRL_LEFT\nkey 30    A\nkey 31    S\nkey 32    D\nkey 33    F\nkey 34    G\nkey 35    H\nkey 36    J\nkey 37    K\nkey 38    L\nkey 39    SEMICOLON\nkey 40    APOSTROPHE\nkey 41    GRAVE\nkey 42    SHIFT_LEFT\nkey 43    BACKSLASH\nkey 44    Z\nkey 45    X\nkey 46    C\nkey 47    V\nkey 48    B\nkey 49    N\nkey 50    M\nkey 51    COMMA\nkey 52    PERIOD\nkey 53    SLASH\nkey 54    SHIFT_RIGHT\nkey 55    NUMPAD_MULTIPLY\nkey 56    ALT_LEFT\nkey 57    SPACE\nkey 58    CAPS_LOCK\nkey 59    F1\nkey 60    F2\nkey 61    F3\nkey 62    F4\nkey 63    F5\nkey 64    F6\nkey 65    F7\nkey 66    VOLUME_DOWN\nkey 67    VOLUME_UP\nkey 68    F10\nkey 69    NUM_LOCK\nkey 70    SCROLL_LOCK\nkey 71    NUMPAD_7\nkey 72    NUMPAD_8\nkey 73    NUMPAD_9\nkey 74    NUMPAD_SUBTRACT\nkey 75    NUMPAD_4\nkey 76    NUMPAD_5\nkey 77    NUMPAD_6\nkey 78    NUMPAD_ADD\nkey 79    NUMPAD_1\nkey 80    NUMPAD_2\nkey 81    NUMPAD_3\nkey 82    NUMPAD_0\nkey 83    NUMPAD_DOT\n# key 84 (undefined)\nkey 85    ZENKAKU_HANKAKU\nkey 86    BACKSLASH\nkey 87    F11\nkey 88    F12\nkey 89    RO\n# key 90 \"KEY_KATAKANA\"\n# key 91 \"KEY_HIRAGANA\"\nkey 92    HENKAN\nkey 93    KATAKANA_HIRAGANA\nkey 94    MUHENKAN\nkey 95    NUMPAD_COMMA\nkey 96    NUMPAD_ENTER\nkey 97    CTRL_RIGHT\nkey 98    NUMPAD_DIVIDE\nkey 99    SYSRQ\nkey 100   ALT_RIGHT\n# key 101 \"KEY_LINEFEED\"\nkey 102   MOVE_HOME\nkey 103   DPAD_UP\nkey 104   PAGE_UP\nkey 105   DPAD_LEFT\nkey 106   DPAD_RIGHT\nkey 107   MOVE_END\nkey 108   DPAD_DOWN\nkey 109   PAGE_DOWN\nkey 110   INSERT\nkey 111   FORWARD_DEL\n# key 112 \"KEY_MACRO\"\nkey 113   VOLUME_MUTE\nkey 114   VOLUME_DOWN\nkey 115   VOLUME_UP\nkey 116   POWER\nkey 117   NUMPAD_EQUALS\n# key 118 \"KEY_KPPLUSMINUS\"\nkey 119   BREAK\n# key 120 (undefined)\nkey 121   NUMPAD_COMMA\nkey 122   KANA\nkey 123   EISU\nkey 124   YEN\nkey 125   META_LEFT\nkey 126   META_RIGHT\nkey 127   MENU\nkey 128   MEDIA_STOP\n# key 129 \"KEY_AGAIN\"\n# key 130 \"KEY_PROPS\"\n# key 131 \"KEY_UNDO\"\n# key 132 \"KEY_FRONT\"\nkey 133   COPY\n# key 134 \"KEY_OPEN\"\nkey 135   PASTE\n# key 136 \"KEY_FIND\"\nkey 137   CUT\n# key 138 \"KEY_HELP\"\nkey 139   MENU\nkey 140   CALCULATOR\n# key 141 \"KEY_SETUP\"\nkey 142   SLEEP\nkey 143   WAKEUP\n# key 144 \"KEY_FILE\"\n# key 145 \"KEY_SENDFILE\"\n# key 146 \"KEY_DELETEFILE\"\n# key 147 \"KEY_XFER\"\n# key 148 \"KEY_PROG1\"\n# key 149 \"KEY_PROG2\"\nkey 150   EXPLORER\n# key 151 \"KEY_MSDOS\"\nkey 152   POWER\n# key 153 \"KEY_DIRECTION\"\n# key 154 \"KEY_CYCLEWINDOWS\"\nkey 155   ENVELOPE\nkey 156   BOOKMARK\n# key 157 \"KEY_COMPUTER\"\nkey 158   BACK\nkey 159   FORWARD\nkey 160   MEDIA_CLOSE\nkey 161   MEDIA_EJECT\nkey 162   MEDIA_EJECT\nkey 163   MEDIA_NEXT\nkey 164   MEDIA_PLAY_PAUSE\nkey 165   MEDIA_PREVIOUS\nkey 166   MEDIA_STOP\nkey 167   MEDIA_RECORD\nkey 168   MEDIA_REWIND\nkey 169   CALL\n# key 170 \"KEY_ISO\"\nkey 171   MUSIC\nkey 172   HOME\nkey 173   REFRESH\n# key 174 \"KEY_EXIT\"\n# key 175 \"KEY_MOVE\"\n# key 176 \"KEY_EDIT\"\nkey 177   PAGE_UP\nkey 178   PAGE_DOWN\nkey 179   NUMPAD_LEFT_PAREN\nkey 180   NUMPAD_RIGHT_PAREN\n# key 181 \"KEY_NEW\"\n# key 182 \"KEY_REDO\"\n# key 183   F13\n# key 184   F14\n# key 185   F15\n# key 186   F16\n# key 187   F17\n# key 188   F18\n# key 189   F19\n# key 190   F20\n# key 191   F21\n# key 192   F22\n# key 193   F23\n# key 194   F24\n# key 195 (undefined)\n# key 196 (undefined)\n# key 197 (undefined)\n# key 198 (undefined)\n# key 199 (undefined)\nkey 200   MEDIA_PLAY\nkey 201   MEDIA_PAUSE\n# key 202 \"KEY_PROG3\"\n# key 203 \"KEY_PROG4\"\n# key 204 (undefined)\n# key 205 \"KEY_SUSPEND\"\n# key 206 \"KEY_CLOSE\"\nkey 207   MEDIA_PLAY\nkey 208   MEDIA_FAST_FORWARD\n# key 209 \"KEY_BASSBOOST\"\n# key 210 \"KEY_PRINT\"\n# key 211 \"KEY_HP\"\nkey 212   CAMERA\nkey 213   MUSIC\n# key 214 \"KEY_QUESTION\"\nkey 215   ENVELOPE\n# key 216 \"KEY_CHAT\"\nkey 217   SEARCH\n# key 218 \"KEY_CONNECT\"\n# key 219 \"KEY_FINANCE\"\n# key 220 \"KEY_SPORT\"\n# key 221 \"KEY_SHOP\"\n# key 222 \"KEY_ALTERASE\"\n# key 223 \"KEY_CANCEL\"\nkey 224   BRIGHTNESS_DOWN\nkey 225   BRIGHTNESS_UP\nkey 226   HEADSETHOOK\n\nkey 256   BUTTON_1\nkey 257   BUTTON_2\nkey 258   BUTTON_3\nkey 259   BUTTON_4\nkey 260   BUTTON_5\nkey 261   BUTTON_6\nkey 262   BUTTON_7\nkey 263   BUTTON_8\nkey 264   BUTTON_9\nkey 265   BUTTON_10\nkey 266   BUTTON_11\nkey 267   BUTTON_12\nkey 268   BUTTON_13\nkey 269   BUTTON_14\nkey 270   BUTTON_15\nkey 271   BUTTON_16\n\nkey 288   BUTTON_1\nkey 289   BUTTON_2\nkey 290   BUTTON_3\nkey 291   BUTTON_4\nkey 292   BUTTON_5\nkey 293   BUTTON_6\nkey 294   BUTTON_7\nkey 295   BUTTON_8\nkey 296   BUTTON_9\nkey 297   BUTTON_10\nkey 298   BUTTON_11\nkey 299   BUTTON_12\nkey 300   BUTTON_13\nkey 301   BUTTON_14\nkey 302   BUTTON_15\nkey 303   BUTTON_16\n\n\nkey 304   BUTTON_A\nkey 305   BUTTON_B\nkey 306   BUTTON_C\nkey 307   BUTTON_X\nkey 308   BUTTON_Y\nkey 309   BUTTON_Z\nkey 310   BUTTON_L1\nkey 311   BUTTON_R1\nkey 312   BUTTON_L2\nkey 313   BUTTON_R2\nkey 314   BUTTON_SELECT\nkey 315   BUTTON_START\nkey 316   BUTTON_MODE\nkey 317   BUTTON_THUMBL\nkey 318   BUTTON_THUMBR\n\n\n# key 352 \"KEY_OK\"\nkey 353   DPAD_CENTER\n# key 354 \"KEY_GOTO\"\n# key 355 \"KEY_CLEAR\"\n# key 356 \"KEY_POWER2\"\n# key 357 \"KEY_OPTION\"\n# key 358 \"KEY_INFO\"\n# key 359 \"KEY_TIME\"\n# key 360 \"KEY_VENDOR\"\n# key 361 \"KEY_ARCHIVE\"\nkey 362   GUIDE\n# key 363 \"KEY_CHANNEL\"\n# key 364 \"KEY_FAVORITES\"\n# key 365 \"KEY_EPG\"\nkey 366   DVR\n# key 367 \"KEY_MHP\"\n# key 368 \"KEY_LANGUAGE\"\n# key 369 \"KEY_TITLE\"\nkey 370   CAPTIONS\n# key 371 \"KEY_ANGLE\"\n# key 372 \"KEY_ZOOM\"\n# key 373 \"KEY_MODE\"\n# key 374 \"KEY_KEYBOARD\"\n# key 375 \"KEY_SCREEN\"\n# key 376 \"KEY_PC\"\nkey 377   TV\n# key 378 \"KEY_TV2\"\n# key 379 \"KEY_VCR\"\n# key 380 \"KEY_VCR2\"\n# key 381 \"KEY_SAT\"\n# key 382 \"KEY_SAT2\"\n# key 383 \"KEY_CD\"\n# key 384 \"KEY_TAPE\"\n# key 385 \"KEY_RADIO\"\n# key 386 \"KEY_TUNER\"\n# key 387 \"KEY_PLAYER\"\n# key 388 \"KEY_TEXT\"\n# key 389 \"KEY_DVD\"\n# key 390 \"KEY_AUX\"\n# key 391 \"KEY_MP3\"\n# key 392 \"KEY_AUDIO\"\n# key 393 \"KEY_VIDEO\"\n# key 394 \"KEY_DIRECTORY\"\n# key 395 \"KEY_LIST\"\n# key 396 \"KEY_MEMO\"\nkey 397   CALENDAR\nkey 398   PROG_RED\nkey 399   PROG_GREEN\nkey 400   PROG_YELLOW\nkey 401   PROG_BLUE\nkey 402   CHANNEL_UP\nkey 403   CHANNEL_DOWN\n# key 404 \"KEY_FIRST\"\nkey 405   LAST_CHANNEL\n# key 406 \"KEY_AB\"\n# key 407 \"KEY_NEXT\"\n# key 408 \"KEY_RESTART\"\n# key 409 \"KEY_SLOW\"\n# key 410 \"KEY_SHUFFLE\"\n# key 411 \"KEY_BREAK\"\n# key 412 \"KEY_PREVIOUS\"\n# key 413 \"KEY_DIGITS\"\n# key 414 \"KEY_TEEN\"\n# key 415 \"KEY_TWEN\"\n\nkey 429   CONTACTS\n\n# key 448 \"KEY_DEL_EOL\"\n# key 449 \"KEY_DEL_EOS\"\n# key 450 \"KEY_INS_LINE\"\n# key 451 \"KEY_DEL_LINE\"\n\n\nkey 464   FUNCTION\nkey 465   ESCAPE            FUNCTION\nkey 466   F1                FUNCTION\nkey 467   F2                FUNCTION\nkey 468   F3                FUNCTION\nkey 469   F4                FUNCTION\nkey 470   F5                FUNCTION\nkey 471   F6                FUNCTION\nkey 472   F7                FUNCTION\nkey 473   F8                FUNCTION\nkey 474   F9                FUNCTION\nkey 475   F10               FUNCTION\nkey 476   F11               FUNCTION\nkey 477   F12               FUNCTION\nkey 478   1                 FUNCTION\nkey 479   2                 FUNCTION\nkey 480   D                 FUNCTION\nkey 481   E                 FUNCTION\nkey 482   F                 FUNCTION\nkey 483   S                 FUNCTION\nkey 484   B                 FUNCTION\n\n\n# key 497 KEY_BRL_DOT1\n# key 498 KEY_BRL_DOT2\n# key 499 KEY_BRL_DOT3\n# key 500 KEY_BRL_DOT4\n# key 501 KEY_BRL_DOT5\n# key 502 KEY_BRL_DOT6\n# key 503 KEY_BRL_DOT7\n# key 504 KEY_BRL_DOT8\n\nkey 522   STAR\nkey 523   POUND\nkey 580   APP_SWITCH\nkey 582   VOICE_ASSIST\n# Linux KEY_ASSISTANT\nkey 583   ASSIST\n\n# Keys defined by HID usages\nkey usage 0x0c0067 WINDOW\nkey usage 0x0c006F BRIGHTNESS_UP\nkey usage 0x0c0070 BRIGHTNESS_DOWN\nkey usage 0x0c0173 MEDIA_AUDIO_TRACK\n\n# Joystick and game controller axes.\n# Axes that are not mapped will be assigned generic axis numbers by the input subsystem.\naxis 0x00 X\naxis 0x01 Y\naxis 0x02 Z\naxis 0x03 RX\naxis 0x04 RY\naxis 0x05 RZ\naxis 0x06 THROTTLE\naxis 0x07 RUDDER\naxis 0x08 WHEEL\naxis 0x09 GAS\naxis 0x0a BRAKE\naxis 0x10 HAT_X\naxis 0x11 HAT_Y\n\n# LEDs\nled 0x00 NUM_LOCK\nled 0x01 CAPS_LOCK\nled 0x02 SCROLL_LOCK\nled 0x03 COMPOSE\nled 0x04 KANA\nled 0x05 SLEEP\nled 0x06 SUSPEND\nled 0x07 MUTE\nled 0x08 MISC\nled 0x09 MAIL\nled 0x0a CHARGING\n"
  },
  {
    "path": "README",
    "content": "# Setup build envoronment\n  https://source.android.com/setup/build/initializing\n  $ sudo apt install libssl-dev python3-setuptools \n\n# Download Android source\n  https://github.com/android-rpi/local_manifests/tree/arpi14-pi4\n\n# Build Android\n Refer to http://source.android.com/source/building.html\n\n  $ source build/envsetup.sh\n  $ lunch rpi4-eng\n  $ make ramdisk systemimage vendorimage\n\n Use -j[n] option with make, if build host has a good number of CPU cores.\n\n\n# Prepare sd card\n Partitions of the card should be set-up like followings.\n  p1  128MB for boot : Do fdisk, set W95 FAT32(LBA) & Bootable type, mkfs.vfat\n  p2 1152MB for /system : Do fdisk, new primary partition\n  p3  128MB for /vendor : Do fdisk, new primary partition\n  p4 remainings for /data : Do fdisk, mkfs.ext4\n Set volume label of /data partition as userdata\n  : use -L option for mkfs.ext4\n \n# Write system & vendor partition\n  $ cd out/target/product/rpi4\n  $ sudo dd if=system.img of=/dev/<p2> bs=1M\n  $ sudo dd if=vendor.img of=/dev/<p3> bs=1M\n\n# Copy firmware & ramdisk to boot partition\n  device/arpi/rpi4/boot/* to p1:/\n  out/target/product/rpi4/ramdisk.img to p1:/\n\n\n# Download & Build kernel source\n  https://github.com/android-rpi/kernel_manifest/tree/arpi14-6.1.62\n\n# Copy kernel binaries to boot partition\n  <kernel directory>/out/arpi14-6.1/dist/Image.gz to p1:/\n  <kernel directory>/out/arpi14-6.1/dist/bcm2711-rpi-*.dtb to p1:/\n  <kernel directory>/out/arpi14-6.1/dist/vc4-kms-v3d-pi4.dtbo to p1:/overlays/\n"
  },
  {
    "path": "bluetooth/bdroid_buildcfg.h",
    "content": "#ifndef _BDROID_BUILDCFG_H\n#define _BDROID_BUILDCFG_H\n\n#define BTM_DEF_LOCAL_NAME   \"RPI4\"\n\n#define BTA_DM_COD {0x1A, 0x01, 0x20}\n\n#endif\n"
  },
  {
    "path": "bluetooth/bt_vendor.conf",
    "content": "# UART device port where Bluetooth controller is attached\nUartPort = /dev/ttyAMA1\n# Firmware patch file location\nFwPatchFilePath = /lib/firmware/brcm\n# Firmware Name\nFwPatchFileName = BCM4345C0.hcd\n"
  },
  {
    "path": "bluetooth/bt_vendor_400.conf",
    "content": "# UART device port where Bluetooth controller is attached\nUartPort = /dev/ttyAMA1\n# Firmware patch file location\nFwPatchFilePath = /lib/firmware/brcm\n# Firmware Name\nFwPatchFileName = BCM4345C5.hcd\n"
  },
  {
    "path": "bluetooth/vnd_rpi4.txt",
    "content": "BLUETOOTH_UART_DEVICE_PORT = \"/dev/ttyAMA1\"\nFW_PATCHFILE_LOCATION = \"/lib/firmware/\"\nFW_PATCH_SETTLEMENT_DELAY_MS = 200\nBT_WAKE_VIA_PROC = FALSE\nBT_WAKE_VIA_USERIAL_IOCTL = FALSE\nLPM_IDLE_TIMEOUT_MULTIPLE = 5\nSCO_CFG_INCLUDED = FALSE\nSCO_PCM_IF_CLOCK_RATE = 2\nBTVND_DBG = FALSE\nBTHW_DBG = FALSE\nVNDUSERIAL_DBG = FALSE\nUPIO_DBG = FALSE\nUART_TARGET_BAUD_RATE = 921600\nUSE_CONTROLLER_BDADDR = FALSE\n"
  },
  {
    "path": "boot/cmdline.txt",
    "content": "console=serial0,115200 no_console_suspend root=/dev/ram0 androidboot.hardware=rpi4 androidboot.selinux=permissive\n"
  },
  {
    "path": "boot/config.txt",
    "content": "kernel=Image.gz\narm_64bit=1\ndtparam=krnbt=off\ndtparam=audio=on\ndtoverlay=vc4-kms-v3d-pi4,noaudio\n#dtoverlay=dwc2,dr_mode=peripheral\ninitramfs ramdisk.img followkernel\nenable_uart=1\ndisable_overscan=1\n"
  },
  {
    "path": "etc/audio_policy_configuration.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<audioPolicyConfiguration version=\"1.0\" xmlns:xi=\"http://www.w3.org/2001/XInclude\">\n    <modules>\n        <module name=\"primary\" halVersion=\"2.0\">\n            <attachedDevices>\n                <item>Speaker</item>\n            </attachedDevices>\n            <defaultOutputDevice>Speaker</defaultOutputDevice>\n            <mixPorts>\n                <mixPort name=\"primary output\" role=\"source\" flags=\"AUDIO_OUTPUT_FLAG_PRIMARY\">\n                    <profile name=\"\" format=\"AUDIO_FORMAT_PCM_16_BIT\"\n                             samplingRates=\"48000\" channelMasks=\"AUDIO_CHANNEL_OUT_STEREO\"/>\n                </mixPort>\n            </mixPorts>\n            <devicePorts>\n                <devicePort tagName=\"Speaker\" type=\"AUDIO_DEVICE_OUT_SPEAKER\" role=\"sink\">\n                </devicePort>\n            </devicePorts>\n            <routes>\n                <route type=\"mix\" sink=\"Speaker\"\n                       sources=\"primary output\"/>\n            </routes>\n        </module>\n\n        <xi:include href=\"usb_audio_policy_configuration.xml\"/>\n        <xi:include href=\"a2dp_audio_policy_configuration.xml\"/>\n        <xi:include href=\"r_submix_audio_policy_configuration.xml\"/>\n    </modules>\n\n    <xi:include href=\"audio_policy_volumes.xml\"/>\n    <xi:include href=\"default_volume_tables.xml\"/>\n</audioPolicyConfiguration>\n"
  },
  {
    "path": "etc/codec2.vendor.ext.policy",
    "content": "_llseek: 1\nepoll_create1: 1\nepoll_ctl: 1\nepoll_pwait: 1\neventfd2: 1\nfstat64: 1\nfstatat64: 1\nfstatfs64: 1\ngetcwd: 1\ngetdents64: 1\ngeteuid32: 1\ngetuid32: 1\nmmap2: 1\nopen: 1\npselect6: 1\nsched_getaffinity: 1\nstatfs64: 1\nsysinfo: 1\nugetrlimit: 1\n"
  },
  {
    "path": "etc/external_camera_config.xml",
    "content": "<ExternalCamera>\n    <Provider>\n        <id>0</id>\n    </Provider>\n    <Device>\n        <!-- Max JPEG buffer size in bytes-->\n        <MaxJpegBufferSize bytes=\"3145728\"/> <!-- 3MB (~= 1080p YUV420) -->\n        <!-- Size of v4l2 buffer queue when streaming >= 30fps -->\n        <!-- Larger value: more request can be cached pipeline (less janky)  -->\n        <!-- Smaller value: use less memory -->\n        <NumVideoBuffers count=\"4\"/>\n        <!-- Size of v4l2 buffer queue when streaming < 30fps -->\n        <NumStillBuffers count=\"2\"/>\n\n        <!-- List of maximum fps for various output sizes -->\n        <!-- Any image size smaller than the size listed in Limit row will report\n            fps (as minimum frame duration) up to the fpsBound value. -->\n        <FpsList>\n            <!-- width/height must be increasing, fpsBound must be decreasing-->\n            <Limit width=\"640\" height=\"480\" fpsBound=\"30.0\"/>\n            <Limit width=\"1280\" height=\"720\" fpsBound=\"15.0\"/>\n            <Limit width=\"1920\" height=\"1080\" fpsBound=\"10.0\"/>\n            <!-- image size larger than the last entry will not be supported-->\n        </FpsList>\n    </Device>\n</ExternalCamera>\n"
  },
  {
    "path": "etc/media_codecs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!-- Copyright (C) 2012 The Android Open Source Project\n\n     Licensed under the Apache License, Version 2.0 (the \"License\");\n     you may not use this file except in compliance with the License.\n     You may obtain a copy of the License at\n\n          http://www.apache.org/licenses/LICENSE-2.0\n\n     Unless required by applicable law or agreed to in writing, software\n     distributed under the License is distributed on an \"AS IS\" BASIS,\n     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     See the License for the specific language governing permissions and\n     limitations under the License.\n-->\n\n<!--\n<!DOCTYPE MediaCodecs [\n<!ELEMENT Include EMPTY>\n<!ATTLIST Include href CDATA #REQUIRED>\n<!ELEMENT MediaCodecs (Decoders|Encoders|Include)*>\n<!ELEMENT Decoders (MediaCodec|Include)*>\n<!ELEMENT Encoders (MediaCodec|Include)*>\n<!ELEMENT MediaCodec (Type|Quirk|Include)*>\n<!ATTLIST MediaCodec name CDATA #REQUIRED>\n<!ATTLIST MediaCodec type CDATA>\n<!ELEMENT Type EMPTY>\n<!ATTLIST Type name CDATA #REQUIRED>\n<!ELEMENT Quirk EMPTY>\n<!ATTLIST Quirk name CDATA #REQUIRED>\n]>\n\nThere's a simple and a complex syntax to declare the availability of a\nmedia codec:\n\nA codec that properly follows the OpenMax spec and therefore doesn't have any\nquirks and that only supports a single content type can be declared like so:\n\n    <MediaCodec name=\"OMX.foo.bar\" type=\"something/interesting\" />\n\nIf a codec has quirks OR supports multiple content types, the following syntax\ncan be used:\n\n    <MediaCodec name=\"OMX.foo.bar\" >\n        <Type name=\"something/interesting\" />\n        <Type name=\"something/else\" />\n        ...\n        <Quirk name=\"requires-allocate-on-input-ports\" />\n        <Quirk name=\"requires-allocate-on-output-ports\" />\n        <Quirk name=\"output-buffers-are-unreadable\" />\n    </MediaCodec>\n\nOnly the three quirks included above are recognized at this point:\n\n\"requires-allocate-on-input-ports\"\n    must be advertised if the component does not properly support specification\n    of input buffers using the OMX_UseBuffer(...) API but instead requires\n    OMX_AllocateBuffer to be used.\n\n\"requires-allocate-on-output-ports\"\n    must be advertised if the component does not properly support specification\n    of output buffers using the OMX_UseBuffer(...) API but instead requires\n    OMX_AllocateBuffer to be used.\n\n\"output-buffers-are-unreadable\"\n    must be advertised if the emitted output buffers of a decoder component\n    are not readable, i.e. use a custom format even though abusing one of\n    the official OMX colorspace constants.\n    Clients of such decoders will not be able to access the decoded data,\n    naturally making the component much less useful. The only use for\n    a component with this quirk is to render the output to the screen.\n    Audio decoders MUST NOT advertise this quirk.\n    Video decoders that advertise this quirk must be accompanied by a\n    corresponding color space converter for thumbnail extraction,\n    matching surfaceflinger support that can render the custom format to\n    a texture and possibly other code, so just DON'T USE THIS QUIRK.\n\n-->\n\n<MediaCodecs>\n    <Settings>\n        <Setting name=\"max-video-encoder-input-buffers\" value=\"12\" />\n    </Settings>\n\n    <Include href=\"media_codecs_google_audio.xml\" />\n    <Include href=\"media_codecs_google_telephony.xml\" />\n    <Include href=\"media_codecs_google_video.xml\" />\n\n    <Decoders>\n        <MediaCodec name=\"c2.v4l2.avc.decoder\" type=\"video/avc\">\n            <Limit name=\"size\" min=\"16x16\" max=\"4096x4096\" />\n            <Limit name=\"alignment\" value=\"2x2\" />\n            <Limit name=\"block-size\" value=\"16x16\" />\n            <Limit name=\"blocks-per-second\" min=\"1\" max=\"1879200\" />\n            <Limit name=\"bitrate\" range=\"1-62500000\" />\n            <Limit name=\"concurrent-instances\" max=\"4\" />\n            <Limit name=\"performance-point-3840x2160\" range=\"30-30\" />\n            <Feature name=\"adaptive-playback\" />\n        </MediaCodec>\n    </Decoders>\n</MediaCodecs>\n"
  },
  {
    "path": "firmware/brcm/brcmfmac43455-sdio.txt",
    "content": "# Cloned from bcm94345wlpagb_p2xx.txt \nNVRAMRev=$Rev: 498373 $\nsromrev=11\nvendid=0x14e4\ndevid=0x43ab\nmanfid=0x2d0\nprodid=0x06e4\n#macaddr=00:90:4c:c5:12:38\nmacaddr=b8:27:eb:74:f2:6c\nnocrc=1\nboardtype=0x6e4\nboardrev=0x1304\n\n#XTAL 37.4MHz\nxtalfreq=37400\n\nbtc_mode=1\n#------------------------------------------------------\n#boardflags: 5GHz eTR switch by default\n#            2.4GHz eTR switch by default\n#            bit1 for btcoex\nboardflags=0x00480201\nboardflags2=0x40800000\nboardflags3=0x44200100\nphycal_tempdelta=15\nrxchain=1\ntxchain=1\naa2g=1\naa5g=1\ntssipos5g=1\ntssipos2g=1\nfemctrl=0\nAvVmid_c0=1,165,2,100,2,100,2,100,2,100\npa2ga0=-129,6525,-718\npa2ga1=-149,4408,-601\npa5ga0=-185,6836,-815,-186,6838,-815,-184,6859,-815,-184,6882,-818\npa5ga1=-202,4285,-574,-201,4312,-578,-196,4391,-586,-201,4294,-575\nitrsw=1\npdoffsetcckma0=2\npdoffset2gperchan=0,-2,1,0,1,0,1,1,1,0,0,-1,-1,0\npdoffset2g40ma0=16\npdoffset40ma0=0x8888\npdoffset80ma0=0x8888\nextpagain5g=2\nextpagain2g=2\ntworangetssi2g=1\ntworangetssi5g=1\n# LTECX flags\n# WCI2\nltecxmux=0\nltecxpadnum=0x0504\nltecxfnsel=0x22\nltecxgcigpio=0x32\n\nmaxp2ga0=80\nofdmlrbw202gpo=0x0022\ndot11agofdmhrbw202gpo=0x4442\nmcsbw202gpo=0x98444422\nmcsbw402gpo=0x98444422\nmaxp5ga0=82,82,82,82\nmcsbw205glpo=0xb9555000\nmcsbw205gmpo=0xb9555000\nmcsbw205ghpo=0xb9555000\nmcsbw405glpo=0xb9555000\nmcsbw405gmpo=0xb9555000\nmcsbw405ghpo=0xb9555000\nmcsbw805glpo=0xb9555000\nmcsbw805gmpo=0xb9555000\nmcsbw805ghpo=0xb9555000\n\nswctrlmap_2g=0x00000000,0x00000000,0x00000000,0x010000,0x3ff\nswctrlmap_5g=0x00100010,0x00200020,0x00200020,0x010000,0x3fe\nswctrlmapext_5g=0x00000000,0x00000000,0x00000000,0x000000,0x3\nswctrlmapext_2g=0x00000000,0x00000000,0x00000000,0x000000,0x3\n\nvcodivmode=1\ndeadman_to=481500000\n\ned_thresh2g=-54\ned_thresh5g=-54\neu_edthresh2g=-54\neu_edthresh5g=-54\nldo1=4\nrawtempsense=0x1ff\ncckPwrIdxCorr=3\ncckTssiDelay=150\nofdmTssiDelay=150\ntxpwr2gAdcScale=1\ntxpwr5gAdcScale=1\ndot11b_opts=0x3aa85\ncbfilttype=1\nfdsslevel_ch11=6\n\n# Improved Bluetooth coexistence parameters from Cypress\nbtc_mode=1\nbtc_params8=0x4e20\nbtc_params1=0x7530\nbtc_params50=0x972c\n"
  },
  {
    "path": "firmware/brcm/brcmfmac43456-sdio.txt",
    "content": "# Cloned from bcm94345wlpagb_p2xx.txt \nNVRAMRev=$Rev: 498373 $\nsromrev=11\nvendid=0x14e4\ndevid=0x43ab\nmanfid=0x2d0\nprodid=0x06e4\n#macaddr=00:90:4c:c5:12:38\nmacaddr=b8:27:eb:74:f2:6c\nnocrc=1\nboardtype=0x6e4\nboardrev=0x1304\n\n#XTAL 37.4MHz\nxtalfreq=37400\n\nbtc_mode=1\n#------------------------------------------------------\n#boardflags: 5GHz eTR switch by default\n#            2.4GHz eTR switch by default\n#            bit1 for btcoex\nboardflags=0x00480201\nboardflags2=0x40800000\nboardflags3=0x44200100\nphycal_tempdelta=15\nrxchain=1\ntxchain=1\naa2g=1\naa5g=1\ntssipos5g=1\ntssipos2g=1\nfemctrl=0\nAvVmid_c0=0,157,1,126,1,126,1,126,1,126\npa2ga0=-170,5896,-680\npa2ga1=-156,4032,-547\npa5ga0=-150,5547,-628,-150,5583,-640,-158,5608,-649,-160,5757,-673\npa5ga1=-109,3831,-519,-88,3821,-512,-125,3731,-528,-103,3829,-516\nitrsw=1\npdoffsetcckma0=2\npdoffset2gperchan=0,-2,1,0,1,0,1,1,1,0,0,-1,-1,0\npdoffset2g40ma0=16\npdoffset40ma0=0x8888\npdoffset80ma0=0x8888\nextpagain5g=2\nextpagain2g=2\ntworangetssi2g=1\ntworangetssi5g=1\n# LTECX flags\n# WCI2\nltecxmux=0\nltecxpadnum=0x0504\nltecxfnsel=0x22\nltecxgcigpio=0x32\n\nmaxp2ga0=80\nofdmlrbw202gpo=0x0022\ndot11agofdmhrbw202gpo=0x4442\nmcsbw202gpo=0x98444422\nmcsbw402gpo=0x98444422\nmaxp5ga0=82,82,82,82\nmcsbw205glpo=0xb9555000\nmcsbw205gmpo=0xb9555000\nmcsbw205ghpo=0xb9555000\nmcsbw405glpo=0xb9555000\nmcsbw405gmpo=0xb9555000\nmcsbw405ghpo=0xb9555000\nmcsbw805glpo=0xb9555000\nmcsbw805gmpo=0xb9555000\nmcsbw805ghpo=0xb9555000\n\nswctrlmap_2g=0x00000000,0x00000000,0x00000000,0x010000,0x3ff\nswctrlmap_5g=0x00100010,0x00200020,0x00200020,0x010000,0x3fe\nswctrlmapext_5g=0x00000000,0x00000000,0x00000000,0x000000,0x3\nswctrlmapext_2g=0x00000000,0x00000000,0x00000000,0x000000,0x3\n\nvcodivmode=1\ndeadman_to=481500000\n\ned_thresh2g=-54\ned_thresh5g=-54\neu_edthresh2g=-54\neu_edthresh5g=-54\nldo1=4\nrawtempsense=0x1ff\ncckPwrIdxCorr=3\ncckTssiDelay=150\nofdmTssiDelay=150\ntxpwr2gAdcScale=1\ntxpwr5gAdcScale=1\ndot11b_opts=0x3aa85\ncbfilttype=1\nfdsslevel_ch11=6\n\n# Improved Bluetooth coexistence parameters from Cypress\nbtc_mode=1\nbtc_params8=0x4e20\nbtc_params1=0x7530\n"
  },
  {
    "path": "fstab.rpi4",
    "content": "#<src>                  <mnt_point>         <type>    <mnt_flags and options>                               <fs_mgr_flags>\n\n/dev/block/mmcblk0p2    /system             ext4      ro,barrier=1                                          wait,first_stage_mount\n/dev/block/mmcblk0p3    /vendor             ext4      ro,barrier=1                                          wait,first_stage_mount\n/dev/block/mmcblk0p4    /data               ext4      noatime,nosuid,nodev,nomblk_io_submit,errors=panic    wait\n\n/devices/platform/soc/*.usb/usb*     auto   auto      defaults                                              voldmanaged=usb:auto\n"
  },
  {
    "path": "init.rpi4.rc",
    "content": "#import /vendor/etc/init/hw/init.rpi4.usb.rc\n\non init\n    # mount debugfs\n    mount debugfs /sys/kernel/debug /sys/kernel/debug mode=755\n\n    # Support legacy paths\n    symlink /sdcard /mnt/sdcard\n    symlink /sdcard /storage/sdcard0\n\non fs\n    mount_all /vendor/etc/fstab.rpi4\n\non post-fs-data\n    # Bluetooth\n    chmod 0660 /sys/class/rfkill/rfkill0/state\n    chown bluetooth bluetooth /sys/class/rfkill/rfkill0/state\n    chown bluetooth bluetooth /sys/class/rfkill/rfkill0/type\n\n    # Set indication (checked by vold) that we have finished this action\n    setprop vold.post_fs_data_done 1\n\non zygote-start\n    # Create the directories used by the Wireless subsystem\n    mkdir /data/misc/wifi 0770 wifi wifi\n    mkdir /data/misc/wifi/wpa_supplicant 0770 wifi wifi\n    mkdir /data/vendor/wifi 0771 wifi wifi\n    mkdir /data/vendor/wifi/wpa 0770 wifi wifi\n    mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi\n    mkdir /data/misc/dhcp 0770 dhcp dhcp\n    chown dhcp dhcp /data/misc/dhcp\n\non boot\n    setprop net.dns1 8.8.8.8\n    setprop net.dns2 8.8.4.4\n\n# fake some battery state\n    setprop status.battery.state Slow\n    setprop status.battery.level 5\n    setprop status.battery.level_raw  50\n    setprop status.battery.level_scale 9\n\n    setprop service.adb.tcp.port 5555\n    start adbd\n\n"
  },
  {
    "path": "init.rpi4.usb.rc",
    "content": "#\n# Copyright (C) 2016 The Android Open-Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\non init\n    setprop sys.usb.controller \"fe980000.usb\"\n\non boot\n    mount configfs none /config\n    mkdir /config/usb_gadget/g1 0770 shell shell\n    mkdir /config/usb_gadget/g1/strings/0x409 0770 shell shell\n    write /config/usb_gadget/g1/bcdUSB 0x0200\n    write /config/usb_gadget/g1/driver_match_existing_only 0\n    write /config/usb_gadget/g1/idVendor 0x18d1\n    write /config/usb_gadget/g1/bcdDevice 0x0223\n    write /config/usb_gadget/g1/strings/0x409/serialnumber ${ro.serialno}\n    write /config/usb_gadget/g1/strings/0x409/manufacturer ${ro.product.manufacturer}\n    write /config/usb_gadget/g1/strings/0x409/product ${ro.product.model}\n    mkdir /config/usb_gadget/g1/functions/accessory.gs2\n    mkdir /config/usb_gadget/g1/functions/audio_source.gs3\n    mkdir /config/usb_gadget/g1/functions/midi.gs5\n    mkdir /config/usb_gadget/g1/functions/ffs.adb\n    mkdir /config/usb_gadget/g1/functions/ffs.mtp\n    mkdir /config/usb_gadget/g1/functions/ffs.ptp\n    mkdir /config/usb_gadget/g1/configs/b.1 0770 shell shell\n    mkdir /config/usb_gadget/g1/configs/b.1/strings/0x409 0770 shell shell\n    write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1\n    write /config/usb_gadget/g1/os_desc/qw_sign \"MSFT100\"\n    write /config/usb_gadget/g1/configs/b.1/MaxPower 500\n    mkdir /dev/usb-ffs 0775 shell shell\n    mkdir /dev/usb-ffs/adb 0770 shell shell\n    mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000\n    mkdir /dev/usb-ffs/mtp 0770 mtp mtp\n    mkdir /dev/usb-ffs/ptp 0770 mtp mtp\n    mount functionfs mtp /dev/usb-ffs/mtp rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1\n    mount functionfs ptp /dev/usb-ffs/ptp rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1\n    setprop sys.usb.mtp.device_type 3\n    setprop sys.usb.configfs 1\n    setprop sys.usb.ffs.aio_compat 1\n    symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1\non property:sys.usb.config=none && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/os_desc/use 0\non property:sys.usb.config=mtp && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x4ee1\n    write /config/usb_gadget/g1/os_desc/use 1\n    symlink /config/usb_gadget/g1/functions/ffs.mtp /config/usb_gadget/g1/configs/b.1/f1\non property:sys.usb.ffs.ready=1 && property:sys.usb.config=mtp,adb && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x4ee2\n    write /config/usb_gadget/g1/os_desc/use 1\n    symlink /config/usb_gadget/g1/functions/ffs.mtp /config/usb_gadget/g1/configs/b.1/f1\non property:sys.usb.config=rndis && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x4ee3\non property:sys.usb.ffs.ready=1 && property:sys.usb.config=rndis,adb && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x4ee4\non property:sys.usb.config=ptp && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x4ee5\n    write /config/usb_gadget/g1/os_desc/use 1\n    symlink /config/usb_gadget/g1/functions/ffs.ptp /config/usb_gadget/g1/configs/b.1/f1\non property:sys.usb.ffs.ready=1 && property:sys.usb.config=ptp,adb && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x4ee6\n    write /config/usb_gadget/g1/os_desc/use 1\n    symlink /config/usb_gadget/g1/functions/ffs.ptp /config/usb_gadget/g1/configs/b.1/f1\non property:sys.usb.config=adb && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x4ee7\non property:sys.usb.config=midi && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x4ee8\non property:sys.usb.config=midi,adb && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x4ee9\non property:sys.usb.config=accessory && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x2d00\non property:sys.usb.config=accessory,adb && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x2d01\non property:sys.usb.config=audio_source && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x2d02\non property:sys.usb.config=audio_source,adb && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x2d03\non property:sys.usb.config=accessory,audio_source && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x2d04\non property:sys.usb.config=accessory,audio_source,adb && property:sys.usb.configfs=1\n    write /config/usb_gadget/g1/idProduct 0x2d05\n"
  },
  {
    "path": "init.usb.rc",
    "content": "#\n# USB configuration\n#\n\non post-fs-data\n    mkdir /data/misc/adb 02750 system shell\n    mkdir /data/adb 0700 root root\n\nservice adbd /system/bin/adbd --root_seclabel=u:r:su:s0\n    class core\n    socket adbd seqpacket 660 system system\n    disabled\n    seclabel u:r:adbd:s0\n"
  },
  {
    "path": "manifest.xml",
    "content": "<manifest version=\"1.0\" type=\"device\" target-level=\"2\">\n    <hal format=\"hidl\">\n        <name>android.hardware.audio</name>\n        <transport>hwbinder</transport>\n        <version>4.0</version>\n        <interface>\n            <name>IDevicesFactory</name>\n            <instance>default</instance>\n        </interface>\n        <fqname>@4.0::IDevicesFactory/default</fqname>\n    </hal>\n    <hal format=\"hidl\">\n        <name>android.hardware.audio.effect</name>\n        <transport>hwbinder</transport>\n        <version>4.0</version>\n        <interface>\n            <name>IEffectsFactory</name>\n            <instance>default</instance>\n        </interface>\n        <fqname>@4.0::IEffectsFactory/default</fqname>\n    </hal>\n    <hal format=\"hidl\">\n        <name>android.hardware.configstore</name>\n        <transport>hwbinder</transport>\n        <version>1.1</version>\n        <interface>\n            <name>ISurfaceFlingerConfigs</name>\n            <instance>default</instance>\n        </interface>\n    </hal>\n    <hal format=\"hidl\">\n        <name>android.hardware.graphics.mapper</name>\n        <transport arch=\"64\">passthrough</transport>\n        <version>4.0</version>\n        <interface>\n            <name>IMapper</name>\n            <instance>default</instance>\n        </interface>\n    </hal>\n    <hal format=\"hidl\">\n        <name>android.hardware.memtrack</name>\n        <transport>hwbinder</transport>\n        <version>1.0</version>\n        <interface>\n            <name>IMemtrack</name>\n            <instance>default</instance>\n        </interface>\n    </hal>\n    <hal format=\"hidl\">\n        <name>android.hardware.bluetooth</name>\n        <transport>hwbinder</transport>\n        <version>1.0</version>\n        <interface>\n            <name>IBluetoothHci</name>\n            <instance>default</instance>\n        </interface>\n    </hal>\n    <hal format=\"hidl\">\n        <name>android.hardware.keymaster</name>\n        <transport>hwbinder</transport>\n        <version>3.0</version>\n        <interface>\n            <name>IKeymasterDevice</name>\n            <instance>default</instance>\n        </interface>\n    </hal>\n    <hal format=\"hidl\">\n        <name>android.hardware.camera.provider</name>\n        <transport>hwbinder</transport>\n        <version>2.5</version>\n        <interface>\n            <name>ICameraProvider</name>\n            <instance>external/0</instance>\n        </interface>\n    </hal>    \n</manifest>\n"
  },
  {
    "path": "overlay/RpFrameworkOverlay/Android.bp",
    "content": "runtime_resource_overlay {\n    name: \"RpFrameworkOverlay\",\n    certificate: \"platform\",\n    resource_dirs: [\"res\"],\n    product_specific: true,\n    sdk_version: \"current\",\n}\n"
  },
  {
    "path": "overlay/RpFrameworkOverlay/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.arpi.overlay.framework\"\n    android:versionCode=\"1\"\n    android:versionName=\"1.0\" >\n\n    <application android:hasCode=\"false\" />\n\n    <overlay\n        android:targetPackage=\"android\"\n        android:priority=\"0\"\n        android:isStatic=\"true\" />\n\n</manifest>\n"
  },
  {
    "path": "overlay/RpFrameworkOverlay/res/values/config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Control the behavior when the user long presses the home button.\n            0 - Nothing\n            1 - Launch all apps intent\n            2 - Launch assist intent\n            3 - Launch notification panel\n         This needs to match the constants in\n         policy/src/com/android/internal/policy/impl/PhoneWindowManager.java\n    -->\n    <integer name=\"config_longPressOnHomeBehavior\">0</integer>\n</resources>\n"
  },
  {
    "path": "overlay/RpFrameworkOverlay/res/xml/global_keys.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<global_keys version=\"1\">\n    <key keyCode=\"KEYCODE_F1\" component=\"com.arpi.rplauncher/.GlobalKeyReceiver\" />\n    <key keyCode=\"KEYCODE_F7\" component=\"com.arpi.rplauncher/.GlobalKeyReceiver\" />\n</global_keys>\n"
  },
  {
    "path": "rpi4.mk",
    "content": "#\n# Copyright 2020 Android-RPi Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit_only.mk)\nUSE_OEM_TV_APP := true\n$(call inherit-product, device/google/atv/products/atv_base.mk)\n\nPRODUCT_NAME := rpi4\nPRODUCT_DEVICE := rpi4\nPRODUCT_BRAND := arpi\nPRODUCT_MANUFACTURER := ARPi\nPRODUCT_MODEL := Raspberry Pi 4\n\ninclude frameworks/native/build/tablet-10in-xhdpi-2048-dalvik-heap.mk\n\nPRODUCT_PROPERTY_OVERRIDES += \\\n    debug.drm.mode.force=1280x720 \\\n    gralloc.drm.kms=/dev/dri/card0 \\\n    ro.opengles.version=196609 \\\n    ro.hardware.vulkan=broadcom \\\n    ro.hardware.egl=mesa \\\n    debug.stagefright.c2-poolmask=0x350000 \\\n    ro.vendor.v4l2_codec2.decode_concurrent_instances=4 \\\n    ro.hdmi.device_type=4 \\\n    wifi.interface=wlan0 \\\n    ro.rfkilldisabled=1\n\nPRODUCT_SOONG_NAMESPACES += external/v4l2_codec2\n\n# application packages\nPRODUCT_PACKAGES += \\\n    TvSettingsTwoPanel \\\n    DeskClock \\\n    RpLauncher\n\n# overlay packages\nPRODUCT_PACKAGES += \\\n    RpFrameworkOverlay\n\n# system packages\nPRODUCT_PACKAGES += \\\n    gralloc.rpi4 \\\n    vulkan.broadcom \\\n    memtrack.rpi4 \\\n    audio.primary.rpi4 \\\n    audio.usb.default \\\n    audio.r_submix.default \\\n    libc2plugin_store \\\n    wificond \\\n    wifilogd \\\n    wpa_supplicant \\\n    wpa_supplicant.conf \\\n    hostapd \\\n    libbt-vendor\n\n# graphics hal\nPRODUCT_PACKAGES += \\\n    libEGL_mesa \\\n    libGLESv1_CM_mesa \\\n    libGLESv2_mesa \\\n    libgallium_dri \\\n    libglapi\n\n# hardware/interfaces\nPRODUCT_PACKAGES += \\\n    android.hardware.graphics.allocator-service.arpi \\\n    android.hardware.graphics.mapper@4.0-impl.arpi \\\n    android.hardware.graphics.composer-service.arpi \\\n    android.hardware.camera.provider@2.5-external-service \\\n    android.hardware.audio@4.0-impl \\\n    android.hardware.audio.effect@4.0-impl \\\n    android.hardware.audio.service \\\n    android.hardware.keymaster@3.0-impl \\\n    android.hardware.keymaster@3.0-service \\\n    android.hardware.gatekeeper@1.0-service.software \\\n    android.hardware.memtrack@1.0-impl \\\n    android.hardware.memtrack@1.0-service \\\n    android.hardware.health@2.1-service \\\n    android.hardware.health@2.1-impl \\\n    android.hardware.health.storage@1.0-service \\\n    android.hardware.wifi@1.0-service \\\n    android.hardware.bluetooth@1.0-service \\\n    android.hardware.bluetooth@1.0-impl \\\n    android.hardware.configstore@1.1-service \\\n    android.hardware.tv.hdmi.connection-service \\\n    android.hardware.tv.hdmi.cec-service \\\n    android.hardware.tv.hdmi.earc-service \\\n    android.hardware.media.c2@1.0-service-v4l2 \\\n    hwservicemanager \\\n    vndservicemanager\n\n# system configurations\nPRODUCT_COPY_FILES := \\\n    hardware/broadcom/wlan/bcmdhd/config/wpa_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant_overlay.conf \\\n    frameworks/native/data/etc/android.hardware.vulkan.level-1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \\\n    frameworks/native/data/etc/android.hardware.vulkan.version-1_1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml \\\n    frameworks/native/data/etc/android.hardware.ethernet.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.ethernet.xml \\\n    frameworks/native/data/etc/android.hardware.usb.host.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.host.xml \\\n    frameworks/native/data/etc/android.hardware.hdmi.cec.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.hdmi.cec.xml \\\n    frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml \\\n    frameworks/native/data/etc/android.hardware.bluetooth.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth.xml \\\n    frameworks/native/data/etc/android.hardware.bluetooth_le.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth_le.xml \\\n    frameworks/native/data/etc/android.hardware.camera.external.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.external.xml \\\n    $(LOCAL_PATH)/etc/external_camera_config.xml:$(TARGET_COPY_OUT_VENDOR)/etc/external_camera_config.xml \\\n    $(LOCAL_PATH)/init.usb.rc:root/init.usb.rc \\\n    $(LOCAL_PATH)/init.rpi4.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.rpi4.rc \\\n    $(LOCAL_PATH)/init.rpi4.usb.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.rpi4.usb.rc \\\n    $(LOCAL_PATH)/ueventd.rc:$(TARGET_COPY_OUT_VENDOR)/etc/ueventd.rc \\\n    $(LOCAL_PATH)/fstab.rpi4:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.rpi4 \\\n    $(LOCAL_PATH)/fstab.rpi4:$(TARGET_COPY_OUT_RAMDISK)/fstab.rpi4 \\\n    $(LOCAL_PATH)/Generic.kl:$(TARGET_COPY_OUT_VENDOR)/usr/keylayout/Generic.kl \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43455-sdio.bin:root/lib/firmware/brcm/brcmfmac43455-sdio.bin \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43455-sdio.bin:$(TARGET_COPY_OUT_RAMDISK)/lib/firmware/brcm/brcmfmac43455-sdio.bin \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43455-sdio.clm_blob:root/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43455-sdio.clm_blob:$(TARGET_COPY_OUT_RAMDISK)/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43455-sdio.txt:root/lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43455-sdio.txt:$(TARGET_COPY_OUT_RAMDISK)/lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43456-sdio.bin:root/lib/firmware/brcm/brcmfmac43456-sdio.bin \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43456-sdio.bin:$(TARGET_COPY_OUT_RAMDISK)/lib/firmware/brcm/brcmfmac43456-sdio.bin \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43456-sdio.clm_blob:root/lib/firmware/brcm/brcmfmac43456-sdio.clm_blob \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43456-sdio.clm_blob:$(TARGET_COPY_OUT_RAMDISK)/lib/firmware/brcm/brcmfmac43456-sdio.clm_blob \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43456-sdio.txt:root/lib/firmware/brcm/brcmfmac43456-sdio.raspberrypi,400.txt \\\n    $(LOCAL_PATH)/firmware/brcm/brcmfmac43456-sdio.txt:$(TARGET_COPY_OUT_RAMDISK)/lib/firmware/brcm/brcmfmac43456-sdio.raspberrypi,400.txt \\\n    $(LOCAL_PATH)/firmware/brcm/BCM4345C0.hcd:root/lib/firmware/brcm/BCM4345C0.hcd \\\n    $(LOCAL_PATH)/firmware/brcm/BCM4345C5.hcd:root/lib/firmware/brcm/BCM4345C5.hcd \\\n    $(LOCAL_PATH)/bluetooth/bt_vendor.conf:system/etc/bluetooth/bt_vendor.conf \\\n    $(PRODUCT_COPY_FILES)\n\n# media configurations\nPRODUCT_COPY_FILES := \\\n    device/generic/goldfish/camera/media/profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles.xml \\\n    $(LOCAL_PATH)/etc/media_codecs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs.xml \\\n    frameworks/av/media/libeffects/data/audio_effects.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.conf \\\n    frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_audio.xml \\\n    frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_telephony.xml \\\n    frameworks/av/media/libstagefright/data/media_codecs_google_video.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_video.xml \\\n    frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml \\\n    frameworks/av/services/audiopolicy/config/a2dp_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_audio_policy_configuration.xml \\\n    frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \\\n    frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \\\n    frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \\\n    $(LOCAL_PATH)/etc/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml \\\n    frameworks/base/data/sounds/effects/ogg/Effect_Tick_48k.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/ui/Effect_Tick.ogg \\\n    frameworks/base/data/sounds/effects/ogg/camera_click_48k.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/ui/camera_click.ogg \\\n    $(LOCAL_PATH)/etc/codec2.vendor.ext.policy:$(TARGET_COPY_OUT_VENDOR)/etc/seccomp_policy/codec2.vendor.ext.policy \\\n    $(PRODUCT_COPY_FILES)\n\nPRODUCT_AAPT_PREF_CONFIG := tvdpi\nPRODUCT_CHARACTERISTICS := tv\n\n$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)\n"
  },
  {
    "path": "sepolicy/bluetooth.te",
    "content": "allow bluetooth rfkill_device:chr_file rw_file_perms;\nallow bluetooth vcio_device:chr_file rw_file_perms;\n"
  },
  {
    "path": "sepolicy/bootanim.te",
    "content": "gpu_access(bootanim)\n"
  },
  {
    "path": "sepolicy/cameraserver.te",
    "content": "allow cameraserver gpu_device:chr_file rw_file_perms;\ngpu_access(cameraserver)\n"
  },
  {
    "path": "sepolicy/device.te",
    "content": "type rfkill_device, dev_type, mlstrustedobject;\ntype vcio_device, dev_type, mlstrustedobject;\n"
  },
  {
    "path": "sepolicy/file_contexts",
    "content": "/dev/dri                        u:object_r:gpu_device:s0\n/dev/dri/card0                  u:object_r:gpu_device:s0\n/dev/dri/card1                  u:object_r:gpu_device:s0\n/dev/dri/renderD128             u:object_r:gpu_device:s0\n/dev/rfkill                     u:object_r:rfkill_device:s0\n/dev/vcio                       u:object_r:vcio_device:s0\n/dev/ttyAMA1                    u:object_r:hci_attach_dev:s0\n\n/sys/class/rfkill/rfkill0/state u:object_r:sysfs_bluetooth_writable:s0\n\n/sys/devices/platform/gpu/uevent                    u:object_r:sysfs_gpu:s0\n/sys/devices/platform/v3dbus/fec00000.v3d/uevent    u:object_r:sysfs_gpu:s0\n\n/vendor/bin/hw/android\\.hardware\\.gatekeeper@1\\.0-service.software        u:object_r:hal_gatekeeper_default_exec:s0\n\n/vendor/bin/hw/android\\.hardware\\.graphics\\.allocator-service\\.arpi  u:object_r:hal_graphics_allocator_default_exec:s0\n/vendor/bin/hw/android\\.hardware\\.graphics\\.composer-service\\.arpi   u:object_r:hal_graphics_composer_default_exec:s0\n/vendor/lib64/hw/android\\.hardware\\.graphics\\.mapper@4\\.0-impl\\.arpi\\.so    u:object_r:same_process_hal_file:s0\n\n/vendor/lib64/hw/vulkan\\.broadcom\\.so      u:object_r:same_process_hal_file:s0\n/vendor/lib64/hw/gralloc\\.rpi4\\.so         u:object_r:same_process_hal_file:s0\n/vendor/lib64/dri/libgallium_dri\\.so       u:object_r:same_process_hal_file:s0\n/vendor/lib64/libdrm\\.so                   u:object_r:same_process_hal_file:s0\n/vendor/lib64/libglapi\\.so                 u:object_r:same_process_hal_file:s0\n\n\n/vendor/bin/hw/android\\.hardware\\.media\\.c2@1\\.0-service-v4l2-64  u:object_r:mediacodec_exec:s0\n"
  },
  {
    "path": "sepolicy/hal_camera_default.te",
    "content": "vndbinder_use(hal_camera_default);\nallow hal_camera_default gpu_device:chr_file rw_file_perms;\ngpu_access(hal_camera_default)\n"
  },
  {
    "path": "sepolicy/hal_graphics_allocator_default.te",
    "content": "gpu_access(hal_graphics_allocator_default)\n"
  },
  {
    "path": "sepolicy/hal_graphics_composer_default.te",
    "content": "vndbinder_use(hal_graphics_composer_default)\ngpu_access(hal_graphics_composer_default)\n"
  },
  {
    "path": "sepolicy/init.te",
    "content": "allow init kernel:system module_request;\nallow init tmpfs:lnk_file create;\n"
  },
  {
    "path": "sepolicy/kernel.te",
    "content": "allow kernel self:capability mknod;\nallow kernel self:system module_request;\nallow kernel device:dir { create write add_name remove_name rmdir };\nallow kernel device:chr_file { create setattr getattr unlink };\n"
  },
  {
    "path": "sepolicy/mediacodec.te",
    "content": "allow mediacodec gpu_device:chr_file rw_file_perms;\ngpu_access(mediacodec)\n"
  },
  {
    "path": "sepolicy/mediaserver.te",
    "content": "allow mediaserver gpu_device:dir search;\n"
  },
  {
    "path": "sepolicy/mediaswcodec.te",
    "content": "allow mediaswcodec gpu_device:chr_file rw_file_perms;\ngpu_access(mediaswcodec)\n"
  },
  {
    "path": "sepolicy/netd.te",
    "content": "dontaudit netd self:capability sys_module;\nallow netd kernel:system module_request;\n"
  },
  {
    "path": "sepolicy/platform_app.te",
    "content": "gpu_access(platform_app)\n"
  },
  {
    "path": "sepolicy/priv_app.te",
    "content": "gpu_access(priv_app)\n"
  },
  {
    "path": "sepolicy/surfaceflinger.te",
    "content": "gpu_access(surfaceflinger)\n"
  },
  {
    "path": "sepolicy/system_app.te",
    "content": "gpu_access(system_app)\n"
  },
  {
    "path": "sepolicy/system_server.te",
    "content": "gpu_access(system_server)\nallow system_server self:capability sys_module;\n"
  },
  {
    "path": "sepolicy/te_macros",
    "content": "#####################################\n# gpu_access(client_domain)\n# Allow client_domain to communicate with the GPU\ndefine(`gpu_access', `\nallow $1 gpu_device:dir { getattr open read search };\nallow $1 sysfs_gpu:file { getattr open read };\n')\n"
  },
  {
    "path": "sepolicy/untrusted_app_all.te",
    "content": "gpu_access(untrusted_app_all)\n"
  },
  {
    "path": "ueventd.rc",
    "content": "/dev/ttyAMA1              0660   bluetooth  bluetooth\n/dev/rfkill               0660   bluetooth  bluetooth\n/dev/vcio                 0660   system     bluetooth\n/dev/ion                  0664   system     system\n/dev/video0               0660   system     camera\n/dev/video1               0660   system     camera\n/dev/video10              0660   media      media\n/dev/dma_heap/linux,cma   0666   system     graphics\n"
  }
]