# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2

# Original Author: The Chromium OS Authors <chromium-os-dev@chromium.org>
# Purpose: Install Gobi firmware for Chromium OS
# See:
# https://sites.google.com/a/google.com/chromeos/for-team-members/systems/gobi3kfirmwaretarball

inherit cros-binary 

# @ECLASS-VARIABLE: GOBI_FIRMWARE_VID
# @DESCRIPTION:
# OEM Vendor ID
: ${GOBI_FIRMWARE_VID:=}

# @ECLASS-VARIABLE: GOBI_FIRMWARE_PID
# @DESCRIPTION:
# OEM Product ID
: ${GOBI_FIRMWARE_PID:=}

# @ECLASS-VARIABLE: GOBI_FIRMWARE_HASH
# @DESCRIPTION:
# Tarball hash
: ${GOBI_FIRMWARE_HASH:=}

# @ECLASS-VARIABLE: GOBI_FIRMWARE_CARRIERS
# @DESCRIPTION:
# Install firmware for this list of carrier names.
: ${GOBI_FIRMWARE_CARRIERS:=}

# Check for EAPI 2 or 3
case "${EAPI:-0}" in
	3|2) ;;
	1|0|:) DEPEND="EAPI-UNSUPPORTED" ;;
esac

gobi3k-firmware_src_unpack() {
  mkdir -p ${S}
  local fn="${PN}-${GOBI_FIRMWARE_VID}:${GOBI_FIRMWARE_PID}"
        fn="${fn}-${GOBI_FIRMWARE_HASH}.tar.bz2"
  CROS_BINARY_URI="${URI_BASE}/${fn}"
  cros-binary_src_unpack
  local target="${CROS_BINARY_STORE_DIR}/${fn}"
  cp $target "${S}"
}

gobi3k-firmware_install_firmware_files() {
  local vid=${GOBI_FIRMWARE_VID}
  local pid=${GOBI_FIRMWARE_PID}
  local hash=${GOBI_FIRMWARE_HASH}
  local fwid=${vid}:${pid}
  local firmware_install_dir=${D}/opt/Qualcomm/firmware/${fwid}

  mkdir -p firmware
  # tar rudely interprets x:y as a host:path specifier (!?) and tries to ssh
  # to it on your behalf (!!), so...
  tar -C firmware -xvj < gobi3k-firmware-${fwid}-${hash}.tar.bz2
  local base_firmware=firmware/${fwid}

  install -d ${firmware_install_dir} ${udev_rules_install_dir}

  for carrier in ${GOBI_FIRMWARE_CARRIERS} UMTS ; do
    cp -af ${base_firmware}/${carrier} ${firmware_install_dir}
  done

  find ${firmware_install_dir}/${oem} -type f -exec chmod 444 {} \;
  find ${firmware_install_dir}/${oem} -type d -exec chmod 555 {} \;
}

gobi3k-firmware_src_install() {
  # Verify that eclass variables are set
  [ -z "${GOBI_FIRMWARE_VID}" ] && die "Must specify GOBI_FIRMWARE_VID"
  [ -z "${GOBI_FIRMWARE_PID}" ] && die "Must specify GOBI_FIRMWARE_PID"
  [ -z "${GOBI_FIRMWARE_HASH}" ] && die "Must specify GOBI_FIRMWARE_HASH"
  [ -z "${GOBI_FIRMWARE_CARRIERS}" ] &&
    die "Must specify GOBI_FIRMWARE_CARRIERS"

  gobi3k-firmware_install_firmware_files
}

EXPORT_FUNCTIONS src_unpack src_install
