diff --git a/3rdparty/patches/ravenna-alsa-lkm-disable-ptp-checksum.patch b/3rdparty/patches/ravenna-alsa-lkm-disable-ptp-checksum.patch new file mode 100644 index 0000000..054a3d9 --- /dev/null +++ b/3rdparty/patches/ravenna-alsa-lkm-disable-ptp-checksum.patch @@ -0,0 +1,19 @@ +diff --git a/driver/PTP.c b/driver/PTP.c +--- a/driver/PTP.c ++++ b/driver/PTP.c +@@ -306,6 +306,7 @@ EDispatchResult process_PTP_packet(TClock_PTP* self, TUDPPacketBase* pUDPPacketB + } + + // verify checksum ++#if 0 + if (pUDPPacketBase->UDPHeader.usCheckSum != 0) + { + uint16_t ui16CheckSum = MTAL_ComputeUDPChecksum(&pPTPPacketBase->UDPHeader, MTAL_SWAP16(pUDPPacketBase->UDPHeader.usLen), (unsigned short*)&pPTPPacketBase->IPV4Header.ui32SrcIP, (unsigned short*)&pPTPPacketBase->IPV4Header.ui32DestIP); +@@ -319,6 +320,7 @@ EDispatchResult process_PTP_packet(TClock_PTP* self, TUDPPacketBase* pUDPPacketB + return DR_PACKET_ERROR; + } + } ++#endif + + //DumpPTPV2MsgHeader(&pPTPPacketBase->V2MsgHeader); + diff --git a/3rdparty/patches/ravenna-alsa-lkm-kernel-v5.patch b/3rdparty/patches/ravenna-alsa-lkm-kernel-v5.patch index bb77ef3..e115c31 100644 --- a/3rdparty/patches/ravenna-alsa-lkm-kernel-v5.patch +++ b/3rdparty/patches/ravenna-alsa-lkm-kernel-v5.patch @@ -1,28 +1,3 @@ -diff --git a/driver/MTAL_LKernelAPI.c b/driver/MTAL_LKernelAPI.c -index 164f315..a993b41 100644 ---- a/driver/MTAL_LKernelAPI.c -+++ b/driver/MTAL_LKernelAPI.c -@@ -35,7 +35,7 @@ - #include - #include - --#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0) - #include - #else - #include -@@ -214,7 +214,10 @@ uint64_t MTAL_LK_GetCounterFreq(void) - uint64_t MTAL_LK_GetSystemTime(void) - { - uint64_t timeVal = 0ull; --#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0) -+ struct timespec64 ts64; -+ ktime_get_real_ts64(&ts64); -+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) - struct timespec64 ts64; - getnstimeofday64(&ts64); - #else diff --git a/driver/module_timer.c b/driver/module_timer.c index 5f64a8e..0ba770f 100644 --- a/driver/module_timer.c diff --git a/build.sh b/build.sh index 198095b..8583b69 100755 --- a/build.sh +++ b/build.sh @@ -11,7 +11,7 @@ cd 3rdparty if [ ! -d ravenna-alsa-lkm.git ]; then git clone https://bitbucket.org/MergingTechnologies/ravenna-alsa-lkm.git cd ravenna-alsa-lkm - git checkout 5a06f0d33c18e532eb5dac3ad90c0acd59fbabd7 + git checkout 35c708f3747474130790cf508c064360a9589ac8 cd driver echo "Apply patches to ravenna-alsa-lkm module ..." git apply ../../patches/ravenna-alsa-lkm-kernel-v5.patch @@ -19,6 +19,7 @@ if [ ! -d ravenna-alsa-lkm.git ]; then git apply ../../patches/ravenna-alsa-lkm-fixes.patch git apply ../../patches/ravenna-alsa-lkm-arm-32bit.patch git apply ../../patches/ravenna-alsa-lkm-add-codec-am824.patch + git apply ../../patches/ravenna-alsa-lkm-disable-ptp-checksum.patch echo "Building ravenna-alsa-lkm kernel module ..." make cd ../.. diff --git a/daemon/README.md b/daemon/README.md index 0193450..8dda03c 100644 --- a/daemon/README.md +++ b/daemon/README.md @@ -425,6 +425,7 @@ Example: "rtp_sac_error": false, "receiving_rtp_packet": false, "some_muted": false, + "all_muted": false, "muted": true }, "sink_min_time": 0 @@ -447,6 +448,8 @@ where: > - **some\_muted** JSON boolean (not used) +> - **all\_muted** JSON boolean (not used) + > - **muted** JSON boolean specifying whether the sink is currently muted. > **sink\_min\_time** JSON number specifying the minimum source RTP packet arrival time. diff --git a/daemon/json.cpp b/daemon/json.cpp index 4ffceb8..6745bd8 100644 --- a/daemon/json.cpp +++ b/daemon/json.cpp @@ -158,6 +158,7 @@ std::string sink_status_to_json(const SinkStreamStatus& status) { << ", \n \"rtp_sac_error\": " << status.is_rtp_sac_error << ", \n \"receiving_rtp_packet\": " << status.is_receiving_rtp_packet << ", \n \"some_muted\": " << status.is_some_muted + << ", \n \"all_muted\": " << status.is_all_muted << ", \n \"muted\": " << status.is_muted << "\n }," << "\n \"sink_min_time\": " << status.min_time << "\n}\n"; return ss.str(); diff --git a/daemon/session_manager.cpp b/daemon/session_manager.cpp index 0cd4f4f..e86a6a0 100644 --- a/daemon/session_manager.cpp +++ b/daemon/session_manager.cpp @@ -830,6 +830,7 @@ std::error_code SessionManager::get_sink_status( sink_status.is_receiving_rtp_packet = status.u.flags & 0x10; sink_status.is_muted = status.u.flags & 0x20; sink_status.is_some_muted = status.u.flags & 0x40; + sink_status.is_all_muted = status.u.flags & 0x80; sink_status.min_time = status.sink_min_time; } diff --git a/daemon/session_manager.hpp b/daemon/session_manager.hpp index 0e7b944..cd3dc98 100644 --- a/daemon/session_manager.hpp +++ b/daemon/session_manager.hpp @@ -65,6 +65,7 @@ struct SinkStreamStatus { bool is_receiving_rtp_packet{false}; bool is_muted{false}; bool is_some_muted{false}; + bool is_all_muted{false}; int min_time{0}; }; diff --git a/daemon/tests/daemon_test.cpp b/daemon/tests/daemon_test.cpp index 318c833..8065689 100644 --- a/daemon/tests/daemon_test.cpp +++ b/daemon/tests/daemon_test.cpp @@ -594,8 +594,10 @@ BOOST_AUTO_TEST_CASE(sink_check_status) { boost::property_tree::read_json(ss, pt); //auto is_sink_muted = pt.get("sink_flags.muted"); auto is_sink_some_muted = pt.get("sink_flags.some_muted"); - //BOOST_REQUIRE_MESSAGE(is_sink_muted, "sink is not receiving packets"); - BOOST_REQUIRE_MESSAGE(!is_sink_some_muted, "sink is not receiving packets"); + auto is_sink_all_muted = pt.get("sink_flags.all_muted"); + //BOOST_REQUIRE_MESSAGE(is_sink_muted, "sink is muted"); + BOOST_REQUIRE_MESSAGE(!is_sink_all_muted, "all sinks are mutes"); + BOOST_REQUIRE_MESSAGE(!is_sink_some_muted, "some sinks are muted"); BOOST_REQUIRE_MESSAGE(cli.remove_sink(0), "removed sink 0"); } diff --git a/webui/src/Sinks.js b/webui/src/Sinks.js index 389c38f..d9bef9d 100644 --- a/webui/src/Sinks.js +++ b/webui/src/Sinks.js @@ -72,6 +72,8 @@ class SinkEntry extends Component { flags += 'receiving'; if (status.sink_flags._some_muted) flags += (flags ? ',' : '') + 'some muted'; + if (status.sink_flags._all_muted) + flags += (flags ? ',' : '') + 'all muted'; if (status.sink_flags._muted) flags += (flags ? ',' : '') + 'muted'; this.setState({