From 493cc437a484e596beb5768c67c5d493d6872d3e Mon Sep 17 00:00:00 2001 From: Daniel Kulp Date: Sat, 16 Nov 2024 17:15:23 -0500 Subject: [PATCH] Stub in a platform for the 64bit Beagles, get fppd compiling and running --- .vscode/c_cpp_properties.json | 1 + src/boot/FPPINIT.cpp | 17 ++++++++++------- src/boot/FPPRTC.cpp | 11 +++++++++-- src/channeloutput/BBBSerial.cpp | 6 +----- src/channeloutput/ChannelOutputSetup.cpp | 2 +- src/channeloutput/GenericSPI.cpp | 4 ++++ src/fppd.cpp | 4 +++- src/fseq/FSEQFile.cpp | 2 +- src/makefiles/libfpp-co-FalconV5Support.mk | 10 ++++++++-- src/makefiles/platform/bb.mk | 14 +++++++++----- src/mediaoutput/mediaoutput.cpp | 10 +++++----- src/non-gpl/BBB48String/BBB48String.cpp | 2 +- src/non-gpl/CapeUtils/CapeUtils.cpp | 10 ++++++++-- .../FalconV5Support/FalconV5Support.cpp | 4 ---- .../FalconV5Support/libFalconV5.so.aarch64.zst | Bin 0 -> 5961 bytes src/playlist/PlaylistEntryMedia.cpp | 10 +++++----- src/sensors/Sensors.cpp | 2 +- 17 files changed, 67 insertions(+), 42 deletions(-) create mode 100755 src/non-gpl/FalconV5Support/libFalconV5.so.aarch64.zst diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 338b29eb7..aa3abd968 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -10,6 +10,7 @@ ], "defines": [ "PLATFORM_BBB", + "PLATFORM_BB64", "PLATFORM_PI" ], "compilerPath": "/usr/bin/g++", diff --git a/src/boot/FPPINIT.cpp b/src/boot/FPPINIT.cpp index 90628f001..177ca31ce 100644 --- a/src/boot/FPPINIT.cpp +++ b/src/boot/FPPINIT.cpp @@ -327,18 +327,21 @@ void configureBBB() { } // Beagle LEDS - std::string led; - if (getRawSetting("BBBLedPWR", led) && !led.empty()) { - if (led == "0") { - led = "0x00"; + std::string pled; + if (getRawSetting("BBBLedPWR", pled) && !pled.empty()) { + if (pled == "0") { + pled = "0x00"; } else { - led = "0x38"; + pled = "0x38"; } exec("/usr/sbin/i2cset -f -y 0 0x24 0x0b 0x6e"); - exec("/usr/sbin/i2cset -f -y 0 0x24 0x13 " + led); + exec("/usr/sbin/i2cset -f -y 0 0x24 0x13 " + pled); exec("/usr/sbin/i2cset -f -y 0 0x24 0x0b 0x6e"); - exec("/usr/sbin/i2cset -f -y 0 0x24 0x13 " + led); + exec("/usr/sbin/i2cset -f -y 0 0x24 0x13 " + pled); } +#endif +#if defined(PLATFORM_BBB) || defined(PLATFORM_BB64) + std::string led; if (getRawSetting("BBBLeds0", led) && !led.empty()) { PutFileContents("/sys/class/leds/beaglebone:green:usr0/trigger", led); } diff --git a/src/boot/FPPRTC.cpp b/src/boot/FPPRTC.cpp index 2e252f633..7500cdab4 100644 --- a/src/boot/FPPRTC.cpp +++ b/src/boot/FPPRTC.cpp @@ -45,7 +45,7 @@ static int getSettingInt() { } static int getBus() { -#ifdef PLATFORM_BBB +#if defined(PLATFORM_BBB) || defined(PLATFORM_BB64) return 2; #elif defined(PLATFORM_PI) return 1; @@ -174,6 +174,13 @@ static std::string getRTCDev() { rtc = "/dev/rtc1"; } } +#elif defined(PLATFORM_BB64) + if (FileExists("/sys/class/rtc/rtc1/name")) { + std::string drv = GetFileContents("/sys/class/rtc/rtc1/name"); + if (!contains(drv, "rtc-ti-k3")) { + rtc = "/dev/rtc1"; + } + } #elif defined(PLATFORM_PI) if (FileExists("/sys/class/rtc/rtc0/name")) { std::string drv = GetFileContents("/sys/class/rtc/rtc0/name"); @@ -209,7 +216,7 @@ int main(int argc, char* argv[]) { if (contains(ret, "Remote I/O error")) { removeI2CDevice(dev, getBus()); } else { -#ifdef PLATFORM_BBB +#if defined(PLATFORM_BBB) || defined(PLATFORMBB64) // set the built in rtc to the same time as read from the RTC if (rtc != "/dev/rtc0") { hwclock("-w", rtc.c_str()); diff --git a/src/channeloutput/BBBSerial.cpp b/src/channeloutput/BBBSerial.cpp index dd79e3b56..6d659a051 100644 --- a/src/channeloutput/BBBSerial.cpp +++ b/src/channeloutput/BBBSerial.cpp @@ -161,11 +161,7 @@ int BBBSerialOutput::Init(Json::Value config) { string pru_program = "/tmp/FalconSerial.out"; const char* mode = BBB_PRU ? "gpio" : "pruout"; - if (BBB_PRU) { - args.push_back("-DRUNNING_ON_PRU1"); - } else { - args.push_back("-DRUNNING_ON_PRU0"); - } + args.push_back("-DRUNNING_ON_PRU" + std::to_string(BBB_PRU)); std::string verPostf = ""; std::string device = config["device"].asString(); diff --git a/src/channeloutput/ChannelOutputSetup.cpp b/src/channeloutput/ChannelOutputSetup.cpp index 7bdb375ef..5d554e5b6 100644 --- a/src/channeloutput/ChannelOutputSetup.cpp +++ b/src/channeloutput/ChannelOutputSetup.cpp @@ -251,7 +251,7 @@ int InitializeChannelOutputs(void) { "/co-other.json", "/co-pixelStrings.json", "/co-pwm.json", -#ifdef PLATFORM_BBB +#if defined(PLATFORM_BBB) || defined(PLATFORM_BB64) "/co-bbbStrings.json", #endif "/channeloutputs.json", diff --git a/src/channeloutput/GenericSPI.cpp b/src/channeloutput/GenericSPI.cpp index 940499223..37da1665f 100644 --- a/src/channeloutput/GenericSPI.cpp +++ b/src/channeloutput/GenericSPI.cpp @@ -29,6 +29,10 @@ //TODO need to confirm these #define MIN_SPI_SPEED_HZ 1500 #define MAX_SPI_SPEED_HZ 48000000 +#elif PLATFORM_BB64 +//TODO need to confirm these +#define MIN_SPI_SPEED_HZ 32000 +#define MAX_SPI_SPEED_HZ 125000000 #elif PLATFORM_ARMBIAN #define MIN_SPI_SPEED_HZ 50000 #define MAX_SPI_SPEED_HZ 2500000 diff --git a/src/fppd.cpp b/src/fppd.cpp index 4b4332128..c43c7bbbb 100644 --- a/src/fppd.cpp +++ b/src/fppd.cpp @@ -87,7 +87,7 @@ #include "fppd.h" -#if defined(PLATFORM_BBB) +#if defined(PLATFORM_BBB) || defined(PLATFORM_BB64) #include "util/BBBUtils.h" #define PLAT_GPIO_CLASS BBBPinProvider #elif defined(PLATFORM_PI) @@ -332,6 +332,8 @@ static void handleCrash(int s) { char sysType[] = "Armbian"; #elif defined(PLATFORM_BBB) char sysType[] = "BBB"; +#elif defined(PLATFORM_BB64) + char sysType[] = "BB64"; #elif defined(PLATFORM_PI) char sysType[] = "Pi"; #elif defined(PLATFORM_OSX) diff --git a/src/fseq/FSEQFile.cpp b/src/fseq/FSEQFile.cpp index 4274cac07..758c1899f 100644 --- a/src/fseq/FSEQFile.cpp +++ b/src/fseq/FSEQFile.cpp @@ -67,7 +67,7 @@ static void SetThreadName(const std::string& name) { #define PLATFORM_UNKNOWN #endif -#if defined(PLATFORM_PI) || defined(PLATFORM_BBB) || defined(PLATFORM_UNKNOWN) || defined(PLATFORM_DEBIAN) || defined(PLATFORM_FEDORA) || defined(PLATFORM_UBUNTU) || defined(PLATFORM_MINT) +#if defined(PLATFORM_PI) || defined(PLATFORM_BBB) || defined(PLATFORM_BB64) || defined(PLATFORM_UNKNOWN) || defined(PLATFORM_DEBIAN) || defined(PLATFORM_FEDORA) || defined(PLATFORM_UBUNTU) || defined(PLATFORM_MINT) // for FPP, use FPP logging #include "Warnings.h" #include "log.h" diff --git a/src/makefiles/libfpp-co-FalconV5Support.mk b/src/makefiles/libfpp-co-FalconV5Support.mk index a0709a277..6846c4612 100644 --- a/src/makefiles/libfpp-co-FalconV5Support.mk +++ b/src/makefiles/libfpp-co-FalconV5Support.mk @@ -7,8 +7,14 @@ LIBS_fpp_FalconV5Support_so += -L. -lfpp -ljsoncpp -lFalconV5 -Wl,-rpath=$(SRCDI TARGETS += libFalconV5.$(SHLIB_EXT) libfpp-FalconV5Support.$(SHLIB_EXT) non-gpl/FalconV5Support/FalconV5PRUListener_pru0.out OBJECTS_ALL+=$(OBJECTS_fpp_FalconV5Support_so) -libFalconV5.$(SHLIB_EXT): non-gpl/FalconV5Support/libFalconV5.$(SHLIB_EXT).zst - zstd -fd non-gpl/FalconV5Support/libFalconV5.$(SHLIB_EXT).zst -o libFalconV5.$(SHLIB_EXT) +ifeq '$(ARMV)' 'aarch64' +ZEXT=.aarch64 +else +ZEXT= +endif + +libFalconV5.$(SHLIB_EXT): non-gpl/FalconV5Support/libFalconV5.$(SHLIB_EXT)$(ZEXT).zst + zstd -fd non-gpl/FalconV5Support/libFalconV5.$(SHLIB_EXT)$(ZEXT).zst -o libFalconV5.$(SHLIB_EXT) libfpp-FalconV5Support.$(SHLIB_EXT): $(OBJECTS_fpp_FalconV5Support_so) libfpp.$(SHLIB_EXT) libFalconV5.$(SHLIB_EXT) $(CCACHE) $(CC) -shared $(CFLAGS_$@) $(OBJECTS_fpp_FalconV5Support_so) $(LIBS_fpp_FalconV5Support_so) $(LDFLAGS) $(LDFLAGS_fpp_FalconV5Support_so) -o $@ diff --git a/src/makefiles/platform/bb.mk b/src/makefiles/platform/bb.mk index 994af68cd..29be56013 100644 --- a/src/makefiles/platform/bb.mk +++ b/src/makefiles/platform/bb.mk @@ -1,9 +1,6 @@ # BeagleBone Black ifeq '$(ARCH)' 'BeagleBone Black' -CFLAGS += \ - -DPLATFORM_BBB - LIBS_GPIO_ADDITIONS= OBJECTS_GPIO_ADDITIONS+=util/BBBUtils.o LIBS_GPIO_ADDITIONS+=-lgpiod -lgpiodcxx @@ -18,7 +15,14 @@ BUILD_FPPINIT=1 LDFLAGS=-lrt -lpthread SHLIB_EXT=so -# Beagles are ALL armv7a processors with neon -CFLAGS+=-march=armv7-a+neon -mfloat-abi=hard -mfpu=neon +ARMV := $(shell uname -m 2> /dev/null) +$(shell echo "Building FPP on '$(ARMV)' architecture" 1>&2) + +ifeq '$(ARMV)' 'aarch64' +CFLAGS+=-DPLATFORM_BB64 +else +# All 32bit Beagles are armv7a processors with neon +CFLAGS+=-DPLATFORM_BBB -march=armv7-a+neon -mfloat-abi=hard -mfpu=neon +endif endif diff --git a/src/mediaoutput/mediaoutput.cpp b/src/mediaoutput/mediaoutput.cpp index ecf224c34..72e9638d8 100644 --- a/src/mediaoutput/mediaoutput.cpp +++ b/src/mediaoutput/mediaoutput.cpp @@ -313,11 +313,11 @@ int OpenMediaOutput(const std::string& filename) { lock.lock(); std::string vOut = getSetting("VideoOutput"); if (vOut == "") { -#if !defined(PLATFORM_BBB) - vOut = "--HDMI--"; -#else - vOut = "--Disabled--"; -#endif + if (FileExists("/sys/class/drm/card0-HDMI-A-1/status") || FileExists("/sys/class/drm/card1-HDMI-A-1/status")) { + vOut = "--HDMI--"; + } else { + vOut = "--Disabled--"; + } } mediaOutput = CreateMediaOutput(tmpFile, vOut); if (!mediaOutput) { diff --git a/src/non-gpl/BBB48String/BBB48String.cpp b/src/non-gpl/BBB48String/BBB48String.cpp index 94df7f0b1..390e1cdd6 100644 --- a/src/non-gpl/BBB48String/BBB48String.cpp +++ b/src/non-gpl/BBB48String/BBB48String.cpp @@ -224,7 +224,7 @@ void BBB48StringOutput::createOutputLengths(FrameData& d, const std::string& pfx } if (sizes.empty()) { - args.push_back("-DFIRST_CHECK=NO_PIXELS_CHECK"); + args.emplace_back("-DFIRST_CHECK=NO_PIXELS_CHECK"); } else { int sz = sizes.begin()->first; std::string v = "-DFIRST_CHECK=CHECK_" + pfx; diff --git a/src/non-gpl/CapeUtils/CapeUtils.cpp b/src/non-gpl/CapeUtils/CapeUtils.cpp index 41e113f58..4bc198495 100644 --- a/src/non-gpl/CapeUtils/CapeUtils.cpp +++ b/src/non-gpl/CapeUtils/CapeUtils.cpp @@ -52,7 +52,7 @@ #include #endif -#ifdef PLATFORM_BBB +#if defined(PLATFORM_BBB) || defined(PLATFORM_BB64) #define I2C_DEV 2 #elif defined(PLATFORM_PI) #define I2C_DEV 1 @@ -272,6 +272,9 @@ static uint8_t* get_file_contents(const std::string& path, int& len) { #ifdef PLATFORM_PI static const std::string PLATFORM_DIR = "pi"; const std::string& getPlatformCapeDir() { return PLATFORM_DIR; } +#elif defined(PLATFORM_BB64) +static const std::string PLATFORM_DIR = "bb64"; +const std::string& getPlatformCapeDir() { return PLATFORM_DIR; } #elif defined(PLATFORM_BBB) static const std::string PLATFORM_DIR_BBB = "bbb"; static const std::string PLATFORM_DIR_PB = "pb"; @@ -359,6 +362,9 @@ static void processBootConfig(Json::Value& bootConfig) { const std::string fileName = FPP_BOOT_DIR "/config.txt"; #elif defined(PLATFORM_BBB) const std::string fileName = FPP_BOOT_DIR "/uEnv.txt"; +#elif defined(PLATFORM_BB64) + // TODO - booting is VERY different on BB64 + const std::string fileName; #elif defined(PLATFORM_ARMBIAN) const std::string fileName = FPP_BOOT_DIR "/armbianEnv.txt"; #else @@ -1119,7 +1125,7 @@ class CapeInfo { std::string mapV5Config(const std::string& orig) { std::string stringsConfigFile = ""; std::string platformDir = "/opt/fpp/capes/" + getPlatformCapeDir(); -#if defined(PLATFORM_BBB) + #if defined(PLATFORM_BBB) || defined(PLATFORM_BB64) stringsConfigFile = "/home/fpp/media/config/co-bbbStrings.json"; #elif defined(PLATFORM_PI) stringsConfigFile = "/home/fpp/media/config/co-pixelStrings.json"; diff --git a/src/non-gpl/FalconV5Support/FalconV5Support.cpp b/src/non-gpl/FalconV5Support/FalconV5Support.cpp index 4f7755816..d8b5bf575 100644 --- a/src/non-gpl/FalconV5Support/FalconV5Support.cpp +++ b/src/non-gpl/FalconV5Support/FalconV5Support.cpp @@ -22,12 +22,10 @@ #include "channeloutput/serialutil.h" #include "util/GPIOUtils.h" -#ifdef PLATFORM_BBB #include "util/BBBPruUtils.h" #include "util/BBBUtils.h" #include #include -#endif extern "C" { bool encodeFalconV5Packet(const Json::Value& description, uint8_t* packet); @@ -38,13 +36,11 @@ class FalconV5Listener { public: FalconV5Listener(const Json::Value& config) { pin = config["pin"].asString(); -#ifdef PLATFORM_BBB const PinCapabilities& p = PinCapabilities::getPinByName(pin); p.configPin("pruin"); const BBBPinCapabilities* pc = (const BBBPinCapabilities*)p.ptr(); offset = pc->pruPin; -#endif } ~FalconV5Listener() { const PinCapabilities& p = PinCapabilities::getPinByName(pin); diff --git a/src/non-gpl/FalconV5Support/libFalconV5.so.aarch64.zst b/src/non-gpl/FalconV5Support/libFalconV5.so.aarch64.zst new file mode 100755 index 0000000000000000000000000000000000000000..90761dde7a374469bd2a0ee7c621a243d99b7ff6 GIT binary patch literal 5961 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 literal 0 HcmV?d00001 diff --git a/src/playlist/PlaylistEntryMedia.cpp b/src/playlist/PlaylistEntryMedia.cpp index acdb47301..a9c9c3dca 100644 --- a/src/playlist/PlaylistEntryMedia.cpp +++ b/src/playlist/PlaylistEntryMedia.cpp @@ -336,11 +336,11 @@ int PlaylistEntryMedia::OpenMediaOutput(void) { vOut = getSetting("VideoOutput"); } if (vOut == "") { -#if !defined(PLATFORM_BBB) - vOut = "--HDMI--"; -#else - vOut = "--Disabled--"; -#endif + if (FileExists("/sys/class/drm/card0-HDMI-A-1/status") || FileExists("/sys/class/drm/card1-HDMI-A-1/status")) { + vOut = "--HDMI--"; + } else { + vOut = "--Disabled--"; + } } m_mediaOutput = CreateMediaOutput(tmpFile, vOut); diff --git a/src/sensors/Sensors.cpp b/src/sensors/Sensors.cpp index 2b88543be..9057a8317 100644 --- a/src/sensors/Sensors.cpp +++ b/src/sensors/Sensors.cpp @@ -29,7 +29,7 @@ #include "Sensors.h" -#ifdef PLATFORM_BBB +#if defined(PLATFORM_BBB) || defined(PLATFORM_BB64) #define I2C_DEV 2 #else #define I2C_DEV 1