# Copyright 2018 The Chromium OS Authors. All rights reserved.
# 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/+/master/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
}