diff --git a/Makefile.am b/Makefile.am index 3ce6965..69ed515 100644 --- a/Makefile.am +++ b/Makefile.am @@ -47,6 +47,11 @@ SUBDIRS += libarmbox libstb_hal_la_LIBADD += \ libarmbox/libarmbox.la else +if BOXMODEL_MULTIBOXSE +SUBDIRS += libarmbox +libstb_hal_la_LIBADD += \ + libarmbox/libarmbox.la +else if BOXMODEL_OSMINI4K SUBDIRS += libarmbox libstb_hal_la_LIBADD += \ @@ -71,6 +76,7 @@ endif endif endif endif +endif if !ENABLE_GSTREAMER_10 SUBDIRS += libeplayer3 libstb_hal_la_LIBADD += \ diff --git a/acinclude.m4 b/acinclude.m4 index 599c5ef..014c249 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -90,7 +90,7 @@ AC_ARG_WITH(boxmodel, AS_HELP_STRING([--with-boxmodel], [valid for generic: generic, raspi]) AS_HELP_STRING([], [valid for spark: spark, spark7162]) AS_HELP_STRING([], [valid for duckbox: ufs910, ufs912, ufs913, ufs922, atevio7500, fortis_hdbox, octagon1008, cuberevo, cuberevo_mini, cuberevo_mini2, cuberevo_250hd, cuberevo_2000hd, cuberevo_3000hd, ipbox9900, ipbox99, ipbox55, tf7700]) -AS_HELP_STRING([], [valid for armbox: hd60, hd61, hd51, bre2ze4k, h7, osmini4k, osmio4k, osmio4kplus, vusolo4k, vuduo4k, vuduo4kse, vuultimo4k, vuuno4k, vuuno4kse, vuzero4k]) +AS_HELP_STRING([], [valid for armbox: hd60, hd61, multiboxse, hd51, bre2ze4k, h7, osmini4k, osmio4k, osmio4kplus, vusolo4k, vuduo4k, vuduo4kse, vuultimo4k, vuuno4k, vuuno4kse, vuzero4k]) AS_HELP_STRING([], [valid for mipsbox: vuduo, vuduo2, gb800se, osnino, osninoplus, osninopro]), [case "${withval}" in generic|raspi) @@ -114,7 +114,7 @@ AS_HELP_STRING([], [valid for mipsbox: vuduo, vuduo2, gb800se, osnino, osninoplu AC_MSG_ERROR([unknown model $withval for boxtype $BOXTYPE]) fi ;; - hd60|hd61|hd51|bre2ze4k|h7|osmini4k|osmio4k|osmio4kplus|vusolo4k|vuduo4k|vuduo4kse|vuultimo4k|vuuno4k|vuuno4kse|vuzero4k) + hd60|hd61|multiboxse|hd51|bre2ze4k|h7|osmini4k|osmio4k|osmio4kplus|vusolo4k|vuduo4k|vuduo4kse|vuultimo4k|vuuno4k|vuuno4kse|vuzero4k) if test "$BOXTYPE" = "armbox"; then BOXMODEL="$withval" else @@ -175,6 +175,7 @@ AM_CONDITIONAL(BOXMODEL_TF7700, test "$BOXMODEL" = "tf7700") # armbox AM_CONDITIONAL(BOXMODEL_HD60, test "$BOXMODEL" = "hd60") AM_CONDITIONAL(BOXMODEL_HD61, test "$BOXMODEL" = "hd61") +AM_CONDITIONAL(BOXMODEL_MULTIBOXSE, test "$BOXMODEL" = "multiboxse") AM_CONDITIONAL(BOXMODEL_HD51, test "$BOXMODEL" = "hd51") AM_CONDITIONAL(BOXMODEL_BRE2ZE4K, test "$BOXMODEL" = "bre2ze4k") @@ -269,6 +270,8 @@ elif test "$BOXMODEL" = "hd60"; then AC_DEFINE(BOXMODEL_HD60, 1, [hd60]) elif test "$BOXMODEL" = "hd61"; then AC_DEFINE(BOXMODEL_HD61, 1, [hd61]) +elif test "$BOXMODEL" = "multiboxse"; then + AC_DEFINE(BOXMODEL_MULTIBOXSE, 1, [multiboxse]) elif test "$BOXMODEL" = "hd51"; then AC_DEFINE(BOXMODEL_HD51, 1, [hd51]) @@ -354,7 +357,7 @@ AM_CONDITIONAL(BOXMODEL_VUPLUS_MIPS, test "$vuplus_mips" = "true") # all hisilicon BOXMODELs case "$BOXMODEL" in - hd60|hd61) + hd60|hd61|multiboxse) AC_DEFINE(BOXMODEL_HISILICON, 1, [hisilicon]) hisilicon=true ;; diff --git a/common/Makefile.am b/common/Makefile.am index e847a54..af1dac9 100644 --- a/common/Makefile.am +++ b/common/Makefile.am @@ -35,6 +35,10 @@ if BOXMODEL_HD60 libcommon_la_SOURCES = \ ca.cpp else +if BOXMODEL_MULTIBOXSE +libcommon_la_SOURCES = \ + ca.cpp +else if BOXMODEL_OSMIO4K libcommon_la_SOURCES = \ ca.cpp @@ -48,6 +52,7 @@ libcommon_la_SOURCES = \ endif endif endif +endif else libcommon_la_SOURCES = \ ca.cpp diff --git a/include/ca_hal.h b/include/ca_hal.h index 71217e6..a2f124d 100644 --- a/include/ca_hal.h +++ b/include/ca_hal.h @@ -2,6 +2,7 @@ || HAVE_MIPS_HARDWARE \ || (HAVE_ARM_HARDWARE \ && !BOXMODEL_HD60 \ + && !BOXMODEL_MULTIBOXSE \ && !BOXMODEL_OSMIO4K \ && !BOXMODEL_OSMIO4KPLUS \ ) diff --git a/include/cs_api.h b/include/cs_api.h index 1336743..89836f4 100644 --- a/include/cs_api.h +++ b/include/cs_api.h @@ -27,6 +27,7 @@ inline void cs_api_exit() || HAVE_MIPS_HARDWARE \ || (HAVE_ARM_HARDWARE \ && !BOXMODEL_HD60 \ + && !BOXMODEL_MULTIBOXSE \ && !BOXMODEL_OSMIO4K \ && !BOXMODEL_OSMIO4KPLUS \ ) diff --git a/include/hardware_caps.h b/include/hardware_caps.h index 50144db..0492e83 100644 --- a/include/hardware_caps.h +++ b/include/hardware_caps.h @@ -30,6 +30,7 @@ typedef struct hw_caps int has_SCART; int has_SCART_input; int has_YUV_cinch; + int can_pip; int can_cpufreq; int can_shutdown; int can_cec; diff --git a/libarmbox/hardware_caps.c b/libarmbox/hardware_caps.c index 64b08e1..46354b9 100644 --- a/libarmbox/hardware_caps.c +++ b/libarmbox/hardware_caps.c @@ -29,8 +29,10 @@ hw_caps_t *get_hwcaps(void) memset(&caps, 0, sizeof(hw_caps_t)); + if (access("/dev/dvb/adapter0/video1", F_OK) != -1) + caps.can_pip = 1; + #if BOXMODEL_VUSOLO4K - initialized = 1; caps.has_CI = 1; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -52,7 +54,6 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxarch, "BCM7376"); #endif #if BOXMODEL_VUDUO4K - initialized = 1; caps.has_CI = 2; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -75,7 +76,6 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxarch, "BCM7278"); #endif #if BOXMODEL_VUDUO4KSE - initialized = 1; caps.has_CI = 2; caps.can_cec = 1; caps.can_shutdown = 1; @@ -97,7 +97,6 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxarch, "BCM7444S"); #endif #if BOXMODEL_VUULTIMO4K - initialized = 1; caps.has_CI = 2; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -120,7 +119,6 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxarch, "BCM7444S"); #endif #if BOXMODEL_VUZERO4K - initialized = 1; caps.has_CI = 1; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -140,7 +138,6 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxarch, "BCM72604"); #endif #if BOXMODEL_VUUNO4KSE - initialized = 1; caps.has_CI = 1; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -163,7 +160,6 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxarch, "BCM7252S"); #endif #if BOXMODEL_VUUNO4K - initialized = 1; caps.has_CI = 1; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -183,7 +179,6 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxarch, "BCM7252S"); #endif #if BOXMODEL_HD51 - initialized = 1; caps.has_CI = 1; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -203,48 +198,7 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxname, "HD51"); strcpy(caps.boxarch, "BCM7251S"); #endif -#if BOXMODEL_HD60 - initialized = 1; - caps.has_CI = 0; - caps.can_cec = 1; - caps.can_cpufreq = 0; - caps.can_shutdown = 1; - caps.display_xres = 4; - caps.display_type = HW_DISPLAY_LED_NUM; - caps.display_can_deepstandby = 0; - caps.display_can_set_brightness = 1; - caps.display_can_umlauts = 0; - caps.display_has_statusline = 0; - caps.display_has_colon = 1; - caps.has_button_timer = 1; - caps.has_button_vformat = 0; - caps.has_HDMI = 1; - strcpy(caps.startup_file, "STARTUP_LINUX"); - strcpy(caps.boxvendor, "AX"); - strcpy(caps.boxname, "HD60"); - strcpy(caps.boxarch, "HI3798M"); -#endif -#if BOXMODEL_HD61 - initialized = 1; - caps.has_CI = 2; - caps.can_cec = 1; - caps.can_shutdown = 1; - caps.display_xres = 4; - caps.display_type = HW_DISPLAY_LED_NUM; - caps.display_can_deepstandby = 0; - caps.display_can_set_brightness = 1; - caps.display_can_umlauts = 0; - caps.display_has_statusline = 0; - caps.has_button_timer = 1; - caps.has_button_vformat = 0; - caps.has_HDMI = 1; - strcpy(caps.startup_file, "STARTUP_LINUX"); - strcpy(caps.boxvendor, "AX"); - strcpy(caps.boxname, "HD61"); - strcpy(caps.boxarch, "HI3798M"); -#endif #if BOXMODEL_BRE2ZE4K - initialized = 1; caps.has_CI = 1; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -265,7 +219,6 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxarch, "BCM7251S"); #endif #if BOXMODEL_H7 - initialized = 1; caps.has_CI = 1; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -285,8 +238,65 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxname, "Zgemma H7"); strcpy(caps.boxarch, "BCM7251S"); #endif +#if BOXMODEL_HD60 + caps.has_CI = 0; + caps.can_cec = 1; + caps.can_cpufreq = 0; + caps.can_shutdown = 1; + caps.display_xres = 4; + caps.display_type = HW_DISPLAY_LED_NUM; + caps.display_can_deepstandby = 0; + caps.display_can_set_brightness = 1; + caps.display_can_umlauts = 0; + caps.display_has_statusline = 0; + caps.display_has_colon = 1; + caps.has_button_timer = 1; + caps.has_button_vformat = 0; + caps.has_HDMI = 1; + strcpy(caps.startup_file, "STARTUP_LINUX"); + strcpy(caps.boxvendor, "AX"); + strcpy(caps.boxname, "HD60"); + strcpy(caps.boxarch, "HI3798M"); +#endif +#if BOXMODEL_HD61 + caps.has_CI = 2; + caps.can_cec = 1; + caps.can_shutdown = 1; + caps.display_xres = 4; + caps.display_type = HW_DISPLAY_LED_NUM; + caps.display_can_deepstandby = 0; + caps.display_can_set_brightness = 1; + caps.display_can_umlauts = 0; + caps.display_has_statusline = 0; + caps.has_button_timer = 1; + caps.has_button_vformat = 0; + caps.has_HDMI = 1; + strcpy(caps.startup_file, "STARTUP_LINUX"); + strcpy(caps.boxvendor, "AX"); + strcpy(caps.boxname, "HD61"); + strcpy(caps.boxarch, "HI3798M"); +#endif +#if BOXMODEL_MULTIBOXSE + caps.has_CI = 0; + caps.can_cec = 1; + caps.can_cpufreq = 0; + caps.can_shutdown = 1; + caps.display_xres = 4; + caps.display_type = HW_DISPLAY_LED_ONLY; + caps.display_can_deepstandby = 0; + caps.display_can_set_brightness = 1; + caps.display_can_umlauts = 0; + caps.display_has_statusline = 0; + caps.display_has_colon = 1; + caps.has_button_timer = 1; + caps.has_button_vformat = 0; + caps.has_HDMI = 1; + strcpy(caps.startup_file, "STARTUP_LINUX"); + strcpy(caps.boxvendor, "Maxytec"); + strcpy(caps.boxname, "Multibox SE 4K"); + strcpy(caps.boxarch, "HI3798M"); +#endif #if BOXMODEL_OSMINI4K - initialized = 1; caps.has_CI = 0; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -301,12 +311,12 @@ hw_caps_t *get_hwcaps(void) caps.has_button_timer = 1; caps.has_button_vformat = 1; caps.has_HDMI = 1; + strcpy(caps.startup_file, "STARTUP"); strcpy(caps.boxvendor, "Edision"); strcpy(caps.boxname, "OS mini 4K"); strcpy(caps.boxarch, "BCM72604"); #endif #if BOXMODEL_OSMIO4K - initialized = 1; caps.has_CI = 0; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -327,7 +337,6 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxarch, "BCM72604"); #endif #if BOXMODEL_OSMIO4KPLUS - initialized = 1; caps.has_CI = 0; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -348,5 +357,7 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxname, "OS mio+ 4K"); strcpy(caps.boxarch, "BCM72604"); #endif + + initialized = 1; return ∩︀ } diff --git a/libduckbox/hardware_caps.c b/libduckbox/hardware_caps.c index 733e60c..6a2cb1b 100644 --- a/libduckbox/hardware_caps.c +++ b/libduckbox/hardware_caps.c @@ -26,8 +26,10 @@ hw_caps_t *get_hwcaps(void) memset(&caps, 0, sizeof(hw_caps_t)); + if (access("/dev/dvb/adapter0/video1", F_OK) != -1) + caps.can_pip = 1; + #if BOXMODEL_UFS910 - initialized = 1; strcpy(caps.boxvendor, "KATHREIN"); strcpy(caps.boxname, "UFS910"); strcpy(caps.boxarch, "STX7100"); @@ -45,7 +47,6 @@ hw_caps_t *get_hwcaps(void) caps.display_xres = 16; #endif #if BOXMODEL_UFS912 - initialized = 1; strcpy(caps.boxvendor, "KATHREIN"); strcpy(caps.boxname, "UFS912"); strcpy(caps.boxarch, "STX7111"); @@ -63,7 +64,6 @@ hw_caps_t *get_hwcaps(void) caps.display_xres = 16; #endif #if BOXMODEL_UFS913 - initialized = 1; strcpy(caps.boxvendor, "KATHREIN"); strcpy(caps.boxname, "UFS913"); strcpy(caps.boxarch, "STX7105"); @@ -81,7 +81,6 @@ hw_caps_t *get_hwcaps(void) caps.display_xres = 16; #endif #if BOXMODEL_UFS922 - initialized = 1; strcpy(caps.boxvendor, "KATHREIN"); strcpy(caps.boxname, "UFS922"); strcpy(caps.boxarch, "STX7109"); @@ -98,7 +97,6 @@ hw_caps_t *get_hwcaps(void) caps.display_xres = 16; #endif #if BOXMODEL_ATEVIO7500 - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "ATEVIO7500"); strcpy(caps.boxarch, "STX7105"); @@ -116,7 +114,6 @@ hw_caps_t *get_hwcaps(void) caps.display_xres = 12; #endif #if BOXMODEL_FORTIS_HDBOX - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "HDBOX"); strcpy(caps.boxarch, "STX7109"); @@ -134,7 +131,6 @@ hw_caps_t *get_hwcaps(void) caps.display_xres = 12; #endif #if BOXMODEL_OCTAGON1008 - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "OCTAGON1008"); strcpy(caps.boxarch, "STX7109"); @@ -151,7 +147,6 @@ hw_caps_t *get_hwcaps(void) caps.display_xres = 8; #endif #if BOXMODEL_CUBEREVO - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "CUBEREVO"); strcpy(caps.boxarch, "STX7109"); @@ -166,7 +161,6 @@ hw_caps_t *get_hwcaps(void) caps.has_CI = 2; #endif #if BOXMODEL_CUBEREVO_MINI - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "CUBEREVO-MINI"); strcpy(caps.boxarch, "STX7109"); @@ -181,7 +175,6 @@ hw_caps_t *get_hwcaps(void) caps.has_CI = 2; #endif #if BOXMODEL_CUBEREVO_MINI2 - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "CUBEREVO-MINI2"); strcpy(caps.boxarch, "STX7109"); @@ -198,7 +191,6 @@ hw_caps_t *get_hwcaps(void) caps.display_xres = 14; #endif #if BOXMODEL_CUBEREVO_250HD - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "CUBEREVO-250HD"); strcpy(caps.boxarch, "STX7109"); @@ -213,7 +205,6 @@ hw_caps_t *get_hwcaps(void) caps.has_CI = 0; #endif #if BOXMODEL_CUBEREVO_2000HD - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "CUBEREVO-2000HD"); strcpy(caps.boxarch, "STX7109"); @@ -228,7 +219,6 @@ hw_caps_t *get_hwcaps(void) caps.has_CI = 0; #endif #if BOXMODEL_CUBEREVO_3000HD - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "CUBEREVO-3000HD"); strcpy(caps.boxarch, "STX7109"); @@ -243,7 +233,6 @@ hw_caps_t *get_hwcaps(void) caps.has_CI = 2; #endif #if BOXMODEL_IPBOX9900 - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "IPBOX9900"); strcpy(caps.boxarch, "STX7109"); @@ -258,7 +247,6 @@ hw_caps_t *get_hwcaps(void) caps.has_CI = 2; #endif #if BOXMODEL_IPBOX99 - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "IPBOX99"); strcpy(caps.boxarch, "STX7109"); @@ -273,7 +261,6 @@ hw_caps_t *get_hwcaps(void) caps.has_CI = 0; #endif #if BOXMODEL_IPBOX55 - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "IPBOX55"); strcpy(caps.boxarch, "STX7109"); @@ -288,7 +275,6 @@ hw_caps_t *get_hwcaps(void) caps.has_CI = 0; #endif #if BOXMODEL_TF7700 - initialized = 1; strcpy(caps.boxvendor, "DUCKBOX"); strcpy(caps.boxname, "TF7700"); strcpy(caps.boxarch, "STX7109"); @@ -302,5 +288,7 @@ hw_caps_t *get_hwcaps(void) caps.has_fan = 0; caps.has_CI = 2; #endif + + initialized = 1; return ∩︀ } diff --git a/libgeneric-pc/hardware_caps.c b/libgeneric-pc/hardware_caps.c index 999e011..5b5afa3 100644 --- a/libgeneric-pc/hardware_caps.c +++ b/libgeneric-pc/hardware_caps.c @@ -27,7 +27,9 @@ hw_caps_t *get_hwcaps(void) memset(&caps, 0, sizeof(hw_caps_t)); - initialized = 1; + if (access("/dev/dvb/adapter0/video1", F_OK) != -1) + caps.can_pip = 1; + caps.can_cpufreq = 0; caps.can_shutdown = 1; /* for testing */ caps.display_type = HW_DISPLAY_LINE_TEXT; @@ -48,5 +50,6 @@ hw_caps_t *get_hwcaps(void) else fprintf(stderr, "%s: uname() failed: %m\n", __func__); + initialized = 1; return ∩︀ } diff --git a/libmipsbox/hardware_caps.c b/libmipsbox/hardware_caps.c index 14917fd..422b159 100644 --- a/libmipsbox/hardware_caps.c +++ b/libmipsbox/hardware_caps.c @@ -29,8 +29,10 @@ hw_caps_t *get_hwcaps(void) memset(&caps, 0, sizeof(hw_caps_t)); + if (access("/dev/dvb/adapter0/video1", F_OK) != -1) + caps.can_pip = 1; + #if BOXMODEL_VUDUO - initialized = 1; caps.has_CI = 2; caps.can_cec = 1; caps.can_cpufreq = 0; @@ -51,5 +53,7 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxname, "DUO"); strcpy(caps.boxarch, "BCM7335"); #endif + + initialized = 1; return ∩︀ } diff --git a/libraspi/hardware_caps.c b/libraspi/hardware_caps.c index 69d5be3..6b9009a 100644 --- a/libraspi/hardware_caps.c +++ b/libraspi/hardware_caps.c @@ -25,7 +25,9 @@ hw_caps_t *get_hwcaps(void) memset(&caps, 0, sizeof(hw_caps_t)); - initialized = 1; + if (access("/dev/dvb/adapter0/video1", F_OK) != -1) + caps.can_pip = 1; + caps.can_cpufreq = 0; caps.can_shutdown = 1; /* for testing */ caps.display_type = HW_DISPLAY_LINE_TEXT; @@ -37,5 +39,6 @@ hw_caps_t *get_hwcaps(void) strcpy(caps.boxvendor, "Raspberry"); strcpy(caps.boxname, "Pi"); + initialized = 1; return ∩︀ } diff --git a/libspark/hardware_caps.c b/libspark/hardware_caps.c index fd0497b..8500d47 100644 --- a/libspark/hardware_caps.c +++ b/libspark/hardware_caps.c @@ -29,7 +29,9 @@ hw_caps_t *get_hwcaps(void) memset(&caps, 0, sizeof(hw_caps_t)); - initialized = 1; + if (access("/dev/dvb/adapter0/video1", F_OK) != -1) + caps.can_pip = 1; + caps.has_CI = 0; caps.can_cec = 1; caps.can_cpufreq = 1; @@ -173,5 +175,7 @@ hw_caps_t *get_hwcaps(void) tmp = "(NO STB_ID FOUND)"; strcpy(caps.boxname, tmp); } + + initialized = 1; return ∩︀ }