# Copyright 1999-2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id$ DESCRIPTION="Firmware files needed for operation of some dvb-devices" HOMEPAGE="http://www.linuxtv.org" LICENSE="freedist ISC all-rights-reserved" SLOT="0" KEYWORDS="~amd64 ~x86" IUSE="" RESTRICT="mirror bindist" DEPEND="app-arch/unrar" RDEPEND="" S="${WORKDIR}" # Files which can be fetched from linuxtv.org PACKET_NAME=dvb-firmwares-1.tar.bz2 PACKET_SRC_URI="http://www.linuxtv.org/downloads/firmware/${PACKET_NAME}" TEVII_NAME=Tevii_linuxdriver_0815.rar TEVII_SRC_URI="http://tevii.com/${TEVII_NAME}" get_dvb_firmware="${FILESDIR}/get_dvb_firmware-${PV}" # from https://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6-stable.git;a=history;f=Documentation/dvb/get_dvb_firmware FW_USE_FLAGS=( # packet "usb-a800" "dibusb-usb2" "usb-dtt200u" "usb-umt" "usb-vp702x" "usb-vp7045" "usb-wt220u" "dibusb-usb1" "or51211" "or51132" "or51132" "usb-dw2104" "usb-dw2104" # own URL "ttpci" "bcm3510" "usb-wt220u" "usb-wt220u" "usb-dib0700" "sp887x" "af9005" "cx231xx" "cx18" "cx18" "cx18" "cx23885" "cx23885" "pvrusb2" "usb-bluebird" "tda10045" # get_dvb_firmware "sp8870" "tda10046" "tda10046lifeview" "ttusb-dec" "ttusb-dec" "ttusb-dec" "opera1" "opera1" "vp7041" "nxt200x" "mpc718" "usb-af9015" ) FW_FILES=( # packet "dvb-usb-avertv-a800-02.fw" "dvb-usb-dibusb-6.0.0.8.fw" "dvb-usb-dtt200u-01.fw" "dvb-usb-umt-010-02.fw" "dvb-usb-vp702x-01.fw" "dvb-usb-vp7045-01.fw" "dvb-usb-wt220u-01.fw" "dvb-usb-dibusb-5.0.0.11.fw" "dvb-fe-or51211.fw" "dvb-fe-or51132-qam.fw" "dvb-fe-or51132-vsb.fw" "dvb-usb-dw2104.fw" "dvb-fe-cx24116.fw" # own URL "dvb-ttpci-01.fw" "dvb-fe-bcm3510-01.fw" "dvb-usb-wt220u-02.fw" "dvb-usb-wt220u-fc03.fw" "dvb-usb-dib0700-1.20.fw" "dvb-fe-sp887x.fw" "af9005.fw" "v4l-cx231xx-avcore-01.fw" "v4l-cx23418-apu.fw" "v4l-cx23418-cpu.fw" "v4l-cx23418-dig.fw" "v4l-cx23885-avcore-01.fw" "v4l-cx23885-enc.fw" "v4l-cx25840.fw" "dvb-usb-bluebird-01.fw" "dvb-fe-tda10045.fw" # get_dvb_firmware "dvb-fe-sp8870.fw" "dvb-fe-tda10046.fw" "dvb-fe-tda10046.fw" "dvb-ttusb-dec-2000t.fw" "dvb-ttusb-dec-2540t.fw" "dvb-ttusb-dec-3000s.fw" "dvb-usb-opera1-fpga-01.fw" "dvb-usb-opera-01.fw" "dvb-vp7041-2.422.fw" "dvb-fe-nxt2004.fw" "dvb-cx18-mpc718-mt352.fw" "dvb-usb-af9015.fw" ) FW_GET_PARAMETER=( # packet "-" "-" "-" "-" "-" "-" "-" "-" "-" "-" "-" "-" "-" # own URL "-" "-" "-" "-" "-" "-" "-" "-" "-" "-" "-" "-" "-" "-" "-" "-" # get_dvb_firmware "sp8870" "tda10046" "tda10046lifeview" "dec2000t" "dec2540t" "dec3000s" "opera1" "-" "vp7041" "nxt2004" "mpc718" "af9015" ) FW_URLS=( # packet "${PACKET_SRC_URI}" "${PACKET_SRC_URI}" "${PACKET_SRC_URI}" "${PACKET_SRC_URI}" "${PACKET_SRC_URI}" "${PACKET_SRC_URI}" "${PACKET_SRC_URI}" "${PACKET_SRC_URI}" "${PACKET_SRC_URI}" "${PACKET_SRC_URI}" "${PACKET_SRC_URI}" "${TEVII_SRC_URI}" "${TEVII_SRC_URI}" # own URL "http://www.escape-edv.de/endriss/firmware/dvb-ttpci-01.fw-fc2624" "http://www.linuxtv.org/downloads/firmware/dvb-fe-bcm3510-01.fw" "http://www.linuxtv.org/downloads/firmware/dvb-usb-wt220u-02.fw" "http://home.arcor.de/efocht/dvb-usb-wt220u-fc03.fw" "http://www.wi-bw.tfh-wildau.de/~pboettch/home/files/dvb-usb-dib0700-1.20.fw" "http://peterdamen.com/dvb-fe-sp887x.fw" "http://ventoso.org/luca/af9005/af9005.fw" "http://linuxtv.org/downloads/firmware/v4l-cx231xx-avcore-01.fw" "http://linuxtv.org/downloads/firmware/v4l-cx23418-apu.fw" "http://linuxtv.org/downloads/firmware/v4l-cx23418-cpu.fw" "http://linuxtv.org/downloads/firmware/v4l-cx23418-dig.fw" "http://linuxtv.org/downloads/firmware/v4l-cx23885-avcore-01.fw" "http://linuxtv.org/downloads/firmware/v4l-cx23885-enc.fw" "http://linuxtv.org/downloads/firmware/v4l-cx25840.fw" "http://linuxtv.org/downloads/firmware/dvb-usb-bluebird-01.fw" "http://www.fireburn.co.uk/dvb-fe-tda10045.fw" # get_dvb_firmware "http://2.download.softwarepatch.pl/1619edb0dcb493dd5337b94a1f79c3f6/tt_Premium_217g.zip" "http://www.tt-download.com/download/updates/219/TT_PCI_2.19h_28_11_2006.zip" "http://www.lifeview.hk/dbimages/document/7%5Cdrv_2.11.02.zip" "http://hauppauge.lightpath.net/de/dec217g.exe" "http://hauppauge.lightpath.net/de/dec217g.exe" "http://hauppauge.lightpath.net/de/dec217g.exe" "http://www.informatik.uni-leipzig.de/~hlawit/dvb/2830SCap2.sys" "http://www.informatik.uni-leipzig.de/~hlawit/dvb/2830SLoad2.sys" "http://www.twinhan.com/files/AW/Software/TwinhanDTV2.608a.zip" "http://www.avermedia-usa.com/support/Drivers/AVerTVHD_MCE_A180_Drv_v1.2.2.16.zip" "ftp://ftp.work.acer-euro.com/desktop/aspire_idea510/vista/Drivers/Yuan%20MPC718%20TV%20Tuner%20Card%202.13.10.1016.zip" "http://www.ite.com.tw/EN/Services/download.ashx?file=57" ) SRC_URI="" NEGATIVE_USE_FLAGS="" NEGATIVE_END_BRACKETS="" ALL_URLS="" for ((CARD=0; CARD < ${#FW_USE_FLAGS[*]}; CARD++)) do URL="${FW_URLS[CARD]}" if [[ -z ${URL} ]]; then echo "missing url for ${FW_USE_FLAGS[CARD]}" continue fi SRC_URI="${SRC_URI} dvb_cards_${FW_USE_FLAGS[CARD]}? ( ${URL} )" IUSE="${IUSE} dvb_cards_${FW_USE_FLAGS[CARD]}" NEGATIVE_USE_FLAGS="${NEGATIVE_USE_FLAGS} !dvb_cards_${FW_USE_FLAGS[CARD]}? ( " NEGATIVE_END_BRACKETS="${NEGATIVE_END_BRACKETS} )" ALL_URLS="${ALL_URLS} ${URL}" GET_PARAM="${FW_GET_PARAMETER[CARD]}" if [[ ${GET_PARAM} != "-" ]]; then # all firmwares extracted by get_dvb_firmware need unzip DEPEND="${DEPEND} dvb_cards_${FW_USE_FLAGS[CARD]}? ( app-arch/unzip )" fi done SRC_URI="${SRC_URI} ${NEGATIVE_USE_FLAGS} ${ALL_URLS} ${NEGATIVE_END_BRACKETS}" DEPEND="${DEPEND} ${NEGATIVE_USE_FLAGS} app-arch/unzip ${NEGATIVE_END_BRACKETS}" install_dvb_card() { if [[ -z ${DVB_CARDS} ]]; then # install (almost) all firmware files # do not install this one due to conflicting filenames [[ "${1}" != "tda10046lifeview" ]] else # Check if this flag is set use dvb_cards_${1} fi } pkg_setup() { #echo SRC_URI=${SRC_URI} #echo DEPEND=${DEPEND} if has tda1004x ${DVB_CARDS}; then eerror eerror "DVB_CARDS flag tda1004x has been split into" eerror "tda10045, tda10046 and tda10046lifeview". eerror eerror "But beware that you cannot enable tda10046 and" eerror "tda10046lifeview at the same time." fi if [[ -z ${DVB_CARDS} ]]; then elog elog "DVB_CARDS is not set, installing all available firmware files." elog "To save bandwidth please consider setting the DVB_CARDS variable" elog "in ${ROOT%/}/etc/make.conf. This way only the firmwares you own" elog "the hardware will be installed." fi # according to https://devmanual.gentoo.org/general-concepts/use-flags/index.html # we should not die here. However, there is no sensible fallback choice to make # because the user may have either the one or the other. WYGIWYG if use dvb_cards_tda10046 && use dvb_cards_tda10046lifeview; then eerror eerror "You cannot have both tda10046 and tda10046lifeview in DVB_CARDS" eerror "because of colliding firmware filenames (dvb-fe-tda10046.fw)." eerror "Sorry." die "Conflicting values for DVB_CARDS set." fi elog elog "List of possible card-names to use for DVB_CARDS:" echo ${FW_USE_FLAGS[*]}| tr ' ' '\n' | sort | uniq | fmt \ | while read line; do elog " ${line}" done elog elog "If you need another firmware file and want it included create a bug" elog "at bugs.gentoo.org." elog "In case some firmware sources are not fetchable please try again at" elog "a later time and if it still does not fetch report a bug. If there" elog "is no alternative source or an update to the firmware available we" elog "have to remove it from the ebuild and you are on your own." } src_unpack() { local distfile # link all downloaded files to ${S} for distfile in ${A}; do [[ -L ${distfile} ]] || ln -s ${DISTDIR}/${distfile} ${distfile} done # unpack firmware-packet if has ${PACKET_NAME} ${A}; then unpack ${PACKET_NAME} fi # unpack tevii packet if has ${TEVII_NAME} ${A}; then unpack ${TEVII_NAME} fi if [[ -z ${DVB_CARDS} ]] || use dvb_cards_mpc718 ; then mv Yuan%20MPC718%20TV%20Tuner%20Card%202.13.10.1016.zip "Yuan MPC718 TV Tuner Card 2.13.10.1016.zip" fi if [[ -z ${DVB_CARDS} ]] || use dvb_cards_ttpci ; then mv dvb-ttpci-01.fw-fc2624 dvb-ttpci-01.fw fi if [[ -z ${DVB_CARDS} ]] || use dvb_cards_usb-dw2104 ; then mv tevii_linuxdriver_0815/fw/dvb-usb-s650.fw dvb-usb-dw2104.fw mv tevii_linuxdriver_0815/fw/dvb-fe-cx24116.fw ./ fi local script_v=${PV} # Adjust temp-dir of get_dvb_firmware sed "${FILESDIR}"/get_dvb_firmware-${script_v} \ -e "s#/tmp#${T}#g" > get_dvb_firmware chmod a+x get_dvb_firmware # extract the firmware-files for ((CARD=0; CARD < ${#FW_USE_FLAGS[*]}; CARD++)) do install_dvb_card ${FW_USE_FLAGS[CARD]} || continue GET_PARAM=${FW_GET_PARAMETER[CARD]} if [[ ${GET_PARAM} != "-" ]]; then [[ -f ${FW_FILES[CARD]} ]] && ewarn "Already existing: ${FW_FILES[CARD]}" elog "Extracting ${FW_FILES[CARD]}" ./get_dvb_firmware ${GET_PARAM} fi done } src_install() { insinto /lib/firmware for ((CARD=0; CARD < ${#FW_USE_FLAGS[*]}; CARD++)) do if install_dvb_card ${FW_USE_FLAGS[CARD]}; then local file=${FW_FILES[CARD]} [[ -f ${file} ]] || die "File ${file} does not exist!" doins ${file} fi done }