# Copyright 2018 The ChromiumOS Authors
# Distributed under the terms of the GNU General Public License v2
#
# @ECLASS: cbi-image.eclass
# @MAINTAINER:
# Chromium OS Firmware Team
# @BUGREPORTS:
# Please report bugs via http://crbug.com/new (with label Build)
# @VCSURL: https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/eclass/@ECLASS@
# @BLURB: helper eclass for building Cros Board Info (CBI) images
# @DESCRIPTION:
# CBI is the Chrome OS standard data format for storing board version, OEM,
# SKU, etc. This library provides helper functions for each board to create
# custom CBI images.

# Check for EAPI 5+
case "${EAPI:-0}" in
5|6) ;;
*) die "unsupported EAPI (${EAPI}) in eclass (${ECLASS})" ;;
esac

# @ECLASS-VARIABLE: CROS_CBI_IMAGE_DIR
# @DESCRIPTION: The directory where output images are stored.
CROS_CBI_IMAGE_DIR="/firmware/cbi"

# @ECLASS-VARIABLE: EEPROM_SIZE
# @DESCRIPTION: The size of the output image files in bytes.
EEPROM_SIZE=256

# @FUNCTION: make_cbi
# @USAGE: <Prefix for output files> <oem id> <sku id>
# @DESCRIPTION: Build one CBI image
make_cbi() {
	[[ $# -ne 3 ]] && die "Usage: ${FUNCNAME} <prefix> <oem id> <sku id>"
	local prefix="$1"
	local oemid="$2"
	local skuid="$3"

	cbi-util create --file "${prefix}_${skuid%%:*}.bin" \
		--size "${EEPROM_SIZE}" --board_version "${BOARD_VERSION}" \
		--oem_id "${oemid}" --sku_id "${skuid}" \
		|| die "Failed to create CBI image"
}

# @FUNCTION: make_all_cbi
# @USAGE: <oem name> <oem id>
# @DESCRIPTION:
# Build CBI images for all SKU IDs listed in SKU_IDS_<oem name> array, which
# is supposed to be provided by the caller.
make_all_cbi() {
	[[ $# -ne 2 ]] && die "Usage: ${FUNCNAME} <oem name> <oem id>"
	local oem_name="$1"
	local skuids="SKU_IDS_${oem_name}[@]"
	local oemid="$2"
	local i

	for i in "${!skuids}"; do
		make_cbi "cbi_${oem_name}" "${oemid}" "${i}"
	done
}

# @FUNCTION: cbi-image_install
# @USAGE:
# @DESCRIPTION: Install the CBI image files to $CROS_CBI_IMAGE_DIR
cbi-image_install() {
	[[ $# -ne 0 ]] && die "Usage: ${FUNCNAME}"
	insinto "${CROS_CBI_IMAGE_DIR}"
	doins cbi_*.bin
}